rendered paste bodydiff --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)