]> git.0d.be Git - empathy.git/commitdiff
Set the chooser in "editing mode" when you start editing it
authorDavyd Madeley <davyd@madeley.id.au>
Fri, 10 Apr 2009 16:53:13 +0000 (16:53 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 10 Apr 2009 16:53:13 +0000 (16:53 +0000)
From: Davyd Madeley <davyd@madeley.id.au>

svn path=/trunk/; revision=2769

libempathy-gtk/empathy-presence-chooser.c

index 8ca4770de5db3c21411a272ef878b03afd0f52c8..d58be5171d4c0431e2326faded8b31849f35d622 100644 (file)
@@ -275,9 +275,29 @@ set_status_editing (EmpathyPresenceChooser *self, gboolean editing)
                gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
                                GTK_ENTRY_ICON_PRIMARY,
                                TRUE);
+
+               // FIXME - move the focus somewhere
        }
 }
 
+static void
+entry_icon_release_cb (EmpathyPresenceChooser  *self,
+                      GtkEntryIconPosition      icon_pos,
+                      GdkEvent         *event,
+                      GtkEntry         *entry)
+{
+       set_status_editing (self, FALSE);
+}
+
+static void
+entry_activate_cb (EmpathyPresenceChooser      *self,
+                  GtkEntry                     *entry)
+{
+       g_print ("ACTIVATE! (form of a dragon)\n");
+       
+       set_status_editing (self, FALSE);
+}
+
 static void
 changed_cb (GtkComboBox *self, gpointer user_data)
 {
@@ -290,7 +310,8 @@ changed_cb (GtkComboBox *self, gpointer user_data)
        GtkTreeModel *model = gtk_combo_box_get_model (self);
        if (!gtk_combo_box_get_active_iter (self, &iter))
        {
-               g_print ("not an iter!\n");
+               /* the combo is being edited to a custom entry */
+               set_status_editing (self, TRUE);
                return;
        }
 
@@ -310,6 +331,12 @@ changed_cb (GtkComboBox *self, gpointer user_data)
                gtk_widget_grab_focus (entry);
                set_status_editing (self, TRUE);
        }
+       else
+       {
+               /* just in case we were setting a new status when
+                * things were changed */
+               set_status_editing (self, FALSE);
+       }
 
        g_free (icon_name);
 }
@@ -333,6 +360,12 @@ empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
        GtkWidget *entry = gtk_bin_get_child (GTK_BIN (chooser));
        gtk_entry_set_icon_activatable (GTK_ENTRY (entry),
                        GTK_ENTRY_ICON_PRIMARY, FALSE);
+       g_signal_connect_object (entry, "icon-release",
+                       G_CALLBACK (entry_icon_release_cb), chooser,
+                       G_CONNECT_SWAPPED);
+       g_signal_connect_object (entry, "activate",
+                       G_CALLBACK (entry_activate_cb), chooser,
+                       G_CONNECT_SWAPPED);
 
        GtkCellRenderer *renderer;
        gtk_cell_layout_clear (GTK_CELL_LAYOUT (chooser));