void dt_lib_gui_set_expanded(dt_lib_module_t *module, gboolean expanded) { if(!module->expander) return; /* update expander arrow state */ GtkWidget *icon; GtkWidget *header = gtk_bin_get_child(GTK_BIN(g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(module->expander)),0))); gint flags = CPF_DIRECTION_DOWN; int c = module->container(); if ( (c == DT_UI_CONTAINER_PANEL_LEFT_TOP) || (c == DT_UI_CONTAINER_PANEL_LEFT_CENTER) || (c == DT_UI_CONTAINER_PANEL_LEFT_BOTTOM) ) { icon = g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(header)),0); if(!expanded) flags=CPF_DIRECTION_RIGHT; } else { icon = g_list_last(gtk_container_get_children(GTK_CONTAINER(header)))->data; if(!expanded) flags=CPF_DIRECTION_LEFT; } dtgtk_icon_set_paint(icon, dtgtk_cairo_paint_solid_arrow, flags); /* show / hide plugin widget */ if(expanded) { gtk_widget_show_all(module->widget); /* register to receive draw events */ darktable.lib->gui_module = module; /* focus the current module */ for(int k=0; k<DT_UI_CONTAINER_SIZE; k++) dt_ui_container_focus_widget(darktable.gui->ui, k, GTK_WIDGET(module->expander)); } else { gtk_widget_hide_all(module->widget); if(darktable.lib->gui_module == module) { darktable.lib->gui_module = NULL; dt_control_queue_redraw(); } } /* store expanded state of module */ char var[1024]; snprintf(var, 1024, "plugins/lighttable/%s/expanded", module->plugin_name); dt_conf_set_bool(var, gtk_widget_get_visible(module->widget)); }
void dt_lib_gui_set_expanded(dt_lib_module_t *module, gboolean expanded) { if(!module->expander) return; dtgtk_expander_set_expanded(DTGTK_EXPANDER(module->expander), expanded); /* update expander arrow state */ GtkWidget *icon; GtkWidget *header = dtgtk_expander_get_header(DTGTK_EXPANDER(module->expander)); gint flags = CPF_DIRECTION_DOWN; int c = module->container(module); GList *header_childs = gtk_container_get_children(GTK_CONTAINER(header)); if((c == DT_UI_CONTAINER_PANEL_LEFT_TOP) || (c == DT_UI_CONTAINER_PANEL_LEFT_CENTER) || (c == DT_UI_CONTAINER_PANEL_LEFT_BOTTOM)) { icon = g_list_nth_data(header_childs, 0); if(!expanded) flags = CPF_DIRECTION_RIGHT; } else { icon = g_list_last(header_childs)->data; if(!expanded) flags = CPF_DIRECTION_LEFT; } g_list_free(header_childs); dtgtk_icon_set_paint(icon, dtgtk_cairo_paint_solid_arrow, flags); /* show / hide plugin widget */ if(expanded) { /* register to receive draw events */ darktable.lib->gui_module = module; /* focus the current module */ for(int k = 0; k < DT_UI_CONTAINER_SIZE; k++) dt_ui_container_focus_widget(darktable.gui->ui, k, GTK_WIDGET(module->expander)); } else { if(darktable.lib->gui_module == module) { darktable.lib->gui_module = NULL; dt_control_queue_redraw(); } } /* store expanded state of module */ char var[1024]; const dt_view_t *current_view = dt_view_manager_get_current_view(darktable.view_manager); snprintf(var, sizeof(var), "plugins/%s/%s/expanded", current_view->module_name, module->plugin_name); dt_conf_set_bool(var, expanded); }