From ce652d29e4b51e9bbb7b885ca5c21fe52fffb677 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sat, 17 Jul 2010 03:09:55 +0200 Subject: [PATCH 1/5] Fix _NET_WM_STATE_FULLSCREEN for flash apps or stuff like this --- src/ewmh.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/ewmh.c b/src/ewmh.c index 651c3eb..5b820ab 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -350,6 +350,7 @@ ewmh_manage_window_type(Client *c) int i, f; ulong n, il; uchar *data = NULL; + long ldata[5] = { 0 }; if(XGetWindowProperty(dpy, c->win, net_atom[net_wm_window_type], 0L, 0x7FFFFFFFL, False, XA_ATOM, &rf, &f, &n, &il, &data) == Success && n) @@ -385,6 +386,24 @@ ewmh_manage_window_type(Client *c) XFree(data); } + /* Get NET_WM_STATE set without sending client message event */ + if(XGetWindowProperty(dpy, c->win, net_atom[net_wm_state], 0L, 0x7FFFFFFFL, + False, XA_ATOM, &rf, &f, &n, &il, &data) == Success && n) + { + atom = (Atom*)data; + + for(i = 0; i < n; ++i) + /* _NET_WM_STATE_FULLSCREEN in case of flash fullscreen or anything like this */ + if(atom[i] == net_atom[net_wm_state_fullscreen]) + { + ldata[1] = net_atom[net_wm_state_fullscreen]; + ldata[0] = _NET_WM_STATE_ADD; + ewmh_manage_net_wm_state(ldata, c); + } + + XFree(data); + } + return; } From bf9e9ca578be09898141ad6bf1c0bada90f79a5c Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sat, 17 Jul 2010 03:21:08 +0200 Subject: [PATCH 2/5] Improve _NET_WM_STATE part in ewmh_manage_window_type --- src/ewmh.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/ewmh.c b/src/ewmh.c index 5b820ab..5547d96 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -393,13 +393,11 @@ ewmh_manage_window_type(Client *c) atom = (Atom*)data; for(i = 0; i < n; ++i) - /* _NET_WM_STATE_FULLSCREEN in case of flash fullscreen or anything like this */ - if(atom[i] == net_atom[net_wm_state_fullscreen]) - { - ldata[1] = net_atom[net_wm_state_fullscreen]; - ldata[0] = _NET_WM_STATE_ADD; - ewmh_manage_net_wm_state(ldata, c); - } + { + ldata[0] = _NET_WM_STATE_ADD; + ldata[1] = atom[i]; + ewmh_manage_net_wm_state(ldata, c); + } XFree(data); } From 46d212297aa6203780d8f5f5528edd09d19a808c Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sat, 17 Jul 2010 03:32:47 +0200 Subject: [PATCH 3/5] Ewmh: Add _NET_WM_STATE_STICKY management --- src/ewmh.c | 8 ++++++++ src/structs.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/ewmh.c b/src/ewmh.c index 5547d96..cc8e0d3 100644 --- a/src/ewmh.c +++ b/src/ewmh.c @@ -75,6 +75,7 @@ ewmh_init_hints(void) net_atom[net_wm_icon] = ATOM("_NET_WM_ICON"); net_atom[net_wm_state] = ATOM("_NET_WM_STATE"); net_atom[net_wm_state_fullscreen] = ATOM("_NET_WM_STATE_FULLSCREEN"); + net_atom[net_wm_state_sticky] = ATOM("_NET_WM_STATE_STICKY"); net_atom[net_wm_state_demands_attention] = ATOM("_NET_WM_STATE_DEMANDS_ATTENTION"); net_atom[utf8_string] = ATOM("UTF8_STRING"); @@ -326,6 +327,13 @@ ewmh_manage_net_wm_state(long data_l[], Client *c) client_moveresize(c, c->tmp_geo, False); } } + /* Manage _NET_WM_STATE_STICKY */ + else if(data_l[1] == net_atom[net_wm_state_sticky]) + { + /* == client_ignore_tag */ + c->tag = MAXTAG + 1; + arrange(c->screen, True); + } /* Manage _NET_WM_STATE_DEMANDS_ATTENTION */ else if(data_l[1] == net_atom[net_wm_state_demands_attention]) { diff --git a/src/structs.h b/src/structs.h index 8b11463..900cd51 100644 --- a/src/structs.h +++ b/src/structs.h @@ -123,6 +123,7 @@ enum net_wm_icon, net_wm_state, net_wm_state_fullscreen, + net_wm_state_sticky, net_wm_state_demands_attention, utf8_string, /* WMFS HINTS */ From 910421c41cd66c730db710ad81c5273bc6bf9ce1 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Wed, 21 Jul 2010 13:20:09 +0200 Subject: [PATCH 4/5] Layout: Fix screen test in arrange (reported by mseed) --- src/client.c | 1 + src/layout.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client.c b/src/client.c index 4506b26..bd24be5 100644 --- a/src/client.c +++ b/src/client.c @@ -356,6 +356,7 @@ client_focus(Client *c) sel->flags &= ~AboveFlag; frame_update(sel); + mouse_grabbuttons(sel, !conf.focus_pclick); } diff --git a/src/layout.c b/src/layout.c index 4bf98e0..93e08d3 100644 --- a/src/layout.c +++ b/src/layout.c @@ -39,7 +39,7 @@ arrange(int screen, Bool update_layout) { Client *c; - if(screen < 0 || screen > screen_count()) + if(screen < 0 || screen > screen_count() - 1) screen = screen_get_sel(); for(c = clients; c; c = c->next) From d32ee3295ebcdb86aafcf5b56d8eea39d6254b07 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Wed, 21 Jul 2010 22:52:18 +0200 Subject: [PATCH 5/5] Systray: Prepare file --- CMakeLists.txt | 1 + src/systray.c | 34 ++++++++++++++++++++++++++++++++++ src/wmfs.h | 3 +++ 3 files changed, 38 insertions(+) create mode 100644 src/systray.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 6592a31..becc390 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ set(wmfs_src src/mouse.c src/screen.c src/status.c + src/systray.c src/tag.c src/util.c src/viwmfs.c diff --git a/src/systray.c b/src/systray.c new file mode 100644 index 0000000..045ba31 --- /dev/null +++ b/src/systray.c @@ -0,0 +1,34 @@ +/* +* systray.c +* Copyright © 2008, 2009, 2010 Martin Duquesnoy +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following disclaimer +* in the documentation and/or other materials provided with the +* distribution. +* * Neither the name of the nor the names of its +* contributors may be used to endorse or promote products derived from +* this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "wmfs.h" + diff --git a/src/wmfs.h b/src/wmfs.h index 8759a43..817391b 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -340,6 +340,9 @@ int statustext_text(StatusText *s, char *str); void statustext_normal(int sc, char *str); void statustext_handle(int sc, char *str); +/* systray.c */ + + /* layout.c */ void arrange(int screen, Bool update_layout); void freelayout(int screen);