Author: nick
Date: 2008-07-18 14:48:17 +0000 (Fri, 18 Jul 2008)
New Revision: 27340

Modified:
   xfce4-settings/trunk/ChangeLog
   xfce4-settings/trunk/dialogs/mouse-settings/main.c
Log:
        * dialogs/mouse-settings/main.c: Allow editing the display name
          of the device in the dialog. This way users can set usable names
          for devices that are plugged.

Modified: xfce4-settings/trunk/ChangeLog
===================================================================
--- xfce4-settings/trunk/ChangeLog      2008-07-18 13:53:06 UTC (rev 27339)
+++ xfce4-settings/trunk/ChangeLog      2008-07-18 14:48:17 UTC (rev 27340)
@@ -1,5 +1,11 @@
 2008-07-18     Nick Schermer <[EMAIL PROTECTED]>
 
+       * dialogs/mouse-settings/main.c: Allow editing the display name
+         of the device in the dialog. This way users can set usable names
+         for devices that are plugged.
+
+2008-07-18     Nick Schermer <[EMAIL PROTECTED]>
+
        * dialogs/mouse-settings/main.c: Change option values string.
 
 2008-07-18     Nick Schermer <[EMAIL PROTECTED]>

Modified: xfce4-settings/trunk/dialogs/mouse-settings/main.c
===================================================================
--- xfce4-settings/trunk/dialogs/mouse-settings/main.c  2008-07-18 13:53:06 UTC 
(rev 27339)
+++ xfce4-settings/trunk/dialogs/mouse-settings/main.c  2008-07-18 14:48:17 UTC 
(rev 27340)
@@ -746,6 +746,55 @@
 
 
 
+static void
+mouse_settings_device_name_edited (GtkCellRendererText *renderer,
+                                   gchar               *path,
+                                   gchar               *new_name,
+                                   GladeXML            *gxml)
+{
+    GtkWidget        *treeview;
+    GtkTreeSelection *selection;
+    gboolean          has_selection;
+    GtkTreeModel     *model;
+    GtkTreeIter       iter;
+    gchar            *internal_name;
+    gchar            *property_name;
+    gchar            *new_name_escaped;
+
+    /* check if the new name is valid */
+    if (new_name == NULL || *new_name == '\0')
+        return;
+
+    /* get the treeview's selection */
+    treeview = glade_xml_get_widget (gxml, "mouse-devices-treeview");
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+
+    /* get the selected item */
+    has_selection = gtk_tree_selection_get_selected (selection, &model, &iter);
+    if (G_LIKELY (has_selection))
+    {
+        /* get the internal device name */
+        gtk_tree_model_get (model, &iter, COLUMN_DEVICE_NAME, &internal_name, 
-1);
+
+        /* store the new name in the channel */
+        property_name = g_strdup_printf ("/%s", internal_name);
+        xfconf_channel_set_string (pointers_channel, property_name, new_name);
+
+        /* escape before adding in the store */
+        new_name_escaped = g_markup_escape_text (new_name, -1);
+
+        /* set the new device name in the store */
+        gtk_list_store_set (GTK_LIST_STORE (model), &iter, 
COLUMN_DEVICE_DISPLAY_NAME, new_name_escaped, -1);
+
+        /* cleanup */
+        g_free (new_name_escaped);
+        g_free (property_name);
+        g_free (internal_name);
+    }
+}
+
+
+
 static gchar *
 mouse_settings_device_xfconf_name (const gchar *name)
 {
@@ -795,6 +844,8 @@
     GtkCellRenderer   *renderer;
     GtkTreeSelection  *selection;
     gchar             *device_name;
+    gchar             *property_name;
+    gchar             *property_value;
 
     /* lock */
     locked++;
@@ -852,16 +903,28 @@
             if (G_UNLIKELY (num_buttons <= 0))
                 continue;
 
-            /* get the device name, escaped */
-            display_name = g_markup_escape_text (device_info->name, -1);
-
-            /* get rid of usb crap in the name */
-            if ((usb = strstr (display_name, "-usb")) != NULL)
-                *usb = '\0';
-
             /* create a valid xfconf device name */
             device_name = mouse_settings_device_xfconf_name 
(device_info->name);
 
+            /* check if there is a custom name set by the user */
+            property_name = g_strdup_printf ("/%s", device_name);
+            if (xfconf_channel_has_property (pointers_channel, property_name))
+            {
+                /* get the name from the config file, escape it */
+                property_value = xfconf_channel_get_string (pointers_channel, 
property_name, NULL);
+                display_name = g_markup_escape_text (property_value, -1);
+                g_free (property_value);
+            }
+            else
+            {
+                /* get the device name, escaped */
+                display_name = g_markup_escape_text (device_info->name, -1);
+
+                /* get rid of usb crap in the name */
+                if ((usb = strstr (display_name, "-usb")) != NULL)
+                    *usb = '\0';
+            }
+
             /* insert in the store */
             gtk_list_store_insert_with_values (store, &iter, i,
                                                COLUMN_DEVICE_ICON, 
"input-mouse",
@@ -870,8 +933,9 @@
                                                COLUMN_DEVICE_XID, 
device_info->id,
                                                COLUMN_DEVICE_NBUTTONS, 
num_buttons, -1);
 
-            /* check if we should select this device */
-            if (opt_device_name && strcmp (opt_device_name, device_info->name) 
== 0)
+            /* check if we should select this device (for user convience also 
the display name) */
+            if (opt_device_name && (strcmp (opt_device_name, 
device_info->name) == 0
+                || (display_name && strcmp (opt_device_name, display_name) == 
0)))
             {
                 path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter);
                 g_free (opt_device_name);
@@ -879,6 +943,7 @@
             }
 
             /* cleanup */
+            g_free (property_name);
             g_free (device_name);
             g_free (display_name);
         }
@@ -907,7 +972,8 @@
         /* text renderer */
         renderer = gtk_cell_renderer_text_new ();
         column = gtk_tree_view_column_new_with_attributes ("", renderer, 
"markup", COLUMN_DEVICE_DISPLAY_NAME, NULL);
-        g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, 
NULL);
+        g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, 
"editable", TRUE, NULL);
+        g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK 
(mouse_settings_device_name_edited), gxml);
         gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
 
         /* setup tree selection */

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to