introduce a new config option to snap to the screen edge. 'snapdist'
keyword taken from a diff from Sviatoslav Chagaev to do the same thing, but implemented in a completely way (based on some very old code from mk@). default set to 0, so no behavior change. ok oga@ (who would also like to take it further...)
This commit is contained in:
parent
c800341623
commit
ffa68ab4a0
@ -15,7 +15,7 @@
|
|||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: calmwm.h,v 1.130 2011/06/24 06:01:47 okan Exp $
|
* $OpenBSD: calmwm.h,v 1.131 2011/06/24 06:06:24 okan Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _CALMWM_H_
|
#ifndef _CALMWM_H_
|
||||||
@ -273,6 +273,8 @@ struct conf {
|
|||||||
int bwidth;
|
int bwidth;
|
||||||
#define CONF_MAMOUNT 1
|
#define CONF_MAMOUNT 1
|
||||||
int mamount;
|
int mamount;
|
||||||
|
#define CONF_SNAPDIST 0
|
||||||
|
int snapdist;
|
||||||
struct gap gap;
|
struct gap gap;
|
||||||
#define CONF_COLOR_ACTIVEBORDER "#CCCCCC"
|
#define CONF_COLOR_ACTIVEBORDER "#CCCCCC"
|
||||||
#define CONF_COLOR_INACTIVEBORDER "#666666"
|
#define CONF_COLOR_INACTIVEBORDER "#666666"
|
||||||
@ -325,6 +327,7 @@ void client_resize(struct client_ctx *);
|
|||||||
void client_send_delete(struct client_ctx *);
|
void client_send_delete(struct client_ctx *);
|
||||||
void client_setactive(struct client_ctx *, int);
|
void client_setactive(struct client_ctx *, int);
|
||||||
void client_setname(struct client_ctx *);
|
void client_setname(struct client_ctx *);
|
||||||
|
int client_snapcalc(int, int, int, int, int);
|
||||||
void client_unhide(struct client_ctx *);
|
void client_unhide(struct client_ctx *);
|
||||||
void client_vertmaximize(struct client_ctx *);
|
void client_vertmaximize(struct client_ctx *);
|
||||||
void client_warp(struct client_ctx *);
|
void client_warp(struct client_ctx *);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: client.c,v 1.84 2011/06/24 06:01:47 okan Exp $
|
* $OpenBSD: client.c,v 1.85 2011/06/24 06:06:24 okan Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -842,3 +842,32 @@ client_inbound(struct client_ctx *cc, int x, int y)
|
|||||||
return (x < cc->geom.width && x >= 0 &&
|
return (x < cc->geom.width && x >= 0 &&
|
||||||
y < cc->geom.height && y >= 0);
|
y < cc->geom.height && y >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
client_snapcalc(int n, int dn, int nmax, int bwidth, int snapdist)
|
||||||
|
{
|
||||||
|
int n0, n1, s0, s1;
|
||||||
|
|
||||||
|
s0 = s1 = 0;
|
||||||
|
n0 = n;
|
||||||
|
n1 = n + dn + (bwidth * 2);
|
||||||
|
|
||||||
|
if (abs(n0) <= snapdist)
|
||||||
|
s0 = -n0;
|
||||||
|
|
||||||
|
if (nmax - snapdist <= n1 && n1 <= nmax + snapdist)
|
||||||
|
s1 = nmax - n1;
|
||||||
|
|
||||||
|
/* possible to snap in both directions */
|
||||||
|
if (s0 != 0 && s1 != 0)
|
||||||
|
if (abs(s0) < abs(s1))
|
||||||
|
return s0;
|
||||||
|
else
|
||||||
|
return s1;
|
||||||
|
else if (s0 != 0)
|
||||||
|
return s0;
|
||||||
|
else if (s1 != 0)
|
||||||
|
return s1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: conf.c,v 1.83 2011/06/24 05:54:30 okan Exp $
|
* $OpenBSD: conf.c,v 1.84 2011/06/24 06:06:24 okan Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -184,6 +184,7 @@ conf_init(struct conf *c)
|
|||||||
c->flags = 0;
|
c->flags = 0;
|
||||||
c->bwidth = CONF_BWIDTH;
|
c->bwidth = CONF_BWIDTH;
|
||||||
c->mamount = CONF_MAMOUNT;
|
c->mamount = CONF_MAMOUNT;
|
||||||
|
c->snapdist = CONF_SNAPDIST;
|
||||||
|
|
||||||
TAILQ_INIT(&c->ignoreq);
|
TAILQ_INIT(&c->ignoreq);
|
||||||
TAILQ_INIT(&c->cmdq);
|
TAILQ_INIT(&c->cmdq);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $OpenBSD: cwmrc.5,v 1.35 2011/05/07 17:15:37 okan Exp $
|
.\" $OpenBSD: cwmrc.5,v 1.36 2011/06/24 06:06:24 okan Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2004,2005 Marius Aamodt Eriksen <marius@monkey.org>
|
.\" Copyright (c) 2004,2005 Marius Aamodt Eriksen <marius@monkey.org>
|
||||||
.\"
|
.\"
|
||||||
@ -14,7 +14,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: May 7 2011 $
|
.Dd $Mdocdate: June 24 2011 $
|
||||||
.Dt CWMRC 5
|
.Dt CWMRC 5
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -277,6 +277,8 @@ Reverse cycle through groups.
|
|||||||
Forward cycle through windows.
|
Forward cycle through windows.
|
||||||
.It rcycle
|
.It rcycle
|
||||||
Reverse cycle through windows.
|
Reverse cycle through windows.
|
||||||
|
.It snapdist
|
||||||
|
Minimum distance to snap-to adjacent edge.
|
||||||
.It delete
|
.It delete
|
||||||
Delete current window.
|
Delete current window.
|
||||||
.It hide
|
.It hide
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: kbfunc.c,v 1.54 2011/06/24 05:33:41 okan Exp $
|
* $OpenBSD: kbfunc.c,v 1.55 2011/06/24 06:06:24 okan Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -100,6 +100,13 @@ kbfunc_moveresize(struct client_ctx *cc, union arg *arg)
|
|||||||
if (cc->geom.x > cc->sc->xmax - 1)
|
if (cc->geom.x > cc->sc->xmax - 1)
|
||||||
cc->geom.x = cc->sc->xmax - 1;
|
cc->geom.x = cc->sc->xmax - 1;
|
||||||
|
|
||||||
|
cc->geom.x += client_snapcalc(cc->geom.x,
|
||||||
|
cc->geom.width, cc->sc->xmax,
|
||||||
|
cc->bwidth, Conf.snapdist);
|
||||||
|
cc->geom.y += client_snapcalc(cc->geom.y,
|
||||||
|
cc->geom.height, cc->sc->ymax,
|
||||||
|
cc->bwidth, Conf.snapdist);
|
||||||
|
|
||||||
client_move(cc);
|
client_move(cc);
|
||||||
xu_ptr_getpos(cc->win, &x, &y);
|
xu_ptr_getpos(cc->win, &x, &y);
|
||||||
cc->ptr.y = y + my;
|
cc->ptr.y = y + my;
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* $OpenBSD: mousefunc.c,v 1.28 2011/06/24 05:51:25 okan Exp $
|
* $OpenBSD: mousefunc.c,v 1.29 2011/06/24 06:06:24 okan Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -160,6 +160,13 @@ mousefunc_window_move(struct client_ctx *cc, void *arg)
|
|||||||
cc->geom.x = ev.xmotion.x_root - px - cc->bwidth;
|
cc->geom.x = ev.xmotion.x_root - px - cc->bwidth;
|
||||||
cc->geom.y = ev.xmotion.y_root - py - cc->bwidth;
|
cc->geom.y = ev.xmotion.y_root - py - cc->bwidth;
|
||||||
|
|
||||||
|
cc->geom.x += client_snapcalc(cc->geom.x,
|
||||||
|
cc->geom.width, cc->sc->xmax,
|
||||||
|
cc->bwidth, Conf.snapdist);
|
||||||
|
cc->geom.y += client_snapcalc(cc->geom.y,
|
||||||
|
cc->geom.height, cc->sc->ymax,
|
||||||
|
cc->bwidth, Conf.snapdist);
|
||||||
|
|
||||||
/* don't move more than 60 times / second */
|
/* don't move more than 60 times / second */
|
||||||
if ((ev.xmotion.time - time) > (1000 / 60)) {
|
if ((ev.xmotion.time - time) > (1000 / 60)) {
|
||||||
time = ev.xmotion.time;
|
time = ev.xmotion.time;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: parse.y,v 1.26 2010/09/25 20:02:58 okan Exp $ */
|
/* $OpenBSD: parse.y,v 1.27 2011/06/24 06:06:24 okan Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org>
|
* Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||||
@ -70,7 +70,7 @@ typedef struct {
|
|||||||
%token FONTNAME STICKY GAP MOUSEBIND
|
%token FONTNAME STICKY GAP MOUSEBIND
|
||||||
%token AUTOGROUP BIND COMMAND IGNORE
|
%token AUTOGROUP BIND COMMAND IGNORE
|
||||||
%token YES NO BORDERWIDTH MOVEAMOUNT
|
%token YES NO BORDERWIDTH MOVEAMOUNT
|
||||||
%token COLOR
|
%token COLOR SNAPDIST
|
||||||
%token ACTIVEBORDER INACTIVEBORDER
|
%token ACTIVEBORDER INACTIVEBORDER
|
||||||
%token GROUPBORDER UNGROUPBORDER
|
%token GROUPBORDER UNGROUPBORDER
|
||||||
%token ERROR
|
%token ERROR
|
||||||
@ -120,6 +120,9 @@ main : FONTNAME STRING {
|
|||||||
| MOVEAMOUNT NUMBER {
|
| MOVEAMOUNT NUMBER {
|
||||||
conf->mamount = $2;
|
conf->mamount = $2;
|
||||||
}
|
}
|
||||||
|
| SNAPDIST NUMBER {
|
||||||
|
conf->snapdist = $2;
|
||||||
|
}
|
||||||
| COMMAND STRING string {
|
| COMMAND STRING string {
|
||||||
conf_cmd_add(conf, $3, $2, 0);
|
conf_cmd_add(conf, $3, $2, 0);
|
||||||
free($2);
|
free($2);
|
||||||
@ -228,6 +231,7 @@ lookup(char *s)
|
|||||||
{ "mousebind", MOUSEBIND},
|
{ "mousebind", MOUSEBIND},
|
||||||
{ "moveamount", MOVEAMOUNT},
|
{ "moveamount", MOVEAMOUNT},
|
||||||
{ "no", NO},
|
{ "no", NO},
|
||||||
|
{ "snapdist", SNAPDIST},
|
||||||
{ "sticky", STICKY},
|
{ "sticky", STICKY},
|
||||||
{ "ungroupborder", UNGROUPBORDER},
|
{ "ungroupborder", UNGROUPBORDER},
|
||||||
{ "yes", YES}
|
{ "yes", YES}
|
||||||
@ -523,6 +527,7 @@ parse_config(const char *filename, struct conf *xconf)
|
|||||||
xconf->flags = conf->flags;
|
xconf->flags = conf->flags;
|
||||||
xconf->bwidth = conf->bwidth;
|
xconf->bwidth = conf->bwidth;
|
||||||
xconf->mamount = conf->mamount;
|
xconf->mamount = conf->mamount;
|
||||||
|
xconf->snapdist = conf->snapdist;
|
||||||
xconf->gap = conf->gap;
|
xconf->gap = conf->gap;
|
||||||
|
|
||||||
while ((cmd = TAILQ_FIRST(&conf->cmdq)) != NULL) {
|
while ((cmd = TAILQ_FIRST(&conf->cmdq)) != NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user