Fix property notifications for certain properties
If a property has a reload function, but the standard property-fetching mechanism isn't used (hooks->type == META_PROP_VALUE_INVALID), then the a logic error (introduced in January) caused the hook to never be run. This meant that changes to struts and icons weren't noticed. Same as: http://bugzilla.gnome.org/show_bug.cgi?id=572573 The fix here is different in detail from that applied to Metacity, but similar in spirit. http://bugzilla.gnome.org/show_bug.cgi?id=585980
This commit is contained in:
parent
820970328b
commit
d810315884
@ -63,12 +63,13 @@ typedef struct MetaWindowPropHooks
|
|||||||
ReloadValueFunc reload_func;
|
ReloadValueFunc reload_func;
|
||||||
} MetaWindowPropHooks;
|
} MetaWindowPropHooks;
|
||||||
|
|
||||||
static void init_prop_value (MetaDisplay *display,
|
static void init_prop_value (MetaDisplay *display,
|
||||||
Atom property,
|
MetaWindowPropHooks *hooks,
|
||||||
MetaPropValue *value);
|
MetaPropValue *value);
|
||||||
static void reload_prop_value (MetaWindow *window,
|
static void reload_prop_value (MetaWindow *window,
|
||||||
MetaPropValue *value,
|
MetaWindowPropHooks *hooks,
|
||||||
gboolean initial);
|
MetaPropValue *value,
|
||||||
|
gboolean initial);
|
||||||
static MetaWindowPropHooks* find_hooks (MetaDisplay *display,
|
static MetaWindowPropHooks* find_hooks (MetaDisplay *display,
|
||||||
Atom property);
|
Atom property);
|
||||||
|
|
||||||
@ -122,7 +123,8 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window,
|
|||||||
i = 0;
|
i = 0;
|
||||||
while (i < n_properties)
|
while (i < n_properties)
|
||||||
{
|
{
|
||||||
init_prop_value (window->display, properties[i], &values[i]);
|
MetaWindowPropHooks *hooks = find_hooks (window->display, properties[i]);
|
||||||
|
init_prop_value (window->display, hooks, &values[i]);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +134,8 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window,
|
|||||||
i = 0;
|
i = 0;
|
||||||
while (i < n_properties)
|
while (i < n_properties)
|
||||||
{
|
{
|
||||||
reload_prop_value (window, &values[i], initial);
|
MetaWindowPropHooks *hooks = find_hooks (window->display, properties[i]);
|
||||||
|
reload_prop_value (window, hooks, &values[i], initial);
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@ -144,31 +147,28 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window,
|
|||||||
|
|
||||||
/* Fill in the MetaPropValue used to get the value of "property" */
|
/* Fill in the MetaPropValue used to get the value of "property" */
|
||||||
static void
|
static void
|
||||||
init_prop_value (MetaDisplay *display,
|
init_prop_value (MetaDisplay *display,
|
||||||
Atom property,
|
MetaWindowPropHooks *hooks,
|
||||||
MetaPropValue *value)
|
MetaPropValue *value)
|
||||||
{
|
{
|
||||||
MetaWindowPropHooks *hooks = find_hooks (display, property);
|
|
||||||
|
|
||||||
if (!hooks || hooks->type == META_PROP_VALUE_INVALID)
|
if (!hooks || hooks->type == META_PROP_VALUE_INVALID)
|
||||||
{
|
{
|
||||||
value->type = META_PROP_VALUE_INVALID;
|
value->type = META_PROP_VALUE_INVALID;
|
||||||
value->atom = None;
|
value->atom = None;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
value->type = hooks->type;
|
value->type = hooks->type;
|
||||||
value->atom = property;
|
value->atom = hooks->property;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reload_prop_value (MetaWindow *window,
|
reload_prop_value (MetaWindow *window,
|
||||||
MetaPropValue *value,
|
MetaWindowPropHooks *hooks,
|
||||||
gboolean initial)
|
MetaPropValue *value,
|
||||||
|
gboolean initial)
|
||||||
{
|
{
|
||||||
MetaWindowPropHooks *hooks = find_hooks (window->display, value->atom);
|
|
||||||
|
|
||||||
if (hooks && hooks->reload_func != NULL)
|
if (hooks && hooks->reload_func != NULL)
|
||||||
(* hooks->reload_func) (window, value, initial);
|
(* hooks->reload_func) (window, value, initial);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user