mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
Support _NET_WM_STATE_STICKY (i.e. allow third-party apps to decide
2008-10-23 Thomas Thurman <tthurman@gnome.org> Support _NET_WM_STATE_STICKY (i.e. allow third-party apps to decide whether a window is on all workspaces). Bug found by Ka-Hing Cheung. Closes #557536. * src/core/window.c (set_net_wm_state): report it * src/core/window.c (meta_window_client_message): set sticky if we receive it * src/core/window-props.c: set sticky if we find it * src/core/atomnames.h: add _NET_WM_STATE_STICKY svn path=/trunk/; revision=3991
This commit is contained in:
parent
c91475f20f
commit
ab9bdf228b
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2008-10-23 Thomas Thurman <tthurman@gnome.org>
|
||||||
|
|
||||||
|
Support _NET_WM_STATE_STICKY (i.e. allow third-party apps to decide
|
||||||
|
whether a window is on all workspaces). Bug found by Ka-Hing
|
||||||
|
Cheung. Closes #557536.
|
||||||
|
|
||||||
|
* src/core/window.c (set_net_wm_state): report it
|
||||||
|
* src/core/window.c (meta_window_client_message): set sticky
|
||||||
|
if we receive it
|
||||||
|
* src/core/window-props.c: set sticky if we find it
|
||||||
|
* src/core/atomnames.h: add _NET_WM_STATE_STICKY
|
||||||
|
|
||||||
2008-10-22 Thomas Thurman <tthurman@gnome.org>
|
2008-10-22 Thomas Thurman <tthurman@gnome.org>
|
||||||
|
|
||||||
* src/core/schema-bindings.c: support builds outside tree properly.
|
* src/core/schema-bindings.c: support builds outside tree properly.
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
* again.
|
* again.
|
||||||
*
|
*
|
||||||
* If you also define EWMH_ATOMS_ONLY then you will only get _NET_WM_*
|
* If you also define EWMH_ATOMS_ONLY then you will only get _NET_WM_*
|
||||||
* hints rather than all of them.
|
* atoms rather than all of them.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef item
|
#ifndef item
|
||||||
@ -154,6 +154,7 @@ item(_NET_DESKTOP_VIEWPORT)
|
|||||||
item(_NET_WM_USER_TIME_WINDOW)
|
item(_NET_WM_USER_TIME_WINDOW)
|
||||||
item(_NET_WM_ACTION_ABOVE)
|
item(_NET_WM_ACTION_ABOVE)
|
||||||
item(_NET_WM_ACTION_BELOW)
|
item(_NET_WM_ACTION_BELOW)
|
||||||
|
item(_NET_WM_STATE_STICKY)
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* We apparently never use: */
|
/* We apparently never use: */
|
||||||
|
@ -580,6 +580,8 @@ reload_net_wm_state (MetaWindow *window,
|
|||||||
window->wm_state_below = TRUE;
|
window->wm_state_below = TRUE;
|
||||||
else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_DEMANDS_ATTENTION)
|
else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_DEMANDS_ATTENTION)
|
||||||
window->wm_state_demands_attention = TRUE;
|
window->wm_state_demands_attention = TRUE;
|
||||||
|
else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_STICKY)
|
||||||
|
window->on_all_workspaces = TRUE;
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
@ -1228,7 +1228,7 @@ static void
|
|||||||
set_net_wm_state (MetaWindow *window)
|
set_net_wm_state (MetaWindow *window)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned long data[11];
|
unsigned long data[12];
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
if (window->shaded)
|
if (window->shaded)
|
||||||
@ -1286,6 +1286,11 @@ set_net_wm_state (MetaWindow *window)
|
|||||||
data[i] = window->display->atom__NET_WM_STATE_DEMANDS_ATTENTION;
|
data[i] = window->display->atom__NET_WM_STATE_DEMANDS_ATTENTION;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
if (window->on_all_workspaces)
|
||||||
|
{
|
||||||
|
data[i] = window->display->atom__NET_WM_STATE_STICKY;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
meta_verbose ("Setting _NET_WM_STATE with %d atoms\n", i);
|
meta_verbose ("Setting _NET_WM_STATE with %d atoms\n", i);
|
||||||
|
|
||||||
@ -4933,6 +4938,16 @@ meta_window_client_message (MetaWindow *window,
|
|||||||
meta_window_unset_demands_attention (window);
|
meta_window_unset_demands_attention (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (first == display->atom__NET_WM_STATE_STICKY ||
|
||||||
|
second == display->atom__NET_WM_STATE_STICKY)
|
||||||
|
{
|
||||||
|
if ((action == _NET_WM_STATE_ADD) ||
|
||||||
|
(action == _NET_WM_STATE_TOGGLE && !window->on_all_workspaces))
|
||||||
|
meta_window_stick (window);
|
||||||
|
else
|
||||||
|
meta_window_unstick (window);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else if (event->xclient.message_type ==
|
else if (event->xclient.message_type ==
|
||||||
|
Loading…
Reference in New Issue
Block a user