Refactor menu function into three parts, setup, itterrate and finalize.

This commit is contained in:
Dave Davenport 2016-01-20 18:24:31 +01:00
parent 94cbe3a005
commit d0716efe12
6 changed files with 462 additions and 435 deletions

View File

@ -121,8 +121,6 @@ Settings config = {
.element_height = 1,
/** Sidebar mode, show the modi */
.sidebar_mode = FALSE,
/** Lazy mode setting */
.lazy_filter_limit = 15000,
/** auto select */
.auto_select = FALSE,
/** Parse /etc/hosts file in ssh view. */

View File

@ -17,6 +17,7 @@
* Pointer to xdg cache directory.
*/
extern const char *cache_dir;
typedef struct MenuState MenuState;
/**
* @param msg The error message to show.
@ -49,12 +50,11 @@ typedef enum
*
* @returns The command issued (see MenuReturn)
*/
MenuReturn menu ( Mode *sw,
char **input, char *prompt,
unsigned int *selected_line,
unsigned int *next_pos,
MenuState *menu ( Mode *sw,
char *input, char *prompt,
unsigned int selected_line,
const char *message, MenuFlags flags )
__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) );
__attribute__ ( ( nonnull ( 1, 2, 3 ) ) );
/** Reset terminal */
#define color_reset "\033[0m"
@ -84,5 +84,13 @@ int show_error_message ( const char *msg, int markup );
" * The version of rofi you are running\n\n" \
" <i>https://github.com/DaveDavenport/rofi/</i>"
#define ERROR_MSG_MARKUP TRUE
MenuReturn menu_state_get_return_value ( const MenuState *state );
unsigned int menu_state_get_selected_line ( const MenuState *state );
unsigned int menu_state_get_next_position ( const MenuState *state );
void menu_state_itterrate ( MenuState *state, XEvent *event );
unsigned int menu_state_get_completed ( const MenuState *state );
const char * menu_state_get_user_input ( const MenuState *state );
void menu_state_free ( MenuState *state );
/*@}*/
#endif

View File

@ -40,15 +40,15 @@ typedef struct
typedef enum
{
TB_AUTOHEIGHT = 1 << 0,
TB_AUTOWIDTH = 1 << 1,
TB_LEFT = 1 << 16,
TB_RIGHT = 1 << 17,
TB_CENTER = 1 << 18,
TB_EDITABLE = 1 << 19,
TB_MARKUP = 1 << 20,
TB_WRAP = 1 << 21,
TB_PASSWORD = 1 << 22,
TB_AUTOHEIGHT = 1 << 0,
TB_AUTOWIDTH = 1 << 1,
TB_LEFT = 1 << 16,
TB_RIGHT = 1 << 17,
TB_CENTER = 1 << 18,
TB_EDITABLE = 1 << 19,
TB_MARKUP = 1 << 20,
TB_WRAP = 1 << 21,
TB_PASSWORD = 1 << 22,
} TextboxFlags;
typedef enum

View File

@ -44,6 +44,9 @@
// We limit at 1000000 rows for now.
#define DMENU_MAX_ROWS 1000000
// TODO HACK TO BE REMOVED
extern Display *display;
struct range_pair
{
unsigned int start;
@ -397,8 +400,24 @@ int dmenu_switcher_dialog ( void )
do {
retv = FALSE;
unsigned int next_pos = pd->selected_line;
int mretv = menu ( &dmenu_mode, &input, pd->prompt, &( pd->selected_line ), &next_pos, pd->message, menu_flags );
MenuState *state = menu ( &dmenu_mode, input, pd->prompt, ( pd->selected_line ), pd->message, menu_flags );
// Enter main loop.
while ( !menu_state_get_completed ( state ) ) {
// Wait for event.
XEvent ev;
// Get next event. (might block)
XNextEvent ( display, &ev );
TICK_N ( "X Event" );
menu_state_itterrate ( state, &ev );
}
g_free ( input );
input = g_strdup ( menu_state_get_user_input ( state ) );
pd->selected_line = menu_state_get_selected_line ( state );;
MenuReturn mretv = menu_state_get_return_value ( state );
unsigned int next_pos = menu_state_get_next_position ( state );
menu_state_free ( state );
// Special behavior.
// TODO clean this up!
if ( only_selected ) {

File diff suppressed because it is too large Load Diff

View File

@ -118,7 +118,6 @@ static XrmOption xrmOptions[] = {
{ xrm_Boolean, "levenshtein-sort", { .num = &config.levenshtein_sort }, NULL, "Use levenshtein sorting" },
{ xrm_Boolean, "case-sensitive", { .num = &config.case_sensitive }, NULL, "Set case-sensitivity" },
{ xrm_Boolean, "sidebar-mode", { .num = &config.sidebar_mode }, NULL, "Enable sidebar-mode" },
{ xrm_Number, "lazy-filter-limit", { .num = &config.lazy_filter_limit }, NULL, "Set lazy filter limit" },
{ xrm_SNumber, "eh", { .snum = &config.element_height }, NULL, "Row height (in chars)" },
{ xrm_Boolean, "auto-select", { .num = &config.auto_select }, NULL, "Enable auto select mode" },
{ xrm_Boolean, "parse-hosts", { .num = &config.parse_hosts }, NULL, "Parse hosts file for ssh mode" },