static void _lib_viewswitcher_view_changed_callback(gpointer instance, gpointer user_data) { dt_lib_module_t *self = (dt_lib_module_t*)user_data; /* set default color for all labels */ int x=0; GList *childs = gtk_container_get_children(GTK_CONTAINER(self->widget)); while(childs) { x++; /* check if even number then continue to skip separator widgets */ if(!(x%2)) { childs = g_list_next(childs); continue; } GtkLabel *w = GTK_LABEL(gtk_bin_get_child(GTK_BIN(childs->data))); char label[512]= {0}; /* check if current is the same as the one we iterate, then hilite */ if(!strcmp(g_object_get_data(G_OBJECT(w),"view-label"),dt_view_manager_name(darktable.view_manager))) g_snprintf(label,512,LABEL_SELECTED, (gchar *)g_object_get_data(G_OBJECT(w),"view-label")); else g_snprintf(label,512,LABEL_DEFAULT, (gchar *)g_object_get_data(G_OBJECT(w),"view-label")); /* set label */ gtk_label_set_markup(w,label); /* get next */ childs = g_list_next(childs); } }
void dt_ctl_switch_mode_to(dt_control_gui_mode_t mode) { dt_control_gui_mode_t oldmode = dt_conf_get_int("ui_last/view"); if(oldmode == mode) return; darktable.control->button_down = 0; darktable.control->button_down_which = 0; darktable.gui->center_tooltip = 0; GtkWidget *widget = dt_ui_center(darktable.gui->ui); g_object_set(G_OBJECT(widget), "tooltip-text", "", (char *)NULL); char buf[512]; snprintf(buf, sizeof(buf) - 1, _("switch to %s mode"), dt_view_manager_name(darktable.view_manager)); gboolean i_own_lock = dt_control_gdk_lock(); int error = dt_view_manager_switch(darktable.view_manager, mode); if(i_own_lock) dt_control_gdk_unlock(); if(error) return; dt_conf_set_int ("ui_last/view", mode); }
static void _lib_viewswitcher_leave_notify_callback(GtkWidget *w, GdkEventCrossing *e, gpointer user_data) { GtkLabel *l = (GtkLabel *)user_data; /* if not active view lets set default */ if(strcmp(g_object_get_data(G_OBJECT(w), "view-label"), dt_view_manager_name(darktable.view_manager))) { gtk_widget_set_state_flags(GTK_WIDGET(l), GTK_STATE_FLAG_NORMAL, TRUE); } }
static void _lib_viewswitcher_leave_notify_callback(GtkWidget *w, GdkEventCrossing *e, gpointer user_data) { char label[512]= {0}; GtkLabel *l = (GtkLabel *)user_data; /* if not active view lets set default */ if (strcmp(g_object_get_data(G_OBJECT(w),"view-label"), dt_view_manager_name(darktable.view_manager))) { g_snprintf(label,512,LABEL_DEFAULT, (gchar *)g_object_get_data(G_OBJECT(w),"view-label")); gtk_label_set_markup(l,label); } }
static void _lib_viewswitcher_view_changed_callback(gpointer instance, dt_view_t *old_view, dt_view_t *new_view, gpointer user_data) { dt_lib_module_t *self = (dt_lib_module_t *)user_data; dt_lib_viewswitcher_t *d = (dt_lib_viewswitcher_t *)self->data; const char *name = dt_view_manager_name(darktable.view_manager); gboolean found = FALSE; for(GList *iter = d->labels; iter; iter = g_list_next(iter)) { GtkWidget *label = GTK_WIDGET(iter->data); if(!g_strcmp0(g_object_get_data(G_OBJECT(label), "view-label"), name)) { gtk_widget_set_state_flags(label, GTK_STATE_FLAG_SELECTED, TRUE); found = TRUE; } else gtk_widget_set_state_flags(label, GTK_STATE_FLAG_NORMAL, TRUE); } g_signal_handlers_block_by_func(d->dropdown, _dropdown_changed, d); if(found) { gtk_combo_box_set_active(GTK_COMBO_BOX(d->dropdown), 0); gtk_widget_set_state_flags(d->dropdown, GTK_STATE_FLAG_NORMAL, TRUE); } else { GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(d->dropdown)); GtkTreeIter iter; uint32_t index = 0; if(gtk_tree_model_get_iter_first(model, &iter) == TRUE) do { gchar *str; gtk_tree_model_get(model, &iter, TEXT_COLUMN, &str, -1); if(!g_strcmp0(str, name)) { gtk_combo_box_set_active(GTK_COMBO_BOX(d->dropdown), index); gtk_widget_set_state_flags(d->dropdown, GTK_STATE_FLAG_SELECTED, TRUE); break; } g_free(str); index++; } while(gtk_tree_model_iter_next(model, &iter) == TRUE); } g_signal_handlers_unblock_by_func(d->dropdown, _dropdown_changed, d); }