forked from lxn/walk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.go
More file actions
91 lines (71 loc) · 1.85 KB
/
Copy pathevent.go
File metadata and controls
91 lines (71 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Copyright 2011 The Walk Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build windows
package walk
type EventHandler func()
type Event struct {
handlers []EventHandler
}
func (e *Event) Attach(handler EventHandler) int {
for i, h := range e.handlers {
if h == nil {
e.handlers[i] = handler
return i
}
}
e.handlers = append(e.handlers, handler)
return len(e.handlers) - 1
}
func (e *Event) Detach(handle int) {
e.handlers[handle] = nil
}
type EventPublisher struct {
event Event
}
func (p *EventPublisher) Event() *Event {
return &p.event
}
func (p *EventPublisher) Publish() {
events := inProgressEventsByForm[appSingleton.activeForm]
events = append(events, &p.event)
inProgressEventsByForm[appSingleton.activeForm] = events
defer func() {
events = events[:len(events)-1]
if len(events) == 0 {
delete(inProgressEventsByForm, appSingleton.activeForm)
} else {
inProgressEventsByForm[appSingleton.activeForm] = events
return
}
layouts := scheduledLayoutsByForm[appSingleton.activeForm]
delete(scheduledLayoutsByForm, appSingleton.activeForm)
if len(layouts) == 0 {
return
}
old := performingScheduledLayouts
performingScheduledLayouts = true
defer func() {
performingScheduledLayouts = old
}()
if formResizeScheduled {
formResizeScheduled = false
bounds := appSingleton.activeForm.Bounds()
if appSingleton.activeForm.AsFormBase().fixedSize() {
bounds.Width, bounds.Height = 0, 0
}
appSingleton.activeForm.SetBounds(bounds)
}
for _, layout := range layouts {
if widget, ok := layout.Container().(Widget); ok && widget.Form() != appSingleton.activeForm {
continue
}
layout.Update(false)
}
}()
for _, handler := range p.event.handlers {
if handler != nil {
handler()
}
}
}