From ce2bfc008d19e7e12f3dc97eaa2ae190ac5eff7c Mon Sep 17 00:00:00 2001 From: Tomas Frydrych Date: Thu, 30 Oct 2008 08:30:42 +0000 Subject: [PATCH] mutter_window_get_description() Human redable description useful for debugging, now accessible to plugins and and also for override redirect windows. --- src/compositor/mutter/compositor-mutter.c | 25 ++++++++++++++++++++++- src/core/window.c | 8 ++++++++ src/include/compositor-mutter.h | 1 + src/include/window.h | 1 + 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/compositor/mutter/compositor-mutter.c b/src/compositor/mutter/compositor-mutter.c index 7d888f0f0..f7e3c7df2 100644 --- a/src/compositor/mutter/compositor-mutter.c +++ b/src/compositor/mutter/compositor-mutter.c @@ -173,6 +173,8 @@ struct _MutterWindowPrivate guint8 opacity; + gchar * desc; + /* * These need to be counters rather than flags, since more plugins * can implement same effect; the practicality of stacking effects @@ -390,6 +392,8 @@ mutter_window_dispose (GObject *object) info->windows = g_list_remove (info->windows, (gconstpointer) self); g_hash_table_remove (info->windows_by_xid, (gpointer) priv->xwindow); + g_free (priv->desc); + G_OBJECT_CLASS (mutter_window_parent_class)->dispose (object); } @@ -734,11 +738,30 @@ mutter_window_is_override_redirect (MutterWindow *mcw) return FALSE; } +const char *mutter_window_get_description (MutterWindow *mcw) +{ + /* + * For windows managed by the WM, we just defer to the WM for the window + * description. For override-redirect windows, we create the description + * ourselves, but only on demand. + */ + if (mcw->priv->window) + return meta_window_get_description (mcw->priv->window); + + if (G_UNLIKELY (mcw->priv->desc == NULL)) + { + mcw->priv->desc = g_strdup_printf ("Override Redirect (0x%x)", + (guint) mcw->priv->xwindow); + } + + return mcw->priv->desc; +} + gint mutter_window_get_workspace (MutterWindow *mcw) { MutterWindowPrivate *priv; - MetaWorkspace *workspace; + MetaWorkspace *workspace; if (!mcw) return -1; diff --git a/src/core/window.c b/src/core/window.c index 3d4dd79bc..78ca28fec 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -8293,3 +8293,11 @@ meta_window_is_hidden (MetaWindow *window) return window->hidden; } +const char * +meta_window_get_description (MetaWindow *window) +{ + if (!window) + return NULL; + + return window->desc; +} diff --git a/src/include/compositor-mutter.h b/src/include/compositor-mutter.h index 071cc6353..d312de7ab 100644 --- a/src/include/compositor-mutter.h +++ b/src/include/compositor-mutter.h @@ -64,6 +64,7 @@ gboolean mutter_window_is_hidden (MutterWindow *mcw); MetaWindow * mutter_window_get_meta_window (MutterWindow *mcw); ClutterActor * mutter_window_get_texture (MutterWindow *mcw); gboolean mutter_window_is_override_redirect (MutterWindow *mcw); +const char * mutter_window_get_description (MutterWindow *mcw); /* Compositor API */ MetaCompositor *mutter_new (MetaDisplay *display); diff --git a/src/include/window.h b/src/include/window.h index 6fa21f238..e87439086 100644 --- a/src/include/window.h +++ b/src/include/window.h @@ -63,5 +63,6 @@ void meta_window_activate (MetaWindow *window,guint32 current_time); void meta_window_activate_with_workspace (MetaWindow *window, guint32 current_time, MetaWorkspace *workspace); +const char * meta_window_get_description (MetaWindow *window); #endif