From 5b5ab0408a82603ea0d91da9332988f0bb2e9c0f Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 19 Mar 2003 19:21:55 +0000 Subject: [PATCH] add code for snapping windows to screen edges --- openbox/Makefile.am | 4 ++-- openbox/snap.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ openbox/snap.h | 8 ++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 openbox/snap.c create mode 100644 openbox/snap.h diff --git a/openbox/Makefile.am b/openbox/Makefile.am index 82775855..5ed49c97 100644 --- a/openbox/Makefile.am +++ b/openbox/Makefile.am @@ -20,11 +20,11 @@ ob3_LDADD=@LIBINTL@ ../render/librender.a ob3_LDFLAGS=-export-dynamic ob3_SOURCES=client.c event.c extensions.c focus.c frame.c openbox.c prop.c \ screen.c stacking.c xerror.c themerc.c timer.c dispatch.c \ - engine.c plugin.c action.c grab.c + engine.c plugin.c action.c grab.c snap.c noinst_HEADERS=client.h event.h extensions.h focus.h frame.h geom.h gettext.h \ openbox.h prop.h screen.h stacking.h xerror.h themerc.h dispatch.h \ - timer.h engine.h plugin.h action.h grab.h + timer.h engine.h plugin.h action.h grab.h snap.h MAINTAINERCLEANFILES= Makefile.in diff --git a/openbox/snap.c b/openbox/snap.c new file mode 100644 index 00000000..bd9b3d50 --- /dev/null +++ b/openbox/snap.c @@ -0,0 +1,48 @@ +#include "client.h" +#include "frame.h" +#include "stacking.h" +#include "screen.h" + +static int resistance = 10; + +void snap_move(Client *c, int *x, int *y, int w, int h) +{ + GList *it; + Rect *area; + int l, t, r, b; /* requested edges */ + int al, at, ar, ab; /* screen area edges */ + int cl, ct, cr, cb; /* current edges */ + + /* add the frame to the dimensions */ + l = *x; + t = *y; + r = l + w - 1; + b = t + h - 1; + + cl = c->frame->area.x; + ct = c->frame->area.y; + cr = cl + c->frame->area.width - 1; + cb = ct + c->frame->area.height - 1; + + /* snap to other clients */ + for (it = stacking_list; it != NULL; it = it->next) { + /* XXX foo */ + } + + /* get the screen boundaries */ + area = screen_area(c->desktop); + al = area->x; + at = area->y; + ar = al + area->width - 1; + ab = at + area->height - 1; + + /* snap to screen edges */ + if (cl >= al && l < al && l >= al - resistance) + *x = al; + else if (cr <= ar && r > ar && r <= ar + resistance) + *x = ar - w + 1; + if (ct >= at && t < at && t >= at - resistance) + *y = at; + else if (cb <= ab && b > ab && b < ab + resistance) + *y = ab - h + 1; +} diff --git a/openbox/snap.h b/openbox/snap.h new file mode 100644 index 00000000..5bf26272 --- /dev/null +++ b/openbox/snap.h @@ -0,0 +1,8 @@ +#ifndef __snap_h +#define __snap_h + +#include "client.h" + +void snap_move(Client *c, int *x, int *y, int w, int h); + +#endif -- 2.39.2