summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Ewmh.cc54
-rw-r--r--src/Ewmh.hh10
2 files changed, 58 insertions, 6 deletions
diff --git a/src/Ewmh.cc b/src/Ewmh.cc
index 56d524e..190850b 100644
--- a/src/Ewmh.cc
+++ b/src/Ewmh.cc
@@ -1,5 +1,5 @@
1// Ewmh.cc for fluxbox 1// Ewmh.cc for fluxbox
2// Copyright (c) 2002-2003 Henrik Kinnunen (fluxgen at user.sourceforge.net) 2// Copyright (c) 2002-2004 Henrik Kinnunen (fluxgen at user.sourceforge.net)
3// 3//
4// Permission is hereby granted, free of charge, to any person obtaining a 4// Permission is hereby granted, free of charge, to any person obtaining a
5// copy of this software and associated documentation files (the "Software"), 5// copy of this software and associated documentation files (the "Software"),
@@ -19,7 +19,7 @@
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE. 20// DEALINGS IN THE SOFTWARE.
21 21
22// $Id: Ewmh.cc,v 1.39 2004/01/19 22:43:08 fluxgen Exp $ 22// $Id: Ewmh.cc,v 1.40 2004/01/21 09:37:10 fluxgen Exp $
23 23
24#include "Ewmh.hh" 24#include "Ewmh.hh"
25 25
@@ -82,6 +82,10 @@ void Ewmh::initForScreen(BScreen &screen) {
82 m_net_wm_state_hidden, 82 m_net_wm_state_hidden,
83 m_net_wm_state_skip_taskbar, 83 m_net_wm_state_skip_taskbar,
84 84
85 // window type
86 m_net_wm_window_type,
87 m_net_wm_window_type_dock,
88
85 // root properties 89 // root properties
86 m_net_client_list, 90 m_net_client_list,
87 m_net_client_list_stacking, 91 m_net_client_list_stacking,
@@ -164,6 +168,44 @@ void Ewmh::setupFrame(FluxboxWindow &win) {
164 } 168 }
165 169
166 updateWorkspace(win); 170 updateWorkspace(win);
171
172 /* From Extended Window Manager Hints, draft 1.3:
173 *
174 * _NET_WM_WINDOW_TYPE, ATOM[]/32
175 *
176 * This SHOULD be set by the Client before mapping to a list of atoms
177 * indicating the functional type of the window. This property SHOULD
178 * be used by the window manager in determining the decoration,
179 * stacking position and other behavior of the window. The Client
180 * SHOULD specify window types in order of preference (the first being
181 * most preferable) but MUST include at least one of the basic window
182 * type atoms from the list below. This is to allow for extension of
183 * the list of types whilst providing default behavior for Window
184 * Managers that do not recognize the extensions.
185 *
186 */
187 win.winClient().property(m_net_wm_window_type, 0, 0x7fffffff, False, XA_ATOM,
188 &ret_type, &fmt, &nitems, &bytes_after,
189 &data);
190 if (data) {
191 Atom *atoms = (unsigned long *)data;
192 for (unsigned long l=0; l<nitems; ++l) {
193 /* From Extended Window Manager Hints, draft 1.3:
194 *
195 * _NET_WM_WINDOW_TYPE_DOCK indicates a dock or panel feature.
196 * Typically a Window Manager would keep such windows on top
197 * of all other windows.
198 *
199 */
200 if (atoms[l] == m_net_wm_window_type_dock) {
201 win.moveToLayer(Fluxbox::instance()->getDockLayer());
202 // we also assume it shouldn't be visible in any toolbar
203 win.setHidden(true);
204 break;
205 }
206
207 }
208 }
167} 209}
168 210
169void Ewmh::updateFrameClose(FluxboxWindow &win) { 211void Ewmh::updateFrameClose(FluxboxWindow &win) {
@@ -319,7 +361,7 @@ void Ewmh::updateWorkspaceNames(BScreen &screen) {
319 &text, m_net_desktop_names); 361 &text, m_net_desktop_names);
320 XFree(text.value); 362 XFree(text.value);
321 } 363 }
322 364
323 for (size_t i = 0; i < number_of_desks; i++) 365 for (size_t i = 0; i < number_of_desks; i++)
324 delete [] names[i]; 366 delete [] names[i];
325} 367}
@@ -458,6 +500,7 @@ void Ewmh::updateWorkspace(FluxboxWindow &win) {
458 500
459} 501}
460 502
503
461// return true if we did handle the atom here 504// return true if we did handle the atom here
462bool Ewmh::checkClientMessage(const XClientMessageEvent &ce, BScreen * screen, WinClient * const winclient) { 505bool Ewmh::checkClientMessage(const XClientMessageEvent &ce, BScreen * screen, WinClient * const winclient) {
463 if (ce.message_type == m_net_wm_desktop) { 506 if (ce.message_type == m_net_wm_desktop) {
@@ -599,8 +642,11 @@ void Ewmh::createAtoms() {
599 m_net_properties = XInternAtom(disp, "_NET_PROPERTIES", False); 642 m_net_properties = XInternAtom(disp, "_NET_PROPERTIES", False);
600 m_net_wm_name = XInternAtom(disp, "_NET_WM_NAME", False); 643 m_net_wm_name = XInternAtom(disp, "_NET_WM_NAME", False);
601 m_net_wm_desktop = XInternAtom(disp, "_NET_WM_DESKTOP", False); 644 m_net_wm_desktop = XInternAtom(disp, "_NET_WM_DESKTOP", False);
645
646 // type atoms
602 m_net_wm_window_type = XInternAtom(disp, "_NET_WM_WINDOW_TYPE", False); 647 m_net_wm_window_type = XInternAtom(disp, "_NET_WM_WINDOW_TYPE", False);
603 648 m_net_wm_window_type_dock = XInternAtom(disp, "_NET_WM_WINDOW_TYPE_DOCK", False);
649
604 // state atom and the supported state atoms 650 // state atom and the supported state atoms
605 m_net_wm_state = XInternAtom(disp, "_NET_WM_STATE", False); 651 m_net_wm_state = XInternAtom(disp, "_NET_WM_STATE", False);
606 m_net_wm_state_sticky = XInternAtom(disp, "_NET_WM_STATE_STICKY", False); 652 m_net_wm_state_sticky = XInternAtom(disp, "_NET_WM_STATE_STICKY", False);
diff --git a/src/Ewmh.hh b/src/Ewmh.hh
index 1c5475c..52e91f7 100644
--- a/src/Ewmh.hh
+++ b/src/Ewmh.hh
@@ -19,7 +19,7 @@
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE. 20// DEALINGS IN THE SOFTWARE.
21 21
22// $Id: Ewmh.hh,v 1.15 2004/01/20 14:30:33 fluxgen Exp $ 22// $Id: Ewmh.hh,v 1.16 2004/01/21 09:37:04 fluxgen Exp $
23 23
24#include "AtomHandler.hh" 24#include "AtomHandler.hh"
25 25
@@ -27,6 +27,7 @@
27#include <vector> 27#include <vector>
28#include <map> 28#include <map>
29 29
30/// Implementes Extended Window Manager Hints ( http://www.freedesktop.org/Standards/wm-spec )
30class Ewmh:public AtomHandler { 31class Ewmh:public AtomHandler {
31public: 32public:
32 33
@@ -86,7 +87,12 @@ private:
86 Atom m_net_close_window, m_net_wm_moveresize; 87 Atom m_net_close_window, m_net_wm_moveresize;
87 88
88 // application window properties 89 // application window properties
89 Atom m_net_properties, m_net_wm_name, m_net_wm_desktop, m_net_wm_window_type, 90 Atom m_net_properties, m_net_wm_name, m_net_wm_desktop,
91 // types
92 m_net_wm_window_type,
93 m_net_wm_window_type_dock,
94
95 // states
90 m_net_wm_state, m_net_wm_state_sticky, m_net_wm_state_shaded, 96 m_net_wm_state, m_net_wm_state_sticky, m_net_wm_state_shaded,
91 m_net_wm_state_maximized_horz, m_net_wm_state_maximized_vert, 97 m_net_wm_state_maximized_horz, m_net_wm_state_maximized_vert,
92 m_net_wm_state_fullscreen, 98 m_net_wm_state_fullscreen,