diff --git a/ChangeLog b/ChangeLog index 9fcbdb9a9..acec618ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,34 @@ +2003-06-12 Rob Adams + + Remove legacy support for Gnome 1 hints, since we deem it unlikely + that anyone is running a current metacity with Gnome 1. The + removed hints are _WIN_WORKSPACE, _WIN_LAYER, _WIN_PROTOCOLS, + _WIN_SUPPORTING_WM_CHECK, and _WIN_HINTS. + + * display.c (meta_display_open): remove hints + + * display.h: remove atoms for hints + + * screen.c (set_wm_check_hint): don't set legacy hint + (set_supported_hint): don't set legacy hint + + * window-props.c (init_win_workspace): removed + (reload_win_workspace): removed + (meta_display_init_window_prop_hooks): remove hints + + * window.h: remove do_not_cover flag + + * window.c: remove GnomeWinHints enum + (recalc_do_not_cover_struts): removed + (meta_window_new): don't initialize removed flags or compute + legacy struts + (move_resize_cmp): removed + (idle_move_resize): Don't bother sorting the idle queue + (meta_window_client_message): don't set legacy hint + (process_property_notify): remove hints + (update_net_wm_type): don't fall back to WIN_LAYER hint + (update_struts): remove legacy struts + 2003-06-12 Havoc Pennington * src/display.c (event_callback): make raise-on-click explicitly diff --git a/src/display.c b/src/display.c index 764d5ee99..38e3b15da 100644 --- a/src/display.c +++ b/src/display.c @@ -216,10 +216,6 @@ meta_display_open (const char *name) "_NET_CLIENT_LIST_STACKING", "_NET_WM_STATE_SKIP_TASKBAR", "_NET_WM_STATE_SKIP_PAGER", - "_WIN_WORKSPACE", - "_WIN_LAYER", - "_WIN_PROTOCOLS", - "_WIN_SUPPORTING_WM_CHECK", "_NET_WM_ICON_NAME", "_NET_WM_ICON", "_NET_WM_ICON_GEOMETRY", @@ -230,7 +226,6 @@ meta_display_open (const char *name) "_NET_ACTIVE_WINDOW", "_METACITY_RESTART_MESSAGE", "_NET_WM_STRUT", - "_WIN_HINTS", "_METACITY_RELOAD_THEME_MESSAGE", "_METACITY_SET_KEYBINDINGS_MESSAGE", "_NET_WM_STATE_HIDDEN", @@ -363,59 +358,54 @@ meta_display_open (const char *name) display->atom_net_client_list_stacking = atoms[29]; display->atom_net_wm_state_skip_taskbar = atoms[30]; display->atom_net_wm_state_skip_pager = atoms[31]; - display->atom_win_workspace = atoms[32]; - display->atom_win_layer = atoms[33]; - display->atom_win_protocols = atoms[34]; - display->atom_win_supporting_wm_check = atoms[35]; - display->atom_net_wm_icon_name = atoms[36]; - display->atom_net_wm_icon = atoms[37]; - display->atom_net_wm_icon_geometry = atoms[38]; - display->atom_utf8_string = atoms[39]; - display->atom_wm_icon_size = atoms[40]; - display->atom_kwm_win_icon = atoms[41]; - display->atom_net_wm_moveresize = atoms[42]; - display->atom_net_active_window = atoms[43]; - display->atom_metacity_restart_message = atoms[44]; - display->atom_net_wm_strut = atoms[45]; - display->atom_win_hints = atoms[46]; - display->atom_metacity_reload_theme_message = atoms[47]; - display->atom_metacity_set_keybindings_message = atoms[48]; - display->atom_net_wm_state_hidden = atoms[49]; - display->atom_net_wm_window_type_utility = atoms[50]; - display->atom_net_wm_window_type_splash = atoms[51]; - display->atom_net_wm_state_fullscreen = atoms[52]; - display->atom_net_wm_ping = atoms[53]; - display->atom_net_wm_pid = atoms[54]; - display->atom_wm_client_machine = atoms[55]; - display->atom_net_workarea = atoms[56]; - display->atom_net_showing_desktop = atoms[57]; - display->atom_net_desktop_layout = atoms[58]; - display->atom_manager = atoms[59]; - display->atom_targets = atoms[60]; - display->atom_multiple = atoms[61]; - display->atom_timestamp = atoms[62]; - display->atom_version = atoms[63]; - display->atom_atom_pair = atoms[64]; - display->atom_net_desktop_names = atoms[65]; - display->atom_net_wm_allowed_actions = atoms[66]; - display->atom_net_wm_action_move = atoms[67]; - display->atom_net_wm_action_resize = atoms[68]; - display->atom_net_wm_action_shade = atoms[69]; - display->atom_net_wm_action_stick = atoms[70]; - display->atom_net_wm_action_maximize_horz = atoms[71]; - display->atom_net_wm_action_maximize_vert = atoms[72]; - display->atom_net_wm_action_change_desktop = atoms[73]; - display->atom_net_wm_action_close = atoms[74]; - display->atom_net_wm_state_above = atoms[75]; - display->atom_net_wm_state_below = atoms[76]; - display->atom_net_startup_id = atoms[77]; - display->atom_metacity_toggle_verbose = atoms[78]; - display->atom_metacity_update_counter = atoms[79]; - display->atom_sync_counter = atoms[80]; - display->atom_gnome_panel_action = atoms[81]; - display->atom_gnome_panel_action_main_menu = atoms[82]; - display->atom_gnome_panel_action_run_dialog = atoms[83]; - display->atom_metacity_sentinel = atoms[84]; + display->atom_net_wm_icon_name = atoms[32]; + display->atom_net_wm_icon = atoms[33]; + display->atom_net_wm_icon_geometry = atoms[34]; + display->atom_utf8_string = atoms[35]; + display->atom_wm_icon_size = atoms[36]; + display->atom_kwm_win_icon = atoms[37]; + display->atom_net_wm_moveresize = atoms[38]; + display->atom_net_active_window = atoms[39]; + display->atom_metacity_restart_message = atoms[40]; + display->atom_net_wm_strut = atoms[41]; + display->atom_metacity_reload_theme_message = atoms[42]; + display->atom_metacity_set_keybindings_message = atoms[43]; + display->atom_net_wm_state_hidden = atoms[44]; + display->atom_net_wm_window_type_utility = atoms[45]; + display->atom_net_wm_window_type_splash = atoms[46]; + display->atom_net_wm_state_fullscreen = atoms[47]; + display->atom_net_wm_ping = atoms[48]; + display->atom_net_wm_pid = atoms[49]; + display->atom_wm_client_machine = atoms[50]; + display->atom_net_workarea = atoms[51]; + display->atom_net_showing_desktop = atoms[52]; + display->atom_net_desktop_layout = atoms[53]; + display->atom_manager = atoms[54]; + display->atom_targets = atoms[55]; + display->atom_multiple = atoms[56]; + display->atom_timestamp = atoms[57]; + display->atom_version = atoms[58]; + display->atom_atom_pair = atoms[59]; + display->atom_net_desktop_names = atoms[60]; + display->atom_net_wm_allowed_actions = atoms[61]; + display->atom_net_wm_action_move = atoms[62]; + display->atom_net_wm_action_resize = atoms[63]; + display->atom_net_wm_action_shade = atoms[64]; + display->atom_net_wm_action_stick = atoms[65]; + display->atom_net_wm_action_maximize_horz = atoms[66]; + display->atom_net_wm_action_maximize_vert = atoms[67]; + display->atom_net_wm_action_change_desktop = atoms[68]; + display->atom_net_wm_action_close = atoms[69]; + display->atom_net_wm_state_above = atoms[70]; + display->atom_net_wm_state_below = atoms[71]; + display->atom_net_startup_id = atoms[72]; + display->atom_metacity_toggle_verbose = atoms[73]; + display->atom_metacity_update_counter = atoms[74]; + display->atom_sync_counter = atoms[75]; + display->atom_gnome_panel_action = atoms[76]; + display->atom_gnome_panel_action_main_menu = atoms[77]; + display->atom_gnome_panel_action_run_dialog = atoms[78]; + display->atom_metacity_sentinel = atoms[79]; display->prop_hooks = NULL; meta_display_init_window_prop_hooks (display); @@ -563,20 +553,9 @@ meta_display_open (const char *name) display->leader_window, display->atom_net_wm_name, "Metacity"); - { - /* The legacy GNOME hint is to set a cardinal which is the window - * id of the supporting_wm_check window on the supporting_wm_check - * window itself - */ gulong data[1]; - data[0] = display->leader_window; - XChangeProperty (display->xdisplay, - display->leader_window, - display->atom_win_supporting_wm_check, - XA_CARDINAL, - 32, PropModeReplace, (guchar*) data, 1); XChangeProperty (display->xdisplay, display->leader_window, @@ -584,7 +563,7 @@ meta_display_open (const char *name) XA_WINDOW, 32, PropModeReplace, (guchar*) data, 1); } - + meta_display_grab (display); /* Now manage all existing windows */ diff --git a/src/display.h b/src/display.h index cea930036..6265a914e 100644 --- a/src/display.h +++ b/src/display.h @@ -120,10 +120,6 @@ struct _MetaDisplay Atom atom_net_client_list_stacking; Atom atom_net_wm_state_skip_taskbar; Atom atom_net_wm_state_skip_pager; - Atom atom_win_workspace; - Atom atom_win_layer; - Atom atom_win_protocols; - Atom atom_win_supporting_wm_check; Atom atom_net_wm_icon_name; Atom atom_net_wm_icon; Atom atom_net_wm_icon_geometry; @@ -134,7 +130,6 @@ struct _MetaDisplay Atom atom_net_active_window; Atom atom_metacity_restart_message; Atom atom_net_wm_strut; - Atom atom_win_hints; Atom atom_metacity_reload_theme_message; Atom atom_metacity_set_keybindings_message; Atom atom_net_wm_state_hidden; diff --git a/src/screen.c b/src/screen.c index e589e32f6..1ba0da7e1 100644 --- a/src/screen.c +++ b/src/screen.c @@ -75,16 +75,6 @@ set_wm_check_hint (MetaScreen *screen) XA_WINDOW, 32, PropModeReplace, (guchar*) data, 1); - /* Legacy GNOME hint (uses cardinal, dunno why) */ - - /* do this after setting up window fully, to avoid races - * with clients listening to property notify on root. - */ - XChangeProperty (screen->display->xdisplay, screen->xroot, - screen->display->atom_win_supporting_wm_check, - XA_CARDINAL, - 32, PropModeReplace, (guchar*) data, 1); - return Success; } @@ -145,14 +135,6 @@ set_supported_hint (MetaScreen *screen) screen->display->atom_net_supported, XA_ATOM, 32, PropModeReplace, (guchar*) atoms, N_SUPPORTED); - - /* Set legacy GNOME hints */ - atoms[0] = screen->display->atom_win_layer; - - XChangeProperty (screen->display->xdisplay, screen->xroot, - screen->display->atom_win_protocols, - XA_ATOM, - 32, PropModeReplace, (guchar*) atoms, N_WIN_SUPPORTED); return Success; #undef N_SUPPORTED diff --git a/src/window-props.c b/src/window-props.c index d02040530..a8e7589a4 100644 --- a/src/window-props.c +++ b/src/window-props.c @@ -354,40 +354,6 @@ reload_net_wm_desktop (MetaWindow *window, } } -static void -init_win_workspace (MetaDisplay *display, - Atom property, - MetaPropValue *value) -{ - value->type = META_PROP_VALUE_CARDINAL; - value->atom = display->atom_win_workspace; -} - -static void -reload_win_workspace (MetaWindow *window, - MetaPropValue *value) -{ - if (value->type != META_PROP_VALUE_INVALID) - { - meta_topic (META_DEBUG_PLACEMENT, - "Read legacy GNOME workspace prop %d for %s\n", - (int) value->v.cardinal, window->desc); - - if (window->initial_workspace_set) - { - meta_topic (META_DEBUG_PLACEMENT, - "Ignoring legacy GNOME workspace prop %d for %s as we already set initial workspace\n", - (int) value->v.cardinal, window->desc); - } - else - { - window->initial_workspace_set = TRUE; - window->initial_workspace = value->v.cardinal; - } - } -} - - static void init_net_startup_id (MetaDisplay *display, Atom property, @@ -848,7 +814,7 @@ reload_wm_hints (MetaWindow *window, -#define N_HOOKS 25 +#define N_HOOKS 22 void meta_display_init_window_prop_hooks (MetaDisplay *display) @@ -938,31 +904,16 @@ meta_display_init_window_prop_hooks (MetaDisplay *display) hooks[i].reload_func = NULL; ++i; - hooks[i].property = display->atom_win_layer; - hooks[i].init_func = NULL; - hooks[i].reload_func = NULL; - ++i; - hooks[i].property = display->atom_net_wm_desktop; hooks[i].init_func = init_net_wm_desktop; hooks[i].reload_func = reload_net_wm_desktop; ++i; - hooks[i].property = display->atom_win_workspace; - hooks[i].init_func = init_win_workspace; - hooks[i].reload_func = reload_win_workspace; - ++i; - hooks[i].property = display->atom_net_wm_strut; hooks[i].init_func = NULL; hooks[i].reload_func = NULL; ++i; - hooks[i].property = display->atom_win_hints; - hooks[i].init_func = NULL; - hooks[i].reload_func = NULL; - ++i; - hooks[i].property = display->atom_net_startup_id; hooks[i].init_func = init_net_startup_id; hooks[i].reload_func = reload_net_startup_id; diff --git a/src/window.c b/src/window.c index 565c31dd5..035fad0ad 100644 --- a/src/window.c +++ b/src/window.c @@ -54,16 +54,6 @@ typedef enum META_USER_MOVE_RESIZE = 1 << 2 } MetaMoveResizeFlags; -typedef enum -{ - WIN_HINTS_SKIP_FOCUS = (1<<0), /* "alt-tab" skips this win */ - WIN_HINTS_SKIP_WINLIST = (1<<1), /* not in win list */ - WIN_HINTS_SKIP_TASKBAR = (1<<2), /* not on taskbar */ - WIN_HINTS_GROUP_TRANSIENT = (1<<3), /* ??????? */ - WIN_HINTS_FOCUS_ON_CLICK = (1<<4), /* app only accepts focus when clicked */ - WIN_HINTS_DO_NOT_COVER = (1<<5) /* attempt to not cover this window */ -} GnomeWinHints; - static int destroying_windows_disallowed = 0; @@ -77,7 +67,6 @@ static void update_net_wm_type (MetaWindow *window); static void update_struts (MetaWindow *window); static void recalc_window_type (MetaWindow *window); static void recalc_window_features (MetaWindow *window); -static void recalc_do_not_cover_struts(MetaWindow *window); static void invalidate_work_areas (MetaWindow *window); static void set_wm_state (MetaWindow *window, int state); @@ -192,7 +181,7 @@ meta_window_new (MetaDisplay *display, MetaWorkspace *space; gulong existing_wm_state; gulong event_mask; -#define N_INITIAL_PROPS 13 +#define N_INITIAL_PROPS 12 Atom initial_props[N_INITIAL_PROPS]; int i; gboolean has_shape; @@ -491,7 +480,6 @@ meta_window_new (MetaDisplay *display, window->type_atom = None; window->has_struts = FALSE; - window->do_not_cover = FALSE; window->left_strut = 0; window->right_strut = 0; window->top_strut = 0; @@ -520,7 +508,6 @@ meta_window_new (MetaDisplay *display, initial_props[i++] = display->atom_net_wm_icon_name; initial_props[i++] = XA_WM_ICON_NAME; initial_props[i++] = display->atom_net_wm_desktop; - initial_props[i++] = display->atom_win_workspace; initial_props[i++] = display->atom_net_startup_id; initial_props[i++] = display->atom_metacity_update_counter; initial_props[i++] = XA_WM_NORMAL_HINTS; @@ -2609,22 +2596,6 @@ meta_window_move_resize_internal (MetaWindow *window, meta_topic (META_DEBUG_GEOMETRY, "Size/position not modified\n"); } - /* Update struts for new window size */ - if (window->do_not_cover && (need_resize_client || need_move_client)) - { - recalc_do_not_cover_struts (window); - - /* Does a resize on all windows on entire current workspace, - * would be an infinite loop except for need_resize_client - * above. We rely on reaching an equilibrium state, which - * is somewhat fragile, though. - */ - - meta_topic (META_DEBUG_WORKAREA, "Window %s resized so invalidating its work areas\n", - window->desc); - invalidate_work_areas (window); - } - meta_window_refresh_resize_popup (window); /* Invariants leaving this function are: @@ -2799,23 +2770,6 @@ meta_window_fill_vertical (MetaWindow *window) static guint move_resize_idle = 0; static GSList *move_resize_pending = NULL; -/* We want to put windows whose size/pos affects other - * windows earlier in the queue, for efficiency. - */ -static int -move_resize_cmp (gconstpointer a, gconstpointer b) -{ - MetaWindow *aw = (gpointer) a; - MetaWindow *bw = (gpointer) b; - - if (aw->do_not_cover && !bw->do_not_cover) - return -1; /* aw before bw */ - else if (!aw->do_not_cover && bw->do_not_cover) - return 1; - else - return 0; -} - static gboolean idle_move_resize (gpointer data) { @@ -2834,8 +2788,6 @@ idle_move_resize (gpointer data) move_resize_idle = 0; destroying_windows_disallowed += 1; - - copy = g_slist_sort (copy, move_resize_cmp); tmp = copy; while (tmp != NULL) @@ -3884,46 +3836,6 @@ meta_window_client_message (MetaWindow *window, return TRUE; } - else if (event->xclient.message_type == - display->atom_win_hints) - { - /* gnome-winhints.c seems to indicate that the hints are - * in l[1], though god knows why it's like that - */ - gulong data[1]; - - meta_verbose ("_WIN_HINTS client message, hints: %ld\n", - event->xclient.data.l[1]); - - if (event->xclient.data.l[1] & WIN_HINTS_DO_NOT_COVER) - { - meta_topic (META_DEBUG_WORKAREA, - "Setting WIN_HINTS_DO_NOT_COVER\n"); - - data[0] = WIN_HINTS_DO_NOT_COVER; - - meta_error_trap_push (window->display); - XChangeProperty (window->display->xdisplay, - window->xwindow, window->display->atom_win_hints, - XA_CARDINAL, 32, PropModeReplace, - (unsigned char *)data, 1); - meta_error_trap_pop (window->display, FALSE); - } - else - { - meta_topic (META_DEBUG_WORKAREA, - "Unsetting WIN_HINTS_DO_NOT_COVER\n"); - - data[0] = 0; - - meta_error_trap_push (window->display); - XDeleteProperty (window->display->xdisplay, - window->xwindow, window->display->atom_win_hints); - meta_error_trap_pop (window->display, FALSE); - } - - return TRUE; - } return FALSE; } @@ -4184,11 +4096,9 @@ process_property_notify (MetaWindow *window, 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_window_type || - /* update_net_wm_type falls back to this */ - event->atom == window->display->atom_win_layer) + window->display->atom_net_wm_window_type) { - meta_verbose ("Property notify on %s for NET_WM_WINDOW_TYPE or WIN_LAYER\n", window->desc); + meta_verbose ("Property notify on %s for NET_WM_WINDOW_TYPE\n", window->desc); update_net_wm_type (window); } else if (event->atom == window->display->atom_net_wm_icon) @@ -4213,11 +4123,6 @@ process_property_notify (MetaWindow *window, meta_verbose ("Property notify on %s for _NET_WM_STRUT\n", window->desc); update_struts (window); } - else if (event->atom == window->display->atom_win_hints) - { - meta_verbose ("Property notify on %s for _WIN_HINTS\n", window->desc); - update_struts (window); - } else if (event->atom == window->display->atom_net_startup_id) { meta_verbose ("Property notify on %s for _NET_STARTUP_ID\n", window->desc); @@ -4687,41 +4592,12 @@ update_net_wm_type (MetaWindow *window) n_atoms = 0; atoms = NULL; - if (!meta_prop_get_atom_list (window->display, window->xwindow, - window->display->atom_net_wm_window_type, - &atoms, &n_atoms)) - { - /* Fall back to WIN_LAYER */ - gulong layer = WIN_LAYER_NORMAL; + meta_prop_get_atom_list (window->display, window->xwindow, + window->display->atom_net_wm_window_type, + &atoms, &n_atoms); - if (meta_prop_get_cardinal (window->display, - window->xwindow, - window->display->atom_win_layer, - &layer)) - { - meta_verbose ("%s falling back to _WIN_LAYER hint, layer %ld\n", - window->desc, layer); - switch (layer) - { - case WIN_LAYER_DESKTOP: - window->type_atom = - window->display->atom_net_wm_window_type_desktop; - break; - case WIN_LAYER_NORMAL: - window->type_atom = - window->display->atom_net_wm_window_type_normal; - break; - case WIN_LAYER_DOCK: - window->type_atom = - window->display->atom_net_wm_window_type_dock; - break; - default: - break; - } - } - - recalc_window_type (window); - } + /* Fall back to a normal window */ + window->type_atom = window->display->atom_net_wm_window_type_normal; i = 0; while (i < n_atoms) @@ -4941,7 +4817,6 @@ update_struts (MetaWindow *window) gulong *struts = NULL; int nitems; gboolean old_has_struts; - gboolean old_do_not_cover; int old_left; int old_right; int old_top; @@ -4950,14 +4825,12 @@ update_struts (MetaWindow *window) meta_verbose ("Updating struts for %s\n", window->desc); old_has_struts = window->has_struts; - old_do_not_cover = window->do_not_cover; old_left = window->left_strut; old_right = window->right_strut; old_top = window->top_strut; old_bottom = window->bottom_strut; window->has_struts = FALSE; - window->do_not_cover = FALSE; window->left_strut = 0; window->right_strut = 0; window->top_strut = 0; @@ -5007,42 +4880,8 @@ update_struts (MetaWindow *window) meta_verbose ("No _NET_WM_STRUT property for %s\n", window->desc); } - - if (!window->has_struts) - { - /* Try _WIN_HINTS */ - gulong hints; - - if (meta_prop_get_cardinal (window->display, - window->xwindow, - window->display->atom_win_hints, - &hints)) - { - if (hints & WIN_HINTS_DO_NOT_COVER) - { - window->has_struts = TRUE; - window->do_not_cover = TRUE; - recalc_do_not_cover_struts (window); - - meta_verbose ("Using _WIN_HINTS struts %d %d %d %d for window %s\n", - window->left_strut, window->right_strut, - window->top_strut, window->bottom_strut, - window->desc); - } - else - { - meta_verbose ("DO_NOT_COVER hint not set in _WIN_HINTS\n"); - } - } - else - { - meta_verbose ("No _WIN_HINTS property on %s\n", - window->desc); - } - } if (old_has_struts != window->has_struts || - old_do_not_cover != window->do_not_cover || old_left != window->left_strut || old_right != window->right_strut || old_top != window->top_strut || @@ -5060,61 +4899,6 @@ update_struts (MetaWindow *window) } } -static void -recalc_do_not_cover_struts (MetaWindow *window) -{ - if (window->do_not_cover) - { - /* We only understand windows that are aligned to - * a screen edge - */ - gboolean horizontal; - gboolean on_left_edge; - gboolean on_right_edge; - gboolean on_bottom_edge; - gboolean on_top_edge; - - window->left_strut = 0; - window->right_strut = 0; - window->top_strut = 0; - window->bottom_strut = 0; - - on_left_edge = window->rect.x == 0; - on_right_edge = (window->rect.x + window->rect.width) == - window->screen->width; - on_top_edge = window->rect.y == 0; - on_bottom_edge = (window->rect.y + window->rect.height) == - window->screen->height; - - /* cheesy heuristic to decide where the strut goes */ - if (on_left_edge && on_right_edge && on_bottom_edge) - horizontal = TRUE; - else if (on_left_edge && on_right_edge && on_top_edge) - horizontal = TRUE; - else if (on_top_edge && on_bottom_edge && on_left_edge) - horizontal = FALSE; - else if (on_top_edge && on_bottom_edge && on_right_edge) - horizontal = FALSE; - else - horizontal = window->rect.width > window->rect.height; - - if (horizontal) - { - if (on_top_edge) - window->top_strut = window->rect.height; - else if (on_bottom_edge) - window->bottom_strut = window->rect.height; - } - else - { - if (on_left_edge) - window->left_strut = window->rect.width; - else if (on_right_edge) - window->right_strut = window->rect.width; - } - } -} - static void recalc_window_type (MetaWindow *window) { diff --git a/src/window.h b/src/window.h index 5477367a9..47617779a 100644 --- a/src/window.h +++ b/src/window.h @@ -213,8 +213,6 @@ struct _MetaWindow /* Has nonzero struts */ guint has_struts : 1; - /* Struts are from the _WIN_HINTS do not cover deal */ - guint do_not_cover : 1; /* Transient parent is a root window */ guint transient_parent_is_root_window : 1;