void gedit_multi_notebook_close_tabs (GeditMultiNotebook *mnb, const GList *tabs) { GList *l; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); for (l = (GList *)tabs; l != NULL; l = g_list_next (l)) { GList *nbs; for (nbs = mnb->priv->notebooks; nbs != NULL; nbs = g_list_next (nbs)) { gint n; n = gtk_notebook_page_num (GTK_NOTEBOOK (nbs->data), GTK_WIDGET (l->data)); if (n != -1) { gtk_container_remove (GTK_CONTAINER (nbs->data), GTK_WIDGET (l->data)); break; } } } }
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); }
void gedit_multi_notebook_set_current_page (GeditMultiNotebook *mnb, gint page_num) { GList *l; gint pages = 0; gint single_num = page_num; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); for (l = mnb->priv->notebooks; l != NULL; l = g_list_next (l)) { gint p; p = gtk_notebook_get_n_pages (GTK_NOTEBOOK (l->data)); pages += p; if ((pages - 1) >= page_num) break; single_num -= p; } if (l == NULL) return; if (GTK_WIDGET (l->data) != mnb->priv->active_notebook) { gtk_widget_grab_focus (GTK_WIDGET (l->data)); } gtk_notebook_set_current_page (GTK_NOTEBOOK (l->data), single_num); }
GList * gedit_multi_notebook_get_all_tabs (GeditMultiNotebook *mnb) { GList *nbs; GList *ret = NULL; g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), NULL); for (nbs = mnb->priv->notebooks; nbs != NULL; nbs = g_list_next (nbs)) { GList *l, *children; children = gtk_container_get_children (GTK_CONTAINER (nbs->data)); for (l = children; l != NULL; l = g_list_next (l)) { ret = g_list_prepend (ret, l->data); } g_list_free (children); } ret = g_list_reverse (ret); return ret; }
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); }
gint gedit_multi_notebook_get_n_tabs (GeditMultiNotebook *mnb) { g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), 0); return mnb->priv->total_tabs; }
gint gedit_multi_notebook_get_n_notebooks (GeditMultiNotebook *mnb) { g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), 0); return g_list_length (mnb->priv->notebooks); }
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)); }
void gedit_multi_notebook_set_active_tab (GeditMultiNotebook *mnb, GeditTab *tab) { GList *l; gint page_num; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); g_return_if_fail (GEDIT_IS_TAB (tab)); if (tab == GEDIT_TAB (mnb->priv->active_tab)) return; 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_if_fail (page_num != -1); gtk_notebook_set_current_page (GTK_NOTEBOOK (l->data), page_num); if (GTK_WIDGET (l->data) != mnb->priv->active_notebook) { gtk_widget_grab_focus (GTK_WIDGET (l->data)); } }
GeditTab * gedit_multi_notebook_get_active_tab (GeditMultiNotebook *mnb) { g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), NULL); return (mnb->priv->active_tab == NULL) ? NULL : GEDIT_TAB (mnb->priv->active_tab); }
GeditNotebook * gedit_multi_notebook_get_nth_notebook (GeditMultiNotebook *mnb, gint notebook_num) { g_return_val_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb), NULL); return g_list_nth_data (mnb->priv->notebooks, notebook_num); }
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); }
/* We only use this to hide tabs in fullscreen mode so for now * we do not have a real property etc. */ void _gedit_multi_notebook_set_show_tabs (GeditMultiNotebook *mnb, gboolean show) { g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); mnb->priv->show_tabs = show != FALSE; update_tabs_visibility (mnb); }
void gedit_multi_notebook_foreach_notebook (GeditMultiNotebook *mnb, GtkCallback callback, gpointer callback_data) { GList *l; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); for (l = mnb->priv->notebooks; l != NULL; l = g_list_next (l)) { callback (GTK_WIDGET (l->data), callback_data); } }
void gedit_multi_notebook_next_notebook (GeditMultiNotebook *mnb) { GList *current; GtkWidget *notebook; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); current = g_list_find (mnb->priv->notebooks, mnb->priv->active_notebook); if (current->next != NULL) notebook = GTK_WIDGET (current->next->data); else notebook = GTK_WIDGET (mnb->priv->notebooks->data); gtk_widget_grab_focus (notebook); }
void gedit_multi_notebook_foreach_tab (GeditMultiNotebook *mnb, GtkCallback callback, gpointer callback_data) { GList *nb; g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb)); for (nb = mnb->priv->notebooks; nb != NULL; nb = g_list_next (nb)) { GList *l, *children; children = gtk_container_get_children (GTK_CONTAINER (nb->data)); for (l = children; l != NULL; l = g_list_next (l)) { callback (GTK_WIDGET (l->data), callback_data); } g_list_free (children); } }