diff --git a/docs/signals.txt b/docs/signals.txt index 2bf0d921..e64d5f51 100644 --- a/docs/signals.txt +++ b/docs/signals.txt @@ -319,6 +319,9 @@ dcc/fe-dcc-chat-messages.c: Text FE ------- +gui-readline.c: + "gui key pressed", int key + gui-printtext.c: "beep" diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c index 1cabfac7..0e1a1f31 100644 --- a/src/fe-text/gui-readline.c +++ b/src/fe-text/gui-readline.c @@ -134,17 +134,20 @@ static void window_next_page(void) gui_window_scroll(active_win, get_scroll_count()); } -void handle_key(unichar key) +static void sig_gui_key_pressed(gpointer keyp) { + unichar key; char str[20]; - idle_time = time(NULL); + key = GPOINTER_TO_INT(keyp); if (redir != NULL && redir->flags & ENTRY_REDIRECT_FLAG_HOTKEY) { handle_key_redirect(key); return; } + idle_time = time(NULL); + if (key < 32) { /* control key */ str[0] = '^'; @@ -367,8 +370,10 @@ static void sig_input(void) if (!term_detached) signal_emit("command quit", 1, "Lost terminal"); } else { - for (i = 0; i < ret; i++) - handle_key(buffer[i]); + for (i = 0; i < ret; i++) { + signal_emit("gui key pressed", 1, + GINT_TO_POINTER(buffer[i])); + } } } @@ -762,6 +767,7 @@ void gui_readline_init(void) signal_add("window changed automatic", (SIGNAL_FUNC) sig_window_auto_changed); signal_add("gui entry redirect", (SIGNAL_FUNC) sig_gui_entry_redirect); + signal_add("gui key pressed", (SIGNAL_FUNC) sig_gui_key_pressed); } void gui_readline_deinit(void) @@ -825,4 +831,5 @@ void gui_readline_deinit(void) signal_remove("window changed automatic", (SIGNAL_FUNC) sig_window_auto_changed); signal_remove("gui entry redirect", (SIGNAL_FUNC) sig_gui_entry_redirect); + signal_remove("gui key pressed", (SIGNAL_FUNC) sig_gui_key_pressed); }