Commit Graph

9417 Commits

Author SHA1 Message Date
Uli Schlachter 6c559e188c Handle SIGCHLD ourselves instead of through GLib
GLib is very careful not to "fetch" any children that it was not asked
to fetch. Thus, if awesome inherits some children, it does not reap them
and starts collecting zombies.

Thus, this commit makes awesome handle SIGCHLD directly: On SIGCHLD, a
byte is written to a pipe. The main loop reads from this pipe and
collects children via waitpid(-1). Unknown children cause a warning to
be printed. We might want to remove this warning if it turns out to be
annoying.

This commit adds 79 lines and removes 89 lines. Thus, this is a net
reduction in lines of codes. This is because previously, we gave the
list of still-running children that we know about to the next awesome
instance we a --reap command line argument. This was added so that
awesome does not get zombie children. However, this commit fixes this
problem and makes all the code for this 'feature' unnecessary.

Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=886393
Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-21 15:30:07 +02:00
Peter Kasza 016be728b1 Remove unsatisifiable condition when destination screen is empty
This commit fixes the following issue: https://github.com/awesomeWM/awesome/issues/2365
2018-08-21 13:19:02 +02:00
Uli Schlachter a54fea40ef event_handle_configurerequest: Add missing test
c->size_hints.win_gravity only contains something valid if the
XCB_ICCCM_SIZE_HINT_P_WIN_GRAVITY bit is set in the flags. Most likely
this wasn't noticed before, because most code just happens to
zero-initialize this field and gravity 0 is NorthWest, which does not do
anything.

Signed-off-by: Uli Schlachter <uli.schlachter@informatik.uni-oldenburg.de>
2018-08-20 10:40:58 +02:00
Uli Schlachter 62d27950fa Handle border width changes in ConfigureRequests early
The function window_set_border_width() causes its own gravity handling.
Thus, to make sure that this gravity handling does not interfere with
what the code in here does later, we just apply changes to the border
width first, and then do everything else.

Signed-off-by: Uli Schlachter <uli.schlachter@informatik.uni-oldenburg.de>
2018-08-20 10:33:06 +02:00
Uli Schlachter 2ebd120223 Refactor event_handle_configurerequest
Before this commit, the code in here first handled clients changing its
x/y position and afterwards it handled resizes. This meant that the
special case of "client resizes without moving itself so we need to
apply gravity" had to have special checks on whether the client moved
itself or not.

Change the code so that resizes are handled first and moves later. This
naturally handles the problem: If the client resizes and moves itself,
the move done for the resize is later overwritten when the move is
handled.

No functional changes are intended.

Signed-off-by: Uli Schlachter <uli.schlachter@informatik.uni-oldenburg.de>
2018-08-20 10:28:21 +02:00
Uli Schlachter 3301e9b0ff naughty.dbus: Duplicate surface data
When an icon is sent over dbus, we turn this into a cairo ImageSurface.
This is done by turning the actual icon data into a string and using
cairo.ImageSurface.create_for_data() to create a surface for this data.
However, this function only creates an ImageSurface that refers to this
data. It does not copy the data. Thus, when the Lua GC later frees the
string, we have a cairo surface that refers to already-freed data.

Fix this by duplicating the cairo surface, which makes cairo create a
copy of the data. Then, we finish the original surface. While doing
this, the string is kept alive in a local variable.

(Possibly) Fixes: https://github.com/awesomeWM/awesome/issues/2361
Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-19 20:49:03 +02:00
mergify[bot] 81da3a2ce7
Merge pull request #2358 from Elv13/add_filter_section
doc: Add filter section for the taglist and tasklist
2018-08-19 07:02:06 +00:00
mergify[bot] e9d95fba1e
Merge pull request #2345 from psychon/fix_transient_for_unsetting
Handle unsetting of .transient_for
2018-08-19 06:35:15 +00:00
Emmanuel Lepage Vallee 250475d65c widget.common: Use the new ldoc filter section. 2018-08-18 18:14:24 -04:00
mergify[bot] 8151a13e44
Merge pull request #2355 from psychon/gravity_changes
Some gravity changes
2018-08-18 22:07:26 +00:00
mergify[bot] b0c83e3a7b
Merge pull request #2356 from psychon/awful_menu_comment
Fix documentation of awful.menu.new
2018-08-18 22:01:20 +00:00
Emmanuel Lepage Vallee 3792a17c2f ldoc: Add a "filter" section for the taglist and tasklist 2018-08-18 15:49:05 -04:00
mergify[bot] 17018118d2
Merge pull request #2353 from psychon/focus_race
Fix a race with setting the focus
2018-08-18 15:54:49 +00:00
Uli Schlachter 5b45442c73 Fix documentation of awful.menu.new
Fixes: https://github.com/awesomeWM/awesome/issues/2348
Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-17 14:20:31 +02:00
Uli Schlachter a996b21ee2 test-gravity.c: Accept different roundings
Some window gravities require a division by two. Up to now,
test-gravity.c expected this division to always be rounded up. This
commit changes the code to also allow rounding down.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-17 11:48:49 +02:00
Uli Schlachter 21b7b29630 xwindow_translate_for_gravity: Change instead of set argument
Previously, this function overwrote the value of its argument with the
result. After this change, the function merely changes the given
variable by the calculated argument.

Thus, the old behaviour is achieved by setting the variable to zero
before the call, which all callers already did. However, for most
callers this change means that a temporary variable can be removed and
instead xwindow_translate_for_gravity() will directly change the target
variable.

No change in behaviour intended.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-17 09:58:30 +02:00
Uli Schlachter ea98919f61 awful.rules: Also check for tag on other screens
When a tag is specified by name, awful.rules only searched for the tag
on the client's screen. This commit extends the search to all screens,
but only if no specific screen was specified for the new client by some
rule.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-17 09:44:29 +02:00
Uli Schlachter 56e727e026 Fix a race with setting the focus
There are two ways in which the input focus can change: Lua can request
a change and the X11 server can inform us that the input focus changed
(because some application changed it).

In the first case, we still have to inform the X11 server about the
desired change, in the second case we must not to avoid races due to
X11's asynchronous nature.

However, there was a case where we screwed up: When a focus change is
still pending, meaning that Lua assigned the focus elsewhere, but we
have not yet sent this focus change to the X11 server, we could get an
event from the X11 server telling us that the focus changed. To make
sure that the pending focus change is not lost, we sent the focus change
out in this case (call to client_focus_refresh() in
event_handle_focusin()). After sending out this pending call, we updated
the internal state to record that whatever the X11 server just told us
had the focus. The intention was that our just sent-out focus change
will cause the X11 server to send a new event and our to-be-focused
client then has the focus.

However, if the pending focus change was for a client which only showed
up in this event loop iteration, the client was still banned. This means
that client_focus_refresh() would call client_unban() to be able to give
the focus to this client. However, since awesome (partly) allows to
"focus" currently banned clients, client_unban() recorded that there is
a pending focus change. This caused confusion later on.

In this specific bug, a main window opened a dialog, and when this
dialog was closed, a new dialog window was opened immediately. When the
first dialog was closed, Lua (the focus history) gave the input focus to
the main window. Now, a new dialog showed up and Lua focused it. Next,
we received the event from the X11 server telling us that the main
window was focused. Because there was still a pending focus change to
the new dialog window, event_handle_focusin() called
client_focus_refresh() to send out this focus change. This set
globalconf.focus.need_update to false and continued. However, because
the new dialog only just now appeared, it was still banned, meaning that
client_focus_refresh() had to call client_unban(). This set
globalconf.focus.need_update to true. Thus, when client_focus_refresh()
returned, globalconf.focus.need_update was incorrectly true. Next,
event_handle_focusin() recorded that the main window had the focus.
Thus, it now appeared as if there was a pending focus change for the
main window. Next, we got the event from the X11 server telling us that
the dialog is now focused, and because focus.need_update was set,
awesome now send out a focus change request for the main window.

Fix this race by unsetting globalconf.focus.need_update at the end of
client_focus_refresh() and not at the beginning, thus making sure that
client_unban() cannot set this flag again.

Fixes: https://github.com/awesomeWM/awesome/issues/2220
Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-16 18:03:22 +02:00
Uli Schlachter bbc4fba3c0 Merge branch 'moue-typo' of https://github.com/psychon/awesome 2018-08-15 13:18:38 +02:00
Mak Kolybabi 24df2ecd6b
Grammar correction. 2018-08-14 06:47:41 -05:00
Uli Schlachter 8b5dd10f32 awful.menu: Fix typo "moue" -> "mouse"
The typo was introduced in commit a1941efc9.

Its effect should be minimal: :item_enter() itself does not care about
the 'mouse' option, but it forwards to :exec(). Here, an action is
invoked either if it was not caused by the mouse, or if it was caused by
the mouse and either auto_expand is enabled (which is the default), or
the item-to-be-executed is actually the active item.

In other words, it is quite non-trivial to come up with a case where
this typo made a difference. But of course that's no reason to leave the
typo in.

Fixes: https://github.com/awesomeWM/awesome/issues/2347
Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-13 10:26:10 +02:00
Uli Schlachter 297003126d Handle unsetting of .transient_for
When a window has a WM_TRANSIENT_FOR property that is later unset,
awesome would still keep c.transient_for pointing to the previous
"parent client". This commit fixes that.

First, property_update_wm_transient_for() is fixed so that it unsets
c->transient_for_window if the WM_TRANSIENT_FOR property is deleted.
Additionally, this then calls client_find_transient_for() to update the
c->transient_for pointer.

Secondly (and a bit unrelated), this changes client_find_transient_for()
so that it always sets c->transient_for. Previously, if updating this
property would introduce a cycle in the transient_for relation, it would
just leave c->transient_for with its old value. After this change, it
gets explicitly set to NULL instead.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-10 16:39:46 +02:00
Uli Schlachter 3aefce7ccb Merge branch 'example_tests_during_build_again' of https://github.com/psychon/awesome 2018-08-08 15:53:32 +02:00
mergify[bot] 56b2111b86
Merge pull request #2307 from Elv13/replace_keygrabber
Keyboard and keygrabbing handling overhaul
2018-08-07 18:00:49 +00:00
Emmanuel Lepage Vallee f11c0b47b9 doc: Remove capi.keygrabber from the official doc
`awful.keygrabber` should be the only one used directly.
2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee 106fba6dd6 timer: Add a reminder to apply the existing naming conventions
Not now because changing things for the sake of changing things in
a point release is a bad idea, but eventually.
2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee efe82faf1c hotkey_popup: Use awful.keygrabber instead of capi.keygrabber 2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee ff743b375f doc: Add fake_inputs examples. 2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee a961c5f002 tests: Add keygrabber tests. 2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee e05222088a tests: Add fake_input tests 2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee 2bf930b044 keygrabber: Refactor to be an object instead of a function.
The old keygrabber API wasn't doing what the users want from a
keygrabber module. With tons of boilerplate code, everything could
be done, but it wasn't trivial.

This commit add a default grabber function that implements the
keybinding API already used by `awful.key` and `awful.prompt`.

It also add syntax candy left and right to make the module "feel"
like a native CAPI object.

Nothing is perfect and some parts, like adding root keybindings, are not
vevy pleasing. However it fulfill its goal when it comes to make
previously non-trivial use case very easy to implement and deploy.
2018-08-06 19:03:25 -04:00
Emmanuel Lepage Vallee 0765772c17 shims: Fix a typo in a root.fake_input name 2018-08-06 18:34:40 -04:00
Emmanuel Lepage Vallee a32d892988 tests: Add ways to input fake strings and keybindings.
This commit add a way for the test to avoid all the boiler-plate code
necessary to perform higher level input emulation.
2018-08-06 18:34:40 -04:00
mergify[bot] 1cb8375261
Merge pull request #2340 from psychon/print_log_on_awesome_client_failures
tests/run.sh: Print log on awesome-client failures
2018-08-06 18:06:47 +00:00
Uli Schlachter 2769bdbc5b tests/examples: Run example-tests in build phase, not configure phase
Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-06 16:50:46 +02:00
Uli Schlachter be728324ef tests/examples: Change ENV handling
Instead of messing with CMake's environment and having that implicitly
inherited when running a process, explicitly set $SOURCE_DIRECTORY where
required.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-06 16:50:46 +02:00
Uli Schlachter 0e94f8bd6b tests/run.sh: Print log on awesome-client failures
tests/run.sh uses awesome-client to actually make awesome run the test.
If awesome-client fails, then the only error message that is printed look like:

== Running /home/travis/build/awesomeWM/awesome/tests/test-leaks.lua ==
Error org.freedesktop.DBus.Error.NoReply: Message did not receive a reply (timeout by message bus)
E: dbus-send failed.
make[4]: *** [CMakeFiles/check-integration] Error 1

To also get the output from awesome, this commit makes failures from
awesome-client non-fatal so that the following shell code can notice the
failure and hopefully print some useful information.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-06 16:03:17 +02:00
Emmanuel Lepage Vallée e889caba91
build: Auto-add example tests outputs. (#2339)
This commit allow the file to be auto added when it doesn't exist. This
save the useless process of writing it by hand.
2018-08-06 09:30:59 -04:00
Uli Schlachter 73b519d38b Fix STRICT_TESTS (#2338)
STRICT_TESTS was introduced in commit c22b93963. Some people have setups
where e.g. fontconfig produces warnings. These warnings made the tests
under tests/examples/ fail. The above commit changes things so that
these warnings are ignored by default, unless STRICT_TESTS is enabled.

Commit b5ca8bf937 broke this by making example test failures fatal
again.

Fix this by appending "|| true" to the command to run in case strict
tests are disabled. Thus, all failures from tests/examples/runner.sh get
ignored.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-06 09:05:51 -04:00
Emmanuel Lepage Vallée dd7161ee0a
build: Fix a regression when adding new example tests. (#2337)
If the example had a text output, it would cause an error

Regression from b5ca8bf93
2018-08-06 09:05:31 -04:00
Emmanuel Lepage Vallée aab582c0a0
Merge pull request #2329 from Elv13/fix_minimize_activate
Fix 3rd party toolbar unminimization and the default rc.lua focusable issue
2018-08-03 18:07:50 -04:00
Uli Schlachter d76143f97b Add support for motif wm hints
This makes motif wm hints available on clients as c.motif_wm_hints.
Actually interpreting all the values is up to Lua. The definition of the
necessary properties is taken from motif.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-08-03 19:19:43 +02:00
Uli Schlachter 15a508f022 Merge branch 'examples_tests_during_build' of https://github.com/psychon/awesome 2018-08-03 14:30:25 +02:00
Uli Schlachter 477af1b145 test runner: Move running to a shell script
Instead of running the example tests directly from CMake and checking
the results via CMake, the tests are now run through a shell script.

So far, there are too many variables involved for me to easily figure
out how to run this shell script in the building phase instead of the
configuring phase, but at least this commit moves the "actual running"
out of CMake, bringing us a step closer to that goal.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2018-07-31 17:50:41 +02:00
mergify[bot] b9e981ba63
Merge pull request #2327 from laszloth/master
Add a beautiful option to remove borders when maximized
2018-07-30 06:39:38 +00:00
Emmanuel Lepage Vallee e0d1b404c5 rc.lua: Use request::activate instead of client.focus.
For a long time, it was deemed overkill and made rc.lua less readable
without the documentation.

However it is now clear that it's handling of unfocusable clients and
general bypassing of both `awful.client.focus.filter` and
`awful.ewmh.activate` filters causes bugs. Fixing them individually
in each instance of `rc.lua` `client.focus = c` would add so much code
that all the clarity provided by not using request::activate would be
burried in boilerplate code.

Fix #2328
2018-07-29 18:22:48 -04:00
Emmanuel Lepage Vallee 091adca070 activate: Merge the old hardcoded focus filter with awful.ewmh one.
This code was attached to mouse::enter in `rc.lua` instead of being part
of the unified request::activate architecture.

There is currently no way to detach this focus filter because it is
generally correct.
2018-07-29 18:22:22 -04:00
Emmanuel Lepage Vallee 26e4856821 activate: Raise unfocusable clients.
I am sure there is corner cases where this is considered wrong, but it
allows to simplify rc.lua handling of such clients.
2018-07-29 18:22:22 -04:00
Emmanuel Lepage Vallee 69e9cc4cbd request::activate: Unminimize clients
Fixes #927
2018-07-29 18:22:22 -04:00
mergify[bot] 0d994c0603
Merge pull request #2312 from psychon/travis-Werror
Another attempt at making -Werror work on Travis
2018-07-29 21:10:07 +00:00