From 4062382ffa20a89392155d020926995ba2ad93b9 Mon Sep 17 00:00:00 2001 From: Adam Purkrt Date: Thu, 18 Jan 2018 19:52:15 +0100 Subject: [PATCH] Fix to erratic unmaximization by dragging https://bugzilla.xfce.org/show_bug.cgi?id=11960 This patch fixes the erratic behaviour when unmaximizing a window by dragging it from the absolute top. clientToggleMaximized is now called with each motion event if a window is maximized, hence it is always unmaximized before possibly toggling maximization again in clientTile further down. --- src/moveresize.c | 58 +++++++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/src/moveresize.c b/src/moveresize.c index 8a23e763..3a754001 100644 --- a/src/moveresize.c +++ b/src/moveresize.c @@ -1032,47 +1032,37 @@ clientMoveEventFilter (XfwmEvent *event, gpointer data) if (FLAG_TEST (c->flags, CLIENT_FLAG_RESTORE_SIZE_POS)) { + gboolean size_changed; + /* to keep the distance from the edges of the window proportional. */ + double xratio, yratio; - if ((ABS (event->motion.x_root - passdata->mx) > 15) || - (ABS (event->motion.y_root - passdata->my) > 15)) - { - gboolean size_changed; - /* to keep the distance from the edges of the window proportional. */ - double xratio, yratio; + xratio = (event->motion.x_root - frameExtentX (c)) / (double) frameExtentWidth (c); + yratio = (event->motion.y_root - frameExtentY (c)) / (double) frameExtentHeight (c); - xratio = (event->motion.x_root - frameExtentX (c)) / (double) frameExtentWidth (c); - yratio = (event->motion.y_root - frameExtentY (c)) / (double) frameExtentHeight (c); + size_changed = clientToggleMaximized (c, c->flags & CLIENT_FLAG_MAXIMIZED, FALSE); + if (clientRestoreSizePos (c)) + { + size_changed = TRUE; + } + if (size_changed) + { + passdata->move_resized = TRUE; - size_changed = clientToggleMaximized (c, c->flags & CLIENT_FLAG_MAXIMIZED, FALSE); - if (clientRestoreSizePos (c)) + passdata->ox = c->x; + passdata->mx = frameExtentX (c) + passdata->px; + if ((passdata->mx < frameExtentX (c)) || (passdata->mx > frameExtentX (c) + frameExtentWidth (c))) { - size_changed = TRUE; + passdata->mx = CLAMP(frameExtentX (c) + frameExtentWidth (c) * xratio, frameExtentX (c), frameExtentX (c) + frameExtentWidth (c)); } - if (size_changed) - { - passdata->move_resized = TRUE; - - passdata->ox = c->x; - passdata->mx = frameExtentX (c) + passdata->px; - if ((passdata->mx < frameExtentX (c)) || (passdata->mx > frameExtentX (c) + frameExtentWidth (c))) - { - passdata->mx = CLAMP(frameExtentX (c) + frameExtentWidth (c) * xratio, frameExtentX (c), frameExtentX (c) + frameExtentWidth (c)); - } - passdata->oy = c->y; - passdata->my = frameExtentY (c) + passdata->py; - if ((passdata->my < frameExtentY (c)) || (passdata->my > frameExtentY (c) + frameExtentHeight (c))) - { - passdata->my = CLAMP(frameExtentY (c) + frameExtentHeight (c) * yratio, frameExtentY (c), frameExtentY (c) + frameExtentHeight (c)); - } - - passdata->configure_flags = CFG_FORCE_REDRAW; + passdata->oy = c->y; + passdata->my = frameExtentY (c) + passdata->py; + if ((passdata->my < frameExtentY (c)) || (passdata->my > frameExtentY (c) + frameExtentHeight (c))) + { + passdata->my = CLAMP(frameExtentY (c) + frameExtentHeight (c) * yratio, frameExtentY (c), frameExtentY (c) + frameExtentHeight (c)); } - } - else - { - event->motion.x_root = c->x - passdata->ox + passdata->mx; - event->motion.y_root = c->y - passdata->oy + passdata->my; + + passdata->configure_flags = CFG_FORCE_REDRAW; } } -- 2.16.0