Commit Graph

10227 Commits

Author SHA1 Message Date
Emmanuel Lepage Vallee e12b5fb097 naughty: Break the API (sorry) to make the signals more standard.
Most of the notification code is from 2017. Soon after being written,
the permission system started to take shape. This required to
standardize the `request::` signals into the "object, context, args"
style. The notification code wasn't merged during that refactoring
and was accidently merged without the fixes.

Since this is still unreleased, I break the API now before it is too
late. Sorry about this.
2020-02-16 02:28:03 -05:00
Emmanuel Lepage Vallee c6f617ab98 themes: Add `ruled.notification` to all themes.
The rational behind this is that adding more and more `beautiful`
variables doesn't scale. While not everybody is on board with this,
I think we should move more logic into the theme to put an end to
the unscalable complexity plagging some modules (such as the
tasklist).

Instead of adding a variable for the background and foreground color
of urgent notification, we can now use the rules.
2020-02-16 02:28:03 -05:00
Emmanuel Lepage Vallee 05ba03538f ruled.notification: Add a `never_timeout` property.
It was possible to set `timeout = 0`, but this is weird to document.
Better just add a variable.
2020-02-16 02:28:03 -05:00
Emmanuel Lepage Vallee 30df6055b7 ruled.notification: Do not require `naughty`.
Since it is used only one, use require() directly. This allows
to require it from `beautiful` without a circular dependency.

In turn, this allows to set colors using the rules rather than
adding an endless amount of theme variables.
2020-02-16 01:25:47 -05:00
Emmanuel Lepage Vallee cab352781d ruled.notifications: Add an implicit timeout to the rules.
This replaces the old preset one.
2020-02-15 21:45:35 -05:00
Emmanuel Lepage Vallee 2d477383ee tests: Test the notification rules. 2020-02-15 20:33:21 -05:00
Emmanuel Lepage Vallee afe58d6cd2 notification: Add rules for notifications.
This commit introduce the new "ruled" module. This new top level
module will eventually host all "rules" related modules.

As for the content of the commit, it adds rules for notification. They
are mostly identical to the client rules and can be used to customize
or filter the notifications. It replaces the old "preset" API. The
preset API inner working was mostly a duplication of the early
`awful.rules` API, but was never as flexible. Thus the idea behind this
work is to converge all "core" classes to use a similar declarative API.
2020-02-15 20:33:21 -05:00
Emmanuel Lepage Vallee 9f5a17ed98 doc: Add the notification property table.
This is autogenerated using the `build_rules_index.lua` script.
2020-02-15 20:33:21 -05:00
Emmanuel Lepage Vallee c1d59fef24 doc: Build property indexes for more classes instead of only client.
These index will be used for the rules documentation.
2020-02-15 20:33:21 -05:00
Emmanuel Lepage Vallee 3da2264df2 doc: Add a shared section for the signal documentation. 2020-02-15 20:33:21 -05:00
Mahe 6779a61b40
mouse: respect border width in get_current_widgets (#2990) 2020-02-15 19:27:33 -05:00
Emmanuel Lepage Vallée 59b31e74b3
Merge pull request #2988 from Elv13/notif_rules_groundwork
Fix multiple notifications issue
2020-02-15 17:59:28 -05:00
Emmanuel Lepage Vallée 10e32198e7
Merge pull request #2982 from Elv13/modeline
Support shebangs (#!), modelines, API levels and add more doc.
2020-02-15 17:53:41 -05:00
Uli Schlachter 225bb8a8c6 Consider icon spacing in systray:draw()
When less space is available than was asked, systray:draw() has to
compute the right base size so that all the icons fit into the available
space. This computation so far ignored the icon spacing, resulting in a
too large base size.

Fixes: https://github.com/awesomeWM/awesome/issues/2981
Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-02-13 12:11:41 -05:00
Uli Schlachter 60033a2113 Start some unit tests for the systray icon
Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-02-13 12:11:41 -05:00
Seth Barberee 2c919ed936 add test spec for placement 2020-02-13 00:26:01 -06:00
mergify[bot] fd237b9cd8
Merge pull request #2991 from psychon/cleanup_tag_history
Cleanup tag history on screen removal
2020-02-13 00:31:04 +00:00
Uli Schlachter 38a2a524a7 Cleanup tag history on screen removal
The tag history kept a strong reference to a screen even after that
screen was removed. This prevented the garbage collector from cleaning
up.

Fix this by getting rid of the tag history on screen removal.

Related-to: https://github.com/awesomeWM/awesome/issues/2983#issuecomment-584249568
Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-02-12 20:33:21 +01:00
Emmanuel Lepage Vallee ad880080f4 tests: Better test how the `box` notification handle screens.
Right now, there is still a memory leak *only* when there is active
`box` notification when the screen is removed. I failed to identify
where *this* leak is comming from. The previous few commits fix
~5 other leaks.
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 720bef0b02 naughty.notification: Do not hold a strong reference to the screen.
The screen will leak if there is active notifications when the screen
is removed. Note that as of this commit, it still does, but "less".
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 523e7dc6ba tests: Test gears.geometry.rectangle.is_inside. 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee d60c9ed0dd gears.geometry: Add a `rectangle.is_inside` function. 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 9d6ce1d298 doc: Fix gears.geometry doc. 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee edbf254c51 naughty.box: Have a better error message when an invalid position is set 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 816188163a naughty: Fix an internal index corruption issue.
Due to some signal callbacks, some notifications could be added twice
to the by-position index.
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 8190ece3b2 placement: Fix a parent geometry bug in `next_to`.
The function returns the geometry of the parent object. As it was used,
it was passed the parent object directly. The means the parent geometry
of the parent object was used instead of the geometry of the parent
object. This worked "fine" as long as the mouse was in the same screen,
but it was just hiding the bug.
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 0703fa2197 naughty.box: Move the notification when a screen is resized. 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 207efe318a doc: Upgrade the notification documentation to the latest standards. 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee ef7e4ce967 naughty.box: Allow constructor arguments to be passed to `wibox()`.
Because it was using a metatable proxy instead of a full copy,
`pairs()` wasn't working and thus any code based on it was
blind to the `args`.

Fixes #2956
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 21caa19a21 naughty: Add a way to revert to the legacy mode.
When `rc.lua` will use the new notification API by default, we need
a way to revert back to the lagacy mode to be able to test it.
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 9ec11bf1b3 naughty: Fix the screen property for the `box` layout.
The original idea was to decouple the notification and the screens, but
this causes the default `rc.lua` to behave in very unexpected ways.

This commit re-implement the `legacy` logic for the `box` layout.
2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee f5b5e6d90d naughty: Add a `request::screen` handler. 2020-02-10 04:13:17 -05:00
Emmanuel Lepage Vallee 636cc2bf9c naughty.background: Do not use the deprecated `shape_border_width`.
The notification code predates the deprecation, but was merged after
it.
2020-02-10 03:30:21 -05:00
Emmanuel Lepage Vallee e0dac2e901 awful.popup: Replace the deprecated awful.util.table with gears.table.
The popup code is older than the deprecation, but was merged after it.
2020-02-10 03:30:21 -05:00
Emmanuel Lepage Vallee d0187055d8 init: Print a warning when non-ASCII encoding is used in a modeline. 2020-02-08 17:59:16 -05:00
Emmanuel Lepage Vallee 9cbc8a18c0 rc.lua: Revert moving the sloppy focus to awful.permissions.
This caused a behavior change it wasn't clear how to use the
permission API to change the focus mode.

The change will only take effect if the user override the API
level.
2020-02-08 17:59:16 -05:00
Emmanuel Lepage Vallee 11f0a466b0 rc.lua: Add a modeline by default.
This way people who fork the default config now wont have a bad
suprise the day 5.0 gets released.
2020-02-08 17:59:16 -05:00
Emmanuel Lepage Vallee 3a6af7bf6c doc: Document that `-s` is the alias for `--search`.
For some reason it wasn't.
2020-02-08 17:59:16 -05:00
Emmanuel Lepage Vallee d755a877ff doc: Add a new manual page describing the command line options. 2020-02-08 17:59:16 -05:00
Emmanuel Lepage Vallee d58b4c3d96 cmd: Add more info to --version.
Now that modeline are supported, they will affect the content of
version. This commits only adds the new information. `--version` has
to be the last command line argument and the modeline isn't parsed
yet.

Another commit will make sure --version parses the modeline and
finishes to process the command line arguments in case it isn't
last. Please note that luarocks also affects data points such as
the LGI version. It should be smarter and check if `rc.lua` has
`require("luarocks")`. This commit does *not* do it.
2020-02-08 17:18:01 -05:00
Emmanuel Lepage Vallee e0b982fa1a gears.debug: Use the API level as the source of truth.
Rather than the version.
2020-02-08 17:18:01 -05:00
Emmanuel Lepage Vallee ee80fe052f init: Add an API level concept to `capi`.
The API level concept is something used by other projects such as
Android and iOS to allow deprecated features to be removed and the
bahavior to be altered without breaking compability with existing
code.

The same will apply to AwesomeWM. The current API level is "4" and
as long as config use this, no deprecation or bahavior change will
be exposed. If the user sets it to an higher value or we release
the next major version and new users start to use the, then current,
default config, they will use the new API level.

The the far future, if ever, we could fork the entire Lua libraries
to support legacy APIs. This would only require to keep the core
API support for those legacy calls. In the meantime, `gears.debug`
will use this to manage the deprecation and some conditional code
will be added as a last resort attempt to preserve behavior
compatibility while moving forward with breaking changes.
2020-02-08 17:18:01 -05:00
Emmanuel Lepage Vallee d2f8999595 init: Support loading awesome with shebang (#!) executables.
This commits re-use the modeline code from the previous commit
to support Lua scripts starting with #!. Previously, it was
non-trivial to add support since most *nix OS wont parse the
command line arguments correctly. Since we now have a state
machine good enough for 95%+ of the use case, it is easy to
support them.
2020-02-08 17:18:01 -05:00
Emmanuel Lepage Vallee f1aedb237a init: Add modeline support.
This commits adds the ability to add an `-- awesome_mode:` comment
to `rc.lua`. This line will be interpreted before Lua starts and
allow command line options to be set in the file.

There is also a partial shebang mode (`#!`) support. While it is
not yet possible to make a random Lua file executable and start
`awesome`, it is at least supported to configure AwesomeWM. The
next commit will add the missing bits.

This commit implements the parsing using a state machine. While
glib has its own functions, they don't do 100% of what we need.
It could have been possible to use them anyway and get quotes,
escaping and UTF-8 support for free. The downside would have been
duplicated code to handle shebangs and modeline. The state machine
code fully support 3 different ways of loading the arguments with
the same code path.
2020-02-08 17:17:59 -05:00
Emmanuel Lepage Vallee c616400239 cmd: Add an option to force the command line arguments.
The next commit will add modeline support. By default, modelines have
the final work on which options to set. However, mostly for testing,
this isn't flexible enough.
2020-02-08 17:12:56 -05:00
Emmanuel Lepage Vallee af4b4a254f init: Move the command option parsing to its own file.
The next commit will add modeline support and share the code.
2020-02-04 01:50:02 -05:00
Emmanuel Lepage Vallée cc4ebd80fe
Merge pull request #2975 from Elv13/fix_2971
Fix awful.mouse.move/awful.mouse.resize
2020-02-02 20:36:31 -05:00
Emmanuel Lepage Vallee 68a6c978f5 doc: Document that wibox have class-level signals. 2020-02-02 21:07:07 -05:00
Emmanuel Lepage Vallee 973671b081 doc: Document that awful.mouse.resize/move use the permission framework. 2020-02-02 21:07:06 -05:00
Emmanuel Lepage Vallee 44301589c4 wibox: Connect the existing request::geometry signal to an handler.
The signal has been implemented for years, but nothing was connected
to it.
2020-02-02 21:07:04 -05:00