diff --git a/source/rofi.c b/source/rofi.c index 2d8454a4..b2efb1fd 100644 --- a/source/rofi.c +++ b/source/rofi.c @@ -1650,10 +1650,14 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom } // If a valid item is selected, return that.. - if ( state.selected < state.filtered_lines && state.filtered[state.selected] != NULL ) { + if ( rc != -2 + && state.selected < state.filtered_lines && state.filtered[state.selected] != NULL ) { state.retv = MENU_OK; *( state.selected_line ) = state.line_map[state.selected]; } + // Either: + // Ctrl+Enter was used to force using custom input (-2) + // or // No item selected, but user entered something else if ( strlen ( state.text->text ) > 0 ) { state.retv = MENU_CUSTOM_INPUT; diff --git a/source/textbox.c b/source/textbox.c index 3cbcb293..5228672f 100644 --- a/source/textbox.c +++ b/source/textbox.c @@ -405,6 +405,9 @@ int textbox_keypress ( textbox *tb, XEvent *ev ) textbox_cursor_bkspc ( tb ); return 1; } + else if ( ( ev->xkey.state & ControlMask ) && ( key == XK_Return || key == XK_KP_Enter) ) { + return -2; + } else if ( key == XK_Return || key == XK_KP_Enter || ( ( ev->xkey.state & ControlMask ) && key == XK_j ) || ( ( ev->xkey.state & ControlMask ) && key == XK_m ) ) {