summaryrefslogtreecommitdiff
path: root/lib/renderers/wayland/wayland.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-10-25 20:02:34 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-10-25 20:02:34 +0300
commitd3db039136ad66d2c83c1c0fbf0964bfbb5afb16 (patch)
tree93af6d73ad168e0169183a9c4f625acd5492e08c /lib/renderers/wayland/wayland.c
parent2820734ec01ad6d2e1a0611fa480c3dd533588c7 (diff)
downloadbemenu-d3db039136ad66d2c83c1c0fbf0964bfbb5afb16.tar.gz
bemenu-d3db039136ad66d2c83c1c0fbf0964bfbb5afb16.tar.bz2
bemenu-d3db039136ad66d2c83c1c0fbf0964bfbb5afb16.zip
Single line mode, color customization, etc..
Diffstat (limited to 'lib/renderers/wayland/wayland.c')
-rw-r--r--lib/renderers/wayland/wayland.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/lib/renderers/wayland/wayland.c b/lib/renderers/wayland/wayland.c
index 0d5fcde..c6f8f8b 100644
--- a/lib/renderers/wayland/wayland.c
+++ b/lib/renderers/wayland/wayland.c
@@ -11,6 +11,9 @@ static void
render(const struct bm_menu *menu)
{
struct wayland *wayland = menu->renderer->internal;
+ uint32_t count;
+ bm_menu_get_filtered_items(menu, &count);
+ wayland->window.height = ((count < menu->lines ? count : menu->lines) + 1) * menu->font.size + 4;
bm_wl_window_render(&wayland->window, menu);
wl_display_dispatch(wayland->display);
}
@@ -25,6 +28,7 @@ poll_key(const struct bm_menu *menu, unsigned int *unicode)
if (wayland->input.sym == XKB_KEY_NoSymbol)
return BM_KEY_UNICODE;
+ uint32_t mods = wayland->input.modifiers;
*unicode = xkb_state_key_get_utf32(wayland->input.xkb.state, wayland->input.code);
switch (wayland->input.sym) {
@@ -47,16 +51,16 @@ poll_key(const struct bm_menu *menu, unsigned int *unicode)
return BM_KEY_END;
case XKB_KEY_SunPageUp:
- return BM_KEY_PAGE_UP;
+ return (mods & MOD_SHIFT ? BM_KEY_SHIFT_PAGE_UP : BM_KEY_PAGE_UP);
case XKB_KEY_SunPageDown:
- return BM_KEY_PAGE_DOWN;
+ return (mods & MOD_SHIFT ? BM_KEY_SHIFT_PAGE_DOWN : BM_KEY_PAGE_DOWN);
case XKB_KEY_BackSpace:
return BM_KEY_BACKSPACE;
case XKB_KEY_Delete:
- return BM_KEY_DELETE;
+ return (mods & MOD_SHIFT ? BM_KEY_LINE_DELETE_LEFT : BM_KEY_DELETE);
case XKB_KEY_Tab:
return BM_KEY_TAB;
@@ -65,11 +69,41 @@ poll_key(const struct bm_menu *menu, unsigned int *unicode)
return BM_KEY_SHIFT_RETURN;
case XKB_KEY_Return:
- return BM_KEY_RETURN;
+ return (mods & MOD_CTRL ? BM_KEY_CONTROL_RETURN : (mods & MOD_SHIFT ? BM_KEY_SHIFT_RETURN : BM_KEY_RETURN));
case XKB_KEY_Escape:
return BM_KEY_ESCAPE;
+ case XKB_KEY_p:
+ return (mods & MOD_CTRL ? BM_KEY_UP : BM_KEY_UNICODE);
+
+ case XKB_KEY_n:
+ return (mods & MOD_CTRL ? BM_KEY_DOWN : BM_KEY_UNICODE);
+
+ case XKB_KEY_l:
+ return (mods & MOD_CTRL ? BM_KEY_LEFT : BM_KEY_UNICODE);
+
+ case XKB_KEY_f:
+ return (mods & MOD_CTRL ? BM_KEY_RIGHT : BM_KEY_UNICODE);
+
+ case XKB_KEY_a:
+ return (mods & MOD_CTRL ? BM_KEY_HOME : BM_KEY_UNICODE);
+
+ case XKB_KEY_e:
+ return (mods & MOD_CTRL ? BM_KEY_END : BM_KEY_UNICODE);
+
+ case XKB_KEY_h:
+ return (mods & MOD_CTRL ? BM_KEY_BACKSPACE : BM_KEY_UNICODE);
+
+ case XKB_KEY_u:
+ return (mods & MOD_CTRL ? BM_KEY_LINE_DELETE_LEFT : BM_KEY_UNICODE);
+
+ case XKB_KEY_k:
+ return (mods & MOD_CTRL ? BM_KEY_LINE_DELETE_RIGHT : BM_KEY_UNICODE);
+
+ case XKB_KEY_w:
+ return (mods & MOD_CTRL ? BM_KEY_WORD_DELETE : BM_KEY_UNICODE);
+
default: break;
}
@@ -81,7 +115,7 @@ get_displayed_count(const struct bm_menu *menu)
{
struct wayland *wayland = menu->renderer->internal;
assert(wayland);
- return wayland->window.height / 12;
+ return wayland->window.displayed;
}
static void