summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2020-05-13 17:17:15 +0200
committerDave Davenport <qball@gmpclient.org>2020-05-13 17:17:15 +0200
commit191f49dbeae49b0e34b2662835b92739f4ddfba3 (patch)
tree4ad780dfabbb42f8c367537229352fe45333458b
parentf2b6cf6b3cdc3211ec17634358765fdb7898dcf1 (diff)
[LISTVIEW] Support more customization in element.
-rw-r--r--source/widgets/box.c3
-rw-r--r--source/widgets/listview.c41
2 files changed, 29 insertions, 15 deletions
diff --git a/source/widgets/box.c b/source/widgets/box.c
index 42f95f4e..8bf531c9 100644
--- a/source/widgets/box.c
+++ b/source/widgets/box.c
@@ -225,12 +225,13 @@ static void hori_calculate_size ( box *b )
if ( b->max_size > ( rem_width ) ) {
b->max_size = rem_width;
g_debug ( "Widgets to large (width) for box: %d %d", b->max_size, b->widget.w );
- return;
+ //return;
}
if ( active_widgets > 0 ) {
int left = widget_padding_get_left ( WIDGET ( b ) );
double rem = rem_width - b->max_size;
int index = 0;
+ if ( rem < 0 ) rem = 0;
for ( GList *iter = g_list_first ( b->children ); iter != NULL; iter = g_list_next ( iter ) ) {
widget * child = (widget *) iter->data;
if ( child->enabled == FALSE ) {
diff --git a/source/widgets/listview.c b/source/widgets/listview.c
index 3ff797ea..8df1cf9a 100644
--- a/source/widgets/listview.c
+++ b/source/widgets/listview.c
@@ -165,6 +165,32 @@ static void listview_set_state ( _listview_row r, TextBoxFontType tbft )
break;
}
}
+static void listview_add_widget ( listview *lv, _listview_row *row, widget *wid, const char *label )
+{
+ TextboxFlags flags = ( lv->multi_select ) ? TB_INDICATOR : 0;
+ if ( strcasecmp ( label, "element-icon" ) == 0 ) {
+ if ( config.show_icons ) {
+ row->icon = icon_create ( WIDGET ( wid ), "element-icon" );
+ box_add ( (box *)wid, WIDGET ( row->icon ), FALSE );
+ }
+ }
+ else if ( strcasecmp ( label, "element-text" ) == 0 ) {
+ row->textbox = textbox_create ( WIDGET ( wid ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT | flags, NORMAL, "DDD", 0, 0 );
+ box_add ( (box *)wid, WIDGET ( row->textbox ), TRUE );
+ }
+ else if ( strcasecmp ( label, "element-index" ) == 0 ) {
+ row->index = textbox_create ( WIDGET ( wid ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT, NORMAL, " ", 0, 0 );
+ box_add ( (box *)wid, WIDGET ( row->index ), FALSE );
+ } else {
+ widget *wid2 = (widget *) box_create ( wid, label, ROFI_ORIENTATION_VERTICAL );
+ box_add ( (box *) wid, WIDGET ( wid2 ), TRUE );
+ GList *list = rofi_theme_get_list ( WIDGET ( wid2 ), "children", "" );
+ for ( GList *iter = g_list_first ( list ); iter != NULL; iter = g_list_next ( iter ) ) {
+ listview_add_widget ( lv,row, wid2, (const char *)iter->data );
+ }
+ }
+
+}
static void listview_create_row ( listview *lv, _listview_row *row )
{
@@ -178,20 +204,7 @@ static void listview_create_row ( listview *lv, _listview_row *row )
row->index = NULL;
for ( GList *iter = g_list_first ( list ); iter != NULL; iter = g_list_next ( iter ) ) {
- if ( strcasecmp ( (char *) iter->data, "element-icon" ) == 0 ) {
- if ( config.show_icons ) {
- row->icon = icon_create ( WIDGET ( row->box ), "element-icon" );
- box_add ( row->box, WIDGET ( row->icon ), FALSE );
- }
- }
- else if ( strcasecmp ( (char *) iter->data, "element-text" ) == 0 ) {
- row->textbox = textbox_create ( WIDGET ( row->box ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT | flags, NORMAL, "DDD", 0, 0 );
- box_add ( row->box, WIDGET ( row->textbox ), TRUE );
- }
- else if ( strcasecmp ( (char*) iter->data, "element-index" ) == 0 ) {
- row->index = textbox_create ( WIDGET ( row->box ), WIDGET_TYPE_TEXTBOX_TEXT, "element-text", TB_AUTOHEIGHT, NORMAL, " ", 0, 0 );
- box_add ( row->box, WIDGET ( row->index ), FALSE );
- }
+ listview_add_widget ( lv,row, WIDGET(row->box), (const char *)iter->data );
}
g_list_free_full ( list, g_free );
}