summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoawindow.mm
Commit message (Collapse)AuthorAgeFilesLines
* Implement focus handling of child windows for cocoa.Gunnar Sletta2013-01-231-0/+7
| | | | | Change-Id: I1e05ef39aa67f8febdd27215d8ad05d26ece7caa Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Fix QWidget::setWindowOpacity() when called before show().Friedemann Kleint2012-12-121-0/+5
| | | | | | | | | Pass opacity from the QWidget to QWindow and to the platform windows. Task-number: QTBUG-28477 Change-Id: If5a85d9183bd1ca33dac2052936ecd1e6c0b5f6c Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* Update QNSView geometry on window resize.Morten Johan Sorvig2012-12-071-3/+1
| | | | | | | | | | | | | | | | | Ideally this should not be required since NSWindow should resize the content view automatically. However, in the case of modal QDialogs this does not happen. Add call to updateGeometry in windowDidResize as a workaround, and remove code which called QNSView::setFrameSize with the current size. This will cause duplicate handleGeometryChange calls in the non-qdialog case, add a test to see if the geometry really has changed to prevent that. Change-Id: I29bea23b2ab72f923aeadf8db8cb9131ae177a28 Reviewed-by: Liang Qi <liang.qi@digia.com>
* Mac: fix regression to make dialog resizableLiang Qi2012-12-031-2/+2
| | | | | | | Task-number: QTBUG-28254 Change-Id: I8623a68d589bec17042935ad308f85ddc953540d Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Cocoa: create dialogs as NSPanelsTeemu Katajisto2012-12-011-6/+10
| | | | | | | | | 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>
* Basic high-dpi "retina" support for Qt 5.Morten Johan Sørvig2012-12-011-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* QWidget windows have fullscreen button by default; manual test for itShawn Rutledge2012-12-011-0/+3
| | | | | | | | | | 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>
* Cocoa: Make sure non windowed QCocoaWindows hide their content viewsGabriel de Dietrich2012-11-231-0/+4
| | | | | | Change-Id: I92b8600c513ba033c459b6911ca62fc31698dc4a Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Cocoa: Make sure child windows' QNSView is properly releasedGabriel de Dietrich2012-11-231-0/+2
| | | | | | | | | | 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>
* Add WindowFullscreenButtonHint.Morten Johan Sørvig2012-11-231-5/+4
| | | | | | | | | | | | | | | | 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>
* Cocoa: Properly set QNSView's geometry when it's a subviewGabriel de Dietrich2012-11-221-0/+3
| | | | | | Task-number: QTBUG-26960 Change-Id: Ib8ca76572c868305f378d22c21d13511b4999244 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: fix window focus lost when opening comboboxRichard Moe Gustavsen2012-11-121-6/+4
| | | | | | | | | | | | | | In cocoa, saying that a panel accepts key events, will make it receive key events, but also show it as the active window on screen. The former we dont really have to care about, since Qt will take care of forwarding events to the popup for us anyway, even when they target another window. So the only reason to actually let a panel become key window, is when we want it to become active. And for popups, we only want this to happend for Tool windows. Change-Id: Ic4e5058307c514cbe30174d2a2d4ca0f41c8f71f QTBUG: 26598 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* Prevent frame notifications going out when the content view is setAndy Shaw2012-11-081-0/+2
| | | | | | | | | When the content view is set it will trigger a frame notification which we do not want to see because it would put our internal data on the geometry out of sync. So ignore the notification until after it is set. Change-Id: I704c2f186c8b0c6508a90d5dab51b7f6f02162fc Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Rename all QWindow properties that have "window" in themShawn Rutledge2012-11-071-17/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | windowTitle, windowModality, windowIcon and so on are named that way to be similar to the ones in QWidget. However QQuickWindow inherits all of the declared properties, and we would like to have shorter property names in QML. If you are working with a Window then it's obvious the title property is the window title. Unfortunately, there must be patches in many other modules which depend on this one. In order to avoid the need to merge them all at the same time, there is also patch https://codereview.qt-project.org/#change,39001 which temporarily adds backwards-compatible accessors, which can be removed after the other modules are able to build without them. We should not rename windowState to state, because in QML, state usually drives the state machine for animation transitions etc. (although QWindow is not an Item, a user might get confused about it). Related patches are https://codereview.qt-project.org/#change,39001 https://codereview.qt-project.org/#change,37764 https://codereview.qt-project.org/#change,37765 https://codereview.qt-project.org/#change,37766 https://codereview.qt-project.org/#change,37762 Change-Id: Ie4424ec15fbdef6b29b137f90a2ae33f173edd21 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* Cocoa: fix memory leaksTeemu Katajisto2012-11-061-2/+6
| | | | | Change-Id: I2e805aa64c65b90d33924ea4a8671735dee581fd Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Mac: Add support for WindowMasks platform capabilityGabriel de Dietrich2012-11-021-0/+10
| | | | | | | | Also brings back a working QWidgetPrivate::setMask_sys(). Change-Id: Idde9eea15d28bb0299258df81322a5a3ff0b9493 Reviewed-by: Liang Qi <liang.qi@digia.com> Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
* Cocoa: Disable touch events.Morten Johan Sorvig2012-10-301-5/+0
| | | | | | | | | | | | | | | | | | | Enabling touch events has a negative impact on overall performance. In particular, enabling touch events seems to disable scroll event compression, resulting scroll processing lag. Until we find a solution where we can have both proper scrolling and touch events we choose scrolling over touch events. Applications that disagree can enable touch events manually: NSView *qtView = (NSView *)QGuiApplication::platformNativeInterface()-> nativeResourceForWindow("nsview", qtWindow); [qtView setAcceptsTouchEvents:YES]; Change-Id: I85cdd6e8c8ed8685c6cd5418c89fed6af02887cd Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: remove current contentView when clearing windowTeemu Katajisto2012-10-171-0/+1
| | | | | | | | | | Otherwise they might be still events sent to view with no proper QWindow. Also, add dealloc QNSView for clean up. Task-number: QTBUG-26580 Task-number: QTBUG-27456 Change-Id: Icdbe5c39490b72ec82795c2d71e5671cea81921e Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* QPlatformWindow: change API for QPlatformWindow::setWindowStateRichard Moe Gustavsen2012-10-171-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | The current implementation requests the platform window to set the window state if it can, and return the actual window state back. The problem with this approach is that the platform window is created as late as possible, so a call to QWindow::setWindowState would in many (most?) cases never be forwarded to the platform window (instead, the platform window is responsible to check the current window state upon creation). As such, the window state might be left unsynched with the platform window. This patch suggests removing the return value from QPlatformWindow::setWindowState. This will at least be consistent, so that setting/getting state would produce the same result independent of delayed window creation. If needed, we can later add new API to QPlatformIntegration or QPlatformWindow for querying supported/actual window state. Change-Id: Ie43f56169656854a765ce88b47a808f8f3d51bb4 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* implement QCocoaWindow::setWindowIconJoerg Bornemann2012-10-161-0/+20
| | | | | | | | | | Code taken from Qt 4.8. Task-number: QTBUG-27175 Change-Id: I0f7a1add3ea63761c956e43d591cd1b26f25760e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* QPlatformWindow: change API for QPlatformWindow::setWindowFlagsRichard Moe Gustavsen2012-10-151-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | The current implementation requests the platform window to set as many of the flags it can, and return the same flags with the unsupported flags removed. The problem with this approach is that the platform window is created as late as possible, so a call to QWindow::setWindowFlags would in many (most?) cases never be forwarded to the platform window (instead, the platform window is responsible to check the current window flags upon creation). As such, the filtering would never be done. Looking at the current set of plugins, most of them also seems to ignore this protocol, returning the flags unfiltered. This patch suggests removing the return value from QPlatformWindow::setWindowFlags. This will at least be consistent, so that setting/getting flags would produce the same result independent of delayed window creation. If needed, we can later add new API to QPlatformIntegration or QPlatformWindow for querying supported window flags. Change-Id: I9c759b5f9fab5ebed764a982f77fe19881118875 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Remove handleSynchronous* functions.Morten Johan Sorvig2012-10-101-3/+6
| | | | | | | | | | | | | | | | | | | | There are now two different ways to implement synchronous event processing. The platform plugins can choose which one to use. 1) flushWindowSystemEvents() Use to flush the event queue at one point, making preceding calls synchronous. 2) setSynchronousWindowsSystemEvents(bool enable) Makes all handle* functions synchronous, bypassing the event queue completely. Change-Id: I020b80c731fd13f855a377d7c91d06a4e39b6a0b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
* Cocoa: don't animate window transitions for 0 width/height windowsTeemu Katajisto2012-10-081-0/+9
| | | | | | | Task-number: QTBUG-26617 Change-Id: I6dfc3f208368ddf6be65259218aee88db9692cfe Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Update the window style when the modality changes on CocoaAndy Shaw2012-10-041-1/+7
| | | | | | | | | | | On Cocoa if the modality of a dialog changes then the style of the window needs to change to reflect this. So we add a variable to cache the windows modality when it is created to compare against when being made visible. Task-number: QTBUG-22316 Change-Id: I7bfd016321510a9ec70ccb90672f5203a0f3a468 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* Mac: QComboBox wouldn't receive mouse events when shown within a modal dialogGabriel de Dietrich2012-10-031-0/+4
| | | | | | | | | | The mouse events were being stolen by the modal dialog, preventing the combo box to update itself. Key events were being properly forwarded, but this was probably due to the different way key events are being delivered. Change-Id: I5bfc4800fad9fd4122a212e6fdec13811a7e647b Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* Cocoa: bugfix staysOnTopFlag in combination with transient parentRichard Moe Gustavsen2012-10-021-15/+8
| | | | | | | | | | | | | | | A staysOnTop window with a parent would never stay on top. The reason was that we placed the window on the same level as the parent, which would undermine the staysOnTop flag. The fix for this is to always level the window to _at least_ as the same level as the parent, but never lower. A code path for this already existed in the windowLevel function for popups. so we factor that out and use it for all cases. Task-number: QTBUG-27410 Change-Id: I0c30194be33703f54b6c2fe7f3088a9febcd1e2c Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* fix QWidget::setWindowFilePath on Mac OSJoerg Bornemann2012-10-021-0/+11
| | | | | | | | Task-number: QTBUG-27299 Change-Id: I4dddbb9690aac327ad33477d8cea9afa84d10eb3 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-221-24/+24
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* Introducing NoDropShadowWindowHint window flagGabriel de Dietrich2012-09-181-0/+8
| | | | | | | | | | Added suppport on QCocoaWindow. Also we deprecate WA_MacNoShadow since it isn't used anywhere, and updated the 'windowflags' example app. Change-Id: Id0b453ba15a23b768b0615838597bca139f507ad Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
* CocoaPlugin: remove autoreleasepool warnings on 10.6Richard Moe Gustavsen2012-09-101-0/+2
| | | | | | | | | All examples running on 10.6 complained about missing autoreleasepools. This patch adds them in where they were missing. Change-Id: I18a1ddf486efdd1ece82d82d111b46e2ef064ff1 Reviewed-by: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
* Cleaner support for window flags in QCocoaWindowGabriel de Dietrich2012-09-031-36/+71
| | | | | | | | | Window flags were not properly forwarded to the platform window instance. Particularly in the use cases found in QtQuick desktop components. Change-Id: Ibeadfee7de95ba497e9c0f765acee77c84884466 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@nokia.com>
* Revert "Move QWindowSystemInterface out of qpa."Paul Olav Tvete2012-08-031-1/+1
| | | | | | | | | | | | | | This reverts commit 784a877d3cd9a1a75aca9c83146389503a966071. Conflicts: src/plugins/platforms/cocoa/qcocoawindow.mm src/testlib/qtestkeyboard.h src/testlib/qtestmouse.h src/testlib/qtesttouch.h Change-Id: Iebfed179b3eb7f30e4c95edcae5a8ad6fd50330e Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* QTBUG-26296, dock widget movingJames Turner2012-07-231-1/+111
| | | | | | | | | | | | | | | Cocoa lacked implementation of FrameStrut events, and also frameMargins on QPlatformWindow. Fix both of these issues. Unfortunately QDockWidget also contains a tangle of #ifdef MAC behaviour which I am unclear about. What's included here disables some logic on Mac that seems definitely wrong - while moving a window on Mac we now generate NonClientArea events (as intended, I believe), but this should not cause dock-widget dragging to end. Note the window titlebar is the only frame-strut/non-client area on Mac (as far as I can see) Task-number: QTBUG-26296 Change-Id: Id0c6e954db64b9f9f71d16355cb92922877e5ebe Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Move QWindowSystemInterface out of qpa.Stephen Kelly2012-07-191-1/+1
| | | | | | | | Public QtTest headers require it, so all unit tests would have to use private Qt headers otherwise, which is not practical. Change-Id: I5d4466ec30b6a57ebdfc34413e716e657eb51368 Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
* Sync QWindow properties on NSWindow creation.Morten Johan Sorvig2012-07-051-0/+6
| | | | | | | Synchronize size hints, window title, flags and state. Change-Id: Ibc2358d8d4d0625aaddfbcad159e3682e3e79d3c Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Cocoa: Fix size hint and resize increment setting.Morten Johan Sorvig2012-07-041-4/+16
| | | | | | | | Call the corresponding NSWindow size functions. Add special cases where Qt returns null or empty sizes. Change-Id: I880c50c04e92271dc342ad587191c8cb2c006dba Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Suppress QWindowSystemInterface inclusion warnings.Girish Ramakrishnan2012-07-031-1/+1
| | | | | | | | | | | | | Since QWindowSystemInterface is now part of QPA API. The correct inclusion is: #include <qpa/qwindowsysteminterface.h> #include <qpa/qwindowsysteminterface_p.h> Bulk of the work was done by: find . -type f | xargs sed -i -e 's,#include <\(QtGui/\)\?QWindowSystemInterface>,#include <qpa/qwindowsysteminterface.h>,g' Change-Id: If75fc32611e72ef1cf58505794def375b1acf74a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Make popup windows show on the correct desktop.Morten Johan Sorvig2012-05-301-0/+7
| | | | | | | | | | | Set NSWindowCollectionBehaviorFullScreenAuxiliary for Qt::Popup windows. This will make them show on the same desktop as their parent full-screen window. Change-Id: Ice1bd50976ef0cd66b01a683a43e08e782573153 Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Cocoa implementation of QPA menu interface.James Turner2012-05-191-0/+14
| | | | | | | | | | | Implement the QPA platform menu interface for Cocoa, including native menubar support and merging with the predefined menus created from the bundled .nib. Cleanup code previously used to maintain the menus, and add a manual test of the menus code. Change-Id: Ia99267ddb6485e18e05c540eb32c5aee6cbb85db Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Expose QPA API under qpa/*Girish Ramakrishnan2012-05-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The main reasons for doing this are: 1. _qpa.h end up in the master QtGui include file. QtGui is meant for userland applications. qpa code is neither binary nor source compatible. Inadvertant use of QPA api makes the user code binary-incompatible. 2. syncqt creates forwarding headers for non-private header files. This gives people the impression that this is public API. As discussed on the mailing list, even though QPA api is internal and subject to change, it needs to treated differently from private headers since they will be used by in-qtbase and out-of-qtbase plugins. This commit does the following: 1. The _qpa in QPA header files is dropped. 2. syncqt now treats any file with qplatform prefix as a special file and moves it to qpa/ directory. The recommended way of using QPA API in plugins is: #include <qpa/qplatformfoo.h>. This allows the user include QPA API from multiple modules (for example, qplatformfoo might be in QtPrintSupport) 3. The user needs to explicitly add QT += <module>-private to get access to the qpa api. 4. Creates compat headers for the olden style qplatformfoo_qpa.h and QPlatformFoo includes. This commit does not change the cpp filenames. This requires a more careful merging of existing non qpa cpp files and existing cpp files on a case by case basis. This can be done at anytime. The following files are not renamed as part of this changed but will be fixed as part of a future change: src/gui/kernel/qgenericpluginfactory_qpa.h src/gui/kernel/qgenericplugin_qpa.h src/gui/kernel/qwindowsysteminterface_qpa.h files were renamed using for x in `find . -name "qplatform*_qpa.h"`; do git mv $x "${x/_qpa.h/.h}"; done for x in `find . -name "qplatform*_qpa_p.h"`; do git mv $x "${x/_qpa_p.h/_p.h}"; done includes were renamed using script for file in `find . -name "*.h" -or -name "*.cpp" -or -name "*.mm"`; do sed -i -e 's,.*#.*include.*<\(Qt.*/\)\?\(QPlatform.*\)>,#include <qpa/\L\2.h>,g' \ -e 's,.*#.*include.*"\(Qt.*/\)\?\(QPlatform.*\)",#include <qpa/\L\2.h>,g' \ -e 's,.*#.*include.* "\(qplatform.*\)_qpa.h",#include <qpa/\L\1.h>,g' \ -e 's,.*#.*include.*"\(qplatform.*\)_qpa_p.h",#include <qpa/\L\1_p.h>,g' \ -e 's,.*#.*include.*<\(Qt.*/\|Qt.*/private/\|private/\)\?\(qplatform.*\)_qpa\(.*\)>,#include <qpa/\2\3>,g' \ -e 's,.*#.*include.*"\(Qt.*/\|Qt.*/private/\|private/\)\?\(qplatform.*\)_qpa\(.*\)",#include <qpa/\2\3>,g' \ $file done Change-Id: I04a350314a45746e3911f54b3b21ad03315afb67 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Cocoa: Fix beep-on-show for Creator menus.Morten Johan Sorvig2012-04-301-30/+20
| | | | | | | | | | | | | | | Maintain a current window state variable in QCocoaWindnow and use it when setting the new window state on the NSWindow. The NSWindow state accessors can apparently not be trusted, in particular isZoomed always returns true for the Creator popup menu. Change-Id: I78f13de251f3730752813bba17459011f8558aee Reviewed-by: James Turner <james.turner@kdab.com> Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Cocoa: support modal windowsBradley T. Hughes2012-04-251-5/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | Qt::WindowModal windows and dialogs are shown using [NSApp beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:] as long as they have a valid parent. Otherwise they are behave as application modal. Use the existing modal session support in the QCocoaEventDispatcher (which was inherited from Qt 4) to support Qt::ApplicationModal windows and dialogs. Some changes to this code are needed to ensure proper behavior: 1. Window level modification is now done in QCocoaWindow::recreateWindow() instead of in QCocoaEventDispatcher. 2. Make interrupt() use [NSApp abortModal] to stop a modal session (previously we were freeing memory from under Cocoa's feet, causing tools like valgrind and Instruments.app to complain) 3. Do not remove an item from a list and use a const reference to the removed item immediately after (minor bug fix). Also make sure that QCocoaEventDispatcher cleans up any modal sessions and retained user input events on destruction (otherwise we leave NSApplication in a weird state, which causes some autotest failures). Change-Id: Iaeefa025400f324b5348b8c81a40384ef026efb4 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Implement QCocoaWindow::setWindowState.Morten Johan Sorvig2012-04-201-21/+65
| | | | | | | | | | | | | | | | | | | | Add window state change notification logic. Send and expose event in addition to window state change on window restore since the QWidget logic expects this. Modify QCocoaWindow::setVisible to sync up window state that may have been set on the hidden window. Refactor NSWindow event observing to use one observer function for all notifications. Add window state testing to tests/manual/windowflags Add delay after showFullScreen in tst_qstatusbar to wait for the Lion fullscreen transition. Change-Id: I57c523cedd0644d4181b40d72046fad4fdb09a9c Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Add QPlatformWindow::setWindowModified(bool)Bradley T. Hughes2012-04-171-0/+7
| | | | | | | | | | | | | Mac OS X provided a platform API for marking a window/document as modified. This previously worked in Qt 4, so we need to have an interface to keep this working in Qt 5. If the platform window does not provide an implementation, fallback to setting the window title. Note that this does not add any QWindow API, it's only in QPlatformWindow. Change-Id: I84c5a5df8536859157f2b1fa9e4cc647a09fd06d Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Fix tst_QDialog::deleteInExec() crash on Mac OS XBradley T. Hughes2012-04-171-1/+0
| | | | | | | | | | | | | | When destroying a window immediately after showing it, we can sometimes provoke a crash in Cocoa after the show-window-animation has finished (which appears to assume that the window's view will always be valid). Prevent the crash by not removing the view from the window. When recreating a window, we explicitly release the old window, but we do not release the view, so we can freely add it to the new window (i.e. this does not introduce new bugs related to recreating the platform window). Task-number: QTBUG-24977 Change-Id: I466ce75b04785401032a0a2d4a2c494910cd1672 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: set window levels when creating NSWindow/NSPanelBradley T. Hughes2012-03-301-0/+27
| | | | | | | | Port the QWidgetPrivate::setWindowLevel() function from Qt 4 so that we get compatible window level behavior in Qt 5. Change-Id: I67f036941f1e460be678b28e7079d36b1a6622ac Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: don't call non-existent NSWindow setFrameSizeBradley T. Hughes2012-03-301-1/+2
| | | | | | | | | | | | | | | | Commit 140579cb3ef676aa3a7c3fc322ddfcc6ec1b70f2 changed a setFrame call in propagateSizeHints() to setFrameSize, which doesn't exist in NSWindow. Change it back to setFrame. Spotted due to this objc warning: qcocoawindow.mm:232:9: warning: instance method '-setFrameSize:display:' not found (return type defaults to 'id') [m_nsWindow setFrameSize : NSMakeSize(baseSize.width(),... ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~... Change-Id: Ieb7e022694ced7e59c07fdd2fc53048dab1e93c7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: silence warning about QCocoaWindow member initialization orderBradley T. Hughes2012-03-271-1/+1
| | | | | | | | | | qcocoawindow.mm:99:7: warning: field 'm_glContext' will be initialized after field 'm_inConstructor' [-Wreorder] , m_glContext(0) ^ Change-Id: I9e090ddeeaeea581b480b2e7b2b99360062c0632 Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
* Cocoa: QCocoaWindow::clearNSWindow() needs to cleanup properlyBradley T. Hughes2012-03-261-1/+3
| | | | | | | | | | | clearNSWindow() should also clear the delegate and remove the contentView from the window, since we are no longer using that window. Make sure the QCocoaWindow::~QCocoaWindow() doesn't release the m_contentView until after clearNSWindow(), to avoid crashes while trying to cleanup the window and view. Change-Id: Ia081488f629a4fd4cf10fb1053fb8183b1914d35 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: don't show window when calling raise()Bradley T. Hughes2012-03-261-2/+6
| | | | | | | | | | | Calling raise() on a hidden window should not show it. The setVisible() function will ensure that the window is raised (since we use orderFront or makeKeyAndOrderFront). This fixes the failing tst_QDockWidget::task169808_setFloating() test as well. Task-number: QTBUG-24774 Change-Id: If34472ebbcd615c10654efafd54c84c03d10bc8c Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>