diff options
-rw-r--r-- | src/Ewmh.cc | 47 | ||||
-rw-r--r-- | src/Ewmh.hh | 5 |
2 files changed, 46 insertions, 6 deletions
diff --git a/src/Ewmh.cc b/src/Ewmh.cc index 0d5885b..f715ccc 100644 --- a/src/Ewmh.cc +++ b/src/Ewmh.cc | |||
@@ -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.1 2002/10/02 16:26:05 fluxgen Exp $ | 22 | // $Id: Ewmh.cc,v 1.2 2002/10/11 10:20:33 fluxgen Exp $ |
23 | 23 | ||
24 | #include "Ewmh.hh" | 24 | #include "Ewmh.hh" |
25 | 25 | ||
@@ -63,7 +63,8 @@ void Ewmh::initForScreen(const BScreen &screen) { | |||
63 | //set supported atoms | 63 | //set supported atoms |
64 | Atom atomsupported[] = { | 64 | Atom atomsupported[] = { |
65 | m_net_wm_state, | 65 | m_net_wm_state, |
66 | m_net_wm_state_sticky, | 66 | // states that we support: |
67 | m_net_wm_state_sticky, | ||
67 | m_net_wm_state_shaded, | 68 | m_net_wm_state_shaded, |
68 | 69 | ||
69 | m_net_client_list, | 70 | m_net_client_list, |
@@ -186,7 +187,21 @@ void Ewmh::updateWorkspace(FluxboxWindow &win) { | |||
186 | } | 187 | } |
187 | 188 | ||
188 | bool Ewmh::checkClientMessage(const XClientMessageEvent &ce, BScreen *screen, FluxboxWindow *win) { | 189 | bool Ewmh::checkClientMessage(const XClientMessageEvent &ce, BScreen *screen, FluxboxWindow *win) { |
189 | 190 | if (win != 0) { | |
191 | if (ce.message_type == m_net_wm_state) { | ||
192 | if (ce.data.l[0] == STATE_REMOVE) { | ||
193 | setState(*win, ce.data.l[1], false); | ||
194 | setState(*win, ce.data.l[2], false); | ||
195 | } else if (ce.data.l[0] == STATE_ADD) { | ||
196 | setState(*win, ce.data.l[1], true); | ||
197 | setState(*win, ce.data.l[2], true); | ||
198 | } else if (ce.data.l[0] == STATE_TOGGLE) { | ||
199 | toggleState(*win, ce.data.l[1]); | ||
200 | toggleState(*win, ce.data.l[2]); | ||
201 | } | ||
202 | } | ||
203 | } | ||
204 | return false; | ||
190 | } | 205 | } |
191 | 206 | ||
192 | 207 | ||
@@ -212,7 +227,8 @@ void Ewmh::createAtoms() { | |||
212 | m_net_wm_name = XInternAtom(disp, "_NET_WM_NAME", False); | 227 | m_net_wm_name = XInternAtom(disp, "_NET_WM_NAME", False); |
213 | m_net_wm_desktop = XInternAtom(disp, "_NET_WM_DESKTOP", False); | 228 | m_net_wm_desktop = XInternAtom(disp, "_NET_WM_DESKTOP", False); |
214 | m_net_wm_window_type = XInternAtom(disp, "_NET_WM_WINDOW_TYPE", False); | 229 | m_net_wm_window_type = XInternAtom(disp, "_NET_WM_WINDOW_TYPE", False); |
215 | 230 | ||
231 | // state atom and the supported state atoms | ||
216 | m_net_wm_state = XInternAtom(disp, "_NET_WM_STATE", False); | 232 | m_net_wm_state = XInternAtom(disp, "_NET_WM_STATE", False); |
217 | m_net_wm_state_sticky = XInternAtom(disp, "_NET_WM_STATE_STICKY", False); | 233 | m_net_wm_state_sticky = XInternAtom(disp, "_NET_WM_STATE_STICKY", False); |
218 | m_net_wm_state_shaded = XInternAtom(disp, "_NET_WM_STATE_SHADED", False); | 234 | m_net_wm_state_shaded = XInternAtom(disp, "_NET_WM_STATE_SHADED", False); |
@@ -226,3 +242,26 @@ void Ewmh::createAtoms() { | |||
226 | m_net_wm_ping = XInternAtom(disp, "_NET_WM_PING", False); | 242 | m_net_wm_ping = XInternAtom(disp, "_NET_WM_PING", False); |
227 | } | 243 | } |
228 | 244 | ||
245 | // set window state | ||
246 | void Ewmh::setState(FluxboxWindow &win, Atom state, bool value) const { | ||
247 | |||
248 | if (state == m_net_wm_state_sticky) { // STICKY | ||
249 | if (value && !win.isStuck() || | ||
250 | (!value && win.isStuck())) | ||
251 | win.stick(); | ||
252 | } else if (state == m_net_wm_state_shaded) { // SHADED | ||
253 | if ((value && !win.isShaded()) || | ||
254 | (!value && win.isShaded())) | ||
255 | win.shade(); | ||
256 | } | ||
257 | |||
258 | } | ||
259 | |||
260 | // toggle window state | ||
261 | void Ewmh::toggleState(FluxboxWindow &win, Atom state) const { | ||
262 | if (state == m_net_wm_state_sticky) { | ||
263 | win.stick(); | ||
264 | } else if (state == m_net_wm_state_shaded) | ||
265 | win.shade(); | ||
266 | } | ||
267 | |||
diff --git a/src/Ewmh.hh b/src/Ewmh.hh index 2344045..672665a 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.1 2002/10/02 16:26:05 fluxgen Exp $ | 22 | // $Id: Ewmh.hh,v 1.2 2002/10/11 10:20:33 fluxgen Exp $ |
23 | 23 | ||
24 | #include "AtomHandler.hh" | 24 | #include "AtomHandler.hh" |
25 | 25 | ||
@@ -50,7 +50,8 @@ private: | |||
50 | 50 | ||
51 | enum { STATE_REMOVE = 0, STATE_ADD = 1, STATE_TOGGLE = 2}; | 51 | enum { STATE_REMOVE = 0, STATE_ADD = 1, STATE_TOGGLE = 2}; |
52 | 52 | ||
53 | void setState(FluxboxWindow &win, Atom flags) const; | 53 | void setState(FluxboxWindow &win, Atom state, bool value) const; |
54 | void toggleState(FluxboxWindow &win, Atom state) const; | ||
54 | void createAtoms(); | 55 | void createAtoms(); |
55 | 56 | ||
56 | // root window properties | 57 | // root window properties |