diff options
author | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-01-20 17:53:25 +0000 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-01-20 17:53:25 +0000 |
commit | 65a5de0eb022b5f37e84606d979dece9eff4bb1b (patch) | |
tree | fb55b3e8ad4e849cddb8945fceb5541a18da976b | |
parent | af19c78b7eb54828ce3630f01e46c5f020b9461f (diff) | |
download | epiphany-eog-menu-api.tar.gz |
implement context menuseog-menu-api
-rw-r--r-- | ChangeLog | 27 | ||||
-rw-r--r-- | data/ui/epiphany-toolbar.xml.in | 15 | ||||
-rw-r--r-- | data/ui/epiphany-ui.xml.in | 71 | ||||
-rw-r--r-- | src/ephy-spinner-action.c | 1 | ||||
-rw-r--r-- | src/ephy-tab.c | 77 | ||||
-rw-r--r-- | src/ephy-tab.h | 2 | ||||
-rw-r--r-- | src/ephy-window.c | 104 | ||||
-rw-r--r-- | src/ephy-window.h | 3 | ||||
-rw-r--r-- | src/popup-commands.c | 364 | ||||
-rw-r--r-- | src/popup-commands.h | 86 |
10 files changed, 609 insertions, 141 deletions
@@ -1,3 +1,30 @@ +2003-01-20 Marco Pesenti Gritti <marco@it.gnome.org> + + * data/ui/epiphany-ui.xml.in: + * src/ephy-spinner-action.c: (create_tool_item): + * src/ephy-tab.c: (ephy_tab_init), (ephy_tab_finalize), + (ephy_tab_get_event), (ephy_tab_set_event), + (ephy_tab_show_embed_popup), (ephy_tab_dom_mouse_down_cb): + * src/ephy-tab.h: + * src/ephy-window.c: (setup_window), (ephy_window_init), + (ephy_window_finalize), (ephy_window_get_active_embed): + * src/ephy-window.h: + * src/popup-commands.c: (get_event_info), + (popup_cmd_link_in_new_window), (popup_cmd_link_in_new_tab), + (popup_cmd_image_in_new_tab), (popup_cmd_image_in_new_window), + (popup_cmd_add_link_bookmark), (popup_cmd_frame_in_new_tab), + (popup_cmd_frame_in_new_window), (popup_cmd_copy_to_clipboard), + (popup_cmd_copy_page_location), (popup_cmd_copy_email), + (popup_cmd_copy_link_location), (save_property_url), + (popup_cmd_open_link), (popup_cmd_download_link), + (popup_cmd_save_image_as), (background_download_completed), + (popup_cmd_set_image_as_background), + (popup_cmd_copy_image_location), (popup_cmd_save_background_as), + (popup_cmd_open_frame), (popup_cmd_open_image): + * src/popup-commands.h: + + Implement context menus + 2003-01-19 Marco Pesenti Gritti <marco@it.gnome.org> * lib/widgets/ephy-spinner.c: (ephy_spinner_expose): diff --git a/data/ui/epiphany-toolbar.xml.in b/data/ui/epiphany-toolbar.xml.in new file mode 100644 index 000000000..0a46f0fe8 --- /dev/null +++ b/data/ui/epiphany-toolbar.xml.in @@ -0,0 +1,15 @@ +<Root> +<dockitem name="toolbar1"> + <toolitem name="ViewBackTItem" verb="NavigationBack"/> + <toolitem name="ViewForwardTItem" verb="NavigationForward"/> + <toolitem name="ViewStopTItem" verb="ViewStop"/> + <toolitem name="ViewReloadTItem" verb="ViewReload"/> + <separator name="ToolbarSep1"/> + <toolitem name="GoHomeTItem" verb="GoHome"/> + <separator name="ToolbarSep2"/> + <toolitem name="FaviconTItem" verb="Favicon"/> + <toolitem name="LocationTItem" verb="Location"/> + <toolitem name="SpinnerTItem" verb="Spinner"/> +</dockitem> +</Root> + diff --git a/data/ui/epiphany-ui.xml.in b/data/ui/epiphany-ui.xml.in index 25f15ebe7..6d7fdfcb7 100644 --- a/data/ui/epiphany-ui.xml.in +++ b/data/ui/epiphany-ui.xml.in @@ -75,5 +75,76 @@ <menuitem name="HelpAboutMenu" verb="HelpAbout"/> </submenu> </menu> + +<popups> +<popup name="EphyEmbedInputPopup" verb="FakeToplevel"> + <menuitem name="EditCutIP" verb="EditCut"/> + <menuitem name="EditCopyIP" verb="EditCopy"/> + <menuitem name="EditPasteIP" verb="EditPaste"/> +</popup> + +<popup name="EphyDocumentPopup" verb="FakeToplevel"> + <menuitem name="GoBackDP" verb="GoBack"/> + <menuitem name="GoForwardDP" verb="GoForward"/> + <menuitem name="GoReloadDP" verb="ViewReload"/> + <separator/> + <menuitem name="SavePageAsDP" verb="FileSaveAs"/> + <menuitem name="SaveBackgroundAsDP" verb="SaveBackgroundAs"/> + <menuitem name="AddPageBookmarkDP" verb="FileAddBookmark"/> + <menuitem name="CopyPageLocationDP" verb="CopyPageLocation"/> +</popup> + +<popup name="EphyFramedDocumentPopup" verb="FakeToplevel"> + <menuitem name="GoBackFDP" verb="GoBack"/> + <menuitem name="GoForwardFDP" verb="GoForward"/> + <menuitem name="GoReloadFDP" verb="ViewReload"/> + <separator/> + <menuitem name="SavePageAsFDP" verb="FileSaveAs"/> + <menuitem name="SaveBackgroundAsFDP" verb="SaveBackgroundAs"/> + <menuitem name="AddPageBookmarkFDP" verb="FileAddBookmark"/> + <menuitem name="CopyPageLocationFDP" verb="CopyPageLocation"/> + <separator/> + <menuitem name="OpenFrameFDP" verb="OpenFrame"/> + <menuitem name="OpenFrameInNewWindowFDP" verb="OpenFrameInNewWindow"/> + <menuitem name="OpenFrameInNewTabFDP" verb="OpenFrameInNewTab"/> +</popup> + +<popup name="EphyLinkPopup" verb="FakeToplevel"> + <menuitem name="OpenLinkLP" verb="OpenLink"/> + <menuitem name="OpenLinkInNewWindowLP" verb="OpenLinkInNewWindow"/> + <menuitem name="OpenLinkInNewTabLP" verb="OpenLinkInNewTab"/> + <menuitem name="DownloadLinkLP" verb="DownloadLink"/> + <menuitem name="AddLinkBookmarkLP" verb="AddLinkBookmark"/> + <menuitem name="CopyLinkLocationLP" verb="CopyLinkLocation"/> + <menuitem name="CopyEmailLinkLP" verb="CopyEmail"/> +</popup> + +<popup name="EphyImagePopup" verb="FakeToplevel"> + <menuitem name="OpenImageIP" verb="OpenImage"/> + <menuitem name="OpenImageInNewWindowIP" verb="OpenImageInNewWindow"/> + <menuitem name="OpenImageInNewTabIP" verb="OpenImageInNewTab"/> + <menuitem name="SaveImageAsIP" verb="SaveImageAs"/> + <menuitem name="SetImageAsBackgroundIP" verb="SetImageAsBackground"/> + <menuitem name="CopyImageLocationIP" verb="CopyImageLocation"/> +</popup> + +<popup name="EphyImageLinkPopup" verb="FakeToplevel"> + <menuitem name="OpenLinkILP" verb="OpenLink"/> + <menuitem name="OpenLinkInNewWindowILP" verb="OpenLinkInNewWindow"/> + <menuitem name="OpenLinkInNewTabILP" verb="OpenLinkInNewTab"/> + <menuitem name="DownloadLinkILP" verb="DownloadLink"/> + <menuitem name="AddLinkBookmarkILP" verb="AddLinkBookmark"/> + <menuitem name="CopyLinkLocationILP" verb="CopyLinkLocation"/> + <menuitem name="CopyEmailLinkILP" verb="CopyEmail"/> + <separator/> + <menuitem name="OpenImageILP" verb="OpenImage"/> + <menuitem name="OpenImageInNewWindowILP" verb="OpenImageInNewWindow"/> + <menuitem name="OpenImageInNewTabILP" verb="OpenImageInNewTab"/> + <menuitem name="SaveImageAsILP" verb="SaveImageAs"/> + <menuitem name="SetImageAsBackgroundILP" verb="SetImageAsBackground"/> + <menuitem name="CopyImageLocationILP" verb="CopyImageLocation"/> +</popup> + +</popups> </Root> diff --git a/src/ephy-spinner-action.c b/src/ephy-spinner-action.c index 2d7db2dae..3e990f49b 100644 --- a/src/ephy-spinner-action.c +++ b/src/ephy-spinner-action.c @@ -98,6 +98,7 @@ create_tool_item (EggAction *action) ephy_spinner_set_small_mode (EPHY_SPINNER (spinner), TRUE); gtk_container_add (GTK_CONTAINER (button), spinner); egg_tool_item_set_pack_end (EGG_TOOL_ITEM (item), TRUE); + egg_tool_item_set_homogeneous (EGG_TOOL_ITEM (item), FALSE); gtk_widget_show (spinner); g_object_set_data (G_OBJECT (item), "spinner", spinner); diff --git a/src/ephy-tab.c b/src/ephy-tab.c index a46c29c60..52f063fcb 100644 --- a/src/ephy-tab.c +++ b/src/ephy-tab.c @@ -22,11 +22,11 @@ #include "ephy-tab.h" #include "ephy-shell.h" -#include "ephy-embed-popup-bw.h" #include "eel-gconf-extensions.h" #include "ephy-prefs.h" #include "ephy-embed-prefs.h" #include "ephy-debug.h" +#include "egg-menu-merge.h" #include <bonobo/bonobo-i18n.h> #include <libgnomevfs/gnome-vfs-uri.h> @@ -39,12 +39,15 @@ #include <gtk/gtkiconfactory.h> #include <gtk/gtkstyle.h> #include <gtk/gtkselection.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkmenu.h> #include <string.h> struct EphyTabPrivate { EphyEmbed *embed; EphyWindow *window; + EphyEmbedEvent *event; gboolean is_active; TabLoadStatus load_status; char status_message[255]; @@ -195,6 +198,7 @@ ephy_tab_init (EphyTab *tab) tab->priv->embed = ephy_embed_new (G_OBJECT(shell)); tab->priv->window = NULL; + tab->priv->event = NULL; tab->priv->is_active = FALSE; *tab->priv->status_message = '\0'; *tab->priv->link_message = '\0'; @@ -280,6 +284,11 @@ ephy_tab_finalize (GObject *object) g_idle_remove_by_data (tab->priv->embed); + if (tab->priv->event) + { + g_object_unref (tab->priv->event); + } + g_free (tab->priv); G_OBJECT_CLASS (parent_class)->finalize (object); @@ -346,6 +355,12 @@ ephy_tab_get_window (EphyTab *tab) return tab->priv->window; } +EphyEmbedEvent * +ephy_tab_get_event (EphyTab *tab) +{ + return tab->priv->event; +} + static void ephy_tab_update_color (EphyTab *tab) { @@ -813,24 +828,68 @@ ephy_tab_dom_mouse_click_cb (EphyEmbed *embed, } static void +ephy_tab_set_event (EphyTab *tab, + EphyEmbedEvent *event) +{ + if (tab->priv->event) g_object_unref (tab->priv->event); + g_object_ref (event); + tab->priv->event = event; +} + +static void ephy_tab_show_embed_popup (EphyTab *tab, EphyEmbedEvent *event) { - EphyEmbedPopup *popup; + EmbedEventContext context; + const char *popup; + GValue *value; + gboolean framed; EphyWindow *window; - EphyEmbed *embed; + char *path; + GtkWidget *widget; window = ephy_tab_get_window (tab); - embed = ephy_tab_get_embed (tab); - popup = EPHY_EMBED_POPUP (ephy_window_get_popup_factory (window)); - ephy_embed_popup_set_event (popup, event); - ephy_embed_popup_show (popup, embed); + ephy_embed_event_get_property (event, "framed_page", &value); + framed = g_value_get_int (value); + + ephy_embed_event_get_context (event, &context); + + if ((context & EMBED_CONTEXT_LINK) && + (context & EMBED_CONTEXT_IMAGE)) + { + popup = "EphyImageLinkPopup"; + } + else if (context & EMBED_CONTEXT_LINK) + { + popup = "EphyLinkPopup"; + } + else if (context & EMBED_CONTEXT_IMAGE) + { + popup = "EphyImagePopup"; + } + else + { + popup = framed ? "EphyFramedDocumentPopup" : + "EphyDocumentPopup"; + } + + path = g_strconcat ("/popups/", popup, NULL); + g_print (path); + widget = egg_menu_merge_get_widget (EGG_MENU_MERGE (window->ui_merge), + path); + g_free (path); + + g_return_if_fail (widget != NULL); + + ephy_tab_set_event (tab, event); + gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, 2, + gtk_get_current_event_time ()); } static gint ephy_tab_dom_mouse_down_cb (EphyEmbed *embed, - EphyEmbedEvent *event, - EphyTab *tab) + EphyEmbedEvent *event, + EphyTab *tab) { EphyWindow *window; int button; diff --git a/src/ephy-tab.h b/src/ephy-tab.h index fe679f553..82f6d16a6 100644 --- a/src/ephy-tab.h +++ b/src/ephy-tab.h @@ -102,6 +102,8 @@ void ephy_tab_get_size (EphyTab *tab, void ephy_tab_update_control (EphyTab *tab, TabControlID id); +EphyEmbedEvent *ephy_tab_get_event (EphyTab *tab); + G_END_DECLS #endif diff --git a/src/ephy-window.c b/src/ephy-window.c index 538834878..8472fbef8 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -28,7 +28,6 @@ #include "window-commands.h" #include "find-dialog.h" #include "history-dialog.h" -#include "popup-commands.h" #include "ephy-shell.h" #include "eel-gconf-extensions.h" #include "ephy-prefs.h" @@ -37,6 +36,7 @@ #include "ephy-file-helpers.h" #include "statusbar.h" #include "toolbar.h" +#include "popup-commands.h" #include <string.h> #include <libgnome/gnome-i18n.h> @@ -135,10 +135,10 @@ static EggActionGroupEntry ephy_menu_entries [] = { /* View menu */ { "ViewStop", N_("_Stop"), GTK_STOCK_STOP, "Escape", N_("Stop current data transfer"), - G_CALLBACK (window_cmd_view_reload), NULL }, + 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_stop), NULL }, + 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 }, @@ -205,6 +205,56 @@ static EggActionGroupEntry ephy_menu_entries [] = { }; 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; @@ -212,12 +262,12 @@ struct EphyWindowPrivate Toolbar *toolbar; GtkWidget *statusbar; EggActionGroup *action_group; + EggActionGroup *popups_action_group; EphyFavoritesMenu *fav_menu; PPViewToolbar *ppview_toolbar; GtkNotebook *notebook; EphyTab *active_tab; GtkWidget *sidebar; - EphyEmbedPopupBW *embed_popup; EphyDialog *find_dialog; EphyDialog *history_dialog; EphyDialog *history_sidebar; @@ -392,6 +442,11 @@ setup_window (EphyWindow *window) ephy_menu_entries[i].user_data = window; } + for (i = 0; i < ephy_popups_n_entries; i++) + { + ephy_popups_entries[i].user_data = window; + } + merge = egg_menu_merge_new (); action_group = egg_action_group_new ("WindowActions"); @@ -400,6 +455,12 @@ setup_window (EphyWindow *window) egg_menu_merge_insert_action_group (merge, action_group, 0); window->priv->action_group = action_group; + 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; + 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); @@ -421,17 +482,6 @@ setup_window (EphyWindow *window) window); } -static EphyEmbedPopupBW * -setup_popup_factory (EphyWindow *window) -{ -/* EphyEmbedPopupBW *popup; - - popup = ephy_window_get_popup_factory (window); - g_object_set_data (G_OBJECT(popup), "EphyWindow", window); - - return popup;*/ -} - static GtkNotebook * setup_notebook (EphyWindow *window) { @@ -471,7 +521,6 @@ ephy_window_init (EphyWindow *window) 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; @@ -488,9 +537,6 @@ ephy_window_init (EphyWindow *window) /* Setup the window and connect verbs */ setup_window (window); - /* Setup the embed popups factory */ - window->priv->embed_popup = setup_popup_factory (window); - window->priv->fav_menu = ephy_favorites_menu_new (window); /* Setup window contents */ @@ -562,11 +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)); - } - if (window->priv->find_dialog) { g_object_unref (G_OBJECT (window->priv->find_dialog)); @@ -1239,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) { diff --git a/src/ephy-window.h b/src/ephy-window.h index 06618093b..10712e3ff 100644 --- a/src/ephy-window.h +++ b/src/ephy-window.h @@ -20,7 +20,6 @@ #define EPHY_WINDOW_H #include "ephy-embed.h" -#include "ephy-embed-popup-bw.h" #include "ephy-dialog.h" #include "ephy-notebook.h" #include <glib-object.h> @@ -122,8 +121,6 @@ EphyTab *ephy_window_get_active_tab (EphyWindow *window); EphyEmbed *ephy_window_get_active_embed (EphyWindow *window); -EphyEmbedPopupBW *ephy_window_get_popup_factory (EphyWindow *window); - GList *ephy_window_get_tabs (EphyWindow *window); Toolbar *ephy_window_get_toolbar (EphyWindow *window); diff --git a/src/popup-commands.c b/src/popup-commands.c index b7c39ca40..05d715951 100644 --- a/src/popup-commands.c +++ b/src/popup-commands.c @@ -18,47 +18,60 @@ #include "popup-commands.h" #include "ephy-shell.h" +#include "ephy-new-bookmark.h" +#include "ephy-embed-persist.h" +#include "ephy-prefs.h" +#include "ephy-embed-utils.h" +#include "eel-gconf-extensions.h" +#include "ephy-file-helpers.h" -static EphyWindow * -get_window_from_popup (EphyEmbedPopup *popup) +#include <string.h> + +static EphyEmbedEvent * +get_event_info (EphyWindow *window) { - return EPHY_WINDOW (g_object_get_data(G_OBJECT(popup), "EphyWindow")); + EphyEmbedEvent *info; + EphyTab *tab; + + tab = ephy_window_get_active_tab (window); + g_return_val_if_fail (tab != NULL, NULL); + + info = ephy_tab_get_event (tab); + g_return_val_if_fail (info != NULL, NULL); + + return info; } -void popup_cmd_new_window (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_link_in_new_window (EggAction *action, + EphyWindow *window) { EphyEmbedEvent *info; EphyTab *tab; GValue *value; - tab = ephy_window_get_active_tab (get_window_from_popup (popup)); + tab = ephy_window_get_active_tab (window); - info = ephy_embed_popup_get_event (popup); + info = get_event_info (window); ephy_embed_event_get_property (info, "link", &value); ephy_shell_new_tab (ephy_shell, NULL, tab, - g_value_get_string (value), - EPHY_NEW_TAB_IN_NEW_WINDOW); + g_value_get_string (value), + EPHY_NEW_TAB_IN_NEW_WINDOW); } -void popup_cmd_new_tab (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_link_in_new_tab (EggAction *action, + EphyWindow *window) { EphyEmbedEvent *info; EphyTab *tab; - EphyWindow *window; GValue *value; - window = get_window_from_popup (popup); - g_return_if_fail (window != NULL); - tab = ephy_window_get_active_tab (window); - info = ephy_embed_popup_get_event (popup); + info = get_event_info (window); ephy_embed_event_get_property (info, "link", &value); @@ -67,21 +80,17 @@ void popup_cmd_new_tab (BonoboUIComponent *uic, EPHY_NEW_TAB_IN_EXISTING_WINDOW); } -void popup_cmd_image_in_new_tab (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_image_in_new_tab (EggAction *action, + EphyWindow *window) { EphyEmbedEvent *info; EphyTab *tab; - EphyWindow *window; GValue *value; - window = get_window_from_popup (popup); - g_return_if_fail (window != NULL); - tab = ephy_window_get_active_tab (window); - info = ephy_embed_popup_get_event (popup); + info = get_event_info (window); ephy_embed_event_get_property (info, "image", &value); @@ -90,17 +99,17 @@ void popup_cmd_image_in_new_tab (BonoboUIComponent *uic, EPHY_NEW_TAB_IN_EXISTING_WINDOW); } -void popup_cmd_image_in_new_window (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_image_in_new_window (EggAction *action, + EphyWindow *window) { EphyEmbedEvent *info; EphyTab *tab; GValue *value; - tab = ephy_window_get_active_tab (get_window_from_popup (popup)); + tab = ephy_window_get_active_tab (window); - info = ephy_embed_popup_get_event (popup); + info = get_event_info (window); ephy_embed_event_get_property (info, "image", &value); @@ -109,15 +118,14 @@ void popup_cmd_image_in_new_window (BonoboUIComponent *uic, EPHY_NEW_TAB_IN_NEW_WINDOW); } -void popup_cmd_add_bookmark (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_add_link_bookmark (EggAction *action, + EphyWindow *window) { GtkWidget *new_bookmark; EphyBookmarks *bookmarks; - EphyEmbedEvent *info = ephy_embed_popup_get_event (popup); + EphyEmbedEvent *info; EphyEmbed *embed; - GtkWidget *window; GValue *link_title; GValue *link_rel; GValue *link; @@ -127,8 +135,8 @@ void popup_cmd_add_bookmark (BonoboUIComponent *uic, const char *rel; gboolean is_smart; - embed = ephy_embed_popup_get_embed (popup); - window = gtk_widget_get_toplevel (GTK_WIDGET (embed)); + info = get_event_info (window); + embed = ephy_window_get_active_embed (window); ephy_embed_event_get_property (info, "link_is_smart", &link_is_smart); ephy_embed_event_get_property (info, "link", &link); @@ -157,18 +165,14 @@ void popup_cmd_add_bookmark (BonoboUIComponent *uic, gtk_widget_show (new_bookmark); } -void popup_cmd_frame_in_new_tab (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_frame_in_new_tab (EggAction *action, + EphyWindow *window) { EphyTab *tab; - EphyWindow *window; EphyEmbed *embed; char *location; - window = get_window_from_popup (popup); - g_return_if_fail (window != NULL); - tab = ephy_window_get_active_tab (window); embed = ephy_window_get_active_embed (window); @@ -182,18 +186,14 @@ void popup_cmd_frame_in_new_tab (BonoboUIComponent *uic, g_free (location); } -void popup_cmd_frame_in_new_window (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_frame_in_new_window (EggAction *action, + EphyWindow *window) { EphyTab *tab; EphyEmbed *embed; - EphyWindow *window; char *location; - window = get_window_from_popup (popup); - g_return_if_fail (window != NULL); - tab = ephy_window_get_active_tab (window); embed = ephy_window_get_active_embed (window); @@ -207,16 +207,260 @@ void popup_cmd_frame_in_new_window (BonoboUIComponent *uic, g_free (location); } -void popup_cmd_add_frame_bookmark (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +static void +popup_cmd_copy_to_clipboard (EphyWindow *window, const char *text) +{ + gtk_clipboard_set_text (gtk_clipboard_get (GDK_NONE), + text, -1); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY), + text, -1); +} + +void +popup_cmd_copy_page_location (EggAction *action, + EphyWindow *window) +{ + char *location; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + ephy_embed_get_location (embed, FALSE, &location); + popup_cmd_copy_to_clipboard (window, location); + g_free (location); +} + +void +popup_cmd_copy_email (EggAction *action, + EphyWindow *window) +{ + EphyEmbedEvent *info; + const char *location; + GValue *value; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, "email", &value); + location = g_value_get_string (value); + popup_cmd_copy_to_clipboard (window, location); +} + +void +popup_cmd_copy_link_location (EggAction *action, + EphyWindow *window) +{ + EphyEmbedEvent *info; + const char *location; + GValue *value; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, "link", &value); + location = g_value_get_string (value); + popup_cmd_copy_to_clipboard (window, location); +} + +static void +save_property_url (EggAction *action, + EphyWindow *window, + gboolean ask_dest, + gboolean show_progress, + const char *property) +{ + EphyEmbedEvent *info; + const char *location; + GValue *value; + GtkWidget *widget; + EphyEmbedPersist *persist; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, property, &value); + location = g_value_get_string (value); + + widget = GTK_WIDGET (embed); + + persist = ephy_embed_persist_new (embed); + + ephy_embed_persist_set_source (persist, location); + + if (show_progress) + { + ephy_embed_persist_set_flags (persist, + EMBED_PERSIST_SHOW_PROGRESS); + } + + ephy_embed_utils_save (GTK_WIDGET (window), + CONF_STATE_DOWNLOADING_DIR, + ask_dest, + FALSE, + persist); +} + +void +popup_cmd_open_link (EggAction *action, + EphyWindow *window) +{ + EphyEmbedEvent *info; + const char *location; + GValue *value; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, "link", &value); + location = g_value_get_string (value); + + ephy_embed_load_url (embed, location); +} + +void +popup_cmd_download_link (EggAction *action, + EphyWindow *window) +{ + save_property_url (action, window, + eel_gconf_get_boolean + (CONF_STATE_DOWNLOADING_DIR), + TRUE, "link"); +} + +void +popup_cmd_save_image_as (EggAction *action, + EphyWindow *window) +{ + save_property_url (action, window, TRUE, FALSE, "image"); +} + +#define CONF_DESKTOP_BG_PICTURE "/desktop/gnome/background/picture_filename" +#define CONF_DESKTOP_BG_TYPE "/desktop/gnome/background/picture_options" + +static void +background_download_completed (EphyEmbedPersist *persist, + gpointer data) +{ + const char *bg; + char *type; + + ephy_embed_persist_get_dest (persist, &bg); + eel_gconf_set_string (CONF_DESKTOP_BG_PICTURE, bg); + + type = eel_gconf_get_string (CONF_DESKTOP_BG_TYPE); + if (type || strcmp (type, "none") == 0) + { + eel_gconf_set_string (CONF_DESKTOP_BG_TYPE, + "wallpaper"); + } + + g_free (type); + + g_object_unref (persist); +} + +void +popup_cmd_set_image_as_background (EggAction *action, + EphyWindow *window) +{ + EphyEmbedEvent *info; + const char *location; + char *dest, *base; + GValue *value; + EphyEmbedPersist *persist; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, "image", &value); + location = g_value_get_string (value); + + persist = ephy_embed_persist_new (embed); + + base = g_path_get_basename (location); + dest = g_build_filename (ephy_dot_dir (), + base, NULL); + + ephy_embed_persist_set_source (persist, location); + ephy_embed_persist_set_dest (persist, dest); + + ephy_embed_persist_save (persist); + + g_signal_connect (persist, "completed", + G_CALLBACK (background_download_completed), + NULL); + + g_free (dest); + g_free (base); +} + +void +popup_cmd_copy_image_location (EggAction *action, + EphyWindow *window) +{ + EphyEmbedEvent *info; + const char *location; + GValue *value; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, "image", &value); + location = g_value_get_string (value); + popup_cmd_copy_to_clipboard (window, location); +} + +void +popup_cmd_save_background_as (EggAction *action, + EphyWindow *window) +{ + save_property_url (action, window, TRUE, FALSE, "background_image"); +} + +void +popup_cmd_open_frame (EggAction *action, + EphyWindow *window) { - /* FIXME implement */ + char *location; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + ephy_embed_get_location (embed, FALSE, &location); + + ephy_embed_load_url (embed, location); } -void popup_cmd_view_source (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname) +void +popup_cmd_open_image (EggAction *action, + EphyWindow *window) { - /* FIXME implement */ + EphyEmbedEvent *info; + const char *location; + GValue *value; + EphyEmbed *embed; + + embed = ephy_window_get_active_embed (window); + g_return_if_fail (embed != NULL); + + info = get_event_info (window); + ephy_embed_event_get_property (info, "image", &value); + location = g_value_get_string (value); + + ephy_embed_load_url (embed, location); } + diff --git a/src/popup-commands.h b/src/popup-commands.h index e5b369c76..c2ac4fb36 100644 --- a/src/popup-commands.h +++ b/src/popup-commands.h @@ -16,43 +16,69 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "ephy-embed-popup.h" -#include "ephy-new-bookmark.h" +#include "egg-action.h" +#include "ephy-window.h" -#include <bonobo/bonobo-ui-component.h> +void popup_cmd_link_in_new_window (EggAction *action, + EphyWindow *window); -void popup_cmd_new_window (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_link_in_new_tab (EggAction *action, + EphyWindow *window); -void popup_cmd_new_tab (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_image_in_new_tab (EggAction *action, + EphyWindow *window); -void popup_cmd_image_in_new_tab (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_image_in_new_window (EggAction *action, + EphyWindow *window); -void popup_cmd_image_in_new_window (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_add_link_bookmark (EggAction *action, + EphyWindow *window); -void popup_cmd_add_bookmark (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_frame_in_new_tab (EggAction *action, + EphyWindow *window); -void popup_cmd_frame_in_new_tab (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_frame_in_new_window (EggAction *action, + EphyWindow *window); -void popup_cmd_frame_in_new_window (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_add_frame_bookmark (EggAction *action, + EphyWindow *window); -void popup_cmd_add_frame_bookmark (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); +void popup_cmd_view_source (EggAction *action, + EphyWindow *window); + +void popup_cmd_copy_page_location (EggAction *action, + EphyWindow *window); + +void popup_cmd_copy_email (EggAction *action, + EphyWindow *window); + +void popup_cmd_copy_link_location (EggAction *action, + EphyWindow *window); + +void popup_cmd_open_link (EggAction *action, + EphyWindow *window); + +void popup_cmd_download_link (EggAction *action, + EphyWindow *window); + +void popup_cmd_set_image_as_background (EggAction *action, + EphyWindow *window); + +void popup_cmd_copy_image_location (EggAction *action, + EphyWindow *window); + +void popup_cmd_save_background_as (EggAction *action, + EphyWindow *window); + +void popup_cmd_open_frame (EggAction *action, + EphyWindow *window); + +void popup_cmd_open_image (EggAction *action, + EphyWindow *window); + +void popup_cmd_download_link (EggAction *action, + EphyWindow *window); + +void popup_cmd_save_image_as (EggAction *action, + EphyWindow *window); -void popup_cmd_view_source (BonoboUIComponent *uic, - EphyEmbedPopup *popup, - const char* verbname); |