On Mon, 22 Jun 2015 at 10:02:56 -0500, Doug Torrance wrote: > 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.
Thank you, Doug! The patch should be in the repo now. Fortunately the airport wifi in Sao Paulo doesn't have any restrictions :-) > > 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 > -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.