From da02ca7e75cec1055892fdd9e26a491b3bb3776a Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Wed, 6 Mar 2024 20:29:31 +0200 Subject: [PATCH] [NativeMenu] Add checks to avoid unnecessary warnings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added by Rémi: Add dummy NativeMenu to DisplayServerHeadless, fixing crashes when using `--headless`. Co-authored-by: Rémi Verschelde --- doc/classes/@GlobalScope.xml | 4 ++++ scene/gui/menu_bar.cpp | 4 ++-- 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 42d931e12465..095756c1b1e4 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -1590,6 +1590,10 @@ The [Marshalls] singleton. + + The [NativeMenu] singleton. + [b]Note:[/b] Only implemented on macOS. + The [NavigationMeshGenerator] singleton. diff --git a/scene/gui/menu_bar.cpp b/scene/gui/menu_bar.cpp index b8563f222519..a808a3b1b51e 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 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 af13f8db21c4..7a44645b1e35 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 &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