comparison event.c @ 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 e848966a1ac6
comparison
equal deleted inserted replaced
163:e2e1de08341d 164:21071ae1fe68
1 /* 1 /*
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> 2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
3 * See LICENSE file for license details. 3 * See LICENSE file for license details.
4 */ 4 */
5 #include "dwm.h" 5 #include "dwm.h"
6
7 #include <stdlib.h> 6 #include <stdlib.h>
8 #include <X11/keysym.h> 7 #include <X11/keysym.h>
9 #include <X11/Xatom.h> 8 #include <X11/Xatom.h>
10 9
11 /* static */ 10 /* static */
149 static void 148 static void
150 configurerequest(XEvent *e) 149 configurerequest(XEvent *e)
151 { 150 {
152 Client *c; 151 Client *c;
153 XConfigureRequestEvent *ev = &e->xconfigurerequest; 152 XConfigureRequestEvent *ev = &e->xconfigurerequest;
153 XEvent synev;
154 XWindowChanges wc; 154 XWindowChanges wc;
155 155 unsigned long newmask;
156 ev->value_mask &= ~CWSibling; 156
157 if((c = getclient(ev->window))) { 157 if((c = getclient(ev->window))) {
158 gravitate(c, True); 158 gravitate(c, True);
159 if(ev->value_mask & CWX) 159 if(c->isfloat) {
160 c->x = ev->x; 160 if(ev->value_mask & CWX)
161 if(ev->value_mask & CWY) 161 c->x = ev->x;
162 c->y = ev->y; 162 if(ev->value_mask & CWY)
163 if(ev->value_mask & CWWidth) 163 c->y = ev->y;
164 c->w = ev->width; 164 if(ev->value_mask & CWWidth)
165 if(ev->value_mask & CWHeight) 165 c->w = ev->width;
166 c->h = ev->height; 166 if(ev->value_mask & CWHeight)
167 c->h = ev->height;
168 }
167 if(ev->value_mask & CWBorderWidth) 169 if(ev->value_mask & CWBorderWidth)
168 c->border = 1; 170 c->border = ev->border_width;
169 gravitate(c, False); 171 gravitate(c, False);
172
170 resize(c, True, TopLeft); 173 resize(c, True, TopLeft);
171 } 174
172 175 wc.x = c->x;
173 wc.x = ev->x; 176 wc.y = c->y;
174 wc.y = ev->y; 177 wc.width = c->w;
175 wc.width = ev->width; 178 wc.height = c->h;
176 wc.height = ev->height; 179 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
177 wc.border_width = 1; 180 if(newmask)
178 XConfigureWindow(dpy, ev->window, 181 XConfigureWindow(dpy, c->win, newmask, &wc);
179 CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); 182 else {
183 synev.type = ConfigureNotify;
184 synev.xconfigure.display = dpy;
185 synev.xconfigure.event = c->win;
186 synev.xconfigure.window = c->win;
187 synev.xconfigure.x = c->x;
188 synev.xconfigure.y = c->y;
189 synev.xconfigure.width = c->w;
190 synev.xconfigure.height = c->h;
191 synev.xconfigure.border_width = c->border;
192 synev.xconfigure.above = None;
193 /* Send synthetic ConfigureNotify */
194 XSendEvent(dpy, c->win, True, NoEventMask, &synev);
195 }
196 }
197 else {
198 wc.x = ev->x;
199 wc.y = ev->y;
200 wc.width = ev->width;
201 wc.height = ev->height;
202 wc.border_width = ev->border_width;
203 wc.sibling = ev->above;
204 wc.stack_mode = ev->detail;
205 XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
206 }
180 XSync(dpy, False); 207 XSync(dpy, False);
181 } 208 }
182 209
183 static void 210 static void
184 destroynotify(XEvent *e) 211 destroynotify(XEvent *e)