summaryrefslogtreecommitdiff
path: root/x11-toolkits/qt33/files/0037-dnd-timestamp-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'x11-toolkits/qt33/files/0037-dnd-timestamp-fix.patch')
-rw-r--r--x11-toolkits/qt33/files/0037-dnd-timestamp-fix.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/x11-toolkits/qt33/files/0037-dnd-timestamp-fix.patch b/x11-toolkits/qt33/files/0037-dnd-timestamp-fix.patch
new file mode 100644
index 000000000000..234e1b794705
--- /dev/null
+++ b/x11-toolkits/qt33/files/0037-dnd-timestamp-fix.patch
@@ -0,0 +1,56 @@
+qt-bugs@ issue : 38794
+bugs.kde.org number : 69519
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+ Hello,
+
+please consider applying the attached patch. It changes XDND handling code to
+put the drop timestamp in the right field in the XdndDrop message according
+to http://www.newplanetsoftware.com/xdnd/ . I'm not quite sure why the code
+has the field moved by one, and puts 1<<24 in the flags, but I see it has a
+todo mark next to it. The last snippet of the patch changes it to match the
+XDND spec. I tested briefly with Gtk, Mozilla and OOo, and they still work
+with the patch.
+
+The rest of the patch is for fixing part of
+http://bugs.kde.org/show_bug.cgi?id=69519, when the user drags some data to
+the desktop, and desktop in response popups a dialog asking for filename.
+Without the X user timestamp (qt-bugs@ issue 24923) being updated after the
+drop, KWin's focus stealing prevention will refuse to activate the dialog. As
+the XdndDrop message is kind of an user action too, the timestamp should be
+updated.
+
+--- src/kernel/qdnd_x11.cpp.sav 2004-01-05 19:18:33.000000000 +0100
++++ src/kernel/qdnd_x11.cpp 2004-01-08 19:08:52.000000000 +0100
+@@ -81,6 +81,7 @@ extern void qt_leave_modal( QWidget *wid
+ extern Window qt_x11_findClientWindow( Window, Atom, bool );
+ extern Atom qt_wm_state;
+ extern Time qt_x_time;
++extern Time qt_x_user_time;
+
+ // this stuff is copied from qclb_x11.cpp
+
+@@ -834,6 +835,9 @@ void qt_handle_xdnd_drop( QWidget *, con
+ // l[0], qt_xdnd_dragsource_xid );
+ return;
+ }
++
++ if( l[2] != 0 )
++ qt_x_user_time = l[2];
+ if ( qt_xdnd_source_object )
+ qt_xdnd_source_object->setTarget( qt_xdnd_current_widget );
+
+@@ -1366,9 +1370,9 @@ void QDragManager::drop()
+ drop.format = 32;
+ drop.message_type = qt_xdnd_drop;
+ drop.data.l[0] = object->source()->winId();
+- drop.data.l[1] = 1 << 24; // flags
+- drop.data.l[2] = 0; // ###
+- drop.data.l[3] = qt_x_time;
++ drop.data.l[1] = 0; // flags
++ drop.data.l[2] = qt_x_time;
++ drop.data.l[3] = 0;
+ drop.data.l[4] = 0;
+
+ QWidget * w = QWidget::find( qt_xdnd_current_proxy_target );