From bdde6689264aad24e6ec402d443384fc949d891f Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 30 Apr 2025 10:50:23 -0500 Subject: [PATCH] fix: Linux `visibleOnAllWorkspaces` property (#46861) * test: do not skip visibleOnAllWorkspaces tests on Windows That feature is supported on Linux, so move the test from the "window states (excluding Linux)" section into the "window states" section. Co-authored-by: Charles Kerr Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> * chore: disable visibleOnAllWorkspaces test on Linux Co-authored-by: Charles Kerr * fix: NativeWindowViews::IsVisibleOnAllWorkspaces Co-authored-by: Charles Kerr * test: enable visibleOnAllWorkspaces tests on Linux Co-authored-by: Charles Kerr --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr --- shell/browser/native_window_views.cc | 7 +++++++ spec/api-browser-window-spec.ts | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index 689e7f13df8e..bae893002fae 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -1522,6 +1522,13 @@ void NativeWindowViews::SetVisibleOnAllWorkspaces( } bool NativeWindowViews::IsVisibleOnAllWorkspaces() const { + // NB: Electron >= 37 has a better long-term fix, but it also has an edge + // case which is a breaking change. The code here is dirtier (e.g. accessing + // a method marked as private) to avoid that edge case. More info @ + // https://github.com/electron/electron/pull/46834#issuecomment-2836287699 + if (const auto* view_native_widget = widget()->native_widget_private()) + return view_native_widget->IsVisibleOnAllWorkspaces(); + #if BUILDFLAG(IS_LINUX) if (IsX11()) { // Use the presence/absence of _NET_WM_STATE_STICKY in _NET_WM_STATE to diff --git a/spec/api-browser-window-spec.ts b/spec/api-browser-window-spec.ts index 0ef1faee1a27..3aa3933be055 100755 --- a/spec/api-browser-window-spec.ts +++ b/spec/api-browser-window-spec.ts @@ -5407,8 +5407,7 @@ describe('BrowserWindow module', () => { }); }); - // FIXME: enable this test on Linux as well. - ifdescribe(process.platform === 'darwin')('visibleOnAllWorkspaces state', () => { + ifdescribe(process.platform !== 'win32')('visibleOnAllWorkspaces state', () => { describe('with properties', () => { it('can be changed', () => { const w = new BrowserWindow({ show: false });