]> git.0d.be Git - empathy.git/commitdiff
Make it possible to edit a status message by double-clicking on it
authorDavyd Madeley <davyd@madeley.id.au>
Thu, 23 Apr 2009 07:49:42 +0000 (15:49 +0800)
committerDavyd Madeley <davyd@madeley.id.au>
Thu, 23 Apr 2009 07:49:42 +0000 (15:49 +0800)
libempathy-gtk/empathy-status-preset-dialog.c

index 76ae06d40aabe7f860cd325e4024630a7f5d7883..4913e4b86b80e36d0a224d36aeeec71744919e7f 100644 (file)
@@ -185,6 +185,53 @@ status_preset_dialog_setup_add_combobox (EmpathyStatusPresetDialog *self)
        gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
 }
 
+static void
+status_preset_dialog_status_edited (GtkCellRendererText *renderer,
+                                   char *path_str,
+                                   char *new_status,
+                                   EmpathyStatusPresetDialog *self)
+{
+       EmpathyStatusPresetDialogPriv *priv = GET_PRIV (self);
+       GtkTreeModel *model;
+       GtkTreePath *path;
+       GtkTreeIter iter;
+       McPresence state;
+       char *old_status;
+       gboolean valid;
+
+       if (strlen (new_status) == 0) {
+               /* status is empty, ignore */
+               return;
+       }
+
+       model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->presets_treeview));
+       path = gtk_tree_path_new_from_string (path_str);
+       valid = gtk_tree_model_get_iter (model, &iter, path);
+       gtk_tree_path_free (path);
+
+       if (!valid) return;
+
+       gtk_tree_model_get (model, &iter,
+                       PRESETS_STORE_STATE, &state,
+                       PRESETS_STORE_STATUS, &old_status,
+                       -1);
+
+       if (!strcmp (old_status, new_status)) {
+               /* statuses are the same */
+               g_free (old_status);
+               return;
+       }
+
+       DEBUG ("EDITED STATUS (%s) -> (%s)\n", old_status, new_status);
+
+       empathy_status_presets_remove (state, old_status);
+       empathy_status_presets_set_last (state, new_status);
+
+       g_free (old_status);
+
+       status_preset_dialog_presets_update (self);
+}
+
 static void
 status_preset_dialog_setup_presets_treeview (EmpathyStatusPresetDialog *self)
 {
@@ -217,6 +264,11 @@ status_preset_dialog_setup_presets_treeview (EmpathyStatusPresetDialog *self)
        gtk_tree_view_column_pack_start (column, renderer, TRUE);
        gtk_tree_view_column_add_attribute (column, renderer,
                        "text", PRESETS_STORE_STATUS);
+       g_object_set (renderer,
+                       "editable", TRUE,
+                       NULL);
+       g_signal_connect (renderer, "edited",
+                       G_CALLBACK (status_preset_dialog_status_edited), self);
 }
 
 static void