window-props: Use the standard property type system for _NET_WM_WINDOW_TYPE
This commit is contained in:
parent
031154a400
commit
a7b7213017
@ -231,7 +231,41 @@ reload_net_wm_window_type (MetaWindow *window,
|
|||||||
MetaPropValue *value,
|
MetaPropValue *value,
|
||||||
gboolean initial)
|
gboolean initial)
|
||||||
{
|
{
|
||||||
meta_window_x11_update_net_wm_type (window);
|
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||||
|
MetaWindowX11Private *priv = window_x11->priv;
|
||||||
|
|
||||||
|
if (value->type != META_PROP_VALUE_INVALID)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < value->v.atom_list.n_atoms; i++)
|
||||||
|
{
|
||||||
|
Atom atom = value->v.atom_list.atoms[i];
|
||||||
|
|
||||||
|
/* We break as soon as we find one we recognize,
|
||||||
|
* supposed to prefer those near the front of the list
|
||||||
|
*/
|
||||||
|
if (atom == window->display->atom__NET_WM_WINDOW_TYPE_DESKTOP ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_DOCK ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_TOOLBAR ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_MENU ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_UTILITY ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_SPLASH ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_DIALOG ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_DROPDOWN_MENU ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_POPUP_MENU ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_TOOLTIP ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_NOTIFICATION ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_COMBO ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_DND ||
|
||||||
|
atom == window->display->atom__NET_WM_WINDOW_TYPE_NORMAL)
|
||||||
|
{
|
||||||
|
priv->type_atom = atom;
|
||||||
|
meta_window_x11_recalc_window_type (window);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1701,7 +1735,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
|
|||||||
{ display->atom_WM_CLIENT_LEADER, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
{ display->atom_WM_CLIENT_LEADER, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
||||||
{ display->atom_SM_CLIENT_ID, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
{ display->atom_SM_CLIENT_ID, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
||||||
{ display->atom_WM_WINDOW_ROLE, META_PROP_VALUE_STRING, reload_wm_window_role, TRUE, FALSE },
|
{ display->atom_WM_WINDOW_ROLE, META_PROP_VALUE_STRING, reload_wm_window_role, TRUE, FALSE },
|
||||||
{ display->atom__NET_WM_WINDOW_TYPE, META_PROP_VALUE_INVALID, reload_net_wm_window_type, TRUE, TRUE },
|
{ display->atom__NET_WM_WINDOW_TYPE, META_PROP_VALUE_ATOM_LIST, reload_net_wm_window_type, TRUE, TRUE },
|
||||||
{ display->atom__NET_WM_STRUT, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
|
{ display->atom__NET_WM_STRUT, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
|
||||||
{ display->atom__NET_WM_STRUT_PARTIAL, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
|
{ display->atom__NET_WM_STRUT_PARTIAL, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
|
||||||
{ display->atom__NET_WM_BYPASS_COMPOSITOR, META_PROP_VALUE_CARDINAL, reload_bypass_compositor, FALSE, FALSE },
|
{ display->atom__NET_WM_BYPASS_COMPOSITOR, META_PROP_VALUE_CARDINAL, reload_bypass_compositor, FALSE, FALSE },
|
||||||
|
@ -518,8 +518,6 @@ meta_window_x11_manage (MetaWindow *window)
|
|||||||
if (!window->override_redirect)
|
if (!window->override_redirect)
|
||||||
update_sm_hints (window); /* must come after transient_for */
|
update_sm_hints (window); /* must come after transient_for */
|
||||||
|
|
||||||
meta_window_x11_update_net_wm_type (window);
|
|
||||||
|
|
||||||
if (window->decorated)
|
if (window->decorated)
|
||||||
meta_window_ensure_frame (window);
|
meta_window_ensure_frame (window);
|
||||||
|
|
||||||
@ -1587,77 +1585,6 @@ meta_window_x11_set_net_wm_state (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
meta_window_x11_update_net_wm_type (MetaWindow *window)
|
|
||||||
{
|
|
||||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
|
||||||
MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
|
|
||||||
int n_atoms;
|
|
||||||
Atom *atoms;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
priv->type_atom = None;
|
|
||||||
n_atoms = 0;
|
|
||||||
atoms = NULL;
|
|
||||||
|
|
||||||
meta_prop_get_atom_list (window->display, window->xwindow,
|
|
||||||
window->display->atom__NET_WM_WINDOW_TYPE,
|
|
||||||
&atoms, &n_atoms);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < n_atoms)
|
|
||||||
{
|
|
||||||
/* We break as soon as we find one we recognize,
|
|
||||||
* supposed to prefer those near the front of the list
|
|
||||||
*/
|
|
||||||
if (atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_DESKTOP ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_DOCK ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_TOOLBAR ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_MENU ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_UTILITY ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_SPLASH ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_DIALOG ||
|
|
||||||
atoms[i] ==
|
|
||||||
window->display->atom__NET_WM_WINDOW_TYPE_DROPDOWN_MENU ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_POPUP_MENU ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_TOOLTIP ||
|
|
||||||
atoms[i] ==
|
|
||||||
window->display->atom__NET_WM_WINDOW_TYPE_NOTIFICATION ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_COMBO ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_DND ||
|
|
||||||
atoms[i] == window->display->atom__NET_WM_WINDOW_TYPE_NORMAL)
|
|
||||||
{
|
|
||||||
priv->type_atom = atoms[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
meta_XFree (atoms);
|
|
||||||
|
|
||||||
if (meta_is_verbose ())
|
|
||||||
{
|
|
||||||
char *str;
|
|
||||||
|
|
||||||
str = NULL;
|
|
||||||
if (priv->type_atom != None)
|
|
||||||
{
|
|
||||||
meta_error_trap_push (window->display);
|
|
||||||
str = XGetAtomName (window->display->xdisplay, priv->type_atom);
|
|
||||||
meta_error_trap_pop (window->display);
|
|
||||||
}
|
|
||||||
|
|
||||||
meta_verbose ("Window %s type atom %s\n", window->desc,
|
|
||||||
str ? str : "(none)");
|
|
||||||
|
|
||||||
if (str)
|
|
||||||
meta_XFree (str);
|
|
||||||
}
|
|
||||||
|
|
||||||
meta_window_x11_recalc_window_type (window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_window_set_opaque_region (MetaWindow *window,
|
meta_window_set_opaque_region (MetaWindow *window,
|
||||||
cairo_region_t *region)
|
cairo_region_t *region)
|
||||||
|
@ -55,7 +55,6 @@ void meta_window_x11_destroy_sync_request_alarm (MetaWindow *window);
|
|||||||
void meta_window_x11_update_sync_request_counter (MetaWindow *window,
|
void meta_window_x11_update_sync_request_counter (MetaWindow *window,
|
||||||
gint64 new_counter_value);
|
gint64 new_counter_value);
|
||||||
|
|
||||||
void meta_window_x11_update_net_wm_type (MetaWindow *window);
|
|
||||||
void meta_window_x11_update_opaque_region (MetaWindow *window);
|
void meta_window_x11_update_opaque_region (MetaWindow *window);
|
||||||
void meta_window_x11_update_input_region (MetaWindow *window);
|
void meta_window_x11_update_input_region (MetaWindow *window);
|
||||||
void meta_window_x11_update_shape_region (MetaWindow *window);
|
void meta_window_x11_update_shape_region (MetaWindow *window);
|
||||||
|
Loading…
Reference in New Issue
Block a user