From 37d99378dd26a0049f3a3ff5ed9b41d328106b83 Mon Sep 17 00:00:00 2001 From: Dave Davenport <qball@gmpclient.org> Date: Mon, 2 Jan 2017 21:19:27 +0100 Subject: [PATCH] cleanup some of sizing logic. --- include/widgets/listview.h | 15 +++++++++++++++ source/view.c | 35 +++++++++++++---------------------- source/widgets/listview.c | 14 +++++++++++++- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/include/widgets/listview.h b/include/widgets/listview.h index b008a28d..fb1237d5 100644 --- a/include/widgets/listview.h +++ b/include/widgets/listview.h @@ -168,6 +168,21 @@ void listview_set_mouse_activated_cb ( listview *lv, listview_mouse_activated_cb * Enable,disable multi-select. */ void listview_set_multi_select ( listview *lv, gboolean enable ); +/** + * @param lv Handler to the listview object. + * @param num_lines the maximum number of lines to display. + * + * Set the maximum number of lines to display. + */ +void listview_set_num_lines ( listview *lv, unsigned int num_lines ); + +/** + * @param lv Handler to the listview object. + * @param max_lines the maximum number of lines to display. + * + * Set the maximum number of lines to display. + */ +void listview_set_max_lines ( listview *lv, unsigned int max_lines ); /* @} */ #endif // ROFI_LISTVIEW_H diff --git a/source/view.c b/source/view.c index aacd1bfd..5208fa73 100644 --- a/source/view.c +++ b/source/view.c @@ -308,6 +308,7 @@ static void rofi_view_window_update_size ( RofiViewState * state ) CacheState.edit_surf = cairo_xcb_surface_create ( xcb->connection, CacheState.edit_pixmap, visual, state->width, state->height ); CacheState.edit_draw = cairo_create ( CacheState.edit_surf ); + g_log ( LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Re-size window based internal request: %dx%d.", state->width, state->height ); // Should wrap main window in a widget. widget_resize ( WIDGET ( state->main_window ), state->width, state->height ); } @@ -888,6 +889,7 @@ static void _rofi_view_reload_row ( RofiViewState *state ) state->num_lines = mode_get_num_entries ( state->sw ); state->line_map = g_malloc0_n ( state->num_lines, sizeof ( unsigned int ) ); state->distance = g_malloc0_n ( state->num_lines, sizeof ( int ) ); + listview_set_max_lines ( state->list_view, state->num_lines ); } static void rofi_view_refilter ( RofiViewState *state ) @@ -971,7 +973,9 @@ static void rofi_view_refilter ( RofiViewState *state ) state->retv = MENU_OK; state->quit = TRUE; } - if ( config.fixed_num_lines == FALSE && ( CacheState.flags & MENU_NORMAL_WINDOW ) == 0 ) { + + // Make sure we enable fixed num lines when in normal window mode. + if ( (CacheState.flags&MENU_NORMAL_WINDOW) == 0 ){ int height = rofi_view_calculate_height ( state ); if ( height != state->height ) { state->height = height; @@ -1269,6 +1273,7 @@ void rofi_view_itterrate ( RofiViewState *state, xcb_generic_event_t *ev, xkb_st CacheState.edit_surf = cairo_xcb_surface_create ( xcb->connection, CacheState.edit_pixmap, visual, state->width, state->height ); CacheState.edit_draw = cairo_create ( CacheState.edit_surf ); + g_log ( LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Re-size window based external request: %d %d\n", state->width, state->height); widget_resize ( WIDGET ( state->main_window ), state->width, state->height ); } } @@ -1494,40 +1499,26 @@ RofiViewState *rofi_view_create ( Mode *sw, listview_set_multi_select ( state->list_view, ( state->menu_flags & MENU_INDICATOR ) == MENU_INDICATOR ); listview_set_scroll_type ( state->list_view, config.scroll_method ); listview_set_mouse_activated_cb ( state->list_view, rofi_view_listview_mouse_activated_cb, state ); + listview_set_num_lines ( state->list_view, config.menu_lines ); + listview_set_max_lines ( state->list_view, state->num_lines ); box_add ( state->main_box, WIDGET ( state->list_view ), TRUE, FALSE ); - - - // Height of a row. - if ( config.menu_lines == 0 || config.fullscreen ) { - state->height = CacheState.mon.h; - // Autosize it. - config.fixed_num_lines = TRUE; - } - // filtered list state->line_map = g_malloc0_n ( state->num_lines, sizeof ( unsigned int ) ); state->distance = (int *) g_malloc0_n ( state->num_lines, sizeof ( int ) ); - // Make sure we enable fixed num lines when in normal window mode. - if ( (CacheState.flags&MENU_NORMAL_WINDOW) == MENU_NORMAL_WINDOW){ - config.fixed_num_lines = TRUE; - } - rofi_view_calculate_window_width ( state ); - state->height = rofi_view_calculate_height ( state ); - + // Only needed when window is fixed size. + if (( CacheState.flags & MENU_NORMAL_WINDOW ) == MENU_NORMAL_WINDOW ) { + config.fixed_num_lines = TRUE; + rofi_view_window_update_size ( state ); + } // Move the window to the correct x,y position. rofi_view_calculate_window_position ( state ); - rofi_view_window_update_size ( state ); - // Update. - //state->selected = 0; - state->quit = FALSE; rofi_view_refilter ( state ); - rofi_view_update ( state, TRUE ); xcb_map_window ( xcb->connection, CacheState.main_window ); widget_queue_redraw ( WIDGET ( state->main_window ) ); diff --git a/source/widgets/listview.c b/source/widgets/listview.c index 70abce55..813e7816 100644 --- a/source/widgets/listview.c +++ b/source/widgets/listview.c @@ -58,6 +58,7 @@ struct _listview unsigned int spacing; unsigned int menu_lines; + unsigned int max_displayed_lines; unsigned int menu_columns; unsigned int fixed_num_lines; unsigned int eh; @@ -352,7 +353,6 @@ listview *listview_create ( const char *name, listview_update_callback cb, void // Some settings. lv->spacing = distance_get_pixel (rofi_theme_get_distance (lv->widget.class_name, lv->widget.name, NULL, "spacing", DEFAULT_SPACING )); - lv->menu_lines = rofi_theme_get_integer (lv->widget.class_name, lv->widget.name, NULL, "lines", config.menu_lines ); lv->menu_columns = rofi_theme_get_integer (lv->widget.class_name, lv->widget.name, NULL, "columns", config.menu_columns); lv->fixed_num_lines = rofi_theme_get_boolean (lv->widget.class_name, lv->widget.name, NULL, "fixed-height", config.fixed_num_lines ); listview_set_show_scrollbar ( lv, rofi_theme_get_boolean ( lv->widget.class_name, lv->widget.name, NULL, "scrollbar", !config.hide_scrollbar )); @@ -511,3 +511,15 @@ void listview_set_multi_select ( listview *lv, gboolean enable ) lv->multi_select = enable; } } +void listview_set_num_lines ( listview *lv, unsigned int num_lines ) +{ + if ( lv ) { + lv->menu_lines = num_lines; + } +} +void listview_set_max_lines ( listview *lv, unsigned int max_lines ) +{ + if ( lv ) { + lv->max_displayed_lines = max_lines; + } +}