From 7a89f2c971f6235c05a8f0c36d0a2f4e5f87f519 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Tue, 11 Nov 2008 14:25:43 +0000
Subject: [PATCH] 	* settings-dialogs/workspace-settings.c: Use editable
 cells instead of 	  yet another popup dialog.

(Old svn revision: 28747)
---
 ChangeLog                             |  5 +++
 settings-dialogs/workspace-settings.c | 65 +++++++++------------------
 2 files changed, 27 insertions(+), 43 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 38f7687c5..095be4e78 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-11-11  olivier
+
+	* settings-dialogs/workspace-settings.c: Use editable cells instead of 
+	  yet another popup dialog.
+
 2008-11-11  olivier
 
 	* settings-dialogs/workspace-settings.c: Revert
diff --git a/settings-dialogs/workspace-settings.c b/settings-dialogs/workspace-settings.c
index 9ae25dd4d..d36b9c1f9 100644
--- a/settings-dialogs/workspace-settings.c
+++ b/settings-dialogs/workspace-settings.c
@@ -3,6 +3,7 @@
  *  Copyright (c) 2008 Stephan Arts <stephan@xfce.org>
  *  Copyright (c) 2008 Jannis Pohlmann <jannis@xfce.org>
  *  Copyright (c) 2008 Mike Massonnet <mmassonnet@xfce.org>
+ *  Copyright (c) 2008 Olivier Fourdan <olivier@xfce.org>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -112,55 +113,32 @@ workspace_names_update_xfconf(gint workspace,
 }
 
 static void
-treeview_ws_names_row_activated(GtkTreeView *treeview,
-                                GtkTreePath *path,
-                                GtkTreeViewColumn *column,
-                                gpointer user_data)
+treeview_ws_names_cell_edited (GtkCellRendererText *cell,
+                               const gchar         *path_string,
+                               const gchar         *new_name,
+                               gpointer             user_data)
 {
-    GtkWidget *dialog = user_data, *entry;
-    GtkTreeModel *model = gtk_tree_view_get_model(treeview);
+    GtkTreeView *treeview;
+    GtkTreeModel *model;
+    GtkTreePath *path;
     GtkTreeIter iter;
+    gchar *old_name = NULL;
     gint ws_num = 1;
-    gchar *subtitle, *old_name = NULL;
-
-    if(!gtk_tree_model_get_iter(model, &iter, path))
-        return;
-
-    gtk_tree_model_get(model, &iter,
-                       COL_NUMBER, &ws_num,
-                       COL_NAME, &old_name,
-                       -1);
-
-    subtitle = g_strdup_printf(_("Change the name of workspace %d"), ws_num);
-    xfce_titled_dialog_set_subtitle(XFCE_TITLED_DIALOG(dialog), subtitle);
-    g_free(subtitle);
-
-    entry = g_object_get_data(G_OBJECT(dialog), "name-entry");
-    gtk_entry_set_text(GTK_ENTRY(entry), old_name);
-    gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
-
-    if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
-        gchar *new_name;
 
-        new_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
-        if(!*new_name) {
-            g_free(new_name);
-            new_name = g_strdup_printf(_("Workspace %d"), ws_num);
-        }
-
-        /* only update it if the name's actually different */
-        if(strcmp(old_name, new_name)) {
-            gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                               COL_NAME, new_name,
-                               -1);
-            workspace_names_update_xfconf(ws_num - 1, new_name);
-        }
+    treeview = (GtkTreeView *) user_data;
+    model = gtk_tree_view_get_model(treeview);
+    path = gtk_tree_path_new_from_string (path_string);
+    gtk_tree_model_get_iter (model, &iter, path);
 
-        g_free(new_name);
+    gtk_tree_model_get(model, &iter, COL_NUMBER, &ws_num, COL_NAME, &old_name, -1);
+    if(strcmp(old_name, new_name)) {
+        gtk_list_store_set(GTK_LIST_STORE(model), &iter, COL_NAME, new_name, -1);
+        workspace_names_update_xfconf(ws_num - 1, new_name);
     }
 
     g_free(old_name);
-    gtk_widget_hide(dialog);
+
+    gtk_tree_path_free (path);
 }
 
 
@@ -257,8 +235,6 @@ workspace_dialog_setup_names_treeview(GladeXML *gxml,
                      G_CALLBACK(gtk_true), NULL);
 
     treeview = glade_xml_get_widget(gxml, "treeview_ws_names");
-    g_signal_connect(G_OBJECT(treeview), "row-activated",
-                     G_CALLBACK(treeview_ws_names_row_activated), dialog);
 
     ls = gtk_list_store_new(N_COLS, G_TYPE_INT, G_TYPE_STRING);
 
@@ -270,6 +246,7 @@ workspace_dialog_setup_names_treeview(GladeXML *gxml,
 
     render = gtk_cell_renderer_text_new();
     g_object_set(G_OBJECT(render),
+                 "editable", TRUE,
                  "ellipsize", PANGO_ELLIPSIZE_END,
                  "ellipsize-set", TRUE,
                  NULL);
@@ -277,6 +254,8 @@ workspace_dialog_setup_names_treeview(GladeXML *gxml,
                                                    render,
                                                    "text", COL_NAME,
                                                    NULL);
+    g_signal_connect (render, "edited", G_CALLBACK (treeview_ws_names_cell_edited), treeview);
+
     gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
 
     screen = wnck_screen_get_default();
-- 
GitLab