1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 12:28:22 +01:00

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
This commit is contained in:
Renan Traba
2013-04-27 20:33:16 -03:00
committed by Carlos R. Mafra
parent e20f45ef3c
commit d025625df0
8 changed files with 61 additions and 17 deletions

View File

@@ -343,7 +343,7 @@ void update_saved_geometry(WWindow *wwin)
void wMaximizeWindow(WWindow *wwin, int directions) 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_x = 0;
int new_y = 0; int new_y = 0;
int maximus_x = 0; int maximus_x = 0;
@@ -386,12 +386,13 @@ void wMaximizeWindow(WWindow *wwin, int directions)
} }
/* 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_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS);
if (WFLAGP(wwin, full_maximize)) { if (WFLAGP(wwin, full_maximize)) {
usableArea = totalArea; usableArea = totalArea;
} }
half_scr_width = (usableArea.x2 - usableArea.x1)/2; half_scr_width = (usableArea.x2 - usableArea.x1)/2;
half_scr_height = (usableArea.y2 - usableArea.y1)/2;
if (wwin->flags.shaded) { if (wwin->flags.shaded) {
wwin->flags.skip_next_animation = 1; 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_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; 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_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; 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_width = half_scr_width - adj_size;
new_x = usableArea.x1 + half_scr_width; 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 */ /* vertical|horizontal position */
if (directions & MAX_HORIZONTAL) { if (directions & MAX_HORIZONTAL) {
@@ -470,7 +479,7 @@ void wMaximizeWindow(WWindow *wwin, int directions)
void handleMaximize(WWindow *wwin, int directions) void handleMaximize(WWindow *wwin, int directions)
{ {
int current = wwin->flags.maximized; 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 effective = requested ^ current;
int flags = directions & ~requested; int flags = directions & ~requested;
@@ -481,9 +490,11 @@ void handleMaximize(WWindow *wwin, int directions)
wMaximizeWindow(wwin, flags); wMaximizeWindow(wwin, flags);
else else
wUnmaximizeWindow(wwin); wUnmaximizeWindow(wwin);
/* these alone mean vertical toggle */ /* these alone mean vertical|horizontal toggle */
} else if ((effective == MAX_LEFTHALF) || } else if ((effective == MAX_LEFTHALF) ||
(effective == MAX_RIGHTHALF)) (effective == MAX_RIGHTHALF) ||
(effective == MAX_TOPHALF) ||
(effective == MAX_BOTTOMHALF))
wUnmaximizeWindow(wwin); wUnmaximizeWindow(wwin);
else { else {
if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) || if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) ||
@@ -497,6 +508,17 @@ void handleMaximize(WWindow *wwin, int directions)
effective |= MAX_VERTICAL; effective |= MAX_VERTICAL;
effective &= ~(MAX_HORIZONTAL | MAX_LEFTHALF); 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; effective &= ~MAX_MAXIMUS;
} }
wMaximizeWindow(wwin, effective | flags); wMaximizeWindow(wwin, effective | flags);

View File

@@ -27,9 +27,11 @@
#define MAX_VERTICAL (1 << 1) #define MAX_VERTICAL (1 << 1)
#define MAX_LEFTHALF (1 << 2) #define MAX_LEFTHALF (1 << 2)
#define MAX_RIGHTHALF (1 << 3) #define MAX_RIGHTHALF (1 << 3)
#define MAX_MAXIMUS (1 << 4) #define MAX_TOPHALF (1 << 4)
#define MAX_IGNORE_XINERAMA (1 << 5) #define MAX_BOTTOMHALF (1 << 5)
#define MAX_KEYBOARD (1 << 6) #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_X (1 << 0)
#define SAVE_GEOMETRY_Y (1 << 1) #define SAVE_GEOMETRY_Y (1 << 1)

View File

@@ -252,11 +252,11 @@ void wClientConfigure(WWindow * wwin, XConfigureRequestEvent * xcre)
nheight = wwin->frame->core->height - wwin->frame->top_width - wwin->frame->bottom_width; nheight = wwin->frame->core->height - wwin->frame->top_width - wwin->frame->bottom_width;
if (nwidth != wwin->old_geometry.width) if (nwidth != wwin->old_geometry.width)
wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_HORIZONTAL | MAX_TOPHALF | MAX_BOTTOMHALF | MAX_MAXIMUS);
if (nheight != wwin->old_geometry.height) if (nheight != wwin->old_geometry.height)
wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); 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.x = nx;
wwin->old_geometry.y = ny; wwin->old_geometry.y = ny;
wwin->old_geometry.width = nwidth; wwin->old_geometry.width = nwidth;

View File

@@ -605,6 +605,10 @@ WDefaultEntry optionList[] = {
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"RHMaximizeKey", "None", (void*)WKBD_RHMAXIMIZE, {"RHMaximizeKey", "None", (void*)WKBD_RHMAXIMIZE,
NULL, getKeybind, setKeyGrab, NULL, NULL}, 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, {"MaximusKey", "None", (void*)WKBD_MAXIMUS,
NULL, getKeybind, setKeyGrab, NULL, NULL}, NULL, getKeybind, setKeyGrab, NULL, NULL},
{"RaiseKey", "\"Meta+Up\"", (void *)WKBD_RAISE, {"RaiseKey", "\"Meta+Up\"", (void *)WKBD_RAISE,

View File

@@ -1470,6 +1470,20 @@ static void handleKeyPress(XEvent * event)
handleMaximize(wwin, MAX_VERTICAL | MAX_RIGHTHALF | MAX_KEYBOARD); handleMaximize(wwin, MAX_VERTICAL | MAX_RIGHTHALF | MAX_KEYBOARD);
} }
break; 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: case WKBD_MAXIMUS:
if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) {
CloseWindowMenu(scr); CloseWindowMenu(scr);

View File

@@ -35,8 +35,10 @@ enum {
WKBD_MAXIMIZE, WKBD_MAXIMIZE,
WKBD_VMAXIMIZE, WKBD_VMAXIMIZE,
WKBD_HMAXIMIZE, WKBD_HMAXIMIZE,
WKBD_LHMAXIMIZE, WKBD_LHMAXIMIZE,
WKBD_RHMAXIMIZE, WKBD_RHMAXIMIZE,
WKBD_THMAXIMIZE,
WKBD_BHMAXIMIZE,
WKBD_MAXIMUS, WKBD_MAXIMUS,
WKBD_SELECT, WKBD_SELECT,
WKBD_RAISE, WKBD_RAISE,

View File

@@ -1521,7 +1521,7 @@ int wKeyboardMoveResizeWindow(WWindow * wwin)
} }
} else { } else {
if (ww != original_w) 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) if (wh != original_h)
wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS);
@@ -2078,7 +2078,7 @@ void wMouseResizeWindow(WWindow * wwin, XEvent * ev)
XUngrabServer(dpy); XUngrabServer(dpy);
if (fw != original_fw) 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) if (fh != original_fh)
wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS); wwin->flags.maximized &= ~(MAX_VERTICAL | MAX_LEFTHALF | MAX_RIGHTHALF | MAX_MAXIMUS);

View File

@@ -249,8 +249,8 @@ typedef struct WWindow {
unsigned int miniaturized:1; unsigned int miniaturized:1;
unsigned int hidden:1; unsigned int hidden:1;
unsigned int shaded:1; unsigned int shaded:1;
unsigned int maximized:5; unsigned int maximized:7;
unsigned int old_maximized:5; unsigned int old_maximized:7;
unsigned int fullscreen:1; unsigned int fullscreen:1;
unsigned int omnipresent:1; unsigned int omnipresent:1;
unsigned int semi_focused:1; unsigned int semi_focused:1;