summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
Commit message (Collapse)AuthorAgeFilesLines
* QPlatformScreen::grabWindow() support on MacTasuku Suzuki2012-07-063-1/+64
| | | | | | | | Added QCocoaScreen::grabWindow() and copied Qt 4 implimentation. examples/desktop/screenshot works but WId window is not handled yet. Change-Id: If228bb59d98a5166788ab38293d7e6a6300d1f85 Reviewed-by: Morten Johan Sørvig <morten.sorvig@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>
* Native drag implementation on MacJames Turner2012-07-044-1/+169
| | | | | | | | | | | | | | | | Create a native implementation of QCocoaDrag, using the 10.6 (and earlier) Cocoa dragging API. This matches the implementation in Qt4 closely for the moment. In the future it may be desirable to create an alternative implementation using the new (non-blocking) drag API introduced in 10.7, but that will require deeper changes to the mime-data handling. This changes makes one more method on QPlatformDrag virtual, since the Cocoa behaviour diverges from the base version: ::defaultAction is customised. Change-Id: I1843293a62b2b4973a07b5e75ea3c312dc064018 Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@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>
* Platform-plugin support for QSystemTrayIcon.Christoph Schleifenbaum2012-07-037-0/+643
| | | | | | | | | | | | | | | | | | | | | Implement QPlatformSystemTrayIcon providing QPA-plugin-support for system tray icons. Make QSystemTrayIcon use this as new backend. Ported over qsystemtrayicon_mac.mm to qcocoasystemtrayicon.mm to provide Cocoa support for the new interface. It had to be changed to match the interface, especially for icon and menu handling. This interface is made to not use QStyle or QMenu which are related classes of QSystemTrayIcon. It's therefore not introducing QtWidget dependency into the platform plugin. Task-number: QTBUG-20978 Change-Id: I0d0a73835698b3b4f97219d4f5bbcfa2af57dbe2 Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Suppress QWindowSystemInterface inclusion warnings.Girish Ramakrishnan2012-07-035-5/+5
| | | | | | | | | | | | | 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>
* Add QPA prefix and version number to QPA plugin factory interfaces.Friedemann Kleint2012-06-271-1/+1
| | | | | | | The interfaces may change in Qt minor versions. Change-Id: I43bc6245ddbba8232e00313bdc64e8e60c7eab6f Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Convert QPA menus to use QIcon, and enable icons.James Turner2012-06-272-4/+5
| | | | | | | | | Icon support was disabled in QPA menus, now QIcon is in QtGui, convert the QPA interface, enable setting the icon in QMenu, and make the Cocoa implementation use it. (And fix a ref-counting leak if an icon is actually set) Change-Id: Ica203bf6826b79d8beee58f39febc851b9633a66 Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Do not add debug/release to QMAKE_CONFIG. Let module system enable themSean Harmer2012-06-141-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This solved QTBUG-26111 in which qtjsbackend gets built with an incomplete framework on Mac OSX. This was traced back to commit 6a6fd56e662b2c1a581727f7ec44d5bd60913ad4 which moved QMAKE_CONFIG values from .qmake.cache to mkspecs/qmodule.pri. Since qtjsbackend contains config tests it creates its own .qmake.cache which was previously masking this issue. QMAKE_CONFIG incorrectly contained debug for debug_and_release builds even though debug and release are already present in the CONFIG variable in mkspecs/qconfig.pri. The changes to configure prevent CONFIG in qmodule.pri from containing debug and release variables and ensure that QT_CONFIG contains build_all and debug_and_release if appropriate. Configure.app is also adjusted to match this behaviour. The other part of the change is to qt_module_config.prf and qt_plugin.prf. These changes take care of populating CONFIG with the appropriate debug_and_release and build_all variables depending upon what is present in QT_CONFIG. This ensures that the Qt modules and plugins get built with the same configuration as qtbase. The special handling for the qcocoa QPA plugin ensures that it is built in release mode only to preserve the behaviour introduced by commit 5603f94eaa538dbe28fc426065d65a27799adedc. Task-number: QTBUG-26111 Change-Id: I6f65aba50709e1b2431b8b4411ff30a06f7d8aed Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Fix namespace compilation on OSX.Toby Tomkins2012-06-144-4/+17
| | | | | Change-Id: Ib579ae298a5f894b8b02a5d56567870109bd29bd Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Cocoa: re-enable getUrl: and appleEventQuit: AppleEvent handlersBradley T. Hughes2012-06-124-29/+46
| | | | | | | | | | | | | | | | | | | The getUrl: and appleEventQuit: handlers are only called if we register them with the NSAppleEventManager. The Cocoa documentation says the best place to do this is in the applicationWillFinishLaunching: delegate method, so add this method and move the code from qcocoaeventdispatcher.mm to there. Since QCocoaApplicationDelegate is only used when AA_MacPluginApplication is not set, we do not need to check again in the delegate code. Be sure to remove these event handlers when shutting down the application. For the getUrl: handler, send file open events when receiving this event. This restores Qt 4 behavior. Remove the qDebug() from the appleEventQuit: handler. Change-Id: Ibcbdd541695176e3d236366d4d541e4811882d6c Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: Remove unused QApplicationPrivate from QCocoaApplicationDelegateBradley T. Hughes2012-06-124-22/+0
| | | | | | | | | | To avoid a QtWidget dependency, we should use QGuiApplicationPrivate isntead, but instead of storing, we can use QGuiAppliationPrivate::instance() instead. Change-Id: If3f63fee804b7ad32fe8d612bf70c051b70f54c8 Reviewed-by: James Turner <james.turner@kdab.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: do not terminate applications prematurelyBradley T. Hughes2012-06-121-10/+34
| | | | | | | | | | | | | Re-enable application termination as it was in Qt 4. QApplication::exec() must return to main() so that the destructors in main() are run. The QApplicationPrivate::canQuit() function from Qt 4's qapplication_mac.mm is gone, so bring back this function in QCocoaApplicationDelegate instead. Change-Id: I1c21894d59061687c36ab49bcb2e4e3ae0752fa4 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: Compile when configured with -no-widgetsMorten Johan Sorvig2012-06-123-9/+31
| | | | | | | | | | Build printing only if Qt is configured with widget support. This is mostly useful for testing -no-widgets builds. Change-Id: I2d47b420e311869e85508db1f7372fe326617dec Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Fix Mac menu-merging case-sensitivity.James Turner2012-06-111-9/+11
| | | | | | | | Use case-insensitive string comparisons to deal with any combination of case in the target or menu text correctly. Fixes issues reported by BHughes in TextEdit and Creator. Change-Id: Ic3b577bf9034659b2de4aa206757b3a5a303a7b8 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Remove QtWidgets include.Morten Johan Sorvig2012-06-111-3/+0
| | | | | | Change-Id: I39ff73ce0dbfe36634b5331538165e636f62e57c Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Cocoa: Remove QtWidgets dependencies.Morten Johan Sorvig2012-06-112-6/+2
| | | | | | | | | | Make the file/color dialog helpers use QCoreApplication:: translate("QDialogButtonBox", text) instead of QDialogButtonBox::tr(text) Change-Id: I7ee4c32f8f8b9cd002836e24b962ef1c0f2e0737 Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* QtPrintSupport: Move plugin access of QPrinterInfo internals to baseJohn Layt2012-06-081-10/+9
| | | | | | | | | | Move all plugin methods requiring access to QPrinterInfo internals into the plugin base class, and remove the plugin classes as friends from QPrinterInfo. Change-Id: Ic527efc681e198abf19e038dd77c36bb8017d049 Reviewed-by: Teemu Katajisto <teemu.katajisto@digia.com> Reviewed-by: John Layt <jlayt@kde.org>
* Reduce QtWidgets dependencies in the Cocoa plugin.Morten Johan Sorvig2012-06-086-1415/+22
| | | | | | | | | | | | | | | | | | | | | b8246f08 added the new menus implementation which removes one of the major QtWidget dependencies. Continuing on the path to QtWidget-freedom this commit removes the following: - qmenu_mac.h/mm. Not used. - FORMS += filedialog.ui. Not used. - qt_strippedText from qaction.cpp. Duplicate. - Misc stray includes. What is left should be the dependencies needed by the print engine implementation. These will be handled at a later time. Change-Id: I0cead4cdaddcebd402d30c6112f3e889d0f28740 Conflicts: Reviewed-by: James Turner <james.turner@kdab.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Remove the QFactoryInterface dependency from platform pluginsLars Knoll2012-06-081-8/+0
| | | | | Change-Id: I4010e59dcd8a790e06bb9a0ccf3cc9a5c7737ed1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Cocoa: do not send multiple window activation eventsBradley T. Hughes2012-06-061-2/+9
| | | | | | | | | | | | | | When switching the active window within the same application, Cocoa sends us an NSWindowDidResignKeyNotification for the old activated window, then an NSWindowDidBecomeKeyNotificationfor the newly activated window. Our handling of this would first set Qt's active window to zero, then immediately reset it afterwards. Avoid this by checking the key window when handling the deactivation event, and don't set the active window to zero if a new window has become active. Task-number: QTBUG-24322 Change-Id: I8719fc501049eeaaebb75e9ea03261b2209458b6 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: Fix QCocoaBackingStore::flush on 10.8Morten Sorvig2012-06-061-1/+11
| | | | | | | | | | | | | | | | The call to displayRect works on 10.7 but does not update the pixels on screen on 10.8. Many Qt windows do not update properly. This is a workaround found by trail and error without fully understanding the underlying issue. I would like to have this in place until we can determine the cause of the bug. Change-Id: I1ecee745f42a93ded4f651cc8ad51963f250e78d Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Do not set an action on native submenu items on MacPasi Matilainen2012-06-061-1/+2
| | | | | | | | | | | | | On Mac, clicking on a submenu entry triggers QMenu::triggered(QAction*) signal, which is unexpected, and also closes the submenu, which does not match platform behavior. This happens because native submenu items have an action set, so fix it by not setting the action. Task-number: QTBUG-16738 Task-number: QTBUG-10706 Change-Id: I6819999e5af35e6acab1aec035d5d85445189f11 Reviewed-by: James Turner <james.turner@kdab.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Verify the surfaceType before activating the GL contextHolger Hans Peter Freyther2012-06-051-0/+2
| | | | | | | | | | | | Verify that the surfaceType() of the QPlatformContext is of type OpenGLSurface before making the context active. Make it possible to get the QSurface from a QPlatformSurface, make QPlatformWindow use that to access the QWindow. Remove the setSurfaceType call from the eglfs plugin as this hiding a problem. Change-Id: I08906da052e066bb1f1f042030643c6389ab17d7 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@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>
* QtPrintSupport - Add QPrinterInfo api for more printer detailsJohn Layt2012-05-291-0/+6
| | | | | | | | | | | | | | | A previous commit changed the Mac behaviour for printerName() from returning the CUPS Description to returning the CUPS Name. In case anyone was relying on this for a human-readable name add new api to return the CUPS Description. Also add the Location and Make and Model which will be used in the Unix print dialog instead of directly calling CUPS. Change-Id: I9901bf8d6368466adf111580f5db5a3f01ca9170 Reviewed-by: Teemu Katajisto <teemu.katajisto@digia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: John Layt <jlayt@kde.org>
* QPA: Refactor QFileDialogPrivate::qt_clean_filter_list for QPASean Harmer2012-05-241-2/+2
| | | | | | | | | | Allows QFileDialog and QPA plugins to access this helper function. Needed by the Cocoa and QNX plugins. This commit fixes up the Cocoa plugin. The QNX support will be in a follow-up commit. Change-Id: I8dd08a9f3dc27d85edd0dc9dad9629406c1e677a Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Add QMacPasteboardMime::count(QMimeData*).Morten Johan Sorvig2012-05-243-8/+17
| | | | | | | | | | | | As QTBUG-25076 points out, the ### comment indicates that we want to add virtual function to QMacPasteboardMime. The default implementation returns 1. Reimplement for QMacPastebardMimeUrl and return the url count. Change-Id: Ie300574eab9991af625986805d2b030914291cc0 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* QtPrintSupport - Modify Platform Plugin QPrinterInfo apiJohn Layt2012-05-242-2/+27
| | | | | | | | | | | | | | Change the way the printsupport plugin creates QPrinterInfo objects, provide platform api to return a named printer, and expose this as static public api in QPrinterInfo. Only the Mac plugin used the old api, the other plugins will have direct support added in separate commits, but will use the default implementation for now. Change-Id: I7d6b6556eb39919cfb15bc0e814afbaf13c5712c Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* QtPrintSupport - Fix Mac printerName() useJohn Layt2012-05-232-3/+3
| | | | | | | | | | | | | | | | | | | | Mac in Qt4 and 5 has been using the PMPrinter Name for the QPrinter and QPrinterInfo printerName() value, but this is incorrect. This is in fact the CUPS Description field, is in human readable form and is not guaranteed to be unique. The CUPS Name field is the PMPrinter ID value and should be used as the unique identifier when accessing printers. This has worked up to now due to an undocumented feature in the OSX api that accepted the Name when the ID should be used. Changing all uses of PMPrinterGetName to PMPrinterGetID fixes this and allows the QPrinterInfo test of names to pass without munging the names. Change-Id: I25322aa1a924bed9f67f4ad5e208274c8b700e17 Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: John Layt <jlayt@kde.org>
* Fix font rendering gamma correction on MacJiang Jiang2012-05-232-0/+8
| | | | | | | It needs a 2.0 gamma (as in Qt 4) in platform plugin styleHint. Change-Id: I2286532c607554c41baee4fa348cd7899bf010e1 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: Handle keyboard dead keys correctlyBradley T. Hughes2012-05-231-2/+12
| | | | | | | | | | | Some keyboard layouts have physical dead keys (like the ¨ key on a Norwegian keyboard). These do not send any text, so we should not use [NSString characterAtIndex:0] if the string is empty. When encountering an empty [NSEvent character] string, use Qt::Key_unknown and QChar::ReplacementCharacter. Change-Id: I7281aa9ea6005341c0dcfa5900bfe601e4eac6a9 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: Avoid UTF-16 to UTF-8 to UTF-16 conversion in key handlingBradley T. Hughes2012-05-231-1/+1
| | | | | | | | | | When coverting NSEvent characters to a QString, use QCFString::toQString(), which copies the UTF-16 characters out of the NSString into a QString (instead of converting to UTF-8 and back again on each key press). Change-Id: I78f7c46e75283b7b51c762fd7f22e351ac068072 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: don't send input method events for basic text inputBradley T. Hughes2012-05-232-11/+27
| | | | | | | | | | | | | | | | | | | | | | When receiving keyDown events on the Mac, we pass them to NSView's interpretKeyEvents method, which ends up calling our insertText method. This means we end up sending input method events for most text input (instead of normal key events). While this is not wrong, it is unexpected, and different form how Qt 4 works. Change insertText to do nothing if no preedit string has been set when handling a key event. For normal text input that does not need input method handling, we can simply return and let handleKeyEvent send key events instead. Our insertText implementation has to take care to not ignore calls from outside key event processing (such as the user input characters with the Character Viewer). As a result m_keyEventsAccepted changes to m_sendKeyEvent to let insertText know whether or not insertText was called via handleKeyEvent. Change-Id: Ie8c2eb67f6a8438f08442f9ff48f2027a041ca23 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Minor QPlatformMenu API cleanup.Morten Johan Sorvig2012-05-234-5/+6
| | | | | | | | | | | | | | | | | | | | | | | | Make the QPlatformMenu* classes abstract with pure virtual functions. Delete qplatformmenu_qpa.cpp. QtGui no longer has to carry the empty implementations. Change the inheritance tree - Make QPlatformMenu and QPlatformMenuBar inherit QObject instead of QMenuItem. Add (now) missing virtual functions to QPlatformMenu. The effect of this change is to reduce the number of pure virtuals the platform has to implement. Change QPlatformMenuBar::syncMenu to take a QPlatformMenu pointer instead of a QPlatformMenuItem* pointer. Fix a couple of header/unused variable compiler warnings. Change-Id: I77450e40c6aae26f3e1aca204603acebd242c036 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Cocoa: Fix memory leak in the accessibility code.Morten Johan Sorvig2012-05-211-0/+1
| | | | | | | | QCocoaAccessibleElement takes ownership of the QAccessibleinterface pointer. Delete it in dealloc(). Change-Id: I45a5540b9cf564c639bfa119ff4882008d63fd96 Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
* Cocoa implementation of QPA menu interface.James Turner2012-05-1920-256/+1217
| | | | | | | | | | | 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>
* QPA menu abstraction, originally based on Morten's workJames Turner2012-05-195-23/+8
| | | | | | | | | | Create a QPA abstraction for native menus, derived from the Cocoa support in 4.8, but with the expectation to support other platforms too. Update the QtWidget QMenu and QMenuBar code to maintain their QPA equivalents if they exist. Change-Id: Id605de3da8811dc832bf48b35f9107778ad320ff Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Make QFileOpenEvents delivered again.Christoph Schleifenbaum2012-05-111-4/+5
| | | | | | | | Create a FileOpenEvent within QWindowSystemInterfacePrivate and handle it in QWindowSystemSystemInterface and QGuiApplication Change-Id: Ie777c923958d83d56e8648c9bfb1f9dcb985654d Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* qpa: Remove QPlatformDialogHelper::deleteNativeDialog()Bradley T. Hughes2012-05-106-30/+17
| | | | | | | | | | | | | | | | This function isn't really needed. The QDialogPrivate destructor deletes the platform helper, so the QDialog destructor does not need to do it. Subclasses of QPlatformDialogHelper are now responsible for deleting any native resources they create. The one place in QFileDialog that needs to recreate the native dialog can simply recreate the helper. QDialogPrivate::deleteNativeDialog() now becomes QDialogPrivate::deletePlatformHelper(), which resets all state to allow the platform helper to be recreated. Change-Id: I58adfe8801e02e63b3cb4a9a3a0b8cb5b3c7b161 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* qpa: Clean up QPlatformDialogHelper APIBradley T. Hughes2012-05-106-48/+48
| | | | | | | | | | Remove the _sys suffix from all members of QPlatformDialogHelper and its subclasses. The QPlatform* class prefix already implies that these methods are system specific, we don't need the method suffix as well. Change-Id: I5ad1f928fab3a989992951acc244915e7fa48d32 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* QPA: Cleanup native dialog modal executionBradley T. Hughes2012-05-096-88/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove the _q_platformRunNativeAppModalPanel() function, together with the launchNativeAppModalPanel() signal and emitLaunchNativeAppModalPanel() slot, which were previously used to run the modal loop inside the QDialog::exec() loop. This trick isn't necessary anymore, so remove the mechanism and code related to it. Rename QPlatformDialogHelper::platformNativeDialogModalHelp() to exec_sys(). This function is now responsible for both showing the native dialog and running the modal loop. QDialog:exec() now calls this function if a native dialog is in use (it does not call QEventLoop::exec() anymore). The dialogResultCode_sys() function was unused, so it has also been removed. This commit also removes some unused private slots that were left over from the port to QPA. Note that the comments in the Cocoa plugin are still valid and relevant, but this commit does not fix the scenarios mentioned. This will be done in a future commit. The Windows plugin needs minor changes. The QueuedConnections to accept() and reject() cause the deliver to come too late, resulting in crashes, hence the change to AutoConnection (which ends up being a DirectConnection). Change-Id: Ifc90325c945ca78737e60bf331929f03ecc52e0a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Don't leak native dialog resourcesBradley T. Hughes2012-05-092-6/+2
| | | | | | | | | | | | Have QDialog::~QDialog() call deleteNativeDialog_sys() on the helpers, so that we don't risk leaking any resources allocated in the helper. QFileDialog does this now, but not QColorDialog or QFontDialog. The Cocoa plugin worked around this problem by calling deleteNativeDialog_sys() itself, but the Windows plugin does not do this, resulting in leaks. Change-Id: I380d87c95686c8f3cb260f9242299be27329280d Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Expose QPA API under qpa/*Girish Ramakrishnan2012-05-0726-30/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* Support all modality types in QPlatformDialogHelperBradley T. Hughes2012-04-306-24/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Modality is not a boolean property in Qt. There are 2 types: window modality and application modality. Native dialogs can support both of these types as well (e.g. on Cocoa, a window modal file dialog should be displayed as a Sheet). Remove the QPlatformDialogHelper::ShowFlags enum and instead pass a Qt::WindowModality parameter to QPlatformDialogHelper::show_sys(). The Windows implementation has been updated to check for Qt::ApplicationModal instead of the ShowModal flag (since only Qt::ApplicationModal dialogs are blocking). The Cocoa implementation has been updated to only use non-modal and application modal native color and font dialogs (which restores Qt 4 behavior). These are shared Cocoa panels that cannot be shown as sheets, however. If the programmer asks for window modal color/font dialogs, we use the Qt versions, not the native ones. The file dialog can be shown either as a Sheet (but we need to pass an NSWindow parent for it to work properly) or as an application modal dialog. This change has been tested on Mac OS X with tests/manual/windowmodality. Change-Id: I9064987433895c55f68aac979ef8e8207fb24bbe Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
* Cocoa: Fix beep-on-show for Creator menus.Morten Johan Sorvig2012-04-302-30/+21
| | | | | | | | | | | | | | | 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-254-32/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* Fix compilation with Q_DECL_OVERRIDEOlivier Goffart2012-04-202-5/+5
| | | | | | | In C++11, the override keyword is placed after the function declaration Change-Id: I3a079860762f30fa21eb01611c770713f6ba4acb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Fix crash in QCocoaBackingStore.Morten Johan Sorvig2012-04-202-4/+7
| | | | | | | | | | QWindow->handle() may be null during construction, and also during calls to resize(). Get and check the pointer at each call instead of caching it in the constructor. Change-Id: Icd950b55e16fdd2077e3b7fe3c3393d8b89b5903 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Implement QCocoaWindow::setWindowState.Morten Johan Sorvig2012-04-204-42/+98
| | | | | | | | | | | | | | | | | | | | 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>