From ee8538900a1d5267d1946005b54f6554dac3d384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Tue, 17 Feb 2026 11:19:42 -0800 Subject: [PATCH 1/2] EventMenu: create set_action_sensitive --- src/Grid/EventButton.vala | 5 ++++- src/Widgets/AgendaEventRow.vala | 5 ++++- src/Widgets/EventMenu.vala | 21 +++++++++++---------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Grid/EventButton.vala b/src/Grid/EventButton.vala index 98ad7119e..3225dce72 100644 --- a/src/Grid/EventButton.vala +++ b/src/Grid/EventButton.vala @@ -46,7 +46,8 @@ public class Maya.View.EventButton : Gtk.Bin { child = revealer; - var context_menu = Maya.EventMenu.build (comp); + SimpleActionGroup action_group; + var context_menu = Maya.EventMenu.build (comp, out action_group); context_menu.attach_to_widget (this, null); click_gesture = new Gtk.GestureMultiPress (this) { @@ -64,6 +65,7 @@ public class Maya.View.EventButton : Gtk.Bin { } if (event.triggers_context_menu ()) { + Maya.EventMenu.set_action_sensitive (comp, action_group); context_menu.popup_at_pointer (event); click_gesture.set_state (CLAIMED); @@ -78,6 +80,7 @@ public class Maya.View.EventButton : Gtk.Bin { var sequence = long_press_gesture.get_current_sequence (); var event = long_press_gesture.get_last_event (sequence); + Maya.EventMenu.set_action_sensitive (comp, action_group); context_menu.popup_at_pointer (event); long_press_gesture.set_state (CLAIMED); diff --git a/src/Widgets/AgendaEventRow.vala b/src/Widgets/AgendaEventRow.vala index 080fdad8f..4e00c8d3f 100644 --- a/src/Widgets/AgendaEventRow.vala +++ b/src/Widgets/AgendaEventRow.vala @@ -239,7 +239,8 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow { child = revealer; - var context_menu = Maya.EventMenu.build (calevent); + SimpleActionGroup action_group; + var context_menu = Maya.EventMenu.build (calevent, out action_group); context_menu.attach_to_widget (this, null); var cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR); @@ -270,6 +271,7 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow { var event = click_gesture.get_last_event (sequence); if (event.triggers_context_menu ()) { + Maya.EventMenu.set_action_sensitive (calevent, action_group); context_menu.popup_at_pointer (event); click_gesture.set_state (CLAIMED); @@ -284,6 +286,7 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow { var sequence = long_press_gesture.get_current_sequence (); var event = long_press_gesture.get_last_event (sequence); + Maya.EventMenu.set_action_sensitive (calevent, action_group); context_menu.popup_at_pointer (event); long_press_gesture.set_state (CLAIMED); diff --git a/src/Widgets/EventMenu.vala b/src/Widgets/EventMenu.vala index 633f24306..17d010125 100644 --- a/src/Widgets/EventMenu.vala +++ b/src/Widgets/EventMenu.vala @@ -7,7 +7,7 @@ */ namespace Maya.EventMenu { - public static Gtk.Menu build (ECal.Component comp) { + public static Gtk.Menu build (ECal.Component comp, out SimpleActionGroup action_group) { var action_edit = new GLib.SimpleAction ("edit", null); action_edit.activate.connect (() => { ((Maya.Application) GLib.Application.get_default ()).window.on_modified (comp); @@ -24,7 +24,7 @@ namespace Maya.EventMenu { var action_add_exception = new GLib.SimpleAction ("add-exception", null); action_add_exception.activate.connect (() => add_exception (comp)); - var action_group = new SimpleActionGroup (); + action_group = new SimpleActionGroup (); action_group.add_action (action_edit); action_group.add_action (action_duplicate); action_group.add_action (action_remove); @@ -44,17 +44,18 @@ namespace Maya.EventMenu { var menu = new Gtk.Menu.from_model (menu_model); menu.insert_action_group ("event", action_group); + return menu; + } + + private static void set_action_sensitive (ECal.Component comp, SimpleActionGroup action_group) { E.Source src = comp.get_data ("source"); - menu.popped_up.connect (() => { - var sensitive = src.writable && !Calendar.EventStore.get_default ().calclient_is_readonly (src); - action_edit.set_enabled (sensitive); - action_duplicate.set_enabled (sensitive); - action_remove.set_enabled (sensitive); - action_add_exception.set_enabled (sensitive); - }); + var sensitive = src.writable && !Calendar.EventStore.get_default ().calclient_is_readonly (src); - return menu; + ((SimpleAction) action_group.lookup_action ("edit")).set_enabled (sensitive); + ((SimpleAction) action_group.lookup_action ("duplicate")).set_enabled (sensitive); + ((SimpleAction) action_group.lookup_action ("remove")).set_enabled (sensitive); + ((SimpleAction) action_group.lookup_action ("add-exception")).set_enabled (sensitive); } private static void remove_event (ECal.Component comp) { From 60e5f04efce4607f3213843538b4bd03c6fd23ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Tue, 17 Feb 2026 11:24:23 -0800 Subject: [PATCH 2/2] Set on construction --- src/Grid/EventButton.vala | 5 +---- src/Widgets/AgendaEventRow.vala | 5 +---- src/Widgets/EventMenu.vala | 17 +++++++---------- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/Grid/EventButton.vala b/src/Grid/EventButton.vala index 3225dce72..98ad7119e 100644 --- a/src/Grid/EventButton.vala +++ b/src/Grid/EventButton.vala @@ -46,8 +46,7 @@ public class Maya.View.EventButton : Gtk.Bin { child = revealer; - SimpleActionGroup action_group; - var context_menu = Maya.EventMenu.build (comp, out action_group); + var context_menu = Maya.EventMenu.build (comp); context_menu.attach_to_widget (this, null); click_gesture = new Gtk.GestureMultiPress (this) { @@ -65,7 +64,6 @@ public class Maya.View.EventButton : Gtk.Bin { } if (event.triggers_context_menu ()) { - Maya.EventMenu.set_action_sensitive (comp, action_group); context_menu.popup_at_pointer (event); click_gesture.set_state (CLAIMED); @@ -80,7 +78,6 @@ public class Maya.View.EventButton : Gtk.Bin { var sequence = long_press_gesture.get_current_sequence (); var event = long_press_gesture.get_last_event (sequence); - Maya.EventMenu.set_action_sensitive (comp, action_group); context_menu.popup_at_pointer (event); long_press_gesture.set_state (CLAIMED); diff --git a/src/Widgets/AgendaEventRow.vala b/src/Widgets/AgendaEventRow.vala index 4e00c8d3f..080fdad8f 100644 --- a/src/Widgets/AgendaEventRow.vala +++ b/src/Widgets/AgendaEventRow.vala @@ -239,8 +239,7 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow { child = revealer; - SimpleActionGroup action_group; - var context_menu = Maya.EventMenu.build (calevent, out action_group); + var context_menu = Maya.EventMenu.build (calevent); context_menu.attach_to_widget (this, null); var cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR); @@ -271,7 +270,6 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow { var event = click_gesture.get_last_event (sequence); if (event.triggers_context_menu ()) { - Maya.EventMenu.set_action_sensitive (calevent, action_group); context_menu.popup_at_pointer (event); click_gesture.set_state (CLAIMED); @@ -286,7 +284,6 @@ public class Maya.View.AgendaEventRow : Gtk.ListBoxRow { var sequence = long_press_gesture.get_current_sequence (); var event = long_press_gesture.get_last_event (sequence); - Maya.EventMenu.set_action_sensitive (calevent, action_group); context_menu.popup_at_pointer (event); long_press_gesture.set_state (CLAIMED); diff --git a/src/Widgets/EventMenu.vala b/src/Widgets/EventMenu.vala index 17d010125..8f795cc4a 100644 --- a/src/Widgets/EventMenu.vala +++ b/src/Widgets/EventMenu.vala @@ -7,7 +7,7 @@ */ namespace Maya.EventMenu { - public static Gtk.Menu build (ECal.Component comp, out SimpleActionGroup action_group) { + public static Gtk.Menu build (ECal.Component comp) { var action_edit = new GLib.SimpleAction ("edit", null); action_edit.activate.connect (() => { ((Maya.Application) GLib.Application.get_default ()).window.on_modified (comp); @@ -24,7 +24,7 @@ namespace Maya.EventMenu { var action_add_exception = new GLib.SimpleAction ("add-exception", null); action_add_exception.activate.connect (() => add_exception (comp)); - action_group = new SimpleActionGroup (); + var action_group = new SimpleActionGroup (); action_group.add_action (action_edit); action_group.add_action (action_duplicate); action_group.add_action (action_remove); @@ -44,18 +44,15 @@ namespace Maya.EventMenu { var menu = new Gtk.Menu.from_model (menu_model); menu.insert_action_group ("event", action_group); - return menu; - } - - private static void set_action_sensitive (ECal.Component comp, SimpleActionGroup action_group) { E.Source src = comp.get_data ("source"); var sensitive = src.writable && !Calendar.EventStore.get_default ().calclient_is_readonly (src); + action_edit.set_enabled (sensitive); + action_duplicate.set_enabled (sensitive); + action_remove.set_enabled (sensitive); + action_add_exception.set_enabled (sensitive); - ((SimpleAction) action_group.lookup_action ("edit")).set_enabled (sensitive); - ((SimpleAction) action_group.lookup_action ("duplicate")).set_enabled (sensitive); - ((SimpleAction) action_group.lookup_action ("remove")).set_enabled (sensitive); - ((SimpleAction) action_group.lookup_action ("add-exception")).set_enabled (sensitive); + return menu; } private static void remove_event (ECal.Component comp) {