summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpeseng@src.gnome.org>2003-01-20 17:53:25 +0000
committerMarco Pesenti Gritti <mpeseng@src.gnome.org>2003-01-20 17:53:25 +0000
commit65a5de0eb022b5f37e84606d979dece9eff4bb1b (patch)
treefb55b3e8ad4e849cddb8945fceb5541a18da976b
parentaf19c78b7eb54828ce3630f01e46c5f020b9461f (diff)
downloadepiphany-eog-menu-api.tar.gz
implement context menuseog-menu-api
-rw-r--r--ChangeLog27
-rw-r--r--data/ui/epiphany-toolbar.xml.in15
-rw-r--r--data/ui/epiphany-ui.xml.in71
-rw-r--r--src/ephy-spinner-action.c1
-rw-r--r--src/ephy-tab.c77
-rw-r--r--src/ephy-tab.h2
-rw-r--r--src/ephy-window.c104
-rw-r--r--src/ephy-window.h3
-rw-r--r--src/popup-commands.c364
-rw-r--r--src/popup-commands.h86
10 files changed, 609 insertions, 141 deletions
diff --git a/ChangeLog b/ChangeLog
index e1b06e079..043126401 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);