Make it work
This commit is contained in:
+22
-30
@@ -9,7 +9,7 @@ EVENT_TYPES = {
|
||||
8 => :mouse_release,
|
||||
9 => :key_press,
|
||||
10 => :key_release,
|
||||
11 => :closed,
|
||||
11 => :closed_temp,
|
||||
12 => :configure_request,
|
||||
13 => :resize_request
|
||||
}.freeze
|
||||
@@ -26,33 +26,25 @@ def handle_event(event)
|
||||
|
||||
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]
|
||||
monitor = current_monitor
|
||||
if $windows[event[:window]].nil?
|
||||
monitor[:workspaces][monitor[:selected_workspace]].create event[:window]
|
||||
X.show event[:window]
|
||||
end
|
||||
|
||||
|
||||
when :mouse_press
|
||||
$mousebind_actions[[event[:btn], event[:state]]]&.call(event)
|
||||
return if event[:is_root] != 0
|
||||
return if $windows[event[:window]].nil?
|
||||
return if event[:state] != 1
|
||||
$mouse_data[:btn] = event[:btn]
|
||||
$mouse_data[:window] = $windows[event[:window]]
|
||||
X.grab_pointer $root
|
||||
@@ -63,7 +55,6 @@ def handle_event(event)
|
||||
else
|
||||
$mouse_data[:mode] = :tiled
|
||||
end
|
||||
$mousebind_actions[event[:btn]]&.call(event)
|
||||
|
||||
when :mouse_drag
|
||||
mouse_pos = X.get_pointer
|
||||
@@ -73,13 +64,14 @@ def handle_event(event)
|
||||
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
|
||||
$mouse_data[:window]&.resize [$mouse_data[:geometry][:width] + dx, 50].max,
|
||||
[$mouse_data[:geometry][:height] + dy, 50].max,
|
||||
true
|
||||
end
|
||||
elsif $mouse_data[:mode] == :tiled
|
||||
if $mouse_data[:btn] == 1
|
||||
find_targets = compute_drop_targets! $mouse_data[:window]
|
||||
monitor = current_monitor
|
||||
find_targets = monitor[:workspaces][monitor[:selected_workspace]].insertion_rects
|
||||
target = drop_target(find_targets, mouse_pos[:x], mouse_pos[:y])
|
||||
if target
|
||||
if $rect[:target] != target
|
||||
@@ -98,17 +90,21 @@ def handle_event(event)
|
||||
|
||||
when :mouse_release
|
||||
if $mouse_data[:mode] == :tiled
|
||||
X.destroy $rect[:id] if $rect[:id]
|
||||
$rect = {}
|
||||
if $mouse_data[:btn] == 1
|
||||
if $rect[:id]
|
||||
X.destroy $rect[:id]
|
||||
monitor = current_monitor
|
||||
monitor[:workspaces][monitor[:selected_workspace]].drop $rect[:target][:drop], $mouse_data[:window]
|
||||
end
|
||||
$rect = {}
|
||||
end
|
||||
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)
|
||||
$keybind_actions[[event[:btn], event[:state]]]&.call(event)
|
||||
|
||||
when :key_release
|
||||
# TODO
|
||||
@@ -116,12 +112,8 @@ def handle_event(event)
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user