JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
added basic mouse support (actually we don't need more)
authorAnselm R. Garbe <garbeam@wmii.de>
Tue, 11 Jul 2006 19:41:49 +0000 (21:41 +0200)
committerAnselm R. Garbe <garbeam@wmii.de>
Tue, 11 Jul 2006 19:41:49 +0000 (21:41 +0200)
client.c
event.c
mouse.c
wm.h

index e05fdd7..c11d5d5 100644 (file)
--- a/client.c
+++ b/client.c
@@ -70,8 +70,7 @@ manage(Window w, XWindowAttributes *wa)
        c->r[RFloat].y = wa->y;
        c->r[RFloat].width = wa->width;
        c->r[RFloat].height = wa->height;
-       c->border = wa->border_width;
-       XSetWindowBorderWidth(dpy, c->win, 0);
+       XSetWindowBorderWidth(dpy, c->win, 1);
        XSelectInput(dpy, c->win, CLIENT_MASK);
        XGetTransientForHint(dpy, c->win, &c->trans);
        if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
@@ -97,7 +96,11 @@ manage(Window w, XWindowAttributes *wa)
        c->snext = stack;
        stack = c;
        XMapWindow(dpy, c->win);
-       XGrabButton(dpy, AnyButton, Mod1Mask, c->win, False, ButtonPressMask,
+       XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
                        GrabModeAsync, GrabModeSync, None, None);
        focus(c);
 }
@@ -116,7 +119,7 @@ resize(Client *c)
        e.y = c->r[RFloat].y;
        e.width = c->r[RFloat].width;
        e.height = c->r[RFloat].height;
-       e.border_width = c->border;
+       e.border_width = 0;
        e.above = None;
        e.override_redirect = False;
        XSelectInput(dpy, c->win, CLIENT_MASK & ~StructureNotifyMask);
diff --git a/event.c b/event.c
index ad4a16b..b8b39a4 100644 (file)
--- a/event.c
+++ b/event.c
@@ -86,8 +86,6 @@ configurerequest(XEvent *e)
                        c->r[RFloat].width = ev->width;
                if(ev->value_mask & CWHeight)
                        c->r[RFloat].height = ev->height;
-               if(ev->value_mask & CWBorderWidth)
-                       c->border = ev->border_width;
        }
 
        wc.x = ev->x;
diff --git a/mouse.c b/mouse.c
index 2b5d63b..07b533c 100644 (file)
--- a/mouse.c
+++ b/mouse.c
@@ -42,7 +42,7 @@ mresize(Client *c)
 
        old_cx = c->r[RFloat].x;
        old_cy = c->r[RFloat].y;
-       if(XGrabPointer(dpy, c->win, False, MouseMask, GrabModeAsync, GrabModeAsync,
+       if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
                                None, cursor[CurResize], CurrentTime) != GrabSuccess)
                return;
        XGrabServer(dpy);
@@ -55,10 +55,12 @@ mresize(Client *c)
                case MotionNotify:
                        XUngrabServer(dpy);
                        mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y);
-                       resize(c);
+                       XResizeWindow(dpy, c->win, c->r[RFloat].width, c->r[RFloat].height);
                        XGrabServer(dpy);
                        break;
                case ButtonRelease:
+                       resize(c);
+                       XUngrabServer(dpy);
                        XUngrabPointer(dpy, CurrentTime);
                        return;
                }
@@ -75,7 +77,7 @@ mmove(Client *c)
 
        old_cx = c->r[RFloat].x;
        old_cy = c->r[RFloat].y;
-       if(XGrabPointer(dpy, c->win, False, MouseMask, GrabModeAsync, GrabModeAsync,
+       if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
                                None, cursor[CurMove], CurrentTime) != GrabSuccess)
                return;
        XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
@@ -88,10 +90,12 @@ mmove(Client *c)
                        XUngrabServer(dpy);
                        c->r[RFloat].x = old_cx + (ev.xmotion.x - x1);
                        c->r[RFloat].y = old_cy + (ev.xmotion.y - y1);
-                       resize(c);
+                       XMoveResizeWindow(dpy, c->win, c->r[RFloat].x, c->r[RFloat].y,
+                                       c->r[RFloat].width, c->r[RFloat].height);
                        XGrabServer(dpy);
                        break;
                case ButtonRelease:
+                       resize(c);
                        XUngrabServer(dpy);
                        XUngrabPointer(dpy, CurrentTime);
                        return;
diff --git a/wm.h b/wm.h
index 7ee6103..b647a3e 100644 (file)
--- a/wm.h
+++ b/wm.h
 
 typedef struct Client Client;
 typedef struct Key Key;
-typedef enum Align Align;
-
-enum Align {
-       NORTH = 0x01,
-       EAST  = 0x02,
-       SOUTH = 0x04,
-       WEST  = 0x08,
-       NEAST = NORTH | EAST,
-       NWEST = NORTH | WEST,
-       SEAST = SOUTH | EAST,
-       SWEST = SOUTH | WEST,
-       CENTER = NEAST | SWEST
-};
 
 /* atoms */
 enum { WMProtocols, WMDelete, WMLast };
@@ -40,7 +27,6 @@ enum { RFloat, RGrid, RLast };
 struct Client {
        char name[256];
        char tag[256];
-       unsigned int border;
        int proto;
        Bool fixedsize;
        Window win;