summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/osx/salnsmenu.h8
-rw-r--r--vcl/osx/salmenu.cxx42
-rw-r--r--vcl/osx/salnsmenu.mm15
3 files changed, 16 insertions, 49 deletions
diff --git a/vcl/inc/osx/salnsmenu.h b/vcl/inc/osx/salnsmenu.h
index 47c410b6a35e..f815c14c006d 100644
--- a/vcl/inc/osx/salnsmenu.h
+++ b/vcl/inc/osx/salnsmenu.h
@@ -33,10 +33,6 @@ class AquaSalMenuItem;
@interface SalNSMenu : NSMenu
{
- /* Caution: SalNSMenu instances occasionally are binary copied
- in AquaSalMenu::ShowNativePopupMenu. If any members are added,
- please take this into account !
- */
AquaSalMenu* mpMenu;
}
-(id)initWithMenu: (AquaSalMenu*)pMenu;
@@ -46,10 +42,6 @@ class AquaSalMenuItem;
@interface SalNSMenuItem : NSMenuItem
{
- /* Caution: SalNSMenuItem instances occasionally are binary copied
- in AquaSalMenu::ShowNativePopupMenu. If any members are added,
- please take this into account !
- */
AquaSalMenuItem* mpMenuItem;
}
-(id)initWithMenuItem: (AquaSalMenuItem*)pMenuItem;
diff --git a/vcl/osx/salmenu.cxx b/vcl/osx/salmenu.cxx
index 5119d6cf8f13..91a5c2e46279 100644
--- a/vcl/osx/salmenu.cxx
+++ b/vcl/osx/salmenu.cxx
@@ -317,37 +317,6 @@ AquaSalMenu::~AquaSalMenu()
}
}
-sal_Int32 removeUnusedItemsRunner(NSMenu * pMenu)
-{
- NSArray * elements = [pMenu itemArray];
- NSEnumerator * it = [elements objectEnumerator];
- id elem;
- NSMenuItem * lastDisplayedMenuItem = nil;
- sal_Int32 drawnItems = 0;
- bool firstEnabledItemIsNoSeparator = false;
- while((elem=[it nextObject]) != nil) {
- NSMenuItem * item = static_cast<NSMenuItem *>(elem);
- if( (![item isEnabled] && ![item isSeparatorItem]) || ([item isSeparatorItem] && (lastDisplayedMenuItem != nil && [lastDisplayedMenuItem isSeparatorItem])) ) {
- [[item menu]removeItem:item];
- } else {
- if( ! firstEnabledItemIsNoSeparator && [item isSeparatorItem] ) {
- [[item menu]removeItem:item];
- } else {
- firstEnabledItemIsNoSeparator = true;
- lastDisplayedMenuItem = item;
- drawnItems++;
- if( [item hasSubmenu] ) {
- removeUnusedItemsRunner( [item submenu] );
- }
- }
- }
- }
- if( lastDisplayedMenuItem != nil && [lastDisplayedMenuItem isSeparatorItem]) {
- [[lastDisplayedMenuItem menu]removeItem:lastDisplayedMenuItem];
- }
- return drawnItems;
-}
-
bool AquaSalMenu::ShowNativePopupMenu(FloatingWindow * pWin, const Rectangle& rRect, FloatWinPopupFlags nFlags)
{
// do not use native popup menu when AQUA_NATIVE_MENUS is set to false
@@ -365,13 +334,6 @@ bool AquaSalMenu::ShowNativePopupMenu(FloatingWindow * pWin, const Rectangle& rR
NSView* pPopupNSView = static_cast<AquaSalFrame *>(pWin->ImplGetWindow()->ImplGetFrame())->mpNSView;
NSRect popupFrame = [pPopupNSView frame];
- // since we manipulate the menu below (removing entries)
- // let's rather make a copy here and work with that
- NSMenu* pCopyMenu = [mpMenu copy];
-
- // filter disabled elements
- removeUnusedItemsRunner( pCopyMenu );
-
// create frame rect
NSRect displayPopupFrame = NSMakeRect( rRect.Left()+(offset-1), rRect.Top()+(offset+1), popupFrame.size.width, 0 );
pParentAquaSalFrame->VCLToCocoa(displayPopupFrame, false);
@@ -390,15 +352,13 @@ bool AquaSalMenu::ShowNativePopupMenu(FloatingWindow * pWin, const Rectangle& rR
// open popup menu
NSPopUpButtonCell * pPopUpButtonCell = [[NSPopUpButtonCell alloc] initTextCell:@"" pullsDown:NO];
- [pPopUpButtonCell setMenu: pCopyMenu];
+ [pPopUpButtonCell setMenu: mpMenu];
[pPopUpButtonCell selectItem:nil];
[AquaA11yWrapper setPopupMenuOpen: YES];
[pPopUpButtonCell performClickWithFrame:displayPopupFrame inView:pParentNSView];
[pPopUpButtonCell release];
[AquaA11yWrapper setPopupMenuOpen: NO];
- // clean up the copy
- [pCopyMenu release];
return true;
}
diff --git a/vcl/osx/salnsmenu.mm b/vcl/osx/salnsmenu.mm
index 6bbc683fc5ec..a0de415c0cd4 100644
--- a/vcl/osx/salnsmenu.mm
+++ b/vcl/osx/salnsmenu.mm
@@ -55,6 +55,21 @@
else
OSL_FAIL( "unconnected menu" );
}
+ else if( mpMenu->mpVCLMenu )
+ {
+ mpMenu->mpVCLMenu->Activate();
+
+ // Hide disabled items
+ NSArray* elements = [pMenu itemArray];
+ NSEnumerator* it = [elements objectEnumerator];
+ id element;
+ while ( ( element = [it nextObject] ) != nil )
+ {
+ NSMenuItem* item = static_cast< NSMenuItem* >( element );
+ if( ![item isSeparatorItem] )
+ [item setHidden: ![item isEnabled]];
+ }
+ }
}
}