Skip to content
Commits on Source (10)
......@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1)
cmake_policy(VERSION 3.1)
project(evolution
VERSION 3.44.3
VERSION 3.44.4
LANGUAGES C)
set(PROJECT_BUGREPORT "https://gitlab.gnome.org/GNOME/evolution/issues/")
set(PROJECT_URL "http://wiki.gnome.org/Apps/Evolution/")
......
Evolution 3.44.4 2022-08-05
---------------------------
Bug Fixes:
I#1961 - Missing divider lines and paddings under GNOME
I#1966 - EColorSchemeWatcher: Verify chosen dark variant theme name exists
I#1968 - ECompEditor: Reminders list is too small
I#1982 - Calendar: The default reminder not always added
Miscellaneous:
Change when symbolic icons are forced in the application
Evolution 3.44.3 2022-07-01
---------------------------
 
......
evolution (3.44.3-0ubuntu1) jammy; urgency=medium
evolution (3.44.4-0ubuntu1) jammy; urgency=medium
* New upstream release (LP: #1976623)
* Bump e-d-s dependencies and build-dependencies to 3.44.3
-- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Thu, 02 Jun 2022 13:09:57 -0300
-- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Wed, 10 Aug 2022 12:12:31 -0400
evolution (3.44.2-0ubuntu2) jammy; urgency=medium
......
......@@ -327,36 +327,17 @@ cal_comp_util_ref_default_object (ECalClient *client,
return comp;
}
/**
* cal_comp_event_new_with_defaults_sync:
*
* Creates a new VEVENT component and adds any default alarms to it as set in
* the program's configuration values, but only if not the all_day event.
*
* Return value: A newly-created calendar component.
**/
ECalComponent *
cal_comp_event_new_with_defaults_sync (ECalClient *client,
gboolean all_day,
gboolean use_default_reminder,
gint default_reminder_interval,
EDurationType default_reminder_units,
GCancellable *cancellable,
GError **error)
void
cal_comp_util_add_reminder (ECalComponent *comp,
gint reminder_interval,
EDurationType reminder_units)
{
ECalComponent *comp;
ECalComponentAlarm *alarm;
ICalProperty *prop;
ICalDuration *duration;
ECalComponentAlarmTrigger *trigger;
comp = cal_comp_util_ref_default_object (client, I_CAL_VEVENT_COMPONENT, E_CAL_COMPONENT_EVENT, cancellable, error);
if (!comp)
return NULL;
if (all_day || !use_default_reminder)
return comp;
g_return_if_fail (E_IS_CAL_COMPONENT (comp));
alarm = e_cal_component_alarm_new ();
......@@ -373,21 +354,21 @@ cal_comp_event_new_with_defaults_sync (ECalClient *client,
duration = i_cal_duration_new_null_duration ();
i_cal_duration_set_is_neg (duration, TRUE);
switch (default_reminder_units) {
switch (reminder_units) {
case E_DURATION_MINUTES:
i_cal_duration_set_minutes (duration, default_reminder_interval);
i_cal_duration_set_minutes (duration, reminder_interval);
break;
case E_DURATION_HOURS:
i_cal_duration_set_hours (duration, default_reminder_interval);
i_cal_duration_set_hours (duration, reminder_interval);
break;
case E_DURATION_DAYS:
i_cal_duration_set_days (duration, default_reminder_interval);
i_cal_duration_set_days (duration, reminder_interval);
break;
default:
g_warning ("wrong units %d\n", default_reminder_units);
g_warning ("wrong units %d\n", reminder_units);
}
trigger = e_cal_component_alarm_trigger_new_relative (E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START, duration);
......@@ -397,6 +378,36 @@ cal_comp_event_new_with_defaults_sync (ECalClient *client,
e_cal_component_add_alarm (comp, alarm);
e_cal_component_alarm_free (alarm);
}
/**
* cal_comp_event_new_with_defaults_sync:
*
* Creates a new VEVENT component and adds any default alarms to it as set in
* the program's configuration values, but only if not the all_day event.
*
* Return value: A newly-created calendar component.
**/
ECalComponent *
cal_comp_event_new_with_defaults_sync (ECalClient *client,
gboolean all_day,
gboolean use_default_reminder,
gint default_reminder_interval,
EDurationType default_reminder_units,
GCancellable *cancellable,
GError **error)
{
ECalComponent *comp;
comp = cal_comp_util_ref_default_object (client, I_CAL_VEVENT_COMPONENT, E_CAL_COMPONENT_EVENT, cancellable, error);
if (!comp)
return NULL;
if (all_day || !use_default_reminder)
return comp;
cal_comp_util_add_reminder (comp, default_reminder_interval, default_reminder_units);
return comp;
}
......
......@@ -175,5 +175,7 @@ void cal_comp_util_maybe_ensure_allday_timezone_properties
void cal_comp_util_format_itt (ICalTime *itt,
gchar *buffer,
gint buffer_size);
void cal_comp_util_add_reminder (ECalComponent *comp,
gint reminder_interval,
EDurationType reminder_units);
#endif
......@@ -2231,6 +2231,7 @@ ecep_reminders_constructed (GObject *object)
"halign", GTK_ALIGN_FILL,
"vexpand", FALSE,
"valign", GTK_ALIGN_FILL,
"height-request", 100,
"margin-start", 12,
"margin-bottom", 6,
"hscrollbar-policy", GTK_POLICY_AUTOMATIC,
......@@ -2541,6 +2542,7 @@ ecep_reminders_constructed (GObject *object)
"halign", GTK_ALIGN_FILL,
"vexpand", TRUE,
"valign", GTK_ALIGN_FILL,
"height-request", 100,
"hscrollbar-policy", GTK_POLICY_AUTOMATIC,
"vscrollbar-policy", GTK_POLICY_AUTOMATIC,
"shadow-type", GTK_SHADOW_IN,
......
......@@ -215,6 +215,13 @@ e_color_scheme_watcher_sync_theme (EColorSchemeWatcher *self)
if (self->color_scheme == E_COLOR_SCHEME_PREFER_DARK &&
e_color_scheme_watcher_check_theme_exists (theme_name, "dark")) {
new_theme_name = g_strconcat (theme_name, "-dark", NULL);
/* Verify whether the newly constructed name can be used; otherwise the theme
supports the dark variant with the original name. */
if (!e_color_scheme_watcher_check_theme_exists (new_theme_name, NULL)) {
g_free (new_theme_name);
new_theme_name = theme_name;
theme_name = NULL;
}
} else if (suffix_cut && e_color_scheme_watcher_check_theme_exists (theme_name, NULL)) {
new_theme_name = theme_name;
theme_name = NULL;
......
......@@ -24,6 +24,7 @@
#include "e-util/e-util.h"
#include "composer/e-msg-composer.h"
#include "composer/e-composer-from-header.h"
#include "calendar/gui/comp-util.h"
#include "calendar/gui/e-comp-editor.h"
#include "calendar/gui/e-comp-editor-page-attachments.h"
......@@ -71,6 +72,7 @@ composer_to_meeting_component (EMsgComposer *composer,
EComposerHeaderTable *header_table;
EDestination **destinations_array[3];
ESource *source;
GSettings *settings;
gchar *alias_name = NULL, *alias_address = NULL, *uid, *text;
GSList *attendees = NULL;
const gchar *subject;
......@@ -224,6 +226,16 @@ composer_to_meeting_component (EMsgComposer *composer,
g_slist_free_full (descr_list, e_cal_component_text_free);
}
settings = e_util_ref_settings ("org.gnome.evolution.calendar");
if (g_settings_get_boolean (settings, "use-default-reminder")) {
cal_comp_util_add_reminder (comp,
g_settings_get_int (settings, "default-reminder-interval"),
g_settings_get_enum (settings, "default-reminder-units"));
}
g_clear_object (&settings);
return comp;
}
......
......@@ -92,11 +92,6 @@ toolbar {\
border-top: 1px solid @borders;\
}\
";
static const char *css_icons =
"* {\
-gtk-icon-style:symbolic;\
}\
";
static void
shell_window_menubar_update_new_menu (EShellWindow *shell_window)
......@@ -1163,10 +1158,7 @@ e_shell_window_init (EShellWindow *shell_window)
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
GTK_STYLE_PROVIDER (css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
/* If running on GNOME, force symbolic icons */
if (e_util_is_running_gnome ())
gtk_css_provider_load_from_data (css_provider, css_icons, -1, NULL);
g_clear_object (&css_provider);
g_signal_connect (shell_window, "delete-event",
G_CALLBACK (shell_window_delete_event_cb), NULL);
......
......@@ -103,6 +103,100 @@ static gchar **remaining_args;
void e_convert_local_mail (EShell *shell);
void e_migrate_base_dirs (EShell *shell);
static void
e_setup_theme_icons_theme_changed_cb (GtkSettings *settings)
{
GtkCssProvider *symbolic_icons_css_provider;
GtkIconTheme *icon_theme;
gboolean use_symbolic_icons = FALSE;
gboolean using_symbolic_icons;
gchar **paths = NULL;
gchar *icon_theme_name = NULL;
guint n_symbolic = 0, n_non_symbolic = 0;
guint ii;
if (!settings)
return;
g_object_get (settings,
"gtk-icon-theme-name", &icon_theme_name,
NULL);
icon_theme = gtk_icon_theme_get_default ();
gtk_icon_theme_get_search_path (icon_theme, &paths, NULL);
for (ii = 0; paths && paths[ii]; ii++) {
GDir *dir;
gchar *dirname;
dirname = g_build_filename (paths[ii], icon_theme_name, "16x16", "actions", NULL);
dir = g_dir_open (dirname, 0, NULL);
if (dir) {
const gchar *filename;
for (filename = g_dir_read_name (dir);
filename;
filename = g_dir_read_name (dir)) {
/* pick few common action icons and check whether they are
only symbolic in the current theme */
if (g_str_has_prefix (filename, "appointment-new") ||
g_str_has_prefix (filename, "edit-cut") ||
g_str_has_prefix (filename, "edit-copy")) {
if (strstr (filename, "-symbolic.") ||
strstr (filename, ".symbolic.")) {
n_symbolic++;
} else {
n_non_symbolic++;
}
}
}
g_dir_close (dir);
}
g_free (dirname);
}
g_strfreev (paths);
g_free (icon_theme_name);
use_symbolic_icons = !n_non_symbolic && n_symbolic > 0;
/* using the same key on both objects, to save one quark */
#define KEY_NAME "e-symbolic-icons-css-provider"
symbolic_icons_css_provider = g_object_get_data (G_OBJECT (icon_theme), KEY_NAME);
using_symbolic_icons = symbolic_icons_css_provider && GINT_TO_POINTER (
g_object_get_data (G_OBJECT (symbolic_icons_css_provider), KEY_NAME)) != 0;
if (use_symbolic_icons && !using_symbolic_icons) {
if (!symbolic_icons_css_provider) {
symbolic_icons_css_provider = gtk_css_provider_new ();
g_object_set_data_full (G_OBJECT (icon_theme), KEY_NAME, symbolic_icons_css_provider, g_object_unref);
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
GTK_STYLE_PROVIDER (symbolic_icons_css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
gtk_css_provider_load_from_data (symbolic_icons_css_provider, "* { -gtk-icon-style:symbolic; }", -1, NULL);
g_object_set_data (G_OBJECT (symbolic_icons_css_provider), KEY_NAME, GINT_TO_POINTER (1));
} else if (!use_symbolic_icons && using_symbolic_icons) {
gtk_css_provider_load_from_data (symbolic_icons_css_provider, "", -1, NULL);
g_object_set_data (G_OBJECT (symbolic_icons_css_provider), KEY_NAME, GINT_TO_POINTER (0));
}
#undef KEY_NAME
}
static void
e_setup_theme_icons (void)
{
GtkSettings *settings = gtk_settings_get_default ();
e_signal_connect_notify (settings, "notify::gtk-icon-theme-name",
G_CALLBACK (e_setup_theme_icons_theme_changed_cb), NULL);
e_setup_theme_icons_theme_changed_cb (settings);
}
static void
categories_icon_theme_hack (void)
{
......@@ -680,6 +774,8 @@ main (gint argc,
* as both shell backends and certain plugins hook into this. */
e_shell_migrate_attempt (shell);
e_setup_theme_icons ();
e_shell_event (shell, "ready-to-start", NULL);
g_idle_add ((GSourceFunc) idle_cb, remaining_args);
......