diff options
author | Owen W. Taylor <otaylor@fishsoup.net> | 2009-06-15 13:24:43 -0400 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2014-10-05 01:02:26 +0300 |
commit | 49552340d5b55ffc535ded300a36f6d736b70501 (patch) | |
tree | 4c23a43d87999a4a62f7bd98906ca341985f3fa4 | |
parent | a53865e758ff4981e675f5b7280b237f1bb4bd19 (diff) | |
download | metacity-49552340d5b55ffc535ded300a36f6d736b70501.tar.gz |
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
-rw-r--r-- | src/core/window-props.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/src/core/window-props.c b/src/core/window-props.c index 7fb9ee6f..d49d21e6 100644 --- a/src/core/window-props.c +++ b/src/core/window-props.c @@ -71,12 +71,13 @@ typedef struct MetaWindowPropHooks ReloadValueFunc reload_func; } MetaWindowPropHooks; -static void init_prop_value (MetaDisplay *display, - Atom property, - MetaPropValue *value); -static void reload_prop_value (MetaWindow *window, - MetaPropValue *value, - gboolean initial); +static void init_prop_value (MetaDisplay *display, + MetaWindowPropHooks *hooks, + MetaPropValue *value); +static void reload_prop_value (MetaWindow *window, + MetaWindowPropHooks *hooks, + MetaPropValue *value, + gboolean initial); static MetaWindowPropHooks* find_hooks (MetaDisplay *display, Atom property); @@ -130,7 +131,8 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window, i = 0; 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; } @@ -140,7 +142,8 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window, i = 0; 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; } @@ -152,12 +155,10 @@ meta_window_reload_properties_from_xwindow (MetaWindow *window, /* Fill in the MetaPropValue used to get the value of "property" */ static void -init_prop_value (MetaDisplay *display, - Atom property, - MetaPropValue *value) -{ - MetaWindowPropHooks *hooks = find_hooks (display, property); - +init_prop_value (MetaDisplay *display, + MetaWindowPropHooks *hooks, + MetaPropValue *value) +{ if (!hooks || hooks->type == META_PROP_VALUE_INVALID) { value->type = META_PROP_VALUE_INVALID; @@ -166,17 +167,16 @@ init_prop_value (MetaDisplay *display, else { value->type = hooks->type; - value->atom = property; + value->atom = hooks->property; } } static void -reload_prop_value (MetaWindow *window, - MetaPropValue *value, - gboolean initial) +reload_prop_value (MetaWindow *window, + MetaWindowPropHooks *hooks, + MetaPropValue *value, + gboolean initial) { - MetaWindowPropHooks *hooks = find_hooks (window->display, value->atom); - if (hooks && hooks->reload_func != NULL) (* hooks->reload_func) (window, value, initial); } |