aewl
changeset 164:21071ae1fe68
made fullscreen apps working fine in floating mode (there is no sane way to make them work in tiled mode, thus I switch to floating mode if I run such kind of app), also fixed the xterm issue reported by Sander
author | arg@10ksloc.org |
---|---|
date | Wed, 02 Aug 2006 16:32:05 +0200 |
parents | e2e1de08341d |
children | 4d828b431b72 |
files | client.c config.arg.h config.h draw.c dwm.h event.c main.c tag.c util.c |
diffstat | 9 files changed, 92 insertions(+), 79 deletions(-) [+] |
line diff
1.1 --- a/client.c Wed Aug 02 13:05:04 2006 +0200 1.2 +++ b/client.c Wed Aug 02 16:32:05 2006 +0200 1.3 @@ -3,7 +3,6 @@ 1.4 * See LICENSE file for license details. 1.5 */ 1.6 #include "dwm.h" 1.7 - 1.8 #include <stdlib.h> 1.9 #include <string.h> 1.10 #include <X11/Xatom.h> 1.11 @@ -219,7 +218,7 @@ 1.12 c->h = wa->height; 1.13 c->th = bh; 1.14 1.15 - c->border = 1; 1.16 + c->border = 0; 1.17 setsize(c); 1.18 1.19 if(c->h != sh && c->y < bh) 1.20 @@ -254,8 +253,7 @@ 1.21 if(!c->isfloat) 1.22 c->isfloat = trans 1.23 || (c->maxw && c->minw && 1.24 - c->maxw == c->minw && c->maxh == c->minh) 1.25 - || (c->w == sw && c->h == sh); 1.26 + c->maxw == c->minw && c->maxh == c->minh); 1.27 settitle(c); 1.28 arrange(NULL); 1.29 1.30 @@ -271,7 +269,7 @@ 1.31 { 1.32 int bottom = c->y + c->h; 1.33 int right = c->x + c->w; 1.34 - XConfigureEvent e; 1.35 + /*XConfigureEvent e;*/ 1.36 XWindowChanges wc; 1.37 1.38 if(sizehints) { 1.39 @@ -302,21 +300,11 @@ 1.40 wc.y = c->y; 1.41 wc.width = c->w; 1.42 wc.height = c->h; 1.43 - wc.border_width = 1; 1.44 - XConfigureWindow(dpy, c->win, 1.45 - CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); 1.46 - 1.47 - e.type = ConfigureNotify; 1.48 - e.event = c->win; 1.49 - e.window = c->win; 1.50 - e.x = c->x; 1.51 - e.y = c->y; 1.52 - e.width = c->w; 1.53 - e.height = c->h; 1.54 - e.border_width = c->border; 1.55 - e.above = None; 1.56 - e.override_redirect = False; 1.57 - XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e); 1.58 + if(c->w == sw && c->h == sh) 1.59 + wc.border_width = 0; 1.60 + else 1.61 + wc.border_width = 1; 1.62 + XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); 1.63 XSync(dpy, False); 1.64 } 1.65 1.66 @@ -403,8 +391,8 @@ 1.67 oh = sel->h; 1.68 sel->x = sx; 1.69 sel->y = sy + bh; 1.70 - sel->w = sw - 2 * sel->border; 1.71 - sel->h = sh - 2 * sel->border - bh; 1.72 + sel->w = sw - 2; 1.73 + sel->h = sh - 2 - bh; 1.74 1.75 higher(sel); 1.76 resize(sel, False, TopLeft);
2.1 --- a/config.arg.h Wed Aug 02 13:05:04 2006 +0200 2.2 +++ b/config.arg.h Wed Aug 02 16:32:05 2006 +0200 2.3 @@ -3,15 +3,6 @@ 2.4 * See LICENSE file for license details. 2.5 */ 2.6 2.7 -#define DEFMODE dotile /* dofloat */ 2.8 -#define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" 2.9 -#define BGCOLOR "#0a2c2d" 2.10 -#define FGCOLOR "#ddeeee" 2.11 -#define BORDERCOLOR "#176164" 2.12 -#define MODKEY Mod1Mask 2.13 -#define NUMLOCKMASK Mod2Mask 2.14 -#define MASTERW 52 /* percent */ 2.15 - 2.16 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; 2.17 #define TAGS \ 2.18 char *tags[TLast] = { \ 2.19 @@ -21,7 +12,16 @@ 2.20 [Twork] = "work", \ 2.21 [Tmisc] = "misc", \ 2.22 }; 2.23 + 2.24 +#define DEFMODE dotile /* dofloat */ 2.25 #define DEFTAG Tdev 2.26 +#define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" 2.27 +#define BGCOLOR "#0a2c2d" 2.28 +#define FGCOLOR "#ddeeee" 2.29 +#define BORDERCOLOR "#176164" 2.30 +#define MODKEY Mod1Mask 2.31 +#define NUMLOCKMASK Mod2Mask 2.32 +#define MASTERW 52 /* percent */ 2.33 2.34 #define KEYS \ 2.35 const char *browse[] = { "firefox", NULL }; \
3.1 --- a/config.h Wed Aug 02 13:05:04 2006 +0200 3.2 +++ b/config.h Wed Aug 02 16:32:05 2006 +0200 3.3 @@ -3,15 +3,6 @@ 3.4 * See LICENSE file for license details. 3.5 */ 3.6 3.7 -#define DEFMODE dotile /* dofloat */ 3.8 -#define FONT "fixed" 3.9 -#define BGCOLOR "#666699" 3.10 -#define FGCOLOR "#eeeeee" 3.11 -#define BORDERCOLOR "#9999CC" 3.12 -#define MODKEY Mod1Mask 3.13 -#define NUMLOCKMASK Mod2Mask 3.14 -#define MASTERW 52 /* percent */ 3.15 - 3.16 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; 3.17 #define TAGS \ 3.18 char *tags[TLast] = { \ 3.19 @@ -21,7 +12,16 @@ 3.20 [Twork] = "work", \ 3.21 [Tmisc] = "misc", \ 3.22 }; 3.23 + 3.24 +#define DEFMODE dotile /* dofloat */ 3.25 #define DEFTAG Tdev 3.26 +#define FONT "fixed" 3.27 +#define BGCOLOR "#666699" 3.28 +#define FGCOLOR "#eeeeee" 3.29 +#define BORDERCOLOR "#9999CC" 3.30 +#define MODKEY Mod1Mask 3.31 +#define NUMLOCKMASK Mod2Mask 3.32 +#define MASTERW 52 /* percent */ 3.33 3.34 #define KEYS \ 3.35 const char *term[] = { "xterm", NULL }; \
4.1 --- a/draw.c Wed Aug 02 13:05:04 2006 +0200 4.2 +++ b/draw.c Wed Aug 02 16:32:05 2006 +0200 4.3 @@ -3,7 +3,6 @@ 4.4 * See LICENSE file for license details. 4.5 */ 4.6 #include "dwm.h" 4.7 - 4.8 #include <stdio.h> 4.9 #include <string.h> 4.10 #include <X11/Xlocale.h>
5.1 --- a/dwm.h Wed Aug 02 13:05:04 2006 +0200 5.2 +++ b/dwm.h Wed Aug 02 16:32:05 2006 +0200 5.3 @@ -3,8 +3,8 @@ 5.4 * See LICENSE file for license details. 5.5 */ 5.6 5.7 +#include CONFIG 5.8 #include <X11/Xlib.h> 5.9 -#include CONFIG 5.10 5.11 /* mask shorthands, used in event.c and client.c */ 5.12 #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) 5.13 @@ -57,8 +57,8 @@ 5.14 int tx, ty, tw, th; /* title */ 5.15 int basew, baseh, incw, inch, maxw, maxh, minw, minh; 5.16 int grav; 5.17 + long flags; 5.18 unsigned int border; 5.19 - long flags; 5.20 Bool isfloat; 5.21 Bool ismax; 5.22 Client *next;
6.1 --- a/event.c Wed Aug 02 13:05:04 2006 +0200 6.2 +++ b/event.c Wed Aug 02 16:32:05 2006 +0200 6.3 @@ -3,7 +3,6 @@ 6.4 * See LICENSE file for license details. 6.5 */ 6.6 #include "dwm.h" 6.7 - 6.8 #include <stdlib.h> 6.9 #include <X11/keysym.h> 6.10 #include <X11/Xatom.h> 6.11 @@ -151,32 +150,60 @@ 6.12 { 6.13 Client *c; 6.14 XConfigureRequestEvent *ev = &e->xconfigurerequest; 6.15 + XEvent synev; 6.16 XWindowChanges wc; 6.17 + unsigned long newmask; 6.18 6.19 - ev->value_mask &= ~CWSibling; 6.20 if((c = getclient(ev->window))) { 6.21 gravitate(c, True); 6.22 - if(ev->value_mask & CWX) 6.23 - c->x = ev->x; 6.24 - if(ev->value_mask & CWY) 6.25 - c->y = ev->y; 6.26 - if(ev->value_mask & CWWidth) 6.27 - c->w = ev->width; 6.28 - if(ev->value_mask & CWHeight) 6.29 - c->h = ev->height; 6.30 + if(c->isfloat) { 6.31 + if(ev->value_mask & CWX) 6.32 + c->x = ev->x; 6.33 + if(ev->value_mask & CWY) 6.34 + c->y = ev->y; 6.35 + if(ev->value_mask & CWWidth) 6.36 + c->w = ev->width; 6.37 + if(ev->value_mask & CWHeight) 6.38 + c->h = ev->height; 6.39 + } 6.40 if(ev->value_mask & CWBorderWidth) 6.41 - c->border = 1; 6.42 + c->border = ev->border_width; 6.43 gravitate(c, False); 6.44 + 6.45 resize(c, True, TopLeft); 6.46 + 6.47 + wc.x = c->x; 6.48 + wc.y = c->y; 6.49 + wc.width = c->w; 6.50 + wc.height = c->h; 6.51 + newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); 6.52 + if(newmask) 6.53 + XConfigureWindow(dpy, c->win, newmask, &wc); 6.54 + else { 6.55 + synev.type = ConfigureNotify; 6.56 + synev.xconfigure.display = dpy; 6.57 + synev.xconfigure.event = c->win; 6.58 + synev.xconfigure.window = c->win; 6.59 + synev.xconfigure.x = c->x; 6.60 + synev.xconfigure.y = c->y; 6.61 + synev.xconfigure.width = c->w; 6.62 + synev.xconfigure.height = c->h; 6.63 + synev.xconfigure.border_width = c->border; 6.64 + synev.xconfigure.above = None; 6.65 + /* Send synthetic ConfigureNotify */ 6.66 + XSendEvent(dpy, c->win, True, NoEventMask, &synev); 6.67 + } 6.68 } 6.69 - 6.70 - wc.x = ev->x; 6.71 - wc.y = ev->y; 6.72 - wc.width = ev->width; 6.73 - wc.height = ev->height; 6.74 - wc.border_width = 1; 6.75 - XConfigureWindow(dpy, ev->window, 6.76 - CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); 6.77 + else { 6.78 + wc.x = ev->x; 6.79 + wc.y = ev->y; 6.80 + wc.width = ev->width; 6.81 + wc.height = ev->height; 6.82 + wc.border_width = ev->border_width; 6.83 + wc.sibling = ev->above; 6.84 + wc.stack_mode = ev->detail; 6.85 + XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); 6.86 + } 6.87 XSync(dpy, False); 6.88 } 6.89
7.1 --- a/main.c Wed Aug 02 13:05:04 2006 +0200 7.2 +++ b/main.c Wed Aug 02 16:32:05 2006 +0200 7.3 @@ -4,7 +4,6 @@ 7.4 */ 7.5 7.6 #include "dwm.h" 7.7 - 7.8 #include <errno.h> 7.9 #include <stdio.h> 7.10 #include <stdlib.h> 7.11 @@ -15,7 +14,6 @@ 7.12 #include <X11/Xatom.h> 7.13 #include <X11/Xproto.h> 7.14 7.15 - 7.16 /* static */ 7.17 7.18 static int (*xerrorxlib)(Display *, XErrorEvent *); 7.19 @@ -165,6 +163,7 @@ 7.20 int i; 7.21 unsigned int mask; 7.22 fd_set rd; 7.23 + Bool readin = True; 7.24 Window w; 7.25 XEvent ev; 7.26 XSetWindowAttributes wa; 7.27 @@ -251,7 +250,8 @@ 7.28 /* main event loop, reads status text from stdin as well */ 7.29 while(running) { 7.30 FD_ZERO(&rd); 7.31 - FD_SET(STDIN_FILENO, &rd); 7.32 + if(readin) 7.33 + FD_SET(STDIN_FILENO, &rd); 7.34 FD_SET(ConnectionNumber(dpy), &rd); 7.35 7.36 i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0); 7.37 @@ -267,11 +267,12 @@ 7.38 (handler[ev.type])(&ev); /* call handler */ 7.39 } 7.40 } 7.41 - if(FD_ISSET(STDIN_FILENO, &rd)) { 7.42 - if(!fgets(stext, sizeof(stext), stdin)) 7.43 - break; 7.44 + if(readin && FD_ISSET(STDIN_FILENO, &rd)) { 7.45 + readin = NULL != fgets(stext, sizeof(stext), stdin); 7.46 + if(readin) 7.47 + stext[strlen(stext) - 1] = 0; 7.48 else 7.49 - stext[strlen(stext) - 1] = 0; 7.50 + strcpy(stext, "broken pipe"); 7.51 drawstatus(); 7.52 } 7.53 }
8.1 --- a/tag.c Wed Aug 02 13:05:04 2006 +0200 8.2 +++ b/tag.c Wed Aug 02 16:32:05 2006 +0200 8.3 @@ -3,7 +3,6 @@ 8.4 * See LICENSE file for license details. 8.5 */ 8.6 #include "dwm.h" 8.7 - 8.8 #include <regex.h> 8.9 #include <stdio.h> 8.10 #include <string.h> 8.11 @@ -86,26 +85,26 @@ 8.12 if(n == 1) { 8.13 c->x = sx; 8.14 c->y = sy + bh; 8.15 - c->w = sw - 2 * c->border; 8.16 - c->h = sh - 2 * c->border - bh; 8.17 + c->w = sw - 2; 8.18 + c->h = sh - 2 - bh; 8.19 } 8.20 else if(i == 0) { 8.21 c->x = sx; 8.22 c->y = sy + bh; 8.23 - c->w = mw - 2 * c->border; 8.24 - c->h = sh - 2 * c->border - bh; 8.25 + c->w = mw - 2; 8.26 + c->h = sh - 2 - bh; 8.27 } 8.28 else if(h > bh) { 8.29 c->x = sx + mw; 8.30 c->y = sy + (i - 1) * h + bh; 8.31 - c->w = w - 2 * c->border; 8.32 - c->h = h - 2 * c->border; 8.33 + c->w = w - 2; 8.34 + c->h = h - 2; 8.35 } 8.36 else { /* fallback if h < bh */ 8.37 c->x = sx + mw; 8.38 c->y = sy + bh; 8.39 - c->w = w - 2 * c->border; 8.40 - c->h = sh - 2 * c->border - bh; 8.41 + c->w = w - 2; 8.42 + c->h = sh - 2 - bh; 8.43 } 8.44 resize(c, False, TopLeft); 8.45 i++;