diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2023-03-05 11:41:35 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2023-03-05 11:41:35 -0300 |
commit | d6a216d0fa21d6111391c2969df6176d1ec7f4d8 (patch) | |
tree | 11eadbf6322424368220d8278810a62c294bb634 | |
parent | 0322bcf54cf1fc37ff74b87fd36e282dc1cf7863 (diff) | |
download | gnome-calendar-d6a216d0fa21d6111391c2969df6176d1ec7f4d8.tar.gz |
gui: Propagate context to GcalSearchButton
The people who introduced this code were not careful enough to
make sure the code they removed from GcalWindow was added back
in GcalToolbarEnd.
They also simply commented out some code instead of properly
reimplementing that.
I regret having trusted their code :(
Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/880
-rw-r--r-- | src/gui/gcal-toolbar-end.c | 97 | ||||
-rw-r--r-- | src/gui/gcal-toolbar-end.ui | 2 | ||||
-rw-r--r-- | src/gui/gcal-window.c | 3 | ||||
-rw-r--r-- | src/gui/gcal-window.ui | 2 |
4 files changed, 97 insertions, 7 deletions
diff --git a/src/gui/gcal-toolbar-end.c b/src/gui/gcal-toolbar-end.c index 99fe39a2..5461a090 100644 --- a/src/gui/gcal-toolbar-end.c +++ b/src/gui/gcal-toolbar-end.c @@ -18,24 +18,111 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -#include "gcal-toolbar-end.h" - +#include "gcal-context.h" #include "gcal-search-button.h" +#include "gcal-toolbar-end.h" struct _GcalToolbarEnd { - AdwBin parent_instance; + AdwBin parent_instance; + + GcalSearchButton *search_button; + + GcalContext *context; }; G_DEFINE_FINAL_TYPE (GcalToolbarEnd, gcal_toolbar_end, ADW_TYPE_BIN) +enum +{ + PROP_0, + PROP_CONTEXT, + N_PROPS +}; + +static GParamSpec *properties [N_PROPS]; + + +/* + * GObject overrides + */ + +static void +gcal_toolbar_end_finalize (GObject *object) +{ + GcalToolbarEnd *self = (GcalToolbarEnd *)object; + + g_clear_object (&self->context); + + G_OBJECT_CLASS (gcal_toolbar_end_parent_class)->finalize (object); +} + +static void +gcal_toolbar_end_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GcalToolbarEnd *self = GCAL_TOOLBAR_END (object); + + switch (prop_id) + { + case PROP_CONTEXT: + g_value_set_object (value, self->context); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +static void +gcal_toolbar_end_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GcalToolbarEnd *self = GCAL_TOOLBAR_END (object); + + switch (prop_id) + { + case PROP_CONTEXT: + g_assert (self->context == NULL); + self->context = g_value_dup_object (value); + g_object_bind_property (self, "context", self->search_button, "context", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + static void gcal_toolbar_end_class_init (GcalToolbarEndClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - gtk_widget_class_set_template_from_resource (widget_class, - "/org/gnome/calendar/ui/gui/gcal-toolbar-end.ui"); + object_class->finalize = gcal_toolbar_end_finalize; + object_class->get_property = gcal_toolbar_end_get_property; + object_class->set_property = gcal_toolbar_end_set_property; + + /** + * GcalToolbarEnd::context: + * + * The #GcalContext of the application. + */ + properties[PROP_CONTEXT] = g_param_spec_object ("context", + "Context of the application", + "The context of the application", + GCAL_TYPE_CONTEXT, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, N_PROPS, properties); + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/ui/gui/gcal-toolbar-end.ui"); + + gtk_widget_class_bind_template_child (widget_class, GcalToolbarEnd, search_button); } static void diff --git a/src/gui/gcal-toolbar-end.ui b/src/gui/gcal-toolbar-end.ui index a94caf1d..8389bba6 100644 --- a/src/gui/gcal-toolbar-end.ui +++ b/src/gui/gcal-toolbar-end.ui @@ -5,7 +5,7 @@ <object class="GtkBox"> <property name="spacing">6</property> <child> - <object class="GcalSearchButton"> + <object class="GcalSearchButton" id="search_button"> <property name="tooltip_text" translatable="yes" context="tooltip">Search for events</property> <binding name="context"> <lookup type="GcalWindow" name="context"> diff --git a/src/gui/gcal-window.c b/src/gui/gcal-window.c index baf10c18..f80578fd 100644 --- a/src/gui/gcal-window.c +++ b/src/gui/gcal-window.c @@ -106,6 +106,7 @@ struct _GcalWindow GtkWidget *agenda_view; GtkWidget *date_chooser; GtkWidget *action_bar; + GcalToolbarEnd *toolbar_end; /* header_bar widets */ GtkWidget *calendars_button; @@ -855,6 +856,7 @@ gcal_window_constructed (GObject *object) g_object_bind_property (self, "context", self->date_chooser, "context", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); g_object_bind_property (self, "context", self->event_editor, "context", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); g_object_bind_property (self, "context", self->quick_add_popover, "context", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); + g_object_bind_property (self, "context", self->toolbar_end, "context", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); /* CSS */ load_css_providers (self); @@ -1044,6 +1046,7 @@ gcal_window_class_init (GcalWindowClass *klass) gtk_widget_class_bind_template_child (widget_class, GcalWindow, quick_add_popover); gtk_widget_class_bind_template_child (widget_class, GcalWindow, calendar_management_dialog); gtk_widget_class_bind_template_child (widget_class, GcalWindow, overlay); + gtk_widget_class_bind_template_child (widget_class, GcalWindow, toolbar_end); gtk_widget_class_bind_template_child (widget_class, GcalWindow, views_stack); gtk_widget_class_bind_template_child (widget_class, GcalWindow, views_switcher); gtk_widget_class_bind_template_child (widget_class, GcalWindow, weather_settings); diff --git a/src/gui/gcal-window.ui b/src/gui/gcal-window.ui index 91bc7c17..5d2748bf 100644 --- a/src/gui/gcal-window.ui +++ b/src/gui/gcal-window.ui @@ -200,7 +200,7 @@ </object> </child> <child type="end"> - <object class="GcalToolbarEnd"/> + <object class="GcalToolbarEnd" id="toolbar_end" /> </child> </object> </child> |