diff options
author | Dave Davenport <qball@gmpclient.org> | 2016-01-07 21:27:20 +0100 |
---|---|---|
committer | Dave Davenport <qball@gmpclient.org> | 2016-01-07 21:27:20 +0100 |
commit | fa51aeb484374cf22493d0da81e298a9052f1451 (patch) | |
tree | 245055e789ece34b0b6945cc0e949ea4a599e2fc /source/mode.c | |
parent | e8daff0f6ad49cd17b225622fa1875ee2960a70f (diff) |
More splitting and abstracting.
Diffstat (limited to 'source/mode.c')
-rw-r--r-- | source/mode.c | 124 |
1 files changed, 122 insertions, 2 deletions
diff --git a/source/mode.c b/source/mode.c index 7b8590d3..d5fb3787 100644 --- a/source/mode.c +++ b/source/mode.c @@ -1,4 +1,6 @@ #include "rofi.h" +#include "xrmoptions.h" +#include "x11-helper.h" #include "mode.h" // This one should only be in mode implementations. @@ -32,8 +34,126 @@ unsigned int mode_get_num_entries ( const Mode *mode ) char * mode_get_display_value ( const Mode *mode, unsigned int selected_line, int *state, int get_entry ) { g_assert ( mode != NULL ); - g_assert ( mode->mgrv != NULL ); + g_assert ( mode->_get_display_value != NULL ); - return mode->mgrv ( mode, selected_line, state, get_entry ); + return mode->_get_display_value ( mode, selected_line, state, get_entry ); +} + +char * mode_get_completion ( const Mode *mode, unsigned int selected_line ) +{ + g_assert ( mode != NULL ); + if ( mode->_get_completion != NULL ) { + return mode->_get_completion ( mode, selected_line ); + } + else { + int state; + g_assert ( mode->_get_display_value != NULL ); + return mode->_get_display_value ( mode, selected_line, &state, TRUE ); + } +} + +int mode_is_not_ascii ( const Mode *mode, unsigned int selected_line ) +{ + g_assert ( mode != NULL ); + g_assert ( mode->_is_not_ascii != NULL ); + return mode->_is_not_ascii ( mode, selected_line ); +} +ModeMode mode_result ( Mode *mode, int menu_retv, char **input, unsigned int selected_line ) +{ + g_assert ( mode != NULL ); + g_assert ( mode->_result != NULL ); + return mode->_result ( mode, menu_retv, input, selected_line ); +} + +int mode_token_match ( const Mode *mode, char **tokens, int not_ascii, int case_sensitive, unsigned int selected_line ) +{ + g_assert ( mode != NULL ); + g_assert ( mode->_token_match != NULL ); + return mode->_token_match ( mode, tokens, not_ascii, case_sensitive, selected_line ); +} + +const char *mode_get_name ( const Mode *mode ) +{ + g_assert ( mode != NULL ); + return mode->name; +} + +void mode_setup_keybinding ( Mode *mode ) +{ + g_assert ( mode != NULL ); + mode->keycfg = g_strdup_printf ( "key-%s", mode->name ); + config_parser_add_option ( xrm_String, mode->keycfg, (void * *) &( mode->keystr ), "Keybinding" ); +} + +int mode_check_keybinding ( const Mode *mode, KeySym key, unsigned int modstate ) +{ + g_assert ( mode != NULL ); + if ( mode->keystr != NULL ) { + if ( mode->modmask == modstate && mode->keysym == key ) { + return TRUE; + } + } + return FALSE; +} + +void mode_free ( Mode **mode ) +{ + g_assert ( mode != NULL ); + if ( ( *mode )->keycfg != NULL ) { + g_free ( ( *mode )->keycfg ); + ( *mode )->keycfg = NULL; + } + if ( ( *mode )->free != NULL ) { + ( *mode )->free ( *mode ); + } + ( *mode ) = NULL; +} + +int mode_grab_key ( Mode *mode, Display *display ) +{ + g_assert ( mode != NULL ); + if ( mode->keystr != NULL ) { + x11_parse_key ( mode->keystr, &( mode->modmask ), &( mode->keysym ) ); + if ( mode->keysym != NoSymbol ) { + x11_grab_key ( display, mode->modmask, mode->keysym ); + return TRUE; + } + } + return FALSE; +} +void mode_ungrab_key ( Mode *mode, Display *display ) +{ + g_assert ( mode != NULL ); + if ( mode->keystr != NULL ) { + if ( mode->keysym != NoSymbol ) { + x11_ungrab_key ( display, mode->modmask, mode->keysym ); + } + } +} + +void mode_print_keybindings ( const Mode *mode ) +{ + g_assert ( mode != NULL ); + if ( mode->keystr != NULL ) { + fprintf ( stdout, "\t* "color_bold "%s"color_reset " on %s\n", mode->name, mode->keystr ); + } + else { + fprintf ( stdout, "\t* "color_bold "%s"color_reset " on <unspecified>\n", mode->name ); + } +} + +void *mode_get_private_data ( const Mode *mode ) +{ + g_assert ( mode != NULL ); + return mode->private_data; +} + +void mode_set_private_data ( Mode *mode, void *pd ) +{ + g_assert ( mode != NULL ); + if ( pd != NULL ) { + g_assert ( mode->private_data == NULL ); + } + mode->private_data = pd; } /*@}*/ |