diff --git a/plugins/scale.c b/plugins/scale.c index 0d7eeb2..ab0f694 100644 --- a/plugins/scale.c +++ b/plugins/scale.c @@ -987,6 +987,65 @@ scaleCheckForWindowAt (CompScreen *s, } static void +scaleSelectWindow (CompWindow *w) + +{ + SCALE_DISPLAY (w->screen->display); + + if (sd->selectedWindow != w->id) + { + CompWindow *old, *new; + + old = findWindowAtScreen (w->screen, sd->selectedWindow); + new = findWindowAtScreen (w->screen, w->id); + + sd->selectedWindow = w->id; + + if (old) + addWindowDamage (old); + + if (new) + addWindowDamage (new); + } +} + +static Bool +scaleSelectWindowAt (CompScreen *s, + int x, + int y, + Bool moveInputFocus) + +{ + CompWindow *w; + + SCALE_DISPLAY (s->display); + + w = scaleCheckForWindowAt (s, x, y); + if (w && isScaleWin (w)) + { + SCALE_SCREEN (s); + + (*ss->selectWindow) (w); + + if (moveInputFocus) + { + sd->lastActiveNum = w->activeNum; + sd->lastActiveWindow = w->id; + + moveInputFocusToWindow (w); + } + + sd->hoveredWindow = w->id; + + return TRUE; + } + + sd->hoveredWindow = None; + + return FALSE; +} + +static void sendViewportMoveRequest (CompScreen *s, int x, int y) @@ -1075,17 +1134,6 @@ scaleTerminate (CompDisplay *d, { CompWindow *w; - for (w = s->windows; w; w = w->next) - { - SCALE_WINDOW (w); - - if (sw->slot) - { - sw->slot = 0; - sw->adjust = TRUE; - } - } - if (state & CompActionStateCancel) { if (d->activeWindow != sd->previousActiveWindow) @@ -1097,6 +1145,9 @@ scaleTerminate (CompDisplay *d, } else if (ss->state != SCALE_STATE_IN) { + if (state & CompActionStateTermButton) + scaleSelectWindowAt (s, pointerX, pointerY, TRUE); + w = findWindowAtScreen (s, sd->lastActiveWindow); if (w) { @@ -1113,6 +1164,17 @@ scaleTerminate (CompDisplay *d, } } + for (w = s->windows; w; w = w->next) + { + SCALE_WINDOW (w); + + if (sw->slot) + { + sw->slot = 0; + sw->adjust = TRUE; + } + } + ss->state = SCALE_STATE_IN; damageScreen (s); @@ -1372,65 +1434,6 @@ scaleInitiateOutput (CompDisplay *d, } static void -scaleSelectWindow (CompWindow *w) - -{ - SCALE_DISPLAY (w->screen->display); - - if (sd->selectedWindow != w->id) - { - CompWindow *old, *new; - - old = findWindowAtScreen (w->screen, sd->selectedWindow); - new = findWindowAtScreen (w->screen, w->id); - - sd->selectedWindow = w->id; - - if (old) - addWindowDamage (old); - - if (new) - addWindowDamage (new); - } -} - -static Bool -scaleSelectWindowAt (CompScreen *s, - int x, - int y, - Bool moveInputFocus) - -{ - CompWindow *w; - - SCALE_DISPLAY (s->display); - - w = scaleCheckForWindowAt (s, x, y); - if (w && isScaleWin (w)) - { - SCALE_SCREEN (s); - - (*ss->selectWindow) (w); - - if (moveInputFocus) - { - sd->lastActiveNum = w->activeNum; - sd->lastActiveWindow = w->id; - - moveInputFocusToWindow (w); - } - - sd->hoveredWindow = w->id; - - return TRUE; - } - - sd->hoveredWindow = None; - - return FALSE; -} - -static void scaleMoveFocusWindow (CompScreen *s, int dx, int dy)