src/gui/kernel/qcocoapanel_mac.mm
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
--- a/src/gui/kernel/qcocoapanel_mac.mm	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/gui/kernel/qcocoapanel_mac.mm	Tue Feb 02 00:43:10 2010 +0200
@@ -50,152 +50,16 @@
 #include <QtGui/QWidget>
 
 QT_FORWARD_DECLARE_CLASS(QWidget);
-QT_BEGIN_NAMESPACE
-extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); // qcocoaview.mm
-QT_END_NAMESPACE
 QT_USE_NAMESPACE
 
-
-@interface NSWindow (QtCoverForHackWithCategory)
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
-@end
-
-
 @implementation QT_MANGLE_NAMESPACE(QCocoaPanel)
 
-- (BOOL)canBecomeKeyWindow
-{
-    QWidget *widget = [self QT_MANGLE_NAMESPACE(qt_qwidget)];
-
-    bool isToolTip = (widget->windowType() == Qt::ToolTip);
-    bool isPopup = (widget->windowType() == Qt::Popup);
-    return !(isPopup || isToolTip);
-}
-
 /***********************************************************************
-  BEGIN Copy and Paste between QCocoaWindow and QCocoaPanel
+  Copy and Paste between QCocoaWindow and QCocoaPanel
   This is a bit unfortunate, but thanks to the dynamic dispatch we
   have to duplicate this code or resort to really silly forwarding methods
 **************************************************************************/
-
-/*
-    The methods keyDown, keyUp, and flagsChanged... These really shouldn't ever
-    get hit. We automatically say we can be first responder if we are a window.
-    So, the handling should get handled by the view. This is here more as a
-    last resort (i.e., this is code that can potentially be removed).
- */
-
-- (void)toggleToolbarShown:(id)sender
-{
-    macSendToolbarChangeEvent([self QT_MANGLE_NAMESPACE(qt_qwidget)]);
-    [super toggleToolbarShown:sender];
-}
-
-- (void)keyDown:(NSEvent *)theEvent
-{
-    bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
-    if (!keyOK)
-        [super keyDown:theEvent];
-}
-
-- (void)keyUp:(NSEvent *)theEvent
-{
-    bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
-    if (!keyOK)
-        [super keyUp:theEvent];
-}
-
-- (void)flagsChanged:(NSEvent *)theEvent
-{
-    qt_dispatchModifiersChanged(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
-    [super flagsChanged:theEvent];
-}
-
-
-- (void)tabletProximity:(NSEvent *)tabletEvent
-{
-    qt_dispatchTabletProximityEvent(tabletEvent);
-}
-
-- (void)sendEvent:(NSEvent *)event
-{
-    QWidget *widget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self];
-
-    // Cocoa can hold onto the window after we've disavowed its knowledge. So,
-    // if we get sent an event afterwards just have it go through the super's
-    // version and don't do any stuff with Qt.
-    if (!widget) {
-        [super sendEvent:event];
-        return;
-    }
-    [self retain];
-    QT_MANGLE_NAMESPACE(QCocoaView) *view = static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(qt_mac_nativeview_for(widget));
-    Qt::MouseButton mouseButton = cocoaButton2QtButton([event buttonNumber]);
-
-    // sometimes need to redirect mouse events to the popup.
-    QWidget *popup = qAppInstance()->activePopupWidget();
-    if (popup && popup != widget) {
-        switch([event type])
-        {
-        case NSLeftMouseDown:
-            qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton);
-            // Don't call super here. This prevents us from getting the mouseUp event,
-            // which we need to send even if the mouseDown event was not accepted.
-            // (this is standard Qt behavior.)
-            break;
-        case NSRightMouseDown:
-        case NSOtherMouseDown:
-            if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton))
-                [super sendEvent:event];
-            break;
-        case NSLeftMouseUp:
-        case NSRightMouseUp:
-        case NSOtherMouseUp:
-            if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonRelease, mouseButton))
-                [super sendEvent:event];
-            break;
-        case NSMouseMoved:
-            qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, Qt::NoButton);
-            break;
-        case NSLeftMouseDragged:
-        case NSRightMouseDragged:
-        case NSOtherMouseDragged:
-            [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->view = view;
-            [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->theEvent = event;
-            if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, mouseButton))
-                [super sendEvent:event];
-            break;
-        default:
-            [super sendEvent:event];
-            break;
-        }
-    } else {
-        [super sendEvent:event];
-    }
-    qt_mac_dispatchNCMouseMessage(self, event, [self QT_MANGLE_NAMESPACE(qt_qwidget)], leftButtonIsRightButton);
-
-
-    [self release];
-}
-
-- (BOOL)makeFirstResponder:(NSResponder *)responder
-{
-    // For some reason Cocoa wants to flip the first responder
-    // when Qt doesn't want to, sorry, but "No" :-)
-    if (responder == nil && qApp->focusWidget())
-        return NO;
-    return [super makeFirstResponder:responder];
-}
-
-/***********************************************************************
-  END Copy and Paste between QCocoaWindow and QCocoaPanel
-***********************************************************************/
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask
-{
-    if (styleMask & QtMacCustomizeWindow)
-        return [QT_MANGLE_NAMESPACE(QCocoaWindowCustomThemeFrame) class];
-    return [super frameViewClassForStyleMask:styleMask];
-}
+#include "qcocoasharedwindowmethods_mac_p.h"
 
 @end
 #endif