Commit Graph

5074 Commits

Author SHA1 Message Date
Uli Schlachter a756972962 spawn: Create sessions for processes
Each process spawned from awesome now gets its own session and process group.
This makes sure they aren't connected to awesome in any way any more. This
especially fixes some problems with signals.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-12-04 13:21:55 +01:00
Uli Schlachter 03010ca5c2 Properly die when the X server dies
When the X connection breaks for whatever reason, awesome wouldn't properly
exit, but go into a busy loop instead. Fix this by dying when our connection to
the X server dies.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-11-13 22:35:00 +01:00
Uli Schlachter d303957d01 Set minimum required cmake version to 2.8.0
We are using file(copy ...) which seems to be new in cmake 2.8.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-28 22:20:54 +02:00
Julien Danjou b0e8024e47 awful.prompt: add ctrl-backspace
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-10-21 09:05:55 +02:00
Julien Danjou 8805a99f73 awful.tag: do not update history when identical tags
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-10-20 17:30:48 +02:00
Julien Danjou f37d9f5c7c awful.tag: remove useless line
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-10-20 17:00:10 +02:00
Stjujsckij Nickolaj b4cc392e23 Remove last known usage of deprecated in Lua 5.1 `arg`
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-12 18:37:54 +02:00
Stjujsckij Nickolaj 7ef7fe7e03 awful.titlebar: Stop using arg
Implementing vararg functions via arg is deprecated in lua. This kind of thing
should instead be done via "...".

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-12 18:37:54 +02:00
Alexandre "kAworu" Perrin 3961a2ee31 use CMake check_function_exists() for execinfo
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-11 22:52:00 +02:00
Alexandre "kAworu" Perrin 56f0c84240 test for __builtin_clz() and fallback to an inline implementation.
__builtin_clz() is not defined by gcc prior to 3.4 and maybe not for some other
compiler vendors.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-11 20:41:44 +02:00
Uli Schlachter f9c2fcacb2 awful.util.join: Stop using arg
Implementing vararg functions via arg is deprecated in lua. This kind of thing
should instead be done via "...".

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-11 17:13:51 +02:00
Alexandre "kAworu" Perrin f38566bd97 avoid using seq in awsetbg, and test for columns count argument of -m option.
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-11 17:12:00 +02:00
Uli Schlachter 0116d739b5 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-10-11 16:42:34 +02:00
Alexandre "kAworu" Perrin 23d5b27206 awesomeConfig: test for execinfo.h/backtrace()
add a test for execinfo.h and backtrace() function which are defined by
GNU libc. If it fails, require libexecinfo.

Signed-off-by: Julien Danjou <julien@danjou.info>
2010-10-11 16:42:08 +02:00
koniu 02cd1cbda3 awful.completion: callback functions return table of matches
Signed-off-by: koniu <gkusnierz@gmail.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-11 15:23:06 +02:00
koniu 595b344156 awful.prompt: add 'autoexec' argument
If set the prompt will execute the command upon completion which returns
only one match.

Signed-off-by: koniu <gkusnierz@gmail.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-11 15:23:06 +02:00
Uli Schlachter 9e79d18747 Tasklist: Fail less badly with invalid utf8
xterm is famous for messing up the utf8 in its title (unless correctly
configured).

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-07 18:42:05 +02:00
Uli Schlachter a4b8fc4894 Flush the cairo surface after drawing
It is perfectly valid for a cairo surface to delay the actual. This is mostly
done in situations where it speeds stuff up. Since we want our drawing to be
visible, we have to flush the cairo surface when we are done drawing.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-10-05 19:48:54 +02:00
Julien Danjou 0ee01cc3fe change codename
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-10-04 10:51:54 +02:00
Roman Kosenko 4bdc716d8a Fix image cropping/enlarging
Function imlib_create_cropped_image() from imlib2 doesn't initialize
buffer for new image, so if we use crop bounds bigger than original ones
we need to erase garbage from derived image.
This bug produced colorful pressed buttons (FS#516, FS#822).

Signed-off-by: Roman Kosenko <madkite@gmail.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-27 11:14:18 +02:00
Gregor Best e6b99ae374 naughty: localize obj
Signed-off-by: Gregor Best <gbe@ring0.de>
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-09-19 20:16:55 +02:00
Uli Schlachter 268fe91434 widget layouts: Check the number of geometries
If we called the widget layout for x widgets, but the layouts returned less
geometries than this, we silently ignored the left-over widgets. If the layouts
returned more geometries, we crashed.

Fix this by verifying that the number of widgets and the number of geometries
are equal. If they are different, we use the smaller of the two.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-17 16:10:16 +02:00
Uli Schlachter 8c0a83f5ca Correctly unref widget_nodes
While drawing the wibox, the C core builds up a list of widgets and their
associated geometry. This list consists of widget_node_t objects and is
constructed like this (This is from luaA_table2widgets()):

   widget_node_t w;
   p_clear(&w, 1);
   w.widget = luaA_object_ref_item(L, idx, -1);
   widget_node_array_append(widgets, w);

After we are done with this list of widget nodes, it is freed via
wibox_widget_node_array_wipe(). However, wibox_widget_node_array_wipe() passed
"&w" to luaA_object_unref_item() while it should have used "w.widget" (which is
what was returned from luaA_object_ref_item()). This made the unref fail and the
wibox was carrying around a reference to this widget forever. This was
effectively a memory leak.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-17 15:49:20 +02:00
Uli Schlachter 222fb4c9c5 Fix a "table expected instead of nil" error
It seems like with lots of bad luck, the garbage collector manages to "steal"
the table with the buttons right after we decided to use it. Evil collector!

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-16 20:23:36 +02:00
Uli Schlachter 74b5cddbac Wibox: Unref old widgets table
When setting a new widgets table, the wibox obviously should drop its reference
on the old widgets table.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-16 20:21:38 +02:00
Uli Schlachter 9114ed1846 {tag,task}list: Use a weak-valued table
The data table is used to map objects (clients/tags) to the buttons associated
with them. This is done so that we don't have to re-create the button objects
each time this lists are updated.

The problem was that this weak-keyed table was never cleared, because the value
had a strong reference to the key (via the button's signal):

btn:connect_signal("press", function () b:emit_signal("press", o) end)

"o" is the key in the table and btn is reachable from the value. This prevented
the garbage collection of the key. Using a weak-keyed and weak-valued table
fixes this.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-16 17:38:40 +02:00
Uli Schlachter 2134a3c2e9 Partly revert cd53eb8d3f
Turns out there are files in themes/ which are still needed (e.g. the default
wallpaper and the layout icons).

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-14 22:15:56 +02:00
Ignas Anikevicius (gns_ank) 1ee80cd5d0 Add match_any function and rule_any definition for different client matching.
Signed-off-by: Ignas Anikevicius (gns_ank) <anikevicius@gmail.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-14 16:51:59 +02:00
Uli Schlachter cd53eb8d3f Use relative paths for the titlebar icons (FS#809)
The current code used "if(MATCHES)" to decide if a path was inside the source
directory or the build directory. MATCHES uses regular expressions and so this
check failed miserably if the path contained any characters that have a special
meaning in regular expressions (e.g. "+").

Fix this by only using paths inside the build dir for the icons. All icons are
copied from the source dir to the build dir so that we can freely assume that
everything is inside the build directory.

Instead of trying to "transform" the existing paths from the source dir to the
build dir, we use "file(GLOB)"'s RELATIVE option that gives us relative path.
Together with the way "file(COPY)" interprets its arguments, that's all we need.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-13 16:40:59 +02:00
Uli Schlachter 2f739a5326 awesome.spawn(): Return the PID
This modifies awesome.spawn() to return the process ID of the started process
which could e.g. be used for matching against _NET_WM_PID.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-09 20:49:17 +02:00
Julien Danjou 7e2291ec37 Revert "tag.lua: check name argument to add() is valid"
This reverts commit 4f754a0d41.
2010-09-08 10:17:52 +02:00
Uli Schlachter d56a5abd99 awful.placement.no_overlap: Ignore desktop clients
EWMH describes desktop windows like this:

"_NET_WM_WINDOW_TYPE_DESKTOP indicates a desktop feature. This can include a
single window containing desktop icons with the same dimensions as the screen,
allowing the desktop environment to have full control of the desktop, without
the need for proxying root window clicks."

An example for such a window is nautilus' virtual root window. Naturally, such a
window would always overlap with any given client, so awful.placement.no_overlap
just didn't do anything at all. The fix is to ignore such clients for placement
calculations.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-09-03 17:47:12 +02:00
Uli Schlachter 92183caad0 Systray: Correctly compute extents (FS#768)
The systray bases its extents on the size of the wibox that it is contained in.
No idea how this is supposed to work when the systray doesn't get the full size,
but in a vertical wibox, using <height of wibox> * <number of icons in systray>
certainly doesn't work for computing the size.

The fix isn't hard: Check the wibox' orientation when drawing and base our
calculation on its width if its orientation is different from East.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-31 18:50:15 +02:00
immerrr e5d4ff6147 awful.prompt: insert selection at cursor position
Signed-off-by: immerrr <immerrr@gmail.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-08-31 13:50:38 +02:00
Uli Schlachter 36b639801b awful.placement: Fix a mis-calculation
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-26 21:15:01 +02:00
Uli Schlachter 26d97d0273 awful.prompt: "Fix" for multi-byte characters
If you entered a multi-byte character into a prompt and then changed your mind
and used backspace to fix the character, only the last byte of the character was
removed. Because pango is intelligent, it noticed the broken utf8 and
complained.

So far nothing new. But since 711d78b50c the textbox will throw a lua error
when it gets an invalid text (= pango complains). Throwing an unprotected lua
error in this context causes the keygrabber to be killed which stops the prompt.

Fix this by removing bytes as long as there are bytes left that can be removed.

This is FS#801.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-26 21:07:20 +02:00
Julien Danjou 4ea1753f34 Change codename
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-08-25 10:50:48 +02:00
Uli Schlachter c73b1c8d4e Revert "Don't call "focus" hook in client_focus()"
This reverts commit 27f9c0177a.

This commit broke code like the following because reading client.focus would
still return the previously focused client:

awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
2010-08-17 21:34:01 +02:00
Uli Schlachter 5fafe8d0eb Fixes for maximized clients
When a client is maximized and then has a titlebar added / removed, we need some
special magic to make sure it still gets the correct geometry. This is now done
by maximizing the client again.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-17 20:52:32 +02:00
Uli Schlachter 6d1130b408 Ignore the titlebar geometry on fullscreen clients
When a client is fullscreen, it should cover the full screen. There's no point
in trying to do clever things if the titlebar is banned anyway.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-17 18:06:40 +02:00
Uli Schlachter 5a51778768 Unban the titlebar when leaving fullscreen
When entering fullscreen, we remove the titlebar via titlebar_ban(). Obviously,
it makes sense to unban the titlebar again when leaving fullscreen. :)

Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-17 18:04:33 +02:00
Uli Schlachter 6ed3b61844 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:56 +02:00
Uli Schlachter 4862212c14 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:54:12 +02:00
Uli Schlachter 5225683d9b Track the last timestamp received from the server
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 14:38:14 +02:00
Uli Schlachter b938ce00b5 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:35:03 +02:00
Uli Schlachter 0e798d0d76 Check "focusable" in awful.client.focus.filter(c)
Signed-off-by: Uli Schlachter <psychon@znc.in>
2010-08-12 13:22:44 +02:00
Uli Schlachter 9d1ae71cbf 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:22:37 +02:00
Uli Schlachter 6f19940020 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:52 +02:00
Uli Schlachter 8cbfd442a0 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 14:00:16 +02:00
Uli Schlachter ce4088bbf7 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 12:00:45 +02:00