From 54d6dd4cd27c97c3560c3ff2eb66fcfbbe5a51c0 Mon Sep 17 00:00:00 2001 From: osch Date: Fri, 12 Apr 2019 23:48:52 +0200 Subject: reload icons if icon size preference changed --- src/core/core.c | 22 ++++++++++++++++++++++ src/core/iconcache.c | 34 ++++++++++++++++++++++++++++++---- src/core/iconcache.h | 5 +++++ src/core/main.c | 4 ++++ 4 files changed, 61 insertions(+), 4 deletions(-) (limited to 'src/core') diff --git a/src/core/core.c b/src/core/core.c index 535a3820..0e98959f 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -812,3 +812,25 @@ meta_invalidate_default_icons (void) g_slist_free (windows); } +void +meta_invalidate_all_icons (void) +{ + MetaDisplay *display = meta_get_display (); + GSList *windows; + GSList *l; + + if (display == NULL) + return; /* We can validly be called before the display is opened. */ + + windows = meta_display_list_windows (display); + for (l = windows; l != NULL; l = l->next) + { + MetaWindow *window = (MetaWindow*)l->data; + + meta_icon_cache_invalidate (&(window->icon_cache)); + meta_window_update_icon_now (window); + } + + g_slist_free (windows); +} + diff --git a/src/core/iconcache.c b/src/core/iconcache.c index d3b5c67b..3c0f1b8d 100644 --- a/src/core/iconcache.c +++ b/src/core/iconcache.c @@ -523,6 +523,10 @@ meta_icon_cache_init (MetaIconCache *icon_cache) icon_cache->wm_hints_dirty = TRUE; icon_cache->kwm_win_icon_dirty = TRUE; icon_cache->net_wm_icon_dirty = TRUE; + + icon_cache->wm_hints_dirty_forced = FALSE; + icon_cache->kwm_win_icon_dirty_forced = FALSE; + icon_cache->fallback_icon_dirty_forced = FALSE; } static void @@ -555,6 +559,18 @@ meta_icon_cache_free (MetaIconCache *icon_cache) clear_icon_cache (icon_cache, FALSE); } +void +meta_icon_cache_invalidate (MetaIconCache *icon_cache) +{ + icon_cache->wm_hints_dirty = TRUE; + icon_cache->kwm_win_icon_dirty = TRUE; + icon_cache->net_wm_icon_dirty = TRUE; + + icon_cache->wm_hints_dirty_forced = TRUE; + icon_cache->kwm_win_icon_dirty_forced = TRUE; + icon_cache->fallback_icon_dirty_forced = TRUE; +} + void meta_icon_cache_property_changed (MetaIconCache *icon_cache, MetaDisplay *display, @@ -773,9 +789,12 @@ meta_read_icons (MetaScreen *screen, * hints change */ if ((pixmap != icon_cache->prev_pixmap || - mask != icon_cache->prev_mask) && + mask != icon_cache->prev_mask || + icon_cache->wm_hints_dirty_forced) && pixmap != None) { + icon_cache->wm_hints_dirty_forced = FALSE; + if (try_pixmap_and_mask (screen->display, pixmap, mask, iconp, ideal_width, ideal_height, @@ -800,9 +819,12 @@ meta_read_icons (MetaScreen *screen, get_kwm_win_icon (screen->display, xwindow, &pixmap, &mask); if ((pixmap != icon_cache->prev_pixmap || - mask != icon_cache->prev_mask) && + mask != icon_cache->prev_mask || + icon_cache->kwm_win_icon_dirty_forced) && pixmap != None) { + icon_cache->kwm_win_icon_dirty_forced = FALSE; + if (try_pixmap_and_mask (screen->display, pixmap, mask, iconp, ideal_width, ideal_height, mini_iconp, ideal_mini_width, ideal_mini_height)) @@ -818,9 +840,13 @@ meta_read_icons (MetaScreen *screen, } } - if (icon_cache->want_fallback && - icon_cache->origin < USING_FALLBACK_ICON) + if ((icon_cache->want_fallback && + icon_cache->origin < USING_FALLBACK_ICON) + || (icon_cache->fallback_icon_dirty_forced && + icon_cache->origin == USING_FALLBACK_ICON)) { + icon_cache->fallback_icon_dirty_forced = FALSE; + get_fallback_icons (screen, iconp, ideal_width, diff --git a/src/core/iconcache.h b/src/core/iconcache.h index adb15d9b..4614da02 100644 --- a/src/core/iconcache.h +++ b/src/core/iconcache.h @@ -51,10 +51,15 @@ struct _MetaIconCache guint wm_hints_dirty : 1; guint kwm_win_icon_dirty : 1; guint net_wm_icon_dirty : 1; + + guint wm_hints_dirty_forced : 1; + guint kwm_win_icon_dirty_forced : 1; + guint fallback_icon_dirty_forced : 1; }; void meta_icon_cache_init (MetaIconCache *icon_cache); void meta_icon_cache_free (MetaIconCache *icon_cache); +void meta_icon_cache_invalidate (MetaIconCache *icon_cache); void meta_icon_cache_property_changed (MetaIconCache *icon_cache, MetaDisplay *display, Atom atom); diff --git a/src/core/main.c b/src/core/main.c index 6f6170d6..72542bff 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -52,6 +52,7 @@ #include "ui.h" #include "session.h" #include "prefs.h" +#include "core.h" #include #include @@ -659,6 +660,9 @@ prefs_changed_callback (MetaPreference pref, meta_display_set_cursor_theme (meta_prefs_get_cursor_theme (), meta_prefs_get_cursor_size ()); break; + case META_PREF_ICON_SIZE: + meta_invalidate_all_icons(); + break; default: /* handled elsewhere or otherwise */ break; -- cgit v1.2.1