Commit Graph

3911 Commits

Author SHA1 Message Date
Emmanuel Lepage Vallee fb8f7cfadd hotkey/calendar: Fix rendering when the theme color is a pattern.
It blew up.
2022-08-29 22:48:54 -07:00
Emmanuel Lepage Vallee 75ab366769 doc: Proof reading fixes.
* Rendering problems
 * Incomplete type information
 * Obsolete type information
 * Missing type information
 * Missing return value
 * Incomplete return value type
2022-08-29 22:48:54 -07:00
Emmanuel Lepage Vallee 11a7c8c47b doc: Fix the `layoutbox` doc.
It didn't have a constructor.
2022-08-29 22:48:54 -07:00
Emmanuel Lepage Vallee f8f11a23f5 doc: Add some @see to the shape doc.
The `transform` function was unclear.
2022-08-29 22:48:54 -07:00
Emmanuel Lepage Vallee 69ab73aa23 doc: Fix a popup doc issue.
The variable name wasn't in the @param string, so it was called "The".
2022-08-29 22:48:54 -07:00
Emmanuel Lepage Vallee dd7492fa7c doc: Fix some broken links in the tasklist doc. 2022-08-29 22:48:54 -07:00
Emmanuel Lepage Vallee f6f57e7ba0 gears.color: Add a function to apply the alpha to a color.
Some code in awesome concatenate color strings. This means it blows
up when the pattern are used instead of color, with this, it fails
gracefully (by returning the unmodified pattern).
2022-08-29 22:48:36 -07:00
Emmanuel Lepage Vallee caad1bec55 tooltip: Make the `args` optional.
It would render a non-useful error when calling `awful.tooltip()`.
2022-08-29 22:48:36 -07:00
Emmanuel Lepage Vallee 935da05be4 layoutlist: Sanitize the color when building Pango strings.
This was aready done in the `tasklist` and `taglist`.
2022-08-29 22:48:36 -07:00
Emmanuel Lepage Vallee 18468d32dd widget: Fix saving a widget to a file.
Previously, if `beautiful.fg_normal` wasn't black, it would not render
correctly.
2022-08-29 22:48:36 -07:00
Emmanuel Lepage Vallee 91fe314e0b gears.color: Fix color serialization.
Some widgets like the tasklist serialize the theme colors to use them
in Pango markup. If the theme color were already converted to pattern,
that blew up. With this fix, pattern can be converted back into strings
correctly.
2022-08-29 22:48:36 -07:00
Emmanuel Lepage Vallee 8f71ef6dff doc: Document the tasklist widget. 2022-08-29 22:48:35 -07:00
Emmanuel Lepage Vallee c7ed176586 tasklist: Fix `disable_icon`.
It regressed when the tasklist switched to a template by default.
This was done to support the icon size.

Fix #3178
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee b8dbba34db taglist/tasklist: Fix the fallback font.
When beautiful.font isn't set, it fell back to "". That value isn't
actually the same as the "default" Pango font. Better use `nil`.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee 396bddb946 layoutlist: Add a `count` property.
Because it was added to the `taglist` and `tasklist` and their API
somewhat mirror each other.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee 798d31881d taglist: Add a `count` property.
This is mostly for its signal handler. It will allow to replace the
template or layout based on the number of tags.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee b11a8fb52c tasklist: Add a `count` property.
This is mostly for the signal handler. It will allow to do things
like replace the template or layout based on the number of clients.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee 70c6821997 tasklist: Convert to a real widget.
Previously, it was monkey-patching the input layout object. This will
allow to replace the laoyut at runtime. For example, switching from
`fixed.horizontal` to a grid when the number of client gets too large.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee a3b7532056 taglist: Expose more properties.
They were passed in the constructor, but could not be changed.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee df59f5bdd3 taglist: Convert into a real widget.
It no longer monkey-patch the input layout widget. This allows the
layout to be replaced at runtime.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee 2f3bce00e6 tasklist: Refactor to base a normal widget.
It was previously monkey-patching the input layout object into
the final tasklist.

This is a breaking change, but affects undocumented behaviors. By
doing this, it becomes possible to expose the properties in the
public API. This, in turn, allows to document them. Right now,
the documentation is very vague on some behaviors.
2022-08-29 22:47:55 -07:00
Emmanuel Lepage Vallee 1601c6890b keygrabber: Document 5 deprecated, but still honored, method arguments.
As pointed out by @sclu1034, some users might actually pass the return
values of a function with multiple returns. This would cause some
confusing behavior. Documenting previous mistakes is in this case better
than hiding them.
2022-08-28 17:13:52 -07:00
Emmanuel Lepage Vallee 75019c3f6f Implement fixes for Luacheck 0.26.1
* Rename or mute parameters starting with _
 * Replace `not (>=)` with `<`
2022-08-28 16:59:14 -07:00
Kamack38 05a405b38b
feat(hotkeys: widget): add 3 new labels for keyboard keys (#3668)
Signed-off-by: kamack38 <64226248+kamack38@users.noreply.github.com>
2022-08-18 21:22:16 +02:00
Matthias Paulmier b7bac1dc76
awful.widget.prompt: Properly take into account `with_shell` arg (#3659) 2022-07-12 08:53:34 -07:00
Actionless Loveless 9ca7bb487a
style(beautiful: gtk; hotkeys_popup): make new luacheck a bit happier (#3651) 2022-06-30 08:32:45 -07:00
A.I c3c41bed2f
pass tag icon directly to imagebox
so that svg icons can be rendered with rsvg
2022-06-17 23:17:50 +08:00
Grumph 3a542219f3
Fix awful.keygrabber:add_keybinding function (#3568)
* Check the correct variable

* Fix table access

In every other use of _private.keybindings in this file, the key is a
string, not an awful.key

* Simplify code

key.key is always defined

* Add tests

* add(spec) add_keybinding unit test

* Revert "Add tests"

This reverts commit 808b17cd5c.

Co-authored-by: Aire-One <aireone@aireone.xyz>
2022-05-29 13:10:29 -07:00
Emmanuel Lepage Vallée be69e347fa
Merge pull request #3591 from actionless/spawn-doc-spaces
doc(awful: spawn): fix spaces
2022-05-29 12:45:09 -07:00
Lucas Schwiderski 51c184fc06
refactor(naughty.notification): Align table values 2022-05-29 10:52:20 +02:00
Lucas Schwiderski 62f13d3e08
fix(naughty.notification): Fix missing accessor
Fixes #3623.
2022-05-29 10:52:11 +02:00
Actionless Loveless c539e0e435
hotkeys_popup: expose labels and remove unused backspace translation (#3585)
the actual key is BackSpace, not Backspace, so this translation was always unused


Co-authored-by: Lucas Schwiderski <4508454+sclu1034@users.noreply.github.com>
2022-03-21 18:09:49 +01:00
actionless 1d228a13ab doc(awful: spawn): proper quotes for an arg name 2022-03-20 18:57:12 +01:00
actionless 3d94bf0738 doc(awful: spawn): fix spaces 2022-03-20 18:57:12 +01:00
sarubo 9895aeb0d5
fix(placement) bad argument to 'field' (#3572)
RectangleInt must use integer
Remove float from RectangleInt
2022-02-25 19:34:51 +01:00
Aire-One e260696826
Merge pull request #3564 from pepijnKrijnsen/parse_color
Update documentation for gears.color.parse_color(col) method
2022-02-14 19:25:01 +01:00
Pepijn Krijnsen fd22d51207 Correct width and height documentation
The constraint:set_width function listed ‘height’ as a required parameter; the constraint:set_height function listed ‘width’ as a required parameter. Swapped those around.
2022-02-12 21:10:42 +00:00
Pepijn Krijnsen 53b70b4585 Update documentation for gears.color.parse_color(col) method
Lua comments now accurately describe the return values of this method.
Added a more comprehensive example, too. Issue #3555
2022-02-12 21:04:21 +00:00
Marvin Ewald 76e3cc4799 Use focus.filter in awful.client.focus.(global_)bydirection 2022-02-10 16:58:10 +01:00
SystematicError 86b6c49a0f
Fix typo (#3562)
Co-authored-by: SystematicError <systematicerror@users.noreply.github.com>
2022-02-07 11:08:08 -08:00
Actionless Loveless 2d6244f944
doc(progressbar): sanitize paddings/margins (#3556) 2022-02-03 13:25:05 +01:00
Xinhao Yuan b49a53f6dd
Multi-row support of systray by taking a beautiful variable specifying the maximum number of rows to fill per column. (#3520)
Also, fix the fitting logic so that the result width and height are fitted in the available space. Previously the result dimensions can be larger than the input, but cropped in e7a21947e6/lib/wibox/widget/base.lua (L547). But still it can cause problems e.g. when used inside wibox.container.place.
2021-12-30 13:22:31 -08:00
Emmanuel Lepage Vallée 1413f0c4b9
Merge pull request #3513 from necauqua/fix-timer
Signalled error: bad argument #3 to 'timeout_add' (number has no integer representation)
2021-12-22 12:52:07 -08:00
Emmanuel Lepage Vallée 790e535017
Merge pull request #3529 from sclu1034/feature/docs
Various docs improvements
2021-12-22 12:05:43 -08:00
Grzegorz Bednarski f353499230
Support minimized client property in tasklist icons (#3526) 2021-12-21 11:48:53 -08:00
Lucas Schwiderski e55d1d41f3
docs(g.timer): Fix typo 2021-12-21 10:46:43 +01:00
Lucas Schwiderski b343cb8111
docs(g.timer): Improve wording 2021-12-21 09:09:09 +01:00
Lucas Schwiderski 869e63fcdc
doc(w.w.textbox): Make alignment property descriptions consistent
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-12-14 19:09:42 +01:00
HumblePresent 030073fee7 Apply presets before registering notification 2021-11-26 13:22:58 -06:00
Anton Bulakh 71d08ab6ec
Use gmath.round 2021-11-23 08:45:52 +02:00
Anton Bulakh e963d37cc4
Fix widget repaint printed errors 2021-11-22 12:39:16 +02:00
Anton Bulakh e64446082b
Fix timer errors 2021-11-22 12:24:20 +02:00
sarubo 8d61790be7 doc: Add the markup example of popup_calendar
Refer to tests/examples/awful/widget/calendar_popup/default.lua
2021-11-21 23:49:46 +09:00
sarubo 03e437e32a calendar_popup: Fix markup not working 2021-11-21 23:42:00 +09:00
Emmanuel Lepage Vallée 062ecfb6f0
Merge pull request #3490 from Elv13/less_flacky_tests
Less flacky tests
2021-11-13 00:42:18 -08:00
Emmanuel Lepage Vallée 2eb035e125
Merge pull request #3493 from Elv13/progressbar_doc
Improve the progressbar doc with more examples.
2021-11-03 12:40:56 -07:00
Emmanuel Lepage Vallee 76704b33e7 progressbar: Make `ticks` and `bar_shape` compatible with each other.
It looked horrible/buggy when combined. Now it looks like people would
expect it to work. Another problem was the `bar_border_width` look
when `ticks` was `true.
2021-11-02 20:36:07 -07:00
Emmanuel Lepage Vallee 0afb719f82 doc: Improve the progressbar doc.
Another commit in the "lets finish the widget doc" serie.
2021-11-02 20:36:07 -07:00
Emmanuel Lepage Vallee 9dcfde32e0 naughty: Never hold a strong reference to the notification in the box.
luajit was failing to GC the notification about 5% of the time. This
commit stores all widget notifications in a weak table and don't let
any lambda access the parent object notification object.

Each of those changes reduces the failure rate. There might still be
a couple in there, but the test passed 200x on my laptop with 100%
success rate.
2021-10-31 19:30:17 -07:00
Emmanuel Lepage Vallee 1fa0204d80 doc: Add many textbox examples. 2021-10-30 22:51:40 -07:00
Emmanuel Lepage Vallee 4df1cd6315 background: Correctly apply the matrix in the fallback border code. 2021-10-30 22:43:46 -07:00
Emmanuel Lepage Vallée 50b9b10437
texrbox: Fix a recent regression. (#3488)
The intial font wasn't set.
2021-10-28 19:24:49 -07:00
Emmanuel Lepage Vallée 1e0d1e7ba9
Merge pull request #3466 from Elv13/fix_3428
Fix a regression in naughty.notification.ignore_suspend
2021-10-28 12:27:42 -07:00
Emmanuel Lepage Vallée d5fae3f3dc
Merge pull request #3478 from Elv13/better_shims
Fix a few sequences template bugs
2021-10-28 12:27:11 -07:00
Emmanuel Lepage Vallée c8ada80fb3
Merge pull request #3484 from Elv13/2012_misc_fixes
Miscellaneous small bug fixes
2021-10-28 12:26:47 -07:00
Emmanuel Lepage Vallee bb65181e61 doc: Document the textbox font. 2021-10-27 20:08:15 -07:00
Emmanuel Lepage Vallee 5069f5c2ed client.floating: Add a missing signal connection.
The `fullscreen` state does affect the outcome of the state, so
it needs to be connected for request::border to be sent.
2021-10-27 20:08:15 -07:00
Emmanuel Lepage Vallee 7d6892992c client: Change the `relative_move` behavior.
The old behavior would move the client when `nil` was passed by
an almost arbitrary value. It would most of the time go off screen.

While this is a behavior change, what it replaces was so broken I
doubt anybody actually used `nil` in `relative_move`.
2021-10-27 18:30:30 -07:00
Emmanuel Lepage Vallee 146a9c3166 permission: Fix hiding the border for maximized clients.
When the theme variables were moved to the backend instead of `rc.lua`,
some magic was added to disable them if the user set the border. However,
some undocumented `awful.placement` code also set them and turned off
the theme variables. So it worked *once* then stopped working.
2021-10-27 13:41:11 -07:00
Emmanuel Lepage Vallee 907053f31a titlebar: Implement setting the font (as documented, but unimplemented)
It was documented to exist, but didn't.
2021-10-27 13:41:11 -07:00
Emmanuel Lepage Vallee c36a869ded textbox: Store the font in `_private`.
So a getter can work.
2021-10-27 13:41:11 -07:00
Emmanuel Lepage Vallee c7208b4bb0 layoutlist: Rename the constructor arg from `layout` to `base_layout`.
The documentation examples already called it that way.
2021-10-27 13:41:11 -07:00
Emmanuel Lepage Vallee 440d1560a3 layoutlist: Fix the `layout` consturctor parameter.
If set, it would override some important widget methods and
explode.
2021-10-27 13:41:10 -07:00
Emmanuel Lepage Vallee 2f8413acbc layoutlist: Use `layoutlist_spacing` instead of `tasklist_spacing`.
Old copy/paste bug.
2021-10-27 13:38:48 -07:00
Sergey fcef95b1f0 Removing duplicating descriptions of screen properties as read only
Removed "Immutable: true" from readonly properties descriptions.
2021-10-27 14:52:36 -04:00
Sergey 212ec72236 Removing read only from properties descriptions. It's set with ldoc tag now. 2021-10-27 14:52:36 -04:00
Sergey 6c3d233893 Mark readonly properties for screen 2021-10-27 14:52:36 -04:00
Sergey 43ff4e07ad Marking readonly properties for client 2021-10-27 14:52:36 -04:00
Emmanuel Lepage Vallee c63a80de5c layoutlist: Allow empty constructor. 2021-10-26 13:37:16 -07:00
Emmanuel Lepage Vallee 11e4fe88bb client.border_color: Fix a bug affecting floating clients.
If client client was tiled, the `fallback` could be
`theme.border_color_normal`, but if the client was
tiled, this fallback was never tried.

Now it tests for both "floating" and "active" fallbacks.

This problem actually affects the default theme.
2021-10-26 13:37:16 -07:00
Emmanuel Lepage Vallée 1e6f213bcf
Merge pull request #3477 from Elv13/fix_matcher
Fix a gears.matcher bug and add a small feature.
2021-10-23 12:15:29 -07:00
Emmanuel Lepage Vallée a1716a7edc
Merge pull request #3462 from Aire-One/fix/3458
Fix 3458
2021-10-22 23:27:55 -07:00
Emmanuel Lepage Vallee 9db62b824c gears.matcher: Add `fallback` rules.
Right now, all rules are additive, they are squashed into one big
array of properties. This is normally fine, but sometime you want
explicit rules for some objects, but also default rules if nothing
matches.

While this can be expressed in the current system by overriding
*all* properties, this require more effort than having "special"
and "fallback" rules.
2021-10-22 22:26:12 -07:00
Emmanuel Lepage Vallee 005c2d61a0 gears.matcher: Fix `rule_every`.
It really didn't do the right thing and didn't work anyway.
2021-10-22 22:26:12 -07:00
Emmanuel Lepage Vallée 8541637a85
Merge pull request #3475 from Elv13/fix_626
Another doc upgrade.
2021-10-21 15:07:54 -07:00
Emmanuel Lepage Vallee b2603f6a86 doc: Add images for awful.client.* functions. 2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee cbec148540 doc: Make sure all client.focus functions are in the same section.
Some were in the @staticfct and some in the @function sections.
2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee ae71158093 doc: Add documentation for the client "window factor" related functions
It might be a good idea to deprecate them and move them to the tag
class. However, these APIs are not exactly well designed, so
moving them wont solve that. Some day the dynamic client layout will
hopefully be merged and send these functions to the heap of smelly
bad ideas trash.
2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee 62685c661d doc: Modernize the tag documentation... again...
The last time this page had a refresh was in parallel with another
massive whole-doc project. Thus, this page still had older
conventions which everything else had already removed.
2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee a8d2fa0297 doc: Add a large number of `client` examples.
Backfill some under-documented APIs with yet more shiny images.
2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee 93283a9885 doc: Undocument internal client `urgent` and `shape` methods.
There is already some permissions to change the behavior. I don't
think there is valid user-facing use cases for these "methods".
2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee c7df6757ec titlebar: Add `urgent` colors.
Just the bg/fg/bgimage, not all buttons. the reason is for consistency
with the tasklist or border_color.
2021-10-18 14:38:37 -07:00
Emmanuel Lepage Vallee 785ca98337 client: Turn client.setslave/setmaster into properties.
It also no longer use the master/slave name. In this case, it kinds
of make sense since, for example, of the tag `master_count` is greater
than the number of clients, calling `client.setslave` move the client
to another "master" slot.

Closes #626
2021-10-15 20:00:23 -07:00
Emmanuel Lepage Vallee 203d0638be background: Improve the fallback rendering accuracy.
While it has a little aliasing problem, it actually correctly
renders the border using a mask like the normal code path.
2021-10-15 19:42:48 -07:00
Emmanuel Lepage Vallée 5f29d6d056
Update lib/naughty/notification.lua
Co-authored-by: Aire-One <aireone@aireone.xyz>
2021-10-14 20:51:31 -07:00
Emmanuel Lepage Vallee 213bfbc9bd doc: Fix a syntax issue in the layoutbox doc. 2021-10-14 14:09:47 -07:00
Emmanuel Lepage Vallee 01020a197d layoutlist: Support scrollwheel by default.
It acts like the default `rc.lua` tag/tasklist widgets.

Idea from https://github.com/awesomeWM/awesome/issues/3388
2021-10-14 14:09:47 -07:00
Emmanuel Lepage Vallee 1d5af8e8ad widget.common: Allow buttons to be replaced later.
So far, they could only be set in the constructor.
2021-10-14 14:09:47 -07:00
Emmanuel Lepage Vallee 9c042fcb79 layoutlist: Fix an assert when `buttons` are specified.
Fix #3388
2021-10-14 14:09:47 -07:00
Emmanuel Lepage Vallee cd2e961fcb layoutlist: Remove the duplicate `buttons` property from doc. 2021-10-14 14:09:47 -07:00
Emmanuel Lepage Vallee 0b075761e3 naughty: Fix the `ignore_suspend` property.
By fixing some suspend bugs a few weeks ago, I "regressed" this
a little. By that, I mean there were bugs in the suspend code
which caused `ignore_suspend` to work simply because suspend
globally failed rather than `ignore_suspend` being implemented
correctly.

Fix #3465
2021-10-14 14:03:39 -07:00
Aire-One cf9d4d382e fix(screen.content) use capi.root 2021-10-12 21:05:41 +02:00
Emmanuel Lepage Vallée d487d1010e
Merge pull request #3443 from Elv13/fix_3396
Improve suspending the notifications
2021-10-09 12:58:11 -07:00
Emmanuel Lepage Vallée 1f84dbef18
Merge pull request #3451 from Elv13/screenshot
Copy of  "Content (Screenshot) API Expansion"
2021-10-07 14:03:57 -07:00
Emmanuel Lepage Vallee 9c22b029eb naughty.layout.box: Make sure discarded boxes don't come back to life.
Previously, when resuming a notification for which the popup was closed,
it would re-appear.
2021-10-05 13:00:14 -07:00
Emmanuel Lepage Vallee 3458c89040 naughty: Suspend existing notifications.
Previously, it would just suspend new notification, but do nothing
about the existing ones.
2021-10-05 13:00:14 -07:00
Emmanuel Lepage Vallee 075935fd37 naughty: Do not call `request::display` when suspended.
Fix #3396
2021-10-05 12:59:39 -07:00
Emmanuel Lepage Vallee 0d1e977917 naughty: Fix getting a notification by id.
There is more into that table than just screens. If `get_by_id` was
called with an invalid notification (or a "future" one in case of
suspended / do_not_disturb), it would explode.
2021-10-05 12:59:39 -07:00
Elyes HAOUAS f81723733c
lib/naughty/init.lua: Fix typo on "screen" (#3456)
Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr>
2021-10-05 12:13:33 -07:00
Aire-One eb89c3688c Update screen.lua 2021-10-04 19:49:22 -07:00
poisson-aerohead 02e12f4cb4 Update screen.lua
Add DOC comments to the new screen.object.get_content property in lib/awful/screen.lua.

Signed Off: Brian Sobulefsky <brian.sobulefsky@protonmail.com>
2021-10-04 19:49:22 -07:00
poisson-aerohead b4cb3eae7b Debug the suggested changes to lib/awful/screen.lua per the discussion
thread at PR 3448. PR 3448 involves changes to expand the content
(screenshot) API. Originally, I added both root.content() and and
screen.content to the C source, as client.content has always been
handled. However, screen.content in effect takes a root screenshot and
returns a crop of it. This can just as easily be done through Lua.

When this quick update was implemented in github, the code added to
awful.screen.lua was not quite correct. These changes represent the
debugged version. Users can now call s.content for a screen object, s,
and the screenshot will work transparently.

Signed Off: Brian Sobulefsky <brian.sobulefsky@protonmail.com>
2021-10-04 19:49:22 -07:00
Elyes HAOUAS 54a5a7dce5
Fix some spelling errors (#3450)
Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr>
2021-10-04 19:20:03 -07:00
Emmanuel Lepage Vallée eb07ca4c47 Update lib/awful/wallpaper.lua
Co-authored-by: Aire-One <aireone@aireone.xyz>
2021-10-01 16:26:33 -07:00
Emmanuel Lepage Vallee 546ac6aec9 container.tile: Correctly transfer the Cairo source to the tile. 2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallée 01ae508899 Update lib/awful/wallpaper.lua
Co-authored-by: Aire-One <aireone@aireone.xyz>
2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallée 7b8426bd24 Update lib/wibox/widget/imagebox.lua
Co-authored-by: Aire-One <aireone@aireone.xyz>
2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallee d8bc791818 imagebox: Add DPI and CSS Stylesheet properties for SVG images.
This exposes the `librsvg` DPI and Stylesheet properties. This
is a groundwork commit to port the xresources theme to use a SVG
wallpaper instead of hardcoded Cairo code to generate the colorfar
logo.
2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallee ddccddb6dc imagebox: Allow to load SVG data without saving it. 2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallee 3f2db184ad gears.wallpaper: Deprecate. 2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallee b0a2d82d8f compat: Do not require to pass pattern._native to the wallpaper.
It makes the shims impossible to implement without a double free,
a memory leak or a crash. Using `capi` should not require to
destroy the LGI wrappers.

Another example, not fixed in this commit, are the client shapes.
2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallee 98dd78b777 awful: Add a wallpaper module.
`gears.wallpaper` is a flat API (that doesn't even belong in gears) and
is neither well integrated with the other AwesomeWM concepts, nor well
documented or easy to understand for newcomers.

This module adds an object oriented, declarative, module with properties
for the most common wallpaper types. It also integrates with
`awful.placement` and the `wibox` module.

The design attempts to make the wallpaper a "wibox like" object like
the titlebars. It is non-interactive, but still allows the widgets. Note
that this is slow and should be avoided for dynamic content. It is why
the widgets are never updated unless manually reloaded. The objects also
attempt to be disposable rather than persistent. Thus they are immutable
by default to prevent accidental abuse.

Fix #3428 #2596
2021-09-24 08:42:42 -07:00
Emmanuel Lepage Vallee 5212f0634a imagebox: Add a `downscale` and `upscale` property.
Previously, it was really hard to get the image to do one *or* the
other. The `resize` property set both at the same time.

While it could, this does not deprecate the old `resize` property
since 99% of the user wan't to lock both.
2021-09-24 08:38:13 -07:00
Emmanuel Lepage Vallee cefd4f843e gears.filesystem: Improve get_random_file_from_dir.
Previously, only a filename was returned. Getting the path was
inconvinient when used within a declarative construct.

It was also misbehaving then the directory didn't exist. Finally,
the extention list now accept extension names starting with a dot.
2021-09-24 08:38:13 -07:00
Emmanuel Lepage Vallee b038463e22 naughty.legacy: Handle broken configs betters.
If a config with naughty.layouts.box crashes at startup and the
fallback config uses naughty.layouts.legaxy, it is possible their
will be some lookup for an object which isn't tracked by the legacy
module.
2021-09-22 19:17:02 -07:00
Emmanuel Lepage Vallee bd8f2f936b naughty: Fix a memory leak related to suspended notifications. 2021-09-22 19:17:02 -07:00
Emmanuel Lepage Vallee 9336b62f80 ruled.notification: Handle legacy presets.
This is deprecated, but some modules like `lain` use them, so it
must still minimally work for backward compatibility.
2021-09-22 19:17:02 -07:00
Emmanuel Lepage Vallee e752943b98 notification: Correctly handle `screen` set in the presets.
It was setting directly to `_private`, which both didn't work
and caused a memory leak.

Fix #3428
2021-09-22 19:17:02 -07:00
Emmanuel Lepage Vallee 21a111d154 naughty: Allow to set the message from the presets again.
This was never really supported and is really not what the presets
were event meant to be used for. But it worked and `lain` used it.
2021-09-22 19:17:02 -07:00
Emmanuel Lepage Vallee 89c84caee4 naughty.legacy: Explicitly remove the screen.
Do not rely on the GC. It isn't reliable with Luajit.
2021-09-22 13:39:58 -07:00
poisson-aerohead 87e09f81ab
Correction of error message in awful.keygrabber.run_with_keybindings (#3445)
Two calls to gdebug.print_warning() in run_with_keybindings use an
argument that concatenates a fixed string with the result returned by a
call to gdebug.dump(). gdebug.dump() is the debug library function for
immediate printing. It has no return value. This causes the correct
message in print_warning to not be printed, and also causes a
naughty.notify box to appear warning of an attempt to concatenate to an
empty variable.

The call to gdebug.print_warning should have an argument made by
concatenating to gdebug.dump_return(). Incidentally, this is in fact the
function used internally by gdebug.print().

Signed off by: Brian Sobulefsky <brian.sobulefsky@protonmail.com>
2021-09-21 08:34:46 -07:00
Emmanuel Lepage Vallée 5ca16ae8a0
Merge pull request #3364 from Aire-One/fix/awful.key-constructor
[doc] awful.key contructor and general improvements
2021-09-20 11:39:41 -07:00
Emmanuel Lepage Vallée c3a508a886
Merge pull request #3386 from Elv13/awful_wibar
Fix some wibar bugs, polish the API a bit and add some doc.
2021-09-19 13:05:11 -07:00
Emmanuel Lepage Vallee e27b908ca0 doc: Document the naughty.action "invoked" signal. 2021-09-16 17:25:46 -07:00
Emmanuel Lepage Vallee 17bd5fb036 naughty: Pass the notification object to the action "invoked" signal.
Fix #3384
2021-09-16 17:22:33 -07:00
Emmanuel Lepage Vallée 73e908ed95 Apply suggestions from code review
Co-authored-by: Lucas Schwiderski <4508454+sclu1034@users.noreply.github.com>
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallée 6ad693eff0 Apply suggestions from code review
Co-authored-by: Aire-One <Aire-One@users.noreply.github.com>
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee d5d74e44de doc: Document the wibar module. 2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee b883855272 wibar: Allow to configure how conflicts between wibars are resolved.
Previously, the horizontal wibars would always get priority. Now,
this can be configured.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee 529a6c2a8d wibar: Expose update_workarea.
It is now possible to create wibars which are not changing the
tiled area.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee 67dc363437 wibar: Modernize the module structure.
Move the burdensome legacy code into local function so the normal
`gears.table.crush` module setup can be used. This fixes a couple
monior issues where `args` would be ignored.

This also makes a minor change to the logic. Changing the position
always moves to wibar to the end of the stack. Previously, there
was a minor case where it would not. There was also the case when
setting the same position twice would move the wibar, which was a bug.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee dab767af3e wibar: Restore the ability to align a wibar.
This was lost in 3.5->4.0 update, but still had some references in
the code and doc. At the time, the plan was to add it back
"shortly after" based on the `awful.placement` code, but it was
never merged.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee b62f343409 wibar: Add margins.
This is a feature request from Reddit. With this commit, the
awful.placement margins are exposed to the wibar API.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee ab977b2358 placement: Fix the struts size when margins are present.
Previously, it only added 1 of the 2 sides of the relevant margins
to the struct size. For example, if the position was "top", then
only the top margin was added, not the bottom one.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee d9f27bdf4b placement: Do not leak the composed placement "override" in the args.
Without this change, if a composed placement was used, it would leak
the "override_geometry" in the args, which would be kept cached during
the next composed node. If that node had no override of its own, it
would use the previous one by accident.

In practice, it means it was impossible to resize a `wibar` manually.
The `wibar` would always restore itself to the height (or width, for
vertical ones) it previously had.
2021-09-12 01:59:48 -07:00
Emmanuel Lepage Vallee 4b606fb3d7 notification: Fix rendering during early screen creation.
If the problem happens early enough, it was possible that the
screen arrway wasn't initialized yet. In that case, the notification
would fail to render.
2021-09-12 01:59:48 -07:00
mergify[bot] 7ae6d26363
Merge pull request #3387 from mattplm/master
Stop using fixed row number in calendars
2021-09-07 23:51:38 +00:00
mattplm 97726e8f38 Stop using fixed row number 2021-08-28 23:10:40 +02:00
ViSaturn 13cd20780e
spelling & grammar issues (#3410)
replace request to requsts & replace futur to future
2021-08-14 23:38:01 -07:00
aflorea-2k 260f6dbe97
doc(wibox.widget.textbox.html): fixed pango links (#3401)
Links to gnome's pango webpage
(https://developer.gnome.org/pango/stable/PangoMarkupFormat.html) were
broken. They now all point to docs.gtk.org .
2021-08-03 20:02:25 +02:00
Lucas Schwiderski c689af64d5
doc(w.w.textbox): Improve ellipsize documentation
The list of possible values was missing one. Additionally, this adds an
example to visualize the available options.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-31 15:05:09 +02:00
Lucas Schwiderski 8fab5aa703
doc(w.w.imagebox): Improve various bits
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-14 23:17:49 +02:00
Lucas Schwiderski 4096c19223
doc(w.l.flex): Add module description
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-14 23:00:31 +02:00
Lucas Schwiderski 4b30158176
doc(w.l.fixed): Improve documentation for spacing properties
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-14 23:00:29 +02:00
Lucas Schwiderski f2c66b006d
doc(w.l.fixed): Add module description
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-13 22:44:50 +02:00
Lucas Schwiderski 08c893fff9
refactor(w.l.fixed): Fix line length
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-13 22:33:32 +02:00
Lucas Schwiderski a938a1b807
refactor(w.l.fixed): Rename abbreviated variables
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-13 22:30:52 +02:00
Lucas Schwiderski c1a3f02c88
doc(w.l.align): Add module description
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-07-13 20:30:22 +02:00
mergify[bot] 832483dd60
Merge pull request #3362 from actionless/prompt-multibyte-hack
Fix the hack for multibyte characters in prompt (fixes #3308)
2021-07-12 06:07:03 +00:00
basaran f473639c5d
Update focus.lua (#3381)
missing stacked option for global_bydirection
2021-07-06 01:56:34 -07:00
mergify[bot] d1c3394e40
Merge pull request #3375 from Aire-One/fix/3371
[Fix/3371] wibox.widget.base set opacity emit "widget::redraw_needed"
2021-06-28 05:15:05 +00:00
Aire-One 53a880454f fix(w.widget): signal typo and unit test
This is a combination of 2 commits.
* fix(w.widget): emit signal typo
* add(w.widget.base_spec): Unit test for setters signals emittion
2021-06-26 17:26:21 +02:00
Aire-One 4188d1df1e doc: Move inline usage to example files 2021-06-20 20:50:02 +02:00
Aire-One a3609146aa doc(awful.key) Improve module description 2021-06-20 20:50:02 +02:00
Lucas Schwiderski fcae67cc03
doc: Move inline usage to example files
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-20 13:47:27 +02:00
Lucas Schwiderski dc0d5df4da
doc: Implement review suggetions
Co-authored-by: Aire-One <Aire-One@users.noreply.github.com>
2021-06-20 12:25:11 +02:00
Lucas Schwiderski a6864a3e59
doc(tag): Reword signals documentation
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-17 15:37:32 +02:00
Lucas Schwiderski 7591d5cde3
doc(a.mouse): Fix static field documentation
Fixed incorrect field names and added missing parameter types.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-17 15:37:30 +02:00
Lucas Schwiderski 3cefcfffe3
doc(g.timer): Improve documentation for helpers
Clarifies behaviour for the convenience constructor functions.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-17 15:37:29 +02:00
Lucas Schwiderski 33b2fdfbf6
doc: Fix typos
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-17 15:37:28 +02:00
Lucas Schwiderski 16df93370f
doc(g.table): Improve documentation
Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-17 15:37:27 +02:00
Lucas Schwiderski b94cb51770
doc(a.titlebar): Improve titlebar documentation
The constructor's documentation was worded as if it was a getter, which
lead to unexpected behaviour where subsequent calls for the same client
replaced previous titlebars.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-17 15:37:27 +02:00
mergify[bot] f4fb055512
Merge pull request #3363 from sclu1034/issue/keygrabber_timer
Stop timer when stopping keygrabber
2021-06-14 08:13:21 +00:00
Aire-One 8085a508d1 add(awful.key) keygroup enum style table
Replace the `awful.keygroup` property by an table that can be used
as an enum to point to the `awful.keygroups` definitions.

The previous field for `awful.keygroup` was empty (even no-existant),
and was here only to appear in the documentation as a definition for
the valid values to target keygroups.

With this new enum style table, the user can easily refere to keygroups
the same way we did for mouse buttons.
2021-06-12 16:39:24 +02:00
Aire-One 948506cde1 doc(awful.key) Declarative constructor parameters 2021-06-12 14:38:18 +02:00
Lucas Schwiderski 1182552783
bug(a.keygrabber): Stop timer when stopping keygrabber
When stopping a keygrabber with a timeout manually or through the stop
key, the timer would continue and call the stop callback again some time
later.

The error message in `gears.timer:stop` is removed, since there actually
is no harm in just returning immediately. And the timer implementation
itself calls `:stop` in certain places without checking for `.started`,
which lead to a situation where the internal call to `stop` triggered
the error message.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-06-11 08:59:58 +02:00
actionless bbaccb05bc fix(prompt): handle multibyte character in Backspace, ^h, ^b and ^f 2021-06-11 03:20:32 +02:00
mergify[bot] b63399f656
Merge pull request #3356 from Elv13/fix_3351
fixed: Try to handle zero sized widgets again.
2021-06-04 21:25:59 +00:00
Emmanuel Lepage Vallee 83c31f948b fixed: Try to handle zero sized widgets again.
The newly changed code doesn't handle this well:

    local w = wibox.widget {
        {
            --add anything here
            widget = wibox.layout.fixed.horizontal
        },
        widget = wibox.layout.fixed.horizontal,
    }

This will cause the "inner" fixed layout to have the minimum size
it supports. In that case, if the last widget has "no size" because
it supports up to 0x0, then it isn't added to the layout.

This was done "on purpose" because if there is a spacing, then `:fit`
would have returned a size "too small" because the last spacing area
would be (correctly) missing.

But if the zero sized widget isn't added to the layout, then it's size
isn't tracker. So if it emits a layout_changed signal, nothing catches
it.

The "fix" is rather hacky and probably a little incorrect. It rely
on the behavior of `:fit()` to avoid adding the "wrong" widgets to
the layout, which is fragile.

However, I don't have a better idea.
2021-05-31 02:27:36 -07:00
Emmanuel Lepage Vallee 5e5f587bea mouse: Fix the "is button X pressed" properties.
Apparently it never worked.

Fix #3352
2021-05-30 23:56:42 -07:00
actionless b91a033141 test(menubar): don't try to cover deprecated methods (calling any of them will make the warning-check fail in tests) 2021-05-28 00:40:24 +02:00
actionless 2249dc3c81 refactor(menubar, textbox): replace menubar.utils.compute_text_width() with textbox.get_markup_geometry()
feat(menubar): allow setting beautiful.menubar_font

fix(menubar: init: get_current_page): label return value

Update lib/wibox/widget/textbox.lua

Co-authored-by: Lucas Schwiderski <4508454+sclu1034@users.noreply.github.com>

Update lib/wibox/widget/textbox.lua

Co-authored-by: Lucas Schwiderski <4508454+sclu1034@users.noreply.github.com>

revert textbox changes

fix(menubar: init: show): fix font height detection

Update lib/menubar/init.lua

fix(menubar: init: get_current_page): list_spacing depends on presence of icon; also take cursor block width into consideration

fix(menubar: init: label): force icons to be square

fix(menubar: init: get_current_page): also take border_width into consideration when computing available space

merge conflict
2021-05-26 14:18:10 +02:00
Lucas Schwiderski 1b49a20e0d
doc(awful.client): Document special signal semantics
While the documentation already specified the signal via `@emits`, it
did not make it clear that this signal is emitted on a `tag` object,
rather than the `client`.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-05-22 01:24:07 +02:00
Lucas Schwiderski 4f1b308e2b
doc(awful.client): Improve documentation for c:to_selected_tags
The behaviour of `c:to_selected_tags()` does not match what one would
have expected from its short description.
The behaviour also doesn't really match the method's name, but since
this is already in use, I won't change functionality or names here.

Instead this extends the method's documentation to accurately reflect
its implementation and also point users to the functionality that they
were likely looking for based on the method's name.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
2021-05-22 01:08:55 +02:00
Alex Belykh 0d0647848b graph: complete widget overhaul and bug fixes
Squashed commit of the following:

commit 69821f51fe1e8652715658543e50631ece495090
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon May 10 19:17:55 2021 +0700

    Refactor property handling in wibox.widget.graph

    In addition, baseline_value, step_width and
    step_spacing properties are all set to their default
    non-nil numeric values during instance creation now.

commit 842eb429bf5df4b2ba46b2e6f7646afe89b1a3c3
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sun May 9 06:18:45 2021 +0700

    Make graph:draw_values() private

    There's no documentation nor confidence that it's a good API,
    so I'm hiding it for now.

commit 720746780574e4bad14a71fc4174955139c2eb50
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri May 7 04:04:13 2021 +0700

    Document graph_should_draw_data_group() for posterity

commit 7c73f3754ce6ba86b118f1170a6f9e406ab4841d
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri May 7 03:59:21 2021 +0700

    Make graph:should_draw_data_group() private

    There's no confidence whether it's a good API,
    so I'm hiding it for now.

commit b3539e20adb6423118af726ae4f8751ef864b5d2
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri May 7 03:36:44 2021 +0700

    Make graph:preprocess_values() private

    There's no confidence whether it's a good API,
    so I'm hiding it for now.

commit 2df4400e780a6260f8d0ab1c60734fbb11bf3c4f
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu May 6 10:05:23 2021 +0700

    Add spec/wibox/widget/graph_spec.lua

commit ce01a9771ab439b8df841f1565aa4aa8a44a5e0d
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed May 5 08:16:18 2021 +0700

    Improve graph.capacity documentation

commit e28fade8f655802f5bf89154169f68d256b8e332
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed May 5 07:36:01 2021 +0700

    Document graph:compute_drawn_values_num()

commit dd68332292465422d08b48e9f0229f143beccbc6
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed May 5 05:24:23 2021 +0700

    Document graph:pick_data_group_color() method

commit ca6dc55f77aca88a6e9cc90bb6fd0045739f41f5
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sun May 2 04:13:58 2021 +0700

    Guard against setting data groups sparsely in graph:add_value()

commit cdea5f126f7984e72924f6dffbd312c4fe3b032f
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sun May 2 02:36:12 2021 +0700

    Refactor scaling and baseline choice out of graph:draw()

commit 10135deafe8a9390ba66ab657ebb1fb41d549e8c
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 21:34:48 2021 +0700

    Document graph.nan_color and graph.stack properties

commit 0d73bb84ac66b87e16aee472bd1f299549f66a1c
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 20:49:24 2021 +0700

    Use a better example in docs for the graph.stack property

commit c27d160a0826d033d49d6141608c40aa8a0642fa
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 16:05:38 2021 +0700

    Document graph.baseline_value property

commit 459bc8176c13d4ea32af0dcdc2399d3b929b1c6a
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 15:53:47 2021 +0700

    Document graph.clamp_bars property

commit e732ee0b3b007d213e689b98cc00ae7cb141ae08
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 15:28:34 2021 +0700

    Improve graph:add_value() and :clear() documentation

commit ae73e3aa9f8d60409cbe4cb4da9612f31af4f38e
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 15:28:11 2021 +0700

    Improve graph min_value/max_value/scale documentation

commit a7350996a9def773b91b1631e6c0507e33d8f93b
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 15:27:36 2021 +0700

    Cleanup graph examples to show only relevant things in docs

commit 30740c26f4f41c16f4c8a3c339bcb7bd299e14cd
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sat May 1 14:04:36 2021 +0700

    Rename graph.stack_colors property to `group_colors`

    The colors are used for stacked and non-stacked graphs alike,
    so the name didn't make sense.

    Also document and clarify some color stuff.

commit 1ea01bfd410971cf0d0c25fd74cd764d5eb7279d
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 30 21:25:41 2021 +0700

    Add an example file for code coverage of some fringe graph cases

commit eae68e39553f88a6275a0c65bf040b5d4c262b54
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 30 20:23:32 2021 +0700

    Add step_shape to the graph/nan_color example for code coverage

commit 8027147bc2eab34a97b49a428fb8cef27f122bed
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 30 19:55:18 2021 +0700

    Add example files for graph.nan_color/nan_indication properties

commit 89a25a165c52b2c15b6c4d95ecb777a9067e66f9
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 30 19:33:07 2021 +0700

    Make widget graph:add_value(v) default v to NaN

    0 as a default makes no sense and silences the error
    that is failing to specify a value, to which the user
    should rather be alerted. The graph widget has sane
    NaN handling now and will do just that.

commit 2835d552440be48d356a7f7b1d64963696dd550b
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 30 19:20:48 2021 +0700

    Implement graph.nan_color and nan_indication properties

    Now, whenever there's a NaN among values and
    graph.nan_indication is set, the corresponding area,
    where the value bar should have been drawn, is filled
    with the nan_color from top to bottom.

    The painting is done after all data is rendered,
    to make sure that it won't be overpainted and go unnoticed.

    NaNs among graph's values are inevitably a sign of
    some error and it is arguably not a sane default behavior
    to simply not render them at all. The user should take
    immediate note of any errors by default, instead of
    wondering at a mysteriously empty graph widget, which
    is why nan_indication is set to true by default.
    If the user wants to silence NaNs, they can always simply
    set it to false.

    nan_color if unset, defaults to a noticeable yellow-black
    pattern.

    As a direct and planned consequence, stacked graphs
    with negative values in them trigger the NaN handling too.
    But silencing NaN handling for those graphs is also possible
    and semi-sane, because then NaNs and negatives are ignored
    and the graph behaves (almost) like they were zeros.

commit 9c1f8f08b400e01e19c534f3810c9c9ab485760c
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 26 08:10:19 2021 +0700

    Refactor out graph_map_value_to_widget_coordinates() function

commit 1905991ddecabdae3e15ffb8ee5b18a1bee1a711
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 28 13:39:29 2021 +0700

    Add an example file for graph.baseline_value property

commit b31b39d66f4c037a9484b71a3f910703ae01fac0
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 22 07:03:49 2021 +0700

    Add an example file for graph.clamp_bars=false/true comparison

commit a1fc850e3047f9ee2c9ddeffacfbabf3ded34171
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 22 04:06:45 2021 +0700

    Add an example file for graphs with negative values and shapes

commit 2f012f8ff1bb5094c14e724a61e59a2a3a296bc8
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 22 01:06:05 2021 +0700

    Add an example file for a graph displaying negative values

commit 7b14fbd59a4c4c51962fd3110a1a900dd5f4eb98
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 21 11:18:26 2021 +0700

    Add an example file for graphs with step_width < 1

commit dfd9a54544b637e2fbe3d1325f9cc24b3f4d2313
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 21 10:17:38 2021 +0700

    Add an example file for graph.stack=false/true comparison

    Should also demonstrate that multiple data groups
    are possible for non-stacked graphs too.

commit 5b532106c3fd255f9b66a66cfb88d977b489ab5d
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 21 09:34:14 2021 +0700

    Add an example file for disabling graph data groups with nil colors

commit ac6f1083c02fcb428f089a616f9b0ebaa5496b6c
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 21 08:57:25 2021 +0700

    Add an example file for step_shape/width/spacing on stacked graphs

commit b3703db6a5139e73e72c1cfd198ece2cd9be7df2
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 21 08:43:56 2021 +0700

    Add an example file for scale=false/true on stacked graph

commit b000aed4a12cb44fb501e1c8432a71a14b2f8f3f
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 20 08:22:19 2021 +0700

    Document deprecation of graph's width and height

commit cb0ad617bd6c83a499896797318e3b0b588c3566
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 19 07:53:37 2021 +0700

    Deprecate width and height properties of wibox.widget.graph

commit 8c64e14ad91a074b784166a7054e53444cccb9d2
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 19 04:37:59 2021 +0700

    Refactor graph:draw() to separate concerns

    Firstly, summation of group values for stacked graphs
    is extracted into graph:preprocess_values().

    This makes graph:draw() smaller and exposes the fact, that
    stacked graphs are almost entirely just a form of
    a more general concept: pre-render data manipulation.
    It's something a user might want to customize,
    and now they can do it by monkey-patching the method.

    Secondly, the logic for deciding, if and with which color
    a data group should be drawn, is extracted into
    graph:should_draw_data_group() and get_data_group_color()
    methods respectively.

    This makes it customizable too and makes more obvious
    the fact, that it is a general thing that has nothing
    to do with stacked graphs in particular.

    With this there are only 5 lines remaining in graph:draw(),
    that could be said to be specific to stacked graphs,
    all pertaining to the `prev_y` variable, which merely
    preserves the bar coordinates from a previous data group.

commit 2a32b6305d893f413303728a0a3da1dcd9a5591e
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 22:52:37 2021 +0700

    Pointlessly optimize graph:add_value()

    1) Purge old values first, then insert the new one, if needed.
    Since Lua grows arrays in power of two steps, and our
    guess_capacity() also takes care to return even integers,
    it would be a shame to overstep the capacity by one by
    inserting first and thus getting the table size doubled
    only to never use the most of it.

    2) Use a removal procedure that doesn't call
    the slow length operator at all. Previous code called it
    twice (once in table.remove) for every removed value.

commit 680ea8f5d81e9040afb4662b3229e937e4b89e02
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 16:23:38 2021 +0700

    Set graph data series color before the painting loop

commit b970f0f221ae76250f2a94433ff79d653caa6e21
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 16:05:37 2021 +0700

    Drop a large no longer necessary `if` in graph:draw_values()

    This commit is almost purely a whitespace change.

commit 6b4f0541c70ec99d7f6e276bae64939f337120d6
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 16:00:50 2021 +0700

    Extract values rendering code into graph:draw_values() method

    This is to avoid ungodly if nesting levels, which are needed
    to bail out of drawing values early and skip to drawing the border.

    The next commit will get rid of the if.

commit e0950e4f99d1ea1c4b8cea2cc67629fa40030c2a
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 14:50:20 2021 +0700

    Track graph draw() usage to guess necessary array capacity

    The last step of divorcing add_values() from width calculations,
    while ensuring that user doesn't observe a lack of data to draw.

    The widget now tracks an approximate number of values that
    it has been asked to draw() in _private.last_drawn_values_num,
    and truncates its values array based on that
    (if not overridden by the capacity property).

commit 2e3d542282f35e7c0fed454da0f2eada0fcf3b78
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 13:35:12 2021 +0700

    Add `capacity` property to graph widget

    This is the second step of divorcing add_values()
    from calculations involving widths.

    How many values are stored and how many values are drawn
    are distinct concepts. There isn't even a single definitive
    "how many values are drawn" because the widget could
    be rendered in several places with distinct widths simultaneously,
    and in every such place the data must be drawn appropriately,
    e.g. with auto-scaling, that takes only the visible data points
    into account. And the draw() method can do that now.

    The default capacity value of nil uses heuristics
    based on widget's _private.width to guess some capacity
    that would tolerate some dynamic widget resizing.

    If the user finds the heuristic failing them, they
    can set the capacity property to the desired maximum number
    of values that will be kept in the _private.values array
    (in each data group).

commit 08d4a80686f7fe363551c35589a460839f60853e
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 03:27:18 2021 +0700

    Extract values size computation into compute_drawn_values_num()

    This is the first step of making add_values() not
    concern itself (directly) with widget dimensions.

    The user can monkey-patch the method to override
    how many values are (logically) drawn, because
    it affects graph auto-scaling and can be useful for rendering
    of step_shape-s that paint outside of their step_width.

    I didn't make it a full-blown function-valued property,
    because it seems a fringe functionality,
    which I'm too lazy to document.

commit 3c5617c98ab1147618ed22e8414a77fc56b45f6e
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 02:32:29 2021 +0700

    Copy graph widget prototype methods over in bulk

commit 169538837ece41a03d02ba8fbc0e4097062b67a3
Author: Alex Belykh <albel727@ngs.ru>
Date:   Sun Apr 25 05:58:01 2021 +0700

    Remove graph.baseline_y property

    After giving it some thought I've concluded, that it is unlikely
    to be useful as it is now. I'd better reserve the name for
    some more sensible functionality, like fixing the baseline_value
    defined axis at the given widget coordinate, adjusting the scaling
    accordingly, so min_value/max_value won't generally correspond
    to widget top and bottom anymore.

commit 202ffaa9a0b820c7c471e1121d01b91f8f76cd38
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 15 12:06:55 2021 +0700

    Add baseline_y and baseline_value properties to graph widget

    Now values in graph have a *baseline*, tunable with
    baseline_y and baseline_value properties.

    It is the (for now invisible) horizontal line from which
    all bars in the graph grow. I call it a "baseline"
    instead of "axis", because it doesn't actually have to correspond
    to the 0 value. But it can, and actually does now by default.

    baseline_y and baseline_value properties determine
    the vertical placement of the baseline in the widget.

    baseline_y is the position of the baseline in normalized
    widget coordinates, e.g. 0 corresponds to widget's top,
    1 - to widget's bottom, and 0.5 - to widget's middle.
    So if e.g. one sets baseline_y = 0, then no matter how the widget
    is resized and how its values are scaled, bars in it will be drawn
    starting from the top.

    baseline_value is the position of the baseline in
    value coordinates.
    So if one sets baseline_value = 10, then no matter what happens,
    bars for values greater than 10 will be drawn as growing up from
    this line, and bars for values smaller as growing down.
    Where and if it will be seen in the widget, depends on the scaling.
    baseline_value = 0 is the familiar zero axis.

    baseline_y is unset by default and has priority, i.e.
    if it's set, then baseline_value is ignored.
    baseline_value defaults to 0.

    Prior to this commit, bars were always drawn from the bottom edge
    of the widget, or, in the new terms, the widget had baseline_y = 1.
    But it was indistinguishable from baseline_value = 0, because
    the widget clamped all negative values to 0, so the difference
    between the two could never be observed. baseline_value = 0 is
    clearly more useful and familiar to people, so now it is in force
    by default.

commit df7e19abaebf0a871b5ca217b4cc3365533267a6
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 15 11:18:12 2021 +0700

    Move value clamping from graph:add_value() into draw()

    Previously all values were forcibly clamped between
    0 (not tunable at all) and max_value (1 by default).

    Thus graphs with negative values were not an option.
    NaN values were conflated with zeros, even though
    it may be useful to maintain the distinction and render
    them differently. And if user happened to dynamically
    change the max_value property, they discovered,
    that their data got truncated.

    Preserving user data as it was given is more flexible and
    makes things easier to debug. This commit does exactly that.

    So what happens now to the newly allowed values during draw()?
    There are 3 new cases to consider:
    1) NaNs
    2) Negatives
    3) Values outside of min_value..max_value range

    NaNs are presently simply not drawn. An empty place is reserved
    where the value should've been, but nothing else is done.
    This is distinct from how a zero is handled,
    e.g. if step_shape is set, it is called with the height
    parameter = 0, which can still end up drawing something,
    depending on the shape.
    One could also consider addition of nan_color/nan_shape
    properties which could be drawn to alert user
    to a gap in their data.

    Negative values necessitate introduction of the concept of
    the zero axis, from which they will be drawn DOWN, in contrast to
    positive values. Where should this axis be drawn?
    How should step_shape-s with inherent direction, e.g. arrows,
    be drawn for negatives? This will be addressed in the next commit.

    Values outside of min/max_value range can imply shapes that
    go beyond widget dimensions. An arrow shape that goes beyond
    the roof is visibly different from an arrow that saturates and
    merely touches the widget top, and the user may reasonably desire
    either behavior. Therefore this commit introduces
    a boolean clamp_bars property, which defaults to true
    for reasons of robustness and backward compatibility with
    the behaviour prior to this commit. The property of course affects
    only the display of the values, the actual user data stays intact.

commit c9c24fb1ab741cd6bb8074971d568e0646c51532
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 15 09:29:01 2021 +0700

    Use rectangles for drawing graph bars of all sizes

    I have benchmarked various bar drawing strategies
    and graph sizes and found out that drawing graph bars
    with rectangles is as fast or even marginally faster
    than using fat lines.

    Thus the code that tries to special-case 1px bars
    as lines seems to be not worth the additional complexity
    it introduces, and this commit removes it.

    Incidentally, I've also established, that rectangles
    are more robust. If one draws graph bars and feeds
    cairo very large coordinates (~2^62), then corresponding
    rectangles fail to render, but all the other rectangles
    in the same series get rendered successfully,
    whereas a single large coordinate in a move_to/line_to()
    sequence is enough to cause all lines in the batch
    to fail to render.

commit bc7f4be5e06405b5aa7fb443a5ace2b9b9575b1f
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 15 09:01:42 2021 +0700

    Cache cairo methods used in the inner loop of graph:draw()

    I have benchmarked the draw() method, both
    on cairo xcb and on argb32 image surfaces, and have discovered
    that cairo context method calls are unnaturally slow,
    to the point, that almost nothing else in the function matters.

    For example, drawing bars with vertical lines made
    the whole draw() function almost 2 times slower
    than doing the same with rectangles, merely because
    the former requires two method calls (move_to/line_to),
    and the latter only one.

    Simply caching hotpath cairo methods in local variables,
    reduced the difference between the drawing methods
    to a negligible one and made the whole function
    4 times faster on a typical 100-bar graph,
    (1.4ms to 0.33ms on my laptop) thus bringing closer
    my secret dream of drawing live audio data with
    awesome graphs (kidding).

    I guess, LGI does something not very optimal there,
    like gobject-introspecting the method every time,
    or something. There might be some untapped optimization
    potential, possibly in upstream, like a method cache,
    from which everything in awesome could benefit,
    even though I imagine not many things are so
    call-intensive as the graph widget, to really feel
    the difference.

commit 538df25bdf02b53d0bbe81809eef2e6fdb05ff6f
Author: Alex Belykh <albel727@ngs.ru>
Date:   Thu Apr 15 07:32:37 2021 +0700

    Use 1-based index in the inner graph draw loop

    It's used there only once for a calculation and
    then several times to index some tables,
    and index 0 is bad for lua tables performance-wise.

commit 7412546916cd0a0a490130a120255ffb719398b8
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 21:55:12 2021 +0700

    Leave graph.max_value uninitialized at construction

    This is a user-visible change, but the previous behavior
    was probably not what user expected anyway, namely
    with graph.scale set the graph mysteriously couldn't
    zoom in onto values that are smaller than 1.

commit eb81d7929a161e79c13262cfa73ac2e6a820e8ed
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 21:48:29 2021 +0700

    Allow graph.max_value be nil

    This makes its behave symmetrically to min_value.
    Now it defaults to 1, when graph.scale is not set,
    and to the maximum value in the graph data, when graph.scale is set.

commit f622a8430cbfde7007b58d7f4c9c76b08c91e997
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 12:01:13 2021 +0700

    Calculate max values num in graph:add_value() more precisely

    At most so many values were kept in the widget values array,
    as there are pixels of usable widget width (i.e. sans border).

    This is exactly right for the surely most common case
    of graphs with 1px-wide bars, but is more than needed for
    graphs with step_width+step_spacing>1, and not enough for
    graphs with subpixel bars.

    Moreover this made graph autoscaling behave weirdly in
    graphs with thicker bars, because
    old values survived longer in the array and
    kept affecting min_value/max_value calculations
    even after they were shifted off-screen.

    The maximum number of kept values is now calculated exactly
    as the number of values that can be displayed at once,
    taking step_width and step_spacing into account.

    It might be worth adding a max_values_num property to the graph
    to let user override this calculation, in case they draw
    shapes in step_shape() outside of its supposed rectangle,
    so our assumptions of visibility are wrong, or
    the widget often gets resized, resulting in the annoyance of
    visibly truncated series.

commit 0aa63249a18641251a1bf77423739164f0eab39f
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 02:30:13 2021 +0700

    Fix border_color/border_width bugs in graph widget

    add_value() wrongly assumed that border_width is always set,
    when border_color is, so if user set only the latter,
    an error occurred.

    add_value() assumed that border_width is always < width
    which led to awesome hanging up in an infinite loop,
    should that fail to be the case.

    The graph border_width property was driven
    by the border_color property, instead of the other way round.

    If border_color wasn't set, the border wasn't drawn all,
    even if user sets non-zero border_width, which is
    a confusing behavior, in contrast to all other widgets,
    which simply use a plethora of fallback colors
    to draw the border, when needed.

    This also meant that, despite being documented,
    the beautiful.graph_border_color fallback color
    could not and was not ever used.

    If the border_color was set though, an unset
    border_width was immediately assumed to be 1 instead of 0,
    also contrary to what other widgets do.

    Theme colors shouldn't influence widget layout,
    so this commit fixes this behavior to:

    1) border_width always defaults to 0, if unset.
    2) border_color falls back to
       beautiful.graph_border_color or white.

    Maybe one should also add a beautiful.graph_border_width
    theme variable, like some widgets do.

commit dad4a3253b8fef971fb82720d2a407fcc0a879ad
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 14 03:11:27 2021 +0700

    Implement multiple data series drawing for non-stacked graph

    The widget can already hold and draw multiple data groups,
    so it makes little sense to limit drawing only to the first group
    when graph.stack = false, probably leading to user's confusion.

    Now user can call add_value(v, group) with group > 1 and
    the data series will be drawn (over groups with lesser id-s)
    with graph.stack_colors[group] color, if stack_colors is set, or
    with graph.color, if stack_colors isn't set.

    Thus nothing visibly changes for all current users
    of non-stacked graphs with only single data series,
    but the new functionality is now there for those who need it.

    One can't fully emulate this functionality, e.g. with
    multiple graphs widgets in a wibox.layout.stack, because
    data series in a single widget can enjoy a common auto-scaling.

commit 3e645c976184ab5f50d625271c25062db9ab7ed9
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 01:59:12 2021 +0700

    Don't draw a stacked graph data group if there's no color for it

    If stack_colors[idx] is nil for the group `idx`,
    don't draw it at all (as opposed, e.g. to the effect
    of drawing it with a transparent color, or as though
    it had all values == 0, which both produce different results).

    This code is still subtly different from prior behavior,
    because now user can have a non-contiguous stack_colors table
    and turn the display of any data group on and off at will,
    whereas the code two commits earlier would just stop
    rendering as soon as ipairs(stack_colors) does, i.e.
    no data series were drawn past the first nil hole.

    This commit only looks large, but is mostly a whitespace change
    due to nesting from a pair of wrapping ifs.

commit 8c0273786de1ade66bdd977699f98b588da9f487
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 01:32:42 2021 +0700

    Unify stacked and non-stacked graph rendering

    Now stacked graphs support everything the nonstacked do,
    like step_width ~= 1 and custom step_shape-s.

    Technical notes:

    This code no longer calls cr:stroke() for every single value
    in a stacked graph, but rather paints a whole series and
    then cr:stroke/fill()-s it at all once with its color,
    improving performance considerably.

    Additionally the graph no longer relies on the presence
    of the stack_colors property to render series.
    It draws all data that it has, and, if there's no corresponding
    color in stack_colors, falls back to graph.color.

    This will be changed in the next commit to
    the prior behavior of only drawing those series
    for which there's a color in the stack_colors table,
    but that would've made this commit's diff much larger due to
    required nesting ifs over large code chunks.

    This commit also takes care to properly handle NaNs
    and negative values.

    Those are currently (almost) guaranteed to not occur in
    the values array due to clipping in graph:add_value(),
    but I intend to eventually drop the clipping, because it
    does nothing that draw() really relies upon,
    and allowing unclipped and NaN values is more flexible and less
    surprising, e.g. when user dynamically toggles graph.scale.

    Eventually I intend to implement drawing negative values
    in non-stacked graphs and possibly even in the stacked ones.

commit 38c6589c51b2aa057d7c2f40182ecf32b5b2ff5e
Author: Alex Belykh <albel727@ngs.ru>
Date:   Fri Apr 16 10:04:15 2021 +0700

    Convert graph:draw() to use `self`

commit f21f1b2550426df1c4ea8abde079b1ccef84b394
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 12:27:26 2021 +0700

    Fix scaling for stacked graphs

    Stacked graphs have cumulative heights,
    values from all groups that end up in the same graph bar are
    effectively summed. Previous code didn't take that into account
    when calculating min/max_value for the purposes of rescaling, but
    simply examined every value separately.

    This code adds up all values up front and finds min/max among those,
    to determine proper scaling that would fit the graph exactly.

commit 1ce4c7bf63bdd6c99c195d668347bec49355e921
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 09:49:35 2021 +0700

    Draw shaped graph bars only up to the baseline

    Prior to this commit, every step_shape bar was,
    for some reason, drawn with height = full widget's height,
    regardless of the value it represents.

    So for the most bars their lower end was far outside the box
    and therefore clipped off. So e.g. one couldn't see the
    lower round edges of rounded rectangles.

    This commit fixes that by appropriately varying the height
    that is passed into step_shape(), so that lower edges of the bars
    always exactly touch the lower edge of the graph.

    If the user wants to restore the prior behavior, they can simply
    ignore the passed-in height in step_shape() and
    just always draw their shape with height = full widget height.

    But they couldn't replicate the effect of this commit in
    their rc.lua without essentially writing their own graph widget.

commit e25185b08da23745b5815f85f6e9e43222ed2294
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 08:42:54 2021 +0700

    Avoid incremental transform shifting during graph bar rendering

    Instead of letting addition errors and cognitive load accumulate
    simply use the same offset calculation that is used for lines and
    reset the transform back to the top-left corner after every drawn bar.

    It's conceptually simpler, and will be useful later for
    stacked graphs and more.

    It also fixes a discrepancy between plain and step_shape rendering.
    Prior to this commit, bar coloring occurred with a disturbed transform,
    which was centered at the last drawn bar, wherever it happened to be.
    This meant that nontrivial colors, like gradients and images,
    were arbitrarily offset when step_shape was used.

commit f3e98866d8583c35d0b557c09f529299edc9ba2c
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 06:45:29 2021 +0700

    Refactor out graph bar height expression into a variable

commit f54528d6892f5aaa4595917853c9e2130f743fdb
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 06:20:25 2021 +0700

    Draw graph bars with lines only when step_width == 1

    Before this commit graph bars of step_width < 1
    were drawn with lines of width 1, but that's a bit unfortunate,
    because it led to much overpainting, while still ending up
    with a graphically incorrect result.

    Let's draw such bars with rectangles and let cairo
    do things with subpixels, getting more graphically
    accurate result, while still keeping the common case
    of step_width == 1 (supposedly) fast-drawn with lines.

commit b6515dca67c18b78eb5657378131a62ab43d4cfc
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 05:54:07 2021 +0700

    Fix unsharp edges when drawing graph bars with rectangles

    The 0.5 offset is only helpful for 1-width strokes, not for fills.

commit 7f3db8f07e82f821bcd1dc418d66564f537609d6
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 05:21:01 2021 +0700

    Do coordinate transformations even if the value isn't drawn

    The graph presently doesn't draw values < 0, but there was
    a discrepancy between drawing with and without step_shape.

    The default line/rectangle drawing reserves an empty place
    where the skipped value should've been,
    but no such empty place is reserved, when step_shape is used.

    This commit fixes that.
    Skipped values always have their empty space now.

commit 7b731ebfe96af7a9dba9c57371da6761cf22c00c
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 05:03:30 2021 +0700

    Fix graph bar scaling when min_value is not 0

    Previous calculation lead to underscaling of values
    so that even value = max_value wasn't drawn to full height.

commit dca59fd8b7fff0e7e646f2dfc6bd92047028e5a8
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 04:18:40 2021 +0700

    Calculate the horizontal graph bar offset only when needed

commit 940ddf4b9825e9c3a91d276208c089d8c74e49db
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 04:17:23 2021 +0700

    Call cr:move_to() only when drawing the graph with lines

    It's redundant otherwise and might even interfere
    with user's drawing in step_shape().

commit b5d5cd10ca29fb29cd751faaa95137c2fe89ff63
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 04:04:06 2021 +0700

    Fix wrong horizontal offset calculations in widget.graph

    Indices in the loop are zero-based, so
    things like i-1 and i>1 aren't necessary and
    actually wouldn't have been correct even in a 1-based loop.

    step_shape = gears.shape.rectangle and
    step_shape = nil, which is supposed to default to rectangle
    according to docs, were drawn differently due
    to mismatched offset calculations, which led to problems
    especially noticeable when step_spacing is not zero, e.g:
    1) whole graph shifted left too much, drawn partially off-screen.
    2) whole graph shifted right too much,
       and the first bar placed closer to the rest than others.

commit dc369fa198281e000afc1bd17326f3a264adf7d1
Author: Alex Belykh <albel727@ngs.ru>
Date:   Mon Apr 12 02:09:21 2021 +0700

    Fix the "border_width affects graph bar width" bug

    Graph bars were drawn with lines of border_width thickness
    instead of 1, i.e. possibly too fat to be readable.

commit 1ba73378cf29ed27a6ecd18716394779ceb543d9
Author: Alex Belykh <albel727@ngs.ru>
Date:   Wed Apr 14 00:13:03 2021 +0700

    Simplify internal values representation in graph even more

    New values in graph._private.values were pushed to the end,
    and old values were removed from the beginning of the table.

    In draw() however newer values are drawn first,
    at the left edge of the graph, necessitating
    annoying idx = #values - idx conversions everywhere.

    In particular in stacked graph that means that
    values that are drawn together may have different indices.

    One has to shift the values array in add_value()
    either way, so one might as well insert
    new values at the beginning of the array
    and simplify the rest of the code.

    This doesn't seem like much yet, but it will prove
    to be much more convenient and less error-prone in
    what I'm going to do later.

commit f70523ee68dbd6b67050ace4b82903a9b22440c7
Author: Alex Belykh <albel727@ngs.ru>
Date:   Tue Apr 13 13:35:10 2021 +0700

    Simplify internal values representation in graph widget

    graph._private.values was either a table of values or
    a table of tables of values, depending on whether
    "stack" property is enabled, ... or a mix of both
    if user forgot to pass the second "group" parameter
    to graph:add_value().

    This resulted in pretty fragile and confusing behavior,
    e.g. leaving user to wonder, why they see nothing more
    after setting stack=true for a graph in a previously working
    rc.lua, and demanding a very careful use of
    add_value() from the user, or else some values or
    even entire stacks would mysteriously vanish
    and errors in draw() get triggered,
    sometimes after a period of seemingly normal functioning.

    Now `values` is always a table of tables and
    the group parameter in add_value() defaults to 1,
    thus making the non-stacked graph a trivial variant
    of the stacked graph.
2021-05-20 22:16:17 +07:00
mergify[bot] a4572b9b52
Merge pull request #3238 from ShayAgros/master
Fixed wrong handling of negative spacing in layout.fixed
2021-04-29 06:45:50 +00:00
mergify[bot] 4c46f6dbf3
Merge pull request #3335 from Elv13/imagebox
Extend wibox.widget.imagebox to encompass the required wallpaper API features
2021-04-28 18:39:03 +00:00
Emmanuel Lepage Vallee 5cfcbac959 imagebox: Extend to add enough knobs for the wallpaper API.
* horizontal/vertical scaling/stretch
 * max scaling factor
 * vertical/horizontal align instead of hardcoded top-left
 * scaling_quality, if Cairo cooperates

It also fixes the clip_shape when resize = false.
2021-04-28 00:06:08 -07:00
mergify[bot] 42d241c707
Merge pull request #3332 from Elv13/tile_container2
Tile container
2021-04-26 11:37:20 +00:00
actionless 5bd0ff82a6 fix(wibox: textbox): remove ldoc tags added by merge mistake 2021-04-25 20:55:44 +02:00
Emmanuel Lepage Vallee ee0d793efe doc: Document the place container. 2021-04-24 23:28:18 -07:00
Emmanuel Lepage Vallee 738e2e0467 container: Add a tile container.
It will be used for the new awful.wallpaper module. The idea is to
first close the gap with `gears.wallpaper` before it gets deprecated.
2021-04-24 23:28:18 -07:00
Emmanuel Lepage Vallee d373bf2d05 widget: Emit "property::widget"
For consistency.
2021-04-24 23:28:18 -07:00
Emmanuel Lepage Vallee 78b8756068 place: Split internal logic to be reusable.
This will become the base class of a new "tile" container.

I also fixed a bug which could cause the output to be blurry for
some widget sizes.
2021-04-24 23:28:18 -07:00
Emmanuel Lepage Vallee 6a4e555ae1 slider: Fix an aliasing issue.
There was a bunch of `math.floor` missing. Some slider size were blurry.
2021-04-24 23:28:18 -07:00
actionless 6b93661048 fix(awful: hotkeys_popup: insert_keys): handle case when user actually binded some key like `<` or `>` which require xml escape for pango 2021-04-23 07:52:17 +02:00
Yauhen Kirylau a35acea61a
Merge branch 'master' into hotkeys-popup-better-split-key-labels 2021-04-23 07:23:26 +02:00
Aire-One 6226742f72 doc(wibox.widget.textclock): Widget definition. 2021-04-07 01:38:53 -07:00
Aire-One b184f95195 doc(layout.flex): Hide `fill_space` property doc
Add an explicite `@property` tag to the `wibox.layout.flex` doc
comments to override the `fill_space` property from
`wibox.layout.fixed` and mark it as hidden thanks to `@hidden`.
2021-04-02 20:02:39 +02:00
Emmanuel Lepage Vallee 90c4c60d2a Add more @supermodule and @hidden 2021-04-02 19:24:07 +02:00