OXYGENHUB
◆ main openmsx / share / scripts / pause_on_lost_focus.tcl
1.3 KiB · Tcl · last changed chore(): initial commit 1 month ago source blame history raw
1
namespace eval pause_on_lost_focus {
2
3
variable paused_due_to_lost_focus false
4
5
proc lost_focus {} {
6
	variable paused_due_to_lost_focus
7
	if {!$::pause} {
8
		set ::pause on
9
		# CAUTION: this must be set after changing the pause setting!
10
		set paused_due_to_lost_focus true
11
	} else {
12
		set paused_due_to_lost_focus false
13
	}
14
}
15
16
proc gained_focus {} {
17
	variable paused_due_to_lost_focus
18
	if {$paused_due_to_lost_focus} {
19
		set ::pause off
20
		# NOTE: paused_due_to_lost_focus will be set to false by setting_changed
21
	}
22
}
23
24
proc pause_setting_changed {name1 name2 op} {
25
	variable paused_due_to_lost_focus
26
	set paused_due_to_lost_focus false
27
}
28
29
proc setting_changed {name1 name2 op} {
30
	variable paused_due_to_lost_focus
31
	set paused_due_to_lost_focus false
32
	if {$::pause_on_lost_focus} {
33
		bind_default "focus 0" "pause_on_lost_focus::lost_focus"
34
		bind_default "focus 1" "pause_on_lost_focus::gained_focus"
35
	} else {
36
		unbind_default "focus 0"
37
		unbind_default "focus 1"
38
	}
39
}
40
41
user_setting create boolean pause_on_lost_focus "pause emulation when the openMSX window loses focus" false
42
trace add variable ::pause_on_lost_focus write [namespace code setting_changed]
43
trace add variable ::pause write [namespace code pause_setting_changed]
44
45
# initial setup (bind or unbind)
46
setting_changed pause_on_lost_focus "" write
47
48
}