mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
views: mac: Add CEF_SHOW_STATE_HIDDEN (fixes #3630)
- Adds `--initial-show-state=hidden` support for cefclient and cefsimple where the window launches as initially hidden (no dock thumbnail). - Adds `--hide-window-on-close` support for cefclient where clicking the red traffic light button hides the window instead of closing it.
This commit is contained in:
@@ -1,3 +1,65 @@
|
||||
diff --git chrome/browser/extensions/api/sessions/sessions_api.cc chrome/browser/extensions/api/sessions/sessions_api.cc
|
||||
index cbecf407dfce8..35c2bf2687283 100644
|
||||
--- chrome/browser/extensions/api/sessions/sessions_api.cc
|
||||
+++ chrome/browser/extensions/api/sessions/sessions_api.cc
|
||||
@@ -333,6 +333,7 @@ SessionsGetDevicesFunction::CreateWindowModel(
|
||||
state = api::windows::WindowState::kNormal;
|
||||
break;
|
||||
case ui::SHOW_STATE_MINIMIZED:
|
||||
+ case ui::SHOW_STATE_HIDDEN:
|
||||
state = api::windows::WindowState::kMinimized;
|
||||
break;
|
||||
case ui::SHOW_STATE_MAXIMIZED:
|
||||
diff --git chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc
|
||||
index cef40af382b1e..a2cf4691edc37 100644
|
||||
--- chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc
|
||||
+++ chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc
|
||||
@@ -43,6 +43,7 @@ ChromeNativeAppWindowViewsAura::GetRestorableState(
|
||||
|
||||
case ui::SHOW_STATE_DEFAULT:
|
||||
case ui::SHOW_STATE_MINIMIZED:
|
||||
+ case ui::SHOW_STATE_HIDDEN:
|
||||
case ui::SHOW_STATE_INACTIVE:
|
||||
case ui::SHOW_STATE_END:
|
||||
return ui::SHOW_STATE_NORMAL;
|
||||
diff --git components/sessions/core/session_service_commands.cc components/sessions/core/session_service_commands.cc
|
||||
index 70781f59a7528..65f30d4ff614d 100644
|
||||
--- components/sessions/core/session_service_commands.cc
|
||||
+++ components/sessions/core/session_service_commands.cc
|
||||
@@ -165,9 +165,10 @@ enum PersistedWindowShowState {
|
||||
PERSISTED_SHOW_STATE_MAXIMIZED = 3,
|
||||
// SHOW_STATE_INACTIVE (4) never persisted.
|
||||
PERSISTED_SHOW_STATE_FULLSCREEN = 5,
|
||||
- PERSISTED_SHOW_STATE_DETACHED_DEPRECATED = 6,
|
||||
- PERSISTED_SHOW_STATE_DOCKED_DEPRECATED = 7,
|
||||
- PERSISTED_SHOW_STATE_END = 8,
|
||||
+ // SHOW_STATE_HIDDEN (6) never persisted.
|
||||
+ PERSISTED_SHOW_STATE_DETACHED_DEPRECATED = 7,
|
||||
+ PERSISTED_SHOW_STATE_DOCKED_DEPRECATED = 8,
|
||||
+ PERSISTED_SHOW_STATE_END = 9,
|
||||
};
|
||||
|
||||
// TODO(crbug.com/1506068): Remove this around December 2024. This is part of a
|
||||
@@ -191,6 +192,7 @@ PersistedWindowShowState ShowStateToPersistedShowState(
|
||||
case ui::SHOW_STATE_NORMAL:
|
||||
return PERSISTED_SHOW_STATE_NORMAL;
|
||||
case ui::SHOW_STATE_MINIMIZED:
|
||||
+ case ui::SHOW_STATE_HIDDEN:
|
||||
return PERSISTED_SHOW_STATE_MINIMIZED;
|
||||
case ui::SHOW_STATE_MAXIMIZED:
|
||||
return PERSISTED_SHOW_STATE_MAXIMIZED;
|
||||
diff --git components/sessions/core/tab_restore_service_impl.cc components/sessions/core/tab_restore_service_impl.cc
|
||||
index 837fbd223fe94..0f751768e5e32 100644
|
||||
--- components/sessions/core/tab_restore_service_impl.cc
|
||||
+++ components/sessions/core/tab_restore_service_impl.cc
|
||||
@@ -192,6 +192,7 @@ int SerializeWindowShowState(ui::WindowShowState show_state) {
|
||||
case ui::SHOW_STATE_NORMAL:
|
||||
return kSerializedShowStateNormal;
|
||||
case ui::SHOW_STATE_MINIMIZED:
|
||||
+ case ui::SHOW_STATE_HIDDEN:
|
||||
return kSerializedShowStateMinimized;
|
||||
case ui::SHOW_STATE_MAXIMIZED:
|
||||
return kSerializedShowStateMaximized;
|
||||
diff --git content/browser/renderer_host/render_widget_host_view_base.cc content/browser/renderer_host/render_widget_host_view_base.cc
|
||||
index 6b51fa563b1b7..4dfac0e609ae6 100644
|
||||
--- content/browser/renderer_host/render_widget_host_view_base.cc
|
||||
@@ -151,6 +213,32 @@ index b3acdceb83879..7a2de7e7d0678 100644
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
// Set the view's active state (i.e., tint state of controls).
|
||||
virtual void SetActive(bool active) = 0;
|
||||
diff --git ui/base/mojom/ui_base_types_mojom_traits.h ui/base/mojom/ui_base_types_mojom_traits.h
|
||||
index 1d79fc2dc34cc..ce5bf0ebf531f 100644
|
||||
--- ui/base/mojom/ui_base_types_mojom_traits.h
|
||||
+++ ui/base/mojom/ui_base_types_mojom_traits.h
|
||||
@@ -172,6 +172,7 @@ struct EnumTraits<ui::mojom::WindowShowState, ui::WindowShowState> {
|
||||
case ui::SHOW_STATE_INACTIVE:
|
||||
return ui::mojom::WindowShowState::SHOW_STATE_INACTIVE;
|
||||
case ui::SHOW_STATE_MINIMIZED:
|
||||
+ case ui::SHOW_STATE_HIDDEN:
|
||||
return ui::mojom::WindowShowState::SHOW_STATE_MINIMIZED;
|
||||
case ui::SHOW_STATE_MAXIMIZED:
|
||||
return ui::mojom::WindowShowState::SHOW_STATE_MAXIMIZED;
|
||||
diff --git ui/base/ui_base_types.h ui/base/ui_base_types.h
|
||||
index 8bfbd2d675db6..ee90ad2884db7 100644
|
||||
--- ui/base/ui_base_types.h
|
||||
+++ ui/base/ui_base_types.h
|
||||
@@ -26,7 +26,8 @@ enum WindowShowState {
|
||||
SHOW_STATE_MAXIMIZED = 3,
|
||||
SHOW_STATE_INACTIVE = 4, // Views only, not persisted.
|
||||
SHOW_STATE_FULLSCREEN = 5,
|
||||
- SHOW_STATE_END = 6 // The end of show state enum.
|
||||
+ SHOW_STATE_HIDDEN = 6, // Views and MacOS only.
|
||||
+ SHOW_STATE_END = 7 // The end of show state enum.
|
||||
};
|
||||
|
||||
// Specifies which edges of the window are tiled.
|
||||
diff --git ui/ozone/platform/x11/x11_window.cc ui/ozone/platform/x11/x11_window.cc
|
||||
index 449f721727fb1..ab549b482bc36 100644
|
||||
--- ui/ozone/platform/x11/x11_window.cc
|
||||
@@ -359,8 +447,20 @@ index e963c861f7099..6bc0ac23db5e9 100644
|
||||
// Visibility of the cursor. On Windows we can have multiple root windows and
|
||||
// the implementation of ::ShowCursor() is based on a counter, so making this
|
||||
// member static ensures that ::ShowCursor() is always called exactly once
|
||||
diff --git ui/views/widget/native_widget_mac.mm ui/views/widget/native_widget_mac.mm
|
||||
index 3a6617aefe420..6eeffcab6bb65 100644
|
||||
--- ui/views/widget/native_widget_mac.mm
|
||||
+++ ui/views/widget/native_widget_mac.mm
|
||||
@@ -640,6 +640,7 @@ void NativeWidgetMac::Show(ui::WindowShowState show_state,
|
||||
break;
|
||||
case ui::SHOW_STATE_MAXIMIZED:
|
||||
case ui::SHOW_STATE_FULLSCREEN:
|
||||
+ case ui::SHOW_STATE_HIDDEN:
|
||||
NOTIMPLEMENTED();
|
||||
break;
|
||||
case ui::SHOW_STATE_END:
|
||||
diff --git ui/views/widget/widget.cc ui/views/widget/widget.cc
|
||||
index 5093dee22b9da..3f29234369599 100644
|
||||
index 5093dee22b9da..df7f86de04259 100644
|
||||
--- ui/views/widget/widget.cc
|
||||
+++ ui/views/widget/widget.cc
|
||||
@@ -399,7 +399,8 @@ void Widget::Init(InitParams params) {
|
||||
@@ -373,7 +473,7 @@ index 5093dee22b9da..3f29234369599 100644
|
||||
is_headless_ = params.ShouldInitAsHeadless();
|
||||
|
||||
if (params.opacity == views::Widget::InitParams::WindowOpacity::kInferred &&
|
||||
@@ -497,14 +498,22 @@ void Widget::Init(InitParams params) {
|
||||
@@ -497,14 +498,24 @@ void Widget::Init(InitParams params) {
|
||||
|
||||
if (show_state == ui::SHOW_STATE_MAXIMIZED) {
|
||||
Maximize();
|
||||
@@ -383,6 +483,8 @@ index 5093dee22b9da..3f29234369599 100644
|
||||
saved_show_state_ = ui::SHOW_STATE_MINIMIZED;
|
||||
+ } else if (show_state == ui::SHOW_STATE_FULLSCREEN) {
|
||||
+ SetFullscreen(true);
|
||||
+ } else if (show_state == ui::SHOW_STATE_HIDDEN) {
|
||||
+ Hide();
|
||||
}
|
||||
} else if (delegate) {
|
||||
SetContentsView(delegate->TransferOwnershipOfContentsView());
|
||||
@@ -397,7 +499,7 @@ index 5093dee22b9da..3f29234369599 100644
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1646,10 +1655,16 @@ void Widget::OnNativeWidgetParentChanged(gfx::NativeView parent) {
|
||||
@@ -1646,10 +1657,16 @@ void Widget::OnNativeWidgetParentChanged(gfx::NativeView parent) {
|
||||
}
|
||||
|
||||
gfx::Size Widget::GetMinimumSize() const {
|
||||
@@ -414,6 +516,16 @@ index 5093dee22b9da..3f29234369599 100644
|
||||
return non_client_view_ ? non_client_view_->GetMaximumSize() : gfx::Size();
|
||||
}
|
||||
|
||||
@@ -1900,7 +1917,8 @@ bool Widget::SetInitialFocus(ui::WindowShowState show_state) {
|
||||
return false;
|
||||
View* v = widget_delegate_->GetInitiallyFocusedView();
|
||||
if (!focus_on_creation_ || show_state == ui::SHOW_STATE_INACTIVE ||
|
||||
- show_state == ui::SHOW_STATE_MINIMIZED) {
|
||||
+ show_state == ui::SHOW_STATE_MINIMIZED ||
|
||||
+ show_state == ui::SHOW_STATE_HIDDEN) {
|
||||
// If not focusing the window now, tell the focus manager which view to
|
||||
// focus when the window is restored.
|
||||
if (v)
|
||||
diff --git ui/views/widget/widget.h ui/views/widget/widget.h
|
||||
index 1939476d29da5..895df61324a2e 100644
|
||||
--- ui/views/widget/widget.h
|
||||
|
Reference in New Issue
Block a user