Commit graph

5340 commits

Author SHA1 Message Date
Uli Schlachter
16286f0b75 Use a single gc for all graphics operation
The GC isn't really used, we just need one because X11 wants one.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-17 15:44:44 +02:00
Uli Schlachter
3b2f6329a9 Remove an unneeded argument to screen_getbycoord()
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 14:25:12 +02:00
Uli Schlachter
6b2e4352bb Remove globalconf.xinerama_is_active
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 14:20:45 +02:00
Uli Schlachter
cb550e59f7 Remove the now pointless struct root_win_t
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 14:14:15 +02:00
Uli Schlachter
eec8e3e095 Remove a pointless function argument
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 14:12:27 +02:00
Uli Schlachter
5d35771673 Save the screen in globalconf.
There can only be on xcb_screen_t now, so we can save it in globalconf.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 14:10:58 +02:00
Uli Schlachter
cc4e8d57d5 Move the default visual to globalconf
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 13:59:51 +02:00
Uli Schlachter
e76310ef77 Move the startup notification monitor context to globalconf
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 13:57:31 +02:00
Uli Schlachter
a488d3f49d Move the systray info to globalconf
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 13:55:12 +02:00
Uli Schlachter
32d9a5b2ab Remove support for zaphod mode
This makes awesome support only a single X11 protocol screen. If you are still
using zaphod mode, you can run multiple instances of awesome on the single
screens, e.g.:

DISPLAY=:1.0 awesome & DISPLAY=:1.1 awesome &

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-16 13:47:40 +02:00
Uli Schlachter
27f9c0177a Don't call "focus" hook in client_focus()
Later on that call will be done through a FocusIn event.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-15 13:17:07 +02:00
Uli Schlachter
46048332b0 Don't fail if execinfo is not available
Previously, cmake aborted when execinfo was not found. With this commit the
backtrace code is just disabled when execinfo is not available.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 20:14:56 +02:00
Uli Schlachter
ce814b4dbf Use globalconf.timestamp
This makes us use globalconf.timestamp instead of XCB_CURRENT_TIME in the places
where it makes sense.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 14:52:23 +02:00
Uli Schlachter
ec63afc822 Track the last timestamp received from the server
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 14:37:39 +02:00
Uli Schlachter
47caab4580 Always unban a client that we are trying to focus
Previously, if a client had nofocus == true, it wasn't unminimized if sth tried
to focus it. Also, if this client had the WM_TAKE_FOCUS protocol, the focusing
would fail since it's an error to set the input focus to an unviewable window.

For consistency, this also moves the code that sets a client's minimized
property to false into client_unban() since it doesn't make sense to have a
minimized client unbanned (i.e. visible).

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 14:32:27 +02:00
Uli Schlachter
71ba321032 Check "focusable" in awful.client.focus.filter(c)
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 13:18:40 +02:00
Uli Schlachter
544fa215ea Add "focusable" property to client objects
If this property is true, setting "client.focus" to this client might have some
effect. If it is false, setting "client.focus" will be ignored completely.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 13:08:55 +02:00
Uli Schlachter
7e03e3b796 Revert "Ignore all UnmapNotifies due to the root window"
This reverts commit 0682499895.

We have to handle all the UnmapNotifies due to ICCCM. The bug this was trying to
fix is now fixed by 9ab8cd4039 ("Set our event
mask on the root window later") instead.
2010-08-11 11:58:56 +02:00
Uli Schlachter
9fcf6a0a0d Unselect events on our frame window in unmanage
This makes sure that we don't get any events from the activity of
client_unmanage() after this point.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-11 11:57:44 +02:00
Uli Schlachter
e59086f2bf Ignore all reparents to the root window
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-11 11:56:47 +02:00
Uli Schlachter
9ab8cd4039 Set our event mask on the root window later
This moves the setting of the event mask after scan() so that we won't receive
any events from scan()'s activity (especially no UnmapNotifies which would cause
us to lose clients).

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-11 11:54:30 +02:00
Uli Schlachter
ac2ff7f7a7 prompt: Only show error messages
Ever since awesome.spawn() also returns the pid of the started process, the
prompt accidentally displayed the pid of processes that it started.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 14:24:58 +02:00
Uli Schlachter
353872a45f Correctly read a textbox' ellipsize and wrap properties
The old code used the wrong constants which meant we always returned "word" for
wrap and "end" for ellipsize.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:58:46 +02:00
Uli Schlachter
87237a197f Get a client's property more intelligently
Previous, there was a round-trip after each request for a property since we
waited for the reply immediately. Instead, it makes a lot more sense to first
send all of the requests and then handle all the replies. This now takes only a
single round-trip for all the properties from client_update_properties().

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:54:49 +02:00
Uli Schlachter
84526dd630 Select our events on new after the reparent
Together with the previous commit, this makes us not lose clients across
restarts any more.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:33:08 +02:00
Uli Schlachter
0682499895 Ignore all UnmapNotifies due to the root window
We got XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY on the root window, but we also have
XCB_EVENT_MASK_STRUCTURE_NOTIFY on the individual client windows. Since we are
reparenting our windows, we can safely ignore all UnmapNotifies that we get
through the root window.

This fixes a bug if there were any windows already present before awesome
started. Those were obviously already mapped which means that ReparentWindow
would cause an UnmapNotify for them on the root window. This commit makes us
ignore that UnmapNotify and thus not throwing away the window immediately again.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:30:46 +02:00
Uli Schlachter
a89ca515f5 Remove another argument to property handlers
Since each handler is only for one single atom, there is no point in passing the
atom that was changed to the callback.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:06:32 +02:00
Uli Schlachter
709619b466 Push the property requests down
Instead of calling each property handler with a property reply, it's now up to
the handlers to request the properties.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:04:08 +02:00
Uli Schlachter
2f20494676 Overhaul property handling
For each property we handle, there is now a function which sends a request and
returns the cookie and a second function that takes the cookie and saves the
result in the client_t struct. This should make it possible to improve our
latency later on.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 13:03:16 +02:00
Uli Schlachter
0eb9363533 Clear our event mask in client_unmanage()
This should fix an actual race condition:
- Client unmaps its window (UnmapNotify for awesome)
- Client maps its window (MapRequest for awesome)
- Due to the UnmapNotify: client_unmanage() runs and reparents the window back
  to the root (ReparentNotify)
- Due to the MapRequest: client_manage() runs
- Due to the ReparentNotify: We call client_unmanage() again and now the
  client's window is lost.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:57:47 +02:00
Uli Schlachter
c36ee7fea8 client_unmanage: Update WM_STATE later
According to ICCCM, if a client wants to reuse one of its windows, it has to
wait until the WM updated WM_STATE. This means updating WM_STATE should be the
very last thing we do when unmanaging a window.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:57:38 +02:00
Uli Schlachter
1f36a3d4de Obey ICCCM 4.1.5 / 4.2.3
When a window is moved, it should be sent a synthetic ConfigureNotify describing
its new position. This also documents why we send a synthetic event if nothing
was changed in response to a ConfigureRequest.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:50 +02:00
Uli Schlachter
a5afa009dc Remove a client window's own border
If a client sets its own border on its window, the results look broken. This was
found via xev by Gregor Best, thanks.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:47 +02:00
Uli Schlachter
719c94d67c Avoid some flickering again
The commit which made awesome a reparenting WM broke the fix from 37703948b3.
Fix this again by stacking the frame window correctly.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:44 +02:00
Uli Schlachter
a311ab0679 Don't destroy client windows in unmanage
When a client is unmanaged, we destroy our frame window. But since the client's
own window was still a child of the frame window, it was destroyed, too. This
commit fixes this by reparenting the client's window back to the root window
first.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:40 +02:00
Uli Schlachter
52f4581be3 Fix reparentnotify handling
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:36 +02:00
Uli Schlachter
eb89467896 Unmanage clients on UnmapNotifies
ICCCM mandates that window managers have to trigger the conversion to withdrawn
state on the synthetic and the real unmap notify, no matter if any is missing.
Previously we couldn't do this, but thanks to the reparenting, we can now do
this properly.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:33 +02:00
Uli Schlachter
9fbdecf26c Split up client_getbywin()
This splits up client_getbywin() into two different functions. One of them finds
a client by its frame window, the other checks against the client's own window.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:29 +02:00
Uli Schlachter
102063dbbd Turn this into a reparenting WM
Each window is now reparented under a window created by awesome. This window is
NOT visible, this commit should not cause any visible differences. Instead, this
is done to work around problems with X11.

The only alternative would be to ban windows by moving them offscreen which is
ugly in itself and breaks pagers. Doing it like this seems to be the better
solution.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-09 11:56:26 +02:00
Gregor Best
5d0a81c8bf fix some deprecated atom constants
Signed-off-by: Gregor Best <gbe@ring0.de>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 21:43:23 +02:00
Uli Schlachter
1d95153286 Remove all uses of attribute "unused"
Awesome is built with -Wno-unused-parameter which means there is no point in
explicitly marking arguments as unused.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 18:19:15 +02:00
Uli Schlachter
4545c23658 Brown paper bag commit
I removed the function, but forgot to remove the prototype. Whoops!

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 18:06:47 +02:00
Uli Schlachter
fa5a25637d Remove some more unused function arguments
We no longer use libxcb-event, so we don't have to follow it's API any more.
This means the pointless arguments and return values can be removed.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 17:54:13 +02:00
Uli Schlachter
58bb601658 Stop using most of libxcb-event
Upstream removed most of the code from libxcb-event and there is no
event-related stuff left in this library. We now no longer use any of the parts
that were removed.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 17:35:48 +02:00
Uli Schlachter
0262e39609 Remove some unused function arguments
We no longer have to follow libxcb-property's API for these function, so we can
remove arguments which we don't use anyway.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 16:54:36 +02:00
Uli Schlachter
b64c989963 Stop using libxcb-property
libxcb-property will be dropped from xcb-utils in the next release, because
upstream thinks it's not really useful and well-designed.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-08 16:45:56 +02:00
Uli Schlachter
c20e88fdce Avoid some round-trips on startup
This makes awesome prefetch some of the data it needs during startup to avoid
some useless round-trips to the server.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-07 13:31:20 +02:00
Uli Schlachter
fae5dfcd08 Naughty: Handle invalid UTF-8 more sanely
Previously, if setting the textbox's text failed this caused more problems later
on. This commit makes sure that an invalid text never breaks pango.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-06 19:53:34 +02:00
Konstantin Stepanov
842dfc3064 stack graph mode works with max_value
Signed-off-by: Konstantin Stepanov <kstep@p-nut.info>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-05 14:28:14 +02:00
Uli Schlachter
da2a7aec0d Fix an unbalanced lua stack operation
ewmh_process_state_atom() does a luaA_object_push() at its beginning, but it
doesn't pop that object again. Fix this by, well, popping the object at the end
of the function again.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-03 11:25:54 +02:00