[PATCH 1/2] wmaker: grab the keyboard during partial screenshot selection

1 view
Skip to first unread message

david.m...@gmail.com

unread,
Jun 13, 2026, 9:38:18 AMJun 13
to Window Maker Development
imageCaptureArea() already looked for XK_Escape in its event loop but
only grabbed the pointer, so the KeyPress went to the focused client
and the cancel branch was unreachable. Grab the keyboard for the
duration of the rubber-band selection, erase the XOR rectangle when
Escape aborts mid-drag, and release the keyboard on every exit path.
---
 src/screen.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/screen.c b/src/screen.c
index 8cb27487..b8f83af9 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -1143,6 +1143,7 @@ static XImage *imageCaptureArea(WScreen *scr)
  GrabModeAsync, None, wPreferences.cursor[WCUR_CAPTURE], CurrentTime) != Success) {
  return NULL;
  }
+ XGrabKeyboard(dpy, scr->root_win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
 
  XGrabServer(dpy);
 
@@ -1162,6 +1163,7 @@ static XImage *imageCaptureArea(WScreen *scr)
  if (w > 0 && h > 0) {
  XDrawRectangle(dpy, scr->root_win, scr->frame_gc, x, y, w, h);
  XUngrabServer(dpy);
+ XUngrabKeyboard(dpy, CurrentTime);
  XUngrabPointer(dpy, CurrentTime);
  return XGetImage(dpy, scr->root_win, x, y, w, h, AllPlanes, ZPixmap);
  }
@@ -1186,8 +1188,11 @@ static XImage *imageCaptureArea(WScreen *scr)
  XDrawRectangle(dpy, scr->root_win, scr->frame_gc, x, y, w, h);
  break;
  case KeyPress:
- if (W_KeycodeToKeysym(dpy, event.xkey.keycode, 0) == XK_Escape)
+ if (W_KeycodeToKeysym(dpy, event.xkey.keycode, 0) == XK_Escape) {
+ if (w > 0 && h > 0)
+ XDrawRectangle(dpy, scr->root_win, scr->frame_gc, x, y, w, h);
  quit = 1;
+ }
  break;
  default:
  WMHandleEvent(&event);
@@ -1196,6 +1201,7 @@ static XImage *imageCaptureArea(WScreen *scr)
  }
 
  XUngrabServer(dpy);
+ XUngrabKeyboard(dpy, CurrentTime);
  XUngrabPointer(dpy, CurrentTime);
  return NULL;
 }
--
2.43.0
0001-wmaker-grab-the-keyboard-during-partial-screenshot-s.patch
Reply all
Reply to author
Forward
0 new messages