metacity r4090 - in trunk: . src/core
- From: tthurman svn gnome org
- To: svn-commits-list gnome org
- Subject: metacity r4090 - in trunk: . src/core
- Date: Tue, 27 Jan 2009 05:03:06 +0000 (UTC)
Author: tthurman
Date: Tue Jan 27 05:03:06 2009
New Revision: 4090
URL: http://svn.gnome.org/viewvc/metacity?rev=4090&view=rev
Log:
All the window properties are now handled using simple
window property handlers. Closes #549886.
* src/core/window-private.h:
* src/core/window-props.c:
* src/core/window.c:
Modified:
trunk/ChangeLog
trunk/src/core/window-private.h
trunk/src/core/window-props.c
trunk/src/core/window.c
Modified: trunk/src/core/window-private.h
==============================================================================
--- trunk/src/core/window-private.h (original)
+++ trunk/src/core/window-private.h Tue Jan 27 05:03:06 2009
@@ -629,4 +629,7 @@
void meta_window_update_icon_now (MetaWindow *window);
+void meta_window_update_role (MetaWindow *window);
+void meta_window_update_net_wm_type (MetaWindow *window);
+
#endif
Modified: trunk/src/core/window-props.c
==============================================================================
--- trunk/src/core/window-props.c (original)
+++ trunk/src/core/window-props.c Tue Jan 27 05:03:06 2009
@@ -196,6 +196,65 @@
}
static void
+complain_about_broken_client (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ meta_warning ("Broken client! Window %s changed client leader window or SM client ID\n",
+ window->desc);
+}
+
+static void
+reload_net_wm_window_type (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ meta_window_update_net_wm_type (window);
+}
+
+static void
+reload_icon (MetaWindow *window,
+ Atom atom)
+{
+ meta_icon_cache_property_changed (&window->icon_cache,
+ window->display,
+ atom);
+ meta_window_queue(window, META_QUEUE_UPDATE_ICON);
+}
+
+static void
+reload_net_wm_icon (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ reload_icon (window, window->display->atom__NET_WM_ICON);
+}
+
+static void
+reload_kwm_win_icon (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ reload_icon (window, window->display->atom__KWM_WIN_ICON);
+}
+
+static void
+reload_struts (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ meta_window_update_struts (window);
+}
+
+static void
+reload_wm_window_role (MetaWindow *window,
+ MetaPropValue *value,
+ gboolean initial)
+{
+ meta_window_update_role (window);
+}
+
+static void
init_net_wm_pid (MetaDisplay *display,
Atom property,
MetaPropValue *value)
@@ -565,6 +624,13 @@
* clients don't change the property.
*/
+ if (!initial) {
+ /* no, they DON'T change the property */
+ meta_verbose ("Ignoring _NET_WM_STATE: we should be the one who set "
+ "the property in the first place\n");
+ return;
+ }
+
window->shaded = FALSE;
window->maximized_horizontally = FALSE;
window->maximized_vertically = FALSE;
@@ -1488,7 +1554,7 @@
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
-#define N_HOOKS 26
+#define N_HOOKS 28
void
meta_display_init_window_prop_hooks (MetaDisplay *display)
@@ -1533,6 +1599,16 @@
hooks[i].reload_func = reload_wm_name;
++i;
+ hooks[i].property = display->atom__NET_WM_ICON;
+ hooks[i].init_func = NULL;
+ hooks[i].reload_func = reload_net_wm_icon;
+ ++i;
+
+ hooks[i].property = display->atom__KWM_WIN_ICON;
+ hooks[i].init_func = NULL;
+ hooks[i].reload_func = reload_kwm_win_icon;
+ ++i;
+
hooks[i].property = display->atom__NET_WM_ICON_NAME;
hooks[i].init_func = init_net_wm_icon_name;
hooks[i].reload_func = reload_net_wm_icon_name;
@@ -1565,22 +1641,22 @@
hooks[i].property = display->atom_WM_CLIENT_LEADER;
hooks[i].init_func = NULL;
- hooks[i].reload_func = NULL;
+ hooks[i].reload_func = complain_about_broken_client;
++i;
hooks[i].property = display->atom_SM_CLIENT_ID;
hooks[i].init_func = NULL;
- hooks[i].reload_func = NULL;
+ hooks[i].reload_func = complain_about_broken_client;
++i;
hooks[i].property = display->atom_WM_WINDOW_ROLE;
hooks[i].init_func = NULL;
- hooks[i].reload_func = NULL;
+ hooks[i].reload_func = reload_wm_window_role;
++i;
hooks[i].property = display->atom__NET_WM_WINDOW_TYPE;
hooks[i].init_func = NULL;
- hooks[i].reload_func = NULL;
+ hooks[i].reload_func = reload_net_wm_window_type;
++i;
hooks[i].property = display->atom__NET_WM_DESKTOP;
@@ -1590,12 +1666,12 @@
hooks[i].property = display->atom__NET_WM_STRUT;
hooks[i].init_func = NULL;
- hooks[i].reload_func = NULL;
+ hooks[i].reload_func = reload_struts;
++i;
hooks[i].property = display->atom__NET_WM_STRUT_PARTIAL;
hooks[i].init_func = NULL;
- hooks[i].reload_func = NULL;
+ hooks[i].reload_func = reload_struts;
++i;
hooks[i].property = display->atom__NET_STARTUP_ID;
Modified: trunk/src/core/window.c
==============================================================================
--- trunk/src/core/window.c (original)
+++ trunk/src/core/window.c Tue Jan 27 05:03:06 2009
@@ -57,8 +57,6 @@
static void update_sm_hints (MetaWindow *window);
-static void update_role (MetaWindow *window);
-static void update_net_wm_type (MetaWindow *window);
static void update_net_frame_extents (MetaWindow *window);
static void recalc_window_type (MetaWindow *window);
static void recalc_window_features (MetaWindow *window);
@@ -598,8 +596,8 @@
meta_window_reload_properties (window, initial_props, N_INITIAL_PROPS, TRUE);
update_sm_hints (window); /* must come after transient_for */
- update_role (window);
- update_net_wm_type (window);
+ meta_window_update_role (window);
+ meta_window_update_net_wm_type (window);
meta_window_update_icon_now (window);
if (window->initially_iconic)
@@ -5431,11 +5429,7 @@
process_property_notify (MetaWindow *window,
XPropertyEvent *event)
{
- /* Property notifies we want to use.
- * FIXME once we move entirely to the window-props.h framework, we
- * can just call reload on the property in the event and get rid of
- * this if-else chain.
- */
+ Window xid = window->xwindow;
if (meta_is_verbose ()) /* avoid looking up the name if we don't have to */
{
@@ -5447,62 +5441,13 @@
XFree (property_name);
}
- if (event->atom == window->display->atom_WM_WINDOW_ROLE)
- {
- update_role (window);
- }
- else if (event->atom ==
- window->display->atom_WM_CLIENT_LEADER ||
- event->atom ==
- window->display->atom_SM_CLIENT_ID)
- {
- meta_warning ("Broken client! Window %s changed client leader window or SM client ID\n", window->desc);
- }
- else if (event->atom ==
- window->display->atom__NET_WM_STATE)
- {
- meta_verbose ("Ignoring _NET_WM_STATE: we should be the one who set the property in the first place\n");
- }
- else if (event->atom ==
- window->display->atom__NET_WM_WINDOW_TYPE)
- {
- update_net_wm_type (window);
- }
- else if (event->atom == window->display->atom__NET_WM_ICON)
- {
- meta_icon_cache_property_changed (&window->icon_cache,
- window->display,
- event->atom);
- meta_window_queue(window, META_QUEUE_UPDATE_ICON);
- }
- else if (event->atom == window->display->atom__KWM_WIN_ICON)
+ if (event->atom == window->display->atom__NET_WM_USER_TIME &&
+ window->user_time_window)
{
- meta_icon_cache_property_changed (&window->icon_cache,
- window->display,
- event->atom);
- meta_window_queue(window, META_QUEUE_UPDATE_ICON);
+ xid = window->user_time_window;
}
- else if ((event->atom == window->display->atom__NET_WM_STRUT) ||
- (event->atom == window->display->atom__NET_WM_STRUT_PARTIAL))
- {
- meta_window_update_struts (window);
- }
- else if (event->atom == window->display->atom__NET_WM_USER_TIME)
- {
- Window xid;
- Atom atom__NET_WM_USER_TIME;
- atom__NET_WM_USER_TIME = window->display->atom__NET_WM_USER_TIME;
- if (window->user_time_window)
- xid = window->user_time_window;
- else
- xid = window->xwindow;
- meta_window_reload_property_from_xwindow (window,
- xid,
- atom__NET_WM_USER_TIME, FALSE);
- }
- else
- meta_window_reload_property (window, event->atom, FALSE);
+ meta_window_reload_property (window, event->atom, FALSE);
return TRUE;
}
@@ -5692,8 +5637,8 @@
window->sm_client_id ? window->sm_client_id : "none");
}
-static void
-update_role (MetaWindow *window)
+void
+meta_window_update_role (MetaWindow *window)
{
char *str;
@@ -5713,8 +5658,8 @@
window->desc, window->role ? window->role : "null");
}
-static void
-update_net_wm_type (MetaWindow *window)
+void
+meta_window_update_net_wm_type (MetaWindow *window)
{
int n_atoms;
Atom *atoms;
@@ -5771,7 +5716,7 @@
meta_XFree (str);
}
- recalc_window_type (window);
+ meta_window_recalc_window_type (window);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]