mirror of https://github.com/davatorium/rofi.git
Make dmenu use glib mainloop.
This commit is contained in:
parent
3da03c068d
commit
eab4e1438f
|
@ -94,5 +94,6 @@ void menu_state_free ( MenuState *state );
|
||||||
void menu_state_restart ( MenuState *state );
|
void menu_state_restart ( MenuState *state );
|
||||||
void menu_state_set_selected_line ( MenuState *state, unsigned int selected_line );
|
void menu_state_set_selected_line ( MenuState *state, unsigned int selected_line );
|
||||||
void menu_state_queue_redraw ( void );
|
void menu_state_queue_redraw ( void );
|
||||||
|
void menu_state_set_active ( MenuState *state );
|
||||||
/*@}*/
|
/*@}*/
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -404,15 +404,12 @@ int dmenu_switcher_dialog ( void )
|
||||||
menu_state_set_selected_line ( state, pd->selected_line );
|
menu_state_set_selected_line ( state, pd->selected_line );
|
||||||
retv = FALSE;
|
retv = FALSE;
|
||||||
|
|
||||||
|
menu_state_set_active ( state );
|
||||||
// Enter main loop.
|
// Enter main loop.
|
||||||
while ( !menu_state_get_completed ( state ) ) {
|
while ( !menu_state_get_completed ( state ) ) {
|
||||||
// Wait for event.
|
g_main_context_iteration ( NULL, TRUE );
|
||||||
XEvent ev;
|
|
||||||
// Get next event. (might block)
|
|
||||||
XNextEvent ( display, &ev );
|
|
||||||
TICK_N ( "X Event" );
|
|
||||||
menu_state_itterrate ( state, &ev );
|
|
||||||
}
|
}
|
||||||
|
menu_state_set_active ( NULL );
|
||||||
g_free ( input );
|
g_free ( input );
|
||||||
input = g_strdup ( menu_state_get_user_input ( state ) );
|
input = g_strdup ( menu_state_get_user_input ( state ) );
|
||||||
pd->selected_line = menu_state_get_selected_line ( state );;
|
pd->selected_line = menu_state_get_selected_line ( state );;
|
||||||
|
|
|
@ -239,6 +239,11 @@ void menu_state_restart ( MenuState *state )
|
||||||
state->quit = FALSE;
|
state->quit = FALSE;
|
||||||
state->retv = MENU_CANCEL;
|
state->retv = MENU_CANCEL;
|
||||||
}
|
}
|
||||||
|
void menu_state_set_active ( MenuState *state )
|
||||||
|
{
|
||||||
|
g_assert ( ( current_active_menu == NULL && state != NULL ) || ( current_active_menu != NULL && state == NULL ) );
|
||||||
|
current_active_menu = state;
|
||||||
|
}
|
||||||
void menu_state_set_selected_line ( MenuState *state, unsigned int selected_line )
|
void menu_state_set_selected_line ( MenuState *state, unsigned int selected_line )
|
||||||
{
|
{
|
||||||
state->selected_line = selected_line;
|
state->selected_line = selected_line;
|
||||||
|
@ -1492,7 +1497,6 @@ MenuState *menu ( Mode *sw,
|
||||||
state->cur_page = -1;
|
state->cur_page = -1;
|
||||||
state->border = config.padding + config.menu_bw;
|
state->border = config.padding + config.menu_bw;
|
||||||
state->x11_event_loop = menu_mainloop_iter;
|
state->x11_event_loop = menu_mainloop_iter;
|
||||||
state->finalize = process_result;
|
|
||||||
|
|
||||||
// Request the lines to show.
|
// Request the lines to show.
|
||||||
state->num_lines = mode_get_num_entries ( sw );
|
state->num_lines = mode_get_num_entries ( sw );
|
||||||
|
@ -1755,11 +1759,11 @@ void error_dialog ( const char *msg, int markup )
|
||||||
if ( sncontext != NULL ) {
|
if ( sncontext != NULL ) {
|
||||||
sn_launchee_context_complete ( sncontext );
|
sn_launchee_context_complete ( sncontext );
|
||||||
}
|
}
|
||||||
current_active_menu = state;
|
menu_state_set_active ( state );
|
||||||
while ( !state->quit ) {
|
while ( !menu_state_get_completed ( state ) ) {
|
||||||
g_main_context_iteration ( NULL, TRUE );
|
g_main_context_iteration ( NULL, TRUE );
|
||||||
}
|
}
|
||||||
current_active_menu = NULL;
|
menu_state_set_active ( NULL );
|
||||||
menu_state_free ( state );
|
menu_state_free ( state );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1852,7 +1856,8 @@ static void run_switcher ( ModeMode mode )
|
||||||
char *prompt = g_strdup_printf ( "%s:", mode_get_name ( modi[mode].sw ) );
|
char *prompt = g_strdup_printf ( "%s:", mode_get_name ( modi[mode].sw ) );
|
||||||
curr_switcher = mode;
|
curr_switcher = mode;
|
||||||
MenuState * state = menu ( modi[mode].sw, input, prompt, NULL, MENU_NORMAL );
|
MenuState * state = menu ( modi[mode].sw, input, prompt, NULL, MENU_NORMAL );
|
||||||
current_active_menu = state;
|
state->finalize = process_result;
|
||||||
|
menu_state_set_active ( state );
|
||||||
g_free ( prompt );
|
g_free ( prompt );
|
||||||
}
|
}
|
||||||
static void process_result ( MenuState *state )
|
static void process_result ( MenuState *state )
|
||||||
|
@ -1860,8 +1865,8 @@ static void process_result ( MenuState *state )
|
||||||
unsigned int selected_line = menu_state_get_selected_line ( state );;
|
unsigned int selected_line = menu_state_get_selected_line ( state );;
|
||||||
MenuReturn mretv = menu_state_get_return_value ( state );
|
MenuReturn mretv = menu_state_get_return_value ( state );
|
||||||
char *input = g_strdup ( menu_state_get_user_input ( state ) );
|
char *input = g_strdup ( menu_state_get_user_input ( state ) );
|
||||||
|
menu_state_set_active ( NULL );
|
||||||
menu_state_free ( state );
|
menu_state_free ( state );
|
||||||
current_active_menu = NULL;
|
|
||||||
ModeMode retv = mode_result ( modi[curr_switcher].sw, mretv, &input, selected_line );
|
ModeMode retv = mode_result ( modi[curr_switcher].sw, mretv, &input, selected_line );
|
||||||
|
|
||||||
ModeMode mode = curr_switcher;
|
ModeMode mode = curr_switcher;
|
||||||
|
@ -1890,10 +1895,11 @@ static void process_result ( MenuState *state )
|
||||||
char *prompt = g_strdup_printf ( "%s:", mode_get_name ( modi[mode].sw ) );
|
char *prompt = g_strdup_printf ( "%s:", mode_get_name ( modi[mode].sw ) );
|
||||||
curr_switcher = mode;
|
curr_switcher = mode;
|
||||||
MenuState * state = menu ( modi[mode].sw, input, prompt, NULL, MENU_NORMAL );
|
MenuState * state = menu ( modi[mode].sw, input, prompt, NULL, MENU_NORMAL );
|
||||||
|
state->finalize = process_result;
|
||||||
g_free ( prompt );
|
g_free ( prompt );
|
||||||
// TODO FIX
|
// TODO FIX
|
||||||
//g_return_val_if_fail ( state != NULL, MODE_EXIT );
|
//g_return_val_if_fail ( state != NULL, MODE_EXIT );
|
||||||
current_active_menu = state;
|
menu_state_set_active ( state );
|
||||||
g_free ( input );
|
g_free ( input );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue