Commit Graph

191 Commits

Author SHA1 Message Date
Uli Schlachter 28b80648a8 Move window_setfocus and _hasproto to client_*
The only real change in here is the first hunk to client.c which needs to
inline client_setfocus(). Nothing else in here should be a 'real' change.

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-06-25 14:58:55 +02:00
Uli Schlachter f1b3583064 Add client_t::protocols
We now always know a client's WM_PROTOCOLS property without asking the X server.

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-06-25 14:58:54 +02:00
Julien Danjou c95ba76d2f luaobject: use object header and standard gc everywhere
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-06-16 16:26:45 +02:00
Julien Danjou 332e2cb8e8 layout: rename to banning
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-06-10 11:42:43 +02:00
Julien Danjou fba4accc14 Revert "client: handle struts (a lot) better"
This reverts commit 264a81f3fb.

Conflicts:

	client.c
	client.h
	lib/awful/mouse.lua.in
	screen.c
	structs.h
	wibox.c
2009-05-25 15:17:57 +02:00
Julien Danjou e9794c7cbd key: stop using keybinding_t and sorted array
That is necessary because key_find() assume we always get one and only
one keybinding for an event, which is wrong, since we can have several.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-27 16:10:58 +02:00
Julien Danjou 80e935455d stack: remove client_node type and inverse order
We now use a client_array_t which is more efficient and we reverse the
array order compared to before.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-17 23:26:26 +02:00
Julien Danjou f473a107b0 cleanup #includes
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-17 16:52:25 +02:00
Julien Danjou de94a2cb12 client: move struct definition to client.h
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-17 16:27:00 +02:00
Julien Danjou 486ef71a7f screen: replace screens pointer by a screen_t array
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-17 16:14:09 +02:00
Julien Danjou 81033d391b client: use new object system
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-12 15:11:33 +02:00
Julien Danjou be752cc81c client: change global linked list to an array
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-12 15:11:32 +02:00
Uli Schlachter 2a6d5d207d client_stack(): Only stack windows once per mainloop
I was creating 2000 wiboxes in a loop (don't ask) and creating them took
forever. According to callgrind, there were about 2 million calls to
xcb_configure_window() and most (if not all) of them were from client_stack().
Awesome spent 70% of its cpu time in these client_stack() calls.

client_stack() is O(N^2) on the number of clients (it walks the list of clients
itself twice and each call to client_stack_above() walks the list too) and O(N)
on the number of wiboxes (it walks the wibox list twice). So obviously calls to
it should be rare.

This patch makes client_stack() only set a flag which is later checked. This
should reduce the number of restacks to the bare minimum. With this patch,
neither xcb_configure_window() nor anything else client_stack() related shows
up as having a lot of calls or using much cpu time.

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-10 18:15:48 +02:00
Mariusz Ceier 904502552f Focus events handlers
- We are tracking focus, using FocusIn/FocusOut events handlers, so user
  should never be confused about which client has focus
- window_setfocus function generates focus change requests to the X server
- client_focus uses window_setfocus to set input focus
- revert_to when setting input focus set to Parent, compliant with
  ICCCM convention ([1])
- DEBUG flag for those who want to debug focus handlers

Most of the changes, are compliant with X11 handbook ([0]), but some
where obtained experimentally.

Kudos to Maarten Maathuis who helped a lot with this.

[0]
http://cgit.freedesktop.org/xorg/doc/xorg-docs/plain/hardcopy/X11/xlib.PS.gz

[1] http://tronche.com/gui/x/icccm/sec-4.html#s-4.2.7

Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Mariusz Ceier <mceier@gmail.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-07 15:42:25 +02:00
Julien Danjou 4d6bf949a8 Revert "event: add FocusOut handler"
This reverts commit 31ba962065.
2009-04-06 13:27:53 +02:00
Maarten Maathuis 31ba962065 event: add FocusOut handler
- I don't see why we should guess about what we recieved and whatnot.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-04 16:32:46 +02:00
Julien Danjou 0d6d6c4fa7 client: store class and instance
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-04 13:54:51 +02:00
Julien Danjou 208406ea90 client: free icon name
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-04 13:03:15 +02:00
Julien Danjou eaec928b8c client: remove useless icon_path
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-04 13:02:30 +02:00
Maarten Maathuis 264a81f3fb client: handle struts (a lot) better
- WINDOW_TYPE_DOCK are chosen first.
- Top/Bottom take precedence over Left/Right.
- Struts are automatically updated.
- Automatically avoid overlap with other struts or wibox'es.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-31 09:17:36 +02:00
Julien Danjou 84ee8f1f92 event: implements Bob Marley version 2
Version 1 was supposed to store somehow the mouse coordinates to drop
spurious EnterNotify.

Now, we use a simpler way: we just tell the X server we do not want to
receive this events while we are arranging, since we would get spurious
ones.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-12 11:49:58 +01:00
Julien Danjou 17e2d9e58f client: remove _AWESOME_TAGS property
We use EWMH hints.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-12 11:49:58 +01:00
Julien Danjou 9b654095ec client: add Globally Active Input Model (GAIM)
with small fixes, changes:
- client_focus handles case when c==NULL
- don't focus on already focused client

- added window_takefocus function, that sends WM_TAKE_FOCUS client
  message. It is needed by GAIM and Locally Active Input Model.
- moved invocation of lua focus hook from client_focus to
  client_focus_hook function.

- client_focus has one additional paremeter, sendmessage.
  It is used in FocusIn event handler, to disable sending SetInputFocus
  and WM_TAKE_FOCUS messages ( to avoid infinite loop )

Signed-off-by: Mariusz Ceier <mceier@gmail.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-03 17:24:40 +01:00
Gregor Best 050a6bbb61 client: add client_seturgent() and remove urgent hint on focus
According to EWMH, the window manager is responsible for removing the
urgent state of a client. Also, this commit adds a new
client_seturgent(client_t *, bool) function to set the urgent state if
needed.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-02-11 19:04:09 +01:00
Maarten Maathuis bd6e568083 event: fix configurerequest
- We have to be careful with geometry around protocol code.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-02-08 14:10:17 +01:00
Maarten Maathuis 62b2273b53 client: client_isvisible_exclude_banned() isn't needed anymore.
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-02-08 14:06:15 +01:00
Julien Danjou d779aa6c40 client: client screen change at manage is done in Lua
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-29 12:26:01 +01:00
Julien Danjou cd667802db hooks: manage gets an extra startup arg
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-29 12:23:37 +01:00
Maxime COSTE 3cc60e84dc client: fixed client_isfixed
here is a little patch which fix the unresizeable window bug.  This bug is due
to some windows, like firefox, having XCB_SIZE_HINT_P_MAX_SIZE and
XCB_SIZE_HINT_P_MIN_SIZE on and all related values to 0, which makes
client_isfixed believe that the windows are of fixed size.

Hope this is the right way to fix it. Anyway now you know where this bug comes
from.

Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-29 10:13:49 +01:00
Arnaud VALLAT ba6f5e42bb ewmh: add suport for _NET_ACTIVE_WINDOW message
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-15 10:47:07 +01:00
Julien Danjou 9d175377b8 client: stop duplicating size hints data
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-14 10:28:24 +01:00
Maarten Maathuis 7453098cf5 client: Sometimes you need to arrange before a client gets unbanned.
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-14 10:28:24 +01:00
Maarten Maathuis 0aba4013e9 client: Improve handling of transient windows.
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-14 10:28:23 +01:00
Julien Danjou 1670088218 client: include list
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-14 10:28:23 +01:00
Julien Danjou c3c20c4f8e client: move floating state handling to Lua
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-14 10:28:22 +01:00
Julien Danjou 576a1e85fc client: maximize belongs to client internal
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-12 19:19:29 +01:00
Maarten Maathuis f9c2ee62a3 client: reimplement client_{ban,unban} for more performance
- From now on clients shall remain mapped for their entire lifetime.
- This should seriously boost tag switching speed with composite active.
- A lesser improvement may be noticed in non-composite situations.
- Titlebars that are set to invisble are still unmapped.
  Since it would clutter the implementation and titlebars are cheap to render.
  Not to mention that invisible titlebars are pretty rare.
- It's safe to attach titlebars while the client is banned.
- Titlebars are explicitly removed at exit.

Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-12-12 19:19:28 +01:00
Julien Danjou 0634353648 client: add client_lower()
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-11-12 11:25:04 +01:00
Julien Danjou 79468cf3a1 client: fix fixed size detection and resize blocking
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-11-10 12:10:06 +01:00
Julien Danjou 9ce1f986d9 client: better handling of transient windows stacking
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-11-03 14:39:38 +01:00
Julien Danjou 737a70f60c remove a bunch of useless #include-s
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-10-24 20:57:29 +02:00
Julien Danjou 1e89515d97 mouse: move declaration from structs to mouse header
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-10-24 20:38:29 +02:00
Julien Danjou d3ceff0282 structs: move some define out
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-10-21 17:37:14 +02:00
Julien Danjou 8a24f5c840 client: resize returns void
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-26 15:00:27 +02:00
Julien Danjou 8a7e522ba1 ewmh: update window hints
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-22 11:11:55 +02:00
Julien Danjou 2be620618b property: use xcb property handler system
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-22 11:11:55 +02:00
Julien Danjou e0d3da455b client: split minimized out of hidden
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-22 11:11:55 +02:00
Julien Danjou 126e2dc0ec client: inline isvisible()
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-22 11:11:55 +02:00
Julien Danjou 3a45831242 client: manage take phys_screen as arg
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-22 11:11:54 +02:00
Julien Danjou fcde8d229b ewmh: add support for _NET_WM_STRUT_PARTIAL
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-22 11:11:54 +02:00