From 4369e31ec541172e1c0d7c64645c7990e413bbca Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Tue, 9 Mar 2021 14:51:54 -0600 Subject: [PATCH 1/3] 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 e8333c0da..1661caa4b 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 bd0e07762..95a5904df 100644 --- a/panels/info-overview/cc-info-overview-panel.c +++ b/panels/info-overview/cc-info-overview-panel.c @@ -869,6 +869,9 @@ cc_info_panel_row_activated_cb (CcInfoOverviewPanel *self, 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"); if (logo_name != NULL) { @@ -879,6 +882,7 @@ setup_os_logo (CcInfoOverviewPanel *panel) { gtk_image_set_from_resource (panel->os_logo, "/org/gnome/control-center/info-overview/GnomeLogoVerticalMedium.svg"); } +#endif } static void -- GitLab From f08669767ca87ff99fc08e1a7334c8f2e7f18f0b Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Tue, 9 Mar 2021 16:02:46 -0600 Subject: [PATCH 2/3] 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 1661caa4b..124171626 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 95a5904df..cb20e16b1 100644 --- a/panels/info-overview/cc-info-overview-panel.c +++ b/panels/info-overview/cc-info-overview-panel.c @@ -866,10 +866,37 @@ 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"); +} +#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"); -- GitLab From c379ccc4e8f0bcdee78361f134ba29d3a25f7528 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Wed, 10 Mar 2021 11:30:57 -0600 Subject: [PATCH 3/3] info-overview: reduce size of logo when using icon from /etc/os-release When using the icon from /etc/os-release, display it as 128x128 rather than 256x256. In distributions that don't ship a 128x128, such as Fedora, this results in the 256x256 icon being scaled down to a reasonable size. 256x256 is so large here as to be clearly undesirable. 128x128 is also the size that Ubuntu uses in its downstream patch. Might as well reduce the need for patching as far as possible, even though Fedora doesn't plan to use this codepath. --- panels/info-overview/cc-info-overview-panel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panels/info-overview/cc-info-overview-panel.c b/panels/info-overview/cc-info-overview-panel.c index cb20e16b1..3575b90c5 100644 --- a/panels/info-overview/cc-info-overview-panel.c +++ b/panels/info-overview/cc-info-overview-panel.c @@ -903,7 +903,7 @@ setup_os_logo (CcInfoOverviewPanel *panel) if (logo_name != NULL) { gtk_image_set_from_icon_name (panel->os_logo, logo_name, GTK_ICON_SIZE_INVALID); - gtk_image_set_pixel_size (panel->os_logo, 256); + gtk_image_set_pixel_size (panel->os_logo, 128); } else { -- GitLab