diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/ephy-window.c | 103 | ||||
-rw-r--r-- | src/popup-commands.c | 115 |
3 files changed, 119 insertions, 101 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index df99d39f9..1b48bb924 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -282,8 +282,8 @@ MAINTAINERCLEANFILES = $(stamp_files) $(BUILT_SOURCES) if ENABLE_INTROSPECTION EPHY_GIR_H_FILES = \ - $(top_srcdir)/embed/ephy-embed-event.h \ $(top_srcdir)/embed/ephy-embed.h \ + $(top_srcdir)/embed/ephy-embed-event.h \ $(top_srcdir)/embed/ephy-embed-persist.h \ $(top_srcdir)/embed/ephy-embed-shell.h \ $(top_srcdir)/embed/ephy-embed-single.h \ diff --git a/src/ephy-window.c b/src/ephy-window.c index 888d14f89..360eaf110 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -2050,30 +2050,30 @@ embed_popup_deactivate_cb (GtkWidget *popup, } static char * -get_name_from_address_value (const GValue *value) +get_name_from_address_value (const char *path) { char *name; - name = g_path_get_basename (g_value_get_string (value)); + name = g_path_get_basename (path); return name != NULL ? name : g_strdup (""); } static void -update_popups_tooltips (EphyWindow *window, EphyEmbedEvent *event) +update_popups_tooltips (EphyWindow *window, GdkEventButton *event, WebKitHitTestResult *hit_test_result) { - EphyEmbedEventContext context; + guint context; GtkActionGroup *group = window->priv->popups_action_group; - const GValue *value; GtkAction *action; char *tooltip, *name; - context = ephy_embed_event_get_context (event); + g_object_get (hit_test_result, "context", &context, NULL); - if (context & EPHY_EMBED_CONTEXT_IMAGE) + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE) { - value = ephy_embed_event_get_property (event, "image"); - name = get_name_from_address_value (value); + char *uri; + g_object_get (hit_test_result, "image-uri", &uri, NULL); + name = get_name_from_address_value (uri); action = gtk_action_group_get_action (group, "OpenImage"); tooltip = g_strdup_printf (_("Open image “%s”"), name); @@ -2091,14 +2091,15 @@ update_popups_tooltips (EphyWindow *window, EphyEmbedEvent *event) g_free (tooltip); action = gtk_action_group_get_action (group, "CopyImageLocation"); - tooltip = g_strdup_printf (_("Copy image address “%s”"), - g_value_get_string (value)); + tooltip = g_strdup_printf (_("Copy image address “%s”"), uri); g_object_set (action, "tooltip", tooltip, NULL); g_free (tooltip); + g_free (uri); g_free (name); } +#if 0 if (context & EPHY_EMBED_CONTEXT_EMAIL_LINK) { value = ephy_embed_event_get_property (event, "link"); @@ -2115,46 +2116,49 @@ update_popups_tooltips (EphyWindow *window, EphyEmbedEvent *event) g_object_set (action, "tooltip", tooltip, NULL); g_free (tooltip); } +#endif - if (context & EPHY_EMBED_CONTEXT_LINK) + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { - value = ephy_embed_event_get_property (event, "link"); + char *uri; + g_object_get (hit_test_result, "link-uri", &uri, NULL); action = gtk_action_group_get_action (group, "DownloadLink"); - name = get_name_from_address_value (value); + name = get_name_from_address_value (uri); tooltip = g_strdup_printf (_("Save link “%s”"), name); g_object_set (action, "tooltip", tooltip, NULL); g_free (name); g_free (tooltip); action = gtk_action_group_get_action (group, "BookmarkLink"); - tooltip = g_strdup_printf (_("Bookmark link “%s”"), - g_value_get_string (value)); + tooltip = g_strdup_printf (_("Bookmark link “%s”"), uri); g_object_set (action, "tooltip", tooltip, NULL); g_free (tooltip); action = gtk_action_group_get_action (group, "CopyLinkAddress"); - tooltip = g_strdup_printf (_("Copy link's address “%s”"), - g_value_get_string (value)); + tooltip = g_strdup_printf (_("Copy link's address “%s”"), uri); g_object_set (action, "tooltip", tooltip, NULL); g_free (tooltip); + g_free (uri); } } static void show_embed_popup (EphyWindow *window, - EphyEmbed *embed, - EphyEmbedEvent *event) + WebKitWebView *view, + GdkEventButton *event, + WebKitHitTestResult *hit_test_result) { EphyWindowPrivate *priv = window->priv; GtkActionGroup *action_group; GtkAction *action; - EphyEmbedEventContext context; + guint context; const char *popup; - const GValue *value; - gboolean framed, can_open_in_new; + gboolean framed = FALSE, can_open_in_new; GtkWidget *widget; guint button; + char *uri; + EphyEmbedEvent *embed_event; /* Do not show the menu in print preview mode */ if (priv->ppv_mode) @@ -2162,26 +2166,32 @@ show_embed_popup (EphyWindow *window, return; } +#if 0 value = ephy_embed_event_get_property (event, "framed_page"); framed = g_value_get_int (value); +#endif - can_open_in_new = ephy_embed_event_has_property (event, "link-has-web-scheme"); + g_object_get (hit_test_result, "link-uri", &uri, NULL); + can_open_in_new = uri && ephy_embed_utils_address_has_web_scheme (uri); + g_free (uri); - context = ephy_embed_event_get_context (event); + g_object_get (hit_test_result, "context", &context, NULL); LOG ("show_embed_popup context %x", context); +#if 0 if (context & EPHY_EMBED_CONTEXT_EMAIL_LINK) { popup = "/EphyEmailLinkPopup"; update_edit_actions_sensitivity (window, TRUE); } - else if (context & EPHY_EMBED_CONTEXT_LINK) +#endif + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { popup = "/EphyLinkPopup"; update_edit_actions_sensitivity (window, TRUE); } - else if (context & EPHY_EMBED_CONTEXT_INPUT) + else if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE) { popup = "/EphyInputPopup"; update_edit_actions_sensitivity (window, FALSE); @@ -2192,7 +2202,7 @@ show_embed_popup (EphyWindow *window, update_edit_actions_sensitivity (window, TRUE); } - update_popups_tooltips (window, event); + update_popups_tooltips (window, event, hit_test_result); widget = gtk_ui_manager_get_widget (priv->manager, popup); g_return_if_fail (widget != NULL); @@ -2207,15 +2217,17 @@ show_embed_popup (EphyWindow *window, update_popup_actions_visibility (window, - context & EPHY_EMBED_CONTEXT_IMAGE, + context & WEBKIT_HIT_TEST_RESULT_CONTEXT_IMAGE, framed); - _ephy_window_set_context_event (window, event); + embed_event = ephy_embed_event_new (event, hit_test_result); + _ephy_window_set_context_event (window, embed_event); + g_object_unref (embed_event); g_signal_connect (widget, "deactivate", G_CALLBACK (embed_popup_deactivate_cb), window); - button = ephy_embed_event_get_button (event); + button = event->button; if (button == 0) { @@ -2232,22 +2244,6 @@ show_embed_popup (EphyWindow *window, } } -static gboolean -tab_context_menu_cb (EphyWebView *view, - EphyEmbedEvent *event, - EphyWindow *window) -{ - EphyEmbed *embed; - - g_return_val_if_fail (EPHY_IS_WEB_VIEW (view), FALSE); - embed = EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (view); - g_return_val_if_fail (window->priv->active_embed == embed, FALSE); - - show_embed_popup (window, embed, event); - - return TRUE; -} - #if 0 static gboolean save_property_url (EphyEmbed *embed, @@ -2321,6 +2317,14 @@ ephy_window_dom_mouse_click_cb (WebKitWebView *view, hit_test_result = webkit_web_view_get_hit_test_result (view, event); button = event->button; + + if (event->button == 3) + { + show_embed_popup (window, view, event, hit_test_result); + g_object_unref (hit_test_result); + return TRUE; + } + modifier = event->state; g_object_get (hit_test_result, "context", &context, NULL); g_object_unref (hit_test_result); @@ -2731,8 +2735,6 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed) window); g_signal_handlers_disconnect_by_func - (view, G_CALLBACK (tab_context_menu_cb), window); - g_signal_handlers_disconnect_by_func (view, G_CALLBACK (ephy_window_dom_mouse_click_cb), window); } @@ -2816,9 +2818,6 @@ ephy_window_set_active_tab (EphyWindow *window, EphyEmbed *new_embed) g_signal_connect_object (view, "notify::navigation", G_CALLBACK (sync_tab_navigation), window, 0); - g_signal_connect_object (view, "ge-context-menu", - G_CALLBACK (tab_context_menu_cb), - window, G_CONNECT_AFTER); g_signal_connect_object (view, "notify::progress", G_CALLBACK (sync_tab_load_progress), window, 0); diff --git a/src/popup-commands.c b/src/popup-commands.c index 282020818..cbaf1e46b 100644 --- a/src/popup-commands.c +++ b/src/popup-commands.c @@ -34,6 +34,7 @@ #include <string.h> #include <glib/gi18n.h> #include <gtk/gtk.h> +#include <webkit/webkit.h> void popup_cmd_link_in_new_window (GtkAction *action, @@ -41,7 +42,7 @@ popup_cmd_link_in_new_window (GtkAction *action, { EphyEmbedEvent *event; EphyEmbed *embed; - const GValue *value; + GValue value = { 0, }; embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window)); @@ -49,12 +50,13 @@ popup_cmd_link_in_new_window (GtkAction *action, event = ephy_window_get_context_event (window); g_return_if_fail (event != NULL); - value = ephy_embed_event_get_property (event, "link"); + ephy_embed_event_get_property (event, "link-uri", &value); ephy_shell_new_tab (ephy_shell, NULL, embed, - g_value_get_string (value), + g_value_get_string (&value), EPHY_NEW_TAB_OPEN_PAGE | EPHY_NEW_TAB_IN_NEW_WINDOW); + g_value_unset (&value); } void @@ -63,7 +65,7 @@ popup_cmd_link_in_new_tab (GtkAction *action, { EphyEmbedEvent *event; EphyEmbed *embed; - const GValue *value; + GValue value = { 0, }; embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window)); @@ -71,12 +73,13 @@ popup_cmd_link_in_new_tab (GtkAction *action, event = ephy_window_get_context_event (window); g_return_if_fail (event != NULL); - value = ephy_embed_event_get_property (event, "link"); + ephy_embed_event_get_property (event, "link-uri", &value); ephy_shell_new_tab (ephy_shell, window, embed, - g_value_get_string (value), + g_value_get_string (&value), EPHY_NEW_TAB_OPEN_PAGE | EPHY_NEW_TAB_IN_EXISTING_WINDOW); + g_value_unset (&value); } void @@ -84,11 +87,11 @@ popup_cmd_bookmark_link (GtkAction *action, EphyWindow *window) { EphyEmbedEvent *event; - const GValue *link_title; - const GValue *link_rel; - const GValue *link; - const GValue *link_is_smart; - const GValue *linktext; + GValue link_title = { 0, }; + GValue link_rel = { 0, }; + GValue link = { 0, }; + GValue link_is_smart = { 0, }; + GValue linktext = { 0, }; const char *title; const char *location; const char *rel; @@ -97,23 +100,24 @@ popup_cmd_bookmark_link (GtkAction *action, event = ephy_window_get_context_event (window); g_return_if_fail (event != NULL); - link_is_smart = ephy_embed_event_get_property (event, "link_is_smart"); - link = ephy_embed_event_get_property (event, "link"); - link_title = ephy_embed_event_get_property (event, "link_title"); - link_rel = ephy_embed_event_get_property (event, "link_rel"); - linktext = ephy_embed_event_get_property (event, "linktext"); + /* FIXME: this is pretty much broken */ + ephy_embed_event_get_property (event, "link_is_smart", &link_is_smart); + ephy_embed_event_get_property (event, "link-uri", &link); + ephy_embed_event_get_property (event, "link_title", &link_title); + ephy_embed_event_get_property (event, "link_rel", &link_rel); + ephy_embed_event_get_property (event, "linktext", &linktext); - location = g_value_get_string (link); + location = g_value_get_string (&link); g_return_if_fail (location); - rel = g_value_get_string (link_rel); - is_smart = g_value_get_int (link_is_smart); + rel = g_value_get_string (&link_rel); + is_smart = g_value_get_int (&link_is_smart); - title = g_value_get_string (link_title); + title = g_value_get_string (&link_title); if (title == NULL || title[0] == '\0') { - title = g_value_get_string (linktext); + title = g_value_get_string (&linktext); } if (title == NULL || title[0] == '\0') @@ -127,6 +131,11 @@ popup_cmd_bookmark_link (GtkAction *action, } ephy_bookmarks_ui_add_bookmark (GTK_WINDOW (window), location, title); + g_value_unset (&link); + g_value_unset (&link_rel); + g_value_unset (&linktext); + g_value_unset (&link_title); + g_value_unset (&link_is_smart); } static void @@ -143,26 +152,30 @@ popup_cmd_copy_link_address (GtkAction *action, EphyWindow *window) { EphyEmbedEvent *event; - EphyEmbedEventContext context; + guint context; const char *address; - const GValue *value; + GValue value = { 0, }; event = ephy_window_get_context_event (window); g_return_if_fail (event != NULL); context = ephy_embed_event_get_context (event); +#if 0 if (context & EPHY_EMBED_CONTEXT_EMAIL_LINK) { value = ephy_embed_event_get_property (event, "email"); - address = g_value_get_string (value); + address = g_value_get_string (&value); popup_cmd_copy_to_clipboard (window, address); } - else if (context & EPHY_EMBED_CONTEXT_LINK) +#endif + + if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { - value = ephy_embed_event_get_property (event, "link"); - address = g_value_get_string (value); + ephy_embed_event_get_property (event, "link-uri", &value); + address = g_value_get_string (&value); popup_cmd_copy_to_clipboard (window, address); + g_value_unset (&value); } } @@ -200,7 +213,7 @@ save_property_url (GtkAction *action, { EphyEmbedEvent *event; const char *location; - const GValue *value; + GValue value = { 0, }; EphyEmbedPersist *persist; EphyEmbed *embed; @@ -210,8 +223,8 @@ save_property_url (GtkAction *action, embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window)); g_return_if_fail (embed != NULL); - value = ephy_embed_event_get_property (event, property); - location = g_value_get_string (value); + ephy_embed_event_get_property (event, property, &value); + location = g_value_get_string (&value); persist = EPHY_EMBED_PERSIST (g_object_new (EPHY_TYPE_EMBED_PERSIST, NULL)); @@ -230,7 +243,8 @@ save_property_url (GtkAction *action, ephy_embed_persist_save (persist); - g_object_unref (G_OBJECT(persist)); + g_object_unref (G_OBJECT (persist)); + g_value_unset (&value); } void @@ -239,7 +253,7 @@ popup_cmd_open_link (GtkAction *action, { EphyEmbedEvent *event; const char *location; - const GValue *value; + GValue value = { 0, }; EphyEmbed *embed; embed = ephy_embed_container_get_active_child @@ -247,9 +261,10 @@ popup_cmd_open_link (GtkAction *action, g_return_if_fail (embed != NULL); event = ephy_window_get_context_event (window); - value = ephy_embed_event_get_property (event, "link"); - location = g_value_get_string (value); + ephy_embed_event_get_property (event, "link-uri", &value); + location = g_value_get_string (&value); ephy_web_view_load_url (EPHY_WEB_VIEW (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed)), location); + g_value_unset (&value); } void @@ -257,7 +272,7 @@ popup_cmd_download_link (GtkAction *action, EphyWindow *window) { save_property_url (action, _("Download Link"), window, - FALSE, "link"); + FALSE, "link-uri"); } void @@ -265,14 +280,14 @@ popup_cmd_download_link_as (GtkAction *action, EphyWindow *window) { save_property_url (action, _("Save Link As"), window, - TRUE, "link"); + TRUE, "link-uri"); } void popup_cmd_save_image_as (GtkAction *action, EphyWindow *window) { save_property_url (action, _("Save Image As"), - window, TRUE, "image"); + window, TRUE, "image-uri"); } #define GNOME_APPEARANCE_PROPERTIES "gnome-appearance-properties.desktop" @@ -311,7 +326,7 @@ popup_cmd_set_image_as_background (GtkAction *action, EphyEmbedEvent *event; const char *location; char *dest, *base, *base_converted; - const GValue *value; + GValue value = { 0, }; EphyEmbedPersist *persist; EphyEmbed *embed; @@ -321,8 +336,8 @@ popup_cmd_set_image_as_background (GtkAction *action, embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window)); g_return_if_fail (embed != NULL); - value = ephy_embed_event_get_property (event, "image"); - location = g_value_get_string (value); + ephy_embed_event_get_property (event, "image-uri", &value); + location = g_value_get_string (&value); persist = EPHY_EMBED_PERSIST (g_object_new (EPHY_TYPE_EMBED_PERSIST, NULL)); @@ -342,6 +357,7 @@ popup_cmd_set_image_as_background (GtkAction *action, ephy_embed_persist_save (persist); + g_value_unset (&value); g_free (dest); g_free (base); g_free (base_converted); @@ -353,12 +369,13 @@ popup_cmd_copy_image_location (GtkAction *action, { EphyEmbedEvent *event; const char *location; - const GValue *value; + GValue value = { 0, }; event = ephy_window_get_context_event (window); - value = ephy_embed_event_get_property (event, "image"); - location = g_value_get_string (value); + ephy_embed_event_get_property (event, "image-uri", &value); + location = g_value_get_string (&value); popup_cmd_copy_to_clipboard (window, location); + g_value_unset (&value); } void @@ -469,8 +486,8 @@ popup_cmd_open_image (GtkAction *action, { EphyEmbedEvent *event; const char *address; - char *scheme; - const GValue *value; + char *scheme = NULL; + GValue value = { 0, }; EphyEmbed *embed; event = ephy_window_get_context_event (window); @@ -480,11 +497,11 @@ popup_cmd_open_image (GtkAction *action, (EPHY_EMBED_CONTAINER (window)); g_return_if_fail (embed != NULL); - value = ephy_embed_event_get_property (event, "image"); - address = g_value_get_string (value); + ephy_embed_event_get_property (event, "image-uri", &value); + address = g_value_get_string (&value); scheme = g_uri_parse_scheme (address); - if (scheme == NULL) return; + if (scheme == NULL) goto out; if (strcmp (scheme, "file") == 0) { @@ -500,5 +517,7 @@ popup_cmd_open_image (GtkAction *action, save_temp_source (address); } + out: + g_value_unset (&value); g_free (scheme); } |