[gnome-color-manager] Add the ability to delete saved devices
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-color-manager] Add the ability to delete saved devices
- Date: Tue, 24 Nov 2009 11:22:06 +0000 (UTC)
commit 4d962592cb441175eac05cf5c42a32d6b4df338e
Author: Richard Hughes <richard hughsie com>
Date: Tue Nov 24 11:21:17 2009 +0000
Add the ability to delete saved devices
data/gcm-prefs.ui | 18 +++++++++++-
src/gcm-client.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++
src/gcm-client.h | 3 ++
src/gcm-prefs.c | 58 +++++++++++++++++++++++++++++++++++++----
4 files changed, 145 insertions(+), 8 deletions(-)
---
diff --git a/data/gcm-prefs.ui b/data/gcm-prefs.ui
index ff7593e..2a7d4dd 100644
--- a/data/gcm-prefs.ui
+++ b/data/gcm-prefs.ui
@@ -363,6 +363,20 @@
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
+ <object class="GtkButton" id="button_delete">
+ <property name="label" translatable="yes">_Delete</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkButton" id="button_calibrate">
<property name="label" translatable="yes">_Calibrate</property>
<property name="visible">True</property>
@@ -372,7 +386,7 @@
</object>
<packing>
<property name="expand">False</property>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
@@ -386,7 +400,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
diff --git a/src/gcm-client.c b/src/gcm-client.c
index c725d2d..fc9fa36 100644
--- a/src/gcm-client.c
+++ b/src/gcm-client.c
@@ -723,6 +723,80 @@ out:
}
/**
+ * gcm_client_delete_device:
+ **/
+gboolean
+gcm_client_delete_device (GcmClient *client, GcmDevice *device, GError **error)
+{
+ gboolean ret = FALSE;
+ gchar *id = NULL;
+ gchar *data = NULL;
+ gchar *filename = NULL;
+ GKeyFile *keyfile = NULL;
+ gboolean connected;
+
+ g_return_val_if_fail (GCM_IS_CLIENT (client), FALSE);
+ g_return_val_if_fail (GCM_IS_DEVICE (device), FALSE);
+
+ /* check removable */
+ g_object_get (device,
+ "connected", &connected,
+ "id", &id,
+ NULL);
+ if (connected) {
+ if (error != NULL)
+ *error = g_error_new (1, 0, "device is still connected");
+ goto out;
+ }
+
+ /* try to remove from array */
+ ret = g_ptr_array_remove (client->priv->array, device);
+ if (!ret) {
+ if (error != NULL)
+ *error = g_error_new (1, 0, "not found in device array");
+ goto out;
+ }
+
+ /* get the config file */
+ filename = gcm_utils_get_default_config_location ();
+ egg_debug ("removing %s from %s", id, filename);
+
+ /* load the config file */
+ keyfile = g_key_file_new ();
+ ret = g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, error);
+ if (!ret)
+ goto out;
+
+ /* remove from the config file */
+ g_key_file_remove_group (keyfile, id, error);
+ if (!ret)
+ goto out;
+
+ /* convert to string */
+ data = g_key_file_to_data (keyfile, NULL, error);
+ if (data == NULL) {
+ ret = FALSE;
+ goto out;
+ }
+
+ /* save contents */
+ ret = g_file_set_contents (filename, data, -1, error);
+ if (!ret)
+ goto out;
+
+ /* emit a signal */
+ egg_debug ("emit removed: %s", id);
+ g_signal_emit (client, signals[SIGNAL_REMOVED], 0, device);
+out:
+ g_free (id);
+ g_free (data);
+ g_free (filename);
+ if (keyfile != NULL)
+ g_key_file_free (keyfile);
+ return ret;
+}
+
+/**
* gcm_client_get_property:
**/
static void
diff --git a/src/gcm-client.h b/src/gcm-client.h
index 7dc181b..4e28c23 100644
--- a/src/gcm-client.h
+++ b/src/gcm-client.h
@@ -63,6 +63,9 @@ GcmClient *gcm_client_new (void);
GcmDevice *gcm_client_get_device_by_id (GcmClient *client,
const gchar *id);
+gboolean gcm_client_delete_device (GcmClient *client,
+ GcmDevice *device,
+ GError **error);
gboolean gcm_client_add_connected (GcmClient *client,
GError **error);
gboolean gcm_client_add_saved (GcmClient *client,
diff --git a/src/gcm-prefs.c b/src/gcm-prefs.c
index eadb511..91e7058 100644
--- a/src/gcm-prefs.c
+++ b/src/gcm-prefs.c
@@ -529,6 +529,23 @@ out:
}
/**
+ * gcm_prefs_delete_cb:
+ **/
+static void
+gcm_prefs_delete_cb (GtkWidget *widget, gpointer data)
+{
+ gboolean ret;
+ GError *error = NULL;
+
+ /* try to delete device */
+ ret = gcm_client_delete_device (gcm_client, current_device, &error);
+ if (!ret) {
+ egg_warning ("failed to delete: %s", error->message);
+ g_error_free (error);
+ }
+}
+
+/**
* gcm_prefs_reset_cb:
**/
static void
@@ -776,6 +793,7 @@ gcm_prefs_devices_treeview_clicked_cb (GtkTreeSelection *selection, gboolean dat
gfloat localgamma;
gfloat brightness;
gfloat contrast;
+ gboolean connected;
gchar *filename;
guint i;
gchar *id;
@@ -825,6 +843,7 @@ gcm_prefs_devices_treeview_clicked_cb (GtkTreeSelection *selection, gboolean dat
"gamma", &localgamma,
"brightness", &brightness,
"contrast", &contrast,
+ "connected", &connected,
NULL);
/* set adjustments */
@@ -872,6 +891,10 @@ gcm_prefs_devices_treeview_clicked_cb (GtkTreeSelection *selection, gboolean dat
widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_profile"));
gtk_widget_set_sensitive (widget, TRUE);
+ /* can we delete this device? */
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_delete"));
+ gtk_widget_set_sensitive (widget, !connected);
+
/* can this device calibrate */
gcm_prefs_set_calibrate_button_sensitivity ();
@@ -1046,14 +1069,12 @@ gcm_prefs_profile_combo_changed_cb (GtkWidget *widget, gpointer data)
GcmProfileType profile_type = GCM_PROFILE_TYPE_UNKNOWN;
const gchar *profile_type_text;
- active = gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
- egg_debug ("now %i", active);
-
/* no devices */
if (current_device == NULL)
return;
/* no selection */
+ active = gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
if (active == -1)
return;
@@ -1403,10 +1424,34 @@ gcm_prefs_added_cb (GcmClient *gcm_client_, GcmDevice *gcm_device, gpointer user
static void
gcm_prefs_removed_cb (GcmClient *gcm_client_, GcmDevice *gcm_device, gpointer user_data)
{
+ gboolean connected;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ GtkWidget *widget;
+ gboolean ret;
+
+ /* remove from the UI */
gcm_prefs_remove_device (gcm_device);
+ /* get device properties */
+ g_object_get (gcm_device,
+ "connected", &connected,
+ NULL);
+
/* ensure this device is re-added if it's been saved */
- gcm_client_add_saved (gcm_client, NULL);
+ if (connected)
+ gcm_client_add_saved (gcm_client, NULL);
+
+ /* select the first device */
+ ret = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store_devices), &iter);
+ if (!ret)
+ return;
+
+ /* click it */
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_devices"));
+ gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (list_store_devices));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+ gtk_tree_selection_select_iter (selection, &iter);
}
/**
@@ -1419,8 +1464,6 @@ gcm_prefs_startup_idle_cb (gpointer user_data)
gboolean ret;
GError *error = NULL;
- egg_warning ("idle add");
-
/* add profiles we can find */
widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_profile"));
gcm_prefs_add_profiles (widget);
@@ -1611,6 +1654,9 @@ main (int argc, char **argv)
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_reset"));
g_signal_connect (widget, "clicked",
G_CALLBACK (gcm_prefs_reset_cb), NULL);
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_delete"));
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gcm_prefs_delete_cb), NULL);
gtk_widget_set_sensitive (widget, FALSE);
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_calibrate"));
g_signal_connect (widget, "clicked",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]