diff --git a/overlay/rootfs/usr/lib/dwm/plugins/dmenu.so b/overlay/rootfs/usr/lib/dwm/plugins/dmenu.so index 1216599..2033225 100755 Binary files a/overlay/rootfs/usr/lib/dwm/plugins/dmenu.so and b/overlay/rootfs/usr/lib/dwm/plugins/dmenu.so differ diff --git a/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dmenu.so b/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dmenu.so index 1216599..2033225 100755 Binary files a/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dmenu.so and b/prebuilt/sxmo-x11/usr/lib/dwm/plugins/dmenu.so differ diff --git a/src/sxmo-dmenu/dmenu.c b/src/sxmo-dmenu/dmenu.c index e7ce076..21f4e3a 100644 --- a/src/sxmo-dmenu/dmenu.c +++ b/src/sxmo-dmenu/dmenu.c @@ -77,7 +77,8 @@ static size_t items_cap = 0; static struct item *matches, *matchend; static struct item *prev, *curr, *next, *sel, *nav; static int mon = -1, screen; -static int use_text_input = 0; +static int use_text_input = 0; /* selection/output mode: with -t, Shift inverts item vs typed text */ +static int engage_ime = 1; /* engage fcitx (XIM) for text entry by default so the T9 input method activates on dmenu prompts */ static int initialindex = 0; static int managed = 0; static int curpos = 0, oldcurlen = 0; @@ -236,8 +237,7 @@ reset_session_defaults(int case_insensitive, const char *new_prompt) free_items(); topbar = 1; centered = 0; - lines = default_lines; - use_text_input = 0; + use_text_input = 0; /* reset selection/output mode; fcitx routing (engage_ime) stays on */ initialindex = 0; fstrncmp = case_insensitive ? strncasecmp : strncmp; fstrstr = case_insensitive ? cistrstr : strstr; @@ -2175,7 +2175,7 @@ show_menu(void) } inputw = MIN(inputw, mw / 3); - if (xic && use_text_input) { + if (xic && engage_ime) { char *r = Xutf8ResetIC(xic); if (r) XFree(r); @@ -2216,7 +2216,7 @@ show_menu(void) grabkeyboard(); if (!daemon_mode) grabfocus(); - if (xic && use_text_input) + if (xic && engage_ime) XSetICFocus(xic); XFlush(dpy); } else { @@ -2226,7 +2226,7 @@ show_menu(void) initial_released = (query_trigger_keys_down() == 0); XRaiseWindow(dpy, win); drawmenu(); - if (xic && use_text_input) + if (xic && engage_ime) XSetICFocus(xic); XFlush(dpy); } @@ -2244,7 +2244,7 @@ hide_menu(void) soft_pending = 0; soft_deadline = 0; - if (xic && use_text_input) { + if (xic && engage_ime) { char *r = Xutf8ResetIC(xic); if (r) XFree(r); @@ -2505,12 +2505,12 @@ process_x11_events(void) if (!initial_released || dmenu_now_ms() < start_ignore) continue; } - if (use_text_input && !issoftkey(ev.xkey.keycode)) { + if (engage_ime && !issoftkey(ev.xkey.keycode) && !(is_enter && items)) { ev.xkey.window = win; if (XFilterEvent(&ev, None)) continue; } - } else if (use_text_input && XFilterEvent(&ev, None)) { + } else if (engage_ime && XFilterEvent(&ev, None)) { continue; } switch (ev.type) { @@ -2533,7 +2533,7 @@ process_x11_events(void) if (menu_active || !daemon_mode) { if (!daemon_mode && ev.xfocus.window != win) grabfocus(); - if (xic && use_text_input) + if (xic && engage_ime) XSetICFocus(xic); } break;