src/gui/widgets/qmenu_mac.mm
changeset 7 f7bc934e204c
parent 3 41300fa6a67c
child 30 5dc02b23752f
equal deleted inserted replaced
3:41300fa6a67c 7:f7bc934e204c
     1 /****************************************************************************
     1 /****************************************************************************
     2 **
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     4 ** All rights reserved.
     4 ** All rights reserved.
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     6 **
     6 **
     7 ** This file is part of the QtGui module of the Qt Toolkit.
     7 ** This file is part of the QtGui module of the Qt Toolkit.
     8 **
     8 **
   173         ret |= NSShiftKeyMask;
   173         ret |= NSShiftKeyMask;
   174 #endif
   174 #endif
   175     return ret;
   175     return ret;
   176 }
   176 }
   177 
   177 
       
   178 static void cancelAllMenuTracking()
       
   179 {
       
   180 #ifdef QT_MAC_USE_COCOA
       
   181     QMacCocoaAutoReleasePool pool;
       
   182     NSMenu *mainMenu = [NSApp mainMenu];
       
   183     [mainMenu cancelTracking];
       
   184     for (NSMenuItem *item in [mainMenu itemArray]) {
       
   185         if ([item submenu]) {
       
   186             [[item submenu] cancelTracking];
       
   187         }
       
   188     }
       
   189 #else
       
   190     CancelMenuTracking(AcquireRootMenu(), true, 0);
       
   191 #endif
       
   192 }
       
   193 
   178 static bool actualMenuItemVisibility(const QMenuBarPrivate::QMacMenuBarPrivate *mbp,
   194 static bool actualMenuItemVisibility(const QMenuBarPrivate::QMacMenuBarPrivate *mbp,
   179                                      const QMacMenuAction *action)
   195                                      const QMacMenuAction *action)
   180 {
   196 {
   181     bool visible = action->action->isVisible();
   197     bool visible = action->action->isVisible();
   182     if (visible && action->action->text() == QString(QChar(0x14)))
   198     if (visible && action->action->text() == QString(QChar(0x14)))
  1828     QWidget *tlw = q->window();
  1844     QWidget *tlw = q->window();
  1829     menubars()->remove(tlw);
  1845     menubars()->remove(tlw);
  1830     mac_menubar = 0;
  1846     mac_menubar = 0;
  1831 
  1847 
  1832     if (qt_mac_current_menubar.qmenubar == q) {
  1848     if (qt_mac_current_menubar.qmenubar == q) {
       
  1849 #ifdef QT_MAC_USE_COCOA
       
  1850         QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = getMenuLoader();
       
  1851         [loader removeActionsFromAppMenu];
       
  1852 #else
       
  1853         cancelAllMenuTracking();
       
  1854 #endif
  1833         extern void qt_event_request_menubarupdate(); //qapplication_mac.cpp
  1855         extern void qt_event_request_menubarupdate(); //qapplication_mac.cpp
  1834         qt_event_request_menubarupdate();
  1856         qt_event_request_menubarupdate();
  1835     }
  1857     }
  1836 }
  1858 }
  1837 
  1859 
  1929     }
  1951     }
  1930 
  1952 
  1931     // INVARIANT: modalWidget is window modal. Disable menu entries
  1953     // INVARIANT: modalWidget is window modal. Disable menu entries
  1932     // if the menu bar belongs to an ancestor of modalWidget:
  1954     // if the menu bar belongs to an ancestor of modalWidget:
  1933     return qt_mac_is_ancestor(menuBar->parentWidget(), modalWidget);
  1955     return qt_mac_is_ancestor(menuBar->parentWidget(), modalWidget);
  1934 }
       
  1935 
       
  1936 static void cancelAllMenuTracking()
       
  1937 {
       
  1938 #ifdef QT_MAC_USE_COCOA
       
  1939     QMacCocoaAutoReleasePool pool;
       
  1940     NSMenu *mainMenu = [NSApp mainMenu];
       
  1941     [mainMenu cancelTracking];
       
  1942     for (NSMenuItem *item in [mainMenu itemArray]) {
       
  1943         if ([item submenu]) {
       
  1944             [[item submenu] cancelTracking];
       
  1945         }
       
  1946     }
       
  1947 #endif
       
  1948 }
  1956 }
  1949 
  1957 
  1950 /*!
  1958 /*!
  1951   \internal
  1959   \internal
  1952 
  1960