summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoabackingstore.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoabackingstore.mm29
-rw-r--r--src/plugins/platforms/cocoa/qcocoaclipboard.mm1
-rw-r--r--src/plugins/platforms/cocoa/qcocoacursor.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm1
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm11
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h7
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm18
-rw-r--r--src/plugins/platforms/cocoa/qmacclipboard.h4
-rw-r--r--src/plugins/platforms/cocoa/qmacclipboard.mm4
-rw-r--r--src/plugins/platforms/cocoa/qmacmime.h4
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm38
-rw-r--r--src/plugins/platforms/cocoa/qnsviewaccessibility.mm1
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 &region, 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 &region, 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 &region, 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