Skip to content

Commit ce009e6

Browse files
committed
Workspace/WM/wmspec.c: announce _NET_WM_MOVERESIZE as supported hint for applications which checks it; improved _NET_WM_MOVERESIZE handling for apps which sends bogus event with the same serial after mouse button release (Steam Client).
1 parent 7e180f8 commit ce009e6

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

Applications/Workspace/WM/wmspec.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,9 +379,12 @@ static void _setSupportedHints(WScreen *scr)
379379
atom[i++] = net_workarea;
380380
atom[i++] = net_supporting_wm_check;
381381
atom[i++] = net_showing_desktop;
382+
382383
#if 0
383-
atom[i++] = net_wm_moveresize;
384+
atom[i++] = net_moveresize_window;
384385
#endif
386+
atom[i++] = net_wm_moveresize;
387+
385388
atom[i++] = net_request_frame_extents;
386389
atom[i++] = net_wm_desktop;
387390
atom[i++] = net_wm_window_type;
@@ -1689,6 +1692,7 @@ static void _handleDesktopNames(WScreen *scr)
16891692

16901693
Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
16911694
{
1695+
static unsigned long last_serial = 0;
16921696
WScreen *scr;
16931697
WWindow *wwin;
16941698

@@ -1844,11 +1848,15 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
18441848
// data.l[2] = direction
18451849
// data.l[3] = button
18461850
// data.l[4] = source indication
1847-
fprintf(
1848-
stderr,
1849-
"%s: _NET_WM_MOVERESIZE: %li, %li | direction: %li, button: %li, source direction: %li\n",
1850-
__func__, event->data.l[0], event->data.l[1], event->data.l[2], event->data.l[3],
1851-
event->data.l[4]);
1851+
if (last_serial == event->serial) {
1852+
return False;
1853+
}
1854+
last_serial = event->serial;
1855+
fprintf(stderr,
1856+
"%s: _NET_WM_MOVERESIZE: %li, %li | direction: %li, button: %li, source direction: %li "
1857+
"serial: %lu event type: %i\n",
1858+
__func__, event->data.l[0], event->data.l[1], event->data.l[2], event->data.l[3],
1859+
event->data.l[4], event->serial, event->type);
18521860

18531861
WWindow *wwin = NULL;
18541862
XEvent x_event;
@@ -1870,6 +1878,7 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
18701878
GrabModeAsync, None, None, CurrentTime) == GrabSuccess) {
18711879
wMouseMoveWindow(wwin, &x_event);
18721880
XUngrabPointer(dpy, CurrentTime);
1881+
fprintf(stderr, "%s: _NET_WM_MOVERESIZE_MOVE finished\n", __func__);
18731882
} else {
18741883
fprintf(stderr, "%s: window is not found for _NET_WM_MOVERESIZE_MOVE!\n", __func__);
18751884
}
@@ -1885,6 +1894,7 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
18851894
case _NET_WM_MOVERESIZE_SIZE_LEFT:
18861895
break;
18871896
}
1897+
return True;
18881898
}
18891899

18901900
return False;

0 commit comments

Comments
 (0)