void userlist_select (session *sess, char *name) { GtkTreeIter iter; GtkTreeView *treeview = GTK_TREE_VIEW (sess->gui->user_tree); GtkTreeModel *model = gtk_tree_view_get_model (treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview); struct User *row_user; if (gtk_tree_model_get_iter_first (model, &iter)) { do { gtk_tree_model_get (model, &iter, COL_USER, &row_user, -1); if (sess->server->p_cmp (row_user->nick, name) == 0) { if (gtk_tree_selection_iter_is_selected (selection, &iter)) gtk_tree_selection_unselect_iter (selection, &iter); else gtk_tree_selection_select_iter (selection, &iter); /* and make sure it's visible */ scroll_to_iter (&iter, treeview, model); return; } } while (gtk_tree_model_iter_next (model, &iter)); } }
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); }
/* Take a filter iterator as argument */ static void select_iter (EmpathyIrcNetworkChooserDialog *self, GtkTreeIter *filter_iter, gboolean emulate_changed) { EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self); GtkTreeSelection *selection; GtkTreePath *path; /* Select the network */ selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (priv->treeview)); gtk_tree_selection_select_iter (selection, filter_iter); path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->filter), filter_iter); if (path != NULL) { gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->treeview), path, NULL, FALSE); gtk_tree_path_free (path); } /* Scroll to the selected network */ scroll_to_iter (self, filter_iter); if (emulate_changed) { /* gtk_tree_selection_select_iter doesn't fire the 'cursor-changed' signal * so we call the callback manually. */ treeview_changed_cb (GTK_TREE_VIEW (priv->treeview), self); } }
static void search_text_notify_cb (TpawLiveSearch *search, GParamSpec *pspec, TpawIrcNetworkChooserDialog *self) { GtkTreeIter filter_iter; gboolean sensitive = FALSE; gtk_tree_model_filter_refilter (self->priv->filter); /* Is there at least one network in the view ? */ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->priv->filter), &filter_iter)) { const gchar *text; text = tpaw_live_search_get_text ( TPAW_LIVE_SEARCH (self->priv->search)); if (!TPAW_STR_EMPTY (text)) { /* We are doing a search, select the first matching network */ select_iter (self, &filter_iter, TRUE); } else { /* Search has been cancelled. Scroll to the selected network */ GtkTreeSelection *selection; selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (self->priv->treeview)); if (gtk_tree_selection_get_selected (selection, NULL, &filter_iter)) scroll_to_iter (self, &filter_iter); } sensitive = TRUE; } gtk_widget_set_sensitive (self->priv->select_button, sensitive); }
void fe_uselect (session * sess, char *word[], int do_clear, int scroll_to) { int thisname; char *name; GtkTreeIter iter; GtkTreeView *treeview = GTK_TREE_VIEW (sess->gui->user_tree); GtkTreeModel *model = gtk_tree_view_get_model (treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview); struct User *row_user; if (gtk_tree_model_get_iter_first (model, &iter)) { if (do_clear) gtk_tree_selection_unselect_all (selection); do { if (*word[0]) { gtk_tree_model_get (model, &iter, COL_USER, &row_user, -1); thisname = 0; while (*(name = word[thisname++])) { if (sess->server->p_cmp (row_user->nick, name) == 0) { gtk_tree_selection_select_iter (selection, &iter); if (scroll_to) scroll_to_iter (&iter, treeview, model); break; } } } } while (gtk_tree_model_iter_next (model, &iter)); } }