Exemple #1
0
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;
}