diff options
Diffstat (limited to 'main.lua')
| -rw-r--r-- | main.lua | 62 |
1 files changed, 51 insertions, 11 deletions
@@ -1044,18 +1044,24 @@ local function process_mouse_click(ev) return end - local line = osd:get_mouse_line(mouse_state.pos) - if line then - line = line - (osd.lines - osd:menu_lines(state)) + local area + local val = osd:mouse_scrollbar_ratio(mouse_state.pos) + if val then + area = 'scrollbar' + else + local line = osd:mouse_menu_line(mouse_state.pos) + if line then + area = 'menu' + val = line - (osd.lines - osd:menu_lines(state)) + end end - local key, dbl = handle_mouse_click(ev, line) - return key, dbl, line + local key, dbl = handle_mouse_click(ev, area == 'menu' and val or nil) + return key, dbl, area, val end -local function mouse_click_left(ev) - local key, dbl, line = process_mouse_click(ev) - if not key or not line or line == 0 then +local function mouse_click_left_menu(dbl, line) + if line == 0 then return end @@ -1091,9 +1097,32 @@ local function mouse_click_left(ev) end end -local function mouse_click_right(ev) - local key, dbl, line = process_mouse_click(ev) - if not key or not dbl or not line or line < 1 then +local function mouse_click_left_scrollbar(dbl, ratio) + if not dbl then + return + end + + -- set_cursor handles out-of-bounds moves (when ratio == 1) + set_cursor( + math.floor(ratio * #state:menu().options) + 1, + {centre = true}) +end + +local function mouse_click_left(ev) + local key, dbl, area, val = process_mouse_click(ev) + if not key then + return + end + + if area == 'menu' then + return mouse_click_left_menu(dbl, val) + elseif area == 'scrollbar' then + return mouse_click_left_scrollbar(dbl, val) + end +end + +local function mouse_click_right_menu(dbl, line) + if not dbl or line < 1 then return end @@ -1106,6 +1135,17 @@ local function mouse_click_right(ev) open_option_info(menu.options[pos]) end +local function mouse_click_right(ev) + local key, dbl, area, val = process_mouse_click(ev) + if not key then + return + end + + if area == 'menu' then + return mouse_click_right_menu(dbl, val) + end +end + local function reload_data() if state.depth > 1 then osd:flash_error('Can only reload data from root menu') |
