Commit graph

208 commits

Author SHA1 Message Date
Julien Danjou
b8de5f2d43 client: add a limit to the loop (FS#573)
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-24 15:23:22 +02:00
Julien Danjou
316bca21be stack: fix bad rename
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-24 15:07:58 +02:00
Julien Danjou
73a1011364 client, spawn: stop storing startup_id
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-24 10:35:12 +02:00
Julien Danjou
e5048f72d5 property: macrotify all text property retrieval
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-24 10:26:48 +02:00
Julien Danjou
47011cb324 struts: split off client.c
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-21 15:30:47 +02:00
Julien Danjou
a02d026f77 client: port to new object system
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-21 15:30:47 +02:00
Julien Danjou
a916f2cd55 image: port to new class system
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-21 15:30:47 +02:00
Julien Danjou
dc61d258f0 luaclass: optimize type handling
We use lua_class_t pointer as key in the registry to store metatable we
will compare.
lauxlib uses a string, which sucks, because it forces to do a
pushliteral() each time you want to get a metatable from the registry,
which is slower.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-21 15:30:47 +02:00
Julien Danjou
1cc50b8a29 luaobject: remove useless custom function
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-21 15:30:46 +02:00
Julien Danjou
073e0377dd Revert "key, button: use as simple table"
This reverts commit d7454f4307.

Conflicts:

	button.h
	key.h
	lib/awful/titlebar.lua.in
	lib/naughty.lua.in
	wibox.c
	wibox.h
	widget.c
2009-08-14 16:48:52 +02:00
Julien Danjou
71f24097c0 client: store _NET_WM_OPACITY
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-10 11:59:17 +02:00
Julien Danjou
ab361ffe85 client: store WM_WINDOW_ROLE
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-10 11:53:45 +02:00
Julien Danjou
9394e9a852 client: store _NET_WM_PID
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-10 11:49:52 +02:00
Julien Danjou
0acb4aeff4 client: store WM_CLIENT_MACHINE
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-10 11:36:11 +02:00
Julien Danjou
582c4a7013 client: active BMA when moving windows
We now move (and so, arrange) windows anywhen so we need to ignore
spurious leaver/enter events in client_resize() too.
We still need it un arrange for unmap/map. It's probably that the call
to client_ignore_enterleave_events() should be made in client_ban, but
it would be too much expansive to call it outside arrange() since it is
the only caller of client_ban/unban.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-03 15:57:10 +02:00
Julien Danjou
c1d99f0960 luaobject: emit signal on new object
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-07-29 15:48:18 +02:00
Julien Danjou
d7454f4307 key, button: use as simple table
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-07-28 10:44:54 +02:00
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