metacity r3991 - in trunk: . src/core
- From: tthurman svn gnome org
- To: svn-commits-list gnome org
- Subject: metacity r3991 - in trunk: . src/core
- Date: Thu, 23 Oct 2008 04:09:14 +0000 (UTC)
Author: tthurman
Date: Thu Oct 23 04:09:14 2008
New Revision: 3991
URL: http://svn.gnome.org/viewvc/metacity?rev=3991&view=rev
Log:
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
Modified:
trunk/ChangeLog
trunk/src/core/atomnames.h
trunk/src/core/window-props.c
trunk/src/core/window.c
Modified: trunk/src/core/atomnames.h
==============================================================================
--- trunk/src/core/atomnames.h (original)
+++ trunk/src/core/atomnames.h Thu Oct 23 04:09:14 2008
@@ -33,7 +33,7 @@
* again.
*
* 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
@@ -154,6 +154,7 @@
item(_NET_WM_USER_TIME_WINDOW)
item(_NET_WM_ACTION_ABOVE)
item(_NET_WM_ACTION_BELOW)
+item(_NET_WM_STATE_STICKY)
#if 0
/* We apparently never use: */
Modified: trunk/src/core/window-props.c
==============================================================================
--- trunk/src/core/window-props.c (original)
+++ trunk/src/core/window-props.c Thu Oct 23 04:09:14 2008
@@ -580,6 +580,8 @@
window->wm_state_below = TRUE;
else if (value->v.atom_list.atoms[i] == window->display->atom__NET_WM_STATE_DEMANDS_ATTENTION)
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;
}
Modified: trunk/src/core/window.c
==============================================================================
--- trunk/src/core/window.c (original)
+++ trunk/src/core/window.c Thu Oct 23 04:09:14 2008
@@ -1228,7 +1228,7 @@
set_net_wm_state (MetaWindow *window)
{
int i;
- unsigned long data[11];
+ unsigned long data[12];
i = 0;
if (window->shaded)
@@ -1286,6 +1286,11 @@
data[i] = window->display->atom__NET_WM_STATE_DEMANDS_ATTENTION;
++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);
@@ -4928,9 +4933,19 @@
{
if ((action == _NET_WM_STATE_ADD) ||
(action == _NET_WM_STATE_TOGGLE && !window->wm_state_demands_attention))
- meta_window_set_demands_attention(window);
+ meta_window_set_demands_attention (window);
else
- 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]