aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-presence-chooser.c
diff options
context:
space:
mode:
authorDavyd Madeley <davyd@madeley.id.au>2009-04-11 00:53:53 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2009-04-11 00:53:53 +0800
commit12b5423be5e03a60c0abe6a34de85ea70db8a796 (patch)
tree116ef2a263d495a989f8b65c8e1fb1669b06b69c /libempathy-gtk/empathy-presence-chooser.c
parent5379a90b9376fb816413c7fa036d4fdde8072e62 (diff)
downloadgsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.tar
gsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.tar.gz
gsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.tar.bz2
gsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.tar.lz
gsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.tar.xz
gsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.tar.zst
gsoc2013-empathy-12b5423be5e03a60c0abe6a34de85ea70db8a796.zip
Add Custom Messages dialog back in (this dialog needs some work ASAP)
From: Davyd Madeley <davyd@madeley.id.au> svn path=/trunk/; revision=2780
Diffstat (limited to 'libempathy-gtk/empathy-presence-chooser.c')
-rw-r--r--libempathy-gtk/empathy-presence-chooser.c65
1 files changed, 60 insertions, 5 deletions
diff --git a/libempathy-gtk/empathy-presence-chooser.c b/libempathy-gtk/empathy-presence-chooser.c
index 80ebe1fac..32f32acb0 100644
--- a/libempathy-gtk/empathy-presence-chooser.c
+++ b/libempathy-gtk/empathy-presence-chooser.c
@@ -136,6 +136,8 @@ enum
ENTRY_TYPE_BUILTIN,
ENTRY_TYPE_SAVED,
ENTRY_TYPE_CUSTOM,
+ ENTRY_TYPE_SEPARATOR,
+ ENTRY_TYPE_EDIT_CUSTOM,
};
static GtkTreeModel *
@@ -192,6 +194,20 @@ create_model (void)
}
}
+
+ /* add a separator */
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_TYPE, ENTRY_TYPE_SEPARATOR,
+ -1);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_STATE_ICON_NAME, GTK_STOCK_EDIT,
+ COL_STATUS_TEXT, "",
+ COL_DISPLAY_MARKUP, "Edit Custom Messages...",
+ COL_TYPE, ENTRY_TYPE_EDIT_CUSTOM,
+ -1);
return GTK_TREE_MODEL (store);
}
@@ -353,14 +369,36 @@ changed_cb (GtkComboBox *self, gpointer user_data)
-1);
GtkWidget *entry = gtk_bin_get_child (GTK_BIN (self));
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- icon_name);
- if (type == ENTRY_TYPE_CUSTOM)
+ if (type == ENTRY_TYPE_EDIT_CUSTOM)
+ {
+ /* recover the status that was unset because COL_STATUS_TEXT
+ * is "". Unfortunately if you try and set COL_STATUS_TEXT to
+ * NULL, it generates a g_critical. I wonder if there is a
+ * better way around this. */
+ const char *status = empathy_idle_get_status (priv->idle);
+ priv->block_set_editing++;
+ gtk_entry_set_text (GTK_ENTRY (entry), status);
+ priv->block_set_editing--;
+
+ /* attempt to get the toplevel for this widget */
+ GtkWidget *window = gtk_widget_get_toplevel (GTK_WIDGET (self));
+ if (!GTK_WIDGET_TOPLEVEL (window) || !GTK_IS_WINDOW (window))
+ {
+ window = NULL;
+ }
+
+ presence_chooser_dialog_show (GTK_WINDOW (window));
+ }
+ else if (type == ENTRY_TYPE_CUSTOM)
{
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
+ GTK_ENTRY_ICON_PRIMARY,
+ icon_name);
+
/* grab the focus */
gtk_widget_grab_focus (entry);
+
set_status_editing (EMPATHY_PRESENCE_CHOOSER (self), TRUE);
}
else
@@ -382,6 +420,19 @@ changed_cb (GtkComboBox *self, gpointer user_data)
g_free (icon_name);
}
+static gboolean
+combo_row_separator_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ int type;
+ gtk_tree_model_get (model, iter,
+ COL_TYPE, &type,
+ -1);
+
+ return (type == ENTRY_TYPE_SEPARATOR);
+}
+
static void
empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
{
@@ -393,7 +444,11 @@ empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
GtkTreeModel *model = create_model ();
gtk_combo_box_set_model (GTK_COMBO_BOX (chooser), GTK_TREE_MODEL (model));
- gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (chooser), COL_STATUS_TEXT);
+ gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (chooser),
+ COL_STATUS_TEXT);
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (chooser),
+ combo_row_separator_func,
+ NULL, NULL);
GtkWidget *entry = gtk_bin_get_child (GTK_BIN (chooser));
gtk_entry_set_icon_activatable (GTK_ENTRY (entry),