On 06/21/2015 03:37 AM, Josip Deanovic wrote: > I have just looked at the code and I think it could be done. > > This is what I did and it works fine. I have used 10px but it might > be increased (lower than 10px wouldn't look good). > > It makes corner snapping much easier and it looks more like something > people might be used to while working with other systems.
I've adapted your patch a bit to make both the edge and corner detect distances configurable. Carlos, the wireless I'm on currently isn't allowing me smtp access to use git send-email. I've attached the patch -- I hope that's ok. Doug
From b836816651d1c2cb3c9435d45e03e41baccc665a Mon Sep 17 00:00:00 2001 From: Doug Torrance <dtorra...@monmouthcollege.edu> 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 <djosip+n...@linuxpages.net> --- 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 fb96dbb..d60603c 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 37e3fc0..99751ff 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 c5a94c6..6f9edfd 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 cded064..e8883c8 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; } -- 2.1.4