Synchronize the two objects with the help of EmpathyConnectionManagers,
so that we can get a consistent list of the CMs when using the chooser.
#include <gtk/gtk.h>
#include <libempathy/empathy-utils.h>
#include <gtk/gtk.h>
#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-connection-managers.h>
#include "empathy-protocol-chooser.h"
#include "empathy-ui-utils.h"
#include "empathy-protocol-chooser.h"
#include "empathy-ui-utils.h"
{
GtkListStore *store;
gboolean dispose_run;
{
GtkListStore *store;
gboolean dispose_run;
+ EmpathyConnectionManagers *cms;
} EmpathyProtocolChooserPriv;
} EmpathyProtocolChooserPriv;
-protocol_choosers_cms_listed (TpConnectionManager * const *cms,
- gsize n_cms,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
+protocol_chooser_add_cms_list (EmpathyProtocolChooser *protocol_chooser,
+ GList *cms)
- TpConnectionManager * const *iter;
- if (error !=NULL)
- {
- DEBUG ("Failed to get connection managers: %s", error->message);
- return;
- }
+ for (l = cms; l != NULL; l = l->next)
+ protocol_choosers_add_cm (protocol_chooser, l->data);
- for (iter = cms ; iter != NULL && *iter != NULL; iter++)
- protocol_choosers_add_cm (EMPATHY_PROTOCOL_CHOOSER (weak_object),
- *iter);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (protocol_chooser), 0);
+}
- gtk_combo_box_set_active (GTK_COMBO_BOX (weak_object), 0);
+static void
+protocol_chooser_cms_ready_cb (EmpathyConnectionManagers *cms,
+ GParamSpec *pspec,
+ EmpathyProtocolChooser *protocol_chooser)
+{
+ if (empathy_connection_managers_is_ready (cms))
+ protocol_chooser_add_cms_list
+ (protocol_chooser, empathy_connection_managers_get_cms (cms));
{
EmpathyProtocolChooser *protocol_chooser;
EmpathyProtocolChooserPriv *priv;
{
EmpathyProtocolChooser *protocol_chooser;
EmpathyProtocolChooserPriv *priv;
GtkCellRenderer *renderer;
GtkCellRenderer *renderer;
priv = GET_PRIV (object);
protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object);
priv = GET_PRIV (object);
protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object);
"text", COL_LABEL,
NULL);
"text", COL_LABEL,
NULL);
- dbus = tp_dbus_daemon_dup (NULL);
- tp_list_connection_managers (dbus, protocol_choosers_cms_listed,
- NULL, NULL, object);
- g_object_unref (dbus);
-
/* Set the protocol sort function */
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->store),
COL_PROTOCOL,
/* Set the protocol sort function */
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->store),
COL_PROTOCOL,
COL_PROTOCOL,
GTK_SORT_ASCENDING);
COL_PROTOCOL,
GTK_SORT_ASCENDING);
+ if (empathy_connection_managers_is_ready (priv->cms))
+ protocol_chooser_add_cms_list (protocol_chooser,
+ empathy_connection_managers_get_cms (priv->cms));
+ else
+ g_signal_connect (priv->cms, "notify::ready",
+ G_CALLBACK (protocol_chooser_cms_ready_cb), protocol_chooser);
+
if (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->constructed)
G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->constructed (object);
}
if (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->constructed)
G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->constructed (object);
}
EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserPriv);
priv->dispose_run = FALSE;
EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserPriv);
priv->dispose_run = FALSE;
+ priv->cms = empathy_connection_managers_dup_singleton ();
protocol_chooser->priv = priv;
}
protocol_chooser->priv = priv;
}
+ if (priv->cms)
+ {
+ g_object_unref (priv->cms);
+ priv->cms = NULL;
+ }
+
(G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->dispose) (object);
}
(G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->dispose) (object);
}
g_type_class_add_private (object_class, sizeof (EmpathyProtocolChooserPriv));
}
g_type_class_add_private (object_class, sizeof (EmpathyProtocolChooserPriv));
}
/**
* empathy_protocol_chooser_get_selected_protocol:
* @protocol_chooser: an #EmpathyProtocolChooser
/**
* empathy_protocol_chooser_get_selected_protocol:
* @protocol_chooser: an #EmpathyProtocolChooser
-/**
- * empathy_protocol_chooser_n_protocols:
- * @protocol_chooser: an #EmpathyProtocolChooser
- *
- * Returns the number of protocols in @protocol_chooser.
- *
- * Return value: the number of protocols in @protocol_chooser
- */
-gint
-empathy_protocol_chooser_n_protocols (EmpathyProtocolChooser *protocol_chooser)
-{
- EmpathyProtocolChooserPriv *priv = GET_PRIV (protocol_chooser);
-
- g_return_val_if_fail (EMPATHY_IS_PROTOCOL_CHOOSER (protocol_chooser), 0);
-
- return gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store), NULL);
-}
-
/**
* empathy_protocol_chooser_new:
*
/**
* empathy_protocol_chooser_new:
*
- * Creates a new #EmpathyProtocolChooser widget.
+ * Triggers the creation of a new #EmpathyProtocolChooser.
*
* Return value: a new #EmpathyProtocolChooser widget
*/
*
* Return value: a new #EmpathyProtocolChooser widget
*/
GtkWidget *
empathy_protocol_chooser_new (void)
{
GtkWidget *
empathy_protocol_chooser_new (void)
{
GtkComboBoxClass parent_class;
};
GtkComboBoxClass parent_class;
};
+typedef void (* EmpathyProtocolChooserReadyCb) (GtkWidget *chooser,
+ GError *error,
+ gpointer user_data);
+
GType empathy_protocol_chooser_get_type (void) G_GNUC_CONST;
GtkWidget * empathy_protocol_chooser_new (void);
TpConnectionManager *empathy_protocol_chooser_dup_selected (
EmpathyProtocolChooser *protocol_chooser,
TpConnectionManagerProtocol **protocol);
GType empathy_protocol_chooser_get_type (void) G_GNUC_CONST;
GtkWidget * empathy_protocol_chooser_new (void);
TpConnectionManager *empathy_protocol_chooser_dup_selected (
EmpathyProtocolChooser *protocol_chooser,
TpConnectionManagerProtocol **protocol);
-gint empathy_protocol_chooser_n_protocols (
- EmpathyProtocolChooser *protocol_chooser);
G_END_DECLS
#endif /* __EMPATHY_PROTOCOL_CHOOSER_H__ */
G_END_DECLS
#endif /* __EMPATHY_PROTOCOL_CHOOSER_H__ */
main (int argc,
char **argv)
{
main (int argc,
char **argv)
{
- GtkWidget *window;
- GtkWidget *chooser;
gtk_init (&argc, &argv);
empathy_gtk_init ();
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_init (&argc, &argv);
empathy_gtk_init ();
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- chooser = empathy_protocol_chooser_new ();
- gtk_container_add (GTK_CONTAINER (window), chooser);
+ c = empathy_protocol_chooser_new ();
+
+ gtk_container_add (GTK_CONTAINER (window), c);
/* gtk_window_set_default_size (GTK_WINDOW (window), 150, -1);*/
gtk_widget_show_all (window);
/* gtk_window_set_default_size (GTK_WINDOW (window), 150, -1);*/
gtk_widget_show_all (window);