The reason for this bug seems to be related to how we wait for
more events in the event dispatcher. We use the nextEventMatchingMask
function, which already in Qt4 showed to have problems when telling
it to not dequeue the event. The solution back then was to
tell it to dequeue the event, and instead repost in front again.
Why this was changed in Qt5 is uncertain (other than it being tempting)
but moving the same code back in will solve the bug.
Note that this bug might also stem from the fact that the run loop
sources we add in the event dispatcher fires before the application
is really ready to show modal dialogs. E.g refusing to execute a
modal dialog before NSAppDelegate applicationWillFinishLaunching
is called will also fix the problem. But this code change is to big
atm, and can easily introduce other unforeseen regressions.
Task-number: QTBUG-28283
Change-Id: I07cd109568c2b9c782cf5120a9eb2ac71128cada
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Borrowed some code from QWindowsFontDatabase::createEngine that will
help ensure our fallback options are thorough enough to display say
chinese glyphs when using the QRawFont + QTextLayout combination that
QtWebKit relies on.
Task-number: QTWEBKIT-383
Change-Id: Ie4c1d5ef7d58588afaa436c89a9575ffd646c314
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Since Mac's typically just have one button for their mice then pressing
Control then clicking the button should end it as a right mouse button
event.
Task-number: QTBUG-28350
Change-Id: Iabcac5b315c36cb8cd062c27d7b1506bc066f5bb
Reviewed-by: Liang Qi <liang.qi@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
we were already installing them into QtCore/private, so turn them into
proper private headers to start with. this cleans up our project files.
Change-Id: I0795f79e03b60b5854de9e4dc339e9b5a5e6fd87
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Fix the plugin compilation after cd34da5426
renamed the QWindow API.
Change-Id: I3ec4ce9ae2df9a66f6bf24a18277bc59c05d2e8e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
NSPanels have builtin support to work with modal sessions.
Task-number: QTBUG-28111
Change-Id: Ifeb6de03129e77aad744b3989931964c375cdbc7
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Bring Qt 5 on par with Qt 4, prepare for more comprehensive
support later on.
Introduce device independent pixels (dips), device pixels,
and devicePixelRatio. Add high-dpi support to QPainter,
QGLWidget, the cocoa platform plugin, mac and fusion styles.
Dips are similar to CSS pixels, Apple points and
Android density-independent pixels. Device pixels
are pixels in the backing store/physical pixels on screen.
devicePixelRatio is the ratio between them, which is
1.0 on standard displays and 2.0 on "retina" displays.
New API:
QImage::devicePixelRatio() and setDevicePixelRatio()
QPixmap::devicePixelRatio() and setDevicePixelRatio()
QWindow::devicePixelRatio()
QScreen::devicePixelRatio()
QGuiApplicaiton::devicePixelRatio()
Change-Id: If98c3ca9bfdf0e1bdbcf7574cd5b912c9ff63856
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
It's again possible for QWindows and widget windows to go into
fullscreen mode on the Mac.
Change-Id: I7b304a135838394ef0392f89be4f225f2949fad3
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
The accessibility implementation is unstable and
causes application crashes. Disable until it has
been stabilized.
Change-Id: Ic34361a0ad599c6f92df722499d274fe0655646b
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Commit 26db7de13d introduced the
modal session cleanup for Cocoa print dialog before running the
modal event loop for the dialog. Add the same cleanup for Cocoa
file, font and color dialog helpers.
Task-number: QTBUG-28146
Change-Id: Ifeb7c82566db35f0c6654be7762e9aaffbafb900
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
The buffer count check should take place right after buffers are created. For
some reason, the buffer count value inside libscreen may become incosistent during
the course of the program.
Change-Id: Icbbaf4734eac5b0c5c95bdd93771899f9fcdb7db
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
NSOpenGLContext expexts an -update call whenever the
physical position of the view it draws to changes
on screen. Since we don't get geometry callbacks for such
views when the parent view moves, we need to
register a special notification for that case, and
tell Qt that we need to repaint the QWindow that the
view is backing.
This case does not hit very often, but is evident in
MDI applications where the subwindows are OpenGL
backed QGraphicsView widgets. Dragging the subwindows
around produces garbage inside the windows.
Change-Id: I1b162470b03cca6ed722c6c54080459f2c5e91d9
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
In blackberry, activation events come through the navigator,
but we might not have a navigator.
Change-Id: I0d9e1a08336aa403035fdf00be46d839a83f4b58
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Filtering touch events depending on Qt::WA_AcceptTouchEvents
is not trivial. I thought about doing so in
QWidgetWindow::handleTouchEvent but the target widget (not
window), which has to be checked, has to be obtained using
the primary touch event's position etc.
Thus that is not part of this commit and will be done in a
followup.
Change-Id: I876ee72acd7fdfbe46da61c6eb3c5891ea319cd8
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
As 672e7c875e did changing pos() to
position() and setPos() to setPosition().
Luckily there's not much code that uses these.
Change-Id: I1e1982f00412a22bd376e667a5e8c30b6149f9b5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Change "else" case to support compiling on 10.7+
and deploying on 10.6
Task-number: QTBUG-28060
Change-Id: Iaaeaaefe98083863ed750c7cb320db02e16543af
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
When we get a leave event we peek ahead in the queue to see if there's
an enter event already pending. If so we use
QWindowSystemInterface::handleEnterLeave() instead of two separate
window system interface events, so that you don't get leave and enter
events for the whole parent chain when moving the mouse cursor between
two neighbouring native child widgets.
We skip VIRTUAL events as they are generated for parent windows, and we
only care about the bottom-most window that is being entered / left. Qt
can take care of the rest since it knows the QWindow hierarchy.
We need to not skip leave events with detail set to INFERIOR, since Qt
expects to get a handleEnterLeave() when the mouse moves from a parent
window to a child window.
Task-number: QTBUG-27550
Change-Id: I7457d2e59d8b694081f2e43a16cd2e58d769624e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Child QCocoaWindows don't have an assigned NSWindow, but still get a
QNSView as backing store. That QNSView is added as a subview to
the parent window's QNSView. That would leave an unmanaged QNSView
alive.
Change-Id: I10f57fb971f7aa1e278bb0af4217052d1e4bb0bc
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
The resons for this bug is that Qt can share the same backingstore
between several windows (if they exist in the same hierarchy), but
this was just not supported by the Cocoa plugin.
This patch will make sure that we pay attention to which window
the QCocoaBackingStore is told to flush, and forward this information
to the QNSView that backs it up. Inside the views drawRect
function we then take some extra steps to get the correct sub-part
of the possibly shared backingstore image.
This patch also does some effort to ensure that we recreate the
backingstore image as little as possible, as we can often get
several resizes to the backingstore before we actually draw anything.
Moreover, by being a bit careful on how we tell UiKit to update
the view upon a flush, we can minimize the number of drawRect calls
(and then CGImageRef creations) we need to do. This patch actually
ends up improving resize/repaint performance a lot as well.
QT-BUG: 27390
Change-Id: I2c2a26b149fa855411b6bff8b9cc9a61694ae72f
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
This change enables receiving the native NSOpenGLContext that is used
by a QOpenGLContext. This clearly is non-public api that is only meant to
be used as a last resort for cases where it is really necessary to
get hold of a native context object.
Change-Id: Iea7c6abb458acc7aa15926052673270d25d1d9d1
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
If the include of egl.h does nasty things with X11-defines
(this happens with the imx6 gpu-drivers) errors are avoided if
the include of XInput2.h is next to the other X-includes,
and not after include of egl.h
Change-Id: I182d0e1fcf3fa3e6abce880d34e63cc1d2ce8ed4
Reviewed-by: Laszlo Agocs <lagocs83@gmail.com>
Adds the fullscreen button on Mac OS X. Has no effect
on other platforms. Regarding the name I dropped the
"Mac" prefix (like MacWindowToolBarButtonHint). Other
platforms can use and we don't want to accumulate "Mac"
API's.
Change logic in QCocoaWindow check for this flag instead
of using WindowsMaximizebutton.
Change-Id: I9f2db75e8e71b3da36777c7e48852eda3ce9d534
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Bare QKeyEvent missing some useful info for input method.
Use new construct of QKeyEvent to create extended QKeyEvent
Change-Id: I8c89e80e7329b92e3e04d5fe52d07c6f6f9e006f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
geometryengine.cpp: In member function 'void
GeometryEngine::drawCubeGeometry(QGLShaderProgram*)':
geometryengine.cpp:159:93: warning: cast to pointer from integer of
different sie [-Wint-to-pointer-cast] geometryengine.cpp:167:95:
warning: cast to pointer f rom integer ofdifferent size
[-Wint-to-pointer-cast]
benchmarking.cpp: In member function 'void TestBenchmark::multiple()':
benchmarking.cpp:85:9: warning: variable 'result' set but not used
[-Wunused-but-set-variable]
benchmarking.cpp: In member function 'void TestBenchmark::series()':
benchmarking.cpp:120:9: warning: variable 'result' set but not used
[-Wunused-but-set-variable]
qstandarditemmodel.cpp:2717:45: warning: unused variable 'd'
[-Wunused-variable]
qxcbconnection.cpp: In member function 'xcb_timestamp_t
QXcbConnection::getTimestamp()': qxcbconnection.cpp:930:40: warning:
suggest parentheses around assignment used as truth value
[-Wparentheses]
tst_qguiapplication.cpp: In constructor
'BlockableWindow::BlockableWindow()': tst_qguiapplication.cpp:340:9:
warning:'BlockableWindow::enters' will be initialized after [-Wreorder]
tst_qguia pplication.cpp:339:9: warning 'int BlockableWindow::leaves'
[-Wreorder] tst_qguiapplication.cpp:342:12: waring: when initialized
here [-Wreorder]
tst_qsqltablemodel.cpp:570:10: warning: unused parameter 'value'
[-Wunused-parameter]
tst_qabstractitemview.cpp:1546:8: warning: unused parameter 'index'
[-Wunused-parameter]
Change-Id: I49c88547182e4669cfde2c2536403fc5573ca2da
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The flushWindowSystemEvents() was added to send the geometry
event synchronously. A side effect was that all input events were
also sent.
We don't want that. We're probably in setGeometry() because some
other input event brought us here, and it's still in the call
stack.
One crashy example is the static method QToolTip::show() which
uses static variables([1]). If we process input events while the
first QToolTip::show() is still on the call stack, it will trigger
a second one, deleting stuff ([1]) that the first invocation will
still need once the stack unwinds.
Change-Id: Iea22419a7f386d6b6231404666092340dfd1afed
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Print Engine key PPK_SuppressSystemPrintStatus was added in Qt4.1
for Cocoa dialog to suppress the progress dialog. In Qt5 all cocoa
code has been removed and this key is now unused.
Change-Id: I3a91e9651e16f81611a9a736163f76acf9f20096
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
The painting bug that we are working around/fixing
here has been observed on 10.7 as well.
Change-Id: Ic29421bcc84405afa085af2f0ed2bc554c684f98
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Teemu Katajisto <teemu.katajisto@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Previously, the screen name was used, which contained the
display name. This was changed to return the xrandr-name.
Task-number: QTBUG-5416
Change-Id: I560143d6d459a8051c9640079cf7d39a3caebfec
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Remove QApplication usage in qcocoasystemtrayicon.mm
Move qt_mac_cg_context from qpaintengine_mac.mm to
qcocoahelpers.mm to make it available in no-widgets
builds.
(Move qt_mac_colorSpaceForDeviceType as well; color
space support needs to be cleaned up later on.)
Change-Id: I724fdb09538d65eae56c26165f3ba53b6814ea78
Reviewed-by: Liang Qi <liang.qi@digia.com>
QPlatformInterface::screenAdded() documentation specifies that first
added screen will be the primary screen, so we need to ensure that
the screen Windows reports as the main display gets added first.
Task-number: QTBUG-27988
Change-Id: Ibc17b05a6c37007ff749fb54ab62d47ffa40f8ac
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
The code which was adapted from Qt4 seems not to work as expected on
current Windows versions. There are no additional mouse move events
after releasing the mouse button from the size grip.
One special behaviour in regards to SizeGrips here seems to be that
there is no WM_LBUTTONUP message but a WM_MOUSEMOVE received when
the mouse button is released from the size grip. Due to mouse event
handling in the Windows plugin that event triggers the desired mouse
release event so everything should be fine.
With the previous implementation the behaviour from the bug report
can be explained by the fact, that the mouseMove event is eaten in
qwindowsmousehandler and so the second mouse click isn't even
delivered. Basically the first click triggers the press event without
a release and the second click does not trigger a press but a release
event.
Task-number: QTBUG-27864
Change-Id: I987c6e01dec4a6b6189ed30959daf7a2fcc17df6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Sending enter and leave events to other windows than the grabbing
window is not logical. The policy should be that only the grabbing
window receives enter and leave events.
Changed the documentation accordingly and provided the necessary
changes to Windows implementation.
Also removed explicit leave event generation for widgets when
popup is opened as that is now redundant.
tst_QWidget::underMouse() test was changed to behave according to
new logic.
Task-number: QTBUG-27871
Change-Id: I127fb8685b4a4206d1a319f42cba491ec02bc8ca
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>