static void
irc_network_dialog_destroy_cb (GtkWidget *widget,
    EmpathyIrcNetworkChooserDialog *self)
{
  EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
  EmpathyIrcNetwork *network;
  GtkTreeIter iter, filter_iter;

  priv->changed = TRUE;

  network = dup_selected_network (self, &iter);
  if (network == NULL)
    return;

  /* name could be changed */
  gtk_list_store_set (GTK_LIST_STORE (priv->store), &iter,
      COL_NETWORK_NAME, empathy_irc_network_get_name (network), -1);

  filter_iter = iter_to_filter_iter (self, &iter);
  scroll_to_iter (self, &filter_iter);

  gtk_widget_grab_focus (priv->treeview);

  g_object_unref (network);
}
static void
edit_network (EmpathyIrcNetworkChooserDialog *self)
{
  EmpathyIrcNetwork *network;

  network = dup_selected_network (self, NULL);
  if (network == NULL)
    return;

  display_irc_network_dialog (self, network);

  g_object_unref (network);
}
static void
remove_network (EmpathyIrcNetworkChooserDialog *self)
{
  EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
  EmpathyIrcNetwork *network;
  GtkTreeIter iter;

  network = dup_selected_network (self, &iter);
  if (network == NULL)
    return;

  /* Hide the search after picking the network to get the right one */
  gtk_widget_hide (priv->search);

  DEBUG ("Remove network %s", empathy_irc_network_get_name (network));

  /* Delete network and select next network */
  if (gtk_list_store_remove (priv->store, &iter))
    {
      GtkTreeIter filter_iter = iter_to_filter_iter (self, &iter);

      select_iter (self, &filter_iter, TRUE);
    }
  else
    {
      /* this should only happen if the last network was deleted */
      GtkTreeIter last, filter_iter;
      gint n_elements;

      n_elements = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store),
          NULL);

      if (n_elements > 0)
        {
          gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (priv->store), &last,
              NULL, (n_elements-1));
          filter_iter = iter_to_filter_iter (self, &last);

          select_iter (self, &filter_iter, TRUE);
        }
    }

  empathy_irc_network_manager_remove (priv->network_manager, network);
  gtk_widget_grab_focus (priv->treeview);

  g_object_unref (network);
}
static void
treeview_changed_cb (GtkTreeView *treeview,
    TpawIrcNetworkChooserDialog *self)
{
  TpawIrcNetwork *network;

  network = dup_selected_network (self, NULL);
  if (network == self->priv->network)
    {
      g_clear_object (&network);
      return;
    }

  tp_clear_object (&self->priv->network);
  /* Transfer the reference */
  self->priv->network = network;

  self->priv->changed = TRUE;
}
static void
treeview_changed_cb (GtkTreeView *treeview,
    EmpathyIrcNetworkChooserDialog *self)
{
  EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
  EmpathyIrcNetwork *network;

  network = dup_selected_network (self, NULL);
  if (network == priv->network)
    {
      g_object_unref (network);
      return;
    }

  tp_clear_object (&priv->network);
  /* Transfer the reference */
  priv->network = network;

  priv->changed = TRUE;
}