mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-22 05:48:01 +01:00
Added 'head' parameter to wMaximizeWindow
Additional 'head' parameter will help to select head (display) where window should be maximized.
This commit is contained in:
@@ -359,7 +359,7 @@ void update_saved_geometry(WWindow *wwin)
|
|||||||
save_old_geometry(wwin, SAVE_GEOMETRY_X);
|
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;
|
unsigned int new_width, new_height, half_scr_width, half_scr_height;
|
||||||
int new_x = 0;
|
int new_x = 0;
|
||||||
@@ -393,20 +393,7 @@ void wMaximizeWindow(WWindow *wwin, int directions)
|
|||||||
totalArea.y2 = scr->scr_height;
|
totalArea.y2 = scr->scr_height;
|
||||||
totalArea.x1 = 0;
|
totalArea.x1 = 0;
|
||||||
totalArea.y1 = 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 */
|
/* Only save directions, not kbd or xinerama hints */
|
||||||
directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS);
|
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 requested = directions & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS);
|
||||||
int effective = requested ^ current;
|
int effective = requested ^ current;
|
||||||
int flags = directions & ~requested;
|
int flags = directions & ~requested;
|
||||||
|
int head = wGetHeadForWindow(wwin);
|
||||||
|
|
||||||
if (!effective) {
|
if (!effective) {
|
||||||
/* allow wMaximizeWindow to restore the Maximusized size */
|
/* allow wMaximizeWindow to restore the Maximusized size */
|
||||||
if ((wwin->flags.old_maximized & MAX_MAXIMUS) &&
|
if ((wwin->flags.old_maximized & MAX_MAXIMUS) &&
|
||||||
!(requested & MAX_MAXIMUS))
|
!(requested & MAX_MAXIMUS))
|
||||||
wMaximizeWindow(wwin, MAX_MAXIMUS | flags);
|
wMaximizeWindow(wwin, MAX_MAXIMUS | flags, head);
|
||||||
else
|
else
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
/* these alone mean vertical|horizontal toggle */
|
/* these alone mean vertical|horizontal toggle */
|
||||||
@@ -557,7 +545,7 @@ void handleMaximize(WWindow *wwin, int directions)
|
|||||||
effective &= ~(MAX_TOPHALF | MAX_BOTTOMHALF);
|
effective &= ~(MAX_TOPHALF | MAX_BOTTOMHALF);
|
||||||
effective &= ~MAX_MAXIMUS;
|
effective &= ~MAX_MAXIMUS;
|
||||||
}
|
}
|
||||||
wMaximizeWindow(wwin, effective | flags);
|
wMaximizeWindow(wwin, effective | flags, head);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ void wSelectWindows(WScreen *scr, XEvent *ev);
|
|||||||
void wSelectWindow(WWindow *wwin, Bool flag);
|
void wSelectWindow(WWindow *wwin, Bool flag);
|
||||||
void wUnselectWindows(WScreen *scr);
|
void wUnselectWindows(WScreen *scr);
|
||||||
|
|
||||||
void wMaximizeWindow(WWindow *wwin, int directions);
|
void wMaximizeWindow(WWindow *wwin, int directions, int head);
|
||||||
void wUnmaximizeWindow(WWindow *wwin);
|
void wUnmaximizeWindow(WWindow *wwin);
|
||||||
void handleMaximize(WWindow *wwin, int directions);
|
void handleMaximize(WWindow *wwin, int directions);
|
||||||
|
|
||||||
|
|||||||
@@ -632,7 +632,8 @@ static void handleMapRequest(XEvent * ev)
|
|||||||
if (wwin) {
|
if (wwin) {
|
||||||
wClientSetState(wwin, NormalState, None);
|
wClientSetState(wwin, NormalState, None);
|
||||||
if (wwin->flags.maximized) {
|
if (wwin->flags.maximized) {
|
||||||
wMaximizeWindow(wwin, wwin->flags.maximized);
|
wMaximizeWindow(wwin, wwin->flags.maximized,
|
||||||
|
wGetHeadForWindow(wwin));
|
||||||
}
|
}
|
||||||
if (wwin->flags.shaded) {
|
if (wwin->flags.shaded) {
|
||||||
wwin->flags.shaded = 0;
|
wwin->flags.shaded = 0;
|
||||||
|
|||||||
@@ -2853,7 +2853,7 @@ static void titlebarDblClick(WCoreWindow *sender, void *data, XEvent *event)
|
|||||||
int ndir = dir ^ wwin->flags.maximized;
|
int ndir = dir ^ wwin->flags.maximized;
|
||||||
|
|
||||||
if (ndir != 0)
|
if (ndir != 0)
|
||||||
wMaximizeWindow(wwin, ndir);
|
wMaximizeWindow(wwin, ndir, wGetHeadForWindow(wwin));
|
||||||
else
|
else
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -277,7 +277,8 @@ static void execMenuCommand(WMenu * menu, WMenuEntry * entry)
|
|||||||
if (wwin->flags.maximized)
|
if (wwin->flags.maximized)
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
else
|
else
|
||||||
wMaximizeWindow(wwin, MAX_VERTICAL | MAX_HORIZONTAL);
|
wMaximizeWindow(wwin, MAX_VERTICAL | MAX_HORIZONTAL,
|
||||||
|
wGetHeadForWindow(wwin));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MC_SHADE:
|
case MC_SHADE:
|
||||||
|
|||||||
15
src/wmspec.c
15
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);
|
wwin->flags.maximized |= (set ? MAX_VERTICAL : 0);
|
||||||
} else {
|
} else {
|
||||||
if (set)
|
if (set)
|
||||||
wMaximizeWindow(wwin, wwin->flags.maximized | MAX_VERTICAL);
|
wMaximizeWindow(wwin, wwin->flags.maximized | MAX_VERTICAL,
|
||||||
|
wGetHeadForWindow(wwin));
|
||||||
else
|
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) {
|
} else if (state == net_wm_state_maximized_horz) {
|
||||||
if (set == _NET_WM_STATE_TOGGLE)
|
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);
|
wwin->flags.maximized |= (set ? MAX_HORIZONTAL : 0);
|
||||||
} else {
|
} else {
|
||||||
if (set)
|
if (set)
|
||||||
wMaximizeWindow(wwin, wwin->flags.maximized | MAX_HORIZONTAL);
|
wMaximizeWindow(wwin, wwin->flags.maximized | MAX_HORIZONTAL,
|
||||||
|
wGetHeadForWindow(wwin));
|
||||||
else
|
else
|
||||||
wMaximizeWindow(wwin, wwin->flags.maximized & ~MAX_HORIZONTAL);
|
wMaximizeWindow(wwin, wwin->flags.maximized & ~MAX_HORIZONTAL,
|
||||||
|
wGetHeadForWindow(wwin));
|
||||||
}
|
}
|
||||||
} else if (state == net_wm_state_hidden) {
|
} else if (state == net_wm_state_hidden) {
|
||||||
if (set == _NET_WM_STATE_TOGGLE)
|
if (set == _NET_WM_STATE_TOGGLE)
|
||||||
@@ -1623,7 +1627,8 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
|
|||||||
wwin->flags.maximized = maximized;
|
wwin->flags.maximized = maximized;
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
} else {
|
} else {
|
||||||
wMaximizeWindow(wwin, wwin->flags.maximized);
|
wMaximizeWindow(wwin, wwin->flags.maximized,
|
||||||
|
wGetHeadForWindow(wwin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
updateStateHint(wwin, False, False);
|
updateStateHint(wwin, False, False);
|
||||||
|
|||||||
Reference in New Issue
Block a user