mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 12:05:45 +00:00
Add logic to ignore ConfigureNotify requests while a window is being moved or resized
This commit is contained in:
parent
32f9a73c0d
commit
a7da48ca3d
14
dwm.c
14
dwm.c
@ -658,6 +658,12 @@ static int screen;
|
|||||||
static int sw, sh; /* X display screen geometry width, height */
|
static int sw, sh; /* X display screen geometry width, height */
|
||||||
static int bh; /* bar geometry */
|
static int bh; /* bar geometry */
|
||||||
static int lrpad; /* sum of left and right padding for text */
|
static int lrpad; /* sum of left and right padding for text */
|
||||||
|
/* Some clients (e.g. alacritty) helpfully send configure notify requests with a new size or
|
||||||
|
* position when they detect that they have been moved to another monitor. This can cause visual
|
||||||
|
* glitches when moving (or resizing) client windows from one monitor to another. This variable
|
||||||
|
* is used internally to ignore such configure notify requests while movemouse or resizemouse are
|
||||||
|
* being used. */
|
||||||
|
static int ignoreconfigurenotifyrequests = 0;
|
||||||
static int (*xerrorxlib)(Display *, XErrorEvent *);
|
static int (*xerrorxlib)(Display *, XErrorEvent *);
|
||||||
static unsigned int numlockmask = 0;
|
static unsigned int numlockmask = 0;
|
||||||
static void (*handler[LASTEvent]) (XEvent *) = {
|
static void (*handler[LASTEvent]) (XEvent *) = {
|
||||||
@ -1262,6 +1268,10 @@ configurerequest(XEvent *e)
|
|||||||
#endif // BAR_ANYBAR_PATCH
|
#endif // BAR_ANYBAR_PATCH
|
||||||
XConfigureRequestEvent *ev = &e->xconfigurerequest;
|
XConfigureRequestEvent *ev = &e->xconfigurerequest;
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
|
|
||||||
|
if (ignoreconfigurenotifyrequests)
|
||||||
|
return;
|
||||||
|
|
||||||
if ((c = wintoclient(ev->window))) {
|
if ((c = wintoclient(ev->window))) {
|
||||||
if (ev->value_mask & CWBorderWidth)
|
if (ev->value_mask & CWBorderWidth)
|
||||||
c->bw = ev->border_width;
|
c->bw = ev->border_width;
|
||||||
@ -2319,6 +2329,7 @@ movemouse(const Arg *arg)
|
|||||||
return;
|
return;
|
||||||
if (!getrootptr(&x, &y))
|
if (!getrootptr(&x, &y))
|
||||||
return;
|
return;
|
||||||
|
ignoreconfigurenotifyrequests = 1;
|
||||||
do {
|
do {
|
||||||
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
|
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
|
||||||
switch(ev.type) {
|
switch(ev.type) {
|
||||||
@ -2376,6 +2387,7 @@ movemouse(const Arg *arg)
|
|||||||
#if ROUNDED_CORNERS_PATCH
|
#if ROUNDED_CORNERS_PATCH
|
||||||
drawroundedcorners(c);
|
drawroundedcorners(c);
|
||||||
#endif // ROUNDED_CORNERS_PATCH
|
#endif // ROUNDED_CORNERS_PATCH
|
||||||
|
ignoreconfigurenotifyrequests = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Client *
|
Client *
|
||||||
@ -2628,6 +2640,7 @@ resizemouse(const Arg *arg)
|
|||||||
return;
|
return;
|
||||||
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
|
||||||
#endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH
|
#endif // RESIZEPOINT_PATCH | RESIZECORNERS_PATCH
|
||||||
|
ignoreconfigurenotifyrequests = 1;
|
||||||
do {
|
do {
|
||||||
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
|
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
|
||||||
switch(ev.type) {
|
switch(ev.type) {
|
||||||
@ -2710,6 +2723,7 @@ resizemouse(const Arg *arg)
|
|||||||
selmon = m;
|
selmon = m;
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
}
|
}
|
||||||
|
ignoreconfigurenotifyrequests = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user