diff --git a/include/capi/views/cef_window_delegate_capi.h b/include/capi/views/cef_window_delegate_capi.h index ce63b8651..8a6b638cc 100644 --- a/include/capi/views/cef_window_delegate_capi.h +++ b/include/capi/views/cef_window_delegate_capi.h @@ -33,7 +33,7 @@ // by hand. See the translator.README.txt file in the tools directory for // more information. // -// $hash=9f0389a439e6787282880d53375369829adb6a3d$ +// $hash=7201d268e16fc89f255b6ccd00d043f34fe77584$ // #ifndef CEF_INCLUDE_CAPI_VIEWS_CEF_WINDOW_DELEGATE_CAPI_H_ @@ -139,7 +139,7 @@ typedef struct _cef_window_delegate_t { /// /// Return true (1) if |window| should be created with standard window buttons - /// like close, minimize and zoom. + /// like close, minimize and zoom. This function is only supported on macOS. /// int(CEF_CALLBACK* with_standard_window_buttons)( struct _cef_window_delegate_t* self, @@ -198,6 +198,17 @@ typedef struct _cef_window_delegate_t { int(CEF_CALLBACK* on_key_event)(struct _cef_window_delegate_t* self, struct _cef_window_t* window, const cef_key_event_t* event); + + /// + /// Called when the |window| is transitioning to or from fullscreen mode. The + /// transition occurs in two stages, with |is_competed| set to false (0) when + /// the transition starts and true (1) when the transition completes. This + /// function is only supported on macOS. + /// + void(CEF_CALLBACK* on_window_fullscreen_transition)( + struct _cef_window_delegate_t* self, + struct _cef_window_t* window, + int is_completed); } cef_window_delegate_t; #ifdef __cplusplus diff --git a/include/cef_api_hash.h b/include/cef_api_hash.h index 339d1ffae..ec82f69a7 100644 --- a/include/cef_api_hash.h +++ b/include/cef_api_hash.h @@ -42,13 +42,13 @@ // way that may cause binary incompatibility with other builds. The universal // hash value will change if any platform is affected whereas the platform hash // values will change only if that particular platform is affected. -#define CEF_API_HASH_UNIVERSAL "d58a94280cb9ca2b70c3af665e96165c271a2860" +#define CEF_API_HASH_UNIVERSAL "05ddbcd7ae86396372d24639bcf383c0c3186a48" #if defined(OS_WIN) -#define CEF_API_HASH_PLATFORM "abdc0c21d6625109540eec13302f6fe2e4d51b35" +#define CEF_API_HASH_PLATFORM "210d3a785a0386b734504366f461a4ff435cd8f0" #elif defined(OS_MAC) -#define CEF_API_HASH_PLATFORM "3e400fc21e626476338950afa94bd8d28ba26e68" +#define CEF_API_HASH_PLATFORM "d0197836c7828d704fe6d5b7a4f9434a06419143" #elif defined(OS_LINUX) -#define CEF_API_HASH_PLATFORM "94544877ffb062dfe8253cd00f272f79880ddfff" +#define CEF_API_HASH_PLATFORM "188b94c939b73aa00e382b1d4967c69364247d54" #endif #ifdef __cplusplus diff --git a/include/views/cef_window_delegate.h b/include/views/cef_window_delegate.h index 90bc7dfb5..8779000ed 100644 --- a/include/views/cef_window_delegate.h +++ b/include/views/cef_window_delegate.h @@ -130,7 +130,7 @@ class CefWindowDelegate : public CefPanelDelegate { /// /// Return true if |window| should be created with standard window buttons - /// like close, minimize and zoom. + /// like close, minimize and zoom. This method is only supported on macOS. /// /*--cef()--*/ virtual bool WithStandardWindowButtons(CefRefPtr window) { @@ -196,6 +196,16 @@ class CefWindowDelegate : public CefPanelDelegate { const CefKeyEvent& event) { return false; } + + /// + /// Called when the |window| is transitioning to or from fullscreen mode. The + /// transition occurs in two stages, with |is_competed| set to false when the + /// transition starts and true when the transition completes. + /// This method is only supported on macOS. + /// + /*--cef()--*/ + virtual void OnWindowFullscreenTransition(CefRefPtr window, + bool is_completed) {} }; #endif // CEF_INCLUDE_VIEWS_CEF_WINDOW_DELEGATE_H_ diff --git a/libcef/browser/views/native_widget_mac.h b/libcef/browser/views/native_widget_mac.h index b47457643..0ac374fd1 100644 --- a/libcef/browser/views/native_widget_mac.h +++ b/libcef/browser/views/native_widget_mac.h @@ -30,6 +30,8 @@ class CefNativeWidgetMac : public views::NativeWidgetMac { void GetWindowFrameTitlebarHeight(bool* override_titlebar_height, float* titlebar_height) override; + void OnWindowFullscreenTransitionStart() override; + void OnWindowFullscreenTransitionComplete() override; private: const CefRefPtr window_; diff --git a/libcef/browser/views/native_widget_mac.mm b/libcef/browser/views/native_widget_mac.mm index b722c3731..864e4f75d 100644 --- a/libcef/browser/views/native_widget_mac.mm +++ b/libcef/browser/views/native_widget_mac.mm @@ -52,3 +52,13 @@ void CefNativeWidgetMac::GetWindowFrameTitlebarHeight( override_titlebar_height, titlebar_height); } } + +void CefNativeWidgetMac::OnWindowFullscreenTransitionStart() { + views::NativeWidgetMac::OnWindowFullscreenTransitionStart(); + window_delegate_->OnWindowFullscreenTransition(window_, false); +} + +void CefNativeWidgetMac::OnWindowFullscreenTransitionComplete() { + views::NativeWidgetMac::OnWindowFullscreenTransitionComplete(); + window_delegate_->OnWindowFullscreenTransition(window_, true); +} diff --git a/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc b/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc index 64c799e33..9a0431271 100644 --- a/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc +++ b/libcef_dll/cpptoc/views/window_delegate_cpptoc.cc @@ -9,7 +9,7 @@ // implementations. See the translator.README.txt file in the tools directory // for more information. // -// $hash=18f715de465689a4e8484bbced8ad92d9434438a$ +// $hash=c7e5e137df27a4986c13e6f4e2b98eac19a48193$ // #include "libcef_dll/cpptoc/views/window_delegate_cpptoc.h" @@ -484,6 +484,29 @@ window_delegate_on_key_event(struct _cef_window_delegate_t* self, return _retval; } +void CEF_CALLBACK window_delegate_on_window_fullscreen_transition( + struct _cef_window_delegate_t* self, + cef_window_t* window, + int is_completed) { + shutdown_checker::AssertNotShutdown(); + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + DCHECK(self); + if (!self) { + return; + } + // Verify param: window; type: refptr_diff + DCHECK(window); + if (!window) { + return; + } + + // Execute + CefWindowDelegateCppToC::Get(self)->OnWindowFullscreenTransition( + CefWindowCToCpp::Wrap(window), is_completed ? true : false); +} + cef_size_t CEF_CALLBACK window_delegate_get_preferred_size(struct _cef_view_delegate_t* self, cef_view_t* view) { @@ -770,6 +793,8 @@ CefWindowDelegateCppToC::CefWindowDelegateCppToC() { GetStruct()->can_close = window_delegate_can_close; GetStruct()->on_accelerator = window_delegate_on_accelerator; GetStruct()->on_key_event = window_delegate_on_key_event; + GetStruct()->on_window_fullscreen_transition = + window_delegate_on_window_fullscreen_transition; GetStruct()->base.base.get_preferred_size = window_delegate_get_preferred_size; GetStruct()->base.base.get_minimum_size = window_delegate_get_minimum_size; diff --git a/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc b/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc index 206d9532a..1ca2a16de 100644 --- a/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc +++ b/libcef_dll/ctocpp/views/window_delegate_ctocpp.cc @@ -9,7 +9,7 @@ // implementations. See the translator.README.txt file in the tools directory // for more information. // -// $hash=40aea12873a3c8803c9d2d6c06a0270197ead58e$ +// $hash=5d3fd8439bbc051bac61497b125a7ac35859881d$ // #include "libcef_dll/ctocpp/views/window_delegate_ctocpp.h" @@ -462,6 +462,30 @@ bool CefWindowDelegateCToCpp::OnKeyEvent(CefRefPtr window, return _retval ? true : false; } +NO_SANITIZE("cfi-icall") +void CefWindowDelegateCToCpp::OnWindowFullscreenTransition( + CefRefPtr window, + bool is_completed) { + shutdown_checker::AssertNotShutdown(); + + cef_window_delegate_t* _struct = GetStruct(); + if (CEF_MEMBER_MISSING(_struct, on_window_fullscreen_transition)) { + return; + } + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + // Verify param: window; type: refptr_diff + DCHECK(window.get()); + if (!window.get()) { + return; + } + + // Execute + _struct->on_window_fullscreen_transition( + _struct, CefWindowCppToC::Wrap(window), is_completed); +} + NO_SANITIZE("cfi-icall") CefSize CefWindowDelegateCToCpp::GetPreferredSize(CefRefPtr view) { shutdown_checker::AssertNotShutdown(); diff --git a/libcef_dll/ctocpp/views/window_delegate_ctocpp.h b/libcef_dll/ctocpp/views/window_delegate_ctocpp.h index def8dd49c..cbcf5530c 100644 --- a/libcef_dll/ctocpp/views/window_delegate_ctocpp.h +++ b/libcef_dll/ctocpp/views/window_delegate_ctocpp.h @@ -9,7 +9,7 @@ // implementations. See the translator.README.txt file in the tools directory // for more information. // -// $hash=d100d8866a7eab2a163d4ddb3cacd00141f65757$ +// $hash=bf87c473a5bafd3f8c30bd06c033b0182f65a7b7$ // #ifndef CEF_LIBCEF_DLL_CTOCPP_VIEWS_WINDOW_DELEGATE_CTOCPP_H_ @@ -60,6 +60,8 @@ class CefWindowDelegateCToCpp bool OnAccelerator(CefRefPtr window, int command_id) override; bool OnKeyEvent(CefRefPtr window, const CefKeyEvent& event) override; + void OnWindowFullscreenTransition(CefRefPtr window, + bool is_completed) override; // CefPanelDelegate methods.