Skip to content

Commit 8f7ac02

Browse files
committed
refactor set_keyboard_callbacks
1 parent 4d05f32 commit 8f7ac02

File tree

2 files changed

+17
-37
lines changed

2 files changed

+17
-37
lines changed

src/Desktop/Windows.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ function Base.empty!(window::W) where {W <: UIWindow}
107107
empty!(window.items)
108108
end
109109

110-
function Window(f; kwargs...)
110+
function Window(f::Function; kwargs...)
111111
Window(; post_block=f, kwargs...)
112112
end
113113

src/Desktop/application.jl

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -98,28 +98,12 @@ function set_keyboard_callbacks(glwin::GLFW.Window)
9898
)
9999
keyboard_modifier_ranges = 340:347 # GLFW.KEY_LEFT_SHIFT:GLFW.KEY_RIGHT_SUPER
100100

101-
function get_modifier(key::GLFW.Key)::Symbol
102-
(key == GLFW.KEY_LEFT_SHIFT || key == GLFW.KEY_RIGHT_SHIFT) && return :shift
103-
(key == GLFW.KEY_LEFT_CONTROL || key == GLFW.KEY_RIGHT_CONTROL) && return :ctrl
104-
(key == GLFW.KEY_LEFT_ALT || key == GLFW.KEY_RIGHT_ALT) && return :alt
105-
(key == GLFW.KEY_LEFT_SUPER || key == GLFW.KEY_RIGHT_SUPER) && return :super
106-
throw(DomainError(key))
107-
end
108-
109-
function conjunction_match(conjunction::Conjunction)::Bool
110-
if conjunction.shift
111-
!(keyboard_state[GLFW.KEY_LEFT_SHIFT] || keyboard_state[GLFW.KEY_RIGHT_SHIFT]) && return false
112-
end
113-
if conjunction.ctrl
114-
!(keyboard_state[GLFW.KEY_LEFT_CONTROL] || keyboard_state[GLFW.KEY_RIGHT_CONTROL]) && return false
115-
end
116-
if conjunction.alt
117-
!(keyboard_state[GLFW.KEY_LEFT_ALT] || keyboard_state[GLFW.KEY_RIGHT_ALT]) && return false
118-
end
119-
if conjunction.super
120-
!(keyboard_state[GLFW.KEY_LEFT_SUPER] || keyboard_state[GLFW.KEY_RIGHT_SUPER]) && return false
121-
end
122-
true
101+
function conjunction_from_keyboard_state(key::Union{Nothing, Key})::Conjunction # keyboard_state
102+
shift = keyboard_state[GLFW.KEY_LEFT_SHIFT] || keyboard_state[GLFW.KEY_RIGHT_SHIFT]
103+
ctrl = keyboard_state[GLFW.KEY_LEFT_CONTROL] || keyboard_state[GLFW.KEY_RIGHT_CONTROL]
104+
alt = keyboard_state[GLFW.KEY_LEFT_ALT] || keyboard_state[GLFW.KEY_RIGHT_ALT]
105+
super = keyboard_state[GLFW.KEY_LEFT_SUPER] || keyboard_state[GLFW.KEY_RIGHT_SUPER]
106+
Conjunction(shift, ctrl, alt, super, key)
123107
end
124108

125109
block = function (_, key, scancode, action, mods)
@@ -128,27 +112,23 @@ function set_keyboard_callbacks(glwin::GLFW.Window)
128112
if keyval in keyboard_modifier_ranges
129113
keyboard_state[key] = true
130114
if !isempty(Shortcuts.pressed_modifier_callbacks)
131-
for (conjunction, f) in Shortcuts.pressed_modifier_callbacks
132-
getfield(conjunction, get_modifier(key)) && conjunction_match(conjunction) && f((pressed=conjunction,))
115+
conjunction = conjunction_from_keyboard_state(nothing)
116+
if haskey(Shortcuts.pressed_modifier_callbacks, conjunction)
117+
Shortcuts.pressed_modifier_callbacks[conjunction]((pressed=conjunction,))
133118
end
134119
end
135120
else
136-
if (any values)(keyboard_state)
121+
k = Key(keyval)
122+
conjunction = conjunction_from_keyboard_state(k)
123+
if conjunction.shift || conjunction.ctrl || conjunction.alt || conjunction.super
137124
if !isempty(Shortcuts.pressed_conjunction_callbacks)
138-
for (conjunction, f) in Shortcuts.pressed_conjunction_callbacks
139-
nothing === conjunction.key && continue
140-
if conjunction_match(conjunction) && keyval == conjunction.key.value
141-
f((pressed=conjunction,))
142-
break
143-
end
125+
if haskey(Shortcuts.pressed_conjunction_callbacks, conjunction)
126+
Shortcuts.pressed_conjunction_callbacks[conjunction]((pressed=conjunction,))
144127
end
145128
end
146129
elseif !isempty(Shortcuts.pressed_key_callbacks)
147-
for (k, f) in Shortcuts.pressed_key_callbacks
148-
if keyval == k.value
149-
f((pressed=k,))
150-
break
151-
end
130+
if haskey(Shortcuts.pressed_key_callbacks, k)
131+
Shortcuts.pressed_key_callbacks[k]((pressed=k,))
152132
end
153133
end
154134
end

0 commit comments

Comments
 (0)