From 34be5e466353dba20a8dab874f905842569da08c Mon Sep 17 00:00:00 2001 From: Hari Rana Date: Thu, 23 Apr 2026 12:05:19 -0400 Subject: [PATCH] event-editor/multi-choice: Inherit GtkWidget This is a prerequisite for removing the strong dependence on the child GtkToggleButton widget, removing the platform state override, and adding binding actions in later commits. Inheriting AdwBin was attempted but it didn't work, as AdwBin presumably messes with focusability and activation, making it insufficient for this use case. `hexpand=true` needs to be explicitly set. Part-of: --- src/gui/event-editor/gcal-multi-choice.blp | 5 ++++- src/gui/event-editor/gcal-multi-choice.c | 8 ++++++-- src/gui/event-editor/gcal-multi-choice.h | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/event-editor/gcal-multi-choice.blp b/src/gui/event-editor/gcal-multi-choice.blp index baafa766..e692642f 100644 --- a/src/gui/event-editor/gcal-multi-choice.blp +++ b/src/gui/event-editor/gcal-multi-choice.blp @@ -1,7 +1,10 @@ using Gtk 4.0; -template $GcalMultiChoice: Box { +template $GcalMultiChoice: Widget { accessible-role: spin_button; + receives-default: true; + focusable: true; + hexpand: true; PopoverBin popover_bin { child: Box { diff --git a/src/gui/event-editor/gcal-multi-choice.c b/src/gui/event-editor/gcal-multi-choice.c index a5a91035..b2ad4609 100644 --- a/src/gui/event-editor/gcal-multi-choice.c +++ b/src/gui/event-editor/gcal-multi-choice.c @@ -26,7 +26,7 @@ struct _GcalMultiChoice { - GtkBox parent; + GtkWidget parent; GtkWidget *down_button; GtkWidget *button; @@ -82,7 +82,7 @@ static void gcal_multi_choice_accessible_init (GtkAccessibleInterface *iface); static void gcal_multi_choice_accessible_range_init (GtkAccessibleRangeInterface *iface); -G_DEFINE_FINAL_TYPE_WITH_CODE (GcalMultiChoice, gcal_multi_choice, GTK_TYPE_BOX, +G_DEFINE_FINAL_TYPE_WITH_CODE (GcalMultiChoice, gcal_multi_choice, GTK_TYPE_WIDGET, G_IMPLEMENT_INTERFACE (GTK_TYPE_ACCESSIBLE, gcal_multi_choice_accessible_init) G_IMPLEMENT_INTERFACE (GTK_TYPE_ACCESSIBLE_RANGE, gcal_multi_choice_accessible_range_init)) @@ -335,6 +335,8 @@ gcal_multi_choice_dispose (GObject *object) { GcalMultiChoice *self = GCAL_MULTI_CHOICE (object); + g_clear_pointer ((GtkWidget **) &self->popover_bin, gtk_widget_unparent); + g_clear_pointer (&self->choices, g_free); g_clear_pointer (&self->category, g_free); g_clear_pointer (&self->prev_button_tooltip_text, g_free); @@ -608,6 +610,8 @@ gcal_multi_choice_class_init (GcalMultiChoiceClass *class) gtk_widget_class_bind_template_callback (widget_class, key_pressed_cb); gtk_widget_class_set_css_name (widget_class, "navigator"); + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); } static void diff --git a/src/gui/event-editor/gcal-multi-choice.h b/src/gui/event-editor/gcal-multi-choice.h index e7959fb4..33d172f6 100644 --- a/src/gui/event-editor/gcal-multi-choice.h +++ b/src/gui/event-editor/gcal-multi-choice.h @@ -25,7 +25,7 @@ G_BEGIN_DECLS #define GCAL_TYPE_MULTI_CHOICE (gcal_multi_choice_get_type()) -G_DECLARE_FINAL_TYPE (GcalMultiChoice, gcal_multi_choice, GCAL, MULTI_CHOICE, GtkBox) +G_DECLARE_FINAL_TYPE (GcalMultiChoice, gcal_multi_choice, GCAL, MULTI_CHOICE, GtkWidget) GtkWidget* gcal_multi_choice_new (void);