summaryrefslogtreecommitdiff
path: root/lib/renderers/wayland/wayland.c
diff options
context:
space:
mode:
authorDominique Martinet <asmadeus@codewreck.org>2018-04-28 08:17:58 +0900
committerDominique Martinet <asmadeus@codewreck.org>2018-04-29 20:50:55 +0900
commit992e5add42ddc126b7872c53b88fc3bff47fed3f (patch)
tree1bd8869edeebf0211188ef5423197367e2e622b2 /lib/renderers/wayland/wayland.c
parent610b30364e1d5206b43b873e3f11d5d66d2e28e5 (diff)
downloadbemenu-992e5add42ddc126b7872c53b88fc3bff47fed3f.tar.gz
bemenu-992e5add42ddc126b7872c53b88fc3bff47fed3f.tar.bz2
bemenu-992e5add42ddc126b7872c53b88fc3bff47fed3f.zip
wayland renderer: Implement grab_keyboard
This avoids locking oneself out when running bemenu interactively, as input would be grabbed too early without that and layer shell does not allow to 'ungrab' focus by clicking on another window
Diffstat (limited to 'lib/renderers/wayland/wayland.c')
-rw-r--r--lib/renderers/wayland/wayland.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/renderers/wayland/wayland.c b/lib/renderers/wayland/wayland.c
index 5309280..dd97009 100644
--- a/lib/renderers/wayland/wayland.c
+++ b/lib/renderers/wayland/wayland.c
@@ -190,6 +190,18 @@ set_bottom(const struct bm_menu *menu, bool bottom)
}
static void
+grab_keyboard(const struct bm_menu *menu, bool grab)
+{
+ struct wayland *wayland = menu->renderer->internal;
+ assert(wayland);
+
+ struct window *window;
+ wl_list_for_each(window, &wayland->windows, link) {
+ bm_wl_window_grab_keyboard(window, wayland->display, grab);
+ }
+}
+
+static void
destructor(struct bm_menu *menu)
{
struct wayland *wayland = menu->renderer->internal;
@@ -282,6 +294,7 @@ register_renderer(struct render_api *api)
api->poll_key = poll_key;
api->render = render;
api->set_bottom = set_bottom;
+ api->grab_keyboard = grab_keyboard;
api->priorty = BM_PRIO_GUI;
api->version = BM_PLUGIN_VERSION;
return "wayland";