File: pause_on_lost_focus.tcl

package info (click to toggle)
openmsx 20.0%2Bdfsg-1.2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 27,544 kB
  • sloc: cpp: 236,922; xml: 49,948; tcl: 15,056; python: 5,385; perl: 281; sh: 77; makefile: 53
file content (48 lines) | stat: -rw-r--r-- 1,308 bytes parent folder | download
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
namespace eval pause_on_lost_focus {

variable paused_due_to_lost_focus false

proc lost_focus {} {
	variable paused_due_to_lost_focus
	if {!$::pause} {
		set ::pause on
		# CAUTION: this must be set after changing the pause setting!
		set paused_due_to_lost_focus true
	} else {
		set paused_due_to_lost_focus false
	}
}

proc gained_focus {} {
	variable paused_due_to_lost_focus
	if {$paused_due_to_lost_focus} {
		set ::pause off
		# NOTE: paused_due_to_lost_focus will be set to false by setting_changed
	}
}

proc pause_setting_changed {name1 name2 op} {
	variable paused_due_to_lost_focus
	set paused_due_to_lost_focus false
}

proc setting_changed {name1 name2 op} {
	variable paused_due_to_lost_focus
	set paused_due_to_lost_focus false
	if {$::pause_on_lost_focus} {
		bind_default "focus 0" "pause_on_lost_focus::lost_focus"
		bind_default "focus 1" "pause_on_lost_focus::gained_focus"
	} else {
		unbind_default "focus 0"
		unbind_default "focus 1"
	}
}

user_setting create boolean pause_on_lost_focus "pause emulation when the openMSX window loses focus" false
trace add variable ::pause_on_lost_focus write [namespace code setting_changed]
trace add variable ::pause write [namespace code pause_setting_changed]

# initial setup (bind or unbind)
setting_changed pause_on_lost_focus "" write

}