summaryrefslogtreecommitdiffstats
path: root/opensuse/core/qt3/0048-qclipboard_hack_80072.patch
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core/qt3/0048-qclipboard_hack_80072.patch')
-rw-r--r--opensuse/core/qt3/0048-qclipboard_hack_80072.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/opensuse/core/qt3/0048-qclipboard_hack_80072.patch b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch
new file mode 100644
index 000000000..2f508019b
--- /dev/null
+++ b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch
@@ -0,0 +1,51 @@
+qt-bugs@ issue : none, probably even won't be
+bugs.kde.org number : 80072
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+A crude hack for KDE #80072. No good idea how to fix it properly yet :(.
+
+================================================================================
+Index: src/kernel/qclipboard_x11.cpp
+===================================================================
+--- src/kernel/qclipboard_x11.cpp.orig
++++ src/kernel/qclipboard_x11.cpp
+@@ -112,6 +112,7 @@ static int pending_timer_id = 0;
+ static bool pending_clipboard_changed = FALSE;
+ static bool pending_selection_changed = FALSE;
+
++Q_EXPORT bool qt_qclipboard_bailout_hack = false;
+
+ // event capture mechanism for qt_xclb_wait_for_event
+ static bool waiting_for_data = FALSE;
+@@ -464,6 +465,15 @@ static Bool checkForClipboardEvents(Disp
+ || e->xselectionclear.selection == qt_xa_clipboard)));
+ }
+
++static bool selection_request_pending = false;
++
++static Bool check_selection_request_pending( Display*, XEvent* e, XPointer )
++ {
++ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId())
++ selection_request_pending = true;
++ return False;
++ }
++
+ bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event,
+ int timeout )
+ {
+@@ -515,6 +525,14 @@ bool qt_xclb_wait_for_event( Display *dp
+ do {
+ if ( XCheckTypedWindowEvent(dpy,win,type,event) )
+ return TRUE;
++ if( qt_qclipboard_bailout_hack ) {
++ XEvent dummy;
++ selection_request_pending = false;
++ if ( owner != NULL )
++ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL);
++ if( selection_request_pending )
++ return TRUE;
++ }
+
+ // process other clipboard events, since someone is probably requesting data from us
+ XEvent e;