JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
made fullscreen apps working fine in floating mode (there is no sane way to make...
authorarg@10ksloc.org <unknown>
Wed, 2 Aug 2006 14:32:05 +0000 (16:32 +0200)
committerarg@10ksloc.org <unknown>
Wed, 2 Aug 2006 14:32:05 +0000 (16:32 +0200)
client.c
config.arg.h
config.h
draw.c
dwm.h
event.c
main.c
tag.c
util.c

index 5912c77..b6bda92 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>
@@ -219,7 +218,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)
@@ -254,8 +253,7 @@ manage(Window w, XWindowAttributes *wa)
        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 +269,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 +300,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 +391,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);
index 80d4918..933bcfb 100644 (file)
@@ -3,15 +3,6 @@
  * See LICENSE file for license details.
  */
 
-#define DEFMODE                        dotile /* dofloat */
-#define FONT                   "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
-#define BGCOLOR                        "#0a2c2d"
-#define FGCOLOR                        "#ddeeee"
-#define BORDERCOLOR            "#176164"
-#define MODKEY                 Mod1Mask
-#define NUMLOCKMASK            Mod2Mask
-#define MASTERW                        52 /* percent */
-
 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 #define TAGS \
 char *tags[TLast] = { \
@@ -21,7 +12,16 @@ char *tags[TLast] = { \
        [Twork] = "work", \
        [Tmisc] = "misc", \
 };
+
+#define DEFMODE                        dotile /* dofloat */
 #define DEFTAG                 Tdev
+#define FONT                   "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
+#define BGCOLOR                        "#0a2c2d"
+#define FGCOLOR                        "#ddeeee"
+#define BORDERCOLOR            "#176164"
+#define MODKEY                 Mod1Mask
+#define NUMLOCKMASK            Mod2Mask
+#define MASTERW                        52 /* percent */
 
 #define KEYS \
        const char *browse[] = { "firefox", NULL }; \
index d9070e3..1e8cb39 100644 (file)
--- a/config.h
+++ b/config.h
@@ -3,15 +3,6 @@
  * See LICENSE file for license details.
  */
 
-#define DEFMODE                        dotile /* dofloat */
-#define FONT                   "fixed"
-#define BGCOLOR                        "#666699"
-#define FGCOLOR                        "#eeeeee"
-#define BORDERCOLOR            "#9999CC"
-#define MODKEY                 Mod1Mask
-#define NUMLOCKMASK            Mod2Mask
-#define MASTERW                        52 /* percent */
-
 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 #define TAGS \
 char *tags[TLast] = { \
@@ -21,7 +12,16 @@ char *tags[TLast] = { \
        [Twork] = "work", \
        [Tmisc] = "misc", \
 };
+
+#define DEFMODE                        dotile /* dofloat */
 #define DEFTAG                 Tdev
+#define FONT                   "fixed"
+#define BGCOLOR                        "#666699"
+#define FGCOLOR                        "#eeeeee"
+#define BORDERCOLOR            "#9999CC"
+#define MODKEY                 Mod1Mask
+#define NUMLOCKMASK            Mod2Mask
+#define MASTERW                        52 /* percent */
 
 #define KEYS \
        const char *term[] = { "xterm", NULL }; \
diff --git a/draw.c b/draw.c
index 4f8594c..4ba5cd6 100644 (file)
--- a/draw.c
+++ b/draw.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdio.h>
 #include <string.h>
 #include <X11/Xlocale.h>
diff --git a/dwm.h b/dwm.h
index 0ed778c..803fe9f 100644 (file)
--- a/dwm.h
+++ b/dwm.h
@@ -3,8 +3,8 @@
  * See LICENSE file for license details.
  */
 
-#include <X11/Xlib.h>
 #include CONFIG
+#include <X11/Xlib.h>
 
 /* mask shorthands, used in event.c and client.c */
 #define BUTTONMASK             (ButtonPressMask | ButtonReleaseMask)
@@ -57,8 +57,8 @@ struct Client {
        int tx, ty, tw, th; /* title */
        int basew, baseh, incw, inch, maxw, maxh, minw, minh;
        int grav;
-       unsigned int border;
        long flags; 
+       unsigned int border;
        Bool isfloat;
        Bool ismax;
        Client *next;
diff --git a/event.c b/event.c
index faee103..0c159c7 100644 (file)
--- a/event.c
+++ b/event.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdlib.h>
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
@@ -151,32 +150,60 @@ configurerequest(XEvent *e)
 {
        Client *c;
        XConfigureRequestEvent *ev = &e->xconfigurerequest;
+       XEvent synev;
        XWindowChanges wc;
+       unsigned long newmask;
 
-       ev->value_mask &= ~CWSibling;
        if((c = getclient(ev->window))) {
                gravitate(c, True);
-               if(ev->value_mask & CWX)
-                       c->x = ev->x;
-               if(ev->value_mask & CWY)
-                       c->y = ev->y;
-               if(ev->value_mask & CWWidth)
-                       c->w = ev->width;
-               if(ev->value_mask & CWHeight)
-                       c->h = ev->height;
+               if(c->isfloat) {
+                       if(ev->value_mask & CWX)
+                               c->x = ev->x;
+                       if(ev->value_mask & CWY)
+                               c->y = ev->y;
+                       if(ev->value_mask & CWWidth)
+                               c->w = ev->width;
+                       if(ev->value_mask & CWHeight)
+                               c->h = ev->height;
+               }
                if(ev->value_mask & CWBorderWidth)
-                       c->border = 1;
+                       c->border = ev->border_width;
                gravitate(c, False);
+
                resize(c, True, TopLeft);
-       }
 
-       wc.x = ev->x;
-       wc.y = ev->y;
-       wc.width = ev->width;
-       wc.height = ev->height;
-       wc.border_width = 1;
-       XConfigureWindow(dpy, ev->window,
-                       CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+               wc.x = c->x;
+               wc.y = c->y;
+               wc.width = c->w;
+               wc.height = c->h;
+               newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
+               if(newmask)
+                       XConfigureWindow(dpy, c->win, newmask, &wc);
+               else {
+                       synev.type = ConfigureNotify;
+                       synev.xconfigure.display = dpy;
+                       synev.xconfigure.event = c->win;
+                       synev.xconfigure.window = c->win;
+                       synev.xconfigure.x = c->x;
+                       synev.xconfigure.y = c->y;
+                       synev.xconfigure.width = c->w;
+                       synev.xconfigure.height = c->h;
+                       synev.xconfigure.border_width = c->border;
+                       synev.xconfigure.above = None;
+                       /* Send synthetic ConfigureNotify */
+                       XSendEvent(dpy, c->win, True, NoEventMask, &synev);
+               }
+       }
+       else {
+               wc.x = ev->x;
+               wc.y = ev->y;
+               wc.width = ev->width;
+               wc.height = ev->height;
+               wc.border_width = ev->border_width;
+               wc.sibling = ev->above;
+               wc.stack_mode = ev->detail;
+               XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
+       }
        XSync(dpy, False);
 }
 
diff --git a/main.c b/main.c
index 86d72fa..33a2a9a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -4,7 +4,6 @@
  */
 
 #include "dwm.h"
-
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -15,7 +14,6 @@
 #include <X11/Xatom.h>
 #include <X11/Xproto.h>
 
-
 /* static */
 
 static int (*xerrorxlib)(Display *, XErrorEvent *);
@@ -165,6 +163,7 @@ main(int argc, char *argv[])
        int i;
        unsigned int mask;
        fd_set rd;
+       Bool readin = True;
        Window w;
        XEvent ev;
        XSetWindowAttributes wa;
@@ -251,7 +250,8 @@ main(int argc, char *argv[])
        /* main event loop, reads status text from stdin as well */
        while(running) {
                FD_ZERO(&rd);
-               FD_SET(STDIN_FILENO, &rd);
+               if(readin)
+                       FD_SET(STDIN_FILENO, &rd);
                FD_SET(ConnectionNumber(dpy), &rd);
 
                i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
@@ -267,11 +267,12 @@ main(int argc, char *argv[])
                                                (handler[ev.type])(&ev); /* call handler */
                                }
                        }
-                       if(FD_ISSET(STDIN_FILENO, &rd)) {
-                               if(!fgets(stext, sizeof(stext), stdin))
-                                       break;
-                               else 
+                       if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
+                               readin = NULL != fgets(stext, sizeof(stext), stdin);
+                               if(readin)
                                        stext[strlen(stext) - 1] = 0;
+                               else 
+                                       strcpy(stext, "broken pipe");
                                drawstatus();
                        }
                }
diff --git a/tag.c b/tag.c
index f6c33ea..f4ddfd9 100644 (file)
--- a/tag.c
+++ b/tag.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <regex.h>
 #include <stdio.h>
 #include <string.h>
@@ -86,26 +85,26 @@ dotile(Arg *arg)
                        if(n == 1) {
                                c->x = sx;
                                c->y = sy + bh;
-                               c->w = sw - 2 * c->border;
-                               c->h = sh - 2 * c->border - bh;
+                               c->w = sw - 2;
+                               c->h = sh - 2 - bh;
                        }
                        else if(i == 0) {
                                c->x = sx;
                                c->y = sy + bh;
-                               c->w = mw - 2 * c->border;
-                               c->h = sh - 2 * c->border - bh;
+                               c->w = mw - 2;
+                               c->h = sh - 2 - bh;
                        }
                        else if(h > bh) {
                                c->x = sx + mw;
                                c->y = sy + (i - 1) * h + bh;
-                               c->w = w - 2 * c->border;
-                               c->h = h - 2 * c->border;
+                               c->w = w - 2;
+                               c->h = h - 2;
                        }
                        else { /* fallback if h < bh */
                                c->x = sx + mw;
                                c->y = sy + bh;
-                               c->w = w - 2 * c->border;
-                               c->h = sh - 2 * c->border - bh;
+                               c->w = w - 2;
+                               c->h = sh - 2 - bh;
                        }
                        resize(c, False, TopLeft);
                        i++;
diff --git a/util.c b/util.c
index 6eb19b4..7aff2aa 100644 (file)
--- a/util.c
+++ b/util.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>