From e5d335763657c0ebf4d464f4bc1d81542220141b Mon Sep 17 00:00:00 2001 From: David Bordoley Date: Sat, 17 May 2003 12:08:43 +0000 Subject: Marco Pesenti Gritti 2003-05-17 David Bordoley Marco Pesenti Gritti * data/ui/epiphany-ui.xml.in: * src/Makefile.am: * src/bookmarks/ephy-bookmark-action.c: (create_tool_item): * src/ephy-notebook.c: (ephy_notebook_class_init), (ephy_notebook_move_page), (move_tab), (notebook_drag_data_received_cb), (ephy_notebook_init), (ephy_notebook_set_page_status), (update_tabs_visibility), (ephy_notebook_insert_page), (ephy_notebook_remove_page), (ephy_notebook_set_page_title): * src/ephy-notebook.h: * src/ephy-tabs-menu.c: (ephy_tabs_menu_class_init), (ephy_tabs_menu_init), (ephy_tabs_menu_clean), (ephy_tabs_menu_finalize_impl), (ephy_tabs_menu_set_property), (ephy_tabs_menu_get_property), (ephy_tabs_menu_new), (ephy_tabs_menu_verb_cb), (ephy_tabs_menu_set_action_accelerator), (ephy_tabs_menu_rebuild), (ephy_tabs_menu_update): * src/ephy-tabs-menu.h: * src/ephy-window.c: (setup_window), (update_tabs_menu_sensitivity), (ephy_window_tabs_changed_cb), (setup_notebook), (ephy_window_init), (ephy_window_finalize), (ephy_window_update_control), (ephy_window_update_all_controls), (ephy_window_notebook_switch_page_cb): * src/ephy-window.h: * src/window-commands.c: (window_cmd_tabs_move_left), (window_cmd_tabs_move_right), (window_cmd_tabs_detach): Implement a list of tabs at the bottom of tabs menu. Add a changed signal to the notebook and use it to update list and sensitivity. --- src/ephy-window.c | 130 +++++++++++++++++++++++------------------------------- 1 file changed, 56 insertions(+), 74 deletions(-) (limited to 'src/ephy-window.c') diff --git a/src/ephy-window.c b/src/ephy-window.c index e6e17c12b..6d98032e6 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -36,6 +36,7 @@ #include "toolbar.h" #include "popup-commands.h" #include "ephy-encoding-menu.h" +#include "ephy-tabs-menu.h" #include "ephy-stock-icons.h" #include @@ -261,6 +262,7 @@ struct EphyWindowPrivate EggActionGroup *popups_action_group; EphyFavoritesMenu *fav_menu; EphyEncodingMenu *enc_menu; + EphyTabsMenu *tabs_menu; PPViewToolbar *ppview_toolbar; GtkNotebook *notebook; EphyTab *active_tab; @@ -284,9 +286,8 @@ ephy_window_notebook_switch_page_cb (GtkNotebook *notebook, EphyWindow *window); static void -ephy_window_tab_detached_cb (EphyNotebook *notebook, gint page, - gint x, gint y, gpointer data); - +ephy_window_tab_detached_cb (EphyNotebook *notebook, gint page, + gint x, gint y, gpointer data); static GObjectClass *parent_class = NULL; @@ -330,34 +331,6 @@ ephy_window_class_init (EphyWindowClass *klass) widget_class->show = ephy_window_show; } -static gboolean -ephy_window_key_press_event_cb (GtkWidget *widget, - GdkEventKey *event, - EphyWindow *window) -{ - int page; - - if ((event->state & GDK_Shift_L) || (event->state & GDK_Shift_R)) - return FALSE; - - if ((event->state & GDK_Alt_L) || (event->state & GDK_Alt_R)) - { - page = event->keyval - GDK_0 -1; - - if (page == -1) page = 9; - - if (page>=-1 && page<=9) - { - gtk_notebook_set_current_page - (GTK_NOTEBOOK (window->priv->notebook), - page == -1 ? -1 : page); - return TRUE; - } - } - - return FALSE; -} - static void ephy_window_selection_received_cb (GtkWidget *widget, GtkSelectionData *selection_data, @@ -521,16 +494,52 @@ setup_window (EphyWindow *window) GTK_WIDGET (window->priv->toolbar), FALSE, FALSE, 0); - g_signal_connect(window, - "key-press-event", - G_CALLBACK(ephy_window_key_press_event_cb), - window); g_signal_connect (window, "selection-received", G_CALLBACK (ephy_window_selection_received_cb), window); } +static void +update_tabs_menu_sensitivity (EphyWindow *window) +{ + gboolean prev_tab, next_tab, move_left, move_right, detach; + EggActionGroup *action_group; + EggAction *action; + int current; + int last; + + current = gtk_notebook_get_current_page + (GTK_NOTEBOOK (window->priv->notebook)); + last = gtk_notebook_get_n_pages + (GTK_NOTEBOOK (window->priv->notebook)) - 1; + prev_tab = move_left = (current > 0); + next_tab = move_right = (current < last); + detach = gtk_notebook_get_n_pages + (GTK_NOTEBOOK (window->priv->notebook)) > 1; + + action_group = window->priv->action_group; + action = egg_action_group_get_action (action_group, "TabsPrevious"); + g_object_set (action, "sensitive", prev_tab, NULL); + action = egg_action_group_get_action (action_group, "TabsNext"); + g_object_set (action, "sensitive", next_tab, NULL); + action = egg_action_group_get_action (action_group, "TabsMoveLeft"); + g_object_set (action, "sensitive", move_left, NULL); + action = egg_action_group_get_action (action_group, "TabsMoveRight"); + g_object_set (action, "sensitive", move_right, NULL); + action = egg_action_group_get_action (action_group, "TabsDetach"); + g_object_set (action, "sensitive", detach, NULL); + + ephy_tabs_menu_update (window->priv->tabs_menu); +} + +static void +ephy_window_tabs_changed_cb (EphyNotebook *notebook, EphyWindow *window) +{ + update_tabs_menu_sensitivity (window); + ephy_tabs_menu_update (window->priv->tabs_menu); +} + static GtkNotebook * setup_notebook (EphyWindow *window) { @@ -549,6 +558,9 @@ setup_notebook (EphyWindow *window) g_signal_connect (G_OBJECT (notebook), "tab_detached", G_CALLBACK (ephy_window_tab_detached_cb), NULL); + g_signal_connect (G_OBJECT (notebook), "tabs_changed", + G_CALLBACK (ephy_window_tabs_changed_cb), + window); gtk_widget_show (GTK_WIDGET (notebook)); @@ -571,9 +583,6 @@ ephy_window_init (EphyWindow *window) /* Setup the window and connect verbs */ setup_window (window); - window->priv->fav_menu = ephy_favorites_menu_new (window); - window->priv->enc_menu = ephy_encoding_menu_new (window); - /* Setup window contents */ window->priv->notebook = setup_notebook (window); gtk_box_pack_start (GTK_BOX (window->priv->main_vbox), @@ -588,6 +597,11 @@ ephy_window_init (EphyWindow *window) g_object_ref (ephy_shell); + /* Initializ the menus */ + window->priv->tabs_menu = ephy_tabs_menu_new (window); + window->priv->fav_menu = ephy_favorites_menu_new (window); + window->priv->enc_menu = ephy_encoding_menu_new (window); + /* Once window is fully created, add it to the session list*/ session_add_window (session, window); } @@ -645,6 +659,7 @@ ephy_window_finalize (GObject *object) g_object_unref (window->priv->fav_menu); g_object_unref (window->priv->enc_menu); + g_object_unref (window->priv->tabs_menu); if (window->priv->ppview_toolbar) { @@ -1206,37 +1221,6 @@ update_find_control (EphyWindow *window) } } -static void -update_tabs (EphyWindow *window) -{ - gboolean prev_tab, next_tab, move_left, move_right, detach; - EggActionGroup *action_group; - EggAction *action; - int current; - int last; - - current = gtk_notebook_get_current_page - (GTK_NOTEBOOK (window->priv->notebook)); - last = gtk_notebook_get_n_pages - (GTK_NOTEBOOK (window->priv->notebook)) - 1; - prev_tab = move_left = (current > 0); - next_tab = move_right = (current < last); - detach = gtk_notebook_get_n_pages - (GTK_NOTEBOOK (window->priv->notebook)) > 1; - - action_group = window->priv->action_group; - action = egg_action_group_get_action (action_group, "TabsPrevious"); - g_object_set (action, "sensitive", prev_tab, NULL); - action = egg_action_group_get_action (action_group, "TabsNext"); - g_object_set (action, "sensitive", next_tab, NULL); - action = egg_action_group_get_action (action_group, "TabsMoveLeft"); - g_object_set (action, "sensitive", move_left, NULL); - action = egg_action_group_get_action (action_group, "TabsMoveRight"); - g_object_set (action, "sensitive", move_right, NULL); - action = egg_action_group_get_action (action_group, "TabsDetach"); - g_object_set (action, "sensitive", detach, NULL); -} - static void update_window_visibility (EphyWindow *window) { @@ -1292,9 +1276,6 @@ ephy_window_update_control (EphyWindow *window, switch (control) { - case TabsControl: - update_tabs (window); - break; case StatusbarMessageControl: update_status_message (window); break; @@ -1354,7 +1335,6 @@ ephy_window_update_all_controls (EphyWindow *window) update_security (window); update_find_control (window); update_spinner_control (window); - update_tabs (window); } } @@ -1461,6 +1441,7 @@ ephy_window_notebook_switch_page_cb (GtkNotebook *notebook, /* update window controls */ ephy_window_update_all_controls (window); + update_tabs_menu_sensitivity (window); } static void @@ -1525,7 +1506,7 @@ ephy_window_get_toolbar (EphyWindow *window) return window->priv->toolbar; } -void +static void ephy_window_tab_detached_cb (EphyNotebook *notebook, gint page, gint x, gint y, gpointer data) { @@ -1542,3 +1523,4 @@ ephy_window_tab_detached_cb (EphyNotebook *notebook, gint page, ephy_tab_set_window (tab, window); gtk_widget_show (GTK_WIDGET (window)); } + -- cgit v1.2.3