mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
feat: add panel support for BrowserWindow (#34665)
* feat: add NSPanel support for BrowserWindow
* change header guard to satisfy linter
* change panel wording in browser-window
* Revert "change panel wording in browser-window"
This reverts commit 6f3f80f94a.
* change wording in browser-window
* Update shell/browser/ui/cocoa/electron_native_widget_mac.mm
Co-authored-by: Cheng Zhao <github@zcbenz.com>
* Update shell/browser/ui/cocoa/electron_native_widget_mac.h
Co-authored-by: Cheng Zhao <github@zcbenz.com>
* Changed ScopedDisableResize class to allow for nesting
Co-authored-by: andreiisaila <andreiisaila@microsoft.com>
Co-authored-by: isailaandrei <isailaandrei.i@gmail.com>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
#ifndef ELECTRON_SHELL_BROWSER_UI_COCOA_ELECTRON_NATIVE_WIDGET_MAC_H_
|
||||
#define ELECTRON_SHELL_BROWSER_UI_COCOA_ELECTRON_NATIVE_WIDGET_MAC_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ui/views/widget/native_widget_mac.h"
|
||||
|
||||
namespace electron {
|
||||
@@ -14,6 +16,7 @@ class NativeWindowMac;
|
||||
class ElectronNativeWidgetMac : public views::NativeWidgetMac {
|
||||
public:
|
||||
ElectronNativeWidgetMac(NativeWindowMac* shell,
|
||||
const std::string& window_type,
|
||||
NSUInteger style_mask,
|
||||
views::internal::NativeWidgetDelegate* delegate);
|
||||
~ElectronNativeWidgetMac() override;
|
||||
@@ -29,6 +32,7 @@ class ElectronNativeWidgetMac : public views::NativeWidgetMac {
|
||||
|
||||
private:
|
||||
NativeWindowMac* shell_;
|
||||
std::string window_type_;
|
||||
NSUInteger style_mask_;
|
||||
};
|
||||
|
||||
|
||||
@@ -4,24 +4,34 @@
|
||||
|
||||
#include "shell/browser/ui/cocoa/electron_native_widget_mac.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "shell/browser/ui/cocoa/electron_ns_panel.h"
|
||||
#include "shell/browser/ui/cocoa/electron_ns_window.h"
|
||||
|
||||
namespace electron {
|
||||
|
||||
ElectronNativeWidgetMac::ElectronNativeWidgetMac(
|
||||
NativeWindowMac* shell,
|
||||
const std::string& window_type,
|
||||
NSUInteger style_mask,
|
||||
views::internal::NativeWidgetDelegate* delegate)
|
||||
: views::NativeWidgetMac(delegate),
|
||||
shell_(shell),
|
||||
window_type_(window_type),
|
||||
style_mask_(style_mask) {}
|
||||
|
||||
ElectronNativeWidgetMac::~ElectronNativeWidgetMac() = default;
|
||||
|
||||
NativeWidgetMacNSWindow* ElectronNativeWidgetMac::CreateNSWindow(
|
||||
const remote_cocoa::mojom::CreateWindowParams* params) {
|
||||
return [[[ElectronNSWindow alloc] initWithShell:shell_
|
||||
styleMask:style_mask_] autorelease];
|
||||
if (window_type_ == "panel") {
|
||||
return [[[ElectronNSPanel alloc] initWithShell:shell_
|
||||
styleMask:style_mask_] autorelease];
|
||||
} else {
|
||||
return [[[ElectronNSWindow alloc] initWithShell:shell_
|
||||
styleMask:style_mask_] autorelease];
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace electron
|
||||
|
||||
17
shell/browser/ui/cocoa/electron_ns_panel.h
Normal file
17
shell/browser/ui/cocoa/electron_ns_panel.h
Normal file
@@ -0,0 +1,17 @@
|
||||
// Copyright (c) 2022 Microsoft, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef ELECTRON_SHELL_BROWSER_UI_COCOA_ELECTRON_NS_PANEL_H_
|
||||
#define ELECTRON_SHELL_BROWSER_UI_COCOA_ELECTRON_NS_PANEL_H_
|
||||
|
||||
#include "shell/browser/ui/cocoa/electron_ns_window.h"
|
||||
|
||||
@interface ElectronNSPanel : ElectronNSWindow
|
||||
@property NSWindowStyleMask styleMask;
|
||||
@property NSWindowStyleMask originalStyleMask;
|
||||
- (id)initWithShell:(electron::NativeWindowMac*)shell
|
||||
styleMask:(NSUInteger)styleMask;
|
||||
@end
|
||||
|
||||
#endif // ELECTRON_SHELL_BROWSER_UI_COCOA_ELECTRON_NS_PANEL_H_
|
||||
39
shell/browser/ui/cocoa/electron_ns_panel.mm
Normal file
39
shell/browser/ui/cocoa/electron_ns_panel.mm
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright (c) 2022 Microsoft, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "shell/browser/ui/cocoa/electron_ns_panel.h"
|
||||
|
||||
@implementation ElectronNSPanel
|
||||
|
||||
@synthesize originalStyleMask;
|
||||
|
||||
- (id)initWithShell:(electron::NativeWindowMac*)shell
|
||||
styleMask:(NSUInteger)styleMask {
|
||||
if (self = [super initWithShell:shell styleMask:styleMask]) {
|
||||
originalStyleMask = styleMask;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@dynamic styleMask;
|
||||
// The Nonactivating mask is reserverd for NSPanel,
|
||||
// but we can use this workaround to add it at runtime
|
||||
- (NSWindowStyleMask)styleMask {
|
||||
return originalStyleMask | NSWindowStyleMaskNonactivatingPanel;
|
||||
}
|
||||
|
||||
- (void)setStyleMask:(NSWindowStyleMask)styleMask {
|
||||
originalStyleMask = styleMask;
|
||||
// Notify change of style mask.
|
||||
[super setStyleMask:styleMask];
|
||||
}
|
||||
|
||||
- (void)setCollectionBehavior:(NSWindowCollectionBehavior)collectionBehavior {
|
||||
NSWindowCollectionBehavior panelBehavior =
|
||||
(NSWindowCollectionBehaviorCanJoinAllSpaces |
|
||||
NSWindowCollectionBehaviorFullScreenAuxiliary);
|
||||
[super setCollectionBehavior:collectionBehavior | panelBehavior];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -16,13 +16,14 @@ class NativeWindowMac;
|
||||
// Prevents window from resizing during the scope.
|
||||
class ScopedDisableResize {
|
||||
public:
|
||||
ScopedDisableResize() { disable_resize_ = true; }
|
||||
~ScopedDisableResize() { disable_resize_ = false; }
|
||||
ScopedDisableResize() { disable_resize_++; }
|
||||
~ScopedDisableResize() { disable_resize_--; }
|
||||
|
||||
static bool IsResizeDisabled() { return disable_resize_; }
|
||||
// True if there are 1+ nested ScopedDisableResize objects in the scope
|
||||
static bool IsResizeDisabled() { return disable_resize_ > 0; }
|
||||
|
||||
private:
|
||||
static bool disable_resize_;
|
||||
static int disable_resize_;
|
||||
};
|
||||
|
||||
} // namespace electron
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
namespace electron {
|
||||
|
||||
bool ScopedDisableResize::disable_resize_ = false;
|
||||
int ScopedDisableResize::disable_resize_ = 0;
|
||||
|
||||
} // namespace electron
|
||||
|
||||
|
||||
Reference in New Issue
Block a user