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.

Reply via email to