mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-25 13:55:34 -05:00
Refactor menu function into three parts, setup, itterrate and finalize.
This commit is contained in:
parent
94cbe3a005
commit
d0716efe12
6 changed files with 462 additions and 435 deletions
|
@ -121,8 +121,6 @@ Settings config = {
|
||||||
.element_height = 1,
|
.element_height = 1,
|
||||||
/** Sidebar mode, show the modi */
|
/** Sidebar mode, show the modi */
|
||||||
.sidebar_mode = FALSE,
|
.sidebar_mode = FALSE,
|
||||||
/** Lazy mode setting */
|
|
||||||
.lazy_filter_limit = 15000,
|
|
||||||
/** auto select */
|
/** auto select */
|
||||||
.auto_select = FALSE,
|
.auto_select = FALSE,
|
||||||
/** Parse /etc/hosts file in ssh view. */
|
/** Parse /etc/hosts file in ssh view. */
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* Pointer to xdg cache directory.
|
* Pointer to xdg cache directory.
|
||||||
*/
|
*/
|
||||||
extern const char *cache_dir;
|
extern const char *cache_dir;
|
||||||
|
typedef struct MenuState MenuState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param msg The error message to show.
|
* @param msg The error message to show.
|
||||||
|
@ -49,12 +50,11 @@ typedef enum
|
||||||
*
|
*
|
||||||
* @returns The command issued (see MenuReturn)
|
* @returns The command issued (see MenuReturn)
|
||||||
*/
|
*/
|
||||||
MenuReturn menu ( Mode *sw,
|
MenuState *menu ( Mode *sw,
|
||||||
char **input, char *prompt,
|
char *input, char *prompt,
|
||||||
unsigned int *selected_line,
|
unsigned int selected_line,
|
||||||
unsigned int *next_pos,
|
|
||||||
const char *message, MenuFlags flags )
|
const char *message, MenuFlags flags )
|
||||||
__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) );
|
__attribute__ ( ( nonnull ( 1, 2, 3 ) ) );
|
||||||
|
|
||||||
/** Reset terminal */
|
/** Reset terminal */
|
||||||
#define color_reset "\033[0m"
|
#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" \
|
" * The version of rofi you are running\n\n" \
|
||||||
" <i>https://github.com/DaveDavenport/rofi/</i>"
|
" <i>https://github.com/DaveDavenport/rofi/</i>"
|
||||||
#define ERROR_MSG_MARKUP TRUE
|
#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
|
#endif
|
||||||
|
|
|
@ -40,15 +40,15 @@ typedef struct
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TB_AUTOHEIGHT = 1 << 0,
|
TB_AUTOHEIGHT = 1 << 0,
|
||||||
TB_AUTOWIDTH = 1 << 1,
|
TB_AUTOWIDTH = 1 << 1,
|
||||||
TB_LEFT = 1 << 16,
|
TB_LEFT = 1 << 16,
|
||||||
TB_RIGHT = 1 << 17,
|
TB_RIGHT = 1 << 17,
|
||||||
TB_CENTER = 1 << 18,
|
TB_CENTER = 1 << 18,
|
||||||
TB_EDITABLE = 1 << 19,
|
TB_EDITABLE = 1 << 19,
|
||||||
TB_MARKUP = 1 << 20,
|
TB_MARKUP = 1 << 20,
|
||||||
TB_WRAP = 1 << 21,
|
TB_WRAP = 1 << 21,
|
||||||
TB_PASSWORD = 1 << 22,
|
TB_PASSWORD = 1 << 22,
|
||||||
} TextboxFlags;
|
} TextboxFlags;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
|
@ -44,6 +44,9 @@
|
||||||
// We limit at 1000000 rows for now.
|
// We limit at 1000000 rows for now.
|
||||||
#define DMENU_MAX_ROWS 1000000
|
#define DMENU_MAX_ROWS 1000000
|
||||||
|
|
||||||
|
// TODO HACK TO BE REMOVED
|
||||||
|
extern Display *display;
|
||||||
|
|
||||||
struct range_pair
|
struct range_pair
|
||||||
{
|
{
|
||||||
unsigned int start;
|
unsigned int start;
|
||||||
|
@ -397,8 +400,24 @@ int dmenu_switcher_dialog ( void )
|
||||||
|
|
||||||
do {
|
do {
|
||||||
retv = FALSE;
|
retv = FALSE;
|
||||||
unsigned int next_pos = pd->selected_line;
|
MenuState *state = menu ( &dmenu_mode, input, pd->prompt, ( pd->selected_line ), pd->message, menu_flags );
|
||||||
int mretv = menu ( &dmenu_mode, &input, pd->prompt, &( pd->selected_line ), &next_pos, 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.
|
// Special behavior.
|
||||||
// TODO clean this up!
|
// TODO clean this up!
|
||||||
if ( only_selected ) {
|
if ( only_selected ) {
|
||||||
|
|
835
source/rofi.c
835
source/rofi.c
File diff suppressed because it is too large
Load diff
|
@ -118,7 +118,6 @@ static XrmOption xrmOptions[] = {
|
||||||
{ xrm_Boolean, "levenshtein-sort", { .num = &config.levenshtein_sort }, NULL, "Use levenshtein sorting" },
|
{ 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, "case-sensitive", { .num = &config.case_sensitive }, NULL, "Set case-sensitivity" },
|
||||||
{ xrm_Boolean, "sidebar-mode", { .num = &config.sidebar_mode }, NULL, "Enable sidebar-mode" },
|
{ 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_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, "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" },
|
{ xrm_Boolean, "parse-hosts", { .num = &config.parse_hosts }, NULL, "Parse hosts file for ssh mode" },
|
||||||
|
|
Loading…
Reference in a new issue