From d025625df0468582a0293e1f5a95a255351a06e8 Mon Sep 17 00:00:00 2001 From: Renan Traba Date: Sat, 27 Apr 2013 20:33:16 -0300 Subject: [PATCH] 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 a7cc3cad..8a4a0c19 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 55de740b..8390e49c 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 e877229a..060ec599 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 8d2fe225..82202df7 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 692fd8a9..f169e025 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 8402b709..0209aed7 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 23045eb5..8f0ecbab 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 a95b9f79..ec032c04 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; -- 2.11.4.GIT