From 69e4a3cff3c697db9f024985d8cec271269dab3a Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 25 Jun 2022 13:57:46 +0200 Subject: [PATCH] app: guarantee a ConfigEvent for every Window.Configure call Not only is the client guaranteed a ConfigEvent, but app.Window can assume that an unsupported decoration change will be corrected (by a ConfigEvent with Decorated forced to the supported value). Signed-off-by: Elias Naur --- app/os_android.go | 4 +--- app/os_ios.go | 4 +--- app/os_js.go | 4 +--- app/os_macos.go | 4 +--- app/os_wayland.go | 4 +--- app/os_windows.go | 15 +++------------ app/os_x11.go | 4 +--- app/window.go | 7 +------ 8 files changed, 10 insertions(+), 36 deletions(-) diff --git a/app/os_android.go b/app/os_android.go index 4845fd3e..477a09c0 100644 --- a/app/os_android.go +++ b/app/os_android.go @@ -1329,9 +1329,7 @@ func (w *window) Configure(options []Option) { if cnf.Decorated != prev.Decorated { w.config.Decorated = cnf.Decorated } - if w.config != prev { - w.callbacks.Event(ConfigEvent{Config: w.config}) - } + w.callbacks.Event(ConfigEvent{Config: w.config}) }) } diff --git a/app/os_ios.go b/app/os_ios.go index f88c2c3a..de603bc6 100644 --- a/app/os_ios.go +++ b/app/os_ios.go @@ -281,9 +281,7 @@ func (w *window) Configure([]Option) { prev := w.config // Decorations are never disabled. w.config.Decorated = true - if w.config != prev { - w.w.Event(ConfigEvent{Config: w.config}) - } + w.w.Event(ConfigEvent{Config: w.config}) } func (w *window) EditorStateChanged(old, new editorState) {} diff --git a/app/os_js.go b/app/os_js.go index 614441d3..644ff2ff 100644 --- a/app/os_js.go +++ b/app/os_js.go @@ -533,9 +533,7 @@ func (w *window) Configure(options []Option) { if cnf.Decorated != prev.Decorated { w.config.Decorated = cnf.Decorated } - if w.config != prev { - w.w.Event(ConfigEvent{Config: w.config}) - } + w.w.Event(ConfigEvent{Config: w.config}) } func (w *window) Perform(system.Action) {} diff --git a/app/os_macos.go b/app/os_macos.go index 164cbe34..a72fc776 100644 --- a/app/os_macos.go +++ b/app/os_macos.go @@ -390,9 +390,7 @@ func (w *window) Configure(options []Option) { C.setWindowStandardButtonHidden(w.window, C.NSWindowMiniaturizeButton, barTrans) C.setWindowStandardButtonHidden(w.window, C.NSWindowZoomButton, barTrans) } - if w.config != prev { - w.w.Event(ConfigEvent{Config: w.config}) - } + w.w.Event(ConfigEvent{Config: w.config}) } func (w *window) setTitle(prev, cnf Config) { diff --git a/app/os_wayland.go b/app/os_wayland.go index aa255bd9..0c3a4235 100644 --- a/app/os_wayland.go +++ b/app/os_wayland.go @@ -1010,9 +1010,7 @@ func (w *window) Configure(options []Option) { C.xdg_toplevel_set_max_size(w.topLvl, C.int32_t(scaled.X), C.int32_t(scaled.Y)) } } - if w.config != prev || w.config.Decorated != cnf.Decorated { - w.w.Event(ConfigEvent{Config: w.config}) - } + w.w.Event(ConfigEvent{Config: w.config}) } func (w *window) setTitle(prev, cnf Config) { diff --git a/app/os_windows.go b/app/os_windows.go index c05f36c2..9fceb8f7 100644 --- a/app/os_windows.go +++ b/app/os_windows.go @@ -188,7 +188,6 @@ func createNativeWindow() (*window, error) { // It reads the window style and size/position and updates w.config. // If anything has changed it emits a ConfigEvent to notify the application. func (w *window) update() { - var triggerEvent bool r := windows.GetWindowRect(w.hwnd) size := image.Point{ X: int(r.Right - r.Left - w.deltas.width), @@ -210,17 +209,9 @@ func (w *window) update() { } else { mode = Windowed } - if size != w.config.Size { - w.config.Size = size - triggerEvent = true - } - if mode != w.config.Mode { - w.config.Mode = mode - triggerEvent = true - } - if triggerEvent { - w.w.Event(ConfigEvent{Config: w.config}) - } + w.config.Size = size + w.config.Mode = mode + w.w.Event(ConfigEvent{Config: w.config}) } func windowProc(hwnd syscall.Handle, msg uint32, wParam, lParam uintptr) uintptr { diff --git a/app/os_x11.go b/app/os_x11.go index 6d5cb3a0..ebac9b83 100644 --- a/app/os_x11.go +++ b/app/os_x11.go @@ -234,9 +234,7 @@ func (w *x11Window) Configure(options []Option) { if cnf.Decorated != prev.Decorated { w.config.Decorated = cnf.Decorated } - if w.config != prev { - w.w.Event(ConfigEvent{Config: w.config}) - } + w.w.Event(ConfigEvent{Config: w.config}) } func (w *x11Window) setTitle(prev, cnf Config) { diff --git a/app/window.go b/app/window.go index 6e84cb31..84636eb8 100644 --- a/app/window.go +++ b/app/window.go @@ -861,16 +861,11 @@ func (w *Window) processEvent(d driver, e event.Event) bool { case wakeupEvent: select { case opts := <-w.options: - // Send a decoration mode update, in case the driver does not - // support switching. cnf := Config{Decorated: w.decorations.enabled} for _, opt := range opts { opt(w.metric, &cnf) } - if w.decorations.enabled != cnf.Decorated { - w.decorations.enabled = cnf.Decorated - w.out <- ConfigEvent{Config: w.effectiveConfig()} - } + w.decorations.enabled = cnf.Decorated d.Configure(opts) default: }