static void update_entry(GtkWidget* dialog, GConfChangeSet* cs, const gchar* config_key) { GConfValue* value = NULL; GConfClient* client; client = g_object_get_data(dialog, "client"); if (gconf_change_set_check_value(cs, config_key, &value)) { GtkWidget* entry; entry = g_object_get_data(dialog, config_key); g_assert(entry != NULL); if (value == NULL) { /* We need to check for a default value, since the revert set will unset the user setting */ GConfValue* def; def = gconf_client_get_default_from_schema(client, config_key, NULL); if (def) { if (def->type == GCONF_VALUE_STRING) { gtk_entry_set_text(GTK_ENTRY(entry), gconf_value_get_string(def)); } else g_warning("Wrong type for default value of %s", config_key); gconf_value_free(def); } else gtk_entry_set_text(GTK_ENTRY(entry), ""); } else if (value->type == GCONF_VALUE_STRING) { gtk_entry_set_text(GTK_ENTRY(entry), gconf_value_get_string(value)); } else { /* error, wrong type value in the config database */ g_warning("GConfChangeSet had wrong value type %d for key %s", value->type, config_key); gtk_entry_set_text(GTK_ENTRY(entry), ""); } } }
static gboolean event_box_button_press_event (GtkWidget *widget, GdkEventButton *event, GConfChangeSet *changeset) { gint double_click_time; GConfValue *value; static struct test_data_t data; static gint test_on_timeout_id = 0; static gint test_maybe_timeout_id = 0; static guint32 double_click_timestamp = 0; GtkWidget *image; GConfClient *client; if (event->type != GDK_BUTTON_PRESS) return FALSE; image = g_object_get_data (G_OBJECT (widget), "image"); if (!(changeset && gconf_change_set_check_value (changeset, DOUBLE_CLICK_KEY, &value))) { client = gconf_client_get_default(); double_click_time = gconf_client_get_int (client, DOUBLE_CLICK_KEY, NULL); g_object_unref (client); } else double_click_time = gconf_value_get_int (value); if (test_maybe_timeout_id != 0) gtk_timeout_remove (test_maybe_timeout_id); if (test_on_timeout_id != 0) gtk_timeout_remove (test_on_timeout_id); switch (double_click_state) { case DOUBLE_CLICK_TEST_OFF: double_click_state = DOUBLE_CLICK_TEST_MAYBE; data.image = image; data.timeout_id = &test_maybe_timeout_id; test_maybe_timeout_id = gtk_timeout_add (double_click_time, (GtkFunction) test_maybe_timeout, &data); break; case DOUBLE_CLICK_TEST_MAYBE: if (event->time - double_click_timestamp < double_click_time) { double_click_state = DOUBLE_CLICK_TEST_ON; data.image = image; data.timeout_id = &test_on_timeout_id; test_on_timeout_id = gtk_timeout_add (2500, (GtkFunction) test_maybe_timeout, &data); } break; case DOUBLE_CLICK_TEST_ON: double_click_state = DOUBLE_CLICK_TEST_OFF; break; } double_click_timestamp = event->time; switch (double_click_state) { case DOUBLE_CLICK_TEST_ON: gtk_image_set_from_stock (GTK_IMAGE (image), MOUSE_DBLCLCK_ON, mouse_capplet_dblclck_icon_get_size()); break; case DOUBLE_CLICK_TEST_MAYBE: gtk_image_set_from_stock (GTK_IMAGE (image), MOUSE_DBLCLCK_MAYBE, mouse_capplet_dblclck_icon_get_size()); break; case DOUBLE_CLICK_TEST_OFF: gtk_image_set_from_stock (GTK_IMAGE (image), MOUSE_DBLCLCK_OFF, mouse_capplet_dblclck_icon_get_size()); break; } return TRUE; }