From f9c4501d6ca739c44af0fa9e6cd3a632af51746c Mon Sep 17 00:00:00 2001 From: Adrien Plazas Date: Wed, 6 Apr 2022 12:26:33 +0200 Subject: [PATCH] date-chooser-day: Make it a button This stops reimplementing a flat button and use GtkButton directly instead. --- src/gui/event-editor/gcal-date-chooser-day.c | 70 +++++--------------- src/gui/event-editor/gcal-date-chooser-day.h | 5 +- src/gui/event-editor/gcal-date-chooser.c | 2 +- src/theme/Adwaita.css | 48 ++++---------- 4 files changed, 35 insertions(+), 90 deletions(-) diff --git a/src/gui/event-editor/gcal-date-chooser-day.c b/src/gui/event-editor/gcal-date-chooser-day.c index aab5d7d5..e4f4dbb4 100644 --- a/src/gui/event-editor/gcal-date-chooser-day.c +++ b/src/gui/event-editor/gcal-date-chooser-day.c @@ -1,6 +1,7 @@ /* GTK - The GIMP Toolkit * * Copyright (C) 2015 Red Hat, Inc. + * Copyright (C) 2022 Purism SPC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,33 +26,15 @@ #include #include -enum { - SELECTED, - LAST_DAY_SIGNAL -}; - -static guint signals[LAST_DAY_SIGNAL] = { 0, }; - struct _GcalDateChooserDay { - AdwBin parent; + GtkButton parent; GtkWidget *label; GDateTime *date; }; -G_DEFINE_TYPE (GcalDateChooserDay, gcal_date_chooser_day, ADW_TYPE_BIN) - -static void -day_pressed (GtkGestureClick *click_gesture, - gint n_press, - gdouble x, - gdouble y, - GcalDateChooserDay *self) -{ - if (n_press == 1) - g_signal_emit (self, signals[SELECTED], 0); -} +G_DEFINE_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GTK_TYPE_BUTTON) static void gcal_date_chooser_day_dispose (GObject *object) @@ -66,40 +49,23 @@ gcal_date_chooser_day_dispose (GObject *object) static void gcal_date_chooser_day_class_init (GcalDateChooserDayClass *class) { - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->dispose = gcal_date_chooser_day_dispose; - - signals[SELECTED] = g_signal_new ("selected", - GCAL_TYPE_DATE_CHOOSER_DAY, - G_SIGNAL_RUN_FIRST, - 0, - NULL, - NULL, - NULL, - G_TYPE_NONE, 0); - - gtk_widget_class_set_css_name (widget_class, "day"); - - gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_space, 0, "selected", NULL); - gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_Return, 0, "selected", NULL); - gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_ISO_Enter, 0, "selected", NULL); - gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_KP_Enter, 0, "selected", NULL); - gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_KP_Space, 0, "selected", NULL); } static void gcal_date_chooser_day_init (GcalDateChooserDay *self) { - GtkGesture *click_gesture; GtkWidget *widget = GTK_WIDGET (self); gtk_widget_set_halign (widget, GTK_ALIGN_CENTER); gtk_widget_set_valign (widget, GTK_ALIGN_CENTER); gtk_widget_set_can_focus (widget, TRUE); + gtk_widget_add_css_class (widget, "circular"); gtk_widget_add_css_class (widget, "day"); + gtk_widget_add_css_class (widget, "flat"); self->label = gtk_label_new (""); gtk_widget_set_halign (self->label, GTK_ALIGN_CENTER); @@ -107,17 +73,7 @@ gcal_date_chooser_day_init (GcalDateChooserDay *self) gtk_widget_set_hexpand (self->label, TRUE); gtk_widget_set_vexpand (self->label, TRUE); - adw_bin_set_child (ADW_BIN (self), self->label); - - click_gesture = gtk_gesture_click_new (); - gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (click_gesture), 0); - gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (click_gesture)); - - g_signal_connect_object (click_gesture, - "pressed", - G_CALLBACK (day_pressed), - self, - 0); + gtk_button_set_child (GTK_BUTTON (self), self->label); } GtkWidget* @@ -160,8 +116,16 @@ void gcal_date_chooser_day_set_selected (GcalDateChooserDay *self, gboolean selected) { - if (selected) - gtk_widget_set_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED, FALSE); + GtkWidget *widget = GTK_WIDGET (self); + + if (G_UNLIKELY (selected)) + { + gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE); + gtk_widget_remove_css_class (widget, "flat"); + } else - gtk_widget_unset_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED); + { + gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_SELECTED); + gtk_widget_add_css_class (widget, "flat"); + } } diff --git a/src/gui/event-editor/gcal-date-chooser-day.h b/src/gui/event-editor/gcal-date-chooser-day.h index 109f1211..e4c11bb1 100644 --- a/src/gui/event-editor/gcal-date-chooser-day.h +++ b/src/gui/event-editor/gcal-date-chooser-day.h @@ -1,5 +1,6 @@ /* GTK - The GIMP Toolkit * Copyright (C) 2015 Red Hat, Inc. + * Copyright (C) 2022 Purism SPC * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,12 +18,12 @@ #pragma once -#include +#include G_BEGIN_DECLS #define GCAL_TYPE_DATE_CHOOSER_DAY (gcal_date_chooser_day_get_type()) -G_DECLARE_FINAL_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GCAL, DATE_CHOOSER_DAY, AdwBin) +G_DECLARE_FINAL_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GCAL, DATE_CHOOSER_DAY, GtkButton) GtkWidget* gcal_date_chooser_day_new (void); diff --git a/src/gui/event-editor/gcal-date-chooser.c b/src/gui/event-editor/gcal-date-chooser.c index 89a0504a..c43181f9 100644 --- a/src/gui/event-editor/gcal-date-chooser.c +++ b/src/gui/event-editor/gcal-date-chooser.c @@ -579,7 +579,7 @@ gcal_date_chooser_init (GcalDateChooser *self) self->days[row][col] = gcal_date_chooser_day_new (); g_signal_connect_object (self->days[row][col], - "selected", + "clicked", G_CALLBACK (day_selected_cb), self, 0); diff --git a/src/theme/Adwaita.css b/src/theme/Adwaita.css index 18401020..15df3433 100644 --- a/src/theme/Adwaita.css +++ b/src/theme/Adwaita.css @@ -182,50 +182,30 @@ datechooser .weekday:backdrop { } /* days */ -datechooser day { - transition-property: background-color; - transition-duration: 200ms; +datechooser button.day { + font-size: 10pt; + font-weight: normal; + margin: 3px; + min-height: 28px; + min-width: 28px; + transition: none; } -datechooser day label { - transition-property: color; - transition-duration: 200ms; +datechooser button.day:selected { + background-color: @accent_bg_color; + color: @accent_fg_color; + font-weight: bold; } -datechooser day { - min-height: 32px; - min-width: 32px; - border-radius: 50%; -} - -datechooser day.other-month:not(:hover), -datechooser day.other-month:backdrop { +datechooser button.day.other-month:not(:hover), +datechooser button.day.other-month:backdrop { color: alpha(currentColor, 0.1); } -/* avoid the theme interfering with label colors */ -datechooser day:selected label, -datechooser day.other-month label:hover, -datechooser day.other-month label:backdrop { - color: currentColor; -} - -/* hovered days style */ -datechooser day:hover:not(:backdrop) { - background-color: alpha(currentColor, 0.1); -} - -datechooser day.other-month:hover:not(:backdrop) { +datechooser button.day.other-month:hover:not(:backdrop) { color: @insensitive_fg_color; } -datechooser day:selected, -datechooser day:selected:hover { - color: @accent_fg_color; - background-color: @accent_bg_color; - font-weight: bold; -} - label.month-name { font-size: 16pt; font-weight: bold;