void SelectBooksDialog::update_gui() { // Get the upper corners of the visible area of both treeviews. // If one changed, then the other will be scrolled to the same position, // and vice versa. GdkRectangle gdk_rectangle; gtk_tree_view_get_visible_rect(GTK_TREE_VIEW(treeviewbooks), &gdk_rectangle); if (gdk_rectangle.y != treeviewbooks_previous_y) { treeviewbooks_previous_y = gdk_rectangle.y; gtk_tree_view_scroll_to_point(GTK_TREE_VIEW(treeviewportions), -1, gdk_rectangle.y); } gtk_tree_view_get_visible_rect(GTK_TREE_VIEW(treeviewportions), &gdk_rectangle); if (gdk_rectangle.y != treeviewportions_previous_y) { treeviewportions_previous_y = gdk_rectangle.y; gtk_tree_view_scroll_to_point(GTK_TREE_VIEW(treeviewbooks), -1, gdk_rectangle.y); } }
void on_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, int col) { (void)(renderer); // unused bool addedPlaceholder = gbase_list_change_record(gbase_list_singleton, new_text, atoi(path), col); if (addedPlaceholder) { gtk_tree_view_scroll_to_point(GTK_TREE_VIEW(tree_view_singleton), -1, 0); } }
static void cv_tree_focus (chan *ch) { GtkTreeView *tree = ((treeview *)ch->cv)->tree; GtkTreeModel *model = gtk_tree_view_get_model (tree); GtkTreePath *path; GtkTreeIter parent; GdkRectangle cell_rect; GdkRectangle vis_rect; gint dest_y; /* expand the parent node */ if (gtk_tree_model_iter_parent (model, &parent, &ch->iter)) { path = gtk_tree_model_get_path (model, &parent); if (path) { /*if (!gtk_tree_view_row_expanded (tree, path)) { gtk_tree_path_free (path); return; }*/ gtk_tree_view_expand_row (tree, path, FALSE); gtk_tree_path_free (path); } } path = gtk_tree_model_get_path (model, &ch->iter); if (path) { /* This full section does what * gtk_tree_view_scroll_to_cell (tree, path, NULL, TRUE, 0.5, 0.5); * does, except it only scrolls the window if the provided cell is * not visible. Basic algorithm taken from gtktreeview.c */ /* obtain information to see if the cell is visible */ gtk_tree_view_get_background_area (tree, path, NULL, &cell_rect); gtk_tree_view_get_visible_rect (tree, &vis_rect); /* The cordinates aren't offset correctly */ gtk_tree_view_widget_to_tree_coords( tree, cell_rect.x, cell_rect.y, NULL, &cell_rect.y ); /* only need to scroll if out of bounds */ if (cell_rect.y < vis_rect.y || cell_rect.y + cell_rect.height > vis_rect.y + vis_rect.height) { dest_y = cell_rect.y - ((vis_rect.height - cell_rect.height) * 0.5); if (dest_y < 0) dest_y = 0; gtk_tree_view_scroll_to_point (tree, -1, dest_y); } /* theft done, now make it focused like */ gtk_tree_view_set_cursor (tree, path, NULL, FALSE); gtk_tree_path_free (path); } }
FolderItem *foldersel_folder_sel(Folder *cur_folder, FolderSelectionType type, const gchar *default_folder, gboolean can_sel_mailbox) { selected_item = NULL; root_selectable = can_sel_mailbox; if (!window) { foldersel_create(); foldersel_init(); } foldersel_set_tree(cur_folder, type); /* select current */ if (folder_item) { FolderItemSearch fis; fis.item = folder_item; fis.path = NULL; /* find matching model entry */ gtk_tree_model_foreach (GTK_TREE_MODEL(tree_store), (GtkTreeModelForeachFunc)tree_view_folder_item_func, &fis); if (fis.path) { GtkTreeSelection *selection; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview)); gtk_tree_selection_select_iter(selection, &fis.iter); gtk_tree_view_set_cursor(GTK_TREE_VIEW(treeview), fis.path, NULL, FALSE); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(treeview), fis.path, NULL, TRUE, 0.5, 0.0); gtk_tree_path_free(fis.path); } else gtk_tree_view_scroll_to_point (GTK_TREE_VIEW(treeview), 0, 0); } else gtk_tree_view_scroll_to_point(GTK_TREE_VIEW(treeview), 0, 0); gtk_widget_grab_focus(ok_button); gtk_widget_grab_focus(treeview); gtk_window_present(GTK_WINDOW(window)); manage_window_set_transient(GTK_WINDOW(window)); gtk_window_set_modal(GTK_WINDOW(window), TRUE); cancelled = finished = FALSE; while (finished == FALSE) gtk_main_iteration(); gtk_widget_destroy(window); window = NULL; if (!cancelled && selected_item && (selected_item->path || root_selectable)) { folder_item = selected_item; return folder_item; } else return NULL; }
static VALUE rg_scroll_to_point(VALUE self, VALUE x, VALUE y) { gtk_tree_view_scroll_to_point(_SELF(self), NUM2INT(x), NUM2INT(y)); return self; }