[metacity] meta_display_list_windows: exclude override-redirect
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] meta_display_list_windows: exclude override-redirect
- Date: Sun, 26 Feb 2017 22:23:57 +0000 (UTC)
commit e5a755ac6d5d81df85ab037a6a5181db95d4353d
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Mon Jun 15 15:32:23 2009 -0400
meta_display_list_windows: exclude override-redirect
Don't include override-redirect windows in the list return by
meta_display_list_windows(), since we almost never want to handle
them when considering "all window" for the display. Add a separate
meta_display_list_all_windows() that includes override-redirect
windows.
http://bugzilla.gnome.org/show_bug.cgi?id=582639
src/core/core.c | 2 +-
src/core/delete.c | 2 +-
src/core/display-private.h | 7 ++++++-
src/core/display.c | 38 +++++++++++++++++++-------------------
src/core/keybindings.c | 2 +-
src/core/place.c | 2 +-
src/core/screen.c | 2 +-
src/core/session.c | 4 ++--
src/core/window.c | 4 ++--
src/core/workspace.c | 3 ++-
10 files changed, 36 insertions(+), 30 deletions(-)
---
diff --git a/src/core/core.c b/src/core/core.c
index d2bef21..50a0b09 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -806,7 +806,7 @@ meta_invalidate_default_icons (void)
if (display == NULL)
return; /* We can validly be called before the display is opened. */
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
for (l = windows; l != NULL; l = l->next)
{
MetaWindow *window = (MetaWindow*)l->data;
diff --git a/src/core/delete.c b/src/core/delete.c
index 831df38..6f6ef71 100644
--- a/src/core/delete.c
+++ b/src/core/delete.c
@@ -242,7 +242,7 @@ meta_window_present_delete_dialog (MetaWindow *window, guint32 timestamp)
* metacity-dialog
*/
- windows = meta_display_list_windows (window->display);
+ windows = meta_display_list_windows (window->display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
{
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 6a488a2..018b251 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -57,6 +57,10 @@ typedef void (* MetaWindowPingFunc) (MetaDisplay *display,
guint32 timestamp,
gpointer user_data);
+typedef enum {
+ META_LIST_DEFAULT = 0, /* normal windows */
+ META_LIST_INCLUDE_OVERRIDE_REDIRECT = 1 << 0, /* normal and O-R */
+} MetaListWindowsFlags;
#define _NET_WM_STATE_REMOVE 0 /* remove/unset property */
#define _NET_WM_STATE_ADD 1 /* add/set property */
@@ -335,7 +339,8 @@ void meta_display_unregister_x_window (MetaDisplay *display,
gboolean meta_display_xwindow_is_a_no_focus_window (MetaDisplay *display,
Window xwindow);
-GSList* meta_display_list_windows (MetaDisplay *display);
+GSList* meta_display_list_windows (MetaDisplay *display,
+ MetaListWindowsFlags flags);
MetaDisplay* meta_display_for_x_display (Display *xdisplay);
MetaDisplay* meta_get_display (void);
diff --git a/src/core/display.c b/src/core/display.c
index feebea5..3ab09de 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -706,15 +706,6 @@ meta_display_open (void)
return TRUE;
}
-static void
-listify_func (gpointer key, gpointer value, gpointer data)
-{
- GSList **listp;
-
- listp = data;
- *listp = g_slist_prepend (*listp, value);
-}
-
static gint
ptrcmp (gconstpointer a, gconstpointer b)
{
@@ -727,16 +718,25 @@ ptrcmp (gconstpointer a, gconstpointer b)
}
GSList*
-meta_display_list_windows (MetaDisplay *display)
+meta_display_list_windows (MetaDisplay *display,
+ MetaListWindowsFlags flags)
{
GSList *winlist;
GSList *tmp;
GSList *prev;
+ GHashTableIter iter;
+ gpointer key, value;
winlist = NULL;
- g_hash_table_foreach (display->window_ids,
- listify_func,
- &winlist);
+ g_hash_table_iter_init (&iter, display->window_ids);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ MetaWindow *window = value;
+
+ if (!window->override_redirect ||
+ (flags & META_LIST_INCLUDE_OVERRIDE_REDIRECT) != 0)
+ winlist = g_slist_prepend (winlist, window);
+ }
/* Uniquify the list, since both frame windows and plain
* windows are in the hash
@@ -3997,7 +3997,7 @@ meta_display_queue_retheme_all_windows (MetaDisplay *display)
GSList* windows;
GSList *tmp;
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
{
@@ -4491,7 +4491,7 @@ meta_display_get_tab_list (MetaDisplay *display,
GSList *windows, *tmp;
MetaWindow *l_window;
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
/* Go through all windows */
tmp = windows;
@@ -4890,7 +4890,7 @@ meta_display_unmanage_windows_for_screen (MetaDisplay *display,
GSList *tmp;
GSList *winlist;
- winlist = meta_display_list_windows (display);
+ winlist = meta_display_list_windows (display, META_LIST_INCLUDE_OVERRIDE_REDIRECT);
winlist = g_slist_sort (winlist, meta_display_stack_cmp);
/* Unmanage all windows */
@@ -4993,7 +4993,7 @@ prefs_changed_callback (MetaPreference pref,
GSList *windows;
GSList *tmp;
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
/* Ungrab all */
tmp = windows;
@@ -5037,7 +5037,7 @@ prefs_changed_callback (MetaPreference pref,
GSList *windows;
GSList *tmp;
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
for (tmp = windows; tmp != NULL; tmp = tmp->next)
{
@@ -5117,7 +5117,7 @@ sanity_check_timestamps (MetaDisplay *display,
display->last_user_time, timestamp);
display->last_user_time = timestamp;
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
{
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 26788eb..228e90c 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -467,7 +467,7 @@ regrab_key_bindings (MetaDisplay *display)
meta_screen_ungrab_keys (display->screen);
meta_screen_grab_keys (display->screen);
- windows = meta_display_list_windows (display);
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
{
diff --git a/src/core/place.c b/src/core/place.c
index d85ee85..525e93d 100644
--- a/src/core/place.c
+++ b/src/core/place.c
@@ -920,7 +920,7 @@ meta_window_place (MetaWindow *window,
GSList *all_windows;
GSList *tmp;
- all_windows = meta_display_list_windows (window->display);
+ all_windows = meta_display_list_windows (window->display, META_LIST_DEFAULT);
tmp = all_windows;
while (tmp != NULL)
diff --git a/src/core/screen.c b/src/core/screen.c
index fd93933..9e93f27 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -2408,7 +2408,7 @@ queue_windows_showing (MetaScreen *screen)
* active_workspace's window list, because the active_workspace's
* window list may not contain the on_all_workspace windows.
*/
- windows = meta_display_list_windows (screen->display);
+ windows = meta_display_list_windows (screen->display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
diff --git a/src/core/session.c b/src/core/session.c
index 0afa342..b88302d 100644
--- a/src/core/session.c
+++ b/src/core/session.c
@@ -880,7 +880,7 @@ save_state (void)
fprintf (outfile, "<metacity_session id=\"%s\">\n",
client_id);
- windows = meta_display_list_windows (meta_get_display ());
+ windows = meta_display_list_windows (meta_get_display (), META_LIST_DEFAULT);
stack_position = 0;
windows = g_slist_sort (windows, meta_display_stack_cmp);
@@ -1758,7 +1758,7 @@ warn_about_lame_clients_and_finish_interact (gboolean shutdown)
GSList *columns = NULL;
GPid pid;
- windows = meta_display_list_windows (meta_get_display ());
+ windows = meta_display_list_windows (meta_get_display (), META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
{
diff --git a/src/core/window.c b/src/core/window.c
index 7ee18fc..bb5afa0 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -4279,7 +4279,7 @@ get_modal_transient (MetaWindow *window)
*/
modal_transient = window;
- windows = meta_display_list_windows (window->display);
+ windows = meta_display_list_windows (window->display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
{
@@ -8108,7 +8108,7 @@ meta_window_foreach_transient (MetaWindow *window,
GSList *windows;
GSList *tmp;
- windows = meta_display_list_windows (window->display);
+ windows = meta_display_list_windows (window->display, META_LIST_DEFAULT);
tmp = windows;
while (tmp != NULL)
diff --git a/src/core/workspace.c b/src/core/workspace.c
index 08e524f..8ab01b1 100644
--- a/src/core/workspace.c
+++ b/src/core/workspace.c
@@ -484,7 +484,8 @@ meta_workspace_list_windows (MetaWorkspace *workspace)
GSList *tmp;
GList *workspace_windows;
- display_windows = meta_display_list_windows (workspace->screen->display);
+ display_windows = meta_display_list_windows (workspace->screen->display,
+ META_LIST_DEFAULT);
workspace_windows = NULL;
tmp = display_windows;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]