Avoid a crash when using the native menubar on Mac, due to non-static classes with identical names.
This commit is contained in:
parent
59253531bc
commit
4bde2451b0
2 changed files with 25 additions and 19 deletions
|
@ -109,10 +109,11 @@ static void setItemShortcutFromString(NSMenuItem* item, const string& s)
|
||||||
[item setKeyEquivalentModifierMask:modifiers];
|
[item setKeyEquivalentModifierMask:modifiers];
|
||||||
}
|
}
|
||||||
|
|
||||||
class EnabledListener : public SGPropertyChangeListener
|
namespace {
|
||||||
|
class CocoaEnabledListener : public SGPropertyChangeListener
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EnabledListener(NSMenuItem* i) :
|
CocoaEnabledListener(NSMenuItem* i) :
|
||||||
item(i)
|
item(i)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -126,6 +127,7 @@ public:
|
||||||
private:
|
private:
|
||||||
NSMenuItem* item;
|
NSMenuItem* item;
|
||||||
};
|
};
|
||||||
|
} // of anonymous namespace
|
||||||
|
|
||||||
FGCocoaMenuBar::CocoaMenuBarPrivate::CocoaMenuBarPrivate()
|
FGCocoaMenuBar::CocoaMenuBarPrivate::CocoaMenuBarPrivate()
|
||||||
{
|
{
|
||||||
|
@ -173,7 +175,7 @@ void FGCocoaMenuBar::CocoaMenuBarPrivate::menuFromProps(NSMenu* menu, SGProperty
|
||||||
setItemShortcutFromString(item, shortcut);
|
setItemShortcutFromString(item, shortcut);
|
||||||
}
|
}
|
||||||
|
|
||||||
n->getNode("enabled")->addChangeListener(new EnabledListener(item));
|
n->getNode("enabled")->addChangeListener(new CocoaEnabledListener(item));
|
||||||
[item setTarget:delegate];
|
[item setTarget:delegate];
|
||||||
[item setAction:@selector(itemAction:)];
|
[item setAction:@selector(itemAction:)];
|
||||||
}
|
}
|
||||||
|
@ -263,7 +265,7 @@ void FGCocoaMenuBar::init()
|
||||||
n->setBoolValue("enabled", true);
|
n->setBoolValue("enabled", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
n->getNode("enabled")->addChangeListener(new EnabledListener(item));
|
n->getNode("enabled")->addChangeListener(new CocoaEnabledListener(item));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -314,6 +314,8 @@ FGPUIMenuBar::make_object_map(SGPropertyNode * node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
struct EnabledListener : SGPropertyChangeListener {
|
struct EnabledListener : SGPropertyChangeListener {
|
||||||
void valueChanged(SGPropertyNode *node) {
|
void valueChanged(SGPropertyNode *node) {
|
||||||
NewGUI * gui = (NewGUI *)globals->get_subsystem("gui");
|
NewGUI * gui = (NewGUI *)globals->get_subsystem("gui");
|
||||||
|
@ -325,6 +327,8 @@ struct EnabledListener : SGPropertyChangeListener {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // of anonymous namespace
|
||||||
|
|
||||||
void
|
void
|
||||||
FGPUIMenuBar::add_enabled_listener(SGPropertyNode * node)
|
FGPUIMenuBar::add_enabled_listener(SGPropertyNode * node)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue