summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/kernel/qapplication.cpp46
-rw-r--r--src/widgets/styles/qgtkstyle_p.cpp11
-rw-r--r--src/widgets/widgets/qtabbar.cpp8
3 files changed, 54 insertions, 11 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 9d3c5f8616..ed6262ce93 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -2709,16 +2709,48 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
if (receiver->isWindowType())
QGuiApplicationPrivate::sendQWindowEventToQPlatformWindow(static_cast<QWindow *>(receiver), e);
- // capture the current mouse/keyboard state
if(e->spontaneous()) {
- if (e->type() == QEvent::MouseButtonPress
- || e->type() == QEvent::MouseButtonRelease) {
+ // Capture the current mouse and keyboard states. Doing so here is
+ // required in order to support QTestLib synthesized events. Real mouse
+ // and keyboard state updates from the platform plugin are managed by
+ // QGuiApplicationPrivate::process(Mouse|Wheel|Key|Touch|Tablet)Event();
+ switch (e->type()) {
+ case QEvent::MouseButtonPress:
+ {
QMouseEvent *me = static_cast<QMouseEvent*>(e);
- if(me->type() == QEvent::MouseButtonPress)
- QApplicationPrivate::mouse_buttons |= me->button();
- else
- QApplicationPrivate::mouse_buttons &= ~me->button();
+ QApplicationPrivate::modifier_buttons = me->modifiers();
+ QApplicationPrivate::mouse_buttons |= me->button();
+ break;
+ }
+ case QEvent::MouseButtonRelease:
+ {
+ QMouseEvent *me = static_cast<QMouseEvent*>(e);
+ QApplicationPrivate::modifier_buttons = me->modifiers();
+ QApplicationPrivate::mouse_buttons &= ~me->button();
+ break;
+ }
+ case QEvent::KeyPress:
+ case QEvent::KeyRelease:
+ case QEvent::MouseMove:
+#ifndef QT_NO_WHEELEVENT
+ case QEvent::Wheel:
+#endif
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
+#ifndef QT_NO_TABLETEVENT
+ case QEvent::TabletMove:
+ case QEvent::TabletPress:
+ case QEvent::TabletRelease:
+#endif
+ {
+ QInputEvent *ie = static_cast<QInputEvent*>(e);
+ QApplicationPrivate::modifier_buttons = ie->modifiers();
+ break;
}
+ default:
+ break;
+ }
}
#ifndef QT_NO_GESTURES
diff --git a/src/widgets/styles/qgtkstyle_p.cpp b/src/widgets/styles/qgtkstyle_p.cpp
index ba41482ec5..782ef8d483 100644
--- a/src/widgets/styles/qgtkstyle_p.cpp
+++ b/src/widgets/styles/qgtkstyle_p.cpp
@@ -75,6 +75,7 @@
#include <QtWidgets/QToolBar>
#include <QtWidgets/QToolButton>
+#ifndef Q_OS_MAC
// X11 Includes:
// the following is necessary to work around breakage in many versions
@@ -90,6 +91,7 @@
#undef XRegisterIMInstantiateCallback
#undef XUnregisterIMInstantiateCallback
#undef XSetIMValues
+#endif
QT_BEGIN_NAMESPACE
@@ -210,7 +212,9 @@ Ptr_gconf_client_get_bool QGtkStylePrivate::gconf_client_get_bool = 0;
Ptr_gnome_icon_lookup_sync QGtkStylePrivate::gnome_icon_lookup_sync = 0;
Ptr_gnome_vfs_init QGtkStylePrivate::gnome_vfs_init = 0;
+#ifndef Q_OS_MAC
typedef int (*x11ErrorHandler)(Display*, XErrorEvent*);
+#endif
QT_END_NAMESPACE
@@ -540,10 +544,14 @@ void QGtkStylePrivate::initGtkWidgets() const
}
if (QGtkStylePrivate::gtk_init) {
+#ifndef Q_OS_MAC
// Gtk will set the Qt error handler so we have to reset it afterwards
x11ErrorHandler qt_x_errhandler = XSetErrorHandler(0);
+#endif
QGtkStylePrivate::gtk_init (NULL, NULL);
+#ifndef Q_OS_MAC
XSetErrorHandler(qt_x_errhandler);
+#endif
// make a window
GtkWidget* gtkWindow = QGtkStylePrivate::gtk_window_new(GTK_WINDOW_POPUP);
@@ -967,13 +975,14 @@ void QGtkStylePrivate::setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *p
QWidget *modalFor = parent ? parent->window() : qApp->activeWindow();
if (modalFor) {
QGtkStylePrivate::gtk_widget_realize(gtkFileChooser); // Creates X window
+#ifndef Q_OS_MAC
XSetTransientForHint(QGtkStylePrivate::gdk_x11_drawable_get_xdisplay(gtkFileChooser->window),
QGtkStylePrivate::gdk_x11_drawable_get_xid(gtkFileChooser->window),
modalFor->winId());
#ifdef Q_WS_X11
QGtkStylePrivate::gdk_x11_window_set_user_time (gtkFileChooser->window, QX11Info::appUserTime());
#endif
-
+#endif
}
QFileInfo fileinfo(dir);
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index 8cd86dd3f1..84a1668b3c 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -1182,9 +1182,11 @@ void QTabBar::setCurrentIndex(int index)
d->layoutTab(index);
#ifndef QT_NO_ACCESSIBILITY
if (QAccessible::isActive()) {
- QAccessibleEvent focusEvent(this, QAccessible::Focus);
- focusEvent.setChild(index);
- QAccessible::updateAccessibility(&focusEvent);
+ if (hasFocus()) {
+ QAccessibleEvent focusEvent(this, QAccessible::Focus);
+ focusEvent.setChild(index);
+ QAccessible::updateAccessibility(&focusEvent);
+ }
QAccessibleEvent selectionEvent(this, QAccessible::Selection);
selectionEvent.setChild(index);
QAccessible::updateAccessibility(&selectionEvent);