[Xfce4-commits] <midori:master> Work around copying bug in WebKitGTK+
Christian Dywan
noreply at xfce.org
Sun Mar 6 18:16:01 CET 2011
Updating branch refs/heads/master
to fb9629c1aa53d743fa9cef6347789cb147060749 (commit)
from de0ede905f6b641677111cae785e0917024a7d56 (commit)
commit fb9629c1aa53d743fa9cef6347789cb147060749
Author: Christian Dywan <christian at twotoasts.de>
Date: Sun Mar 6 18:13:54 2011 +0100
Work around copying bug in WebKitGTK+
Fixes: https://bugs.launchpad.net/midori/+bug/707888
midori/midori-browser.c | 9 +++++++++
midori/midori-view.c | 23 +++++------------------
midori/sokoke.c | 13 +++++++++++++
midori/sokoke.h | 4 ++++
4 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 584ca48..4f04691 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -2443,6 +2443,15 @@ _action_copy_activate (GtkAction* action,
MidoriBrowser* browser)
{
GtkWidget* widget = gtk_window_get_focus (GTK_WINDOW (browser));
+ /* Work around broken clipboard handling for the sake of the user */
+ if (WEBKIT_IS_WEB_VIEW (widget))
+ {
+ GtkWidget* scrolled = gtk_widget_get_parent (widget);
+ GtkWidget* view = gtk_widget_get_parent (scrolled);
+ const gchar* selected = midori_view_get_selected_text (MIDORI_VIEW (view));
+ sokoke_widget_copy_clipboard (widget, selected);
+ return;
+ }
if (G_LIKELY (widget) && g_signal_lookup ("copy-clipboard", G_OBJECT_TYPE (widget)))
g_signal_emit_by_name (widget, "copy-clipboard");
}
diff --git a/midori/midori-view.c b/midori/midori-view.c
index a193a97..2b87ae6 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -1974,19 +1974,6 @@ gtk_widget_scroll_event_cb (WebKitWebView* web_view,
#if WEBKIT_CHECK_VERSION (1, 1, 15)
static void
-midori_web_view_set_clipboard (GtkWidget* widget,
- const gchar* text)
-{
- GdkDisplay* display = gtk_widget_get_display (widget);
- GtkClipboard* clipboard;
-
- clipboard = gtk_clipboard_get_for_display (display, GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_text (clipboard, text, -1);
- clipboard = gtk_clipboard_get_for_display (display, GDK_SELECTION_PRIMARY);
- gtk_clipboard_set_text (clipboard, text, -1);
-}
-
-static void
midori_web_view_menu_new_window_activate_cb (GtkWidget* widget,
MidoriView* view)
{
@@ -2005,9 +1992,9 @@ midori_web_view_menu_link_copy_activate_cb (GtkWidget* widget,
MidoriView* view)
{
if (g_str_has_prefix (view->link_uri, "mailto:"))
- midori_web_view_set_clipboard (widget, view->link_uri + 7);
+ sokoke_widget_copy_clipboard (widget, view->link_uri + 7);
else
- midori_web_view_set_clipboard (widget, view->link_uri);
+ sokoke_widget_copy_clipboard (widget, view->link_uri);
}
static void
@@ -2037,7 +2024,7 @@ midori_web_view_menu_image_copy_activate_cb (GtkWidget* widget,
MidoriView* view)
{
gchar* uri = katze_object_get_string (view->hit_test, "image-uri");
- midori_web_view_set_clipboard (widget, uri);
+ sokoke_widget_copy_clipboard (widget, uri);
g_free (uri);
}
@@ -2060,7 +2047,7 @@ midori_web_view_menu_video_copy_activate_cb (GtkWidget* widget,
MidoriView* view)
{
gchar* uri = katze_object_get_string (view->hit_test, "media-uri");
- midori_web_view_set_clipboard (widget, uri);
+ sokoke_widget_copy_clipboard (widget, uri);
g_free (uri);
}
@@ -2153,7 +2140,7 @@ static void
midori_web_view_menu_copy_activate_cb (GtkWidget* widget,
MidoriView* view)
{
- midori_web_view_set_clipboard (widget, view->selected_text);
+ sokoke_widget_copy_clipboard (widget, view->selected_text);
}
#endif
diff --git a/midori/sokoke.c b/midori/sokoke.c
index 219fc8f..7bb38b1 100644
--- a/midori/sokoke.c
+++ b/midori/sokoke.c
@@ -2171,3 +2171,16 @@ sokoke_register_privacy_item (const gchar* name,
items = g_list_append (items, item);
return NULL;
}
+
+void
+sokoke_widget_copy_clipboard (GtkWidget* widget,
+ const gchar* text)
+{
+ GdkDisplay* display = gtk_widget_get_display (widget);
+ GtkClipboard* clipboard;
+
+ clipboard = gtk_clipboard_get_for_display (display, GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text (clipboard, text, -1);
+ clipboard = gtk_clipboard_get_for_display (display, GDK_SELECTION_PRIMARY);
+ gtk_clipboard_set_text (clipboard, text, -1);
+}
diff --git a/midori/sokoke.h b/midori/sokoke.h
index 679e684..8813786 100644
--- a/midori/sokoke.h
+++ b/midori/sokoke.h
@@ -280,4 +280,8 @@ sokoke_register_privacy_item (const gchar* name,
const gchar* label,
GCallback clear);
+void
+sokoke_widget_copy_clipboard (GtkWidget* widget,
+ const gchar* text);
+
#endif /* !__SOKOKE_H__ */
More information about the Xfce4-commits
mailing list