summaryrefslogtreecommitdiffstats
path: root/source/dialogs/dmenu.c
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2016-07-22 09:44:12 +0200
committerDave Davenport <qball@gmpclient.org>2016-07-22 09:44:12 +0200
commit22c8760e3227985bfe2ad93fe951580f66f34ed5 (patch)
treefcd043642d0e0839ad6db5832fbe2d3b4fc5fdd2 /source/dialogs/dmenu.c
parent5d5c9713d7eaeace0bae37e56ae2734d5d203194 (diff)
First try at fixing #430. Needs testin.
Diffstat (limited to 'source/dialogs/dmenu.c')
-rw-r--r--source/dialogs/dmenu.c58
1 files changed, 28 insertions, 30 deletions
diff --git a/source/dialogs/dmenu.c b/source/dialogs/dmenu.c
index 4114452a..e346a9c1 100644
--- a/source/dialogs/dmenu.c
+++ b/source/dialogs/dmenu.c
@@ -422,6 +422,27 @@ static void dmenu_finish ( RofiViewState *state, int retv )
mode_destroy ( &dmenu_mode );
}
+static void dmenu_print_results ( DmenuModePrivateData *pd, const char *input )
+{
+ char **cmd_list = pd->cmd_list;
+ int seen = FALSE;
+ if ( pd->selected_list != NULL ) {
+ for ( unsigned int st = 0; st < pd->cmd_list_length; st++ ) {
+ if ( bitget ( pd->selected_list, st ) ) {
+ seen = TRUE;
+ dmenu_output_formatted_line ( pd->format, cmd_list[st], st, input );
+ }
+ }
+ }
+ if ( !seen ) {
+ const char *cmd = input;
+ if ( pd->selected_line != UINT32_MAX ) {
+ cmd = cmd_list[pd->selected_line];
+ }
+ dmenu_output_formatted_line ( pd->format, cmd, pd->selected_line, input );
+ }
+}
+
static void dmenu_finalize ( RofiViewState *state )
{
int retv = FALSE;
@@ -447,7 +468,7 @@ static void dmenu_finalize ( RofiViewState *state )
}
else if ( pd->selected_line != UINT32_MAX ) {
if ( ( mretv & ( MENU_OK | MENU_QUICK_SWITCH ) ) && cmd_list[pd->selected_line] != NULL ) {
- dmenu_output_formatted_line ( pd->format, cmd_list[pd->selected_line], pd->selected_line, input );
+ dmenu_print_results ( pd, input );
retv = TRUE;
if ( ( mretv & MENU_QUICK_SWITCH ) ) {
retv = 10 + ( mretv & MENU_LOWER_MASK );
@@ -489,42 +510,19 @@ static void dmenu_finalize ( RofiViewState *state )
}
}
else {
- int seen = FALSE;
- if ( pd->selected_list != NULL ) {
- for ( unsigned int st = 0; st < pd->cmd_list_length; st++ ) {
- if ( bitget ( pd->selected_list, st ) ) {
- seen = TRUE;
- dmenu_output_formatted_line ( pd->format, cmd_list[st], st, input );
- }
- }
- }
- if ( !seen ) {
- dmenu_output_formatted_line ( pd->format, cmd_list[pd->selected_line], pd->selected_line, input );
- }
+ dmenu_print_results ( pd, input );
}
retv = TRUE;
}
// Custom input
else if ( ( mretv & ( MENU_CUSTOM_INPUT ) ) ) {
- dmenu_output_formatted_line ( pd->format, input, -1, input );
- if ( ( mretv & MENU_CUSTOM_ACTION ) ) {
- restart = TRUE;
- // Move to next line.
- pd->selected_line = MIN ( next_pos, cmd_list_length - 1 );
- }
+ dmenu_print_results ( pd, input );
retv = TRUE;
}
// Quick switch with entry selected.
- else if ( ( mretv & MENU_QUICK_SWITCH ) && pd->selected_line < UINT32_MAX ) {
- dmenu_output_formatted_line ( pd->format, cmd_list[pd->selected_line], pd->selected_line, input );
-
- restart = FALSE;
- retv = 10 + ( mretv & MENU_LOWER_MASK );
- }
- // Quick switch without entry selected.
- else if ( ( mretv & MENU_QUICK_SWITCH ) && pd->selected_line == UINT32_MAX ) {
- dmenu_output_formatted_line ( pd->format, input, -1, input );
+ else if ( ( mretv & MENU_QUICK_SWITCH ) ) {
+ dmenu_print_results ( pd, input );
restart = FALSE;
retv = 10 + ( mretv & MENU_LOWER_MASK );
@@ -551,8 +549,8 @@ int dmenu_switcher_dialog ( void )
pd->only_selected = FALSE;
pd->multi_select = FALSE;
if ( find_arg ( "-multi-select" ) >= 0 ) {
- menu_flags = MENU_INDICATOR;
- pd->multi_select = TRUE;
+ menu_flags = MENU_INDICATOR;
+ pd->multi_select = TRUE;
}
if ( find_arg ( "-markup-rows" ) >= 0 ) {
pd->do_markup = TRUE;