Skip to content

Commit f0e435e

Browse files
authored
AgendaEventRow: support long press secondary menu (#887)
1 parent 56064e3 commit f0e435e

1 file changed

Lines changed: 32 additions & 9 deletions

File tree

src/Widgets/AgendaEventRow.vala

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow {
3737
public Gtk.Revealer revealer { public get; private set; }
3838

3939
private Gtk.GestureMultiPress click_gesture;
40+
private Gtk.GestureLongPress long_press_gesture;
4041

4142
private Gtk.Image event_image;
4243
private Gtk.Label name_label;
@@ -258,21 +259,43 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow {
258259
});
259260

260261
click_gesture = new Gtk.GestureMultiPress (this) {
261-
button = Gdk.BUTTON_SECONDARY,
262-
propagation_phase = BUBBLE
262+
button = 0
263263
};
264-
click_gesture.released.connect (on_button_press);
264+
click_gesture.pressed.connect ((n_press, x, y) => {
265+
var sequence = click_gesture.get_current_sequence ();
266+
var event = click_gesture.get_last_event (sequence);
267+
268+
if (event.triggers_context_menu ()) {
269+
var menu = new Maya.EventMenu (calevent);
270+
menu.attach_to_widget (this, null);
271+
272+
menu.popup_at_pointer (event);
273+
274+
click_gesture.set_state (CLAIMED);
275+
click_gesture.reset ();
276+
}
277+
});
278+
279+
long_press_gesture = new Gtk.GestureLongPress (this) {
280+
touch_only = true
281+
};
282+
long_press_gesture.pressed.connect ((x, y) => {
283+
var sequence = long_press_gesture.get_current_sequence ();
284+
var event = long_press_gesture.get_last_event (sequence);
285+
286+
var menu = new Maya.EventMenu (calevent);
287+
menu.attach_to_widget (this, null);
288+
289+
menu.popup_at_pointer (event);
290+
291+
long_press_gesture.set_state (CLAIMED);
292+
long_press_gesture.reset ();
293+
});
265294

266295
// Fill in the information
267296
update (calevent);
268297
}
269298

270-
private void on_button_press (int n_press, double x, double y) {
271-
var menu = new Maya.EventMenu (calevent);
272-
menu.attach_to_widget (this, null);
273-
menu.popup_at_pointer ();
274-
}
275-
276299
/**
277300
* Updates the event to match the given event.
278301
*/

0 commit comments

Comments
 (0)