mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-22 14:08:06 +01:00
wmaker: Add "unmaximize on move" feature.
This patch adds the ability to completely unmaximize, i.e., clear the maximized flag and return to the original geometry, a maximized window that is moved. This behavior mirrors that of other common desktop enviroments, e.g., GNOME, Unity, and Windows. To enable this feature, set "UnmaximizeOnMove = YES" in ~/GNUstep/Defaults/WindowMaker. Signed-off-by: Carlos R. Mafra <crmafra@gmail.com>
This commit is contained in:
committed by
Carlos R. Mafra
parent
38b58112ac
commit
12fa7b2203
@@ -353,6 +353,7 @@ extern struct WPreferences {
|
|||||||
char no_animations; /* enable/disable animations */
|
char no_animations; /* enable/disable animations */
|
||||||
char no_autowrap; /* wrap workspace when window is moved to the edge */
|
char no_autowrap; /* wrap workspace when window is moved to the edge */
|
||||||
char window_snapping; /* enable window snapping */
|
char window_snapping; /* enable window snapping */
|
||||||
|
char unmaximize_on_move; /* unmaximize a maximized window when it is moved */
|
||||||
|
|
||||||
char highlight_active_app; /* show the focused app by highlighting its icon */
|
char highlight_active_app; /* show the focused app by highlighting its icon */
|
||||||
char auto_arrange_icons; /* automagically arrange icons */
|
char auto_arrange_icons; /* automagically arrange icons */
|
||||||
|
|||||||
@@ -452,6 +452,8 @@ WDefaultEntry optionList[] = {
|
|||||||
&wPreferences.no_autowrap, getBool, NULL, NULL, NULL},
|
&wPreferences.no_autowrap, getBool, NULL, NULL, NULL},
|
||||||
{"WindowSnapping", "NO", NULL,
|
{"WindowSnapping", "NO", NULL,
|
||||||
&wPreferences.window_snapping, getBool, NULL, NULL, NULL},
|
&wPreferences.window_snapping, getBool, NULL, NULL, NULL},
|
||||||
|
{"UnmaximizeOnMove", "NO", NULL,
|
||||||
|
&wPreferences.unmaximize_on_move, getBool, NULL, NULL, NULL},
|
||||||
{"HighlightActiveApp", "YES", NULL,
|
{"HighlightActiveApp", "YES", NULL,
|
||||||
&wPreferences.highlight_active_app, getBool, NULL, NULL, NULL},
|
&wPreferences.highlight_active_app, getBool, NULL, NULL, NULL},
|
||||||
{"AutoArrangeIcons", "NO", NULL,
|
{"AutoArrangeIcons", "NO", NULL,
|
||||||
|
|||||||
@@ -1724,9 +1724,23 @@ int wMouseMoveWindow(WWindow * wwin, XEvent * ev)
|
|||||||
|| abs(ev->xmotion.y_root - event.xmotion.y_root) >= MOVE_THRESHOLD) {
|
|| abs(ev->xmotion.y_root - event.xmotion.y_root) >= MOVE_THRESHOLD) {
|
||||||
|
|
||||||
if (wwin->flags.maximized) {
|
if (wwin->flags.maximized) {
|
||||||
|
if (wPreferences.unmaximize_on_move) {
|
||||||
|
float titlebar_ratio;
|
||||||
|
int new_x, new_y;
|
||||||
|
|
||||||
|
titlebar_ratio = (moveData.mouseX - wwin->frame_x) /
|
||||||
|
(float)wwin->frame->core->width;
|
||||||
|
new_y = wwin->frame_y;
|
||||||
|
wUnmaximizeWindow(wwin);
|
||||||
|
new_x = moveData.mouseX - titlebar_ratio * wwin->frame->core->width;
|
||||||
|
wWindowMove(wwin, new_x, new_y);
|
||||||
|
moveData.realX = moveData.calcX = wwin->frame_x;
|
||||||
|
moveData.realY = moveData.calcY = wwin->frame_y;
|
||||||
|
} else {
|
||||||
wwin->flags.maximized = 0;
|
wwin->flags.maximized = 0;
|
||||||
wwin->flags.old_maximized = 0;
|
wwin->flags.old_maximized = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
XChangeActivePointerGrab(dpy, ButtonMotionMask
|
XChangeActivePointerGrab(dpy, ButtonMotionMask
|
||||||
| ButtonReleaseMask | ButtonPressMask,
|
| ButtonReleaseMask | ButtonPressMask,
|
||||||
|
|||||||
Reference in New Issue
Block a user