summaryrefslogtreecommitdiff
path: root/lib/renderers/wayland
diff options
context:
space:
mode:
Diffstat (limited to 'lib/renderers/wayland')
-rw-r--r--lib/renderers/wayland/registry.c1
-rw-r--r--lib/renderers/wayland/wayland.c11
-rw-r--r--lib/renderers/wayland/wayland.h1
3 files changed, 9 insertions, 4 deletions
diff --git a/lib/renderers/wayland/registry.c b/lib/renderers/wayland/registry.c
index 9521374..d83c797 100644
--- a/lib/renderers/wayland/registry.c
+++ b/lib/renderers/wayland/registry.c
@@ -369,6 +369,7 @@ bm_wl_registry_register(struct wayland *wayland)
return false;
set_repeat_info(&wayland->input, 40, 400);
+ wayland->input.last_code = 0xDEADBEEF;
return true;
}
diff --git a/lib/renderers/wayland/wayland.c b/lib/renderers/wayland/wayland.c
index 2cdedec..3852a6d 100644
--- a/lib/renderers/wayland/wayland.c
+++ b/lib/renderers/wayland/wayland.c
@@ -38,10 +38,13 @@ render(const struct bm_menu *menu)
}
}
- uint32_t count;
- bm_menu_get_filtered_items(menu, &count);
- uint32_t lines = (count < menu->lines ? count : menu->lines) + 1;
- bm_wl_window_render(&wayland->window, menu, lines);
+ if (wayland->input.code != wayland->input.last_code) {
+ uint32_t count;
+ bm_menu_get_filtered_items(menu, &count);
+ uint32_t lines = (count < menu->lines ? count : menu->lines) + 1;
+ bm_wl_window_render(&wayland->window, menu, lines);
+ wayland->input.last_code = wayland->input.code;
+ }
}
static enum bm_key
diff --git a/lib/renderers/wayland/wayland.h b/lib/renderers/wayland/wayland.h
index 50455b5..886a0fd 100644
--- a/lib/renderers/wayland/wayland.h
+++ b/lib/renderers/wayland/wayland.h
@@ -51,6 +51,7 @@ struct input {
xkb_keysym_t sym;
uint32_t code;
+ uint32_t last_code;
uint32_t modifiers;
xkb_keysym_t repeat_sym;