]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-irc-network-chooser-dialog.c
local-xmpp-assistant-widget: increase row-spacing
[empathy.git] / libempathy-gtk / empathy-irc-network-chooser-dialog.c
index a42c21f1931551897d53d2a95595d538207349e7..755eb584e1701b8e84312985b34840207d00ea9c 100644 (file)
@@ -47,6 +47,10 @@ enum {
     PROP_NETWORK
 };
 
+enum {
+       RESPONSE_RESET = 0
+};
+
 typedef struct {
     EmpathyAccountSettings *settings;
     EmpathyIrcNetwork *network;
@@ -61,6 +65,7 @@ typedef struct {
     GtkWidget *select_button;
 
     gulong search_sig;
+    gulong activate_sig;
 } EmpathyIrcNetworkChooserDialogPriv;
 
 enum {
@@ -127,6 +132,9 @@ dup_selected_network (EmpathyIrcNetworkChooserDialog *self,
   GtkTreeModel *model;
 
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+  if (selection == NULL)
+    return NULL;
+
   if (!gtk_tree_selection_get_selected (selection, &model, &iter))
     return NULL;
 
@@ -152,7 +160,7 @@ treeview_changed_cb (GtkTreeView *treeview,
   network = dup_selected_network (self, NULL);
   if (network == priv->network)
     {
-      g_object_unref (network);
+      g_clear_object (&network);
       return;
     }
 
@@ -388,6 +396,32 @@ remove_network (EmpathyIrcNetworkChooserDialog *self)
   g_object_unref (network);
 }
 
+static void
+reset_networks (EmpathyIrcNetworkChooserDialog *self)
+{
+  EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
+  GSList *networks, *l;
+
+  networks = empathy_irc_network_manager_get_dropped_networks (
+      priv->network_manager);
+
+  for (l = networks; l != NULL; l = g_slist_next (l))
+    {
+      EmpathyIrcNetwork *network;
+      GtkTreeIter iter;
+
+      network = EMPATHY_IRC_NETWORK (l->data);
+      empathy_irc_network_activate (network);
+
+      gtk_list_store_insert_with_values (priv->store, &iter, -1,
+          COL_NETWORK_OBJ, network,
+          COL_NETWORK_NAME, empathy_irc_network_get_name (network),
+          -1);
+    }
+
+  g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+}
+
 static void
 dialog_response_cb (GtkDialog *dialog,
     gint response,
@@ -399,6 +433,8 @@ dialog_response_cb (GtkDialog *dialog,
     edit_network (self);
   else if (response == GTK_RESPONSE_REJECT)
     remove_network (self);
+  else if (response == RESPONSE_RESET)
+    reset_networks (self);
 }
 
 static gboolean
@@ -419,6 +455,13 @@ filter_visible_func (GtkTreeModel *model,
   return visible;
 }
 
+static void
+search_activate_cb (GtkWidget *search,
+  EmpathyIrcNetworkChooserDialog *self)
+{
+  gtk_widget_hide (search);
+  gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE);
+}
 
 static void
 search_text_notify_cb (EmpathyLiveSearch *search,
@@ -468,6 +511,7 @@ dialog_destroy_cb (GtkWidget *widget,
   EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
 
   g_signal_handler_disconnect (priv->search, priv->search_sig);
+  g_signal_handler_disconnect (priv->search, priv->activate_sig);
 }
 
 static void
@@ -532,14 +576,19 @@ empathy_irc_network_chooser_dialog_constructed (GObject *object)
   priv->search_sig = g_signal_connect (priv->search, "notify::text",
       G_CALLBACK (search_text_notify_cb), self);
 
+  priv->activate_sig = g_signal_connect (priv->search, "activate",
+      G_CALLBACK (search_activate_cb), self);
+
   /* Add buttons */
   gtk_dialog_add_buttons (dialog,
       GTK_STOCK_ADD, GTK_RESPONSE_OK,
       GTK_STOCK_EDIT, GTK_RESPONSE_APPLY,
       GTK_STOCK_REMOVE, GTK_RESPONSE_REJECT,
+      _("Reset _Networks List"), RESPONSE_RESET,
       NULL);
 
-  priv->select_button = gtk_dialog_add_button (dialog, _("Select"),
+  priv->select_button = gtk_dialog_add_button (dialog,
+      C_("verb displayed on a button to select an IRC network", "Select"),
       GTK_RESPONSE_CLOSE);
 
   fill_store (self);