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 fill_store (EmpathyIrcNetworkChooserDialog *self) { EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self); GSList *networks, *l; networks = empathy_irc_network_manager_get_networks ( priv->network_manager); for (l = networks; l != NULL; l = g_slist_next (l)) { EmpathyIrcNetwork *network = l->data; GtkTreeIter iter; gtk_list_store_insert_with_values (priv->store, &iter, -1, COL_NETWORK_OBJ, network, COL_NETWORK_NAME, empathy_irc_network_get_name (network), -1); if (network == priv->network) { GtkTreeIter filter_iter = iter_to_filter_iter (self, &iter); select_iter (self, &filter_iter, FALSE); } g_object_unref (network); } g_slist_free (networks); }
static gchar * dup_network_service (EmpathyIrcNetwork *network) { /* Account.Service has to be a lower case alphanumeric string which may * also contain '-' but not start with it. */ #define VALID G_CSET_a_2_z G_CSET_DIGITS "-" gchar *service, *tmp; service = g_strdup (empathy_irc_network_get_name (network)); service = g_strstrip (service); if (tp_str_empty (service)) { g_free (service); return NULL; } tmp = service; service = g_ascii_strdown (service, -1); g_free (tmp); service = g_strcanon (service, VALID, '-'); if (service[0] == '-') { tmp = service; service = g_strdup (service + 1); g_free (tmp); } return service; }
static void set_label (EmpathyIrcNetworkChooser *self) { EmpathyIrcNetworkChooserPriv *priv = GET_PRIV (self); g_assert (priv->network != NULL); gtk_button_set_label (GTK_BUTTON (self), empathy_irc_network_get_name (priv->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 gboolean filter_visible_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) { EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (user_data); EmpathyIrcNetwork *network; gboolean visible; gtk_tree_model_get (model, iter, COL_NETWORK_OBJ, &network, -1); visible = empathy_live_search_match (EMPATHY_LIVE_SEARCH (priv->search), empathy_irc_network_get_name (network)); g_object_unref (network); return visible; }
static void add_network (EmpathyIrcNetworkChooserDialog *self) { EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self); EmpathyIrcNetwork *network; GtkTreeIter iter, filter_iter; gtk_widget_hide (priv->search); network = empathy_irc_network_new (_("New Network")); empathy_irc_network_manager_add (priv->network_manager, 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); filter_iter = iter_to_filter_iter (self, &iter); select_iter (self, &filter_iter, TRUE); display_irc_network_dialog (self, network); g_object_unref (network); }