/** * gedit_notebook_add_tab: * @nb: a #GeditNotebook * @tab: a #GeditTab * @position: the position where the @tab should be added * @jump_to: %TRUE to set the @tab as active * * Adds the specified @tab to the @nb. */ void gedit_notebook_add_tab (GeditNotebook *nb, GeditTab *tab, gint position, gboolean jump_to) { GtkWidget *tab_label; g_return_if_fail (GEDIT_IS_NOTEBOOK (nb)); g_return_if_fail (GEDIT_IS_TAB (tab)); tab_label = create_tab_label (nb, tab); gtk_notebook_insert_page (GTK_NOTEBOOK (nb), GTK_WIDGET (tab), tab_label, position); gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (nb), GTK_WIDGET (tab), TRUE); gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (nb), GTK_WIDGET (tab), TRUE); /* The signal handler may have reordered the tabs */ position = gtk_notebook_page_num (GTK_NOTEBOOK (nb), GTK_WIDGET (tab)); if (jump_to) { gtk_notebook_set_current_page (GTK_NOTEBOOK (nb), position); gtk_widget_grab_focus (GTK_WIDGET (tab)); } }
/** * gedit_notebook_get_close_buttons_sensitive: * @nb: a #GeditNotebook * * Whether the close buttons are sensitive. * * Returns: %TRUE if the close buttons are sensitive */ gboolean gedit_notebook_get_close_buttons_sensitive (GeditNotebook *nb) { g_return_val_if_fail (GEDIT_IS_NOTEBOOK (nb), TRUE); return nb->priv->close_buttons_sensitive; }
/** * gedit_notebook_move_tab: * @src: a #GeditNotebook * @dest: a #GeditNotebook * @tab: a #GeditTab * @dest_position: the position for @tab * * Moves @tab from @src to @dest. * If dest_position is greater than or equal to the number of tabs * of the destination nootebook or negative, tab will be moved to the * end of the tabs. */ void gedit_notebook_move_tab (GeditNotebook *src, GeditNotebook *dest, GeditTab *tab, gint dest_position) { g_return_if_fail (GEDIT_IS_NOTEBOOK (src)); g_return_if_fail (GEDIT_IS_NOTEBOOK (dest)); g_return_if_fail (src != dest); g_return_if_fail (GEDIT_IS_TAB (tab)); /* make sure the tab isn't destroyed while we move it */ g_object_ref (tab); gtk_container_remove (GTK_CONTAINER (src), GTK_WIDGET (tab)); gedit_notebook_add_tab (dest, tab, dest_position, TRUE); g_object_unref (tab); }
gint gedit_multi_notebook_get_notebook_num (GeditMultiNotebook *mnb, GeditNotebook *notebook) { g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), -1); g_return_val_if_fail (GEDIT_IS_NOTEBOOK (notebook), -1); return g_list_index (mnb->priv->notebooks, notebook); }
/** * gedit_notebook_set_close_buttons_sensitive: * @nb: a #GeditNotebook * @sensitive: %TRUE to make the buttons sensitive * * Sets whether the close buttons in the tabs of @nb are sensitive. */ void gedit_notebook_set_close_buttons_sensitive (GeditNotebook *nb, gboolean sensitive) { g_return_if_fail (GEDIT_IS_NOTEBOOK (nb)); sensitive = (sensitive != FALSE); if (sensitive == nb->priv->close_buttons_sensitive) return; nb->priv->close_buttons_sensitive = sensitive; gtk_container_foreach (GTK_CONTAINER (nb), (GtkCallback)set_close_buttons_sensitivity, nb); }
/* We need to figure out if the any of the internal widget of the notebook has got the focus to set the active notebook */ static void notebook_set_focus (GtkContainer *container, GtkWidget *widget, GeditMultiNotebook *mnb) { if (GEDIT_IS_NOTEBOOK (container) && GTK_WIDGET (container) != mnb->priv->active_notebook) { gint page_num; mnb->priv->active_notebook = GTK_WIDGET (container); page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (container)); notebook_switch_page (GTK_NOTEBOOK (container), NULL, page_num, mnb); g_object_notify (G_OBJECT (mnb), "active-notebook"); } }
/** * gedit_notebook_remove_all_tabs: * @nb: a #GeditNotebook * * Removes all #GeditTab from @nb. */ void gedit_notebook_remove_all_tabs (GeditNotebook *nb) { GList *tabs, *t; g_return_if_fail (GEDIT_IS_NOTEBOOK (nb)); g_list_free (nb->priv->focused_pages); nb->priv->focused_pages = NULL; /* Remove tabs in reverse order since it is faster * due to how gtknotebook works */ tabs = gtk_container_get_children (GTK_CONTAINER (nb)); for (t = g_list_last (tabs); t != NULL; t = t->prev) { gtk_container_remove (GTK_CONTAINER (nb), GTK_WIDGET (t->data)); } g_list_free (tabs); }