JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
using -Os again, zoom is ignored in floating mode or on floating clients
[dwm.git] / client.c
index 5912c77..589b73e 100644 (file)
--- a/client.c
+++ b/client.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdlib.h>
 #include <string.h>
 #include <X11/Xatom.h>
@@ -17,9 +16,9 @@ resizetitle(Client *c)
        int i;
 
        c->tw = 0;
-       for(i = 0; i < TLast; i++)
+       for(i = 0; i < ntags; i++)
                if(c->tags[i])
-                       c->tw += textw(c->tags[i]);
+                       c->tw += textw(tags[i]);
        c->tw += textw(c->name);
        if(c->tw > c->w)
                c->tw = c->w + 2;
@@ -212,6 +211,7 @@ manage(Window w, XWindowAttributes *wa)
        XSetWindowAttributes twa;
 
        c = emallocz(sizeof(Client));
+       c->tags = emallocz(ntags * sizeof(Bool));
        c->win = w;
        c->x = c->tx = wa->x;
        c->y = c->ty = wa->y;
@@ -219,7 +219,7 @@ manage(Window w, XWindowAttributes *wa)
        c->h = wa->height;
        c->th = bh;
 
-       c->border = 1;
+       c->border = 0;
        setsize(c);
 
        if(c->h != sh && c->y < bh)
@@ -245,17 +245,36 @@ manage(Window w, XWindowAttributes *wa)
 
        XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK,
                        GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button1, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+
        XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK,
                        GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button2, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+
        XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK,
                        GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
+       XGrabButton(dpy, Button3, MODKEY | NUMLOCKMASK | LockMask, c->win, False, BUTTONMASK,
+                       GrabModeAsync, GrabModeSync, None, None);
 
        settags(c);
        if(!c->isfloat)
                c->isfloat = trans
                        || (c->maxw && c->minw &&
-                               c->maxw == c->minw && c->maxh == c->minh)
-                       || (c->w == sw && c->h == sh);
+                               c->maxw == c->minw && c->maxh == c->minh);
        settitle(c);
        arrange(NULL);
 
@@ -271,7 +290,7 @@ resize(Client *c, Bool sizehints, Corner sticky)
 {
        int bottom = c->y + c->h;
        int right = c->x + c->w;
-       XConfigureEvent e;
+       /*XConfigureEvent e;*/
        XWindowChanges wc;
 
        if(sizehints) {
@@ -302,21 +321,11 @@ resize(Client *c, Bool sizehints, Corner sticky)
        wc.y = c->y;
        wc.width = c->w;
        wc.height = c->h;
-       wc.border_width = 1;
-       XConfigureWindow(dpy, c->win,
-                       CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
-
-       e.type = ConfigureNotify;
-       e.event = c->win;
-       e.window = c->win;
-       e.x = c->x;
-       e.y = c->y;
-       e.width = c->w;
-       e.height = c->h;
-       e.border_width = c->border;
-       e.above = None;
-       e.override_redirect = False;
-       XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
+       if(c->w == sw && c->h == sh)
+               wc.border_width = 0;
+       else
+               wc.border_width = 1;
+       XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
        XSync(dpy, False);
 }
 
@@ -403,8 +412,8 @@ togglemax(Arg *arg)
                oh = sel->h;
                sel->x = sx;
                sel->y = sy + bh;
-               sel->w = sw - 2 * sel->border;
-               sel->h = sh - 2 * sel->border - bh;
+               sel->w = sw - 2;
+               sel->h = sh - 2 - bh;
 
                higher(sel);
                resize(sel, False, TopLeft);
@@ -441,6 +450,7 @@ unmanage(Client *c)
                if(!sel)
                        sel = clients;
        }
+       free(c->tags);
        free(c);
 
        XSync(dpy, False);
@@ -456,7 +466,7 @@ zoom(Arg *arg)
 {
        Client *c;
 
-       if(!sel)
+       if(!sel || arrange != dotile)
                return;
 
        if(sel == getnext(clients) && sel->next)  {