diff --git a/sublime_music/ui/main.py b/sublime_music/ui/main.py index 3cd3dc0..22c1992 100644 --- a/sublime_music/ui/main.py +++ b/sublime_music/ui/main.py @@ -146,14 +146,25 @@ class MainWindow(Handy.ApplicationWindow): mobile_handle = player_controls.MobileHandle(self.player_manager) # Toggle drawer when handle is pressed - def toggle_drawer(handle, event): - if event.get_click_count() != (True, 1) or not drawer.get_swipe_to_open() or event.device.get_source() == Gdk.InputSource.TOUCHSCREEN: + mobile_handle_events = Gtk.EventBox() + mobile_handle_events.set_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) + + click_gesture = Gtk.GestureMultiPress.new(mobile_handle_events) + click_gesture.set_propagation_phase(Gtk.PropagationPhase.BUBBLE) + def toggle_drawer(gesture, num, x, y): + if (num != 1 or not drawer.get_swipe_to_open() or + x < 0 or x > mobile_handle_events.get_allocated_width() or + y < 0 or y > mobile_handle_events.get_allocated_height()): return drawer.set_reveal_flap(not drawer.get_reveal_flap()) - mobile_handle.connect("button-press-event", toggle_drawer) + click_gesture.connect('released', toggle_drawer) - squeezer.add(mobile_handle) + # Need to keep the gesture object alive + mobile_handle_events._gesture = click_gesture + + mobile_handle_events.add(mobile_handle) + squeezer.add(mobile_handle_events) # Only show the handle on desktop def squeezer_changed(squeezer, _):