From 44a8455758429b7879bf6163391b99956d9187b8 Mon Sep 17 00:00:00 2001 From: "P. Pronk" Date: Tue, 10 Jan 2017 12:45:53 +0100 Subject: [PATCH 2/2] Fix for issue 13284 --- src/client.c | 28 ++++++++++++++++++++++------ src/client.h | 5 +++++ src/moveresize.c | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/client.c b/src/client.c index 2bf15b6..4586eed 100644 --- a/src/client.c +++ b/src/client.c @@ -3366,6 +3366,24 @@ clientNewMaxSize (Client *c, XWindowChanges *wc, GdkRectangle *rect) gboolean clientToggleMaximized (Client *c, int mode, gboolean restore_position) { + g_return_val_if_fail (c != NULL, FALSE); + + TRACE ("entering clientToggleMaximized"); + + if (!CLIENT_CAN_MAXIMIZE_WINDOW (c)) + { + return FALSE; + } + + return clientToggleMaximizedAtPoint(c, + frameX (c) + (frameWidth (c) / 2), + frameY (c) + (frameHeight (c) / 2), + mode, restore_position); +} + +gboolean +clientToggleMaximizedAtPoint (Client *c, gint cx, gint cy, int mode, gboolean restore_position) +{ DisplayInfo *display_info; ScreenInfo *screen_info; XWindowChanges wc; @@ -3374,8 +3392,8 @@ clientToggleMaximized (Client *c, int mode, gboolean restore_position) g_return_val_if_fail (c != NULL, FALSE); - TRACE ("entering clientToggleMaximized"); - TRACE ("maximzing/unmaximizing client \"%s\" (0x%lx)", c->name, c->window); + TRACE ("entering clientToggleMaximizedAtPoint"); + TRACE ("maximizing/unmaximizing client \"%s\" (0x%lx)", c->name, c->window); if (!CLIENT_CAN_MAXIMIZE_WINDOW (c)) { @@ -3384,10 +3402,8 @@ clientToggleMaximized (Client *c, int mode, gboolean restore_position) screen_info = c->screen_info; display_info = screen_info->display_info; - myScreenFindMonitorAtPoint (screen_info, - frameX (c) + (frameWidth (c) / 2), - frameY (c) + (frameHeight (c) / 2), &rect); - + myScreenFindMonitorAtPoint (screen_info, cx, cy, &rect); + wc.x = c->x; wc.y = c->y; wc.width = c->width; diff --git a/src/client.h b/src/client.h index fd8b730..abfb6d1 100644 --- a/src/client.h +++ b/src/client.h @@ -467,6 +467,11 @@ void clientUpdateMaximizeSize (Client *); gboolean clientToggleMaximized (Client *, int, gboolean); +gboolean clientToggleMaximizedAtPoint (Client *, + gint, + gint, + int, + gboolean); gboolean clientTile (Client *, gint, gint, diff --git a/src/moveresize.c b/src/moveresize.c index b0f4108..c2a696a 100644 --- a/src/moveresize.c +++ b/src/moveresize.c @@ -832,7 +832,7 @@ clientMoveTile (Client *c, XMotionEvent *xevent) /* mouse pointer on top edge excluding corners */ if (y < disp_y + dist) { - return clientToggleMaximized (c, CLIENT_FLAG_MAXIMIZED, FALSE); + return clientToggleMaximizedAtPoint (c, x, y, CLIENT_FLAG_MAXIMIZED, FALSE); } } -- 2.7.4