mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 20:38:08 +01:00
simplified logic of wMaximizeWindow function
This commit is contained in:
committed by
Carlos R. Mafra
parent
33343bcd59
commit
e20f45ef3c
138
src/actions.c
138
src/actions.c
@@ -341,18 +341,17 @@ void update_saved_geometry(WWindow *wwin)
|
|||||||
save_old_geometry(wwin, SAVE_GEOMETRY_X);
|
save_old_geometry(wwin, SAVE_GEOMETRY_X);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IS_MAX_HORIZONTALLY(directions) ((directions & MAX_HORIZONTAL) | (directions & MAX_LEFTHALF) | (directions & MAX_RIGHTHALF))
|
|
||||||
void wMaximizeWindow(WWindow *wwin, int directions)
|
void wMaximizeWindow(WWindow *wwin, int directions)
|
||||||
{
|
{
|
||||||
int new_x, new_y;
|
|
||||||
unsigned int new_width, new_height, half_scr_width;
|
unsigned int new_width, new_height, half_scr_width;
|
||||||
|
int new_x = 0;
|
||||||
|
int new_y = 0;
|
||||||
int maximus_x = 0;
|
int maximus_x = 0;
|
||||||
int maximus_y = 0;
|
int maximus_y = 0;
|
||||||
unsigned int maximus_width = 0;
|
unsigned int maximus_width = 0;
|
||||||
unsigned int maximus_height = 0;
|
unsigned int maximus_height = 0;
|
||||||
WArea usableArea, totalArea;
|
WArea usableArea, totalArea;
|
||||||
Bool has_border = 1;
|
Bool has_border = 1;
|
||||||
int save_directions = 0;
|
|
||||||
int adj_size;
|
int adj_size;
|
||||||
|
|
||||||
if (!IS_RESIZABLE(wwin))
|
if (!IS_RESIZABLE(wwin))
|
||||||
@@ -364,27 +363,14 @@ void wMaximizeWindow(WWindow *wwin, int directions)
|
|||||||
/* the size to adjust the geometry */
|
/* the size to adjust the geometry */
|
||||||
adj_size = wwin->screen_ptr->frame_border_width * 2 * has_border;
|
adj_size = wwin->screen_ptr->frame_border_width * 2 * has_border;
|
||||||
|
|
||||||
/* save old coordinates before we change the current values
|
/* save old coordinates before we change the current values */
|
||||||
* always if the window is not currently maximized at all
|
|
||||||
* but never if the window has been Maximusized */
|
|
||||||
if (!wwin->flags.maximized)
|
if (!wwin->flags.maximized)
|
||||||
save_directions |= SAVE_GEOMETRY_ALL;
|
save_old_geometry(wwin, SAVE_GEOMETRY_ALL);
|
||||||
else if (!(wwin->flags.old_maximized & MAX_MAXIMUS)) {
|
|
||||||
if ((directions & MAX_VERTICAL) &&
|
|
||||||
!(wwin->flags.maximized & MAX_VERTICAL))
|
|
||||||
save_directions |= SAVE_GEOMETRY_Y | SAVE_GEOMETRY_HEIGHT;
|
|
||||||
if (IS_MAX_HORIZONTALLY(directions) &&
|
|
||||||
!IS_MAX_HORIZONTALLY(wwin->flags.maximized))
|
|
||||||
save_directions |= SAVE_GEOMETRY_X | SAVE_GEOMETRY_WIDTH;
|
|
||||||
}
|
|
||||||
if ((directions & MAX_MAXIMUS) && !wwin->flags.maximized)
|
|
||||||
save_directions |= SAVE_GEOMETRY_ALL;
|
|
||||||
save_old_geometry(wwin, save_directions);
|
|
||||||
|
|
||||||
totalArea.x1 = 0;
|
|
||||||
totalArea.y1 = 0;
|
|
||||||
totalArea.x2 = wwin->screen_ptr->scr_width;
|
totalArea.x2 = wwin->screen_ptr->scr_width;
|
||||||
totalArea.y2 = wwin->screen_ptr->scr_height;
|
totalArea.y2 = wwin->screen_ptr->scr_height;
|
||||||
|
totalArea.x1 = 0;
|
||||||
|
totalArea.y1 = 0;
|
||||||
usableArea = totalArea;
|
usableArea = totalArea;
|
||||||
|
|
||||||
if (!(directions & MAX_IGNORE_XINERAMA)) {
|
if (!(directions & MAX_IGNORE_XINERAMA)) {
|
||||||
@@ -399,10 +385,6 @@ void wMaximizeWindow(WWindow *wwin, int directions)
|
|||||||
usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);
|
usableArea = wGetUsableAreaForHead(scr, head, &totalArea, True);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* remember Maximus geometry if we'll need it later */
|
|
||||||
if ((wwin->flags.old_maximized & MAX_MAXIMUS) || (directions & MAX_MAXIMUS))
|
|
||||||
find_Maximus_geometry(wwin, usableArea, &maximus_x, &maximus_y, &maximus_width, &maximus_height);
|
|
||||||
|
|
||||||
/* 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_MAXIMUS);
|
directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS);
|
||||||
|
|
||||||
@@ -416,72 +398,63 @@ void wMaximizeWindow(WWindow *wwin, int directions)
|
|||||||
wUnshadeWindow(wwin);
|
wUnshadeWindow(wwin);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (directions & MAX_HORIZONTAL) {
|
|
||||||
new_width = usableArea.x2 - usableArea.x1 - adj_size;
|
|
||||||
new_x = usableArea.x1;
|
|
||||||
} else if (directions & MAX_LEFTHALF) {
|
|
||||||
new_width = half_scr_width - adj_size;
|
|
||||||
new_x = usableArea.x1;
|
|
||||||
wwin->flags.old_maximized |= MAX_LEFTHALF;
|
|
||||||
wwin->flags.old_maximized &= ~MAX_RIGHTHALF;
|
|
||||||
} else if (directions & MAX_RIGHTHALF) {
|
|
||||||
new_width = half_scr_width - adj_size;
|
|
||||||
new_x = usableArea.x1 + half_scr_width;
|
|
||||||
wwin->flags.old_maximized |= MAX_RIGHTHALF;
|
|
||||||
wwin->flags.old_maximized &= ~MAX_LEFTHALF;
|
|
||||||
} else if (wwin->flags.old_maximized & MAX_MAXIMUS) {
|
|
||||||
new_x = maximus_x;
|
|
||||||
new_width = maximus_width - adj_size;
|
|
||||||
} else if (IS_MAX_HORIZONTALLY(wwin->flags.maximized)) {
|
|
||||||
new_x = (wwin->old_geometry.x) ? wwin->old_geometry.x : wwin->frame_x;
|
|
||||||
new_width = (wwin->old_geometry.width) ? wwin->old_geometry.width : wwin->frame->core->width;
|
|
||||||
} else {
|
|
||||||
wwin->flags.old_maximized &= ~(MAX_LEFTHALF | MAX_RIGHTHALF);
|
|
||||||
new_x = wwin->frame_x;
|
|
||||||
new_width = wwin->frame->core->width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (directions & MAX_VERTICAL) {
|
|
||||||
new_height = usableArea.y2 - usableArea.y1 - adj_size;
|
|
||||||
new_y = usableArea.y1;
|
|
||||||
if (WFLAGP(wwin, full_maximize)) {
|
|
||||||
new_y -= wwin->frame->top_width;
|
|
||||||
new_height += wwin->frame->bottom_width - 1;
|
|
||||||
}
|
|
||||||
} else if (wwin->flags.old_maximized & MAX_MAXIMUS) {
|
|
||||||
new_y = maximus_y;
|
|
||||||
new_height = maximus_height - adj_size;
|
|
||||||
/* HACK: this will be subtracted again below */
|
|
||||||
new_height += wwin->frame->top_width + wwin->frame->bottom_width;
|
|
||||||
} else if (wwin->flags.maximized & MAX_VERTICAL) {
|
|
||||||
new_y = (wwin->old_geometry.y) ? wwin->old_geometry.y : wwin->frame_y;
|
|
||||||
new_height = (wwin->old_geometry.height) ? wwin->old_geometry.height : wwin->frame->core->height;
|
|
||||||
/* HACK: this will be subtracted again below */
|
|
||||||
new_height += wwin->frame->top_width + wwin->frame->bottom_width;
|
|
||||||
wwin->flags.old_maximized &= ~(MAX_LEFTHALF | MAX_RIGHTHALF);
|
|
||||||
} else {
|
|
||||||
new_y = wwin->frame_y;
|
|
||||||
new_height = wwin->frame->core->height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!WFLAGP(wwin, full_maximize)) {
|
|
||||||
new_height -= wwin->frame->top_width + wwin->frame->bottom_width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (directions & MAX_MAXIMUS) {
|
if (directions & MAX_MAXIMUS) {
|
||||||
new_x = maximus_x;
|
find_Maximus_geometry(wwin, usableArea, &maximus_x, &maximus_y, &maximus_width, &maximus_height);
|
||||||
new_y = maximus_y;
|
|
||||||
new_width = maximus_width - adj_size;
|
new_width = maximus_width - adj_size;
|
||||||
new_height = maximus_height - adj_size;
|
new_height = maximus_height - adj_size;
|
||||||
if (WFLAGP(wwin, full_maximize) && new_y == 0) {
|
new_x = maximus_x;
|
||||||
|
new_y = maximus_y;
|
||||||
|
if (WFLAGP(wwin, full_maximize) && (new_y == 0)) {
|
||||||
|
new_height += wwin->frame->bottom_width - 1;
|
||||||
new_y -= wwin->frame->top_width;
|
new_y -= wwin->frame->top_width;
|
||||||
new_height += wwin->frame->top_width - 1;
|
|
||||||
}
|
}
|
||||||
|
/* HACK: this will be subtracted again below */
|
||||||
|
new_height += wwin->frame->top_width + wwin->frame->bottom_width;
|
||||||
|
|
||||||
wwin->maximus_x = new_x;
|
wwin->maximus_x = new_x;
|
||||||
wwin->maximus_y = new_y;
|
wwin->maximus_y = new_y;
|
||||||
wwin->flags.old_maximized |= MAX_MAXIMUS;
|
wwin->flags.old_maximized |= MAX_MAXIMUS;
|
||||||
|
} else {
|
||||||
|
/* set default values if no option set then */
|
||||||
|
if (!(directions & (MAX_HORIZONTAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS))) {
|
||||||
|
new_width = (wwin->old_geometry.width) ? wwin->old_geometry.width : wwin->frame->core->width;
|
||||||
|
new_x = (wwin->old_geometry.x) ? wwin->old_geometry.x : wwin->frame_x;
|
||||||
|
}
|
||||||
|
if (!(directions & (MAX_VERTICAL | MAX_MAXIMUS))) {
|
||||||
|
new_height = (wwin->old_geometry.height) ? wwin->old_geometry.height : wwin->frame->core->height;
|
||||||
|
new_y = (wwin->old_geometry.y) ? wwin->old_geometry.y : wwin->frame_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* left|right position */
|
||||||
|
if (directions & MAX_LEFTHALF) {
|
||||||
|
new_width = half_scr_width - adj_size;
|
||||||
|
new_x = usableArea.x1;
|
||||||
|
} else if (directions & MAX_RIGHTHALF) {
|
||||||
|
new_width = half_scr_width - adj_size;
|
||||||
|
new_x = usableArea.x1 + half_scr_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vertical|horizontal position */
|
||||||
|
if (directions & MAX_HORIZONTAL) {
|
||||||
|
new_width = usableArea.x2 - usableArea.x1 - adj_size;
|
||||||
|
new_x = usableArea.x1;
|
||||||
|
}
|
||||||
|
if (directions & MAX_VERTICAL) {
|
||||||
|
new_height = usableArea.y2 - usableArea.y1 - adj_size;
|
||||||
|
new_y = usableArea.y1;
|
||||||
|
if (WFLAGP(wwin, full_maximize) && (new_y == 0))
|
||||||
|
new_y -= wwin->frame->top_width;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!WFLAGP(wwin, full_maximize))
|
||||||
|
new_height -= wwin->frame->top_width + wwin->frame->bottom_width;
|
||||||
|
|
||||||
|
/* set maximization state */
|
||||||
|
wwin->flags.maximized = directions;
|
||||||
|
if ((wwin->flags.old_maximized & MAX_MAXIMUS) && !wwin->flags.maximized)
|
||||||
|
wwin->flags.maximized = MAX_MAXIMUS;
|
||||||
|
|
||||||
wWindowConstrainSize(wwin, &new_width, &new_height);
|
wWindowConstrainSize(wwin, &new_width, &new_height);
|
||||||
|
|
||||||
wWindowCropSize(wwin, usableArea.x2 - usableArea.x1,
|
wWindowCropSize(wwin, usableArea.x2 - usableArea.x1,
|
||||||
@@ -491,11 +464,6 @@ void wMaximizeWindow(WWindow *wwin, int directions)
|
|||||||
wWindowSynthConfigureNotify(wwin);
|
wWindowSynthConfigureNotify(wwin);
|
||||||
|
|
||||||
WMPostNotificationName(WMNChangedState, wwin, "maximize");
|
WMPostNotificationName(WMNChangedState, wwin, "maximize");
|
||||||
|
|
||||||
/* set maximization state */
|
|
||||||
wwin->flags.maximized = directions;
|
|
||||||
if ((wwin->flags.old_maximized & MAX_MAXIMUS) && !wwin->flags.maximized)
|
|
||||||
wwin->flags.maximized = MAX_MAXIMUS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generic (un)maximizer */
|
/* generic (un)maximizer */
|
||||||
|
|||||||
Reference in New Issue
Block a user