fix: vibrant view is inserted into Views API hierarchy (#42263)
This commit is contained in:
		
					parent
					
						
							
								484cf26787
							
						
					
				
			
			
				commit
				
					
						e645ea88e0
					
				
			
		
					 2 changed files with 21 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
#include <string>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include "base/memory/raw_ptr.h"
 | 
			
		||||
#include "electron/shell/common/api/api.mojom.h"
 | 
			
		||||
#include "shell/browser/native_window.h"
 | 
			
		||||
#include "ui/display/display_observer.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -299,6 +300,9 @@ class NativeWindowMac : public NativeWindow,
 | 
			
		|||
 | 
			
		||||
  std::string vibrancy_type_;
 | 
			
		||||
 | 
			
		||||
  // A views::NativeViewHost wrapping the vibrant view. Owned by the root view.
 | 
			
		||||
  raw_ptr<views::NativeViewHost> vibrant_native_view_host_ = nullptr;
 | 
			
		||||
 | 
			
		||||
  // The presentation options before entering simple fullscreen mode.
 | 
			
		||||
  NSApplicationPresentationOptions simple_fullscreen_options_;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1393,13 +1393,19 @@ void NativeWindowMac::SetVibrancy(const std::string& type) {
 | 
			
		|||
  NativeWindow::SetVibrancy(type);
 | 
			
		||||
 | 
			
		||||
  NSVisualEffectView* vibrantView = [window_ vibrantView];
 | 
			
		||||
  views::View* rootView = GetContentsView();
 | 
			
		||||
 | 
			
		||||
  if (type.empty()) {
 | 
			
		||||
    if (vibrantView == nil)
 | 
			
		||||
      return;
 | 
			
		||||
    if (vibrant_native_view_host_ != nullptr) {
 | 
			
		||||
      // Transfers ownership back to caller in the form of a unique_ptr which is
 | 
			
		||||
      // subsequently deleted.
 | 
			
		||||
      rootView->RemoveChildViewT(vibrant_native_view_host_);
 | 
			
		||||
      vibrant_native_view_host_ = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [vibrantView removeFromSuperview];
 | 
			
		||||
    [window_ setVibrantView:nil];
 | 
			
		||||
    if (vibrantView != nil) {
 | 
			
		||||
      [window_ setVibrantView:nil];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -1455,9 +1461,13 @@ void NativeWindowMac::SetVibrancy(const std::string& type) {
 | 
			
		|||
        [vibrantView setState:NSVisualEffectStateFollowsWindowActiveState];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      [[window_ contentView] addSubview:vibrantView
 | 
			
		||||
                             positioned:NSWindowBelow
 | 
			
		||||
                             relativeTo:nil];
 | 
			
		||||
      // Vibrant view is inserted into the root view hierarchy underneath all
 | 
			
		||||
      // other views.
 | 
			
		||||
      vibrant_native_view_host_ = new views::NativeViewHost();
 | 
			
		||||
      rootView->AddChildViewAt(vibrant_native_view_host_, 0);
 | 
			
		||||
      vibrant_native_view_host_->Attach(vibrantView);
 | 
			
		||||
 | 
			
		||||
      rootView->DeprecatedLayoutImmediately();
 | 
			
		||||
 | 
			
		||||
      UpdateVibrancyRadii(IsFullscreen());
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue