aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/ephy-window.c103
-rw-r--r--src/popup-commands.c115
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);
}