5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 00:10:47 +08:00

[v3 Windows] Add WebviewWindow.Flash()

This commit is contained in:
Lea Anthony 2023-07-11 20:10:18 +10:00
parent ecbb135949
commit d6cfe4414d
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405
9 changed files with 63 additions and 0 deletions

View File

@ -321,6 +321,15 @@ func main() {
})
})
if runtime.GOOS == "windows" {
stateMenu.Add("Flash Start").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.WebviewWindow) {
time.Sleep(2 * time.Second)
w.Flash(true)
})
})
}
printMenu := menu.AddSubmenu("Print")
printMenu.Add("Print").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.WebviewWindow) {

View File

@ -70,6 +70,7 @@ type (
setEnabled(enabled bool)
absolutePosition() (int, int)
setAbsolutePosition(x int, y int)
flash(enabled bool)
}
)
@ -418,6 +419,16 @@ func (w *WebviewWindow) SetFullscreenButtonEnabled(enabled bool) *WebviewWindow
return w
}
// Flash flashes the window's taskbar button/icon. Windows only.
func (w *WebviewWindow) Flash(enabled bool) {
if w.impl == nil {
return
}
invokeSync(func() {
w.impl.flash(enabled)
})
}
// IsMinimised returns true if the window is minimised
func (w *WebviewWindow) IsMinimised() bool {
if w.impl == nil {

View File

@ -944,6 +944,10 @@ func (w *macosWebviewWindow) setTitle(title string) {
}
}
func (w *macosWebviewWindow) flash(enabled bool) {
// Not supported on macOS
}
func (w *macosWebviewWindow) setSize(width, height int) {
C.windowSetSize(w.nsWindow, C.int(width), C.int(height))
}

View File

@ -179,6 +179,10 @@ func (w *linuxWebviewWindow) minimise() {
windowMinimize(w.window)
}
func (w *linuxWebviewWindow) flash(enabled bool) {
// Not supported on linux
}
func (w *linuxWebviewWindow) on(eventID uint) {
// Don't think this is correct!
// GTK Events are strings

View File

@ -1464,6 +1464,10 @@ func (w *windowsWebviewWindow) setupChromium() {
}
func (w *windowsWebviewWindow) flash(enabled bool) {
w32.FlashWindow(w.hwnd, enabled)
}
func (w *windowsWebviewWindow) navigationCompleted(sender *edge.ICoreWebView2, args *edge.ICoreWebView2NavigationCompletedEventArgs) {
// Emit DomReady Event

View File

@ -915,6 +915,15 @@ const (
SS_ELLIPSISMASK = 0x0000C000
)
const (
FLASHW_STOP = 0 // Stop flashing. The system restores the window to its original state.
FLASHW_CAPTION = 1 // Flash the window caption.
FLASHW_TRAY = 2 // Flash the taskbar button.
FLASHW_ALL = 3 // Flash both the window caption and taskbar button. This is equivalent to setting the FLASHW_CAPTION | FLASHW_TRAY flags.
FLASHW_TIMER = 4 // Flash continuously, until the FLASHW_STOP flag is set.
FLASHW_TIMERNOFG = 12 // Flash continuously until the window comes to the foreground.
)
// Edit styles
const (
ES_LEFT = 0x0000

View File

@ -1133,3 +1133,11 @@ type SCROLLINFO struct {
NPos int32
NTrackPos int32
}
type FLASHWINFO struct {
CbSize uint32
Hwnd HWND
DwFlags DWORD
UCount uint32
DwTimeout DWORD
}

View File

@ -166,6 +166,8 @@ var (
procGetScrollInfo = moduser32.NewProc("GetScrollInfo")
procSetScrollInfo = moduser32.NewProc("SetScrollInfo")
procFlashWindowEx = moduser32.NewProc("FlashWindowEx")
mainThread HANDLE
)

View File

@ -234,3 +234,15 @@ func RegisterWindow(name string, proc WindowProc) (HINSTANCE, error) {
return applicationInstance, nil
}
func FlashWindow(hwnd HWND, enabled bool) {
var flashInfo FLASHWINFO
flashInfo.CbSize = uint32(unsafe.Sizeof(flashInfo))
flashInfo.Hwnd = hwnd
if enabled {
flashInfo.DwFlags = FLASHW_ALL | FLASHW_TIMERNOFG
} else {
flashInfo.DwFlags = FLASHW_STOP
}
_, _, _ = procFlashWindowEx.Call(uintptr(unsafe.Pointer(&flashInfo)))
}