static void treeview_cursor_changed (GtkTreeView *view, PlumaDocumentsPanel *panel) { GtkTreeIter iter; GtkTreeSelection *selection; gpointer tab; selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (panel->priv->treeview)); if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { gtk_tree_model_get (panel->priv->model, &iter, TAB_COLUMN, &tab, -1); if (pluma_window_get_active_tab (panel->priv->window) != tab) { pluma_window_set_active_tab (panel->priv->window, PLUMA_TAB (tab)); } } }
static void pluma_notebook_switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data) { PlumaNotebook *nb = PLUMA_NOTEBOOK (notebook); GtkWidget *child; PlumaView *view; child = gtk_notebook_get_nth_page (notebook, page_num); /* Remove the old page, we dont want to grow unnecessarily * the list */ if (nb->priv->focused_pages) { nb->priv->focused_pages = g_list_remove (nb->priv->focused_pages, child); } nb->priv->focused_pages = g_list_append (nb->priv->focused_pages, child); /* give focus to the view */ view = pluma_tab_get_view (PLUMA_TAB (child)); gtk_widget_grab_focus (GTK_WIDGET (view)); }
static gboolean treeview_query_tooltip (GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer data) { GtkTreeIter iter; GtkTreeView *tree_view = GTK_TREE_VIEW (widget); GtkTreeModel *model = gtk_tree_view_get_model (tree_view); GtkTreePath *path = NULL; gpointer *tab; gchar *tip; if (keyboard_tip) { gtk_tree_view_get_cursor (tree_view, &path, NULL); if (path == NULL) { return FALSE; } } else { gint bin_x, bin_y; gtk_tree_view_convert_widget_to_bin_window_coords (tree_view, x, y, &bin_x, &bin_y); if (!gtk_tree_view_get_path_at_pos (tree_view, bin_x, bin_y, &path, NULL, NULL, NULL)) { return FALSE; } } gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, TAB_COLUMN, &tab, -1); tip = _pluma_tab_get_tooltips (PLUMA_TAB (tab)); gtk_tooltip_set_markup (tooltip, tip); g_free (tip); gtk_tree_path_free (path); return TRUE; }
/* This function is only called during dnd, we don't need to emit TABS_REORDERED * here, instead we do it on drag_stop */ static void move_current_tab (PlumaNotebook *notebook, gint dest_position) { gint cur_page_num; cur_page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook)); if (dest_position != cur_page_num) { GtkWidget *cur_tab; cur_tab = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), cur_page_num); pluma_notebook_reorder_tab (PLUMA_NOTEBOOK (notebook), PLUMA_TAB (cur_tab), dest_position); } }
static void move_current_tab_to_another_notebook (PlumaNotebook *src, PlumaNotebook *dest, GdkEventMotion *event, gint dest_position) { PlumaTab *tab; gint cur_page; /* This is getting tricky, the tab was dragged in a notebook * in another window of the same app, we move the tab * to that new notebook, and let this notebook handle the * drag */ g_return_if_fail (PLUMA_IS_NOTEBOOK (dest)); g_return_if_fail (dest != src); cur_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (src)); tab = PLUMA_TAB (gtk_notebook_get_nth_page (GTK_NOTEBOOK (src), cur_page)); /* stop drag in origin window */ /* ungrab the pointer if it's grabbed */ drag_stop (src); if (gdk_pointer_is_grabbed ()) { gdk_pointer_ungrab (event->time); } gtk_grab_remove (GTK_WIDGET (src)); pluma_notebook_move_tab (src, dest, tab, dest_position); /* start drag handling in dest notebook */ dest->priv->motion_notify_handler_id = g_signal_connect (G_OBJECT (dest), "motion-notify-event", G_CALLBACK (motion_notify_cb), NULL); drag_start (dest, event->time); }
static void pluma_notebook_destroy (GtkObject *object) { PlumaNotebook *notebook = PLUMA_NOTEBOOK (object); if (!notebook->priv->destroy_has_run) { GList *children, *l; children = gtk_container_get_children (GTK_CONTAINER (notebook)); for (l = children; l != NULL; l = g_list_next (l)) { pluma_notebook_remove_tab (notebook, PLUMA_TAB (l->data)); } g_list_free (children); notebook->priv->destroy_has_run = TRUE; } GTK_OBJECT_CLASS (pluma_notebook_parent_class)->destroy (object); }
static void refresh_list (PlumaDocumentsPanel *panel) { /* TODO: refresh the list only if the panel is visible */ GList *tabs; GList *l; GtkWidget *nb; GtkListStore *list_store; PlumaTab *active_tab; /* g_debug ("refresh_list"); */ list_store = GTK_LIST_STORE (panel->priv->model); gtk_list_store_clear (list_store); active_tab = pluma_window_get_active_tab (panel->priv->window); nb = _pluma_window_get_notebook (panel->priv->window); tabs = gtk_container_get_children (GTK_CONTAINER (nb)); l = tabs; panel->priv->adding_tab = TRUE; while (l != NULL) { GdkPixbuf *pixbuf; gchar *name; GtkTreeIter iter; name = tab_get_name (PLUMA_TAB (l->data)); pixbuf = _pluma_tab_get_icon (PLUMA_TAB (l->data)); /* Add a new row to the model */ gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, PIXBUF_COLUMN, pixbuf, NAME_COLUMN, name, TAB_COLUMN, l->data, -1); g_free (name); if (pixbuf != NULL) g_object_unref (pixbuf); if (l->data == active_tab) { GtkTreeSelection *selection; selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (panel->priv->treeview)); gtk_tree_selection_select_iter (selection, &iter); } l = g_list_next (l); } panel->priv->adding_tab = FALSE; g_list_free (tabs); }