From d45897164ab808b7aa02ea1e6a5990b067ecbac1 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 15 Mar 2025 09:31:06 +0100 Subject: Esc to close region selection --- src/RegionSelector.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/RegionSelector.cpp') diff --git a/src/RegionSelector.cpp b/src/RegionSelector.cpp index 5d838f1..5b7243b 100644 --- a/src/RegionSelector.cpp +++ b/src/RegionSelector.cpp @@ -108,7 +108,7 @@ namespace gsr { const Window window = XCreateWindow(dpy, DefaultRootWindow(dpy), 0, 0, width, height, 0, vinfo->depth, InputOutput, vinfo->visual, CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWEventMask | CWColormap, &window_attr); if(window) { set_window_size_not_resizable(dpy, window, width, height); - set_window_shape_cross(dpy, window, width, height, 5); + set_window_shape_cross(dpy, window, width, height, cursor_thickness); make_window_click_through(dpy, window); } return window; @@ -148,7 +148,7 @@ namespace gsr { const int y = cursor_y - cursor_window_size / 2; XFillRectangle(dpy, window, cursor_gc, x + cursor_window_size / 2 - thickness / 2 , y, thickness, cursor_window_size); XFillRectangle(dpy, window, cursor_gc, x, y + cursor_window_size / 2 - thickness / 2, cursor_window_size, thickness); - } else { + } else if(cursor_window) { XMoveWindow(dpy, cursor_window, cursor_x - cursor_window_size / 2, cursor_y - cursor_window_size / 2); } XFlush(dpy); @@ -253,6 +253,7 @@ namespace gsr { hide_window_from_taskbar(dpy, region_window); XFixesHideCursor(dpy, region_window); XGrabPointer(dpy, DefaultRootWindow(dpy), True, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); + XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync, GrabModeAsync, CurrentTime); xi_grab_all_mouse_devices(dpy); XFlush(dpy); @@ -271,6 +272,7 @@ namespace gsr { XFlush(dpy); selected = false; + canceled = false; return true; } @@ -283,6 +285,7 @@ namespace gsr { XFixesShowCursor(dpy, region_window); XUngrabPointer(dpy, CurrentTime); + XUngrabKeyboard(dpy, CurrentTime); xi_ungrab_all_mouse_devices(dpy); XFlush(dpy); @@ -326,6 +329,14 @@ namespace gsr { XEvent xev; while(XPending(dpy)) { XNextEvent(dpy, &xev); + + if(xev.type == KeyRelease && XKeycodeToKeysym(dpy, xev.xkey.keycode, 0) == XK_Escape) { + canceled = true; + selected = false; + stop(); + break; + } + XGenericEventCookie *cookie = &xev.xcookie; if(cookie->type != GenericEvent || cookie->extension != xi_opcode || !XGetEventData(dpy, cookie)) continue; @@ -365,6 +376,12 @@ namespace gsr { return result; } + bool RegionSelector::take_canceled() { + const bool result = canceled; + canceled = false; + return result; + } + Region RegionSelector::get_selection() const { return region; } -- cgit v1.2.3-70-g09d2