From d1591273e7c0707276947302798a43c75d1a1ec4 Mon Sep 17 00:00:00 2001 From: Dave Davenport Date: Tue, 24 Nov 2015 22:02:30 +0100 Subject: [PATCH] Cleanups, rename and document. --- include/rofi.h | 119 ++++++++++++++++++++++++------------------- source/dialogs/run.c | 2 +- source/rofi.c | 2 +- 3 files changed, 69 insertions(+), 54 deletions(-) diff --git a/include/rofi.h b/include/rofi.h index bf534d73..60fdf6b6 100644 --- a/include/rofi.h +++ b/include/rofi.h @@ -31,11 +31,6 @@ typedef enum PREVIOUS_DIALOG = 1003 } SwitcherMode; -typedef void ( *switcher_free )( Switcher *data ); - -typedef char * ( *get_display_value )( const Switcher *sw, unsigned int selected_line, int *state, int get_entry ); - -typedef char * ( *get_completion )( const Switcher *sw, unsigned int selected_line ); /** * State returned by the rofi window. */ @@ -61,38 +56,6 @@ typedef enum MENU_LOWER_MASK = 0x0000FFFF } MenuReturn; -/** - * @param tokens List of (input) tokens to match. - * @param input The entry to match against. - * @param case_sensitive Whether case is significant. - * @param index The current selected index. - * @param data User data. - * - * Function prototype for the matching algorithm. - * - * @returns 1 when it matches, 0 if not. - */ -typedef int ( *menu_match_cb )( const Switcher *data, char **tokens, int not_ascii, int case_sensitive, unsigned int index ); - -/** - * @param sw the Switcher to show. - * @param lines An array of strings to display. - * @param num_lines Length of the array with strings to display. - * @param input A pointer to a string where the inputted data is placed. - * @param prompt The prompt to show. - * @param shift pointer to integer that is set to the state of the shift key. - * @param mmc Menu menu match callback, used for matching user input. - * @param mmc_data data to pass to mmc. - * @param selected_line pointer to integer holding the selected line. - * @param message Extra message to display. - * - * Main menu callback. - * - * @returns The command issued (see MenuReturn) - */ -MenuReturn menu ( Switcher *sw, char **input, char *prompt, unsigned int *selected_line, unsigned int *next_pos, const char *message ) -__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) ); - /** * @param sig The caught signal * @@ -132,6 +95,24 @@ typedef enum _WindowLocation WL_WEST = 8 } WindowLocation; +/** + * @param sw the Switcher to show. + * @param lines An array of strings to display. + * @param num_lines Length of the array with strings to display. + * @param input A pointer to a string where the inputted data is placed. + * @param prompt The prompt to show. + * @param shift pointer to integer that is set to the state of the shift key. + * @param mmc Menu menu match callback, used for matching user input. + * @param mmc_data data to pass to mmc. + * @param selected_line pointer to integer holding the selected line. + * @param message Extra message to display. + * + * Main menu callback. + * + * @returns The command issued (see MenuReturn) + */ +MenuReturn menu ( Switcher *sw, char **input, char *prompt, unsigned int *selected_line, unsigned int *next_pos, const char *message ) +__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) ); /** * Settings */ @@ -262,6 +243,34 @@ extern Settings config; */ void error_dialog ( const char *msg, int markup ); +typedef void ( *switcher_free )( Switcher *data ); + +typedef char * ( *switcher_get_display_value )( const Switcher *sw, unsigned int selected_line, int *state, int get_entry ); + +typedef char * ( *switcher_get_completion )( const Switcher *sw, unsigned int selected_line ); +/** + * @param tokens List of (input) tokens to match. + * @param input The entry to match against. + * @param case_sensitive Whether case is significant. + * @param index The current selected index. + * @param data User data. + * + * Function prototype for the matching algorithm. + * + * @returns 1 when it matches, 0 if not. + */ +typedef int ( *switcher_token_match )( const Switcher *data, char **tokens, int not_ascii, int case_sensitive, unsigned int index ); + +typedef void ( *switcher_init )( Switcher *sw ); + +typedef unsigned int ( *switcher_get_num_entries )( const Switcher *sw ); + +typedef void ( *switcher_destroy )( Switcher *sw ); + +typedef SwitcherMode ( *switcher_result )( Switcher *sw, int menu_retv, char **input, unsigned int selected_line ); + +typedef int ( *switcher_is_not_ascii )( const Switcher *sw, unsigned int index ); + /** * Structure defining a switcher. * It consists of a name, callback and if enabled @@ -280,26 +289,32 @@ struct _Switcher /** * A switcher normally consists of the following parts: */ - void ( *init )( struct _Switcher *sw ); - unsigned int ( *get_num_entries )( const struct _Switcher *sw ); - SwitcherMode ( *result )( struct _Switcher *sw, int menu_retv, char **input, unsigned int selected_line ); - void ( *destroy )( struct _Switcher *pd ); + // Initialize the Switcher + switcher_init init; + // Destroy the switcher, e.g. free all its memory. + switcher_destroy destroy; + // Get number of entries to display. (unfiltered). + switcher_get_num_entries get_num_entries; + // Check if the element is ascii. + switcher_is_not_ascii is_not_ascii; + // Process the result of the user selection. + switcher_result result; // Token match. - menu_match_cb token_match; - - get_display_value mgrv; - - int ( *is_not_ascii )( const struct _Switcher *sw, unsigned int index ); - - get_completion get_completion; + switcher_token_match token_match; + // Get the string to display for the entry. + switcher_get_display_value mgrv; + // Get the 'completed' entry. + switcher_get_completion get_completion; // Pointer to private data. - void *private_data; + void *private_data; - // Extra fields for script - void *ed; // Free SWitcher - switcher_free free; + // Only to be used when the switcher object itself is dynamic. + // And has data in `ed` + switcher_free free; + // Extra fields for script + void *ed; }; #define color_reset "\033[0m" diff --git a/source/dialogs/run.c b/source/dialogs/run.c index 3ce143aa..81a3609b 100644 --- a/source/dialogs/run.c +++ b/source/dialogs/run.c @@ -326,7 +326,7 @@ static void run_mode_destroy ( Switcher *sw ) } } -static char *mgrv ( const Switcher *sw, unsigned int selected_line, G_GNUC_UNUSED int *state, int get_entry ) +static char *mgrv ( const Switcher *sw, unsigned int selected_line, G_GNUC_UNUSED int *state, int get_entry ) { const RunModePrivateData *rmpd = (const RunModePrivateData *) sw->private_data; return get_entry ? g_strdup ( rmpd->cmd_list[selected_line] ) : NULL; diff --git a/source/rofi.c b/source/rofi.c index f1625ffb..6e118dad 100644 --- a/source/rofi.c +++ b/source/rofi.c @@ -771,7 +771,7 @@ static void filter_elements ( thread_state *t, G_GNUC_UNUSED gpointer user_data t->state->line_map[t->start + t->count] = i; if ( config.levenshtein_sort ) { // This is inefficient, need to fix it. - char * str = t->state->sw->mgrv ( t->state->sw, i, &st, TRUE ); + char * str = t->state->sw->mgrv ( t->state->sw, i, &st, TRUE ); t->state->distance[i] = levenshtein ( t->state->text->text, str ); g_free ( str ); }