electron/shell/browser/ui/cocoa
michal-pichlinski-openfin 96460becf9
fix: Update widget visibility in NativeWindowMac::ShowInactive (#45427)
When using `views::WebView` on macOS `NativeWidgetMacNSWindowHost`
contains a layer and compositor responsible for drawing web contents.
To trigger drawing `NativeWidgetMacNSWindowHost::OnVisibilityChanged`
needs to be called and `[NSWindow orderFrontRegardless]` does not trigger
`[NSWindow orderWindow:relativeTo:]` which can change
`NativeWidgetMacNSWindowHost` visiblity with stack:
```
views::NativeWidgetMacNSWindowHost::OnVisibilityChanged(bool)
remote_cocoa::NativeWidgetNSWindowBridge::OnVisibilityChanged()
-[ViewsNSWindowDelegate onWindowOrderChanged:]
-[NativeWidgetMacNSWindow orderWindow:relativeTo:]
```
`views::Widget` has method for showing inactive window:
`views::Widget::ShowInactive` which triggers
`NativeWidgetMacNSWindowHost::OnVisibilityChanged` with stack:
```
views::NativeWidgetMacNSWindowHost::OnVisibilityChanged(bool)
remote_cocoa::NativeWidgetNSWindowBridge::SetVisibilityState(remote_cocoa::mojom::WindowVisibilityState)
views::NativeWidgetMacNSWindowHost::SetVisibilityState(remote_cocoa::mojom::WindowVisibilityState)
views::NativeWidgetMac::Show(ui::mojom::WindowShowState, gfx::Rect const&)
views::Widget::ShowInactive() + 168
```
However this call seems to be insufficient to bring window to front,
therefore `[NSWindow orderFrontRegardless]` still needs to be called.
Calling `views::Widget::ShowInactive` ensures that all logic related to
showing Chromium widget will be properly executed, but onfortunately it
does not call `[NSWindow orderWindow:relativeTo:]` which is used to
disabling headless mode by the `ElectronNSWindow`, therefore we need to
trigger it manually through exposed `[ElectronNSWindow disableHeadlessMode]`.

Fixes: #45415
2025-02-07 11:31:08 -08:00
..
electron_bundle_mover.h
electron_bundle_mover.mm
electron_menu_controller.h
electron_menu_controller.mm chore: remove unused base/ includes (#43688) 2024-09-12 16:05:37 +02:00
electron_native_widget_mac.h
electron_native_widget_mac.mm
electron_ns_panel.h
electron_ns_panel.mm
electron_ns_window.h fix: Update widget visibility in NativeWindowMac::ShowInactive (#45427) 2025-02-07 11:31:08 -08:00
electron_ns_window.mm fix: Update widget visibility in NativeWindowMac::ShowInactive (#45427) 2025-02-07 11:31:08 -08:00
electron_ns_window_delegate.h
electron_ns_window_delegate.mm refactor: remove InspectableWebContentsViewMac in favor of the Views version (#44628) 2025-01-17 10:21:10 -05:00
electron_preview_item.h
electron_preview_item.mm
electron_touch_bar.h
electron_touch_bar.mm
event_dispatching_window.h
event_dispatching_window.mm
NSString+ANSI.h
NSString+ANSI.mm
root_view_mac.h
root_view_mac.mm
views_delegate_mac.h
views_delegate_mac.mm
window_buttons_proxy.h
window_buttons_proxy.mm chore: remove unused base/ includes (#43688) 2024-09-12 16:05:37 +02:00