/* * rofi * * MIT/X11 License * Copyright © 2013-2020 Qball Cow * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ #include #include #include #include #include #include #include #include #include #include #include #include "rofi.h" #include "settings.h" #include "helper.h" #include "xrmoptions.h" #include "dialogs/help-keys.h" #include "widgets/textbox.h" typedef struct { char **messages; unsigned int messages_length; } KeysHelpModePrivateData; static void get_apps ( KeysHelpModePrivateData *pd ) { pd->messages = config_parser_return_display_help ( &( pd->messages_length ) ); } static int help_keys_mode_init ( Mode *sw ) { if ( mode_get_private_data ( sw ) == NULL ) { KeysHelpModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) ); mode_set_private_data ( sw, (void *) pd ); get_apps ( pd ); } return TRUE; } static ModeMode help_keys_mode_result ( G_GNUC_UNUSED Mode *sw, int mretv, G_GNUC_UNUSED char **input, G_GNUC_UNUSED unsigned int selected_line ) { ModeMode retv = MODE_EXIT; if ( mretv & MENU_NEXT ) { retv = NEXT_DIALOG; } else if ( mretv & MENU_PREVIOUS ) { retv = PREVIOUS_DIALOG; } else if ( mretv & MENU_QUICK_SWITCH ) { retv = ( mretv & MENU_LOWER_MASK ); } return retv; } static void help_keys_mode_destroy ( Mode *sw ) { KeysHelpModePrivateData *rmpd = (KeysHelpModePrivateData *) mode_get_private_data ( sw ); if ( rmpd != NULL ) { g_strfreev ( rmpd->messages ); g_free ( rmpd ); mode_set_private_data ( sw, NULL ); } } static char *_get_display_value ( const Mode *sw, unsigned int selected_line, int *state, G_GNUC_UNUSED GList **list, int get_entry ) { KeysHelpModePrivateData *pd = (KeysHelpModePrivateData *) mode_get_private_data ( sw ); *state |= MARKUP; if ( !get_entry ) { return NULL; } return g_strdup ( pd->messages[selected_line] ); } static int help_keys_token_match ( const Mode *data, rofi_int_matcher **tokens, unsigned int index ) { KeysHelpModePrivateData *rmpd = (KeysHelpModePrivateData *) mode_get_private_data ( data ); return helper_token_match ( tokens, rmpd->messages[index] ); } static unsigned int help_keys_mode_get_num_entries ( const Mode *sw ) { const KeysHelpModePrivateData *pd = (const KeysHelpModePrivateData *) mode_get_private_data ( sw ); return pd->messages_length; } #include "mode-private.h" Mode help_keys_mode = { .name = "keys", .cfg_name_key = "display-keys", ._init = help_keys_mode_init, ._get_num_entries = help_keys_mode_get_num_entries, ._result = help_keys_mode_result, ._destroy = help_keys_mode_destroy, ._token_match = help_keys_token_match, ._get_completion = NULL, ._get_display_value = _get_display_value, .private_data = NULL, .free = NULL };