diff options
| -rw-r--r-- | doc/classes/@GlobalScope.xml | 4 | ||||
| -rw-r--r-- | scene/gui/menu_bar.cpp | 4 | ||||
| -rw-r--r-- | servers/display_server_headless.h | 13 |
3 files changed, 17 insertions, 4 deletions
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 42d931e124..095756c1b1 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -1590,6 +1590,10 @@ <member name="Marshalls" type="Marshalls" setter="" getter=""> The [Marshalls] singleton. </member> + <member name="NativeMenu" type="NativeMenu" setter="" getter=""> + The [NativeMenu] singleton. + [b]Note:[/b] Only implemented on macOS. + </member> <member name="NavigationMeshGenerator" type="NavigationMeshGenerator" setter="" getter=""> The [NavigationMeshGenerator] singleton. </member> diff --git a/scene/gui/menu_bar.cpp b/scene/gui/menu_bar.cpp index b8563f2225..a808a3b1b5 100644 --- a/scene/gui/menu_bar.cpp +++ b/scene/gui/menu_bar.cpp @@ -288,8 +288,8 @@ void MenuBar::_notification(int p_what) { } break; case NOTIFICATION_TRANSLATION_CHANGED: { NativeMenu *nmenu = NativeMenu::get_singleton(); - RID main_menu = nmenu->get_system_menu(NativeMenu::MAIN_MENU_ID); bool is_global = !global_menu_tag.is_empty(); + RID main_menu = is_global ? nmenu->get_system_menu(NativeMenu::MAIN_MENU_ID) : RID(); for (int i = 0; i < menu_cache.size(); i++) { shape(menu_cache.write[i]); if (is_global && menu_cache[i].global_index >= 0) { @@ -492,8 +492,8 @@ void MenuBar::shape(Menu &p_menu) { void MenuBar::_refresh_menu_names() { NativeMenu *nmenu = NativeMenu::get_singleton(); - RID main_menu = nmenu->get_system_menu(NativeMenu::MAIN_MENU_ID); bool is_global = !global_menu_tag.is_empty(); + RID main_menu = is_global ? nmenu->get_system_menu(NativeMenu::MAIN_MENU_ID) : RID(); Vector<PopupMenu *> popups = _get_popups(); for (int i = 0; i < popups.size(); i++) { diff --git a/servers/display_server_headless.h b/servers/display_server_headless.h index af13f8db21..7a44645b1e 100644 --- a/servers/display_server_headless.h +++ b/servers/display_server_headless.h @@ -51,6 +51,8 @@ private: return memnew(DisplayServerHeadless()); } + NativeMenu *native_menu = nullptr; + public: bool has_feature(Feature p_feature) const override { return false; } String get_name() const override { return "headless"; } @@ -132,8 +134,15 @@ public: void set_icon(const Ref<Image> &p_icon) override {} - DisplayServerHeadless() {} - ~DisplayServerHeadless() {} + DisplayServerHeadless() { + native_menu = memnew(NativeMenu); + } + ~DisplayServerHeadless() { + if (native_menu) { + memdelete(native_menu); + native_menu = nullptr; + } + } }; #endif // DISPLAY_SERVER_HEADLESS_H |
