[evolution] I#1917 - Calendar: Add option to change 'today' background color
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] I#1917 - Calendar: Add option to change 'today' background color
- Date: Thu, 26 May 2022 07:30:21 +0000 (UTC)
commit 18a6e47fe7eaa7210b6edb2117a504a2d0ee882a
Author: Milan Crha <mcrha redhat com>
Date: Thu May 26 09:29:33 2022 +0200
I#1917 - Calendar: Add option to change 'today' background color
Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1917
data/org.gnome.evolution.calendar.gschema.xml.in | 5 ++
src/calendar/gui/e-day-view.c | 76 ++++++++++++++++++++++--
src/calendar/gui/e-day-view.h | 5 ++
src/calendar/gui/e-week-view.c | 69 ++++++++++++++++++++-
src/calendar/gui/e-week-view.h | 5 ++
src/modules/settings/e-settings-calendar-view.c | 10 ++++
6 files changed, 163 insertions(+), 7 deletions(-)
---
diff --git a/data/org.gnome.evolution.calendar.gschema.xml.in
b/data/org.gnome.evolution.calendar.gschema.xml.in
index b4142699b4..01f61f2992 100644
--- a/data/org.gnome.evolution.calendar.gschema.xml.in
+++ b/data/org.gnome.evolution.calendar.gschema.xml.in
@@ -509,6 +509,11 @@
<_summary>Shorten event end time by minutes</_summary>
<_description>By how many minutes to shorted new event end time</_description>
</key>
+ <key name="today-background-color" type="s">
+ <default>''</default>
+ <_summary>Background color for the 'today' day</_summary>
+ <_description>Leave empty to use a yellow color derived from the current theme, otherwise use the
color of form `#RRGGBB`</_description>
+ </key>
<!-- The following keys are deprecated. -->
diff --git a/src/calendar/gui/e-day-view.c b/src/calendar/gui/e-day-view.c
index 7550dec93a..d838a0ba38 100644
--- a/src/calendar/gui/e-day-view.c
+++ b/src/calendar/gui/e-day-view.c
@@ -171,6 +171,8 @@ struct _EDayViewPrivate {
GdkDragContext *drag_context;
+ gchar *today_background_color;
+
gboolean draw_flat_events;
};
@@ -493,6 +495,7 @@ enum {
PROP_MARCUS_BAINS_SHOW_LINE,
PROP_MARCUS_BAINS_DAY_VIEW_COLOR,
PROP_MARCUS_BAINS_TIME_BAR_COLOR,
+ PROP_TODAY_BACKGROUND_COLOR,
PROP_IS_EDITING
};
@@ -922,6 +925,12 @@ day_view_set_property (GObject *object,
E_DAY_VIEW (object),
g_value_get_string (value));
return;
+
+ case PROP_TODAY_BACKGROUND_COLOR:
+ e_day_view_set_today_background_color (
+ E_DAY_VIEW (object),
+ g_value_get_string (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -962,6 +971,13 @@ day_view_get_property (GObject *object,
E_DAY_VIEW (object)));
return;
+ case PROP_TODAY_BACKGROUND_COLOR:
+ g_value_set_string (
+ value,
+ e_day_view_get_today_background_color (
+ E_DAY_VIEW (object)));
+ return;
+
case PROP_IS_EDITING:
g_value_set_boolean (value, e_day_view_is_editing (E_DAY_VIEW (object)));
return;
@@ -1212,11 +1228,9 @@ day_view_dispose (GObject *object)
g_clear_object (&day_view->priv->model);
g_clear_object (&day_view->priv->drag_context);
- g_free (day_view->priv->marcus_bains_day_view_color);
- day_view->priv->marcus_bains_day_view_color = NULL;
-
- g_free (day_view->priv->marcus_bains_time_bar_color);
- day_view->priv->marcus_bains_time_bar_color = NULL;
+ g_clear_pointer (&day_view->priv->marcus_bains_day_view_color, g_free);
+ g_clear_pointer (&day_view->priv->marcus_bains_time_bar_color, g_free);
+ g_clear_pointer (&day_view->priv->today_background_color, g_free);
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_day_view_parent_class)->dispose (object);
@@ -2164,6 +2178,17 @@ e_day_view_class_init (EDayViewClass *class)
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (
+ object_class,
+ PROP_TODAY_BACKGROUND_COLOR,
+ g_param_spec_string (
+ "today-background-color",
+ "Today Background Color",
+ NULL,
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
g_object_class_override_property (
object_class,
PROP_IS_EDITING,
@@ -3047,7 +3072,8 @@ e_day_view_set_colors (EDayView *day_view)
e_rgba_to_color (&base_bg, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND]);
e_rgba_to_color (&dark_bg, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BORDER]);
- day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY] = get_today_background
(day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING]);
+ if (!day_view->priv->today_background_color)
+ day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY] = get_today_background
(day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING]);
bg_bg.red = 0.5;
bg_bg.green = 1.0;
@@ -4085,6 +4111,44 @@ e_day_view_marcus_bains_set_time_bar_color (EDayView *day_view,
g_object_notify (G_OBJECT (day_view), "marcus-bains-time-bar-color");
}
+const gchar *
+e_day_view_get_today_background_color (EDayView *day_view)
+{
+ g_return_val_if_fail (E_IS_DAY_VIEW (day_view), NULL);
+
+ return day_view->priv->today_background_color;
+}
+
+void
+e_day_view_set_today_background_color (EDayView *day_view,
+ const gchar *color)
+{
+ GdkRGBA rgba;
+
+ g_return_if_fail (E_IS_DAY_VIEW (day_view));
+
+ if (g_strcmp0 (color, day_view->priv->today_background_color) == 0)
+ return;
+
+ if (color && gdk_rgba_parse (&rgba, color)) {
+ g_free (day_view->priv->today_background_color);
+ day_view->priv->today_background_color = g_strdup (color);
+ day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY].red = 0xFFFF * rgba.red;
+ day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY].green = 0xFFFF * rgba.green;
+ day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY].blue = 0xFFFF * rgba.blue;
+ } else if (day_view->priv->today_background_color) {
+ g_free (day_view->priv->today_background_color);
+ day_view->priv->today_background_color = NULL;
+ day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY] = get_today_background
(day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING]);
+ } else {
+ return;
+ }
+
+ gtk_widget_queue_draw (day_view->main_canvas);
+
+ g_object_notify (G_OBJECT (day_view), "today-background-color");
+}
+
/* Whether we display event end times in the main canvas. */
gboolean
e_day_view_get_show_event_end_times (EDayView *day_view)
diff --git a/src/calendar/gui/e-day-view.h b/src/calendar/gui/e-day-view.h
index 4bf03099ed..3e30c051b5 100644
--- a/src/calendar/gui/e-day-view.h
+++ b/src/calendar/gui/e-day-view.h
@@ -484,6 +484,11 @@ const gchar * e_day_view_marcus_bains_get_time_bar_color
void e_day_view_marcus_bains_set_time_bar_color
(EDayView *day_view,
const gchar *time_bar_color);
+const gchar * e_day_view_get_today_background_color
+ (EDayView *day_view);
+void e_day_view_set_today_background_color
+ (EDayView *day_view,
+ const gchar *color);
/* Whether we display event end times in the main canvas. */
gboolean e_day_view_get_show_event_end_times
diff --git a/src/calendar/gui/e-week-view.c b/src/calendar/gui/e-week-view.c
index ce6840866e..8398941ac7 100644
--- a/src/calendar/gui/e-week-view.c
+++ b/src/calendar/gui/e-week-view.c
@@ -101,6 +101,8 @@ struct _EWeekViewPrivate {
gboolean show_icons_month_view;
gboolean draw_flat_events;
gboolean days_left_to_right;
+
+ gchar *today_background_color;
};
typedef struct {
@@ -202,6 +204,7 @@ enum {
PROP_DAYS_LEFT_TO_RIGHT,
PROP_SHOW_EVENT_END_TIMES,
PROP_SHOW_ICONS_MONTH_VIEW,
+ PROP_TODAY_BACKGROUND_COLOR,
PROP_IS_EDITING
};
@@ -800,6 +803,12 @@ week_view_set_property (GObject *object,
E_WEEK_VIEW (object),
g_value_get_boolean (value));
return;
+
+ case PROP_TODAY_BACKGROUND_COLOR:
+ e_week_view_set_today_background_color (
+ E_WEEK_VIEW (object),
+ g_value_get_string (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -847,6 +856,13 @@ week_view_get_property (GObject *object,
E_WEEK_VIEW (object)));
return;
+ case PROP_TODAY_BACKGROUND_COLOR:
+ g_value_set_string (
+ value,
+ e_week_view_get_today_background_color (
+ E_WEEK_VIEW (object)));
+ return;
+
case PROP_IS_EDITING:
g_value_set_boolean (value, e_week_view_is_editing (E_WEEK_VIEW (object)));
return;
@@ -878,6 +894,7 @@ week_view_dispose (GObject *object)
}
g_clear_pointer (&week_view->small_font_desc, pango_font_description_free);
+ g_clear_pointer (&week_view->priv->today_background_color, g_free);
g_clear_object (&week_view->normal_cursor);
g_clear_object (&week_view->move_cursor);
g_clear_object (&week_view->resize_width_cursor);
@@ -1761,6 +1778,17 @@ e_week_view_class_init (EWeekViewClass *class)
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (
+ object_class,
+ PROP_TODAY_BACKGROUND_COLOR,
+ g_param_spec_string (
+ "today-background-color",
+ "Today Background Color",
+ NULL,
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS));
+
g_object_class_override_property (
object_class,
PROP_IS_EDITING,
@@ -2004,7 +2032,8 @@ e_week_view_set_colors (EWeekView *week_view)
e_rgba_to_color (&selected_fg, &week_view->colors[E_WEEK_VIEW_COLOR_DATES_SELECTED]);
e_rgba_to_color (&selected_bg, &week_view->colors[E_WEEK_VIEW_COLOR_TODAY]);
- week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND] = get_today_background
(week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
+ if (!week_view->priv->today_background_color)
+ week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND] = get_today_background
(week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
week_view->colors[E_WEEK_VIEW_COLOR_MONTH_NONWORKING_DAY] = color_inc
(week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS], -0x0A0A);
}
@@ -5310,3 +5339,41 @@ e_week_view_is_editing (EWeekView *week_view)
return week_view->editing_event_num != -1;
}
+
+const gchar *
+e_week_view_get_today_background_color (EWeekView *week_view)
+{
+ g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), NULL);
+
+ return week_view->priv->today_background_color;
+}
+
+void
+e_week_view_set_today_background_color (EWeekView *week_view,
+ const gchar *color)
+{
+ GdkRGBA rgba;
+
+ g_return_if_fail (E_IS_WEEK_VIEW (week_view));
+
+ if (g_strcmp0 (color, week_view->priv->today_background_color) == 0)
+ return;
+
+ if (color && gdk_rgba_parse (&rgba, color)) {
+ g_free (week_view->priv->today_background_color);
+ week_view->priv->today_background_color = g_strdup (color);
+ week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND].red = 0xFFFF * rgba.red;
+ week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND].green = 0xFFFF * rgba.green;
+ week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND].blue = 0xFFFF * rgba.blue;
+ } else if (week_view->priv->today_background_color) {
+ g_free (week_view->priv->today_background_color);
+ week_view->priv->today_background_color = NULL;
+ week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND] = get_today_background
(week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
+ } else {
+ return;
+ }
+
+ gtk_widget_queue_draw (week_view->main_canvas);
+
+ g_object_notify (G_OBJECT (week_view), "today-background-color");
+}
diff --git a/src/calendar/gui/e-week-view.h b/src/calendar/gui/e-week-view.h
index 1276c765c1..f1a3a071b3 100644
--- a/src/calendar/gui/e-week-view.h
+++ b/src/calendar/gui/e-week-view.h
@@ -456,6 +456,11 @@ void e_week_view_scroll_a_step (EWeekView *week_view,
ECalViewMoveDirection direction);
gboolean e_week_view_is_editing (EWeekView *week_view);
+const gchar * e_week_view_get_today_background_color
+ (EWeekView *week_view);
+void e_week_view_set_today_background_color
+ (EWeekView *week_view,
+ const gchar *color);
G_END_DECLS
diff --git a/src/modules/settings/e-settings-calendar-view.c b/src/modules/settings/e-settings-calendar-view.c
index 614ed27d10..7bf080ca31 100644
--- a/src/modules/settings/e-settings-calendar-view.c
+++ b/src/modules/settings/e-settings-calendar-view.c
@@ -85,6 +85,11 @@ settings_calendar_view_constructed (GObject *object)
settings, "marcus-bains-color-timebar",
extensible, "marcus-bains-time-bar-color",
G_SETTINGS_BIND_GET);
+
+ g_settings_bind (
+ settings, "today-background-color",
+ extensible, "today-background-color",
+ G_SETTINGS_BIND_GET);
}
/*** EWeekView ***/
@@ -115,6 +120,11 @@ settings_calendar_view_constructed (GObject *object)
settings, "show-icons-month-view",
extensible, "show-icons-month-view",
G_SETTINGS_BIND_GET);
+
+ g_settings_bind (
+ settings, "today-background-color",
+ extensible, "today-background-color",
+ G_SETTINGS_BIND_GET);
}
g_object_unref (settings);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]