diff options
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoabackingstore.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoabackingstore.mm | 29 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaclipboard.mm | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoacursor.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm | 11 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoanativeinterface.h | 4 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoanativeinterface.mm | 4 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.h | 7 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 18 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qmacclipboard.h | 4 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qmacclipboard.mm | 4 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qmacmime.h | 4 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.mm | 38 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsviewaccessibility.mm | 1 |
16 files changed, 92 insertions, 39 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index e405c81726..947d91005d 100644 --- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -172,8 +172,8 @@ static void cleanupCocoaApplicationDelegate() // QApplicationPrivate::globalAppleEventProcessor in qapplication_mac.mm - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { -/* Q_UNUSED(sender); +/* // The reflection delegate gets precedence if (reflectionDelegate && [reflectionDelegate respondsToSelector:@selector(applicationShouldTerminate:)]) { diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.h b/src/plugins/platforms/cocoa/qcocoabackingstore.h index 794693627b..489938c4b3 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.h +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.h @@ -60,6 +60,7 @@ public: QPaintDevice *paintDevice(); void flush(QWindow *widget, const QRegion ®ion, const QPoint &offset); void resize (const QSize &size, const QRegion &); + bool scroll(const QRegion &area, int dx, int dy); private: QCocoaWindow *m_cocoaWindow; diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.mm b/src/plugins/platforms/cocoa/qcocoabackingstore.mm index 5e221ffd8b..f0ff7ba0d6 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.mm +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.mm @@ -47,23 +47,10 @@ QT_BEGIN_NAMESPACE -QRect flipedRect(const QRect &sourceRect,int height) -{ - if (!sourceRect.isValid()) - return QRect(); - QRect flippedRect = sourceRect; - flippedRect.moveTop(height - sourceRect.y()); - return flippedRect; -} - QCocoaBackingStore::QCocoaBackingStore(QWindow *window) : QPlatformBackingStore(window) { m_cocoaWindow = static_cast<QCocoaWindow *>(window->handle()); - - const QRect geo = window->geometry(); - NSRect rect = NSMakeRect(geo.x(),geo.y(),geo.width(),geo.height()); - m_image = new QImage(window->geometry().size(),QImage::Format_ARGB32_Premultiplied); } @@ -84,7 +71,6 @@ void QCocoaBackingStore::flush(QWindow *widget, const QRegion ®ion, const QPo QCocoaAutoReleasePool pool; QRect geo = region.boundingRect(); - NSRect rect = NSMakeRect(geo.x(), geo.y(), geo.width(), geo.height()); [m_cocoaWindow->m_contentView displayRect:rect]; } @@ -92,9 +78,20 @@ void QCocoaBackingStore::flush(QWindow *widget, const QRegion ®ion, const QPo void QCocoaBackingStore::resize(const QSize &size, const QRegion &) { delete m_image; - m_image = new QImage(size,QImage::Format_ARGB32_Premultiplied); - NSSize newSize = NSMakeSize(size.width(),size.height()); + m_image = new QImage(size, QImage::Format_ARGB32_Premultiplied); [static_cast<QNSView *>(m_cocoaWindow->m_contentView) setImage:m_image]; } +bool QCocoaBackingStore::scroll(const QRegion &area, int dx, int dy) +{ + extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); + QPoint qpoint(dx, dy); + const QVector<QRect> qrects = area.rects(); + for (int i = 0; i < qrects.count(); ++i) { + const QRect &qrect = qrects.at(i); + qt_scrollRectInImage(*m_image, qrect, qpoint); + } + return true; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoaclipboard.mm b/src/plugins/platforms/cocoa/qcocoaclipboard.mm index 87c085457f..f76174e085 100644 --- a/src/plugins/platforms/cocoa/qcocoaclipboard.mm +++ b/src/plugins/platforms/cocoa/qcocoaclipboard.mm @@ -81,6 +81,7 @@ bool QCocoaClipboard::supportsMode(QClipboard::Mode mode) const bool QCocoaClipboard::ownsMode(QClipboard::Mode mode) const { + Q_UNUSED(mode); return false; } diff --git a/src/plugins/platforms/cocoa/qcocoacursor.mm b/src/plugins/platforms/cocoa/qcocoacursor.mm index 56f0dcf72e..bd8d32b07e 100644 --- a/src/plugins/platforms/cocoa/qcocoacursor.mm +++ b/src/plugins/platforms/cocoa/qcocoacursor.mm @@ -59,6 +59,8 @@ QCocoaCursor::QCocoaCursor() void QCocoaCursor::changeCursor(QCursor *cursor, QWindow *window) { + Q_UNUSED(window); + // Check for a suitable built-in NSCursor first: switch (cursor->shape()) { case Qt::ArrowCursor: diff --git a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm index 305a8ddc95..77cccac0b4 100644 --- a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm +++ b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm @@ -895,6 +895,7 @@ QCocoaEventDispatcherPrivate::QCocoaEventDispatcherPrivate() nsAppRunCalledByQt(false), cleanupModalSessionsNeeded(false), currentModalSessionCached(0), + lastSerial(-1), interrupt(false) { } diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm index ecb732c9da..c333e3ac1f 100644 --- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm @@ -504,17 +504,6 @@ typedef QSharedPointer<QFileDialogOptions> SharedPointerFileDialogOptions; QT_BEGIN_NAMESPACE -static bool qt_mac_is_macsheet(const QWidget *w) -{ - if (!w) - return false; - - Qt::WindowModality modality = w->windowModality(); - if (modality == Qt::ApplicationModal) - return false; - return w->parentWidget() && (modality == Qt::WindowModal || w->windowType() == Qt::Sheet); -} - QCocoaFileDialogHelper::QCocoaFileDialogHelper() :mDelegate(0) { diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h index 8856e90cf3..bb4d0f9f6c 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h @@ -45,6 +45,8 @@ #include <QtGui/QPlatformNativeInterface> #include <QtPrintSupport/QPlatformPrinterSupport> +QT_BEGIN_NAMESPACE + class QWidget; class QCocoaNativeInterface : public QPlatformNativeInterface @@ -74,3 +76,5 @@ private: }; #endif // QCOCOANATIVEINTERFACE_H + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm index 29c2e58959..ca15b6bbfb 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm @@ -54,6 +54,8 @@ #include "qprintengine_mac_p.h" +QT_BEGIN_NAMESPACE + void *QCocoaNativeInterface::nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) { if (!window->handle()) { @@ -81,3 +83,5 @@ void *QCocoaNativeInterface::NSPrintInfoForPrintEngine(QPrintEngine *printEngine QMacPrintEngine *macPrintEngine = static_cast<QMacPrintEngine *>(printEngine); return macPrintEngine->d_func()->printInfo; } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 90c5a050d0..184422a04a 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -49,7 +49,7 @@ #include "qcocoaglcontext.h" #include "qnsview.h" -class QCocoaWindow; +class QT_PREPEND_NAMESPACE(QCocoaWindow); @interface QNSWindow : NSWindow { @public QCocoaWindow *m_cocoaPlatformWindow; @@ -59,7 +59,7 @@ class QCocoaWindow; @end @interface QNSPanel : NSPanel { - @public QCocoaWindow *m_cocoaPlatformWindow; + @public QT_PREPEND_NAMESPACE(QCocoaWindow) *m_cocoaPlatformWindow; } - (BOOL)canBecomeKeyWindow; @end @@ -99,6 +99,7 @@ public: void raise(); void lower(); void propagateSizeHints(); + void setOpacity(qreal level); bool setKeyboardGrabEnabled(bool grab); bool setMouseGrabEnabled(bool grab); @@ -133,7 +134,7 @@ public: // for QNSView friend class QCocoaNativeInterface; QNSView *m_contentView; - QNSWindow *m_nsWindow; + NSWindow *m_nsWindow; Qt::WindowFlags m_windowFlags; QPointer<QWindow> m_activePopupWindow; diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index b5e8ff2246..4f95489798 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -111,8 +111,8 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) QCocoaWindow::~QCocoaWindow() { - [m_contentView release]; clearNSWindow(m_nsWindow); + [m_contentView release]; [m_nsWindow release]; } @@ -198,13 +198,17 @@ void QCocoaWindow::raise() { //qDebug() << "raise" << this; // ### handle spaces (see Qt 4 raise_sys in qwidget_mac.mm) - if (m_nsWindow) + if (!m_nsWindow) + return; + if ([m_nsWindow isVisible]) [m_nsWindow orderFront: m_nsWindow]; } void QCocoaWindow::lower() { - if (m_nsWindow) + if (!m_nsWindow) + return; + if ([m_nsWindow isVisible]) [m_nsWindow orderBack: m_nsWindow]; } @@ -233,6 +237,12 @@ void QCocoaWindow::propagateSizeHints() } } +void QCocoaWindow::setOpacity(qreal level) +{ + if (m_nsWindow) + [m_nsWindow setAlphaValue:level]; +} + bool QCocoaWindow::setKeyboardGrabEnabled(bool grab) { if (!m_nsWindow) @@ -439,7 +449,9 @@ void QCocoaWindow::setNSWindow(NSWindow *window) void QCocoaWindow::clearNSWindow(NSWindow *window) { + [window setDelegate:nil]; [[NSNotificationCenter defaultCenter] removeObserver:m_contentView]; + [m_contentView removeFromSuperviewWithoutNeedingDisplay]; } // Returns the current global screen geometry for the nswindow associated with this window. diff --git a/src/plugins/platforms/cocoa/qmacclipboard.h b/src/plugins/platforms/cocoa/qmacclipboard.h index 9371aca459..634d29a60f 100644 --- a/src/plugins/platforms/cocoa/qmacclipboard.h +++ b/src/plugins/platforms/cocoa/qmacclipboard.h @@ -49,6 +49,8 @@ #import <Cocoa/Cocoa.h> +QT_BEGIN_NAMESPACE + class QMacPasteboard { struct Promise { @@ -90,4 +92,6 @@ public: QString qt_mac_get_pasteboardString(PasteboardRef paste); +QT_END_NAMESPACE + #endif diff --git a/src/plugins/platforms/cocoa/qmacclipboard.mm b/src/plugins/platforms/cocoa/qmacclipboard.mm index eff2c5b07a..73abd8945c 100644 --- a/src/plugins/platforms/cocoa/qmacclipboard.mm +++ b/src/plugins/platforms/cocoa/qmacclipboard.mm @@ -56,8 +56,6 @@ QT_BEGIN_NAMESPACE -QT_USE_NAMESPACE - /***************************************************************************** QClipboard debug facilities *****************************************************************************/ @@ -548,6 +546,4 @@ QString qt_mac_get_pasteboardString(PasteboardRef paste) return QString(); } - - QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qmacmime.h b/src/plugins/platforms/cocoa/qmacmime.h index 7226caef28..12c9aff039 100644 --- a/src/plugins/platforms/cocoa/qmacmime.h +++ b/src/plugins/platforms/cocoa/qmacmime.h @@ -46,6 +46,8 @@ #include <CoreFoundation/CoreFoundation.h> +QT_BEGIN_NAMESPACE + class Q_GUI_EXPORT QMacPasteboardMime { char type; public: @@ -74,5 +76,7 @@ public: virtual QList<QByteArray> convertFromMime(const QString &mime, QVariant data, QString flav) = 0; }; +QT_END_NAMESPACE + #endif diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index d249158db3..e76c02704f 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -238,6 +238,7 @@ static QTouchDevice *touchDevice = 0; - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { + Q_UNUSED(theEvent); return YES; } @@ -638,6 +639,43 @@ static QTouchDevice *touchDevice = 0; [self handleKeyEvent:nsevent eventType:int(QEvent::KeyRelease)]; } +- (void)flagsChanged:(NSEvent *)nsevent +{ + ulong timestamp = [nsevent timestamp] * 1000; + ulong modifiers = [nsevent modifierFlags]; + Qt::KeyboardModifiers qmodifiers = [self convertKeyModifiers:modifiers]; + + // calculate the delta and remember the current modifiers for next time + static ulong m_lastKnownModifiers; + ulong lastKnownModifiers = m_lastKnownModifiers; + ulong delta = lastKnownModifiers ^ modifiers; + m_lastKnownModifiers = modifiers; + + struct qt_mac_enum_mapper + { + ulong mac_mask; + Qt::Key qt_code; + }; + static qt_mac_enum_mapper modifier_key_symbols[] = { + { NSShiftKeyMask, Qt::Key_Shift }, + { NSControlKeyMask, Qt::Key_Meta }, + { NSCommandKeyMask, Qt::Key_Control }, + { NSAlternateKeyMask, Qt::Key_Alt }, + { NSAlphaShiftKeyMask, Qt::Key_CapsLock }, + { 0ul, Qt::Key_unknown } }; + for (int i = 0; modifier_key_symbols[i].mac_mask != 0u; ++i) { + uint mac_mask = modifier_key_symbols[i].mac_mask; + if ((delta & mac_mask) == 0u) + continue; + + QWindowSystemInterface::handleKeyEvent(m_window, + timestamp, + (lastKnownModifiers & mac_mask) ? QEvent::KeyRelease : QEvent::KeyPress, + modifier_key_symbols[i].qt_code, + qmodifiers); + } +} + - (void) doCommandBySelector:(SEL)aSelector { [self tryToPerform:aSelector with:self]; diff --git a/src/plugins/platforms/cocoa/qnsviewaccessibility.mm b/src/plugins/platforms/cocoa/qnsviewaccessibility.mm index d20246d292..205a52c204 100644 --- a/src/plugins/platforms/cocoa/qnsviewaccessibility.mm +++ b/src/plugins/platforms/cocoa/qnsviewaccessibility.mm @@ -87,7 +87,6 @@ - (id)accessibilityHitTest:(NSPoint)point { if (!m_accessibleRoot) return [super accessibilityHitTest:point]; - NSPoint windowPoint = [[self window] convertScreenToBase:point]; QAccessibleInterface *childInterface = m_accessibleRoot->childAt(point.x, qt_mac_flipYCoordinate(point.y)); // No child found, meaning we hit the NSView |