From 664da9e0dfec80dc1cb49d1a1ffa4efa5b948607 Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Sun, 18 Jan 2026 23:32:17 -0800 Subject: add menu toggle button for mouse --- main.lua | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'main.lua') diff --git a/main.lua b/main.lua index 481cb7d..563c2cf 100644 --- a/main.lua +++ b/main.lua @@ -1277,6 +1277,59 @@ local function toggle_menu() set_key_bindings() end +local mouse_pos_time +local mouse_over_button_area = false +local mouse_over_toggle_button = false +local mouse_timer; mouse_timer = mp.add_periodic_timer(0.1, function() + if mouse_pos_time and + not mouse_over_toggle_button and + mp.get_time() - mouse_pos_time > + config.toggle_button_timeout then + osd:show_toggle_button(false) + mouse_timer:kill() + end +end, true) -- disabled +mp.observe_property('mouse-pos', 'native', function(_, mpos) + if not mpos then + return + end + + -- mpv sends (0, 0) on startup if the mouse hasn't moved yet. don't + -- trigger display of the button until the mouse has actually moved. + if not mouse_pos_time and mpos.x == 0 and mpos.y == 0 then + return + end + + mouse_pos_time = mp.get_time() + + local is_over = osd:mouse_over_button_area(mpos) + if is_over ~= mouse_over_button_area then + mouse_over_button_area = is_over + osd:show_toggle_button(mouse_over_button_area) + elseif mouse_over_button_area and osd.toggle_button.hidden then + osd:show_toggle_button(true) + end + + if mouse_over_button_area then + mouse_timer:resume() + else + mouse_timer:kill() + end + + local is_over = osd:mouse_over_toggle_button(mpos) + if is_over ~= mouse_over_toggle_button then + mouse_over_toggle_button = is_over + if mouse_over_toggle_button then + mp.add_forced_key_binding( + 'MBTN_LEFT', 'click', toggle_menu) + mp.add_forced_key_binding('MBTN_LEFT_DBL', 'click_dbl') + else + mp.remove_key_binding('click') + mp.remove_key_binding('click_dbl') + end + end +end) + mp.observe_property('user-data/osc/visibility', 'native', function(_, val) if val and (osd:is_hidden() or val ~= 'never') then osc_visibility = val -- cgit v1.2.3-70-g09d2