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

wmaker: Allow configuration of window snapping detect distances.

This patch introduces two new configuration values, SnapEdgeDetect and
SnapCornerDetect, which users can set to change the distance from an edge
or corner at which window snapping will begin.  The defaults are 1 and 10,
respectively.

Suggested-by: Josip Deanovic <djosip+news@linuxpages.net>
This commit is contained in:
Doug Torrance
2015-06-22 09:50:51 -05:00
committed by Carlos R. Mafra
parent 791fdd1eff
commit 443a08ea16
4 changed files with 30 additions and 14 deletions

5
NEWS
View File

@@ -17,6 +17,11 @@ Note that if "Switch workspaces while dragging windows" is selected under
~/GNUstep/Defaults/WindowMaker, then you may only snap a window to the top or
bottom of the screen.
You may set the distance (in pixels) from the edge or corner of the screen at
which a window will begin snapping using "SnapEdgeDetect" and "SnapCornerDetect"
in ~/GNUstep/Defaults/WindowMaker. (The defaults are 1 pixel and 10 pixels,
respectively).
Dragging maximized windows
--------------------------

View File

@@ -360,6 +360,8 @@ extern struct WPreferences {
char no_animations; /* enable/disable animations */
char no_autowrap; /* wrap workspace when window is moved to the edge */
char window_snapping; /* enable window snapping */
int snap_edge_detect; /* how far from edge to begin snap */
int snap_corner_detect; /* how far from corner to begin snap */
char drag_maximized_window; /* behavior when a maximized window is dragged */
char highlight_active_app; /* show the focused app by highlighting its icon */

View File

@@ -474,6 +474,10 @@ WDefaultEntry optionList[] = {
&wPreferences.no_autowrap, getBool, NULL, NULL, NULL},
{"WindowSnapping", "NO", NULL,
&wPreferences.window_snapping, getBool, NULL, NULL, NULL},
{"SnapEdgeDetect", "1", NULL,
&wPreferences.snap_edge_detect, getInt, NULL, NULL, NULL},
{"SnapCornerDetect", "10", NULL,
&wPreferences.snap_corner_detect, getInt, NULL, NULL, NULL},
{"DragMaximizedWindow", "Move", seDragMaximizedWindow,
&wPreferences.drag_maximized_window, getEnum, NULL, NULL, NULL},
{"HighlightActiveApp", "YES", NULL,

View File

@@ -1240,23 +1240,28 @@ static void draw_snap_frame(WWindow *wwin, int direction)
static int get_snap_direction(WScreen *scr, int x, int y)
{
if (x < 1) {
if (y < 1)
return SNAP_TOPLEFT;
if (y > scr->scr_height - 2)
return SNAP_BOTTOMLEFT;
int edge, corner;
edge = wPreferences.snap_edge_detect;
corner = wPreferences.snap_corner_detect;
if (x < corner && y < corner)
return SNAP_TOPLEFT;
if (x < corner && y >= scr->scr_height - corner)
return SNAP_BOTTOMLEFT;
if (x < edge)
return SNAP_LEFT;
}
if (x > scr->scr_width - 2) {
if (y < 1)
return SNAP_TOPRIGHT;
if (y > scr->scr_height - 2)
return SNAP_BOTTOMRIGHT;
if (x >= scr->scr_width - corner && y < corner)
return SNAP_TOPRIGHT;
if (x >= scr->scr_width - corner && y >= scr->scr_height - corner)
return SNAP_BOTTOMRIGHT;
if (x >= scr->scr_width - edge)
return SNAP_RIGHT;
}
if (y < 1)
if (y < edge)
return SNAP_TOP;
if (y > scr->scr_height - 2)
if (y >= scr->scr_height - edge)
return SNAP_BOTTOM;
return SNAP_NONE;
}