these 9 patches will add to wmaker new maximized window positions, like left and right maximize, but at new positions.
ps: Right now I am unable to use git-sendmail
>From 2e70ec286da243ceb0209024b69f3a1b055523aa Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Fri, 19 Apr 2013 17:01:15 -0300 Subject: [PATCH 1/9] fix condition to restore window position when unmaximized if a window was at x=0 or y=0, the original condition return false and the window is not moved to original position, but if width or height from old_geometry is set then wmaker already saved old_geometry, and we can trust x=0 or y=0 is original position. --- src/actions.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/actions.c b/src/actions.c index 17046cf..0808e33 100644 --- a/src/actions.c +++ b/src/actions.c @@ -314,8 +314,8 @@ static void remember_geometry(WWindow *wwin, int *x, int *y, int *w, int *h) old_geom_rect = wmkrect(wwin->old_geometry.x, wwin->old_geometry.y, wwin->old_geometry.width, wwin->old_geometry.height); old_head = wGetHeadForRect(wwin->screen_ptr, old_geom_rect); same_head = (wGetHeadForWindow(wwin) == old_head); - *x = (wwin->old_geometry.x && same_head) ? wwin->old_geometry.x : wwin->frame_x; - *y = (wwin->old_geometry.y && same_head) ? wwin->old_geometry.y : wwin->frame_y; + *x = ((wwin->old_geometry.x || wwin->old_geometry.width) && same_head) ? wwin->old_geometry.x : wwin->frame_x; + *y = ((wwin->old_geometry.y || wwin->old_geometry.height) && same_head) ? wwin->old_geometry.y : wwin->frame_y; *w = wwin->old_geometry.width ? wwin->old_geometry.width : wwin->client.width; *h = wwin->old_geometry.height ? wwin->old_geometry.height : wwin->client.height; } -- 1.8.1.2
>From ffc35ad985d3e150defdaa03d39af7a6fad3045c Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Sun, 21 Apr 2013 15:01:29 -0300 Subject: [PATCH 2/9] simplified logic of handleMaximize function --- src/actions.c | 62 ++++++++++++++--------------------------------------------- 1 file changed, 14 insertions(+), 48 deletions(-) diff --git a/src/actions.c b/src/actions.c index 0808e33..fbf8b93 100644 --- a/src/actions.c +++ b/src/actions.c @@ -509,64 +509,30 @@ void handleMaximize(WWindow *wwin, int directions) if (!effective) { /* allow wMaximizeWindow to restore the Maximusized size */ if ((wwin->flags.old_maximized & MAX_MAXIMUS) && - !(requested & MAX_MAXIMUS)) + !(requested & MAX_MAXIMUS)) wMaximizeWindow(wwin, flags); else wUnmaximizeWindow(wwin); - } + /* these alone mean vertical toggle */ + } else if ((effective == MAX_LEFTHALF) || + (effective == MAX_RIGHTHALF)) + wUnmaximizeWindow(wwin); else { - /* MAX_MAXIMUS takes precedence */ - effective &= ~MAX_MAXIMUS; - if (requested & MAX_MAXIMUS) { - /* window was previously Maximusized then maximized */ - if ((wwin->flags.old_maximized & MAX_MAXIMUS) && !current) { - wUnmaximizeWindow(wwin); - return; - } - else - effective = MAX_MAXIMUS; - } - else if (requested == (MAX_HORIZONTAL | MAX_VERTICAL)) + if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) || + (requested == MAX_MAXIMUS)) effective = requested; else { - /* handle MAX_HORIZONTAL -> MAX_(LEFT|RIGHT)HALF */ - if (IS_MAX_HORIZONTALLY(current)) { - if (IS_MAX_HORIZONTALLY(requested)) { - effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF | MAX_RIGHTHALF); - effective |= (requested & (MAX_HORIZONTAL | MAX_LEFTHALF | MAX_RIGHTHALF)); - if (requested & MAX_HORIZONTAL) { - /* restore to half maximization */ - if (wwin->flags.old_maximized & MAX_LEFTHALF) - effective |= MAX_LEFTHALF; - else if (wwin->flags.old_maximized & MAX_RIGHTHALF) - effective |= MAX_RIGHTHALF; - } - /* MAX_VERTICAL is implicit with MAX_(LEFT|RIGHT)HALF */ - else - effective |= MAX_VERTICAL; - } else { - /* toggling MAX_VERTICAL */ - if ((requested & MAX_VERTICAL) && - (current & MAX_VERTICAL)) { - effective &= ~(MAX_LEFTHALF | MAX_RIGHTHALF | MAX_VERTICAL); - } - } - } - /* handle MAX_VERTICAL -> MAX_(LEFT|RIGHT)HALF */ - if (current & MAX_VERTICAL) { - if ((requested & MAX_LEFTHALF) || - (requested & MAX_RIGHTHALF)) { - effective |= MAX_VERTICAL; - } + if (requested & MAX_LEFTHALF) { + effective |= MAX_VERTICAL; + effective &= ~(MAX_HORIZONTAL | MAX_RIGHTHALF); + } else if (requested & MAX_RIGHTHALF) { + effective |= MAX_VERTICAL; + effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF); } - /* toggling MAX_HORIZONTAL */ - if ((requested & MAX_HORIZONTAL) && - (current & MAX_HORIZONTAL)) - effective &= ~MAX_HORIZONTAL; + effective &= ~MAX_MAXIMUS; } wMaximizeWindow(wwin, effective | flags); } - return; } /* the window boundary coordinates */ -- 1.8.1.2
>From e0773f82c760266786d344b3a141925b115d261d Mon Sep 17 00:00:00 2001 From: Renan Traba <hellupl...@gmail.com> Date: Sat, 27 Apr 2013 19:59:08 -0300 Subject: [PATCH 3/9] simplified logic of wMaximizeWindow function --- src/actions.c | 136 ++++++++++++++++++++++------------------------------------ 1 file changed, 52 insertions(+), 84 deletions(-) diff --git a/src/actions.c b/src/actions.c index fbf8b93..a7cc3ca 100644 --- a/src/actions.c +++ b/src/actions.c @@ -341,18 +341,17 @@ void update_saved_geometry(WWindow *wwin) 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) { - int new_x, new_y; unsigned int new_width, new_height, half_scr_width; + int new_x = 0; + int new_y = 0; int maximus_x = 0; int maximus_y = 0; unsigned int maximus_width = 0; unsigned int maximus_height = 0; WArea usableArea, totalArea; Bool has_border = 1; - int save_directions = 0; int adj_size; if (!IS_RESIZABLE(wwin)) @@ -364,27 +363,14 @@ void wMaximizeWindow(WWindow *wwin, int directions) /* the size to adjust the geometry */ adj_size = wwin->screen_ptr->frame_border_width * 2 * has_border; - /* 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 */ + /* save old coordinates before we change the current values */ if (!wwin->flags.maximized) - save_directions |= 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); + save_old_geometry(wwin, SAVE_GEOMETRY_ALL); - totalArea.x1 = 0; - totalArea.y1 = 0; totalArea.x2 = wwin->screen_ptr->scr_width; totalArea.y2 = wwin->screen_ptr->scr_height; + totalArea.x1 = 0; + totalArea.y1 = 0; usableArea = totalArea; if (!(directions & MAX_IGNORE_XINERAMA)) { @@ -399,10 +385,6 @@ void wMaximizeWindow(WWindow *wwin, int directions) 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 */ directions &= (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); @@ -416,72 +398,63 @@ void wMaximizeWindow(WWindow *wwin, int directions) 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; + if (directions & MAX_MAXIMUS) { + find_Maximus_geometry(wwin, usableArea, &maximus_x, &maximus_y, &maximus_width, &maximus_height); 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) { new_x = maximus_x; new_y = maximus_y; - new_width = maximus_width - adj_size; - new_height = maximus_height - adj_size; - if (WFLAGP(wwin, full_maximize) && new_y == 0) { + if (WFLAGP(wwin, full_maximize) && (new_y == 0)) { + new_height += wwin->frame->bottom_width - 1; 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_y = new_y; 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); wWindowCropSize(wwin, usableArea.x2 - usableArea.x1, @@ -491,11 +464,6 @@ void wMaximizeWindow(WWindow *wwin, int directions) wWindowSynthConfigureNotify(wwin); 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 */ -- 1.8.1.2
>From acdfb71c427dc57b9411ed55624628fcec1006c8 Mon Sep 17 00:00:00 2001 From: Renan Traba <hellupl...@gmail.com> Date: Sat, 27 Apr 2013 20:33:16 -0300 Subject: [PATCH 4/9] added new maximize positions, top and bottom these new positions are equal to left and right, but they are at top and bottom half of screen --- src/actions.c | 34 ++++++++++++++++++++++++++++------ src/actions.h | 8 +++++--- src/client.c | 6 +++--- src/defaults.c | 4 ++++ src/event.c | 14 ++++++++++++++ src/keybind.h | 4 +++- src/moveres.c | 4 ++-- src/window.h | 4 ++-- 8 files changed, 61 insertions(+), 17 deletions(-) diff --git a/src/actions.c b/src/actions.c index a7cc3ca..8a4a0c1 100644 --- a/src/actions.c +++ b/src/actions.c @@ -343,7 +343,7 @@ void update_saved_geometry(WWindow *wwin) void wMaximizeWindow(WWindow *wwin, int directions) { - unsigned int new_width, new_height, half_scr_width; + unsigned int new_width, new_height, half_scr_width, half_scr_height; int new_x = 0; int new_y = 0; int maximus_x = 0; @@ -386,12 +386,13 @@ void wMaximizeWindow(WWindow *wwin, int directions) } /* 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_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); if (WFLAGP(wwin, full_maximize)) { usableArea = totalArea; } half_scr_width = (usableArea.x2 - usableArea.x1)/2; + half_scr_height = (usableArea.y2 - usableArea.y1)/2; if (wwin->flags.shaded) { wwin->flags.skip_next_animation = 1; @@ -420,7 +421,7 @@ void wMaximizeWindow(WWindow *wwin, int directions) 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))) { + if (!(directions & (MAX_VERTICAL | MAX_TOPHALF | MAX_BOTTOMHALF | 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; } @@ -433,6 +434,14 @@ void wMaximizeWindow(WWindow *wwin, int directions) new_width = half_scr_width - adj_size; new_x = usableArea.x1 + half_scr_width; } + /* top|bottom position */ + if (directions & MAX_TOPHALF) { + new_height = half_scr_height - adj_size; + new_y = usableArea.y1; + } else if (directions & MAX_BOTTOMHALF) { + new_height = half_scr_height - adj_size; + new_y = usableArea.y1 + half_scr_height; + } /* vertical|horizontal position */ if (directions & MAX_HORIZONTAL) { @@ -470,7 +479,7 @@ void wMaximizeWindow(WWindow *wwin, int directions) void handleMaximize(WWindow *wwin, int directions) { int current = wwin->flags.maximized; - int requested = directions & (MAX_HORIZONTAL | MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); + 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; @@ -481,9 +490,11 @@ void handleMaximize(WWindow *wwin, int directions) wMaximizeWindow(wwin, flags); else wUnmaximizeWindow(wwin); - /* these alone mean vertical toggle */ + /* these alone mean vertical|horizontal toggle */ } else if ((effective == MAX_LEFTHALF) || - (effective == MAX_RIGHTHALF)) + (effective == MAX_RIGHTHALF) || + (effective == MAX_TOPHALF) || + (effective == MAX_BOTTOMHALF)) wUnmaximizeWindow(wwin); else { if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) || @@ -497,6 +508,17 @@ void handleMaximize(WWindow *wwin, int directions) effective |= MAX_VERTICAL; effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF); } + if (requested & MAX_TOPHALF) { + effective |= MAX_HORIZONTAL; + effective &= ~(MAX_VERTICAL | MAX_BOTTOMHALF); + } else if (requested & MAX_BOTTOMHALF) { + effective |= MAX_HORIZONTAL; + effective &= ~(MAX_VERTICAL | MAX_TOPHALF); + } + if (requested & MAX_HORIZONTAL) + effective &= ~(MAX_LEFTHALF | MAX_RIGHTHALF); + if (requested & MAX_VERTICAL) + effective &= ~(MAX_TOPHALF | MAX_BOTTOMHALF); effective &= ~MAX_MAXIMUS; } wMaximizeWindow(wwin, effective | flags); diff --git a/src/actions.h b/src/actions.h index 55de740..8390e49 100644 --- a/src/actions.h +++ b/src/actions.h @@ -27,9 +27,11 @@ #define MAX_VERTICAL (1 << 1) #define MAX_LEFTHALF (1 << 2) #define MAX_RIGHTHALF (1 << 3) -#define MAX_MAXIMUS (1 << 4) -#define MAX_IGNORE_XINERAMA (1 << 5) -#define MAX_KEYBOARD (1 << 6) +#define MAX_TOPHALF (1 << 4) +#define MAX_BOTTOMHALF (1 << 5) +#define MAX_MAXIMUS (1 << 6) +#define MAX_IGNORE_XINERAMA (1 << 7) +#define MAX_KEYBOARD (1 << 8) #define SAVE_GEOMETRY_X (1 << 0) #define SAVE_GEOMETRY_Y (1 << 1) diff --git a/src/client.c b/src/client.c index e877229..060ec59 100644 --- a/src/client.c +++ b/src/client.c @@ -252,11 +252,11 @@ void wClientConfigure(WWindow * wwin, XConfigureRequestEvent * xcre) nheight = wwin->frame->core->height - wwin->frame->top_width - wwin->frame->bottom_width; if (nwidth != wwin->old_geometry.width) - wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_MAXIMUS); - if (nheight != wwin->old_geometry.height) + wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); + if (nheight != wwin->old_geometry.height) wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); - wWindowConfigure(wwin, nx, ny, nwidth, nheight); + wWindowConfigure(wwin, nx, ny, nwidth, nheight); wwin->old_geometry.x = nx; wwin->old_geometry.y = ny; wwin->old_geometry.width = nwidth; diff --git a/src/defaults.c b/src/defaults.c index 8d2fe22..82202df 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -605,6 +605,10 @@ WDefaultEntry optionList[] = { NULL, getKeybind, setKeyGrab, NULL, NULL}, {"RHMaximizeKey", "None", (void*)WKBD_RHMAXIMIZE, NULL, getKeybind, setKeyGrab, NULL, NULL}, + {"THMaximizeKey", "None", (void*)WKBD_THMAXIMIZE, + NULL, getKeybind, setKeyGrab, NULL, NULL}, + {"BHMaximizeKey", "None", (void*)WKBD_BHMAXIMIZE, + NULL, getKeybind, setKeyGrab, NULL, NULL}, {"MaximusKey", "None", (void*)WKBD_MAXIMUS, NULL, getKeybind, setKeyGrab, NULL, NULL}, {"RaiseKey", "\"Meta+Up\"", (void *)WKBD_RAISE, diff --git a/src/event.c b/src/event.c index 692fd8a..f169e02 100644 --- a/src/event.c +++ b/src/event.c @@ -1470,6 +1470,20 @@ static void handleKeyPress(XEvent * event) handleMaximize(wwin, MAX_VERTICAL | MAX_RIGHTHALF | MAX_KEYBOARD); } break; + case WKBD_THMAXIMIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { + CloseWindowMenu(scr); + + handleMaximize(wwin, MAX_HORIZONTAL | MAX_TOPHALF | MAX_KEYBOARD); + } + break; + case WKBD_BHMAXIMIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { + CloseWindowMenu(scr); + + handleMaximize(wwin, MAX_HORIZONTAL | MAX_BOTTOMHALF | MAX_KEYBOARD); + } + break; case WKBD_MAXIMUS: if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { CloseWindowMenu(scr); diff --git a/src/keybind.h b/src/keybind.h index 8402b70..0209aed 100644 --- a/src/keybind.h +++ b/src/keybind.h @@ -35,8 +35,10 @@ enum { WKBD_MAXIMIZE, WKBD_VMAXIMIZE, WKBD_HMAXIMIZE, - WKBD_LHMAXIMIZE, + WKBD_LHMAXIMIZE, WKBD_RHMAXIMIZE, + WKBD_THMAXIMIZE, + WKBD_BHMAXIMIZE, WKBD_MAXIMUS, WKBD_SELECT, WKBD_RAISE, diff --git a/src/moveres.c b/src/moveres.c index 23045eb..8f0ecba 100644 --- a/src/moveres.c +++ b/src/moveres.c @@ -1521,7 +1521,7 @@ int wKeyboardMoveResizeWindow(WWindow * wwin) } } else { if (ww != original_w) - wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_MAXIMUS); + wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); if (wh != original_h) wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); @@ -2078,7 +2078,7 @@ void wMouseResizeWindow(WWindow * wwin, XEvent * ev) XUngrabServer(dpy); if (fw != original_fw) - wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_MAXIMUS); + wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS); if (fh != original_fh) wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); diff --git a/src/window.h b/src/window.h index a95b9f7..ec032c0 100644 --- a/src/window.h +++ b/src/window.h @@ -249,8 +249,8 @@ typedef struct WWindow { unsigned int miniaturized:1; unsigned int hidden:1; unsigned int shaded:1; - unsigned int maximized:5; - unsigned int old_maximized:5; + unsigned int maximized:7; + unsigned int old_maximized:7; unsigned int fullscreen:1; unsigned int omnipresent:1; unsigned int semi_focused:1; -- 1.8.1.2
>From 61506afe34645247538c7b370f7e5232bfa4bb3f Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Sun, 21 Apr 2013 22:31:39 -0300 Subject: [PATCH 5/9] WPrefs: added option to configure new top and bottom viewports --- WPrefs.app/KeyboardShortcuts.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c index a4d4c57..e34b2d8 100644 --- a/WPrefs.app/KeyboardShortcuts.c +++ b/WPrefs.app/KeyboardShortcuts.c @@ -82,6 +82,8 @@ static const struct { { "HMaximizeKey", N_("Maximize active window horizontally") }, { "LHMaximizeKey", N_("Maximize active window left half") }, { "RHMaximizeKey", N_("Maximize active window right half") }, + { "THMaximizeKey", N_("Maximize active window top half") }, + { "BHMaximizeKey", N_("Maximize active window bottom half") }, { "MaximusKey", N_("Maximus: Tiled maximization ") }, { "RaiseKey", N_("Raise active window") }, { "LowerKey", N_("Lower active window") }, -- 1.8.1.2
>From 2bfe4b30144c6303989ba67d1d2456219a309c10 Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Mon, 22 Apr 2013 20:28:11 -0300 Subject: [PATCH 6/9] added new windows positions new window positions top left, top right, bottom left and bottom right these new maximized positions are combinations of left, right, top and bottom maximized positions --- src/actions.c | 20 ++++++++++++++++---- src/defaults.c | 10 +++++++++- src/event.c | 28 ++++++++++++++++++++++++++++ src/keybind.h | 4 ++++ 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/actions.c b/src/actions.c index 8a4a0c1..19b4322 100644 --- a/src/actions.c +++ b/src/actions.c @@ -502,17 +502,29 @@ void handleMaximize(WWindow *wwin, int directions) effective = requested; else { if (requested & MAX_LEFTHALF) { - effective |= MAX_VERTICAL; + if (!(requested & (MAX_TOPHALF | MAX_BOTTOMHALF))) + effective |= MAX_VERTICAL; + else + effective |= requested & (MAX_TOPHALF | MAX_BOTTOMHALF); effective &= ~(MAX_HORIZONTAL | MAX_RIGHTHALF); } else if (requested & MAX_RIGHTHALF) { - effective |= MAX_VERTICAL; + if (!(requested & (MAX_TOPHALF | MAX_BOTTOMHALF))) + effective |= MAX_VERTICAL; + else + effective |= requested & (MAX_TOPHALF | MAX_BOTTOMHALF); effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF); } if (requested & MAX_TOPHALF) { - effective |= MAX_HORIZONTAL; + if (!(requested & (MAX_LEFTHALF | MAX_RIGHTHALF))) + effective |= MAX_HORIZONTAL; + else + effective |= requested & (MAX_LEFTHALF | MAX_RIGHTHALF); effective &= ~(MAX_VERTICAL | MAX_BOTTOMHALF); } else if (requested & MAX_BOTTOMHALF) { - effective |= MAX_HORIZONTAL; + if (!(requested & (MAX_LEFTHALF | MAX_RIGHTHALF))) + effective |= MAX_HORIZONTAL; + else + effective |= requested & (MAX_LEFTHALF | MAX_RIGHTHALF); effective &= ~(MAX_VERTICAL | MAX_TOPHALF); } if (requested & MAX_HORIZONTAL) diff --git a/src/defaults.c b/src/defaults.c index 82202df..25d7fee 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -609,8 +609,16 @@ WDefaultEntry optionList[] = { NULL, getKeybind, setKeyGrab, NULL, NULL}, {"BHMaximizeKey", "None", (void*)WKBD_BHMAXIMIZE, NULL, getKeybind, setKeyGrab, NULL, NULL}, + {"LTCMaximizeKey", "None", (void*)WKBD_LTCMAXIMIZE, + NULL, getKeybind, setKeyGrab, NULL, NULL}, + {"RTCMaximizeKey", "None", (void*)WKBD_RTCMAXIMIZE, + NULL, getKeybind, setKeyGrab, NULL, NULL}, + {"LBCMaximizeKey", "None", (void*)WKBD_LBCMAXIMIZE, + NULL, getKeybind, setKeyGrab, NULL, NULL}, + {"RBCMaximizeKey", "None", (void*)WKBD_RBCMAXIMIZE, + NULL, getKeybind, setKeyGrab, NULL, NULL}, {"MaximusKey", "None", (void*)WKBD_MAXIMUS, - NULL, getKeybind, setKeyGrab, NULL, NULL}, + NULL, getKeybind, setKeyGrab, NULL, NULL}, {"RaiseKey", "\"Meta+Up\"", (void *)WKBD_RAISE, NULL, getKeybind, setKeyGrab, NULL, NULL}, {"LowerKey", "\"Meta+Down\"", (void *)WKBD_LOWER, diff --git a/src/event.c b/src/event.c index f169e02..7664926 100644 --- a/src/event.c +++ b/src/event.c @@ -1484,6 +1484,34 @@ static void handleKeyPress(XEvent * event) handleMaximize(wwin, MAX_HORIZONTAL | MAX_BOTTOMHALF | MAX_KEYBOARD); } break; + case WKBD_LTCMAXIMIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { + CloseWindowMenu(scr); + + handleMaximize(wwin, MAX_LEFTHALF | MAX_TOPHALF | MAX_KEYBOARD); + } + break; + case WKBD_RTCMAXIMIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { + CloseWindowMenu(scr); + + handleMaximize(wwin, MAX_RIGHTHALF | MAX_TOPHALF | MAX_KEYBOARD); + } + break; + case WKBD_LBCMAXIMIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { + CloseWindowMenu(scr); + + handleMaximize(wwin, MAX_LEFTHALF | MAX_BOTTOMHALF | MAX_KEYBOARD); + } + break; + case WKBD_RBCMAXIMIZE: + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { + CloseWindowMenu(scr); + + handleMaximize(wwin, MAX_RIGHTHALF | MAX_BOTTOMHALF | MAX_KEYBOARD); + } + break; case WKBD_MAXIMUS: if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { CloseWindowMenu(scr); diff --git a/src/keybind.h b/src/keybind.h index 0209aed..bf02965 100644 --- a/src/keybind.h +++ b/src/keybind.h @@ -39,6 +39,10 @@ enum { WKBD_RHMAXIMIZE, WKBD_THMAXIMIZE, WKBD_BHMAXIMIZE, + WKBD_LTCMAXIMIZE, + WKBD_RTCMAXIMIZE, + WKBD_LBCMAXIMIZE, + WKBD_RBCMAXIMIZE, WKBD_MAXIMUS, WKBD_SELECT, WKBD_RAISE, -- 1.8.1.2
>From a2ed9968191831f973c11decf371a0bd266180f8 Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Mon, 22 Apr 2013 20:54:36 -0300 Subject: [PATCH 7/9] WPrefs: added option to configure new viewports --- WPrefs.app/KeyboardShortcuts.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c index e34b2d8..4324b03 100644 --- a/WPrefs.app/KeyboardShortcuts.c +++ b/WPrefs.app/KeyboardShortcuts.c @@ -84,6 +84,10 @@ static const struct { { "RHMaximizeKey", N_("Maximize active window right half") }, { "THMaximizeKey", N_("Maximize active window top half") }, { "BHMaximizeKey", N_("Maximize active window bottom half") }, + { "LTCMaximizeKey", N_("Maximize active window left top corner") }, + { "RTCMaximizeKey", N_("Maximize active window right top corner") }, + { "LBCMaximizeKey", N_("Maximize active window left bottom corner") }, + { "RBCMaximizeKey", N_("Maximize active window right bottom corner") }, { "MaximusKey", N_("Maximus: Tiled maximization ") }, { "RaiseKey", N_("Raise active window") }, { "LowerKey", N_("Lower active window") }, -- 1.8.1.2
>From 7887f1890a5a3139e695442019204553e7baeae1 Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Tue, 23 Apr 2013 22:37:16 -0300 Subject: [PATCH 8/9] explicit restore to MAX_MAXIMUS instead of empty flag at handleMaximize --- src/actions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/actions.c b/src/actions.c index 19b4322..6c69563 100644 --- a/src/actions.c +++ b/src/actions.c @@ -487,7 +487,7 @@ void handleMaximize(WWindow *wwin, int directions) /* allow wMaximizeWindow to restore the Maximusized size */ if ((wwin->flags.old_maximized & MAX_MAXIMUS) && !(requested & MAX_MAXIMUS)) - wMaximizeWindow(wwin, flags); + wMaximizeWindow(wwin, MAX_MAXIMUS | flags); else wUnmaximizeWindow(wwin); /* these alone mean vertical|horizontal toggle */ -- 1.8.1.2
>From 10a994b41d018b3261ff21c3165da7a318e51625 Mon Sep 17 00:00:00 2001 From: Renan Traba <rv...@inf.ufpr.br> Date: Thu, 25 Apr 2013 22:37:58 -0300 Subject: [PATCH 9/9] enforce requested window position whem maximizing --- src/actions.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/actions.c b/src/actions.c index 6c69563..8a21e37 100644 --- a/src/actions.c +++ b/src/actions.c @@ -506,12 +506,14 @@ void handleMaximize(WWindow *wwin, int directions) effective |= MAX_VERTICAL; else effective |= requested & (MAX_TOPHALF | MAX_BOTTOMHALF); + effective |= MAX_LEFTHALF; effective &= ~(MAX_HORIZONTAL | MAX_RIGHTHALF); } else if (requested & MAX_RIGHTHALF) { if (!(requested & (MAX_TOPHALF | MAX_BOTTOMHALF))) effective |= MAX_VERTICAL; else effective |= requested & (MAX_TOPHALF | MAX_BOTTOMHALF); + effective |= MAX_RIGHTHALF; effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF); } if (requested & MAX_TOPHALF) { @@ -519,12 +521,14 @@ void handleMaximize(WWindow *wwin, int directions) effective |= MAX_HORIZONTAL; else effective |= requested & (MAX_LEFTHALF | MAX_RIGHTHALF); + effective |= MAX_TOPHALF; effective &= ~(MAX_VERTICAL | MAX_BOTTOMHALF); } else if (requested & MAX_BOTTOMHALF) { if (!(requested & (MAX_LEFTHALF | MAX_RIGHTHALF))) effective |= MAX_HORIZONTAL; else effective |= requested & (MAX_LEFTHALF | MAX_RIGHTHALF); + effective |= MAX_BOTTOMHALF; effective &= ~(MAX_VERTICAL | MAX_TOPHALF); } if (requested & MAX_HORIZONTAL) -- 1.8.1.2