summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-03-14 14:22:43 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-11-28 19:59:35 +0200
commit5b403ae667c0ee459993824fe1f65b30847a0d20 (patch)
tree8ed3aeb36bf8ed3a79fe0ad47335aac8a0582edf
parent300a9a924dbc58a92004b00845910d89c265ff1e (diff)
downloadlibwnck-5b403ae667c0ee459993824fe1f65b30847a0d20.tar.gz
icon-cache: store xwindow in struct
Icon cache is always used with same xwindow.
-rw-r--r--libwnck/application.c10
-rw-r--r--libwnck/window.c7
-rw-r--r--libwnck/wnck-icon-cache-private.h3
-rw-r--r--libwnck/wnck-icon-cache.c11
4 files changed, 15 insertions, 16 deletions
diff --git a/libwnck/application.c b/libwnck/application.c
index 1d5ff86..958b78b 100644
--- a/libwnck/application.c
+++ b/libwnck/application.c
@@ -98,9 +98,6 @@ static void
wnck_application_init (WnckApplication *application)
{
application->priv = wnck_application_get_instance_private (application);
-
- application->priv->icon_cache = _wnck_icon_cache_new ();
- _wnck_icon_cache_set_want_fallback (application->priv->icon_cache, FALSE);
}
static void
@@ -167,8 +164,7 @@ wnck_application_finalize (GObject *object)
g_object_unref (G_OBJECT (application->priv->mini_icon));
application->priv->mini_icon = NULL;
- _wnck_icon_cache_free (application->priv->icon_cache);
- application->priv->icon_cache = NULL;
+ g_clear_pointer (&application->priv->icon_cache, _wnck_icon_cache_free);
g_free (application->priv->startup_id);
application->priv->startup_id = NULL;
@@ -327,7 +323,6 @@ get_icons (WnckApplication *app)
mini_size = _wnck_handle_get_default_mini_icon_size (handle);
if (_wnck_read_icons (app->priv->screen,
- app->priv->xwindow,
app->priv->icon_cache,
&icon,
normal_size,
@@ -524,6 +519,9 @@ _wnck_application_create (Window xwindow,
application->priv->xwindow = xwindow;
application->priv->screen = screen;
+ application->priv->icon_cache = _wnck_icon_cache_new (xwindow);
+ _wnck_icon_cache_set_want_fallback (application->priv->icon_cache, FALSE);
+
if (has_group_leader)
application->priv->name = _wnck_get_name (xscreen, xwindow);
diff --git a/libwnck/window.c b/libwnck/window.c
index 048b78e..510bfc0 100644
--- a/libwnck/window.c
+++ b/libwnck/window.c
@@ -223,7 +223,6 @@ wnck_window_init (WnckWindow *window)
{
window->priv = wnck_window_get_instance_private (window);
- window->priv->icon_cache = _wnck_icon_cache_new ();
window->priv->icon_geometry.width = -1; /* invalid cached value */
window->priv->workspace = -1;
window->priv->sort_order = G_MAXINT;
@@ -420,8 +419,7 @@ wnck_window_finalize (GObject *object)
g_object_unref (G_OBJECT (window->priv->mini_icon));
window->priv->mini_icon = NULL;
- _wnck_icon_cache_free (window->priv->icon_cache);
- window->priv->icon_cache = NULL;
+ g_clear_pointer (&window->priv->icon_cache, _wnck_icon_cache_free);
g_free (window->priv->startup_id);
window->priv->startup_id = NULL;
@@ -489,6 +487,8 @@ _wnck_window_create (Window xwindow,
window->priv->xwindow = xwindow;
window->priv->screen = screen;
+ window->priv->icon_cache = _wnck_icon_cache_new (xwindow);
+
_wnck_handle_insert_window (handle, &window->priv->xwindow, window);
/* Handle now owns one ref, caller gets none */
@@ -2131,7 +2131,6 @@ get_icons (WnckWindow *window)
mini_size = _wnck_handle_get_default_mini_icon_size (handle);
if (_wnck_read_icons (window->priv->screen,
- window->priv->xwindow,
window->priv->icon_cache,
&icon,
normal_size,
diff --git a/libwnck/wnck-icon-cache-private.h b/libwnck/wnck-icon-cache-private.h
index 2a89213..67eeab8 100644
--- a/libwnck/wnck-icon-cache-private.h
+++ b/libwnck/wnck-icon-cache-private.h
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
typedef struct _WnckIconCache WnckIconCache;
-WnckIconCache *_wnck_icon_cache_new (void);
+WnckIconCache *_wnck_icon_cache_new (Window xwindow);
void _wnck_icon_cache_free (WnckIconCache *icon_cache);
void _wnck_icon_cache_property_changed (WnckIconCache *icon_cache,
Atom atom);
@@ -39,7 +39,6 @@ void _wnck_icon_cache_set_want_fallback (WnckIconCache *icon_cache
gboolean _wnck_icon_cache_get_is_fallback (WnckIconCache *icon_cache);
gboolean _wnck_read_icons (WnckScreen *screen,
- Window xwindow,
WnckIconCache *icon_cache,
GdkPixbuf **iconp,
int ideal_size,
diff --git a/libwnck/wnck-icon-cache.c b/libwnck/wnck-icon-cache.c
index 6a89ff0..627223e 100644
--- a/libwnck/wnck-icon-cache.c
+++ b/libwnck/wnck-icon-cache.c
@@ -41,6 +41,8 @@ typedef enum
struct _WnckIconCache
{
+ Window xwindow;
+
IconOrigin origin;
Pixmap prev_pixmap;
Pixmap prev_mask;
@@ -454,12 +456,14 @@ scaled_from_pixdata (guchar *pixdata,
}
WnckIconCache*
-_wnck_icon_cache_new (void)
+_wnck_icon_cache_new (Window xwindow)
{
WnckIconCache *icon_cache;
icon_cache = g_slice_new0 (WnckIconCache);
+ icon_cache->xwindow = xwindow;
+
icon_cache->origin = USING_NO_ICON;
icon_cache->prev_pixmap = None;
icon_cache->icon = NULL;
@@ -525,7 +529,6 @@ _wnck_icon_cache_get_is_fallback (WnckIconCache *icon_cache)
gboolean
_wnck_read_icons (WnckScreen *screen,
- Window xwindow,
WnckIconCache *icon_cache,
GdkPixbuf **iconp,
int ideal_size,
@@ -572,7 +575,7 @@ _wnck_read_icons (WnckScreen *screen,
{
icon_cache->net_wm_icon_dirty = FALSE;
- if (read_rgb_icon (xscreen, xwindow,
+ if (read_rgb_icon (xscreen, icon_cache->xwindow,
ideal_size,
ideal_mini_size,
&w, &h, &pixdata,
@@ -596,7 +599,7 @@ _wnck_read_icons (WnckScreen *screen,
icon_cache->wm_hints_dirty = FALSE;
_wnck_error_trap_push (display);
- hints = XGetWMHints (display, xwindow);
+ hints = XGetWMHints (display, icon_cache->xwindow);
_wnck_error_trap_pop (display);
pixmap = None;
mask = None;