From: gryf <gry...@gmail.com> Additional 'head' parameter will help to select head (display) where window should be maximized. --- src/actions.c | 22 +++++----------------- src/actions.h | 2 +- src/event.c | 3 ++- src/window.c | 2 +- src/winmenu.c | 5 +++-- src/wmspec.c | 15 ++++++++++----- 6 files changed, 22 insertions(+), 27 deletions(-)
diff --git a/src/actions.c b/src/actions.c index 4bc3e07..b2a2bbb 100644 --- a/src/actions.c +++ b/src/actions.c @@ -359,7 +359,7 @@ void update_saved_geometry(WWindow *wwin) save_old_geometry(wwin, SAVE_GEOMETRY_X); } -void wMaximizeWindow(WWindow *wwin, int directions) +void wMaximizeWindow(WWindow *wwin, int directions, int head) { unsigned int new_width, new_height, half_scr_width, half_scr_height; int new_x = 0; @@ -393,20 +393,7 @@ void wMaximizeWindow(WWindow *wwin, int directions) totalArea.y2 = scr->scr_height; totalArea.x1 = 0; totalArea.y1 = 0; - usableArea = totalArea; - - if (!(directions & MAX_IGNORE_XINERAMA)) { - WScreen *scr = wwin->screen_ptr; - int head; - - if (directions & MAX_KEYBOARD) - head = wGetHeadForWindow(wwin); - else - head = wGetHeadForPointerLocation(scr); - - usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True); - } - + usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True); /* Only save directions, not kbd or xinerama hints */ directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); @@ -502,12 +489,13 @@ void handleMaximize(WWindow *wwin, int directions) int requested = directions & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); int effective = requested ^ current; int flags = directions & ~requested; + int head = wGetHeadForWindow(wwin); if (!effective) { /* allow wMaximizeWindow to restore the Maximusized size */ if ((wwin->flags.old_maximized & MAX_MAXIMUS) && !(requested & MAX_MAXIMUS)) - wMaximizeWindow(wwin, MAX_MAXIMUS | flags); + wMaximizeWindow(wwin, MAX_MAXIMUS | flags, head); else wUnmaximizeWindow(wwin); /* these alone mean vertical|horizontal toggle */ @@ -557,7 +545,7 @@ void handleMaximize(WWindow *wwin, int directions) effective &= ~(MAX_TOPHALF | MAX_BOTTOMHALF); effective &= ~MAX_MAXIMUS; } - wMaximizeWindow(wwin, effective | flags); + wMaximizeWindow(wwin, effective | flags, head); } } diff --git a/src/actions.h b/src/actions.h index 8390e49..a15cf48 100644 --- a/src/actions.h +++ b/src/actions.h @@ -57,7 +57,7 @@ void wSelectWindows(WScreen *scr, XEvent *ev); void wSelectWindow(WWindow *wwin, Bool flag); void wUnselectWindows(WScreen *scr); -void wMaximizeWindow(WWindow *wwin, int directions); +void wMaximizeWindow(WWindow *wwin, int directions, int head); void wUnmaximizeWindow(WWindow *wwin); void handleMaximize(WWindow *wwin, int directions); diff --git a/src/event.c b/src/event.c index 0b394e7..5145e95 100644 --- a/src/event.c +++ b/src/event.c @@ -632,7 +632,8 @@ static void handleMapRequest(XEvent * ev) if (wwin) { wClientSetState(wwin, NormalState, None); if (wwin->flags.maximized) { - wMaximizeWindow(wwin, wwin->flags.maximized); + wMaximizeWindow(wwin, wwin->flags.maximized, + wGetHeadForWindow(wwin)); } if (wwin->flags.shaded) { wwin->flags.shaded = 0; diff --git a/src/window.c b/src/window.c index 801d7b6..d1e351e 100644 --- a/src/window.c +++ b/src/window.c @@ -2853,7 +2853,7 @@ static void titlebarDblClick(WCoreWindow *sender, void *data, XEvent *event) int ndir = dir ^ wwin->flags.maximized; if (ndir != 0) - wMaximizeWindow(wwin, ndir); + wMaximizeWindow(wwin, ndir, wGetHeadForWindow(wwin)); else wUnmaximizeWindow(wwin); } diff --git a/src/winmenu.c b/src/winmenu.c index 2aa3187..af7fe62 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -169,7 +169,7 @@ static void execWindowOptionCommand(WMenu * menu, WMenuEntry * entry) static void execMaximizeCommand(WMenu * menu, WMenuEntry * entry) { WWindow *wwin = (WWindow *) entry->clientdata; - + /* Parameter not used, but tell the compiler that it is ok */ (void) menu; @@ -277,7 +277,8 @@ static void execMenuCommand(WMenu * menu, WMenuEntry * entry) if (wwin->flags.maximized) wUnmaximizeWindow(wwin); else - wMaximizeWindow(wwin, MAX_VERTICAL | MAX_HORIZONTAL); + wMaximizeWindow(wwin, MAX_VERTICAL | MAX_HORIZONTAL, + wGetHeadForWindow(wwin)); break; case MC_SHADE: diff --git a/src/wmspec.c b/src/wmspec.c index 0bfc864..75fcdde 100644 --- a/src/wmspec.c +++ b/src/wmspec.c @@ -1120,9 +1120,11 @@ static void doStateAtom(WWindow *wwin, Atom state, int set, Bool init) wwin->flags.maximized |= (set ? MAX_VERTICAL : 0); } else { if (set) - wMaximizeWindow(wwin, wwin->flags.maximized | MAX_VERTICAL); + wMaximizeWindow(wwin, wwin->flags.maximized | MAX_VERTICAL, + wGetHeadForWindow(wwin)); else - wMaximizeWindow(wwin, wwin->flags.maximized & ~MAX_VERTICAL); + wMaximizeWindow(wwin, wwin->flags.maximized & ~MAX_VERTICAL, + wGetHeadForWindow(wwin)); } } else if (state == net_wm_state_maximized_horz) { if (set == _NET_WM_STATE_TOGGLE) @@ -1132,9 +1134,11 @@ static void doStateAtom(WWindow *wwin, Atom state, int set, Bool init) wwin->flags.maximized |= (set ? MAX_HORIZONTAL : 0); } else { if (set) - wMaximizeWindow(wwin, wwin->flags.maximized | MAX_HORIZONTAL); + wMaximizeWindow(wwin, wwin->flags.maximized | MAX_HORIZONTAL, + wGetHeadForWindow(wwin)); else - wMaximizeWindow(wwin, wwin->flags.maximized & ~MAX_HORIZONTAL); + wMaximizeWindow(wwin, wwin->flags.maximized & ~MAX_HORIZONTAL, + wGetHeadForWindow(wwin)); } } else if (state == net_wm_state_hidden) { if (set == _NET_WM_STATE_TOGGLE) @@ -1623,7 +1627,8 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event) wwin->flags.maximized = maximized; wUnmaximizeWindow(wwin); } else { - wMaximizeWindow(wwin, wwin->flags.maximized); + wMaximizeWindow(wwin, wwin->flags.maximized, + wGetHeadForWindow(wwin)); } } updateStateHint(wwin, False, False); -- 2.10.2 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.