| 3 |
3 |
|
* See LICENSE file for license details. |
| 4 |
4 |
|
*/ |
| 5 |
5 |
|
#include "dwm.h" |
| 6 |
|
- |
|
| 7 |
6 |
|
#include <stdlib.h> |
| 8 |
7 |
|
#include <X11/keysym.h> |
| 9 |
8 |
|
#include <X11/Xatom.h> |
|
| 151 |
150 |
|
{ |
| 152 |
151 |
|
Client *c; |
| 153 |
152 |
|
XConfigureRequestEvent *ev = &e->xconfigurerequest; |
|
153 |
+ |
XEvent synev; |
| 154 |
154 |
|
XWindowChanges wc; |
|
155 |
+ |
unsigned long newmask; |
| 155 |
156 |
|
|
| 156 |
|
- |
ev->value_mask &= ~CWSibling; |
| 157 |
157 |
|
if((c = getclient(ev->window))) { |
| 158 |
158 |
|
gravitate(c, True); |
| 159 |
|
- |
if(ev->value_mask & CWX) |
| 160 |
|
- |
c->x = ev->x; |
| 161 |
|
- |
if(ev->value_mask & CWY) |
| 162 |
|
- |
c->y = ev->y; |
| 163 |
|
- |
if(ev->value_mask & CWWidth) |
| 164 |
|
- |
c->w = ev->width; |
| 165 |
|
- |
if(ev->value_mask & CWHeight) |
| 166 |
|
- |
c->h = ev->height; |
|
159 |
+ |
if(c->isfloat) { |
|
160 |
+ |
if(ev->value_mask & CWX) |
|
161 |
+ |
c->x = ev->x; |
|
162 |
+ |
if(ev->value_mask & CWY) |
|
163 |
+ |
c->y = ev->y; |
|
164 |
+ |
if(ev->value_mask & CWWidth) |
|
165 |
+ |
c->w = ev->width; |
|
166 |
+ |
if(ev->value_mask & CWHeight) |
|
167 |
+ |
c->h = ev->height; |
|
168 |
+ |
} |
| 167 |
169 |
|
if(ev->value_mask & CWBorderWidth) |
| 168 |
|
- |
c->border = 1; |
|
170 |
+ |
c->border = ev->border_width; |
| 169 |
171 |
|
gravitate(c, False); |
|
172 |
+ |
|
| 170 |
173 |
|
resize(c, True, TopLeft); |
| 171 |
|
- |
} |
| 172 |
174 |
|
|
| 173 |
|
- |
wc.x = ev->x; |
| 174 |
|
- |
wc.y = ev->y; |
| 175 |
|
- |
wc.width = ev->width; |
| 176 |
|
- |
wc.height = ev->height; |
| 177 |
|
- |
wc.border_width = 1; |
| 178 |
|
- |
XConfigureWindow(dpy, ev->window, |
| 179 |
|
- |
CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); |
|
175 |
+ |
wc.x = c->x; |
|
176 |
+ |
wc.y = c->y; |
|
177 |
+ |
wc.width = c->w; |
|
178 |
+ |
wc.height = c->h; |
|
179 |
+ |
newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); |
|
180 |
+ |
if(newmask) |
|
181 |
+ |
XConfigureWindow(dpy, c->win, newmask, &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 |
207 |
|
XSync(dpy, False); |
| 181 |
208 |
|
} |
| 182 |
209 |
|
|