Rearrange files.

This commit is contained in:
2025-10-05 20:06:47 +01:00
parent c6eb56ef29
commit da0af70b1e
13 changed files with 119 additions and 51 deletions
+127
View File
@@ -0,0 +1,127 @@
EVENT_TYPES = {
1 => :create,
2 => :closed,
3 => :enter,
4 => :showed,
5 => :show_request,
6 => :mouse_press,
7 => :mouse_drag,
8 => :mouse_release,
9 => :key_press,
10 => :key_release,
11 => :closed,
12 => :configure_request,
13 => :resize_request
}.freeze
def handle_event(event)
case EVENT_TYPES[event[:type]]
when :create
return unless event[:override_redirect].zero?
X.subscribe event[:window]
when :closed
$windows[event[:window]]&.delete
$workspaces[:main].tiled_root_block.compute_geometry!
when :enter
X.send_to_top event[:window]
floating_windows = $windows.select { |_i, w| w.floating }
floating_windows.each { |_i, w| X.send_to_top w.window_id }
X.focus event[:window]
when :showed
return unless event[:override_redirect].zero?
X.send_to_top event[:window]
floating_windows = $windows.select { |_i, w| w.floating }
floating_windows.each { |_i, w| X.send_to_top w.window_id }
X.focus event[:window]
when :show_request
$workspaces[:main].add event[:window] if $windows[event[:window]].nil?
$workspaces[:main].tiled_root_block.compute_geometry!
X.show event[:window]
when :mouse_press
return if event[:is_root] != 0
return if $windows[event[:window]].nil?
$mouse_data[:btn] = event[:btn]
$mouse_data[:window] = $windows[event[:window]]
X.grab_pointer $root
$mouse_data[:pointer] = X.get_pointer
if $mouse_data[:window].floating
$mouse_data[:mode] = :floating
$mouse_data[:geometry] = X.get_geometry event[:window]
else
$mouse_data[:mode] = :tiled
end
$mousebind_actions[event[:btn]]&.call(event)
when :mouse_drag
mouse_pos = X.get_pointer
if $mouse_data[:mode] == :floating
dx = mouse_pos[:x] - $mouse_data[:pointer][:x]
dy = mouse_pos[:y] - $mouse_data[:pointer][:y]
if $mouse_data[:btn] == 1
$mouse_data[:window].move $mouse_data[:geometry][:x] + dx, $mouse_data[:geometry][:y] + dy
elsif $mouse_data[:btn] == 3
X.resize_window $mouse_data[:window].window_id,
[$mouse_data[:geometry][:width] + dx, 50].max,
[$mouse_data[:geometry][:height] + dy, 50].max
end
elsif $mouse_data[:mode] == :tiled
if $mouse_data[:btn] == 1
find_targets = compute_drop_targets! $mouse_data[:window]
target = drop_target(find_targets, mouse_pos[:x], mouse_pos[:y])
if target
if $rect[:target] != target
X.destroy $rect[:id] if $rect[:id]
$rect[:id] = X.draw_rectangle target[:x], target[:y], target[:width], target[:height], 0x500070
$rect[:target] = target
end
else
X.destroy $rect[:id] if $rect[:id]
$rect = {}
end
elsif $mouse_data[:btn] == 3
# TODO: tile resize . dynamic
end
end
when :mouse_release
if $mouse_data[:mode] == :tiled
X.destroy $rect[:id] if $rect[:id]
$rect = {}
end
X.ungrab_pointer
X.send_to_top $mouse_data[:window].window_id if $mouse_data[:window]
X.focus $mouse_data[:window].window_id if $mouse_data[:window]
$mouse_data = {}
when :key_press
$keybind_actions[event[:btn]]&.call(event)
when :key_release
# TODO
when :configure_request
$windows[event[:window]]&.resize event[:width], event[:height]
X.send_to_top event[:window]
X.focus event[:window]
when :resize_request
$windows[event[:window]]&.resize event[:width], event[:height]
X.send_to_top event[:window]
X.focus event[:window]
end
end