From 443a08ea1683adc3d6ea0811f44e85762033deb2 Mon Sep 17 00:00:00 2001 From: Doug Torrance Date: Mon, 22 Jun 2015 09:50:51 -0500 Subject: [PATCH] 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 --- NEWS | 5 +++++ src/WindowMaker.h | 2 ++ src/defaults.c | 4 ++++ src/moveres.c | 33 +++++++++++++++++++-------------- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index fb96dbbf..d60603cd 100644 --- a/NEWS +++ b/NEWS @@ -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 -------------------------- diff --git a/src/WindowMaker.h b/src/WindowMaker.h index 37e3fc01..99751ff8 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -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 */ diff --git a/src/defaults.c b/src/defaults.c index c5a94c69..6f9edfd6 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -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, diff --git a/src/moveres.c b/src/moveres.c index cded064f..e8883c82 100644 --- a/src/moveres.c +++ b/src/moveres.c @@ -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; }