equal
deleted
inserted
replaced
62 #include "qimagewriter.h" |
62 #include "qimagewriter.h" |
63 #include "qbuffer.h" |
63 #include "qbuffer.h" |
64 #include "qtextcodec.h" |
64 #include "qtextcodec.h" |
65 |
65 |
66 #include "qdnd_p.h" |
66 #include "qdnd_p.h" |
|
67 #include "qapplication_p.h" |
67 #include "qt_x11_p.h" |
68 #include "qt_x11_p.h" |
68 #include "qx11info_x11.h" |
69 #include "qx11info_x11.h" |
69 |
70 |
70 #include "qwidget_p.h" |
71 #include "qwidget_p.h" |
71 #include "qcursor_p.h" |
72 #include "qcursor_p.h" |
1109 qt_xdnd_current_proxy_target = 0; |
1110 qt_xdnd_current_proxy_target = 0; |
1110 qt_xdnd_source_current_time = 0; |
1111 qt_xdnd_source_current_time = 0; |
1111 waiting_for_status = false; |
1112 waiting_for_status = false; |
1112 } |
1113 } |
1113 |
1114 |
1114 |
1115 // TODO: remove and use QApplication::currentKeyboardModifiers() in Qt 4.8. |
|
1116 static Qt::KeyboardModifiers currentKeyboardModifiers() |
|
1117 { |
|
1118 Window root; |
|
1119 Window child; |
|
1120 int root_x, root_y, win_x, win_y; |
|
1121 uint keybstate; |
|
1122 for (int i = 0; i < ScreenCount(X11->display); ++i) { |
|
1123 if (XQueryPointer(X11->display, QX11Info::appRootWindow(i), &root, &child, |
|
1124 &root_x, &root_y, &win_x, &win_y, &keybstate)) |
|
1125 return X11->translateModifiers(keybstate & 0x00ff); |
|
1126 } |
|
1127 return 0; |
|
1128 } |
1115 |
1129 |
1116 void QX11Data::xdndHandleDrop(QWidget *, const XEvent * xe, bool passive) |
1130 void QX11Data::xdndHandleDrop(QWidget *, const XEvent * xe, bool passive) |
1117 { |
1131 { |
1118 DEBUG("xdndHandleDrop"); |
1132 DEBUG("xdndHandleDrop"); |
1119 if (!qt_xdnd_current_widget) { |
1133 if (!qt_xdnd_current_widget) { |
1156 if (at != -1) |
1170 if (at != -1) |
1157 dropData = QDragManager::dragPrivate(X11->dndDropTransactions.at(at).object)->data; |
1171 dropData = QDragManager::dragPrivate(X11->dndDropTransactions.at(at).object)->data; |
1158 // if we can't find it, then use the data in the drag manager |
1172 // if we can't find it, then use the data in the drag manager |
1159 if (!dropData) |
1173 if (!dropData) |
1160 dropData = (manager->object) ? manager->dragPrivate()->data : manager->dropData; |
1174 dropData = (manager->object) ? manager->dragPrivate()->data : manager->dropData; |
|
1175 |
|
1176 // Drop coming from another app? Update keyboard modifiers. |
|
1177 if (!qt_xdnd_dragging) { |
|
1178 QApplicationPrivate::modifier_buttons = currentKeyboardModifiers(); |
|
1179 } |
1161 |
1180 |
1162 QDropEvent de(qt_xdnd_current_position, possible_actions, dropData, |
1181 QDropEvent de(qt_xdnd_current_position, possible_actions, dropData, |
1163 QApplication::mouseButtons(), QApplication::keyboardModifiers()); |
1182 QApplication::mouseButtons(), QApplication::keyboardModifiers()); |
1164 QApplication::sendEvent(qt_xdnd_current_widget, &de); |
1183 QApplication::sendEvent(qt_xdnd_current_widget, &de); |
1165 if (!de.isAccepted()) { |
1184 if (!de.isAccepted()) { |