mirror of
https://github.com/brl/mutter.git
synced 2025-08-05 08:04:50 +00:00
window: Cache _NET_WM_ICON_GEOMETRY
Rather than doing a server round trip each time when retrieving the icon geometry, use the existing property mechanism to cache it. https://bugzilla.gnome.org/show_bug.cgi?id=692997
This commit is contained in:
@@ -245,6 +245,33 @@ reload_kwm_win_icon (MetaWindow *window,
|
||||
reload_icon (window, window->display->atom__KWM_WIN_ICON);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_icon_geometry (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
if (value->v.cardinal_list.n_cardinals != 4)
|
||||
{
|
||||
meta_verbose ("_NET_WM_ICON_GEOMETRY on %s has %d values instead of 4\n",
|
||||
window->desc, value->v.cardinal_list.n_cardinals);
|
||||
}
|
||||
else
|
||||
{
|
||||
window->icon_geometry.x = (int)value->v.cardinal_list.cardinals[0];
|
||||
window->icon_geometry.y = (int)value->v.cardinal_list.cardinals[1];
|
||||
window->icon_geometry.width = (int)value->v.cardinal_list.cardinals[2];
|
||||
window->icon_geometry.height = (int)value->v.cardinal_list.cardinals[3];
|
||||
window->icon_geometry_set = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
window->icon_geometry_set = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reload_struts (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
@@ -1728,7 +1755,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
|
||||
{ display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE },
|
||||
{ display->atom__KWM_WIN_ICON, META_PROP_VALUE_INVALID, reload_kwm_win_icon, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_ICON_GEOMETRY, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_ICON_GEOMETRY, META_PROP_VALUE_CARDINAL_LIST, reload_icon_geometry, FALSE, FALSE },
|
||||
{ display->atom_WM_CLIENT_LEADER, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
||||
{ display->atom_SM_CLIENT_ID, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
||||
{ display->atom_WM_WINDOW_ROLE, META_PROP_VALUE_INVALID, reload_wm_window_role, FALSE, FALSE },
|
||||
|
Reference in New Issue
Block a user