Problem with sawfish and GNOME global menus
- From: Harald van Dijk <harald gigawatt nl>
- To: sawfish-list <sawfish-list gnome org>
- Subject: Problem with sawfish and GNOME global menus
- Date: Sat, 11 Dec 2010 15:05:41 +0059
Hi all,
I've recently started using
<http://code.google.com/p/gnome2-globalmenu/>
which makes it possible to use a global menu bar for all GTK+/GNOME
applications. This works great with metacity and openbox, but not so
much with fluxbox and sawfish: with those, opening a menu causes the
GNOME panel to get focused, which causes the menus to change.
Because sawfish isn't the only WM that has issues, I had initially
reported the problem to the globalmenu folks. The first problem was that
fluxbox and sawfish focus the GNOME panel when clicking on it. metacity
and openbox make dock type windows unfocusable. I avoided this problem
in sawfish locally by changing focus-click-through to never-focus in
dock-window-properties. I don't think this is appropriate, so I'm not
asking for this to be changed in sawfish.
However, even with that change, it still didn't work: the menus still
changed to the desktop's menus. And this does look questionable on
sawfish's part: it happens because sawfish takes the grabbing of
keyboard input as a normal focus event. In src/events.c, focus_out
includes an early return:
if (ev->xfocus.detail == NotifyPointer
|| ev->xfocus.mode == NotifyGrab || ev->xfocus.mode ==
NotifyUngrab)
return;
but focus_in's early return is simpler:
if (ev->xfocus.detail == NotifyPointer)
return;
When I change focus_in to also return on NotifyGrab/Ungrab, things work
great.
Could you tell me if that change is correct, or if the problem should be
avoided some other way? See attached patch (to 1.7.1, but the relevant
code is unchanged in git).
Again, the first hunk of attached patch is not something I am asking to
be applied yet -- it depends on how the globalmenu maintainers respond.
The second hunk is.
I cannot add this to the wiki right now, but will do so later.
Cheers,
Harald
diff --git a/lisp/sawfish/wm/windows.jl b/lisp/sawfish/wm/windows.jl
index 28d7120..1a64a54 100644
--- a/lisp/sawfish/wm/windows.jl
+++ b/lisp/sawfish/wm/windows.jl
@@ -107,7 +107,7 @@
:group misc)
(defvar dock-window-properties
- '(window-list-skip cycle-skip fixed-position focus-click-through
+ '(window-list-skip cycle-skip fixed-position never-focus
avoid no-history never-iconify never-maximize sticky
sticky-viewport placed)
"List of properties set (to true) on windows when they are marked as docks.")
diff --git a/src/events.c b/src/events.c
index 9b6a1db..f9a5c82 100644
--- a/src/events.c
+++ b/src/events.c
@@ -1029,7 +1029,8 @@ static void
focus_in (XEvent *ev)
{
Lisp_Window *w = find_window_by_id (ev->xfocus.window);
- if (ev->xfocus.detail == NotifyPointer)
+ if (ev->xfocus.detail == NotifyPointer
+ || ev->xfocus.mode == NotifyGrab || ev->xfocus.mode == NotifyUngrab)
return;
if (w != 0 && w->visible)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]