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.

Reply via email to