From a3fb57939a307f5b661cc2f205e562f43a0a31fa Mon Sep 17 00:00:00 2001 From: Hari Rana Date: Sat, 19 Apr 2025 18:05:05 -0400 Subject: [PATCH] gui/event-widget: Implement button features This implements button functionality to make it able to focus and activate it. This also sets the appropriate accessibility role and labels/descriptions. Related: https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1036 --- src/gui/gcal-event-widget.c | 28 +++++++++++++++++++++++++++- src/gui/gcal-event-widget.ui | 2 ++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/gui/gcal-event-widget.c b/src/gui/gcal-event-widget.c index 80f4dfec..e2e4c42d 100644 --- a/src/gui/gcal-event-widget.c +++ b/src/gui/gcal-event-widget.c @@ -841,13 +841,38 @@ gcal_event_widget_class_init (GcalEventWidgetClass *klass) signals[ACTIVATE] = g_signal_new ("activate", GCAL_TYPE_EVENT_WIDGET, - G_SIGNAL_RUN_LAST, + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + gtk_widget_class_set_activate_signal (widget_class, signals[ACTIVATE]); + + { + g_autoptr (GtkShortcutAction) activate_action = NULL; + const guint activate_keyvals[] = { + GDK_KEY_space, + GDK_KEY_KP_Space, + GDK_KEY_Return, + GDK_KEY_ISO_Enter, + GDK_KEY_KP_Enter, + }; + + activate_action = gtk_signal_action_new ("activate"); + + for (size_t i = 0; i < G_N_ELEMENTS (activate_keyvals); i++) + { + g_autoptr (GtkShortcut) activate_shortcut = NULL; + + activate_shortcut = gtk_shortcut_new (gtk_keyval_trigger_new (activate_keyvals[i], 0), + g_object_ref (activate_action)); + + gtk_widget_class_add_shortcut (widget_class, activate_shortcut); + } + } + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/ui/gui/gcal-event-widget.ui"); gtk_widget_class_bind_template_child (widget_class, GcalEventWidget, drag_source); @@ -865,6 +890,7 @@ gcal_event_widget_class_init (GcalEventWidgetClass *klass) gtk_widget_class_bind_template_callback (widget_class, on_drag_source_prepare_cb); gtk_widget_class_set_css_name (widget_class, "event"); + gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } diff --git a/src/gui/gcal-event-widget.ui b/src/gui/gcal-event-widget.ui index b73760d4..1e8883d6 100644 --- a/src/gui/gcal-event-widget.ui +++ b/src/gui/gcal-event-widget.ui @@ -1,7 +1,9 @@