diff --git a/src/cycling.c b/src/cycling.c index 5171168b..b206b657 100644 --- a/src/cycling.c +++ b/src/cycling.c @@ -219,9 +219,11 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) swpanel = wInitSwitchPanel(scr, 0); oldFocused = wwin; - newFocused = wSwitchPanelSelectNext(swpanel, next); - wWindowFocus(newFocused, oldFocused); - oldFocused = newFocused; + if (swpanel) { + newFocused = wSwitchPanelSelectNext(swpanel, next); + wWindowFocus(newFocused, oldFocused); + oldFocused = newFocused; + } #else /* !MOX_CYCLING */ if (next) { if (wPreferences.windows_cycling) @@ -260,9 +262,11 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) || ev.xkey.keycode == rightKey) { #ifdef MOX_CYCLING - newFocused = wSwitchPanelSelectNext(swpanel, False); - wWindowFocus(newFocused, oldFocused); - oldFocused = newFocused; + if (swpanel) { + newFocused = wSwitchPanelSelectNext(swpanel, False); + wWindowFocus(newFocused, oldFocused); + oldFocused = newFocused; + } #else /* !MOX_CYCLING */ newFocused = nextToFocusAfter(newFocused); wWindowFocus(newFocused, oldFocused); @@ -279,9 +283,11 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) || ev.xkey.keycode == leftKey) { #ifdef MOX_CYCLING - newFocused = wSwitchPanelSelectNext(swpanel, True); - wWindowFocus(newFocused, oldFocused); - oldFocused = newFocused; + if (swpanel) { + newFocused = wSwitchPanelSelectNext(swpanel, True); + wWindowFocus(newFocused, oldFocused); + oldFocused = newFocused; + } #else /* !MOX_CYCLING */ newFocused = nextToFocusBefore(newFocused); wWindowFocus(newFocused, oldFocused); @@ -294,13 +300,15 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) } #endif /* !MOX_CYCLING */ } else if (ev.type == MotionNotify) { - WWindow *tmp; - tmp = wSwitchPanelHandleEvent(swpanel, &ev); - if (tmp) { - newFocused = tmp; - wWindowFocus(newFocused, oldFocused); - oldFocused = newFocused; - } + WWindow *tmp; + if (swpanel) { + tmp = wSwitchPanelHandleEvent(swpanel, &ev); + if (tmp) { + newFocused = tmp; + wWindowFocus(newFocused, oldFocused); + oldFocused = newFocused; + } + } } else { #ifdef DEBUG printf("Got something else\n"); @@ -340,7 +348,7 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) wSwitchPanelDestroy(swpanel); #endif - if (wPreferences.circ_raise) { + if (wPreferences.circ_raise && newFocused) { wRaiseFrame(newFocused->frame->core); CommitStacking(scr); } diff --git a/src/switchpanel.c b/src/switchpanel.c index 823dc11e..76ba785c 100644 --- a/src/switchpanel.c +++ b/src/switchpanel.c @@ -50,6 +50,7 @@ struct SwitchPanel { extern WPreferences wPreferences; +#define ICON_IDEAL_SIZE 64 #define ICON_EXTRASPACE 4 static void addIconForWindow(WSwitchPanel *panel, WWindow *wwin, int iconWidth) @@ -64,11 +65,9 @@ static void addIconForWindow(WSwitchPanel *panel, WWindow *wwin, int iconWidth) image = RRetainImage(wwin->net_icon_image); if (!image) image = wDefaultGetImage(panel->scr, wwin->wm_instance, wwin->wm_class); - if (!image) - if (image && (abs(image->width - iconWidth) > 4 || abs(image->height - iconWidth) > 4)) { + if (image && (abs(image->width - iconWidth) > 2 || abs(image->height - iconWidth) > 2)) { RImage *nimage; - nimage= RScaleImage(image, iconWidth, (image->height * iconWidth / image->width)); RReleaseImage(image); image= nimage; @@ -116,7 +115,7 @@ WSwitchPanel *wInitSwitchPanel(WScreen *scr, int workspace) int i; int width; int height; - int iconWidth = 48; + int iconWidth = ICON_IDEAL_SIZE; WMBox *vbox; panel->current= 0; @@ -143,7 +142,7 @@ WSwitchPanel *wInitSwitchPanel(WScreen *scr, int workspace) iconWidth = width / WMGetArrayItemCount(panel->windows) - ICON_EXTRASPACE; } - if (iconWidth < 16) + if (iconWidth < 16 || WMGetArrayItemCount(panel->windows) == 0) { /* if there are too many windows, don't bother trying to show the panel */ WMFreeArray(panel->windows); @@ -151,7 +150,7 @@ WSwitchPanel *wInitSwitchPanel(WScreen *scr, int workspace) return NULL; } - height= 48 + 20 + 10 + ICON_EXTRASPACE; + height= iconWidth + 20 + 10 + ICON_EXTRASPACE; panel->icons= WMCreateArray(WMGetArrayItemCount(panel->windows));