diff options
author | Timm Bäder <mail@baedert.org> | 2020-02-13 18:40:20 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2020-02-15 17:18:26 +0100 |
commit | a1d47ec59f738d576622d249b5cadcf69e5ebf00 (patch) | |
tree | bbd3dd36e5ccf8fe94f3466b4879bbc0d0fae7d7 /gtk/gtkcalendar.c | |
parent | 43a9f9bd028dfd17c5c5d9c5b3dd77f6fbf3d08b (diff) | |
download | gtk+-a1d47ec59f738d576622d249b5cadcf69e5ebf00.tar.gz |
calendar: Add style class to today's label
Add the .today style class to the label indicating the current day.
Fixes #230
Diffstat (limited to 'gtk/gtkcalendar.c')
-rw-r--r-- | gtk/gtkcalendar.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index 0b13b5fe64..5525b4263d 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -60,7 +60,7 @@ * │ ├── label.year * │ ╰── button * ╰── grid - * ╰── label[.day-name][.week-number][.day-number][.other-month] + * ╰── label[.day-name][.week-number][.day-number][.other-month][.today] * ]| * * GtkCalendar has a main node with name calendar. It contains a subnode called header @@ -71,6 +71,7 @@ * css class). * * Day labels that belong to the previous or next month get the .other-month style class. + * The label of the current day get the .today style class. * * Marked day labels get the :selected state assigned. */ @@ -1581,6 +1582,7 @@ gtk_calendar_select_day (GtkCalendar *self, GDateTime *date) { GtkCalendarPrivate *priv = gtk_calendar_get_instance_private (self); + GDateTime *today; int new_day, new_month, new_year; gboolean day_changed, month_changed, year_changed; char buffer[255]; @@ -1589,6 +1591,7 @@ gtk_calendar_select_day (GtkCalendar *self, struct tm *tm; int i; int x, y; + int today_day; g_return_if_fail (GTK_IS_CALENDAR (self)); g_return_if_fail (date != NULL); @@ -1628,6 +1631,16 @@ gtk_calendar_select_day (GtkCalendar *self, gtk_stack_set_visible_child_name (GTK_STACK (priv->month_name_stack), default_monthname[new_month - 1]); + today = g_date_time_new_now_local (); + + if (g_date_time_get_year (priv->date) == g_date_time_get_year (today) && + g_date_time_get_month (priv->date) == g_date_time_get_month (today)) + today_day = g_date_time_get_day_of_month (today); + else + today_day = -1; + + g_date_time_unref (today); + /* Update day labels */ for (y = 0; y < 6; y ++) for (x = 0; x < 7; x ++) @@ -1664,6 +1677,11 @@ gtk_calendar_select_day (GtkCalendar *self, gtk_widget_set_state_flags (label, GTK_STATE_FLAG_SELECTED, FALSE); else gtk_widget_unset_state_flags (label, GTK_STATE_FLAG_SELECTED); + + if (day == today_day) + gtk_widget_add_css_class (label, "today"); + else + gtk_widget_remove_css_class (label, "today"); } /* Update week number labels. |