static void gedit_notebook_switch_page (GtkNotebook *notebook, GtkWidget *page, guint page_num) { GeditNotebook *nb = GEDIT_NOTEBOOK (notebook); if (!nb->priv->ignore_focused_page_update) { gint prev_page; GtkWidget *previous_page; prev_page = gtk_notebook_get_current_page (notebook); previous_page = gtk_notebook_get_nth_page (notebook, prev_page); /* 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, previous_page); } nb->priv->focused_pages = g_list_append (nb->priv->focused_pages, previous_page); } GTK_NOTEBOOK_CLASS (gedit_notebook_parent_class)->switch_page (notebook, page, page_num); /* give focus to the tab */ gtk_widget_grab_focus (page); }
/** * srm_trainer_tab_add_to_window: * @tab: a #SrmTrainerTab instance * @window: the #GeditWindow to add a tab to * @jump_to: true if the newly added tab should be activated after its added * * Adds the tab to the supplied #GeditWindow instance's active #GeditNotebook. */ void srm_trainer_tab_add_to_window ( GeditTab * tab , GeditWindow * window , gboolean jump_to ) { GtkWidget * notebook; if (window == NULL || tab == NULL) { return; } g_return_if_fail (GEDIT_IS_WINDOW (window)); g_return_if_fail (GEDIT_IS_TAB (tab)); notebook = _gedit_window_get_notebook (window); gtk_widget_show (GTK_WIDGET (tab)); gedit_notebook_add_tab (GEDIT_NOTEBOOK (notebook), GEDIT_TAB (tab), -1, jump_to); if (!gtk_widget_get_visible (GTK_WIDGET (window))) { gtk_window_present (GTK_WINDOW (window)); } }
void gedit_multi_notebook_remove_active_notebook (GeditMultiNotebook *mnb) { g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); gedit_notebook_remove_all_tabs (GEDIT_NOTEBOOK (mnb->priv->active_notebook)); }
static void gedit_notebook_page_removed (GtkNotebook *notebook, GtkWidget *page, guint page_num) { GeditNotebook *nb = GEDIT_NOTEBOOK (notebook); gint curr; GtkWidget *tab_label; tab_label = get_tab_label (GEDIT_TAB (page)); if (tab_label != NULL) { g_signal_handlers_disconnect_by_func (tab_label, G_CALLBACK (on_tab_label_destroyed), page); g_signal_handlers_disconnect_by_func (tab_label, G_CALLBACK (close_button_clicked_cb), nb); } /* Remove the page from the focused pages list */ nb->priv->focused_pages = g_list_remove (nb->priv->focused_pages, page); curr = gtk_notebook_get_current_page (notebook); if (page_num == curr) { smart_tab_switching_on_closure (nb, GEDIT_TAB (page)); } }
void gedit_multi_notebook_add_new_notebook_with_tab (GeditMultiNotebook *mnb, GeditTab *tab) { GtkWidget *notebook; GeditNotebook *old_notebook; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); g_return_if_fail (GEDIT_IS_TAB (tab)); notebook = gedit_notebook_new (); add_notebook (mnb, notebook, FALSE); old_notebook = gedit_multi_notebook_get_notebook_for_tab (mnb, tab); /* When gtk_notebook_insert_page is called the focus is set in the notebook, we don't want this to happen until the page is added. Also we don't want to call switch_page when we add the tab but when we switch the notebook. */ g_signal_handlers_block_by_func (old_notebook, notebook_set_focus, mnb); g_signal_handlers_block_by_func (old_notebook, notebook_switch_page, mnb); gedit_notebook_move_tab (old_notebook, GEDIT_NOTEBOOK (notebook), tab, -1); g_signal_handlers_unblock_by_func (old_notebook, notebook_switch_page, mnb); g_signal_handlers_unblock_by_func (old_notebook, notebook_set_focus, mnb); notebook_set_focus (GTK_CONTAINER (notebook), NULL, mnb); }
GeditNotebook * gedit_multi_notebook_get_notebook_for_tab (GeditMultiNotebook *mnb, GeditTab *tab) { GList *l; gint page_num; g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), NULL); g_return_val_if_fail (GEDIT_IS_TAB (tab), NULL); l = mnb->priv->notebooks; do { page_num = gtk_notebook_page_num (GTK_NOTEBOOK (l->data), GTK_WIDGET (tab)); if (page_num != -1) break; l = g_list_next (l); } while (l != NULL && page_num == -1); g_return_val_if_fail (page_num != -1, NULL); return GEDIT_NOTEBOOK (l->data); }
GeditNotebook * gedit_multi_notebook_get_active_notebook (GeditMultiNotebook *mnb) { g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), NULL); return GEDIT_NOTEBOOK (mnb->priv->active_notebook); }
static void gedit_notebook_finalize (GObject *object) { GeditNotebook *notebook = GEDIT_NOTEBOOK (object); g_list_free (notebook->priv->focused_pages); G_OBJECT_CLASS (gedit_notebook_parent_class)->finalize (object); }
static void gedit_notebook_dispose (GObject *object) { GeditNotebook *notebook = GEDIT_NOTEBOOK (object); g_clear_object (¬ebook->priv->ui_settings); g_clear_object (¬ebook->priv->css); G_OBJECT_CLASS (gedit_notebook_parent_class)->dispose (object); }
static void gedit_notebook_page_added (GtkNotebook *notebook, GtkWidget *page, guint page_num) { GeditNotebook *nb = GEDIT_NOTEBOOK (notebook); GtkWidget *tab_label; tab_label = get_tab_label (GEDIT_TAB (page)); g_signal_connect (tab_label, "destroy", G_CALLBACK (on_tab_label_destroyed), page); g_signal_connect (tab_label, "close-clicked", G_CALLBACK (close_button_clicked_cb), nb); update_tabs_visibility (GEDIT_NOTEBOOK (notebook), FALSE); }
static GtkTreePath * get_current_path (GeditDocumentsPanel *panel) { gint notebook_num; gint page_num; GtkWidget *notebook; gedit_debug (DEBUG_PANEL); notebook = _gedit_window_get_notebook (panel->priv->window); notebook_num = gedit_multi_notebook_get_notebook_num (panel->priv->mnb, GEDIT_NOTEBOOK (notebook)); page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook)); return gtk_tree_path_new_from_indices (notebook_num, page_num, -1); }
/** * gedit_multi_notebook_close_all_tabs: * @mnb: a #GeditMultiNotebook * * Closes all opened tabs. */ void gedit_multi_notebook_close_all_tabs (GeditMultiNotebook *mnb) { GList *nbs, *l; g_return_if_fail (GEDIT_MULTI_NOTEBOOK (mnb)); /* We copy the list because the main one is going to have the items removed */ nbs = g_list_copy (mnb->priv->notebooks); for (l = nbs; l != NULL; l = g_list_next (l)) { gedit_notebook_remove_all_tabs (GEDIT_NOTEBOOK (l->data)); } g_list_free (nbs); }
static void gedit_notebook_remove (GtkContainer *container, GtkWidget *widget) { GeditNotebook *nb; /* This is where GtkNotebook will remove the page. By doing so, it will also switch to a new page, messing up our focus list. So we set a flag here to ignore the switch temporarily */ nb = GEDIT_NOTEBOOK (container); nb->priv->ignore_focused_page_update = TRUE; GTK_CONTAINER_CLASS (gedit_notebook_parent_class)->remove (container, widget); nb->priv->ignore_focused_page_update = FALSE; }
static void gedit_notebook_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GeditNotebook *notebook = GEDIT_NOTEBOOK (object); switch (prop_id) { case PROP_SHOW_TABS_MODE: notebook->priv->show_tabs_mode = g_value_get_enum (value); update_tabs_visibility (notebook, FALSE); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void gedit_notebook_page_removed (GtkNotebook *notebook, GtkWidget *page, guint page_num) { GeditNotebook *nb = GEDIT_NOTEBOOK (notebook); gint num_pages; gint curr; GtkWidget *tab_label; tab_label = get_tab_label (GEDIT_TAB (page)); if (tab_label != NULL) { g_signal_handlers_disconnect_by_func (tab_label, G_CALLBACK (on_tab_label_destroyed), page); g_signal_handlers_disconnect_by_func (tab_label, G_CALLBACK (close_button_clicked_cb), nb); } /* Remove the page from the focused pages list */ nb->priv->focused_pages = g_list_remove (nb->priv->focused_pages, page); curr = gtk_notebook_get_current_page (notebook); if (page_num == curr) { smart_tab_switching_on_closure (nb, GEDIT_TAB (page)); } num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb)); /* If there is no tabs, calling this is pointless */ if (num_pages > 0) { update_tabs_visibility (nb, FALSE); } }