mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
* feat(macos): add CollectionBehavior option to MacWindow (#4756) Add configurable NSWindowCollectionBehavior support for macOS windows, allowing control over window behavior across Spaces and fullscreen. New options include: - MacWindowCollectionBehaviorCanJoinAllSpaces - MacWindowCollectionBehaviorFullScreenAuxiliary - MacWindowCollectionBehaviorMoveToActiveSpace - And more... This enables building Spotlight-like apps that appear on all Spaces or overlay fullscreen applications. Closes #4756 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Potential fix for code scanning alert no. 140: Workflow does not contain permissions Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * Potential fix for code scanning alert no. 139: Workflow does not contain permissions Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * feat(examples): add spotlight example for CollectionBehavior Demonstrates creating a Spotlight-like launcher window that: - Appears on all macOS Spaces - Floats above other windows - Uses accessory activation policy (no Dock icon) - Has frameless translucent design 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * feat(macos): support bitwise OR for CollectionBehavior options Update CollectionBehavior to use actual NSWindowCollectionBehavior bitmask values, allowing multiple behaviors to be combined: ```go CollectionBehavior: application.MacWindowCollectionBehaviorCanJoinAllSpaces | application.MacWindowCollectionBehaviorFullScreenAuxiliary, ``` Changes: - Update Go constants to use actual bitmask values (1<<0, 1<<1, etc.) - Simplify C function to pass through combined bitmask directly - Add ParticipatesInCycle, IgnoresCycle, FullScreenDisallowsTiling options - Update documentation with combined behavior examples - Update spotlight example to demonstrate combining behaviors 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
686 lines
24 KiB
Go
686 lines
24 KiB
Go
package application
|
|
|
|
import (
|
|
"github.com/leaanthony/u"
|
|
"github.com/wailsapp/wails/v3/pkg/events"
|
|
)
|
|
|
|
type WindowState int
|
|
|
|
const (
|
|
WindowStateNormal WindowState = iota
|
|
WindowStateMinimised
|
|
WindowStateMaximised
|
|
WindowStateFullscreen
|
|
)
|
|
|
|
type ButtonState int
|
|
|
|
const (
|
|
ButtonEnabled ButtonState = 0
|
|
ButtonDisabled ButtonState = 1
|
|
ButtonHidden ButtonState = 2
|
|
)
|
|
|
|
type WindowStartPosition int
|
|
|
|
const (
|
|
WindowCentered WindowStartPosition = 0
|
|
WindowXY WindowStartPosition = 1
|
|
)
|
|
|
|
type WebviewWindowOptions struct {
|
|
// Name is a unique identifier that can be given to a window.
|
|
Name string
|
|
|
|
// Title is the title of the window.
|
|
Title string
|
|
|
|
// Width is the starting width of the window.
|
|
Width int
|
|
|
|
// Height is the starting height of the window.
|
|
Height int
|
|
|
|
// AlwaysOnTop will make the window float above other windows.
|
|
AlwaysOnTop bool
|
|
|
|
// URL is the URL to load in the window.
|
|
URL string
|
|
|
|
// DisableResize will disable the ability to resize the window.
|
|
DisableResize bool
|
|
|
|
// Frameless will remove the window frame.
|
|
Frameless bool
|
|
|
|
// MinWidth is the minimum width of the window.
|
|
MinWidth int
|
|
|
|
// MinHeight is the minimum height of the window.
|
|
MinHeight int
|
|
|
|
// MaxWidth is the maximum width of the window.
|
|
MaxWidth int
|
|
|
|
// MaxHeight is the maximum height of the window.
|
|
MaxHeight int
|
|
|
|
// StartState indicates the state of the window when it is first shown.
|
|
// Default: WindowStateNormal
|
|
StartState WindowState
|
|
|
|
// BackgroundType is the type of background to use for the window.
|
|
// Default: BackgroundTypeSolid
|
|
BackgroundType BackgroundType
|
|
|
|
// BackgroundColour is the colour to use for the window background.
|
|
BackgroundColour RGBA
|
|
|
|
// HTML is the HTML to load in the window.
|
|
HTML string
|
|
|
|
// JS is the JavaScript to load in the window.
|
|
JS string
|
|
|
|
// CSS is the CSS to load in the window.
|
|
CSS string
|
|
|
|
// Initial Position
|
|
InitialPosition WindowStartPosition
|
|
|
|
// X is the starting X position of the window.
|
|
X int
|
|
|
|
// Y is the starting Y position of the window.
|
|
Y int
|
|
|
|
// Hidden will hide the window when it is first created.
|
|
Hidden bool
|
|
|
|
// Zoom is the zoom level of the window.
|
|
Zoom float64
|
|
|
|
// ZoomControlEnabled will enable the zoom control.
|
|
ZoomControlEnabled bool
|
|
|
|
// EnableDragAndDrop will enable drag and drop.
|
|
EnableDragAndDrop bool
|
|
|
|
// OpenInspectorOnStartup will open the inspector when the window is first shown.
|
|
OpenInspectorOnStartup bool
|
|
|
|
// Mac options
|
|
Mac MacWindow
|
|
|
|
// Windows options
|
|
Windows WindowsWindow
|
|
|
|
// Linux options
|
|
Linux LinuxWindow
|
|
|
|
// Toolbar button states
|
|
MinimiseButtonState ButtonState
|
|
MaximiseButtonState ButtonState
|
|
CloseButtonState ButtonState
|
|
|
|
// If true, the window's devtools will be available (default true in builds without the `production` build tag)
|
|
DevToolsEnabled bool
|
|
|
|
// If true, the window's default context menu will be disabled (default false)
|
|
DefaultContextMenuDisabled bool
|
|
|
|
// KeyBindings is a map of key bindings to functions
|
|
KeyBindings map[string]func(window Window)
|
|
|
|
// IgnoreMouseEvents will ignore mouse events in the window (Windows + Mac only)
|
|
IgnoreMouseEvents bool
|
|
|
|
// ContentProtectionEnabled specifies whether content protection is enabled, preventing screen capture and recording.
|
|
// Effective on Windows and macOS only; no-op on Linux.
|
|
// Best-effort protection with platform-specific caveats (see docs).
|
|
ContentProtectionEnabled bool
|
|
}
|
|
|
|
type RGBA struct {
|
|
Red, Green, Blue, Alpha uint8
|
|
}
|
|
|
|
func NewRGBA(red, green, blue, alpha uint8) RGBA {
|
|
return RGBA{
|
|
Red: red,
|
|
Green: green,
|
|
Blue: blue,
|
|
Alpha: alpha,
|
|
}
|
|
}
|
|
|
|
func NewRGB(red, green, blue uint8) RGBA {
|
|
return RGBA{
|
|
Red: red,
|
|
Green: green,
|
|
Blue: blue,
|
|
Alpha: 255,
|
|
}
|
|
}
|
|
|
|
func NewRGBPtr(red, green, blue uint8) *uint32 {
|
|
result := uint32(red)
|
|
result |= uint32(green) << 8
|
|
result |= uint32(blue) << 16
|
|
return &result
|
|
}
|
|
|
|
type BackgroundType int
|
|
|
|
const (
|
|
BackgroundTypeSolid BackgroundType = iota
|
|
BackgroundTypeTransparent
|
|
BackgroundTypeTranslucent
|
|
)
|
|
|
|
/******* Windows Options *******/
|
|
|
|
type BackdropType int32
|
|
type DragEffect int32
|
|
|
|
const (
|
|
// DragEffectNone is used to indicate that the drop target cannot accept the data.
|
|
DragEffectNone DragEffect = 1
|
|
// DragEffectCopy is used to indicate that the data is copied to the drop target.
|
|
DragEffectCopy DragEffect = 2
|
|
// DragEffectMove is used to indicate that the data is removed from the drag source.
|
|
DragEffectMove DragEffect = 3
|
|
// DragEffectLink is used to indicate that a link to the original data is established.
|
|
DragEffectLink DragEffect = 4
|
|
// DragEffectScroll is used to indicate that the target can be scrolled while dragging to locate a drop position that is not currently visible in the target.
|
|
|
|
)
|
|
|
|
const (
|
|
Auto BackdropType = 0
|
|
None BackdropType = 1
|
|
Mica BackdropType = 2
|
|
Acrylic BackdropType = 3
|
|
Tabbed BackdropType = 4
|
|
)
|
|
|
|
type CoreWebView2PermissionKind uint32
|
|
|
|
const (
|
|
CoreWebView2PermissionKindUnknownPermission CoreWebView2PermissionKind = iota
|
|
CoreWebView2PermissionKindMicrophone
|
|
CoreWebView2PermissionKindCamera
|
|
CoreWebView2PermissionKindGeolocation
|
|
CoreWebView2PermissionKindNotifications
|
|
CoreWebView2PermissionKindOtherSensors
|
|
CoreWebView2PermissionKindClipboardRead
|
|
)
|
|
|
|
type CoreWebView2PermissionState uint32
|
|
|
|
const (
|
|
CoreWebView2PermissionStateDefault CoreWebView2PermissionState = iota
|
|
CoreWebView2PermissionStateAllow
|
|
CoreWebView2PermissionStateDeny
|
|
)
|
|
|
|
type WindowsWindow struct {
|
|
// Select the type of translucent backdrop. Requires Windows 11 22621 or later.
|
|
// Only used when window's `BackgroundType` is set to `BackgroundTypeTranslucent`.
|
|
// Default: Auto
|
|
BackdropType BackdropType
|
|
|
|
// Disable the icon in the titlebar
|
|
// Default: false
|
|
DisableIcon bool
|
|
|
|
// Theme (Dark / Light / SystemDefault)
|
|
// Default: SystemDefault - The application will follow system theme changes.
|
|
Theme Theme
|
|
|
|
// Specify custom colours to use for dark/light mode
|
|
// Default: nil
|
|
CustomTheme ThemeSettings
|
|
|
|
// Disable all window decorations in Frameless mode, which means no "Aero Shadow" and no "Rounded Corner" will be shown.
|
|
// "Rounded Corners" are only available on Windows 11.
|
|
// Default: false
|
|
DisableFramelessWindowDecorations bool
|
|
|
|
// WindowMask is used to set the window shape. Use a PNG with an alpha channel to create a custom shape.
|
|
// Default: nil
|
|
WindowMask []byte
|
|
|
|
// WindowMaskDraggable is used to make the window draggable by clicking on the window mask.
|
|
// Default: false
|
|
WindowMaskDraggable bool
|
|
|
|
// ResizeDebounceMS is the amount of time to debounce redraws of webview2
|
|
// when resizing the window
|
|
// Default: 0
|
|
ResizeDebounceMS uint16
|
|
|
|
// WindowDidMoveDebounceMS is the amount of time to debounce the WindowDidMove event
|
|
// when moving the window
|
|
// Default: 0
|
|
WindowDidMoveDebounceMS uint16
|
|
|
|
// Event mapping for the window. This allows you to define a translation from one event to another.
|
|
// Default: nil
|
|
EventMapping map[events.WindowEventType]events.WindowEventType
|
|
|
|
// HiddenOnTaskbar hides the window from the taskbar
|
|
// Default: false
|
|
HiddenOnTaskbar bool
|
|
|
|
// EnableSwipeGestures enables swipe gestures for the window
|
|
// Default: false
|
|
EnableSwipeGestures bool
|
|
|
|
// Menu is the menu to use for the window.
|
|
Menu *Menu
|
|
|
|
// Drag Cursor Effects
|
|
OnEnterEffect DragEffect
|
|
OnOverEffect DragEffect
|
|
|
|
// Permissions map for WebView2. If empty, default permissions will be granted.
|
|
Permissions map[CoreWebView2PermissionKind]CoreWebView2PermissionState
|
|
|
|
// ExStyle is the extended window style
|
|
ExStyle int
|
|
|
|
// GeneralAutofillEnabled enables general autofill
|
|
GeneralAutofillEnabled bool
|
|
|
|
// PasswordAutosaveEnabled enables autosaving passwords
|
|
PasswordAutosaveEnabled bool
|
|
|
|
// EnabledFeatures, DisabledFeatures and AdditionalLaunchArgs are used to enable or disable specific features in the WebView2 browser.
|
|
// Available flags: https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/webview-features-flags?tabs=dotnetcsharp#available-webview2-browser-flags
|
|
// WARNING: Apps in production shouldn't use WebView2 browser flags,
|
|
// because these flags might be removed or altered at any time,
|
|
// and aren't necessarily supported long-term.
|
|
// AdditionalLaunchArgs should always be preceded by "--"
|
|
EnabledFeatures []string
|
|
DisabledFeatures []string
|
|
AdditionalLaunchArgs []string
|
|
}
|
|
|
|
type Theme int
|
|
|
|
const (
|
|
// SystemDefault will use whatever the system theme is. The application will follow system theme changes.
|
|
SystemDefault Theme = 0
|
|
// Dark Mode
|
|
Dark Theme = 1
|
|
// Light Mode
|
|
Light Theme = 2
|
|
)
|
|
|
|
type WindowTheme struct {
|
|
// BorderColour is the colour of the window border
|
|
BorderColour *uint32
|
|
|
|
// TitleBarColour is the colour of the window title bar
|
|
TitleBarColour *uint32
|
|
|
|
// TitleTextColour is the colour of the window title text
|
|
TitleTextColour *uint32
|
|
}
|
|
|
|
type TextTheme struct {
|
|
// Text is the colour of the text
|
|
Text *uint32
|
|
|
|
// Background is the background colour of the text
|
|
Background *uint32
|
|
}
|
|
|
|
type MenuBarTheme struct {
|
|
// Default is the default theme
|
|
Default *TextTheme
|
|
|
|
// Hover defines the theme to use when the menu item is hovered
|
|
Hover *TextTheme
|
|
|
|
// Selected defines the theme to use when the menu item is selected
|
|
Selected *TextTheme
|
|
}
|
|
|
|
// ThemeSettings defines custom colours to use in dark or light mode.
|
|
// They may be set using the hex values: 0x00BBGGRR
|
|
type ThemeSettings struct {
|
|
// Dark mode active window
|
|
DarkModeActive *WindowTheme
|
|
|
|
// Dark mode inactive window
|
|
DarkModeInactive *WindowTheme
|
|
|
|
// Light mode active window
|
|
LightModeActive *WindowTheme
|
|
|
|
// Light mode inactive window
|
|
LightModeInactive *WindowTheme
|
|
|
|
// Dark mode MenuBar
|
|
DarkModeMenuBar *MenuBarTheme
|
|
|
|
// Light mode MenuBar
|
|
LightModeMenuBar *MenuBarTheme
|
|
}
|
|
|
|
/****** Mac Options *******/
|
|
|
|
// MacBackdrop is the backdrop type for macOS
|
|
type MacBackdrop int
|
|
|
|
const (
|
|
// MacBackdropNormal - The default value. The window will have a normal opaque background.
|
|
MacBackdropNormal MacBackdrop = iota
|
|
// MacBackdropTransparent - The window will have a transparent background, with the content underneath it being visible
|
|
MacBackdropTransparent
|
|
// MacBackdropTranslucent - The window will have a translucent background, with the content underneath it being "fuzzy" or "frosted"
|
|
MacBackdropTranslucent
|
|
// MacBackdropLiquidGlass - The window will use Apple's Liquid Glass effect (macOS 15.0+ with fallback to translucent)
|
|
MacBackdropLiquidGlass
|
|
)
|
|
|
|
// MacToolbarStyle is the style of toolbar for macOS
|
|
type MacToolbarStyle int
|
|
|
|
const (
|
|
// MacToolbarStyleAutomatic - The default value. The style will be determined by the window's given configuration
|
|
MacToolbarStyleAutomatic MacToolbarStyle = iota
|
|
// MacToolbarStyleExpanded - The toolbar will appear below the window title
|
|
MacToolbarStyleExpanded
|
|
// MacToolbarStylePreference - The toolbar will appear below the window title and the items in the toolbar will attempt to have equal widths when possible
|
|
MacToolbarStylePreference
|
|
// MacToolbarStyleUnified - The window title will appear inline with the toolbar when visible
|
|
MacToolbarStyleUnified
|
|
// MacToolbarStyleUnifiedCompact - Same as MacToolbarStyleUnified, but with reduced margins in the toolbar allowing more focus to be on the contents of the window
|
|
MacToolbarStyleUnifiedCompact
|
|
)
|
|
|
|
// MacLiquidGlassStyle defines the style of the Liquid Glass effect
|
|
type MacLiquidGlassStyle int
|
|
|
|
const (
|
|
// LiquidGlassStyleAutomatic - System determines the best style
|
|
LiquidGlassStyleAutomatic MacLiquidGlassStyle = iota
|
|
// LiquidGlassStyleLight - Light glass appearance
|
|
LiquidGlassStyleLight
|
|
// LiquidGlassStyleDark - Dark glass appearance
|
|
LiquidGlassStyleDark
|
|
// LiquidGlassStyleVibrant - Vibrant glass with enhanced effects
|
|
LiquidGlassStyleVibrant
|
|
)
|
|
|
|
// NSVisualEffectMaterial represents the NSVisualEffectMaterial enum for macOS
|
|
type NSVisualEffectMaterial int
|
|
|
|
const (
|
|
// NSVisualEffectMaterial values from macOS SDK
|
|
NSVisualEffectMaterialAppearanceBased NSVisualEffectMaterial = 0
|
|
NSVisualEffectMaterialLight NSVisualEffectMaterial = 1
|
|
NSVisualEffectMaterialDark NSVisualEffectMaterial = 2
|
|
NSVisualEffectMaterialTitlebar NSVisualEffectMaterial = 3
|
|
NSVisualEffectMaterialSelection NSVisualEffectMaterial = 4
|
|
NSVisualEffectMaterialMenu NSVisualEffectMaterial = 5
|
|
NSVisualEffectMaterialPopover NSVisualEffectMaterial = 6
|
|
NSVisualEffectMaterialSidebar NSVisualEffectMaterial = 7
|
|
NSVisualEffectMaterialHeaderView NSVisualEffectMaterial = 10
|
|
NSVisualEffectMaterialSheet NSVisualEffectMaterial = 11
|
|
NSVisualEffectMaterialWindowBackground NSVisualEffectMaterial = 12
|
|
NSVisualEffectMaterialHUDWindow NSVisualEffectMaterial = 13
|
|
NSVisualEffectMaterialFullScreenUI NSVisualEffectMaterial = 15
|
|
NSVisualEffectMaterialToolTip NSVisualEffectMaterial = 17
|
|
NSVisualEffectMaterialContentBackground NSVisualEffectMaterial = 18
|
|
NSVisualEffectMaterialUnderWindowBackground NSVisualEffectMaterial = 21
|
|
NSVisualEffectMaterialUnderPageBackground NSVisualEffectMaterial = 22
|
|
NSVisualEffectMaterialAuto NSVisualEffectMaterial = -1 // Use auto-selection based on Style
|
|
)
|
|
|
|
// MacLiquidGlass contains configuration for the Liquid Glass effect
|
|
type MacLiquidGlass struct {
|
|
// Style of the glass effect
|
|
Style MacLiquidGlassStyle
|
|
|
|
// Material to use for NSVisualEffectView (when NSGlassEffectView is not available)
|
|
// Set to NSVisualEffectMaterialAuto to use automatic selection based on Style
|
|
Material NSVisualEffectMaterial
|
|
|
|
// Corner radius for the glass effect (0 for square corners)
|
|
CornerRadius float64
|
|
|
|
// Tint color for the glass (optional, nil for no tint)
|
|
TintColor *RGBA
|
|
|
|
// Group identifier for merging multiple glass windows
|
|
GroupID string
|
|
|
|
// Spacing between grouped glass elements (in points)
|
|
GroupSpacing float64
|
|
}
|
|
|
|
// MacWindow contains macOS specific options for Webview Windows
|
|
type MacWindow struct {
|
|
// Backdrop is the backdrop type for the window
|
|
Backdrop MacBackdrop
|
|
// DisableShadow will disable the window shadow
|
|
DisableShadow bool
|
|
// TitleBar contains options for the Mac titlebar
|
|
TitleBar MacTitleBar
|
|
// Appearance is the appearance type for the window
|
|
Appearance MacAppearanceType
|
|
// InvisibleTitleBarHeight defines the height of an invisible titlebar which responds to dragging
|
|
InvisibleTitleBarHeight int
|
|
// Maps events from platform specific to common event types
|
|
EventMapping map[events.WindowEventType]events.WindowEventType
|
|
|
|
// EnableFraudulentWebsiteWarnings will enable warnings for fraudulent websites.
|
|
// Default: false
|
|
EnableFraudulentWebsiteWarnings bool
|
|
|
|
// WebviewPreferences contains preferences for the webview
|
|
WebviewPreferences MacWebviewPreferences
|
|
|
|
// WindowLevel sets the window level to control the order of windows in the screen
|
|
WindowLevel MacWindowLevel
|
|
|
|
// CollectionBehavior controls how the window behaves across macOS Spaces and fullscreen
|
|
CollectionBehavior MacWindowCollectionBehavior
|
|
|
|
// LiquidGlass contains configuration for the Liquid Glass effect
|
|
LiquidGlass MacLiquidGlass
|
|
}
|
|
|
|
type MacWindowLevel string
|
|
|
|
const (
|
|
MacWindowLevelNormal MacWindowLevel = "normal"
|
|
MacWindowLevelFloating MacWindowLevel = "floating"
|
|
MacWindowLevelTornOffMenu MacWindowLevel = "tornOffMenu"
|
|
MacWindowLevelModalPanel MacWindowLevel = "modalPanel"
|
|
MacWindowLevelMainMenu MacWindowLevel = "mainMenu"
|
|
MacWindowLevelStatus MacWindowLevel = "status"
|
|
MacWindowLevelPopUpMenu MacWindowLevel = "popUpMenu"
|
|
MacWindowLevelScreenSaver MacWindowLevel = "screenSaver"
|
|
)
|
|
|
|
// MacWindowCollectionBehavior controls window behavior across macOS Spaces and fullscreen.
|
|
// These correspond to NSWindowCollectionBehavior bitmask values and can be combined using bitwise OR.
|
|
// For example: MacWindowCollectionBehaviorCanJoinAllSpaces | MacWindowCollectionBehaviorFullScreenAuxiliary
|
|
type MacWindowCollectionBehavior int
|
|
|
|
const (
|
|
// MacWindowCollectionBehaviorDefault is zero value - when set, FullScreenPrimary is used for backwards compatibility
|
|
MacWindowCollectionBehaviorDefault MacWindowCollectionBehavior = 0
|
|
// MacWindowCollectionBehaviorCanJoinAllSpaces allows window to appear on all Spaces
|
|
MacWindowCollectionBehaviorCanJoinAllSpaces MacWindowCollectionBehavior = 1 << 0 // 1
|
|
// MacWindowCollectionBehaviorMoveToActiveSpace moves window to active Space when shown
|
|
MacWindowCollectionBehaviorMoveToActiveSpace MacWindowCollectionBehavior = 1 << 1 // 2
|
|
// MacWindowCollectionBehaviorManaged is the default managed window behavior
|
|
MacWindowCollectionBehaviorManaged MacWindowCollectionBehavior = 1 << 2 // 4
|
|
// MacWindowCollectionBehaviorTransient marks window as temporary/transient
|
|
MacWindowCollectionBehaviorTransient MacWindowCollectionBehavior = 1 << 3 // 8
|
|
// MacWindowCollectionBehaviorStationary keeps window stationary during Space switches
|
|
MacWindowCollectionBehaviorStationary MacWindowCollectionBehavior = 1 << 4 // 16
|
|
// MacWindowCollectionBehaviorParticipatesInCycle includes window in Cmd+` cycling (default for normal windows)
|
|
MacWindowCollectionBehaviorParticipatesInCycle MacWindowCollectionBehavior = 1 << 5 // 32
|
|
// MacWindowCollectionBehaviorIgnoresCycle excludes window from Cmd+` cycling
|
|
MacWindowCollectionBehaviorIgnoresCycle MacWindowCollectionBehavior = 1 << 6 // 64
|
|
// MacWindowCollectionBehaviorFullScreenPrimary allows the window to enter fullscreen
|
|
MacWindowCollectionBehaviorFullScreenPrimary MacWindowCollectionBehavior = 1 << 7 // 128
|
|
// MacWindowCollectionBehaviorFullScreenAuxiliary allows window to overlay fullscreen apps
|
|
MacWindowCollectionBehaviorFullScreenAuxiliary MacWindowCollectionBehavior = 1 << 8 // 256
|
|
// MacWindowCollectionBehaviorFullScreenNone prevents window from entering fullscreen (macOS 10.7+)
|
|
MacWindowCollectionBehaviorFullScreenNone MacWindowCollectionBehavior = 1 << 9 // 512
|
|
// MacWindowCollectionBehaviorFullScreenAllowsTiling allows side-by-side tiling in fullscreen (macOS 10.11+)
|
|
MacWindowCollectionBehaviorFullScreenAllowsTiling MacWindowCollectionBehavior = 1 << 11 // 2048
|
|
// MacWindowCollectionBehaviorFullScreenDisallowsTiling prevents tiling in fullscreen (macOS 10.11+)
|
|
MacWindowCollectionBehaviorFullScreenDisallowsTiling MacWindowCollectionBehavior = 1 << 12 // 4096
|
|
)
|
|
|
|
// MacWebviewPreferences contains preferences for the Mac webview
|
|
type MacWebviewPreferences struct {
|
|
// TabFocusesLinks will enable tabbing to links
|
|
TabFocusesLinks u.Bool
|
|
// TextInteractionEnabled will enable text interaction
|
|
TextInteractionEnabled u.Bool
|
|
// FullscreenEnabled will enable fullscreen
|
|
FullscreenEnabled u.Bool
|
|
// AllowsBackForwardNavigationGestures enables horizontal swipe gestures for back/forward navigation
|
|
AllowsBackForwardNavigationGestures u.Bool
|
|
}
|
|
|
|
// MacTitleBar contains options for the Mac titlebar
|
|
type MacTitleBar struct {
|
|
// AppearsTransparent will make the titlebar transparent
|
|
AppearsTransparent bool
|
|
// Hide will hide the titlebar
|
|
Hide bool
|
|
// HideTitle will hide the title
|
|
HideTitle bool
|
|
// FullSizeContent will extend the window content to the full size of the window
|
|
FullSizeContent bool
|
|
// UseToolbar will use a toolbar instead of a titlebar
|
|
UseToolbar bool
|
|
// HideToolbarSeparator will hide the toolbar separator
|
|
HideToolbarSeparator bool
|
|
// ShowToolbarWhenFullscreen will keep the toolbar visible when the window is in fullscreen mode
|
|
ShowToolbarWhenFullscreen bool
|
|
// ToolbarStyle is the style of toolbar to use
|
|
ToolbarStyle MacToolbarStyle
|
|
}
|
|
|
|
// MacTitleBarDefault results in the default Mac MacTitleBar
|
|
var MacTitleBarDefault = MacTitleBar{
|
|
AppearsTransparent: false,
|
|
Hide: false,
|
|
HideTitle: false,
|
|
FullSizeContent: false,
|
|
UseToolbar: false,
|
|
HideToolbarSeparator: false,
|
|
}
|
|
|
|
// Credit: Comments from Electron site
|
|
|
|
// MacTitleBarHidden results in a hidden title bar and a full size content window,
|
|
// yet the title bar still has the standard window controls (“traffic lights”)
|
|
// in the top left.
|
|
var MacTitleBarHidden = MacTitleBar{
|
|
AppearsTransparent: true,
|
|
Hide: false,
|
|
HideTitle: true,
|
|
FullSizeContent: true,
|
|
UseToolbar: false,
|
|
HideToolbarSeparator: false,
|
|
}
|
|
|
|
// MacTitleBarHiddenInset results in a hidden title bar with an alternative look where
|
|
// the traffic light buttons are slightly more inset from the window edge.
|
|
var MacTitleBarHiddenInset = MacTitleBar{
|
|
AppearsTransparent: true,
|
|
Hide: false,
|
|
HideTitle: true,
|
|
FullSizeContent: true,
|
|
UseToolbar: true,
|
|
HideToolbarSeparator: true,
|
|
}
|
|
|
|
// MacTitleBarHiddenInsetUnified results in a hidden title bar with an alternative look where
|
|
// the traffic light buttons are even more inset from the window edge.
|
|
var MacTitleBarHiddenInsetUnified = MacTitleBar{
|
|
AppearsTransparent: true,
|
|
Hide: false,
|
|
HideTitle: true,
|
|
FullSizeContent: true,
|
|
UseToolbar: true,
|
|
HideToolbarSeparator: true,
|
|
ToolbarStyle: MacToolbarStyleUnified,
|
|
}
|
|
|
|
// MacAppearanceType is a type of Appearance for Cocoa windows
|
|
type MacAppearanceType string
|
|
|
|
const (
|
|
// DefaultAppearance uses the default system value
|
|
DefaultAppearance MacAppearanceType = ""
|
|
// NSAppearanceNameAqua - The standard light system appearance.
|
|
NSAppearanceNameAqua MacAppearanceType = "NSAppearanceNameAqua"
|
|
// NSAppearanceNameDarkAqua - The standard dark system appearance.
|
|
NSAppearanceNameDarkAqua MacAppearanceType = "NSAppearanceNameDarkAqua"
|
|
// NSAppearanceNameVibrantLight - The light vibrant appearance
|
|
NSAppearanceNameVibrantLight MacAppearanceType = "NSAppearanceNameVibrantLight"
|
|
// NSAppearanceNameAccessibilityHighContrastAqua - A high-contrast version of the standard light system appearance.
|
|
NSAppearanceNameAccessibilityHighContrastAqua MacAppearanceType = "NSAppearanceNameAccessibilityHighContrastAqua"
|
|
// NSAppearanceNameAccessibilityHighContrastDarkAqua - A high-contrast version of the standard dark system appearance.
|
|
NSAppearanceNameAccessibilityHighContrastDarkAqua MacAppearanceType = "NSAppearanceNameAccessibilityHighContrastDarkAqua"
|
|
// NSAppearanceNameAccessibilityHighContrastVibrantLight - A high-contrast version of the light vibrant appearance.
|
|
NSAppearanceNameAccessibilityHighContrastVibrantLight MacAppearanceType = "NSAppearanceNameAccessibilityHighContrastVibrantLight"
|
|
// NSAppearanceNameAccessibilityHighContrastVibrantDark - A high-contrast version of the dark vibrant appearance.
|
|
NSAppearanceNameAccessibilityHighContrastVibrantDark MacAppearanceType = "NSAppearanceNameAccessibilityHighContrastVibrantDark"
|
|
)
|
|
|
|
/******** Linux Options ********/
|
|
|
|
// WebviewGpuPolicy values used for determining the webview's hardware acceleration policy.
|
|
type WebviewGpuPolicy int
|
|
|
|
const (
|
|
// WebviewGpuPolicyAlways Hardware acceleration is always enabled.
|
|
WebviewGpuPolicyAlways WebviewGpuPolicy = iota
|
|
// WebviewGpuPolicyOnDemand Hardware acceleration is enabled/disabled as request by web contents.
|
|
WebviewGpuPolicyOnDemand
|
|
// WebviewGpuPolicyNever Hardware acceleration is always disabled.
|
|
WebviewGpuPolicyNever
|
|
)
|
|
|
|
// LinuxWindow specific to Linux windows
|
|
type LinuxWindow struct {
|
|
// Icon Sets up the icon representing the window. This icon is used when the window is minimized
|
|
// (also known as iconified).
|
|
Icon []byte
|
|
|
|
// WindowIsTranslucent sets the window's background to transparent when enabled.
|
|
WindowIsTranslucent bool
|
|
|
|
// WebviewGpuPolicy used for determining the hardware acceleration policy for the webview.
|
|
// - WebviewGpuPolicyAlways
|
|
// - WebviewGpuPolicyOnDemand
|
|
// - WebviewGpuPolicyNever
|
|
//
|
|
// Due to https://github.com/wailsapp/wails/issues/2977, if options.Linux is nil
|
|
// in the call to wails.Run(), WebviewGpuPolicy is set by default to WebviewGpuPolicyNever.
|
|
// Client code may override this behavior by passing a non-nil Options and set
|
|
// WebviewGpuPolicy as needed.
|
|
WebviewGpuPolicy WebviewGpuPolicy
|
|
|
|
// WindowDidMoveDebounceMS is the debounce time in milliseconds for the WindowDidMove event
|
|
WindowDidMoveDebounceMS uint16
|
|
|
|
// Menu is the window's menu
|
|
Menu *Menu
|
|
}
|