aboutsummaryrefslogtreecommitdiffstats
path: root/src/ephy-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ephy-window.c')
-rw-r--r--src/ephy-window.c667
1 files changed, 339 insertions, 328 deletions
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 455602244..8cca7ba26 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -24,123 +24,250 @@
#include "ephy-favorites-menu.h"
#include "ephy-state.h"
#include "ephy-gobject-misc.h"
-#include "statusbar.h"
-#include "toolbar.h"
#include "ppview-toolbar.h"
#include "window-commands.h"
#include "find-dialog.h"
#include "history-dialog.h"
-#include "popup-commands.h"
#include "ephy-shell.h"
-#include "ephy-bonobo-extensions.h"
#include "eel-gconf-extensions.h"
#include "ephy-prefs.h"
#include "ephy-embed-utils.h"
#include "ephy-debug.h"
+#include "ephy-file-helpers.h"
+#include "statusbar.h"
+#include "toolbar.h"
+#include "popup-commands.h"
#include <string.h>
-#include <bonobo/bonobo-window.h>
-#include <bonobo/bonobo-i18n.h>
-#include <bonobo/bonobo-ui-util.h>
-#include <bonobo/bonobo-ui-component.h>
+#include <libgnome/gnome-i18n.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <gtk/gtk.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
+#include "egg-action-group.h"
+#include "egg-menu-merge.h"
#define CHARSET_MENU_PATH "/menu/View/EncodingMenuPlaceholder"
#define GO_FAVORITES_PATH "/menu/Go/Favorites"
-#define GO_BACK_CMD_PATH "/commands/GoBack"
-#define GO_FORWARD_CMD_PATH "/commands/GoForward"
-#define GO_UP_CMD_PATH "/commands/GoUp"
-#define EDIT_FIND_NEXT_CMD_PATH "/commands/EditFindNext"
-#define EDIT_FIND_PREV_CMD_PATH "/commands/EditFindPrev"
-#define VIEW_MENUBAR_PATH "/commands/View Menubar"
-#define VIEW_STATUSBAR_PATH "/commands/View Statusbar"
-#define VIEW_TOOLBAR_PATH "/commands/View Toolbar"
-#define VIEW_BOOKMARKSBAR_PATH "/commands/View BookmarksBar"
-#define VIEW_FULLSCREEN_PATH "/commands/View Fullscreen"
-
-#define ID_VIEW_MENUBAR "View Menubar"
-#define ID_VIEW_STATUSBAR "View Statusbar"
-#define ID_VIEW_TOOLBAR "View Toolbar"
-#define ID_VIEW_BOOKMARKSBAR "View BookmarksBar"
-#define ID_VIEW_FULLSCREEN "View Fullscreen"
-
-static BonoboUIVerb ephy_verbs [] = {
- BONOBO_UI_VERB ("EditFind", (BonoboUIVerbFn)window_cmd_edit_find),
- BONOBO_UI_VERB ("FilePrint", (BonoboUIVerbFn)window_cmd_file_print),
- BONOBO_UI_VERB ("GoStop", (BonoboUIVerbFn)window_cmd_go_stop),
- BONOBO_UI_VERB ("GoReload", (BonoboUIVerbFn)window_cmd_go_reload),
- BONOBO_UI_VERB ("GoBack", (BonoboUIVerbFn)window_cmd_go_back),
- BONOBO_UI_VERB ("GoForward", (BonoboUIVerbFn)window_cmd_go_forward),
- BONOBO_UI_VERB ("GoGo", (BonoboUIVerbFn)window_cmd_go_go),
- BONOBO_UI_VERB ("GoUp", (BonoboUIVerbFn)window_cmd_go_up),
- BONOBO_UI_VERB ("GoHome", (BonoboUIVerbFn)window_cmd_go_home),
- BONOBO_UI_VERB ("GoMyportal", (BonoboUIVerbFn)window_cmd_go_myportal),
- BONOBO_UI_VERB ("GoLocation", (BonoboUIVerbFn)window_cmd_go_location),
- BONOBO_UI_VERB ("FileNew", (BonoboUIVerbFn)window_cmd_new),
- BONOBO_UI_VERB ("FileNewWindow", (BonoboUIVerbFn)window_cmd_new_window),
- BONOBO_UI_VERB ("FileNewTab", (BonoboUIVerbFn)window_cmd_new_tab),
- BONOBO_UI_VERB ("FileOpen", (BonoboUIVerbFn)window_cmd_file_open),
- BONOBO_UI_VERB ("FileSaveAs", (BonoboUIVerbFn)window_cmd_file_save_as),
- BONOBO_UI_VERB ("FileCloseTab", (BonoboUIVerbFn)window_cmd_file_close_tab),
- BONOBO_UI_VERB ("FileCloseWindow", (BonoboUIVerbFn)window_cmd_file_close_window),
- BONOBO_UI_VERB ("FileSendTo", (BonoboUIVerbFn)window_cmd_file_send_to),
- BONOBO_UI_VERB ("EditCut", (BonoboUIVerbFn)window_cmd_edit_cut),
- BONOBO_UI_VERB ("EditCopy", (BonoboUIVerbFn)window_cmd_edit_copy),
- BONOBO_UI_VERB ("EditPaste", (BonoboUIVerbFn)window_cmd_edit_paste),
- BONOBO_UI_VERB ("EditSelectAll", (BonoboUIVerbFn)window_cmd_edit_select_all),
- BONOBO_UI_VERB ("EditPrefs", (BonoboUIVerbFn)window_cmd_edit_prefs),
- BONOBO_UI_VERB ("SettingsToolbarEditor", (BonoboUIVerbFn)window_cmd_settings_toolbar_editor),
- BONOBO_UI_VERB ("Zoom In", (BonoboUIVerbFn)window_cmd_view_zoom_in),
- BONOBO_UI_VERB ("EditFindNext", (BonoboUIVerbFn)window_cmd_edit_find_next),
- BONOBO_UI_VERB ("EditFindPrev", (BonoboUIVerbFn)window_cmd_edit_find_prev),
- BONOBO_UI_VERB ("Zoom Out", (BonoboUIVerbFn)window_cmd_view_zoom_out),
- BONOBO_UI_VERB ("Zoom Normal", (BonoboUIVerbFn)window_cmd_view_zoom_normal),
- BONOBO_UI_VERB ("ViewPageSource", (BonoboUIVerbFn)window_cmd_view_page_source),
- BONOBO_UI_VERB ("BookmarksAddDefault", (BonoboUIVerbFn)window_cmd_bookmarks_add_default),
- BONOBO_UI_VERB ("BookmarksEdit", (BonoboUIVerbFn)window_cmd_bookmarks_edit),
- BONOBO_UI_VERB ("ToolsHistory", (BonoboUIVerbFn)window_cmd_tools_history),
- BONOBO_UI_VERB ("ToolsPDM", (BonoboUIVerbFn)window_cmd_tools_pdm),
- BONOBO_UI_VERB ("TabsNext", (BonoboUIVerbFn)window_cmd_tabs_next),
- BONOBO_UI_VERB ("TabsPrevious", (BonoboUIVerbFn)window_cmd_tabs_previous),
- BONOBO_UI_VERB ("TabsMoveLeft", (BonoboUIVerbFn)window_cmd_tabs_move_left),
- BONOBO_UI_VERB ("TabsMoveRight", (BonoboUIVerbFn)window_cmd_tabs_move_right),
- BONOBO_UI_VERB ("TabsDetach", (BonoboUIVerbFn)window_cmd_tabs_detach),
- BONOBO_UI_VERB ("HelpContents", (BonoboUIVerbFn)window_cmd_help_manual),
- BONOBO_UI_VERB ("About", (BonoboUIVerbFn)window_cmd_help_about),
-
- BONOBO_UI_VERB_END
+#define GO_BACK_ACTION "GoBack"
+#define GO_FORWARD_ACTION "GoForward"
+#define GO_UP_ACTION "GoUp"
+#define EDIT_FIND_NEXT_ACTION "EditFindNext"
+#define EDIT_FIND_PREV_ACTION "EditFindPrev"
+#define VIEW_STATUSBAR_ACTION "ViewStatusbar"
+#define VIEW_TOOLBAR_ACTION "ViewToolbar"
+#define VIEW_FULLSCREEN_ACTION "ViewFullscreen"
+
+static EggActionGroupEntry ephy_menu_entries [] = {
+
+ /* Toplevel */
+ { "File", N_("_File"), NULL, NULL, NULL, NULL, NULL },
+ { "Edit", N_("_Edit"), NULL, NULL, NULL, NULL, NULL },
+ { "View", N_("_View"), NULL, NULL, NULL, NULL, NULL },
+ { "Go", N_("_Go"), NULL, NULL, NULL, NULL, NULL },
+ { "Tabs", N_("_Tabs"), NULL, NULL, NULL, NULL, NULL },
+ { "Help", N_("_Help"), NULL, NULL, NULL, NULL, NULL },
+
+ /* File menu */
+ { "FileNewWindow", N_("_New Window"), GTK_STOCK_NEW, "<control>N",
+ N_("Create a new window"),
+ G_CALLBACK (window_cmd_file_new_window), NULL },
+ { "FileNewTab", N_("New _Tab"), NULL, "<shift><control>N",
+ N_("Create a new tab"),
+ G_CALLBACK (window_cmd_file_new_tab), NULL },
+ { "FileOpen", N_("_Open..."), GTK_STOCK_OPEN, "<control>O",
+ N_("Open a file"),
+ G_CALLBACK (window_cmd_file_open), NULL },
+ { "FileSaveAs", N_("Save _As..."), GTK_STOCK_SAVE, "<shift><control>S",
+ N_("Save the current page"),
+ G_CALLBACK (window_cmd_file_save_as), NULL },
+ { "FilePrint", N_("_Print..."), GTK_STOCK_PRINT, "<control>P",
+ N_("Print the current page"),
+ G_CALLBACK (window_cmd_file_print), NULL },
+ { "FileSendTo", N_("S_end To..."), NULL, NULL,
+ N_("Send a link of the current page"),
+ G_CALLBACK (window_cmd_file_send_to), NULL },
+ { "FileAddBookmark", N_("_Add Bookmark..."), GTK_STOCK_ADD, "<control>D",
+ N_("Add a bookmark for the current page"),
+ G_CALLBACK (window_cmd_file_add_bookmark), NULL },
+ { "FileCloseTab", N_("_Close Tab"), GTK_STOCK_CLOSE, "<control>W",
+ N_("Send a link of the current page"),
+ G_CALLBACK (window_cmd_file_close_tab), NULL },
+ { "FileCloseWindow", N_("Close _Window"), NULL, "<shift><control>W",
+ N_("Send a link of the current page"),
+ G_CALLBACK (window_cmd_file_close_window), NULL },
+
+ /* Edit menu */
+ { "EditCut", N_("Cu_t"), GTK_STOCK_CUT, "<control>X",
+ N_("Cut the selection"),
+ G_CALLBACK (window_cmd_edit_cut), NULL },
+ { "EditCopy", N_("_Copy"), GTK_STOCK_COPY, "<control>C",
+ N_("Copy the selection"),
+ G_CALLBACK (window_cmd_edit_copy), NULL },
+ { "EditPaste", N_("_Paste"), GTK_STOCK_PASTE, "<control>V",
+ N_("Paste clipboard"),
+ G_CALLBACK (window_cmd_edit_paste), NULL },
+ { "EditSelectAll", N_("Select _All"), NULL, "<control>A",
+ N_("Select the entire page"),
+ G_CALLBACK (window_cmd_edit_select_all), NULL },
+ { "EditFind", N_("_Find"), GTK_STOCK_FIND, "<control>F",
+ N_("Find a string"),
+ G_CALLBACK (window_cmd_edit_find), NULL },
+ { "EditFindNext", N_("Find Ne_xt"), NULL, "<control>G",
+ N_("Find next occurence of the string"),
+ G_CALLBACK (window_cmd_edit_find_next), NULL },
+ { "EditFindPrev", N_("Find Pre_vious"), NULL, "<shift><control>G",
+ N_("Find previous occurence of the string"),
+ G_CALLBACK (window_cmd_edit_find_prev), NULL },
+ { "EditPersonalData", N_("P_ersonal Data"), NULL, "<control>F",
+ N_("View and remove cookies and passwords"),
+ G_CALLBACK (window_cmd_edit_personal_data), NULL },
+ { "EditToolbar", N_("T_oolbars"), NULL, NULL,
+ N_("Costumize toolbars"),
+ G_CALLBACK (window_cmd_edit_toolbar), NULL },
+ { "EditPrefs", N_("P_references"), GTK_STOCK_PREFERENCES, NULL,
+ N_("Configure the web browser"),
+ G_CALLBACK (window_cmd_edit_prefs), NULL },
+
+ /* View menu */
+ { "ViewStop", N_("_Stop"), GTK_STOCK_STOP, "Escape",
+ N_("Stop current data transfer"),
+ G_CALLBACK (window_cmd_view_stop), NULL },
+ { "ViewReload", N_("_Reload"), GTK_STOCK_REFRESH, "<control>R",
+ N_("Display the latest content of the current page"),
+ G_CALLBACK (window_cmd_view_reload), NULL },
+ { "ViewStatusbar", N_("St_atusbar"), NULL, NULL,
+ N_("Show or hide statusbar"),
+ G_CALLBACK (window_cmd_view_statusbar), NULL, TOGGLE_ACTION },
+ { "ViewFullscreen", N_("_Fullscreen"), NULL, NULL,
+ N_("Browse at full screen"),
+ G_CALLBACK (window_cmd_view_fullscreen), NULL, TOGGLE_ACTION},
+ { "ViewZoomIn", N_("Zoom _In"), GTK_STOCK_ZOOM_IN, "<control>plus",
+ N_("Show the contents in more detail"),
+ G_CALLBACK (window_cmd_view_zoom_in), NULL },
+ { "ViewZoomOut", N_("Zoom _Out"), GTK_STOCK_ZOOM_OUT, "<control>minus",
+ N_("Show the contents in less detail"),
+ G_CALLBACK (window_cmd_view_zoom_out), NULL },
+ { "ViewZoomNormal", N_("_Normal Size"), GTK_STOCK_ZOOM_100, NULL,
+ N_("Show the contents at the normal size"),
+ G_CALLBACK (window_cmd_view_zoom_normal), NULL },
+ { "ViewPageSource", N_("_Page Source"), NULL, NULL,
+ N_("View the source code of the page"),
+ G_CALLBACK (window_cmd_view_page_source), NULL },
+
+ /* Go menu */
+ { "GoBack", N_("_Back"), GTK_STOCK_GO_BACK, "<alt>left",
+ N_("Go to the previous visited page"),
+ G_CALLBACK (window_cmd_go_back), NULL },
+ { "GoForward", N_("_Forward"), GTK_STOCK_GO_FORWARD, "<alt>right",
+ N_("Go to the next visited page"),
+ G_CALLBACK (window_cmd_go_forward), NULL },
+ { "GoUp", N_("_Up"), GTK_STOCK_GO_UP, "<alt>up",
+ N_("Go up one level"),
+ G_CALLBACK (window_cmd_go_up), NULL },
+ { "GoHome", N_("_Home"), GTK_STOCK_HOME, "<alt>home",
+ N_("Go to the home page"),
+ G_CALLBACK (window_cmd_go_home), NULL },
+ { "GoLocation", N_("_Location..."), NULL, "<control>L",
+ N_("Go to a specified location"),
+ G_CALLBACK (window_cmd_go_location), NULL },
+ { "GoHistory", N_("_History"), NULL, "<control>H",
+ N_("Go to an already visited page"),
+ G_CALLBACK (window_cmd_go_history), NULL },
+ { "GoBookmarks", N_("_Bookmarks"), NULL, "<control>B",
+ N_("Go to a bookmark"),
+ G_CALLBACK (window_cmd_go_bookmarks), NULL },
+
+ /* Tabs menu */
+ { "TabsPrevious", N_("_Previous Tab"), NULL, "<control>page_up",
+ N_("Activate previous tab"),
+ G_CALLBACK (window_cmd_tabs_previous), NULL },
+ { "TabsNext", N_("_Next Tab"), NULL, "<control>page_down",
+ N_("Activate next tab"),
+ G_CALLBACK (window_cmd_tabs_next), NULL },
+ { "TabsMoveLeft", N_("Move Tab _Left"), NULL, "<shift><control>page_up",
+ N_("Move current tab to left"),
+ G_CALLBACK (window_cmd_tabs_move_left), NULL },
+ { "TabsMoveRight", N_("Move Tab _Right"), NULL, "<shift><control>page_up",
+ N_("Move current tab to right"),
+ G_CALLBACK (window_cmd_tabs_move_right), NULL },
+ { "TabsDetach", N_("_Detach Tab"), NULL, "<shift><control>M",
+ N_("Detach current tab"),
+ G_CALLBACK (window_cmd_tabs_detach), NULL },
+
+ /* Help menu */
+ { "HelpAbout", N_("_About"), NULL, NULL,
+ N_("Display credits for the web browser creators"),
+ G_CALLBACK (window_cmd_help_about), NULL },
};
-
-static BonoboUIVerb ephy_popup_verbs [] = {
- BONOBO_UI_VERB ("EPOpenInNewWindow", (BonoboUIVerbFn)popup_cmd_new_window),
- BONOBO_UI_VERB ("EPOpenInNewTab", (BonoboUIVerbFn)popup_cmd_new_tab),
- BONOBO_UI_VERB ("EPAddBookmark", (BonoboUIVerbFn)popup_cmd_add_bookmark),
- BONOBO_UI_VERB ("EPOpenImageInNewWindow", (BonoboUIVerbFn)popup_cmd_image_in_new_window),
- BONOBO_UI_VERB ("EPOpenImageInNewTab", (BonoboUIVerbFn)popup_cmd_image_in_new_tab),
- BONOBO_UI_VERB ("DPOpenFrameInNewWindow", (BonoboUIVerbFn)popup_cmd_frame_in_new_window),
- BONOBO_UI_VERB ("DPOpenFrameInNewTab", (BonoboUIVerbFn)popup_cmd_frame_in_new_tab),
- BONOBO_UI_VERB ("DPAddFrameBookmark", (BonoboUIVerbFn)popup_cmd_add_frame_bookmark),
- BONOBO_UI_VERB ("DPViewSource", (BonoboUIVerbFn)popup_cmd_view_source),
-
- BONOBO_UI_VERB_END
+static guint ephy_menu_n_entries = G_N_ELEMENTS (ephy_menu_entries);
+
+static EggActionGroupEntry ephy_popups_entries [] = {
+ /* Toplevel */
+ { "FakeToplevel", (""), NULL, NULL, NULL, NULL, NULL },
+
+ /* Document */
+ { "SaveBackgroundAs", N_("Save Background As..."), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_save_background_as), NULL },
+ { "CopyPageLocation", N_("Copy Page Location"), GTK_STOCK_COPY, NULL,
+ NULL, G_CALLBACK (popup_cmd_copy_page_location), NULL },
+
+ /* Framed document */
+ { "OpenFrame", N_("Open Frame"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_open_frame), NULL },
+ { "OpenFrameInNewWindow", N_("Open Frame in New Window"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_frame_in_new_window), NULL },
+ { "OpenFrameInNewTab", N_("Open Frame in New Tab"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_frame_in_new_tab), NULL },
+
+ /* Links */
+ { "OpenLink", N_("Open Link"), GTK_STOCK_OPEN, NULL,
+ NULL, G_CALLBACK (popup_cmd_open_link), NULL },
+ { "OpenLinkInNewWindow", N_("Open Link in New Window"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_link_in_new_window), NULL },
+ { "OpenLinkInNewTab", N_("Open Link in New Tab"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_link_in_new_tab), NULL },
+ { "DownloadLink", N_("Download Link"), GTK_STOCK_SAVE, NULL,
+ NULL, G_CALLBACK (popup_cmd_download_link), NULL },
+ { "AddLinkBookmark", N_("Add Bookmark"), GTK_STOCK_ADD, NULL,
+ NULL, G_CALLBACK (popup_cmd_add_link_bookmark), NULL },
+ { "CopyLinkLocation", N_("Copy Link Location"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_copy_link_location), NULL },
+ { "CopyEmail", N_("Copy Email"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_copy_email), NULL },
+
+ /* Images */
+ { "OpenImage", N_("Open Image"), GTK_STOCK_OPEN, NULL,
+ NULL, G_CALLBACK (popup_cmd_open_image), NULL },
+ { "OpenImageInNewWindow", N_("Open Image in New Window"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_image_in_new_window), NULL },
+ { "OpenImageInNewTab", N_("Open Image in New Tab"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_image_in_new_tab), NULL },
+ { "SaveImageAs", N_("Save Image As..."), GTK_STOCK_SAVE_AS, NULL,
+ NULL, G_CALLBACK (popup_cmd_save_image_as), NULL },
+ { "SetImageAsBackground", N_("Use Image as Background"), NULL, NULL,
+ NULL, G_CALLBACK (popup_cmd_set_image_as_background), NULL },
+ { "CopyImageLocation", N_("Copy Image Location"), GTK_STOCK_COPY, NULL,
+ NULL, G_CALLBACK (popup_cmd_copy_image_location), NULL },
};
+static guint ephy_popups_n_entries = G_N_ELEMENTS (ephy_popups_entries);
struct EphyWindowPrivate
{
+ GtkWidget *main_vbox;
+ GtkWidget *menubar;
+ Toolbar *toolbar;
+ GtkWidget *statusbar;
+ EggActionGroup *action_group;
+ EggActionGroup *popups_action_group;
EphyFavoritesMenu *fav_menu;
PPViewToolbar *ppview_toolbar;
- Toolbar *toolbar;
- Statusbar *statusbar;
GtkNotebook *notebook;
EphyTab *active_tab;
GtkWidget *sidebar;
- EphyEmbedPopupBW *embed_popup;
EphyDialog *find_dialog;
EphyDialog *history_dialog;
EphyDialog *history_sidebar;
@@ -191,7 +318,7 @@ ephy_window_get_type (void)
(GInstanceInitFunc) ephy_window_init
};
- ephy_window_type = g_type_register_static (BONOBO_TYPE_WINDOW,
+ ephy_window_type = g_type_register_static (GTK_TYPE_WINDOW,
"EphyWindow",
&our_info, 0);
}
@@ -212,8 +339,7 @@ ephy_window_class_init (EphyWindowClass *klass)
widget_class->show = ephy_window_show;
}
-static
-gboolean
+static gboolean
ephy_window_key_press_event_cb (GtkWidget *widget,
GdkEventKey *event,
EphyWindow *window)
@@ -287,63 +413,75 @@ ephy_window_state_event_cb (GtkWidget *widget,
}
static void
-setup_bonobo_window (EphyWindow *window,
- BonoboUIComponent **ui_component)
+add_widget (EggMenuMerge *merge, GtkWidget *widget, EphyWindow *window)
+{
+ if (GTK_IS_MENU_SHELL (widget))
+ {
+ window->priv->menubar = widget;
+ }
+
+ gtk_box_pack_start (GTK_BOX (window->priv->main_vbox),
+ widget, FALSE, FALSE, 0);
+ gtk_widget_show (widget);
+}
+
+static void
+setup_window (EphyWindow *window)
{
- BonoboWindow *win = BONOBO_WINDOW(window);
- BonoboUIContainer *container;
- Bonobo_UIContainer corba_container;
+ EggActionGroup *action_group;
+ EggMenuMerge *merge;
+ int i;
+
+ window->priv->main_vbox = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (window->priv->main_vbox);
+ gtk_container_add (GTK_CONTAINER (window),
+ window->priv->main_vbox);
+
+ for (i = 0; i < ephy_menu_n_entries; i++)
+ {
+ ephy_menu_entries[i].user_data = window;
+ }
- container = bonobo_window_get_ui_container (win);
+ for (i = 0; i < ephy_popups_n_entries; i++)
+ {
+ ephy_popups_entries[i].user_data = window;
+ }
- bonobo_ui_engine_config_set_path (bonobo_window_get_ui_engine (win),
- "/apps/ephy/UIConfig/kvps");
+ merge = egg_menu_merge_new ();
- corba_container = BONOBO_OBJREF (container);
+ action_group = egg_action_group_new ("WindowActions");
+ egg_action_group_add_actions (action_group, ephy_menu_entries,
+ ephy_menu_n_entries);
+ egg_menu_merge_insert_action_group (merge, action_group, 0);
+ window->priv->action_group = action_group;
- *ui_component = bonobo_ui_component_new_default ();
+ action_group = egg_action_group_new ("PopupsActions");
+ egg_action_group_add_actions (action_group, ephy_popups_entries,
+ ephy_popups_n_entries);
+ egg_menu_merge_insert_action_group (merge, action_group, 0);
+ window->priv->popups_action_group = action_group;
- bonobo_ui_component_set_container (*ui_component,
- corba_container,
- NULL);
+ window->ui_merge = G_OBJECT (merge);
+ g_signal_connect (merge, "add_widget", G_CALLBACK (add_widget), window);
+ egg_menu_merge_add_ui_from_file (merge, ephy_file ("epiphany-ui.xml"), NULL);
+ gtk_window_add_accel_group (GTK_WINDOW (window), merge->accel_group);
- bonobo_ui_util_set_ui (*ui_component,
- DATADIR,
- "epiphany-ui.xml",
- "ephy", NULL);
+ window->priv->toolbar = toolbar_new (window);
- /* Key handling */
- g_signal_connect(G_OBJECT(win),
+ g_signal_connect(window,
"key-press-event",
G_CALLBACK(ephy_window_key_press_event_cb),
window);
-
- g_signal_connect (G_OBJECT(win), "configure_event",
+ g_signal_connect (window, "configure_event",
G_CALLBACK (ephy_window_configure_event_cb), NULL);
- g_signal_connect (G_OBJECT(win), "window_state_event",
+ g_signal_connect (window, "window_state_event",
G_CALLBACK (ephy_window_state_event_cb), NULL);
-
- g_signal_connect (G_OBJECT(win),
+ g_signal_connect (window,
"selection-received",
G_CALLBACK (ephy_window_selection_received_cb),
window);
}
-static EphyEmbedPopupBW *
-setup_popup_factory (EphyWindow *window,
- BonoboUIComponent *ui_component)
-{
- EphyEmbedPopupBW *popup;
-
- popup = ephy_window_get_popup_factory (window);
- g_object_set_data (G_OBJECT(popup), "EphyWindow", window);
- bonobo_ui_component_add_verb_list_with_data (ui_component,
- ephy_popup_verbs,
- popup);
-
- return popup;
-}
-
static GtkNotebook *
setup_notebook (EphyWindow *window)
{
@@ -369,89 +507,6 @@ setup_notebook (EphyWindow *window)
}
static void
-view_toolbar_changed_cb (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- EphyWindow *window)
-{
- EmbedChromeMask mask;
-
- if (window->priv->ignore_layout_toggles) return;
-
- mask = ephy_window_get_chrome (window);
- mask ^= EMBED_CHROME_TOOLBARON;
- ephy_window_set_chrome (window, mask);
-}
-
-static void
-view_statusbar_changed_cb (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- EphyWindow *window)
-{
- EmbedChromeMask mask;
-
- if (window->priv->ignore_layout_toggles) return;
-
- mask = ephy_window_get_chrome (window);
- mask ^= EMBED_CHROME_STATUSBARON;
- ephy_window_set_chrome (window, mask);
-}
-
-static void
-view_fullscreen_changed_cb (BonoboUIComponent *component,
- const char *path,
- Bonobo_UIComponent_EventType type,
- const char *state,
- EphyWindow *window)
-{
- EmbedChromeMask mask;
-
- if (window->priv->ignore_layout_toggles) return;
-
- mask = ephy_window_get_chrome (window);
- mask ^= EMBED_CHROME_OPENASFULLSCREEN;
- mask |= EMBED_CHROME_DEFAULT;
- ephy_window_set_chrome (window, mask);
-}
-
-static void
-update_layout_toggles (EphyWindow *window)
-{
- BonoboUIComponent *ui_component = BONOBO_UI_COMPONENT (window->ui_component);
- EmbedChromeMask mask = window->priv->chrome_mask;
-
- window->priv->ignore_layout_toggles = TRUE;
-
- ephy_bonobo_set_toggle_state (ui_component, VIEW_TOOLBAR_PATH,
- mask & EMBED_CHROME_TOOLBARON);
- ephy_bonobo_set_toggle_state (ui_component, VIEW_STATUSBAR_PATH,
- mask & EMBED_CHROME_STATUSBARON);
- ephy_bonobo_set_toggle_state (ui_component, VIEW_FULLSCREEN_PATH,
- mask & EMBED_CHROME_OPENASFULLSCREEN);
-
- window->priv->ignore_layout_toggles = FALSE;
-}
-
-static void
-setup_layout_menus (EphyWindow *window)
-{
- BonoboUIComponent *ui_component = BONOBO_UI_COMPONENT (window->ui_component);
-
- bonobo_ui_component_add_listener (ui_component, ID_VIEW_TOOLBAR,
- (BonoboUIListenerFn)view_toolbar_changed_cb,
- window);
- bonobo_ui_component_add_listener (ui_component, ID_VIEW_STATUSBAR,
- (BonoboUIListenerFn)view_statusbar_changed_cb,
- window);
- bonobo_ui_component_add_listener (ui_component, ID_VIEW_FULLSCREEN,
- (BonoboUIListenerFn)view_fullscreen_changed_cb,
- window);
-}
-
-static void
favicon_cache_changed_cb (EphyFaviconCache *cache, char *url, EphyWindow *window)
{
ephy_window_update_control (window, FaviconControl);
@@ -460,14 +515,12 @@ favicon_cache_changed_cb (EphyFaviconCache *cache, char *url, EphyWindow *window
static void
ephy_window_init (EphyWindow *window)
{
- BonoboUIComponent *ui_component;
Session *session;
EphyFaviconCache *cache;
session = ephy_shell_get_session (ephy_shell);
window->priv = g_new0 (EphyWindowPrivate, 1);
- window->priv->embed_popup = NULL;
window->priv->active_tab = NULL;
window->priv->chrome_mask = 0;
window->priv->ignore_layout_toggles = FALSE;
@@ -482,42 +535,25 @@ ephy_window_init (EphyWindow *window)
0);
/* Setup the window and connect verbs */
- setup_bonobo_window (window, &ui_component);
- window->ui_component = G_OBJECT (ui_component);
- bonobo_ui_component_add_verb_list_with_data (ui_component,
- ephy_verbs,
- window);
- setup_layout_menus (window);
-
- /* Setup the embed popups factory */
- window->priv->embed_popup = setup_popup_factory (window,
- ui_component);
-
- bonobo_ui_component_freeze (ui_component, NULL);
-
- /* Setup menubar */
- ephy_embed_utils_build_charsets_submenu (ui_component,
- CHARSET_MENU_PATH,
- (BonoboUIVerbFn)window_cmd_set_charset,
- window);
- window->priv->fav_menu = ephy_favorites_menu_new (window);
- ephy_favorites_menu_set_path (window->priv->fav_menu, GO_FAVORITES_PATH);
+ setup_window (window);
- /* Setup toolbar and statusbar */
- window->priv->toolbar = toolbar_new (window);
- window->priv->statusbar = statusbar_new (window);
- window->priv->ppview_toolbar = ppview_toolbar_new (window);
+ window->priv->fav_menu = ephy_favorites_menu_new (window);
/* Setup window contents */
window->priv->notebook = setup_notebook (window);
- bonobo_window_set_contents (BONOBO_WINDOW (window),
- GTK_WIDGET (window->priv->notebook));
+ gtk_box_pack_start (GTK_BOX (window->priv->main_vbox),
+ GTK_WIDGET (window->priv->notebook),
+ TRUE, TRUE, 0);
- bonobo_ui_component_thaw (ui_component, NULL);
+ window->priv->statusbar = statusbar_new ();
+ gtk_widget_show (window->priv->statusbar);
+ gtk_box_pack_start (GTK_BOX (window->priv->main_vbox),
+ GTK_WIDGET (window->priv->statusbar),
+ FALSE, TRUE, 0);
g_object_ref (ephy_shell);
- /*Once window is fully created, add it to the session list*/
+ /* Once window is fully created, add it to the session list*/
session_add_window (session, window);
}
@@ -572,14 +608,6 @@ ephy_window_finalize (GObject *object)
remove_from_session (window);
- if (window->priv->embed_popup)
- {
- g_object_unref (G_OBJECT (window->priv->embed_popup));
- }
-
- g_object_unref (G_OBJECT (window->priv->toolbar));
- g_object_unref (G_OBJECT (window->priv->statusbar));
-
if (window->priv->find_dialog)
{
g_object_unref (G_OBJECT (window->priv->find_dialog));
@@ -592,7 +620,14 @@ ephy_window_finalize (GObject *object)
(gpointer *)&window->priv->history_dialog);
}
- g_free (window->priv);
+ g_object_unref (window->priv->fav_menu);
+
+ if (window->priv->ppview_toolbar)
+ {
+ g_object_unref (window->priv->ppview_toolbar);
+ }
+
+ g_free (window->priv);
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -607,16 +642,6 @@ ephy_window_new (void)
return EPHY_WINDOW (g_object_new (EPHY_WINDOW_TYPE, NULL));
}
-static void
-dock_item_set_visibility (EphyWindow *window,
- const char *path,
- gboolean visibility)
-{
- ephy_bonobo_set_hidden (BONOBO_UI_COMPONENT(window->ui_component),
- path,
- !visibility);
-}
-
EmbedChromeMask
ephy_window_get_chrome (EphyWindow *window)
{
@@ -718,29 +743,46 @@ void
ephy_window_set_chrome (EphyWindow *window,
EmbedChromeMask flags)
{
- gboolean toolbar, ppvtoolbar, statusbar;
-
if (flags & EMBED_CHROME_DEFAULT)
{
translate_default_chrome (&flags);
}
- dock_item_set_visibility (window, "/menu",
- flags & EMBED_CHROME_MENUBARON);
+ if (flags & EMBED_CHROME_MENUBARON)
+ {
+ gtk_widget_show (window->priv->menubar);
+ }
+ else
+ {
+ gtk_widget_hide (window->priv->menubar);
+ }
- toolbar = (flags & EMBED_CHROME_TOOLBARON) != FALSE;
toolbar_set_visibility (window->priv->toolbar,
- toolbar);
+ flags & EMBED_CHROME_TOOLBARON);
- statusbar = (flags & EMBED_CHROME_STATUSBARON) != FALSE;
- statusbar_set_visibility (window->priv->statusbar,
- statusbar);
+ if (flags & EMBED_CHROME_STATUSBARON)
+ {
+ gtk_widget_show (window->priv->statusbar);
+ }
+ else
+ {
+ gtk_widget_hide (window->priv->statusbar);
+ }
- ppvtoolbar = (flags & EMBED_CHROME_PPVIEWTOOLBARON) != FALSE;
- ppview_toolbar_set_old_chrome (window->priv->ppview_toolbar,
- window->priv->chrome_mask);
- ppview_toolbar_set_visibility (window->priv->ppview_toolbar,
- ppvtoolbar);
+ if ((flags & EMBED_CHROME_PPVIEWTOOLBARON) != FALSE)
+ {
+ if (!window->priv->ppview_toolbar)
+ {
+ window->priv->ppview_toolbar = ppview_toolbar_new (window);
+ }
+ }
+ else
+ {
+ if (window->priv->ppview_toolbar)
+ {
+ g_object_unref (window->priv->ppview_toolbar);
+ }
+ }
/* set fullscreen only when it's really changed */
if ((window->priv->chrome_mask & EMBED_CHROME_OPENASFULLSCREEN) !=
@@ -753,8 +795,6 @@ ephy_window_set_chrome (EphyWindow *window,
window->priv->chrome_mask = flags;
- update_layout_toggles (window);
-
save_window_chrome (window);
}
@@ -988,14 +1028,11 @@ update_security (EphyWindow *window)
static void
update_nav_control (EphyWindow *window)
{
- /* the zoom control is updated at the same time than the navigation
- controls. This keeps it synched most of the time, but not always,
- because we don't get a notification when zoom changes */
-
gresult back, forward, up, stop;
EphyEmbed *embed;
EphyTab *tab;
- gint zoom;
+ EggActionGroup *action_group;
+ EggAction *action;
g_return_if_fail (window != NULL);
@@ -1010,29 +1047,16 @@ update_nav_control (EphyWindow *window)
up = ephy_embed_can_go_up (embed);
stop = ephy_tab_get_load_status (tab) & TAB_LOAD_STARTED;
- toolbar_button_set_sensitive (window->priv->toolbar,
- TOOLBAR_BACK_BUTTON,
- back == G_OK ? TRUE : FALSE);
- toolbar_button_set_sensitive (window->priv->toolbar,
- TOOLBAR_FORWARD_BUTTON,
- forward == G_OK ? TRUE : FALSE);
- toolbar_button_set_sensitive (window->priv->toolbar,
- TOOLBAR_UP_BUTTON,
- up == G_OK ? TRUE : FALSE);
- toolbar_button_set_sensitive (window->priv->toolbar,
- TOOLBAR_STOP_BUTTON,
- stop);
- if (ephy_embed_zoom_get (embed, &zoom) == G_OK)
- {
- toolbar_set_zoom (window->priv->toolbar, zoom);
- }
+ action_group = window->priv->action_group;
+ action = egg_action_group_get_action (action_group, "GoBack");
+ g_object_set (action, "sensitive", !back, NULL);
+ action = egg_action_group_get_action (action_group, "GoForward");
+ g_object_set (action, "sensitive", !forward, NULL);
+ action = egg_action_group_get_action (action_group, "GoUp");
+ g_object_set (action, "sensitive", !up, NULL);
- ephy_bonobo_set_sensitive (BONOBO_UI_COMPONENT(window->ui_component),
- GO_BACK_CMD_PATH, !back);
- ephy_bonobo_set_sensitive (BONOBO_UI_COMPONENT(window->ui_component),
- GO_FORWARD_CMD_PATH, !forward);
- ephy_bonobo_set_sensitive (BONOBO_UI_COMPONENT(window->ui_component),
- GO_UP_CMD_PATH, !up);
+ toolbar_update_navigation_actions (window->priv->toolbar,
+ back, forward, up);
}
static void
@@ -1066,8 +1090,7 @@ update_location_control (EphyWindow *window)
if (!location) location = "";
- toolbar_set_location (window->priv->toolbar,
- location);
+ toolbar_set_location (window->priv->toolbar, location);
}
static void
@@ -1108,11 +1131,11 @@ update_find_control (EphyWindow *window)
(FIND_DIALOG(window->priv->find_dialog));
can_go_prev = find_dialog_can_go_prev
(FIND_DIALOG(window->priv->find_dialog));
-
+/*
ephy_bonobo_set_sensitive (BONOBO_UI_COMPONENT(window->ui_component),
EDIT_FIND_NEXT_CMD_PATH, can_go_next);
ephy_bonobo_set_sensitive (BONOBO_UI_COMPONENT(window->ui_component),
- EDIT_FIND_PREV_CMD_PATH, can_go_prev);
+ EDIT_FIND_PREV_CMD_PATH, can_go_prev);*/
}
}
@@ -1218,7 +1241,7 @@ void
ephy_window_update_all_controls (EphyWindow *window)
{
g_return_if_fail (IS_EPHY_WINDOW (window));
-
+
if (ephy_window_get_active_tab (window) != NULL)
{
update_nav_control (window);
@@ -1257,21 +1280,6 @@ ephy_window_get_active_embed (EphyWindow *window)
else return NULL;
}
-EphyEmbedPopupBW *
-ephy_window_get_popup_factory (EphyWindow *window)
-{
- if (!window->priv->embed_popup)
- {
- window->priv->embed_popup = ephy_embed_popup_bw_new
- (BONOBO_WINDOW(window));
- ephy_embed_popup_connect_verbs
- (EPHY_EMBED_POPUP (window->priv->embed_popup),
- BONOBO_UI_COMPONENT (window->ui_component));
- }
-
- return window->priv->embed_popup;
-}
-
GList *
ephy_window_get_tabs (EphyWindow *window)
{
@@ -1296,8 +1304,11 @@ ephy_window_get_tabs (EphyWindow *window)
static void
save_old_embed_status (EphyTab *tab, EphyWindow *window)
{
- /* save old tab location status */
- ephy_tab_set_location (tab, toolbar_get_location (window->priv->toolbar));
+ char *location;
+
+ location = toolbar_get_location (window->priv->toolbar);
+ ephy_tab_set_location (tab, location);
+ g_free (location);
}
static void
@@ -1335,9 +1346,9 @@ update_embed_dialogs (EphyWindow *window,
static void
ephy_window_notebook_switch_page_cb (GtkNotebook *notebook,
- GtkNotebookPage *page,
- guint page_num,
- EphyWindow *window)
+ GtkNotebookPage *page,
+ guint page_num,
+ EphyWindow *window)
{
EphyTab *tab, *old_tab;