diff options
-rw-r--r-- | lib/renderers/wayland/registry.c | 1 | ||||
-rw-r--r-- | lib/renderers/wayland/wayland.c | 11 | ||||
-rw-r--r-- | lib/renderers/wayland/wayland.h | 1 |
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; |