[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/utils/charm/trunk/Charm
From:       Mike Arthur <mike () mikearthur ! co ! uk>
Date:       2010-02-05 18:58:05
Message-ID: 1265396285.060151.32224.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1085693 by mikearthur:

Implement Cocoa shortcut handling.

 M  +10 -2     Application.h  
 M  +15 -8     CMakeLists.txt  
 A             MacApplication.cpp   [License: UNKNOWN]
 A             MacApplication.h   [License: UNKNOWN]
 M  +12 -40    MacCarbonApplication.cpp  
 M  +2 -5      MacCarbonApplication.h  
 A             MacCocoaApplication.h   [License: UNKNOWN]
 A             MacCocoaApplication.mm  


--- trunk/playground/utils/charm/trunk/Charm/Application.h #1085692:1085693
@@ -13,8 +13,12 @@
 #include <QSystemTrayIcon>
 #include <QMenu>
 #include <QAction>
-#if defined Q_WS_MAC && !defined QT_MAC_USE_COCOA
+#ifdef Q_WS_MAC
+#ifdef QT_MAC_USE_COCOA
+#include "MacCocoaApplication.h"
+#else
 #include "MacCarbonApplication.h"
+#endif
 #else
 #include <QApplication>
 #endif
@@ -37,8 +41,12 @@
 // FIXME read configuration name from command line
 class IdleDetector;
 
-#if defined Q_WS_MAC && !defined QT_MAC_USE_COCOA
+#ifdef Q_WS_MAC
+#ifdef QT_MAC_USE_COCOA
+typedef MacCocoaApplication ApplicationBase;
+#else
 typedef MacCarbonApplication ApplicationBase;
+#endif
 #else
 typedef QApplication ApplicationBase;
 #endif
--- trunk/playground/utils/charm/trunk/Charm/CMakeLists.txt #1085692:1085693
@@ -61,16 +61,23 @@
                Idle/X11IdleDetector.cpp
 )
 	set(HAVE_LIBXSS 0)
-	IF( APPLE AND NOT QT_MAC_USE_COCOA )
-	   SET( CharmApplication_SRCS 
-              ${CharmApplication_SRCS} Idle/MacCarbonIdleDetector.cpp
-              MacCarbonApplication.cpp )
+	IF( APPLE )
+	   SET( CharmApplication_SRCS ${CharmApplication_SRCS} MacApplication.cpp )
+	   IF( QT_MAC_USE_COCOA )
+	      SET( CharmApplication_SRCS
+	         ${CharmApplication_SRCS} #Idle/MacCocoaIdleDetector.mm
+	         MacCocoaApplication.mm )
+           ELSE( QT_MAC_USE_COCOA )
+	      SET( CharmApplication_SRCS
+                 ${CharmApplication_SRCS} Idle/MacCarbonIdleDetector.cpp
+                 MacCarbonApplication.cpp )
+	   ENDIF( QT_MAC_USE_COCOA )
 	   EXEC_PROGRAM( sw_vers ARGS -buildVersion OUTPUT_VARIABLE DARWIN_BUILDVERSION )
 	   STRING(REGEX MATCH "^[0-9]+" DARWIN_VERSION ${DARWIN_BUILDVERSION})
 #	   MESSAGE(STATUS "DARWIN_VERSION=${DARWIN_VERSION}")
 	   ADD_DEFINITIONS( -DDARWIN_VERSION=${DARWIN_VERSION} )
-        ELSE( APPLE AND NOT QT_MAC_USE_COCOA )
-	    IF( UNIX AND NOT APPLE )
+        ELSE( APPLE )
+	    IF( UNIX )
                 include(FindX11)
 	        if(X11_FOUND)
 		    INCLUDE_DIRECTORIES( ${X11_INCLUDE_DIR} )
@@ -82,8 +89,8 @@
                         message("Please install libXss-dev to get idle detection to \
work on Linux")  endif(X11_Xscreensaver_LIB)
                 endif(X11_FOUND)
-            ENDIF( UNIX AND NOT APPLE )
-        ENDIF( APPLE AND NOT QT_MAC_USE_COCOA )
+            ENDIF( UNIX )
+        ENDIF( APPLE )
         configure_file(config-charm.h.cmake \
${CMAKE_CURRENT_BINARY_DIR}/config-charm.h )  
 
--- trunk/playground/utils/charm/trunk/Charm/MacCarbonApplication.cpp \
#1085692:1085693 @@ -6,6 +6,11 @@
 #include <QShortcut>
 #include <QTextCodec>
 
+/*
+ * Most of the code below has been taken from private files in Qt,
+ * specifically src/gui/kernel/qkeymapper_mac.cpp
+ */
+
 /* key maps */
 struct qt_mac_enum_mapper
 {
@@ -303,7 +308,7 @@
                 static QTextCodec *c = 0;
                 if(!c)
                     c = QTextCodec::codecForName("Apple Roman");
-		char tmpChar = static_cast< char >( translatedChar ); // **sigh**
+        char tmpChar = static_cast< char >( translatedChar ); // **sigh**
                 *outChar = c->toUnicode(&tmpChar, 1).at(0);
             } else {
                 *qtKey = qt_mac_get_key(*outModifiers, QChar(translatedChar), \
keyCode); @@ -371,7 +376,7 @@
 }
 
 MacCarbonApplication::MacCarbonApplication( int& argc, char* argv[] )
-    : QApplication( argc, argv )
+    : MacApplication( argc, argv )
 {
 }
 
@@ -379,39 +384,6 @@
 {
 }
 
-static QList< QShortcut* > shortcuts( QWidget* parent = 0 ) 
-{
-    QList< QShortcut* > result;
-    if( parent == 0 )
-    {
-        const QWidgetList widgets = QApplication::topLevelWidgets();
-        for( QWidgetList::const_iterator it = widgets.begin(); it != widgets.end(); \
                ++it )
-            result += shortcuts( *it ); 
-    }
-    else
-    {
-        const QList< QShortcut* > cuts = parent->findChildren< QShortcut* >();
-        for( QList< QShortcut* >::const_iterator it = cuts.begin(); it != \
                cuts.end(); ++it )
-            if( (*it)->context() == Qt::ApplicationShortcut )
-                result.push_back( *it );
-        
-        const QList< QWidget* > children = parent->findChildren< QWidget* >();
-        for( QList< QWidget* >::const_iterator it = children.begin(); it != \
                children.end(); ++it )
-            result += shortcuts( *it );
-    }
-    return result;
-}
-
-static QList< QShortcut* > activeShortcuts( const QKeySequence& seq, bool autorep, \
                QWidget* parent = 0 )
-{
-    const QList< QShortcut* > cuts = shortcuts( parent );
-    QList< QShortcut* > result;
-    for( QList< QShortcut* >::const_iterator it = cuts.begin(); it != cuts.end(); \
                ++it )
-        if( (*it)->context() == Qt::ApplicationShortcut && ((*it)->autoRepeat() == \
                autorep || !autorep ) && (*it)->isEnabled() && (*it)->key().matches( \
                seq ) )
-            result.push_back( *it );
-    return result;
-}
-
 bool MacCarbonApplication::macEventFilter( EventHandlerCallRef caller, EventRef \
event )  {
     switch( GetEventClass( event ) )
@@ -425,32 +397,32 @@
             qt_mac_send_modifiers_changed( modifiers, this );
             break;
         }
-       
+
         Qt::KeyboardModifiers modifiers;
         int qtKey;
         QChar ourChar;
         bool handled;
         if( !translateKeyEventInternal( caller, event, &qtKey, &ourChar, &modifiers, \
&handled ) )  return false;
-     
+
         const bool autorep = GetEventKind( event ) == kEventRawKeyRepeat;
         if( GetEventKind( event ) == kEventRawKeyUp )
             break;
-        
+
         const QKeySequence seq( qtKey | modifiers );
         const QList< QShortcut* > active = activeShortcuts( seq, autorep );
         for( QList< QShortcut* >::const_iterator it = active.begin(); it != \
active.end(); ++it )  {
             QShortcutEvent event( seq, (*it)->id() );
             QObject* const receiver = *it;
-            receiver->event( &event ); 
+            receiver->event( &event );
         }
         return !active.isEmpty();
     }
     case kEventClassAppleEvent:
         emit dockIconClicked();
     }
-    return QApplication::macEventFilter( caller, event );
+    return MacApplication::macEventFilter( caller, event );
 }
 
 #include "MacCarbonApplication.moc"
--- trunk/playground/utils/charm/trunk/Charm/MacCarbonApplication.h #1085692:1085693
@@ -1,9 +1,9 @@
 #ifndef MACCARBONAPPLICATION_H
 #define MACCARBONAPPLICATION_H
 
-#include <QApplication>
+#include "MacApplication.h"
 
-class MacCarbonApplication : public QApplication
+class MacCarbonApplication : public MacApplication
 {
     Q_OBJECT
 public:
@@ -12,9 +12,6 @@
 
 protected:
     bool macEventFilter( EventHandlerCallRef caller, EventRef event );
-
-Q_SIGNALS:
-    void dockIconClicked();
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic