[metacity] don't read most properties for override-redirect windows
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] don't read most properties for override-redirect windows
- Date: Sun, 26 Feb 2017 22:23:47 +0000 (UTC)
commit ba5005fc29bb4b45f174959185ada8d5639499e2
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Feb 26 23:27:29 2017 +0200
don't read most properties for override-redirect windows
Combination of multiple mutter commits:
https://git.gnome.org/browse/mutter/commit/?id=fd27647440ca0068450a5a74aadaae15dc065e00
https://git.gnome.org/browse/mutter/commit/?id=10fe91d7044dd53f3c942a89e43288ce1f59c37c
https://git.gnome.org/browse/mutter/commit/?id=6190b650564c39b8b70a591f2a68ec3de831b455
src/core/window-props.c | 43 ++++++++++++++++++++++++++-----------------
src/core/window.c | 24 +++++++++++++++++++-----
2 files changed, 45 insertions(+), 22 deletions(-)
---
diff --git a/src/core/window-props.c b/src/core/window-props.c
index c45f09b..bd29af7 100644
--- a/src/core/window-props.c
+++ b/src/core/window-props.c
@@ -68,8 +68,9 @@ typedef void (* ReloadValueFunc) (MetaWindow *window,
typedef enum {
NONE = 0,
LOAD_INIT = (1 << 0),
- INIT_ONLY = (1 << 1),
- FORCE_INIT = (1 << 2),
+ INCLUDE_OR = (1 << 1),
+ INIT_ONLY = (1 << 2),
+ FORCE_INIT = (1 << 3),
} MetaPropHookFlags;
struct _MetaWindowPropHooks {
@@ -178,7 +179,8 @@ init_prop_value (MetaWindow *window,
MetaWindowPropHooks *hooks,
MetaPropValue *value)
{
- if (!hooks || hooks->type == META_PROP_VALUE_INVALID)
+ if (!hooks || hooks->type == META_PROP_VALUE_INVALID ||
+ (window->override_redirect && !(hooks->flags & INCLUDE_OR)))
{
value->type = META_PROP_VALUE_INVALID;
value->atom = None;
@@ -196,7 +198,7 @@ reload_prop_value (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
- if (hooks && hooks->reload_func != NULL)
+ if (!(window->override_redirect && !(hooks->flags & INCLUDE_OR)))
(* hooks->reload_func) (window, value, initial);
}
@@ -1617,36 +1619,49 @@ reload_gtk_theme_variant (MetaWindow *window,
void
meta_display_init_window_prop_hooks (MetaDisplay *display)
{
+ /* The ordering here is significant for the properties we load
+ * initially: they are roughly ordered in the order we want them to
+ * be gotten. We want to get window name and class first so we can
+ * use them in error messages and such. However, name is modified
+ * depending on wm_client_machine, so push it slightly sooner.
+ *
+ * For override-redirect windows, we pay attention to:
+ *
+ * - properties that identify the window: useful for debugging
+ * purposes.
+ * - NET_WM_WINDOW_TYPE: can be used to do appropriate handling
+ * for different types of override-redirect windows.
+ */
MetaWindowPropHooks hooks[] = {
{
display->atom_WM_CLIENT_MACHINE,
META_PROP_VALUE_STRING,
reload_wm_client_machine,
- LOAD_INIT
+ LOAD_INIT | INCLUDE_OR
},
{
display->atom__NET_WM_NAME,
META_PROP_VALUE_UTF8,
reload_net_wm_name,
- LOAD_INIT
+ LOAD_INIT | INCLUDE_OR
},
{
XA_WM_CLASS,
META_PROP_VALUE_CLASS_HINT,
reload_wm_class,
- LOAD_INIT
+ LOAD_INIT | INCLUDE_OR
},
{
display->atom__NET_WM_PID,
META_PROP_VALUE_CARDINAL,
reload_net_wm_pid,
- LOAD_INIT
+ LOAD_INIT | INCLUDE_OR
},
{
XA_WM_NAME,
META_PROP_VALUE_TEXT_PROPERTY,
reload_wm_name,
- LOAD_INIT
+ LOAD_INIT | INCLUDE_OR
},
{
display->atom__NET_WM_DESKTOP,
@@ -1664,7 +1679,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
display->atom__NET_WM_SYNC_REQUEST_COUNTER,
META_PROP_VALUE_SYNC_COUNTER,
reload_update_counter,
- LOAD_INIT
+ LOAD_INIT | INCLUDE_OR
},
{
XA_WM_NORMAL_HINTS,
@@ -1727,12 +1742,6 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
LOAD_INIT
},
{
- display->atom_WM_STATE,
- META_PROP_VALUE_INVALID,
- NULL,
- NONE
- },
- {
display->atom__NET_WM_ICON,
META_PROP_VALUE_INVALID,
reload_net_wm_icon,
@@ -1772,7 +1781,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
display->atom__NET_WM_WINDOW_TYPE,
META_PROP_VALUE_ATOM_LIST,
reload_net_wm_window_type,
- LOAD_INIT | FORCE_INIT
+ LOAD_INIT | INCLUDE_OR | FORCE_INIT
},
{
display->atom__NET_WM_STRUT,
diff --git a/src/core/window.c b/src/core/window.c
index b36ee1b..4b3dfbf 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -561,8 +561,11 @@ meta_window_new_with_attrs (MetaDisplay *display,
meta_window_load_initial_properties (window);
- update_sm_hints (window); /* must come after transient_for */
- meta_window_update_icon_now (window);
+ if (!window->override_redirect)
+ update_sm_hints (window); /* must come after transient_for */
+
+ if (!window->override_redirect)
+ meta_window_update_icon_now (window);
if (window->initially_iconic)
{
@@ -595,7 +598,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
* much we can do...except record the current time so that any children
* can use this time as a fallback.
*/
- if (!window->net_wm_user_time_set) {
+ if (!window->override_redirect && !window->net_wm_user_time_set) {
MetaWindow *parent = NULL;
if (window->xtransient_for)
parent = meta_display_lookup_x_window (window->display,
@@ -710,9 +713,12 @@ meta_window_new_with_attrs (MetaDisplay *display,
}
/* for the various on_all_workspaces = TRUE possible above */
- meta_window_set_current_workspace_hint (window);
+ if (!window->override_redirect)
+ {
+ meta_window_set_current_workspace_hint (window);
- meta_window_update_struts (window);
+ meta_window_update_struts (window);
+ }
/* Must add window to stack before doing move/resize, since the
* window might have fullscreen size (i.e. should have been
@@ -5809,6 +5815,8 @@ gboolean
meta_window_get_icon_geometry (MetaWindow *window,
MetaRectangle *rect)
{
+ g_return_val_if_fail (!window->override_redirect, FALSE);
+
if (window->icon_geometry_set)
{
if (rect)
@@ -5951,6 +5959,8 @@ meta_window_update_icon_now (MetaWindow *window)
GdkPixbuf *icon;
GdkPixbuf *mini_icon;
+ g_return_if_fail (!window->override_redirect);
+
icon = NULL;
mini_icon = NULL;
@@ -6054,6 +6064,8 @@ meta_window_update_struts (MetaWindow *window)
int nitems;
gboolean changed;
+ g_return_if_fail (!window->override_redirect);
+
meta_verbose ("Updating struts for %s\n", window->desc);
old_struts = window->struts;
@@ -8447,6 +8459,8 @@ meta_window_set_user_time (MetaWindow *window,
* a future time.
*/
+ g_return_if_fail (!window->override_redirect);
+
/* Only update the time if this timestamp is newer... */
if (window->net_wm_user_time_set &&
XSERVER_TIME_IS_BEFORE (timestamp, window->net_wm_user_time))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]