From abde4f40c257db149be708fb66c805cc58f80a13 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Tue, 9 Mar 2021 14:51:54 -0600 Subject: [PATCH 1/2] info-overview: add build option to control distributor logo Currently, we display a 256x256 version of the OS icon from /etc/os-release. This is too big for my taste, and it's also not sufficient for distros that want to display a logo that is not an icon. For instance, because we no longer display the operating system name immediately beneath the logo, it may be desirable to use a logo variant that includes text. This patch adds a meson build option that distributions can use to override the logo. Because the logo might include text, distributions may want to vary the logo used in dark mode. A subsequent commit will add a second option for this. --- meson.build | 6 ++++++ meson_options.txt | 1 + panels/info-overview/cc-info-overview-panel.c | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/meson.build b/meson.build index 42a9536b4..94c8abfbb 100644 --- a/meson.build +++ b/meson.build @@ -50,6 +50,12 @@ foreach define: set_defines config_h.set_quoted(define[0], define[1]) endforeach +distributor_logo = get_option('distributor_logo') +if (distributor_logo != '') + config_h.set_quoted('DISTRIBUTOR_LOGO', distributor_logo, + description: 'Define to absolute path of distributor logo') +endif + # meson does not support octal values, so it must be handled as a # string. See: https://github.com/mesonbuild/meson/issues/2047 config_h.set('USER_DIR_MODE', '0700', diff --git a/meson_options.txt b/meson_options.txt index 1b7b54810..93e551373 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -8,3 +8,4 @@ option('tracing', type: 'boolean', value: false, description: 'add extra debuggi option('wayland', type: 'boolean', value: true, description: 'build with Wayland support') option('profile', type: 'combo', choices: ['default','development'], value: 'default') option('malcontent', type: 'boolean', value: false, description: 'build with malcontent support') +option('distributor_logo', type: 'string', description: 'absolute path to distributor logo for the About panel') diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c index 9ee9d2910..ce1493f7c 100644 --- a/panels/info-overview/cc-info-overview-panel.c +++ b/panels/info-overview/cc-info-overview-panel.c @@ -901,6 +901,9 @@ get_asset_suffix (CcInfoOverviewPanel *panel) static void setup_os_logo (CcInfoOverviewPanel *panel) { +#ifdef DISTRIBUTOR_LOGO + gtk_image_set_from_file (panel->os_logo, DISTRIBUTOR_LOGO); +#else g_autofree char *logo_name = g_get_os_info ("LOGO"); g_autofree char *logo_name_with_variant = NULL; @@ -910,6 +913,7 @@ setup_os_logo (CcInfoOverviewPanel *panel) logo_name_with_variant = g_strdup_printf ("%s-text%s", logo_name, get_asset_suffix (panel)); gtk_image_set_from_icon_name (panel->os_logo, logo_name_with_variant, GTK_ICON_SIZE_INVALID); gtk_image_set_pixel_size (panel->os_logo, -1); +#endif } static void -- 2.31.1 From 2fa7e314ded37254f85910f7b5da74aeae67c841 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Tue, 9 Mar 2021 16:02:46 -0600 Subject: [PATCH 2/2] info-overview: add build option to specify a dark mode logo variant Let's allow distributions to specify a different logo to use when using a dark GTK theme. This is best-effort only since it relies on the convention that dark themes must end with "dark" and therefore will fail for a theme named "midnight" or anything that doesn't match convention. --- meson.build | 5 ++++ meson_options.txt | 1 + panels/info-overview/cc-info-overview-panel.c | 27 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/meson.build b/meson.build index 94c8abfbb..f5ce81f07 100644 --- a/meson.build +++ b/meson.build @@ -54,6 +54,11 @@ distributor_logo = get_option('distributor_logo') if (distributor_logo != '') config_h.set_quoted('DISTRIBUTOR_LOGO', distributor_logo, description: 'Define to absolute path of distributor logo') + dark_mode_distributor_logo = get_option('dark_mode_distributor_logo') + if (dark_mode_distributor_logo != '') + config_h.set_quoted('DARK_MODE_DISTRIBUTOR_LOGO', dark_mode_distributor_logo, + description: 'Define to absolute path of distributor logo for use in dark mode') + endif endif # meson does not support octal values, so it must be handled as a diff --git a/meson_options.txt b/meson_options.txt index 93e551373..5305c8606 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -9,3 +9,4 @@ option('wayland', type: 'boolean', value: true, description: 'build with Wayland option('profile', type: 'combo', choices: ['default','development'], value: 'default') option('malcontent', type: 'boolean', value: false, description: 'build with malcontent support') option('distributor_logo', type: 'string', description: 'absolute path to distributor logo for the About panel') +option('dark_mode_distributor_logo', type: 'string', description: 'absolute path to distributor logo dark mode variant') diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c index ce1493f7c..7454bb1ea 100644 --- a/panels/info-overview/cc-info-overview-panel.c +++ b/panels/info-overview/cc-info-overview-panel.c @@ -880,6 +880,25 @@ cc_info_panel_row_activated_cb (CcInfoOverviewPanel *self, open_software_update (self); } +#ifdef DARK_MODE_DISTRIBUTOR_LOGO +static gboolean +is_dark_mode (CcInfoOverviewPanel *panel) +{ + GdkScreen *screen; + GtkSettings *settings; + g_autofree char *theme_name = NULL; + + theme_name = g_strdup (g_getenv ("GTK_THEME")); + if (theme_name != NULL) + return g_str_has_suffix (theme_name, "dark"); + + screen = gtk_widget_get_screen (GTK_WIDGET (panel)); + settings = gtk_settings_get_for_screen (screen); + + g_object_get (settings, "gtk-theme-name", &theme_name, NULL); + return theme_name != NULL && g_str_has_suffix (theme_name, "dark"); +} +#else static const char * get_asset_suffix (CcInfoOverviewPanel *panel) { @@ -897,11 +916,19 @@ get_asset_suffix (CcInfoOverviewPanel *panel) g_object_get (settings, "gtk-theme-name", &theme_name, NULL); return (theme_name != NULL && g_str_has_suffix (theme_name, "dark")) ? "-dark" : ""; } +#endif static void setup_os_logo (CcInfoOverviewPanel *panel) { #ifdef DISTRIBUTOR_LOGO +#ifdef DARK_MODE_DISTRIBUTOR_LOGO + if (is_dark_mode (panel)) + { + gtk_image_set_from_file (panel->os_logo, DARK_MODE_DISTRIBUTOR_LOGO); + return; + } +#endif gtk_image_set_from_file (panel->os_logo, DISTRIBUTOR_LOGO); #else g_autofree char *logo_name = g_get_os_info ("LOGO"); -- 2.31.1