mirror of
https://github.com/brl/mutter.git
synced 2024-11-27 02:20:43 -05:00
window: Move xgroup_leader to WindowX11
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3211>
This commit is contained in:
parent
7d6e7773bf
commit
9e150fda42
@ -204,7 +204,6 @@ struct _MetaWindow
|
|||||||
char *gtk_menubar_object_path;
|
char *gtk_menubar_object_path;
|
||||||
|
|
||||||
Window xtransient_for;
|
Window xtransient_for;
|
||||||
Window xgroup_leader;
|
|
||||||
MetaWindow *transient_for;
|
MetaWindow *transient_for;
|
||||||
|
|
||||||
/* Initial workspace property */
|
/* Initial workspace property */
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "x11/group-props.h"
|
#include "x11/group-props.h"
|
||||||
#include "x11/meta-x11-display-private.h"
|
#include "x11/meta-x11-display-private.h"
|
||||||
#include "x11/window-x11.h"
|
#include "x11/window-x11.h"
|
||||||
|
#include "x11/window-x11-private.h"
|
||||||
|
|
||||||
static MetaGroup*
|
static MetaGroup*
|
||||||
meta_group_new (MetaX11Display *x11_display,
|
meta_group_new (MetaX11Display *x11_display,
|
||||||
@ -141,16 +142,15 @@ meta_window_get_group (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_compute_group (MetaWindow* window)
|
meta_window_compute_group (MetaWindow *window)
|
||||||
{
|
{
|
||||||
MetaGroup *group;
|
MetaGroup *group = NULL;
|
||||||
MetaWindow *ancestor;
|
MetaWindow *ancestor;
|
||||||
MetaX11Display *x11_display = window->display->x11_display;
|
MetaX11Display *x11_display = window->display->x11_display;
|
||||||
|
Window win_leader = meta_window_x11_get_xgroup_leader (window);
|
||||||
|
|
||||||
/* use window->xwindow if no window->xgroup_leader */
|
/* use window->xwindow if no window->xgroup_leader */
|
||||||
|
|
||||||
group = NULL;
|
|
||||||
|
|
||||||
/* Determine the ancestor of the window; its group setting will override the
|
/* Determine the ancestor of the window; its group setting will override the
|
||||||
* normal grouping rules; see bug 328211.
|
* normal grouping rules; see bug 328211.
|
||||||
*/
|
*/
|
||||||
@ -160,9 +160,9 @@ meta_window_compute_group (MetaWindow* window)
|
|||||||
{
|
{
|
||||||
if (ancestor != window)
|
if (ancestor != window)
|
||||||
group = ancestor->group;
|
group = ancestor->group;
|
||||||
else if (window->xgroup_leader != None)
|
else if (win_leader != None)
|
||||||
group = g_hash_table_lookup (x11_display->groups_by_leader,
|
group = g_hash_table_lookup (x11_display->groups_by_leader,
|
||||||
&window->xgroup_leader);
|
&win_leader);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Window xwindow = meta_window_x11_get_xwindow (window);
|
Window xwindow = meta_window_x11_get_xwindow (window);
|
||||||
@ -178,12 +178,14 @@ meta_window_compute_group (MetaWindow* window)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ancestor != window && ancestor->xgroup_leader != None)
|
Window ancestor_leader = meta_window_x11_get_xgroup_leader (ancestor);
|
||||||
|
|
||||||
|
if (ancestor != window && ancestor_leader != None)
|
||||||
group = meta_group_new (x11_display,
|
group = meta_group_new (x11_display,
|
||||||
ancestor->xgroup_leader);
|
ancestor_leader);
|
||||||
else if (window->xgroup_leader != None)
|
else if (win_leader != None)
|
||||||
group = meta_group_new (x11_display,
|
group = meta_group_new (x11_display,
|
||||||
window->xgroup_leader);
|
win_leader);
|
||||||
else
|
else
|
||||||
group = meta_group_new (x11_display,
|
group = meta_group_new (x11_display,
|
||||||
meta_window_x11_get_xwindow (window));
|
meta_window_x11_get_xwindow (window));
|
||||||
|
@ -1617,12 +1617,12 @@ reload_wm_hints (MetaWindow *window,
|
|||||||
Window old_group_leader;
|
Window old_group_leader;
|
||||||
gboolean urgent;
|
gboolean urgent;
|
||||||
|
|
||||||
old_group_leader = window->xgroup_leader;
|
old_group_leader = priv->xgroup_leader;
|
||||||
|
|
||||||
/* Fill in defaults */
|
/* Fill in defaults */
|
||||||
window->input = TRUE;
|
window->input = TRUE;
|
||||||
window->initially_iconic = FALSE;
|
window->initially_iconic = FALSE;
|
||||||
window->xgroup_leader = None;
|
priv->xgroup_leader = None;
|
||||||
priv->wm_hints_pixmap = None;
|
priv->wm_hints_pixmap = None;
|
||||||
priv->wm_hints_mask = None;
|
priv->wm_hints_mask = None;
|
||||||
urgent = FALSE;
|
urgent = FALSE;
|
||||||
@ -1638,7 +1638,7 @@ reload_wm_hints (MetaWindow *window,
|
|||||||
window->initially_iconic = (hints->initial_state == IconicState);
|
window->initially_iconic = (hints->initial_state == IconicState);
|
||||||
|
|
||||||
if (hints->flags & WindowGroupHint)
|
if (hints->flags & WindowGroupHint)
|
||||||
window->xgroup_leader = hints->window_group;
|
priv->xgroup_leader = hints->window_group;
|
||||||
|
|
||||||
if (hints->flags & IconPixmapHint)
|
if (hints->flags & IconPixmapHint)
|
||||||
priv->wm_hints_pixmap = hints->icon_pixmap;
|
priv->wm_hints_pixmap = hints->icon_pixmap;
|
||||||
@ -1651,15 +1651,15 @@ reload_wm_hints (MetaWindow *window,
|
|||||||
|
|
||||||
meta_verbose ("Read WM_HINTS input: %d iconic: %d group leader: 0x%lx pixmap: 0x%lx mask: 0x%lx",
|
meta_verbose ("Read WM_HINTS input: %d iconic: %d group leader: 0x%lx pixmap: 0x%lx mask: 0x%lx",
|
||||||
window->input, window->initially_iconic,
|
window->input, window->initially_iconic,
|
||||||
window->xgroup_leader,
|
priv->xgroup_leader,
|
||||||
priv->wm_hints_pixmap,
|
priv->wm_hints_pixmap,
|
||||||
priv->wm_hints_mask);
|
priv->wm_hints_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (window->xgroup_leader != old_group_leader)
|
if (priv->xgroup_leader != old_group_leader)
|
||||||
{
|
{
|
||||||
meta_verbose ("Window %s changed its group leader to 0x%lx",
|
meta_verbose ("Window %s changed its group leader to 0x%lx",
|
||||||
window->desc, window->xgroup_leader);
|
window->desc, priv->xgroup_leader);
|
||||||
|
|
||||||
meta_window_group_leader_changed (window);
|
meta_window_group_leader_changed (window);
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ struct _MetaWindowX11Private
|
|||||||
|
|
||||||
Window xwindow;
|
Window xwindow;
|
||||||
Window xclient_leader;
|
Window xclient_leader;
|
||||||
|
Window xgroup_leader;
|
||||||
|
|
||||||
/* Bypass compositor hints */
|
/* Bypass compositor hints */
|
||||||
MetaBypassCompositorHint bypass_compositor;
|
MetaBypassCompositorHint bypass_compositor;
|
||||||
@ -90,4 +91,6 @@ MetaWindowX11Private * meta_window_x11_get_private (MetaWindowX11 *window_x11);
|
|||||||
|
|
||||||
void meta_window_x11_initialize_state (MetaWindow *window);
|
void meta_window_x11_initialize_state (MetaWindow *window);
|
||||||
|
|
||||||
|
Window meta_window_x11_get_xgroup_leader (MetaWindow *window);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -558,7 +558,7 @@ meta_window_x11_manage (MetaWindow *window)
|
|||||||
|
|
||||||
/* assign the window to its group, or create a new group if needed */
|
/* assign the window to its group, or create a new group if needed */
|
||||||
window->group = NULL;
|
window->group = NULL;
|
||||||
window->xgroup_leader = None;
|
priv->xgroup_leader = None;
|
||||||
meta_window_compute_group (window);
|
meta_window_compute_group (window);
|
||||||
|
|
||||||
meta_window_load_initial_properties (window);
|
meta_window_load_initial_properties (window);
|
||||||
@ -2002,6 +2002,10 @@ static gboolean
|
|||||||
meta_window_x11_set_transient_for (MetaWindow *window,
|
meta_window_x11_set_transient_for (MetaWindow *window,
|
||||||
MetaWindow *parent)
|
MetaWindow *parent)
|
||||||
{
|
{
|
||||||
|
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||||
|
MetaWindowX11Private *priv =
|
||||||
|
meta_window_x11_get_instance_private (window_x11);
|
||||||
|
|
||||||
meta_window_x11_recalc_window_type (window);
|
meta_window_x11_recalc_window_type (window);
|
||||||
if (!window->constructing)
|
if (!window->constructing)
|
||||||
{
|
{
|
||||||
@ -2027,8 +2031,8 @@ meta_window_x11_set_transient_for (MetaWindow *window,
|
|||||||
* in programs such as xmms-- see #328211.
|
* in programs such as xmms-- see #328211.
|
||||||
*/
|
*/
|
||||||
if (window->xtransient_for != None &&
|
if (window->xtransient_for != None &&
|
||||||
window->xgroup_leader != None &&
|
priv->xgroup_leader != None &&
|
||||||
window->xtransient_for != window->xgroup_leader)
|
window->xtransient_for != priv->xgroup_leader)
|
||||||
meta_window_group_leader_changed (window);
|
meta_window_group_leader_changed (window);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -4412,3 +4416,17 @@ meta_window_x11_get_xwindow (MetaWindow *window)
|
|||||||
|
|
||||||
return priv->xwindow;
|
return priv->xwindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Window
|
||||||
|
meta_window_x11_get_xgroup_leader (MetaWindow *window)
|
||||||
|
{
|
||||||
|
MetaWindowX11 *window_x11;
|
||||||
|
MetaWindowX11Private *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (META_IS_WINDOW (window), None);
|
||||||
|
|
||||||
|
window_x11 = META_WINDOW_X11 (window);
|
||||||
|
priv = meta_window_x11_get_instance_private (window_x11);
|
||||||
|
|
||||||
|
return priv->xgroup_leader;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user