Compare commits

...

2064 Commits

Author SHA1 Message Date
45ac3ea0a5 docs 2024-04-18 23:25:08 +02:00
d12e31373c modules/custom: Support Multi-Line JSON when interval is set 2024-04-18 23:25:08 +02:00
9750c9f149 fixup! modules/custom: Allow json fields as format specifiers 2024-04-18 23:25:08 +02:00
0ec0ea2201 modules/custom: Allow json fields as format specifiers 2024-04-18 23:25:06 +02:00
8ef4ddd7ef fix: lint 2024-04-18 08:34:02 +02:00
f26efae569 Merge pull request #3130 from kiriDevs/kiridevs/battery-cycles
battery: Add {cycles}, {health} format replacements
2024-04-18 08:33:17 +02:00
67bf98a93e style: Change more var names to camelCase 2024-04-17 14:46:35 +02:00
dd092a5fc1 Merge pull request #3143 from tomben13/fix_workspaces
Fixes for hyprland/workspaces
2024-04-17 08:28:00 +02:00
3efebc2822 Merge pull request #3142 from janpeterd/master
calendar: add shift_reset action
2024-04-15 22:18:17 +02:00
fbcd7ebbfa Merge pull request #3141 from rnestler/remove-unused-variable
Remove unused variable in Workspaces::updateWindows
2024-04-15 22:18:07 +02:00
fb88c06d78 calendar: add shift_reset action 2024-04-15 21:59:35 +02:00
133dfc2e85 Remove unused variable in Workspaces::updateWindows 2024-04-15 13:50:41 +02:00
ddacb111a9 Merge pull request #3136 from hrdl-github/fix-pipewire-locking
Pipewire backend: use pipewire thread lock
2024-04-14 10:33:22 +02:00
74773885c6 Pipewire backend: use pipewire thread lock
Fixes #3047.
2024-04-13 14:25:28 +02:00
3d54a6002d style: Remove superfluous 'const' on getInfo()
was here before, but is an easy fix for a clang-tidy warning
2024-04-13 13:19:54 +02:00
da47c94480 fix: Also use camelCase for usages of new vars 2024-04-13 13:18:50 +02:00
986b348bc7 style: Change new variables to camelCase 2024-04-13 13:11:14 +02:00
421ba6e31a fix: Add dummy information for battery cycles,health on FreeBSD 2024-04-12 18:48:54 +02:00
084b561d5b [hyprland/workspaces] Update window count and sort workspaces AFTER their creation 2024-04-12 11:40:05 +02:00
cd3d588abd [hyprland/workspaces] Fix active workspace not getting updated on multi monitor setups 2024-04-12 11:33:29 +02:00
24690248db fix: Calculate battery health the right way around
I even did this originally, then got confused when my battery in particular showed 102% and, instead of checking the values I calculate with, just decided to do the stupid thing and do maths the wrong around
2024-04-11 02:40:04 +02:00
805faa47e6 style: Remove debug output
Oops
2024-04-10 18:48:03 +02:00
a59593fde1 feat(battery): Add {health} format replacement 2024-04-10 18:19:55 +02:00
7f1e623f77 style: Refactor battery cycle count choosing 2024-04-10 17:30:47 +02:00
43511992d9 feat(battery): Add {cycles} format replacement 2024-04-10 17:00:50 +02:00
e8038ef9f3 Merge pull request #3127 from dkg/man-waybar-styles
Add waybar-styles(5) manual page
2024-04-10 11:00:32 +02:00
a9088c7e7d fix: lint 2024-04-10 10:20:21 +02:00
896c578c0e Merge pull request #3128 from hvenev/master
Fix #3125
2024-04-10 10:19:47 +02:00
f68ac9119a Use $TZ for local time if it is set
libstdc++ doesn't.
2024-04-09 23:27:36 +03:00
3d15b96429 Add waybar-styles(5) manual page
waybar(5) describes the configuration syntax but doesn't mention how
the stylesheets are handled.

This documentation would have been helpful to me as i figured out how
to configure waybar.
2024-04-09 10:02:33 -04:00
42dc9cb85f Merge pull request #3102 from dep4/taskbar-directories
taskbar: search user directories first for desktop files
2024-04-03 08:58:49 +02:00
245043f9e7 taskbar: search user directories first for desktop files 2024-04-01 14:30:31 -04:00
3de9e0cbd3 Merge pull request #3099 from kkvark/master 2024-04-01 07:53:23 +02:00
9b4fc6d16b fix(sway/workspaces): floating_nodes and focused icon
Floating nodes are not taken into account for visible and empty workspaces

And fix focused icon (#3095)
2024-03-31 21:53:56 +07:00
ddc767cd81 Merge pull request #3082 from Kuruyia/refactor/privacy-module
refactor(privacy): clean up the module
2024-03-28 13:15:24 +01:00
fe15530f34 refactor(privacy): clean up the module 2024-03-25 20:16:47 +01:00
b652b4296d Merge pull request #3066 from MauroGuida/master
fix(sway/workspaces): Visible class doesn't work on visible and empty workspaces
2024-03-25 19:03:06 +01:00
e8627e140c Merge pull request #3068 from ordy/master
(Fix) Alt format on group modules
2024-03-25 19:01:48 +01:00
d6c0d59224 Merge pull request #3081 from iynaix/master
nix: build against wireplumber 0.5
2024-03-25 17:13:11 +01:00
5056309963 nix: build against wireplumber 0.5 2024-03-25 22:47:37 +08:00
487ab23259 Merge pull request #3076 from cptpcrd/reload-config
Fix reloading config
2024-03-24 22:06:56 +01:00
e3ceaf63d1 Fix reloading config
Fully clear the configuration before reloading, so that when the config
is read and merged in there are no existing values which mergeConfig
refuses to overwrite.
2024-03-24 15:41:19 -04:00
c6cbf57a38 Merge pull request #3067 from encbar5/restore_intertible_month_scroll
Fix clock on-scroll value not being used for calendar
2024-03-24 17:19:27 +01:00
abd7ca2a1e Fix clock on-scroll value not being used for calendar, which was broken by 86a3898 2024-03-24 10:37:31 -05:00
70ef406d6b check for group modules array in key conversion 2024-03-23 18:39:22 +01:00
7cd2a6c003 fix(sway/workspaces): Visible class doesn't work on visible and empty workspaces 2024-03-23 13:02:39 +01:00
cc084f5f86 Merge pull request #3028 from bartelsielski/upower-warning_level
Upower warning level
2024-03-22 23:22:56 +01:00
19f3ce6f85 fix: lint 2024-03-22 23:21:57 +01:00
32e241dc47 Merge pull request #2917 from alttabber/master
Add always on option for hyprland/submap
2024-03-22 23:21:17 +01:00
c4907a6065 Merge pull request #3005 from eyusupov/dwl-title
Add dwl/window module
2024-03-22 23:20:26 +01:00
f228c13802 Merge pull request #2638 from staticssleever668/fix_mold_linking
refactor(backlight): use concrete types for some helper functions
2024-03-22 23:19:49 +01:00
e30ddda23a Merge pull request #2987 from tomben13/master
[hyprland/workspaces] New options to change on click behaviour and active workspace status
2024-03-22 23:16:57 +01:00
38634a0ca8 Merge pull request #3034 from wispl/master
Add empty workspace style for Sway
2024-03-22 23:13:29 +01:00
fe0716bf39 fix: lint 2024-03-22 23:13:10 +01:00
9d95eaaac4 Merge pull request #2919 from tokyovigilante/wireplumber-0.5
Update Wireplumber API to 0.5
2024-03-22 23:12:07 +01:00
2326727ccb Update Wireplumber API to 0.5
The WP component loader API has changed to be asynchronous, so implement a (GAsyncReadyCallback)-based loader to manage them. Logging integration change was required for 0.5.0 RCs but not for the 0.5.0 release.

Fix clang-tidy and clang-format warnings. Note these are significantly wider than the changes for 0.5.0 so optional beyond the existing patchset.
2024-03-21 13:37:03 +13:00
1ecca055f7 Merge pull request #3051 from MauroGuida/master
fix(sway/workspaces): visible class doesn't work
2024-03-20 15:26:31 +01:00
c841bf567b fix(sway/workspaces): visible class doesn't work 2024-03-20 15:03:25 +01:00
49a13ab28f Merge pull request #3049 from MauroGuida/master
fix(wlr/taskbar): crash on taskbar drag and drop event
2024-03-20 14:02:41 +01:00
6d690ad48b fix(wlr/taskbar): crash on taskbar drag and drop event 2024-03-20 13:28:35 +01:00
b9688eb067 Merge pull request #3032 from leiserfg/ppd-right-click
Make right-click to circle down ppd
2024-03-20 10:34:10 +01:00
0fcf6bcebc Document sway workspace button.empty 2024-03-19 22:56:20 -04:00
cf3389e5d7 Add empty workspace style for Sway 2024-03-19 22:56:20 -04:00
cbe42a8536 Merge pull request #3037 from grimpy/fixperistentclass
Fix peristent class on buttons
2024-03-19 22:56:37 +01:00
73e24af71c Merge pull request #3039 from hrdl-github/fix-floating
Also consider floating nodes when checking for flags
2024-03-19 14:25:20 +01:00
856a34e16d Also consider floating nodes when checking for flags
Fixes #3030
2024-03-19 11:53:04 +01:00
2ffd9a94a5 Fix peristent class on buttons
Fixes: #3009

Signed-off-by: Jo De Boeck <deboeck.jo@gmail.com>
2024-03-19 08:22:33 +02:00
67218d5554 Make right-click to circle down ppd 2024-03-18 21:49:40 +01:00
bbb69bd977 upower: Initialize variables
There are code paths in which some of these variables were used but not
initialized, causing undefined behavior.
2024-03-18 20:38:50 +01:00
bd8b215416 upower: Add 'low' and 'critical' CSS classes
Add secondary CSS class based on the 'warning_level' field reported by UPower
over D-Bus.  This makes it possible to add custom styling when the battery is
near empty.
2024-03-18 20:36:46 +01:00
2c927de4c6 Merge pull request #3023 from tomben13/fix_segfault 2024-03-17 23:09:38 +01:00
736309ef1f Fixed segfault 2024-03-17 23:00:48 +01:00
ca17bdb214 Merge pull request #2968 from jramrath/hyprland_workspaces_monitor_class
Hyprland workspaces `hosting-monitor` css class
2024-03-17 13:06:50 +01:00
f014a7d2e5 man docs & different css class name 2024-03-16 21:22:01 +01:00
376b4d1c09 Merge pull request #3015 from DreamMaoMao/master 2024-03-16 13:54:06 +01:00
c5a6299398 fix:dwl tag crash when use wlr-randr enable monitor 2024-03-16 20:10:05 +08:00
8174dce776 Merge pull request #3011 from nicolarevelant/master
Use the correct thermal zone in FreeBSD
2024-03-15 17:37:07 +01:00
01ff7ebb36 Fix clang-format to src/modules/temperature.cpp 2024-03-15 17:12:31 +01:00
fbf66530a3 Explicit convert from std::string to const char* 2024-03-15 16:52:52 +01:00
e1f876b981 Fix fmt::format: missing argument 2024-03-15 16:36:54 +01:00
1eb509a86d Merge pull request #3010 from luzpaz/repology-badge
README: tweak repology badge
2024-03-15 16:10:11 +01:00
2d12236726 Use the correct thermal zone in FreeBSD 2024-03-15 16:09:18 +01:00
4ccefa0902 README: tweak repology badge
* Change repology badge header  
* Use 3 columns instead of 1 to display badge
2024-03-15 11:05:55 -04:00
fc4b9fa22b Merge pull request #3008 from alebastr/ppd-fix-initial-visibility 2024-03-15 10:16:56 +01:00
dcddddd3f1 fix(power-profiles-daemon): correctly set initial visibility
The bus error when the daemon is not reachable prevents the initial
update and keeps the module visible, as an empty section on the bar.

Do the update explicitly before connecting to set initial visibility.

While we at it, remove a couple of redundant `update()` calls.
2024-03-14 20:47:07 -07:00
17734f0364 Add dwl/window module 2024-03-14 23:51:46 +03:00
32eac3ccb7 chore: 0.10.0 2024-03-13 19:46:56 +01:00
20f08b881a Merge pull request #2996 from rroohhh/feat/horizontal_scroll
feat: allow horizontal scroll
2024-03-13 19:45:20 +01:00
214858f413 Merge pull request #3001 from grimpy/fixpersitantworkspaces
Fix peristant workspaces for sway
2024-03-12 14:22:18 +01:00
7b3d155608 Fix peristant workspaces for sway
Fixes: #2998

Signed-off-by: Jo De Boeck <deboeck.jo@gmail.com>
2024-03-12 04:40:54 +02:00
207e99876d feat: allow horizontal scroll 2024-03-08 21:48:27 +01:00
68889494d0 Removed option active-per-monitor 2024-03-05 11:12:46 +01:00
4c46d7d245 Merge pull request #2887 from dann-merlin/master
Add justify config option for Labels
2024-03-05 09:01:44 +01:00
25b85800a5 Add documentation for justify option 2024-03-04 20:00:57 +01:00
380607583e Merge pull request #2971 from picnoir/pic/power-profiles-daemon
Introduce a power-profiles-daemon module
2024-03-04 14:25:16 +01:00
df7f1fffcf feat(hyprland/workspaces): added options move-to-monitor and active-per-monitor 2024-03-04 13:17:52 +01:00
26af1066e1 Merge pull request #2984 from alebastr/too-much-logs-mpd
mpd: less aggressive logging and reconnections
2024-03-03 10:05:22 +01:00
97cd2b47b8 Merge pull request #2986 from ErikReider/sway-workspaces-scroll-fix 2024-03-02 23:37:06 +01:00
9de0e393ab Sway-Workspaces: Fixed scrolling not working
Fixes regression in bb843e0 that caused scrolling over the bar not working
2024-03-02 23:08:21 +01:00
5578c122ab modules/power-profiles-daemon: kebab case name in config
power_profiles_daemon => power-profiles-daemon
2024-03-02 18:44:25 +01:00
5ba7c9eb60 modules/power-profiles-daemon: add some right padding
The icon is not really centered in the box. This is likely coming from
a bogus glyph width calculation. It's not a big deal, but that's not
really pleasant aesthetically-wise.

Adding a bit of right padding makes it much more pleasant to watch. It
does not really disrupt a wider display form, like one that
explicitely writes the active profile.
2024-03-02 18:20:46 +01:00
cc759a8b8f Power profiles daemon: address review comments
Adding :
- A missing try/catch
- Glib::Error catch
- Remove the useless destructor
- Populate the profiles vector more efficiently
- Numerous nits
2024-03-02 18:20:46 +01:00
bddc870340 modules/power-profiles-daemon: add man page
There was no way to display the default value of format-icons without
breaking the table :(
2024-03-02 09:46:14 +01:00
09bb6a055d modules/power_profiles_daemon: safely call dbus asynchronously
2 changes to address the review feedback:

1. Aleksei pointed out in this
   comment (https://github.com/Alexays/Waybar/pull/2971#issuecomment-1972364896)
   that there's no way to tell if a proxy is alive other than trying to
   call a method on it. We perform a little dance to check whether or
   not power-profiles-daemon is available on the system by calling
   properties.GetAll. If something responds, we assume
   power-profiles-daemon is installed, it's then safe to draw the
   widget and attach the callback to the active profile.
2. We replaced all the synchronous DBus operations by their async
   counterparts.
2024-03-01 12:55:37 +01:00
61fed6a214 modules/power_profiles_daemon: add custom format from config
We move to a single icon label format to save space on the bar. We
still display the profile name and the driver in the tooltip.
2024-03-01 11:18:24 +01:00
c03fa38974 fix(mpd): use default interval in the example config
2 seconds is 2.5 times more often than the default for the module.
2024-03-01 00:53:12 -08:00
bb60d41842 fix(mpd): use timers with second granularity where possible
Reuse already armed timer in Disconnected state.
2024-03-01 00:27:23 -08:00
653c24cee1 feat(mpd): tone down logs if the server is not running 2024-03-01 00:16:19 -08:00
bdff489850 Merge pull request #2983 from alebastr/ci-freebsd-on-ubuntu
ci: move FreeBSD to ubuntu runners
2024-03-01 05:41:40 +01:00
162b41c4d0 modules/power-profiles-daemon: apply clang-tidy suggestions 2024-02-29 21:46:27 +01:00
55915f95f1 ci: move FreeBSD to ubuntu runners
With the recent runner hardware upgrade[1] and support in the
cross-platform-actions[2] it became possible to use a Linux runner for
this workflow.
Linux-based configuration appears to be faster and stabler than macOS,
so it's now recommended for use.

[1]: https://github.blog/2024-01-17-github-hosted-runners-double-the-power-for-open-source/
[2]: https://github.com/cross-platform-actions/action/releases/tag/v0.23.0
2024-02-28 23:56:10 -08:00
d9abc080e1 Fix merge conflict with #2930 2024-02-28 22:52:08 +01:00
e7c7ef6814 Merge pull request #2979 from grimpy/filterscratch
Filter out special output __i3 which contains scratchpad
2024-02-28 10:38:33 +01:00
04f73e7303 Merge pull request #2973 from Azazel-Woodwind/feature/hyprland-window-improvements
Improved hyprland/window by fixing icon search and implementing configurable spacing
2024-02-28 09:29:54 +01:00
ba48d26dd4 chore: amend default icon spacing 2024-02-28 00:24:58 +00:00
5a887fe1ef Filter out special output __i3 which contains scratchpad
Fixes: #2966

Signed-off-by: Jo De Boeck <deboeck.jo@gmail.com>
2024-02-27 23:43:00 +02:00
e79ea93d7d Merge pull request #2967 from aruhier/pr_hyprland_workspaces
hyprland/workspaces: Improve the workspaces persistency logic
2024-02-27 16:41:32 +01:00
615c9050e7 fix: prevent icon showing when app_identifier is empty 2024-02-26 22:52:28 +00:00
c59bb509bd fix: hide icon if window is unfocused 2024-02-26 21:00:16 +00:00
a7d8b1bacf feat: re-add default and configurable icon spacing 2024-02-26 20:58:38 +00:00
968f469289 modules/power-profiles-daemon: run clang format 2024-02-26 14:44:14 +01:00
c38d05b04f Introduce power-profiles-daemon module
We introduce a module in charge to display and toggle on click the
power profiles via power-profiles-daemon.

https://gitlab.freedesktop.org/upower/power-profiles-daemon

This daemon is pretty widespread. It's the component used by Gnome and
KDE to manage the power profiles. The power management daemon is a
pretty important software component for laptops and other
battery-powered devices.

We're using the daemon DBus interface to:

- Fetch the available power profiles.
- Track the active power profile.
- Change the active power profile.

The original author recently gave up maintenance on the project. The
Upower group took over the maintenance burden… …and created a new
DBus name for the project. The old name is still advertised for now.
We use the old name for compatibility sake: most distributions did not
release 0.20, which introduces this new DBus name. We'll likely revisit
this in the future and point to the new bus name. See the inline
comment for more details.

Given how widespread this daemon is, I activated the module in the
default configuration.
2024-02-26 14:44:14 +01:00
695c786354 refactor: reuse toLowerCase function 2024-02-26 04:17:45 +00:00
16aced7f9f feat: move name and classes from label_ to box_ 2024-02-26 04:07:03 +00:00
d6d4d87cf7 Attributes doc format fix from the review
Co-authored-by: Tuur Vanhoutte <4633209+zjeffer@users.noreply.github.com>
2024-02-26 00:21:36 +01:00
b3ee94d87a Improve hyprland/workspaces persistency logic
Fixes #2945

Split the config and rule persistency in 2 attributes, one storing the
persistency as set in Waybar's config, the other one storing the
persistency as set in Hyprland.

It fixes some conflicts between the persistency state of a workspace as
set in Waybar's config and its dynamic state in Hyprland.

It allows to remove a persistent workspace in Waybar if this workspace
is removed from Hyprland and if the workspace is not set as persistent
in Waybar's config.
2024-02-26 00:14:25 +01:00
3a5aa5ee83 feat: improve default spacing and add to config 2024-02-25 22:56:52 +00:00
0ead42e52b feat: improve search of .desktop files 2024-02-25 22:55:30 +00:00
6703adc37f Merge pull request #2972 from alebastr/config-tweaks
RFC: Rename config to config.jsonc
2024-02-25 23:43:25 +01:00
43aabf046c chore: rename config to config.jsonc
Only changes the name of the default config we install and does not
affect the lookup logic in any way.

Man pages were already fixed in #2744
2024-02-25 12:00:53 -08:00
2108959644 chore(config): add modeline for Emacs json-mode
json-mode supports jsonc format since 1.8.0, but does not register
.jsonc as a file extension.
2024-02-25 11:21:58 -08:00
3a33c0b290 Merge pull request #2930 from zjeffer/fix/zjeffer/hyprland-clang-tidy
fix clang-tidy errors in hyprland module
2024-02-25 17:11:13 +01:00
fb193529fc Merge pull request #2961 from alebastr/sway-language-single-layout
feat(sway/language): option to hide module with single layout
2024-02-25 17:10:50 +01:00
75dce1ef4b Merge pull request #2969 from alebastr/config-tweaks
Config tweaks
2024-02-25 17:10:22 +01:00
9bc8de8876 fix clang complaints 2024-02-25 13:46:49 +01:00
42f4386e2e fix clang-tidy errors in hyprland module 2024-02-25 12:11:22 +01:00
edd723d95c Change PrivateMember styling to use trailing underscore instead of m_ in .clang-tidy 2024-02-25 11:44:55 +01:00
05fbbc1c43 style: align 'sway/mode' text with other modules
Use `box-shadow` instead of borders for consistent vertical alignment.
See 77c7e10 for a similar conversion of other modules.
2024-02-24 18:26:02 -08:00
2540c07f1d chore: wrap module lists in the config
"modules-right" has gotten too long, and it's easier to compare configs
that way.
2024-02-24 18:24:39 -08:00
4cc2800a78 add 'onThisMonitor' css class 2024-02-25 00:52:33 +01:00
16079eae09 update m_output 2024-02-25 00:51:52 +01:00
188789592e feat(sway/language): option to hide module with single layout 2024-02-24 00:30:45 -08:00
99c48bca36 fix: formatting 2024-02-24 00:30:44 -08:00
601af3de81 Merge pull request #2958 from JonnyTischbein/mediaplayer-exclude 2024-02-24 00:06:03 +01:00
3d31e9a22a mediaplayer: add exclude player option 2024-02-23 18:41:45 +01:00
793394c862 Merge pull request #2949 from aokblast/feat/bsd_cpufreq
feat: implement cpufreq for bsd by sysctl
2024-02-22 01:25:21 +01:00
514d00803c feat: implement cpufreq for bsd by sysctl 2024-02-22 04:47:09 +08:00
977c66e7c5 Merge pull request #2948 from alebastr/clang-tidy-fix
ci: fix clang-tidy action
2024-02-21 09:19:20 +01:00
450a344426 chore: only label issues 2024-02-21 09:19:03 +01:00
5fc2b97194 ci: fix clang-tidy action 2024-02-20 17:22:33 -08:00
efb2eb5073 chore: update cpp-linter 2024-02-20 22:24:30 +01:00
1606dce62e Merge pull request #2944 from grimpy/waybarwindows
Implement windows formating in sway/workspaces
2024-02-20 18:34:32 +01:00
bb843e0494 Implement windows formating in sway/workspaces
This implementation mimics to some extend the implementation of hyprland

Signed-off-by: Jo De Boeck <deboeck.jo@gmail.com>
2024-02-20 19:12:26 +02:00
1b4008c58b Merge pull request #2943 from iynaix/master
nix: update libcava version and removal of gtk-layer-shell meson option
2024-02-20 11:34:04 +01:00
a45932973a fix: lint 2024-02-20 11:33:41 +01:00
00ee538c95 nix: update libcava version and removal of gtk-layer-shell meson option 2024-02-20 17:57:07 +08:00
4ef5b48474 Merge pull request #2934 from tomben13/master
Fixed window#waybar.swallowing for module hyprland/window
2024-02-20 10:39:33 +01:00
e6aa06cdf3 window#waybar.swallowing -- backward compatibility 2024-02-20 09:39:03 +01:00
e42635197c chore: more labels 2024-02-20 08:35:28 +01:00
b8324be8c4 fix: token 2024-02-20 08:26:14 +01:00
197bc6a877 Merge pull request #2938 from thejch/click-special 2024-02-20 08:03:16 +01:00
536933ca24 Merge pull request #2940 from alebastr/clock 2024-02-20 08:02:08 +01:00
a118af0d1b Merge pull request #2939 from alebastr/ci-update-debian-dependencies 2024-02-20 08:01:18 +01:00
f885baba61 fix(clock): remove literal operator with reserved name
```
../include/util/date.hpp:34:26: warning: literal operator suffixes not preceded by ‘_’ are reserved for future standardization [-Wliteral-suffix]
   34 | constexpr decltype(auto) operator""d(unsigned long long d) noexcept {
```
2024-02-19 21:56:47 -08:00
a2deff3689 fix(clock): crash on scrolling with local timezone ("") in the list
While we at it, eliminate use of non-portable GCC conditional expression
syntax. There are no significant side-effects that would justify use of
the language extension.
2024-02-19 21:56:46 -08:00
5d6acfd1d4 test: restore compatibility with older Catch2 releases 2024-02-19 17:00:01 -08:00
d59d6e8765 chore: remove duplicate fedora/c++20 job definition 2024-02-19 16:35:56 -08:00
bdb2f2bd1a chore: update Debian CI dependencies
This should speed-up "linux (debian)" and "clang-tidy" builds and enable
lints for more modules.
2024-02-19 16:35:21 -08:00
4a5444d196 fix click special 2024-02-19 16:16:46 -08:00
ce5a1cf2f9 Merge pull request #2937 from alebastr/factory-includes
refactor: move all module includes to factory.cpp
2024-02-20 00:44:38 +01:00
c6f5cbdf0c refactor: move all module includes to factory.cpp
None of these includes are required in the header.
2024-02-19 15:11:08 -08:00
6048e23e09 Merge pull request #2926 from alebastr/meson-cleanup
build: refactorings and deprecation fixes
2024-02-19 23:44:52 +01:00
3d75167e67 Merge pull request #2936 from Alexays/revert-2773-waybarwindows
Revert "Implement windows formating in sway/workspaces"
2024-02-19 23:28:15 +01:00
ee2407496f Revert "Implement windows formating in sway/workspaces" 2024-02-19 23:28:08 +01:00
175852e527 chore: auto label 2024-02-19 23:24:20 +01:00
d36f15c26b Merge pull request #2935 from Alexays/revert-2915-cpu_style
Revert "Add style class for CPU state"
2024-02-19 23:10:20 +01:00
742cd7f371 Revert "Add style class for CPU state" 2024-02-19 23:10:10 +01:00
41b2d0cb29 chore(workflows): concurrency 2024-02-19 23:09:24 +01:00
a95b6a39c9 build: mark bluetooth as Linux-specific 2024-02-19 14:08:22 -08:00
bd0bf836c7 fix: lint 2024-02-19 23:07:50 +01:00
ae1e11db22 Merge pull request #2773 from grimpy/waybarwindows
Implement windows formating in sway/workspaces
2024-02-19 23:05:24 +01:00
347197865f Merge pull request #2885 from jones-josh/ordinal-date
Add ordinal date toolbar format specifier to clock module
2024-02-19 23:03:40 +01:00
91b79a2e9e Merge pull request #2894 from jramrath/active-for-hyprland-special-workspaces
Add css classes to hyprland special workspaces
2024-02-19 23:02:17 +01:00
70dc388dff Merge pull request #2915 from haasn/cpu_style
Add style class for CPU state
2024-02-19 22:58:21 +01:00
bba8da76b6 Merge pull request #2836 from alebastr/require-gtk-layer-shell
Require gtk-layer-shell
2024-02-19 22:57:50 +01:00
9abd0da1c7 Merge pull request #2603 from zjeffer/hyprland/persistent-workspaces
Hyprland/workspaces: use Hyprland's workspace rules for persistency
2024-02-19 22:55:28 +01:00
6fbae3bd7b Merge pull request #2888 from imran1008/hwmon-path-abs-subdir
Search for the first hwmon* directory
2024-02-19 22:53:31 +01:00
9191cae13b Merge pull request #2923 from jones-josh/custom-tooltip-format
Add check for tooltip-format for custom modules
2024-02-19 22:47:22 +01:00
a18b6dcc29 Merge pull request #2925 from LukashonakV/bump_cava
libcava bump 0.10.1
2024-02-19 22:47:04 +01:00
c553e3028e Merge pull request #2928 from zjeffer/fix/zjeffer/build-warnings
fix build warning in bar.cpp
2024-02-19 22:41:44 +01:00
745d5687b8 Fixed window#waybar.swallowing for module hyprland/window 2024-02-19 22:23:03 +01:00
8a4a44896a refactor: merge BarSurface into Bar
With only one implementation left, the abstraction is no longer
necessary.
2024-02-19 03:00:38 -08:00
4420447e74 fix(bar): use std::string for mode names
`string_view` leads to UAF when reading custom mode definitions from the
configuration.
2024-02-19 01:50:40 -08:00
11310b89f0 hyprland/workspaces: Use hyprland's persistent workspaces configuration 2024-02-18 16:04:47 +01:00
a02bacdd53 fix build warning 2024-02-18 12:01:36 +01:00
543290ab07 fix: -Wnon-virtual-dtor warning in CssReloadHelper
```
../include/util/css_reload_helper.hpp:15:7: warning: 'class waybar::CssReloadHelper' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]
```
2024-02-17 21:43:10 -08:00
fd5a03dc5f build: disable catch2 unit-tests
The library tests take more time to complie than the entire Waybar.
2024-02-17 21:43:09 -08:00
f3063e86aa build: install man pages only for enabled modules 2024-02-17 21:43:08 -08:00
3cb587945a fix: use gtk_layer_set_keyboard_mode()
`gtk_layer_set_keyboard_interactivity()` is deprecated and was removed
in gtk4-layer-shell.
Note that this bumps version requirement to 0.6.0
2024-02-17 11:23:19 -08:00
9a21884272 feat!: drop RawSurfaceImpl with direct use of wlr-layer-shell
BREAKING CHANGE: gtk-layer-shell is now required and unconditionally
used. The corresponding config option is removed.

As a part of preparation for future versions of GTK, remove an ability
to use wlr-layer-shell directly. The APIs it required were dropped in
GTK4, and with the menus/tooltips positioning issue being practically
unsolvable it doesn't make sense to keep maintaining the code.
2024-02-17 11:23:17 -08:00
4f5dd53571 chore: update gtk-layer-shell subproject to 0.8.2 2024-02-17 11:21:43 -08:00
4b34486143 man: fix missing code block fence in hyprland-workspaces 2024-02-17 08:45:44 -08:00
63935ba0fb build: don't use sh for scdoc 2024-02-17 08:45:18 -08:00
d9f9fb51ff build: use / instead of join_paths 2024-02-17 08:45:17 -08:00
c2f37705ad build: address meson deprecation warnings:
- `ExternalProgram.path`
- `dependency.get_pkgconfig_variable`
- `meson.build_root`
- `meson.source_root`
2024-02-17 08:45:16 -08:00
72406fa3f2 build: require gio-unix-2.0 unconditionally
We already use it without checking (`<gio/gdesktopappinfo.h>` in
wlr/taskbar), it's a transitive dependency of GTK and it's always
available on Unix platforms.
2024-02-17 08:33:31 -08:00
104accdc34 build: drop std::filesystem checks
The `<experimental/filesystem>` and `-lc++experimental` aren't needed
since LLVM 9.0. And since we now require C++20, checking for the
`<filesystem>` support shouldn't be necessary either.
2024-02-17 08:33:22 -08:00
d7d4dca6ba libcava bump 0.10.1
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2024-02-17 18:20:03 +03:00
7f3e396383 add tooltip-format to custom module man page 2024-02-16 15:26:36 +01:00
3cd311819b Merge pull request #2921 from alebastr/module-classes
Add `module` class to the root elements of the modules
2024-02-16 13:34:50 +01:00
9c3881f6f8 add check for tooltip-format for custom modules 2024-02-16 01:33:04 +01:00
d590d508ca feat: add module class to the root elements of the modules
Previously, the only way to select all the module labels was with the
following kind of selector:
```css
.modules-left > widget > label,
.modules-center > widget > label,
.modules-right > widget > label {
    /* ... */
}
```
(and a matching block for the `box` containers).

Now, this can be expressed as
```css
label.module, box.module {
    /* ... */
}
```
2024-02-14 22:41:13 -08:00
2f555a6936 refactor(bar): use Gtk enums for position and orientation
Ensure that the position and the corresponding CSS class on window are
always set.
2024-02-14 22:11:21 -08:00
9ea470410f Add always on option for hyprland/submap 2024-02-13 17:02:14 +01:00
28cd9dff47 Merge pull request #2916 from alttabber/master
Add style classes for hyprland/submap
2024-02-13 13:25:23 +01:00
77c7b91b40 Add style classes for hyprland/submap 2024-02-13 11:46:27 +01:00
a0bac34329 Add style class for CPU state
Fixes: https://github.com/Alexays/Waybar/issues/2911
2024-02-13 10:49:57 +01:00
2c244b5e83 Merge pull request #2912 from zjeffer/fix/zjeffer/build-warnings
Fix build warnings
2024-02-12 20:30:58 +01:00
dd8d6fbe6c Fix build warnings 2024-02-12 20:09:22 +01:00
acf6611098 clang-format 2024-02-10 17:35:46 +01:00
a2925fa5da fix 'visible' class for special workspaces 2024-02-10 17:26:44 +01:00
240b49f9d2 Add 'empty' css class to special workspaces 2024-02-10 16:59:53 +01:00
d4331ce7fe improve handling of special workspace name 2024-02-09 13:49:39 +01:00
4d076a71f7 Merge pull request #2899 from OpenSauce04/battery-full-no-alt
Make battery estimate inaccessible in the "Full" state on default config
2024-02-09 10:54:22 +01:00
90c2415b64 Battery estimate is no longer accessible in the "Full" state on default config 2024-02-08 15:10:21 +00:00
692f8f4ea4 add/remove 'active' on 'focusedmon' IPC event 2024-02-07 22:42:05 +01:00
61be2267ab add 'visible' css class to special workspaces 2024-02-07 21:10:17 +01:00
c30541b954 remove whitespaces 2024-02-07 16:56:37 +01:00
3bfcd5e086 Add 'active' css class to special workspaces 2024-02-07 16:33:19 +01:00
b6f4a0dae2 Merge pull request #2881 from jramrath/drawer-direction
Fix: drawer not appearing on configured side
2024-02-06 16:18:52 +01:00
92875711c6 Search for the first hwmon* directory
Background and Motivation
-------------------------
When the `hwmon-path-abs` and the `input-filename` fields are used for
the temperature module, we evaluated the following path:

```
[hwmon-path-abs] / [gap] / [input-filename]
```

where `gap` is the first file or directory in the `hwmon-path-abs`
directory. This usually works but it doesn't seem to work for NVME or
WiFi temperature sensors. For those cases, there are a bunch of other
files in the `hwmon-path-abs` directory. In the bad case, the first
selected file is not the one with the prefix `hwmon` and we end up
checking the wrong location for the `input-filename`.

Change description
------------------
We are simply going through the `hwmon-path-abs` directory and searching
for the first file/directory that begins with `hwmon`.

Test case
---------
I tested this on a AMD based Framework 13 laptop.
2024-02-05 21:40:24 -05:00
89b3203bfa Add justify config option for Labels
This is especially useful for centering labels on vertical bars.
2024-02-05 14:44:59 +01:00
08b32cb901 Removing unnecessary parts of transition_type handling 2024-02-04 16:17:06 +01:00
1fa1045af9 remove duplicated segment 2024-02-04 16:11:39 +01:00
e02cb9cfb9 add ordinal format specifier to man clock 2024-02-04 15:49:14 +01:00
718dd4afae add ordinal date toolbar format specifier to clock module 2024-02-04 15:41:39 +01:00
c641d52e06 Implement windows formating in sway/workspaces
This implementation mimics to some extend the implementation of hyprland

Signed-off-by: Jo De Boeck <deboeck.jo@gmail.com>
2024-02-03 12:31:06 +02:00
029b380c15 Fix: drawer not appearing on configured side 2024-02-02 20:54:16 +01:00
4c5ff80bbd Merge pull request #2874 from Alexays/fix-reload-style
fix: reload style
2024-01-31 23:09:54 +01:00
f1016322b9 fix: tpyo 2024-01-31 22:59:09 +01:00
6dcae2cade fix: reload style 2024-01-31 22:57:20 +01:00
fb6658e8fd chore: lint 2024-01-30 09:07:37 +01:00
1dce607c42 Merge pull request #2852 from dpayne/add_css_reload
Adding css reloader
2024-01-29 22:44:29 +01:00
10cb4180f6 * Fixing clang tidy comments
* Fixing missing includes
* Fixing formatting
2024-01-28 14:44:25 -08:00
5534fc48b1 Merge pull request #2496 from zjeffer/tests/json
Fix JSON parsing with hexadecimal characters
2024-01-28 23:38:54 +01:00
9556b0fe89 Adding a man page entry for the realod_style_on_change option 2024-01-28 14:25:00 -08:00
ddad6ce136 Merge pull request #2866 from Jay-716/pa-reconnect
pulseaudio: reconnect context when pulseaudio server restarts
2024-01-28 17:04:57 +01:00
14d168c254 pulseaudio: extract context connecting into connectContext() 2024-01-27 23:47:39 +08:00
167f04a4df pulseaudio: reconnect context when pulseaudio server restarts
When pulseaudio server restarts, the context is not reconnect
automatically. So the pulseaudio module will stop updating.
2024-01-25 23:59:32 +08:00
5f115785cf Merge pull request #2862 from Sryther/master
Move `.empty` CSS class from Img to Box in the Image module
2024-01-25 16:12:02 +01:00
7caf0b9ec4 Merge pull request #2865 from chntllh/Battery-animations
Using steps() in animation to reduce cpu usage.
2024-01-25 16:11:00 +01:00
94633c346a retrigger checks 2024-01-25 11:02:44 +01:00
7e76369ec8 Using steps() in animation 2024-01-25 14:00:21 +05:30
002ff002fe Move .empty CSS class from Img to Box in the Image module
Since the GTK Image is hidden, the CSS class wasn't used for every cases.
2024-01-24 11:10:16 +01:00
0948a407d0 Merge pull request #2810 from ArneshRC/master
feat(battery): added support for battery state-based classes on the entire waybar
2024-01-23 22:45:24 +01:00
90b5b21394 Merge branch 'Alexays:master' into master 2024-01-24 02:01:17 +05:30
8e2fa0fdbd Merge pull request #2859 from Sryther/master
Add "empty" class for Image module when path/exec is returning an empty value.
2024-01-23 18:50:50 +01:00
0af8f5c691 Add "empty" class for Image module when path/exec is returning an empty value. 2024-01-23 18:15:47 +01:00
970a7519d4 Merge branch 'master' of github.com:Alexays/Waybar into add_css_reload 2024-01-22 12:40:02 -08:00
0d9c492998 Merge pull request #2855 from SquishyPandaDev/upower-ptr-fix
Fix module UPower display device poniter
2024-01-22 09:49:55 +01:00
82b632e4ec Fix module UPower display device poniter
Force displayDevice to be a nullptr on class setup
2024-01-22 03:22:19 -05:00
27fec51439 Merge pull request #2853 from dpayne/fix_use_after_free_on_task_close 2024-01-22 09:01:48 +01:00
20fa578b12 Adding config option to enable reloading style on file change 2024-01-21 21:02:01 -08:00
f7eca99496 Using Gio::FileMonitor for watching style changes 2024-01-21 20:49:13 -08:00
53233e47a3 Fix use after free on task close 2024-01-21 19:08:23 -08:00
d7ed4f1fa8 Adding css reloader 2024-01-21 18:23:46 -08:00
d14a4a2b1a fixed early dereference error 2024-01-19 16:00:13 +05:30
dacffdb095 removed duplicate code 2024-01-19 15:27:11 +05:30
74e863ed73 updated man waybar-battery 2024-01-19 14:45:49 +05:30
3de6d2e859 Merge branch 'Alexays:master' into master 2024-01-17 18:29:14 +05:30
6e12f81223 Merge pull request #2840 from m-bdf/clock-tz-changes
clock: fix construction with calendar.format.today
2024-01-17 13:44:28 +01:00
4f0fbaba8e clock: fix construction with calendar.format.today 2024-01-17 13:30:32 +01:00
392f83e71d Merge pull request #2838 from m-bdf/clock-tz-changes 2024-01-16 22:48:31 +01:00
d343f616fc clock: handle timezone changes (again again) 2024-01-16 21:35:42 +01:00
8c502378aa Merge branch 'Alexays:master' into master 2024-01-15 14:24:27 +05:30
07eabc5328 Merge pull request #2831 from JManch/tray-fix-spacing
fix(tray): completely hide tray when it is empty
2024-01-14 16:33:28 +01:00
95ffc291f6 fix: hide tray event box instead of box 2024-01-14 15:06:06 +00:00
8f5d0098d6 Fixed json parsing with hexadecimal characters
* replace \x with \u00 to follow JSON spec
* fixes #2475 and #2495
* added unit tests for json parsing
2024-01-14 14:06:06 +01:00
4eef1ce10f Merge branch 'Alexays:master' into master 2024-01-13 16:07:11 +05:30
f744d906be Merge pull request #2820 from oxalica/feat/systemd-failed-units
Add module systemd-failed-units to monitor failed systemd units
2024-01-12 09:45:40 +01:00
fa3ce14b25 Merge pull request #2817 from Syndelis/fix/window-rewrite-multiple-bars-no-overlap
Fix/Hyprland/Workspaces: Window Rewrite on multiple non-overlapping bars
2024-01-12 09:44:03 +01:00
e6097229ce Merge pull request #2814 from khaneliman/flake-update
flake update and direnv fix
2024-01-12 09:43:19 +01:00
b239c77d74 fix: temporary catch2_3 override until upstreamed to nixpkgs 2024-01-10 12:17:46 -06:00
9e08512927 feat: strip workspace qualifiers when creating windows 2024-01-10 02:24:51 -03:00
eedd1f8e6a Add module systemd-failed-units 2024-01-09 18:19:30 +08:00
c69a6dde67 chore: update Hyprland's featureset in readme 2024-01-08 20:31:15 -03:00
4339030c9d feat: fetch clients data when moving workspaces accross monitors 2024-01-08 20:11:39 -03:00
bc7acbde5c fix: rename windows while queued for creation
this avoids the window arriving with the wrong icon when its eventually
able to be created
2024-01-08 18:30:53 -03:00
512c6fb127 feat: add orphan windows attribute to workspaces
this attribute will keep every window that doesn't have an associated
workspace in the current bar
2024-01-08 18:30:53 -03:00
b90af74d15 feat: enable direnv and fix flake devshell output 2024-01-08 12:47:32 -06:00
f1f3442e38 Merge branch 'Alexays:master' into master 2024-01-08 22:54:08 +05:30
d4d5a54e63 chore: flake lock update 2024-01-08 09:37:48 -06:00
748fc809b5 Merge pull request #2813 from yangyingchao/master
Improvements for Hyprland worskspaces & backend
2024-01-08 14:03:23 +01:00
bdd7271da9 Improvements for Hyprland backend
1. Fix warnings reported by clang tidy
2. Use unique lock instead of manully lock/unlock on mutex.
   The RAII style locking makes sure mutex is unlocked when exceptions are thrown
2024-01-08 09:26:16 +08:00
a34e3ccc86 Improvements for Hyprland workspace
1. Utilize `m_mutex` to safeguard member fields of `hyprland::Workspaces` as they are modified by multiple threads, including the event listener thread and UI thread. This applies to all member fields, not just `m_workspacesToCreate`.

2. Tidy up the create/remove workspace code.
2024-01-08 09:14:36 +08:00
3390c16f52 added support for battery state-based classes on the entire waybar 2024-01-07 17:22:34 +05:30
4b20f522f0 Merge pull request #2789 from DreamMaoMao/master
fix:#2769
2024-01-04 15:33:26 +01:00
4636309117 Merge pull request #2803 from LukashonakV/catch_bump
Catch2 bump
2024-01-04 15:33:06 +01:00
7783c81861 Catch2 bump
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2024-01-04 17:22:27 +03:00
3e55d0d7f2 Merge pull request #2787 from scgtrp/master
hyprland/workspaces: allow using the original window class/title
2023-12-31 12:40:06 +01:00
ff09ef6d71 hyprland/workspaces: allow using the original window class/title
This turns the values of window rewrite rules in hyprland/workspaces from static strings to format strings with the values {class} and {title} available.
2023-12-30 21:07:40 -05:00
99d26e44ee Merge pull request #2778 from an-prata/master
fix `restart-interval` being ignored while `signal` is defined (#2650)
2023-12-29 10:59:13 +01:00
19bf4d0544 clang format trailing whitespace 2023-12-28 19:38:01 -08:00
6b860f8690 clang formating 2023-12-28 19:36:21 -08:00
182272b8b5 fix #2650 2023-12-28 19:30:26 -08:00
e64d66ab24 fix:the workspace data is null in a small probability
update

fix clang-format warn

no manual unlock
2023-12-25 21:55:46 +08:00
41ebdc3cb6 Merge pull request #2768 from zjeffer/feat/zjeffer/freebsd-bump 2023-12-25 08:31:03 +01:00
8ccb959992 Merge pull request #2767 from zjeffer/master 2023-12-25 00:28:32 +01:00
13e904c20d Bump cross-platform-action to attempt fixing freebsd runner 2023-12-25 00:26:39 +01:00
77f0584d0d Bump clang-tidy cpp-linter-action version to v2.7.5 2023-12-24 23:08:22 +01:00
d2767fb84a Merge pull request #2760 from avannereau/wireplumber-scroll-fix
Fix wireplumber reverse-scroll option
2023-12-22 12:00:39 +01:00
49caab47a6 Fix wireplumber reverse-scroll option 2023-12-22 11:50:41 +01:00
08361be9f0 Merge pull request #2756 from grimpy/custom_output_env_var
Pass WAYBAR_OUTPUT_NAME environment variable to custom exec scripts
2023-12-21 08:55:30 +01:00
2674982c7b Merge pull request #2755 from zjeffer/master
Added clang-tidy GitHub action
2023-12-20 23:25:33 +01:00
dbe02ebe41 Added clang-tidy GitHub action
Created clang-tidy.yml
Renamed lint.yml to clang-format.yml
2023-12-20 14:31:27 +01:00
0ea5143493 Pass WAYBAR_OUTPUT_NAME environment variable to custom exec scripts
Signed-off-by: Jo De Boeck <deboeck.jo@gmail.com>
2023-12-19 22:54:12 +02:00
f5370fcff5 Merge pull request #2573 from CromFr/cabi_plugins
C ABI plugin system
2023-12-18 14:10:02 +01:00
7b79281437 Merge pull request #2742 from zjeffer/feat/zjeffer/debian-docker-add-clang-tidy-requirements
Added sudo, python3-pip & python3-venv to debian image, required for clang-tidy GH action
2023-12-18 09:06:54 +01:00
acc2da7310 Merge pull request #2744 from rpdelaney/jsonC
Specify config is JSONC
2023-12-18 09:06:28 +01:00
68e525df58 Remove 'config' from list of valid locations
Since the file can also be named config.jsonc, that will remove ambiguity
2023-12-13 11:22:57 -05:00
2cd67fdd0a The file can also be named config.jsonc 2023-12-13 10:40:13 -05:00
2600f53bdd Clarify that the configuration file is JSON*C*
JSON is JSONC
2023-12-13 10:39:59 -05:00
da9cc77db8 Added sudo, python3-pip & python3-venv to debian image, required for clang-tidy GH action 2023-12-13 11:54:04 +01:00
75f9141cac Added cffi man page 2023-12-12 16:23:03 +01:00
f03b684bd8 Merge pull request #2736 from Rice8Dyb6/master 2023-12-10 19:27:52 +01:00
4822f967b2 Sway/workspaces: fix persistent icon 2023-12-11 00:17:35 +07:00
dc208b66b3 Merge pull request #2720 from zjeffer/master
Applied clang-tidy suggestions for hyprland workspaces
2023-12-07 08:34:19 +01:00
77ebc45336 Merge pull request #2731 from mcepl/patch-1 2023-12-07 08:25:49 +01:00
d94519a93c Clear README.md from duplicated list of distributions
It doesn’t make sense to keep the list in README.md when we maintain it in Wiki as well.
2023-12-07 07:53:45 +01:00
4d5b715dc4 applied clang-tidy suggestions for hyprland workspaces 2023-12-06 21:58:26 +01:00
8a84cb609e clang-tidy: added StaticConstantCase CheckOption 2023-12-06 21:58:26 +01:00
5f8ae44233 Merge pull request #2703 from czadowanie/master
upower: show-icon config option
2023-12-05 23:34:43 +01:00
4283195803 man: add dot in upower/show-icon 2023-12-04 21:32:08 +01:00
44f309678b man: document upower/show-icon 2023-12-04 21:28:37 +01:00
4846ff7950 Merge pull request #2595 from zjeffer/master
Added initial .clang-tidy file
2023-12-04 09:29:12 +01:00
0ec2aada26 Merge pull request #2711 from chayleaf/flake
flake: update & cleanup
2023-12-04 09:28:16 +01:00
dfa0f5701e Merge pull request #2712 from khaneliman/fix/nix-flake
chore: lint fix
2023-12-04 09:28:05 +01:00
b1744278d1 chore: lint fix 2023-12-01 22:05:40 -06:00
2e2cb67cf1 flake: update & cleanup 2023-12-02 02:41:59 +07:00
1572bc8c75 Merge pull request #2707 from alexbakker/fix-2154 2023-11-30 08:37:59 +01:00
6be5f7cb29 Disconnect from PipeWire when destroying the WirePlumber module
This fixes a crash where PipeWire tries to send events to a destroyed
WirePlumber module.
2023-11-29 22:46:58 +01:00
2334faa7fd upower: show-icon config option 2023-11-28 19:39:08 +01:00
58db0baaf4 Merge pull request #2701 from thejch/hl-ws-click
Add button click check to hyprland workspaces module
2023-11-28 09:20:51 +01:00
0162dbd485 add button single click check to hyprland workspaces 2023-11-27 16:20:05 -08:00
1fe4a4ee9d Merge pull request #2686 from aruhier/pr_privacy_visibility
privacy: fix visibility when a module is disabled
2023-11-23 09:52:44 +01:00
50a4fe9623 privacy: fix visibility when a module is disabled
Only consider a privacy module as visible if it is enabled in the
configuration. Otherwise, when screensharing or audio-in or audio-out is
in use but the associated module is not enabled, the privacy widget is
empty but still considered as visible.
2023-11-23 00:45:31 +01:00
061c68ce92 Merge pull request #2677 from sjoblomj/master
Using 'image-missing' fallback if no taskbar icon is found
2023-11-20 14:03:52 +01:00
20b89d5d13 Merge pull request #2679 from aserowy/master
hyprland module: added sort_workspaces after rename occured
2023-11-20 14:02:39 +01:00
c299ea9369 Merge pull request #2681 from tactikauan/master 2023-11-19 14:20:54 +01:00
d2dd2d553f cpu_usage/linux: count iowait toward idle time 2023-11-18 13:59:21 -03:00
b6b495e1bc hyprland module: added sort_workspaces after rename occured
Signed-off-by: aserowy <serowy@hotmail.com>
2023-11-18 11:36:47 +01:00
d4559c7f00 Using 'image-missing' fallback if no taskbar icon is found 2023-11-16 16:59:05 +01:00
0a747ddafc Merge pull request #2672 from fdev31/master 2023-11-15 17:53:48 +01:00
375a38a489 Fix for #2646 2023-11-14 21:26:17 +01:00
9ac27de7d8 Merge pull request #2668 from LukashonakV/cpp20_clock 2023-11-13 08:34:59 +01:00
7308893adb Happy clang. fmt9-10
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-11-13 09:59:50 +03:00
a51dd8fc52 Merge pull request #2659 from LukashonakV/cpp20_clock
c++20. clock chrono API. STL + format
2023-11-12 09:17:59 +01:00
86a38980e4 c++20. clock chrono API. STL + format
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-11-10 17:57:26 +03:00
c4330a1e36 Merge pull request #2648 from Mrcarrot1/wp-segfault
Fix segmentation fault in WirePlumber module
2023-11-06 16:58:40 +01:00
4d339f05af Fix segmentation fault in WirePlumber module
The WirePlumber module assumes that either the node's name or
description will not be null. This leads to a segmentation fault when
both are.

The solution provided is to set self->node_name_ to a default value in
this case.
2023-11-06 09:50:13 -06:00
e24adbc3c2 Merge pull request #2612 from ErikReider/privacy-module
Add Privacy Module
2023-11-06 09:42:35 +01:00
7d7a047fcc Merge pull request #2643 from qbe/bugfix-dst-ambiguous-hour-err 2023-11-06 08:51:26 +01:00
aa1f8a428b avoid converting to local_time when converting to zoned_time afterwards 2023-11-06 01:28:48 +01:00
c420b40668 refactor(backlight): use concrete types for some helper functions
This fixes linking of the best_device() function with 'mold' linker.
2023-11-04 18:31:25 +03:00
f21b1dfa4d fixed linter issues 2023-11-04 15:16:13 +01:00
6050fa3a43 Added documentation 2023-11-04 15:16:13 +01:00
ca7c9a68f1 Made creation of privacy modules more modular 2023-11-04 14:05:01 +01:00
48ec834ec9 chore: 0.9.24 2023-11-03 14:07:07 +01:00
e7c2e90236 Revert "custom: reap zombie processes on termination"
This reverts commit 1c1a39f597.
2023-11-03 14:06:50 +01:00
23bc4d66bf Added initial .clang-tidy file 2023-11-02 23:09:49 +01:00
c6a9b63189 chore: 0.9.23 2023-11-02 14:16:55 +01:00
7dfc72003f Merge pull request #2629 from andresilva/custom-fix-zombie-processes
custom: reap zombie processes on termination
2023-11-02 10:12:21 +01:00
1c1a39f597 custom: reap zombie processes on termination 2023-11-02 01:57:55 +00:00
121dcc645f Merge pull request #2628 from andresilva/fix-hyprland-workspaces-init
hyprland/workspaces: fix crash on monitor off/on
2023-11-01 23:12:32 +01:00
8555456050 hyprland/workspaces: fix crash on monitor off/on 2023-11-01 22:04:19 +00:00
22dc87934a Merge pull request #2626 from akliuxingyuan/master 2023-11-01 17:35:42 +01:00
335a736eed tray: load_icon use request_size directly 2023-11-01 22:26:52 +08:00
1149e51f72 Merge pull request #2625 from LukashonakV/happyLinter 2023-11-01 08:27:13 +01:00
9012cebbf2 Happy Linter
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-10-31 23:31:58 +03:00
6425bd2fe0 Merge pull request #2623 from LukashonakV/cavaBump 2023-10-31 21:13:52 +01:00
241938a86d Merge pull request #2624 from sahib/master 2023-10-31 21:13:18 +01:00
f511e61832 fix: custom: do not crash if input text is not valid utf-8 2023-10-31 19:41:42 +01:00
b9b89cce7e Happy linter
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-10-31 20:47:56 +03:00
e9a66d68b7 Fix debug mode. cava issue
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-10-31 20:27:00 +03:00
49caa4bf31 Add the PrivacyNodeInfo object as pw_proxy data 2023-10-31 11:38:01 +01:00
c60a8e9836 free pipewire listeners on proxy destruction 2023-10-31 08:52:54 +01:00
b37d0df89b Merge pull request #2622 from nomads-land/master 2023-10-31 07:44:29 +01:00
67422eea36 Skips logging NoActivePlayer error msgs 2023-10-31 11:14:23 +05:30
c4226f3745 Readded signal_timeout instead of map to fix indicator being stuck 2023-10-30 18:01:47 +01:00
d32da917e4 Added tooltips 2023-10-29 00:17:53 +02:00
46e36c0e68 Simplified the privacy_item hiding/showing logic 2023-10-28 18:30:50 +02:00
86491e1512 Call module emit in privacy module contructor 2023-10-28 16:47:06 +02:00
e46f66b468 Merge pull request #2613 from DreamMaoMao/master
Fixed variable synchronization exception caused by the "hyprland/workspace" module
2023-10-27 17:27:37 +02:00
1f0ce1a5d9 Fixed variable synchronization exception caused by the "hyprland/workspace" module receiving create or delete IPC requests too quickly 2023-10-27 14:17:43 +08:00
4a4c888d7d Fixed linter complaining 2023-10-27 00:01:40 +02:00
ace319b515 Updated default CSS to include the privacy module 2023-10-26 23:44:04 +02:00
e73ea8d608 Fixed cases where the module would be hidden when it should be visible 2023-10-26 23:37:10 +02:00
f7224d8459 Initial implementation 2023-10-26 23:22:02 +02:00
95b0647c91 chore: increase freebsd timeout 2023-10-26 22:17:20 +02:00
9ef8faf9b1 Merge pull request #2611 from taminob/bugfix/increase-freebsd-ci-timeout 2023-10-26 17:45:48 +02:00
7d8c1494d7 cpu_usage: Fix ScopeGuard renaming in bsd-only file 2023-10-26 17:30:48 +02:00
33f8a02fb5 ci: Increase freebsd timeout to 2h
After switching to a new FreeBSD action, the job seems to take longer
than 30 minutes.
Therefore, an increase in the timeout is necessary.
2023-10-26 17:19:26 +02:00
1618ee78b7 Merge pull request #2601 from taminob/bugfix/2598/fix-max-duration-sleep-for-bug
Fix sleep_for for max duration
2023-10-26 10:07:27 +02:00
efab1daa7e chore: switch freebsd action 2023-10-25 18:35:58 +02:00
9a305b2d73 Merge pull request #2609 from taminob/feature/reduce-freebsd-ci-timeout
Reduce freebsd ci timeout
2023-10-25 18:28:10 +02:00
02c64f3f1e Moved all waybar info into a single struct 2023-10-24 20:16:50 +02:00
d86059016e Send update dispatcher though FFI 2023-10-24 20:16:50 +02:00
088ca6b963 Added cffi/* module for third-party advanced modules 2023-10-24 20:16:50 +02:00
6ae354f564 PoC 2023-10-24 20:16:23 +02:00
799fce0dc6 ci: Set freebsd to timeout after 30min
The job runs very unreliably and often times out after 6h of being stuck
in a boot loop.
This commit reduces the timeout to 30min.
2023-10-24 19:01:40 +02:00
68dfd6aa3a scope_guard/modules: Rename scope_guard to ScopeGuard
Using pascal case for the class name keeps it more consistent with the
majority of the other class names.
2023-10-24 17:51:38 +02:00
dd1de3efbf Revert "Revert "Fix potential memory leaks""
This reverts commit 2d33c20231 and
reapplies various patches for memory leaks.
The reason for the revert was a bug for a maximum duration interval
which caused sleep_for() to cause unpredictable behavior.
2023-10-24 17:51:38 +02:00
521dac8086 sleeper_thread: Make sleep_for more robust
In the previous fix for a passed max duration, the assumption was made
that at maximum one second will pass between the duration assignment and
the std::condition_variable::sleep_for() call.
This implementation makes the behavior more predictable by using
sleep_until() instead to emulate the sleep_for() behavior.
2023-10-24 17:51:34 +02:00
ad7d4eb07d sleeper_thread: Allow sleep_for with max duration
The standard library has the implicit requirement that for
std::condition_variable::sleep_for() the duration must not cause an
overflow if added to the current time.
This commit will reduce the duration accordingly to fit into the
duration type.
2023-10-24 17:44:35 +02:00
a459d8a9b3 Merge pull request #2605 from Syndelis/fix/hyprland-persistent-workspaces-disappear-when-empty 2023-10-24 08:31:11 +02:00
4aee5977d6 fix: set workspace as persistent on create_workspace 2023-10-23 21:07:37 -03:00
f2085fcd92 Merge pull request #2592 from zjeffer/hyprland/workspaces
General cleanup in hyprland/workspaces
2023-10-23 08:45:52 +02:00
c47d75ceda Merge pull request #2593 from x0rzavi/typo-fixes
docs: fix typos and improve language coherence
2023-10-23 08:45:08 +02:00
9ecdbcc7bc Merge pull request #2596 from rehanzo/master 2023-10-22 09:46:35 +02:00
dafe49d28c Merge pull request #2599 from Alexays/revert-2586-bugfix/fix-potential-memory-leaks
Revert "Fix potential memory leaks"
2023-10-22 09:44:57 +02:00
2d33c20231 Revert "Fix potential memory leaks" 2023-10-22 09:44:46 +02:00
5963bf6ace modules/mpris: change default interval value to 0 2023-10-21 18:14:46 -04:00
dab1493644 cleanup onEvent, dont use try/catch for flow control 2023-10-21 19:33:55 +02:00
acc911737d update window count inside the on_window_* functions 2023-10-21 18:53:53 +02:00
2d614c68f5 code review 2023-10-21 18:15:22 +02:00
d0cab2a367 docs: fix typos and improve language coherence 2023-10-21 21:15:25 +05:30
7576611782 formatting 2023-10-21 17:06:02 +02:00
ed65d9cdbd General cleanup in hyprland/workspaces 2023-10-21 16:52:23 +02:00
dbb887b4a9 Merge pull request #2585 from davxy/master
Show the network interface with highest priority (aka lower metric)
2023-10-21 14:10:21 +02:00
06f4028697 Merge pull request #2588 from taminob/bugfix/fix-custom-module-signal-without-interval
Custom module: Allow signal without interrupt
2023-10-21 14:09:12 +02:00
3413b70413 Merge pull request #2586 from taminob/bugfix/fix-potential-memory-leaks
Fix potential memory leaks
2023-10-21 14:08:58 +02:00
6a8b510db8 Merge pull request #2589 from taminob/bugfix/lint-check-hpp-header-files 2023-10-21 12:56:57 +02:00
f598e348c4 ci: Update Linter job 2023-10-21 12:50:56 +02:00
6dd2cfba34 ci: Lint header files with hpp file ending 2023-10-21 11:57:11 +02:00
ae748b2644 modules+util: fix actual (potential) memory leaks 2023-10-21 11:51:33 +02:00
a0b63d6b1e modules: use scope_exit for deletion to make code more robust 2023-10-21 11:51:18 +02:00
89e85db790 ALabel: make use of std::chrono::max() instead of magic number 2023-10-21 11:50:38 +02:00
a73669be6a modules/upower: use smart pointer to avoid memory leak 2023-10-21 11:50:28 +02:00
8c57756556 util: add scope_guard
This custom small implementation avoids adding an extra dependency like
Boost.ScopeExit
2023-10-21 11:50:06 +02:00
b8afde043c sleeper_thread: allow interrupting sleep()
This keeps the function consistent with sleep_until() and sleep_for()
which both can be interrupted.
This is relevant to allow an update via a "signal" without an "interval"
in a custom module.
2023-10-20 23:57:54 +02:00
eefd6e8336 Merge pull request #2578 from Syndelis/fix/hyprland-windows-disappearing 2023-10-20 10:24:56 +02:00
6829ed1bb4 Different interfaces have different index 2023-10-20 08:25:28 +02:00
7d5577a2ed feat: create persistent workspaces after regular ones at init
feat: avoid recreating duplicate workspaces
2023-10-19 21:29:38 -03:00
a41225c4e0 Revert "fix: fill persistent workspaces' windows at init"
This reverts commit e14a3b8687.
2023-10-19 21:23:00 -03:00
a0d2d95b41 chore: remove unused function 2023-10-19 21:21:55 -03:00
e14a3b8687 fix: fill persistent workspaces' windows at init 2023-10-19 21:19:08 -03:00
846842be80 feat: emit dispatcher when any window is created during update 2023-10-19 10:45:00 -03:00
e845db84ad feat: avoid recreating workspaces 2023-10-18 19:11:49 -03:00
193040c41e feat: attempt to move windows out of the create window payload before taking them from workspaces 2023-10-18 19:11:49 -03:00
871f9a1269 fix: revert clock 2023-10-18 08:45:56 +02:00
5319cb6e10 fix: upower hidded on start 2023-10-17 20:12:24 +02:00
208928ded5 fix: lint 2023-10-17 19:29:06 +02:00
4d7eb3bd15 Merge pull request #2515 from chrisjshore/clock_fix
fix clock to work with fmt 10.x
2023-10-17 19:25:58 +02:00
6b73e2aa58 Merge pull request #2114 from mmhat/split-cpu-module
Split cpu module
2023-10-17 19:25:29 +02:00
6ddd283d0f fix: special workspaces weren't registering windows because of the special qualifier prefix 2023-10-16 20:48:52 -03:00
e70a67d958 chore: lint
chore: swap push_back to emplace_back
2023-10-16 19:14:50 -03:00
67c0c9a66c fix: delay window creation to await for hyprland to create a workspace 2023-10-16 19:07:00 -03:00
42741c963e Merge pull request #2575 from Syndelis/feat/slider 2023-10-16 08:08:37 +02:00
9d316de15a fix: avoid compiling audio_backend if pulse is not available 2023-10-15 18:12:31 -03:00
ecbcf242d5 feat: allow unmuting by moving the pulseaudio slider 2023-10-15 17:52:12 -03:00
fd3710d869 chore: suppress compiler warning 2023-10-15 17:52:12 -03:00
11d7ca1d73 feat: backlight slider 2023-10-15 17:52:12 -03:00
c3779dd16e refactor: move backlight backend out of backlight module 2023-10-15 17:52:12 -03:00
442a4b0da0 feat: pulseaudio slider module 2023-10-15 17:52:12 -03:00
c9e129cda2 feat: allow setting volume directly 2023-10-15 17:52:12 -03:00
64d7fae03a refactor: move pulseaudio handling to separate class 2023-10-15 17:52:12 -03:00
44d8245605 Merge pull request #2560 from akshettrj/mpris-click-fix 2023-10-15 21:26:33 +02:00
93daf089b5 Merge pull request #2574 from Syndelis/feat/group-drawers 2023-10-15 21:26:04 +02:00
7645ae1907 Merge pull request #2563 from Syndelis/feat/hyprland-window-rename-by-title 2023-10-15 21:21:32 +02:00
3d496c2200 Merge pull request #2554 from mutoroglin/cava-hide-on-silence 2023-10-15 21:19:17 +02:00
ff9b6c9469 docs: fix weird man limitation 2023-10-14 22:14:13 -03:00
05b97e9ec2 fix: add hover handler to every element in the group drawer 2023-10-14 22:13:01 -03:00
8f32d102ae docs: include group drawer documentation 2023-10-14 18:50:45 -03:00
5a380da3bb chore: remove redundant else statement 2023-10-14 18:39:42 -03:00
5e44cb6ba2 refactor: move signal handler adding into separate method
fix: typo in handleMouseHover method name
2023-10-14 18:30:27 -03:00
fad858782c feat: improve drawer configuration 2023-10-14 18:24:50 -03:00
5246ab15cb feat: add drawer bool option to group 2023-10-14 17:17:52 -03:00
bbb7fb0c82 refactor: don't use a group's box directly in bar 2023-10-14 13:23:11 -03:00
c59264d6b4 fix: clang < 16 can't emplace back struct with no constructor 2023-10-12 17:30:32 -03:00
a3774dc586 Merge pull request #2568 from Syndelis/feat/hyprland-ignore-workspaces 2023-10-12 07:32:56 +02:00
ee652677a6 feat: ignore windows with empty classes or titles (if any rule uses title) 2023-10-11 11:40:49 -03:00
ceeb5bf8bd docs: include new ignore-workspaces example and documentation 2023-10-11 11:03:18 -03:00
c995bafa7a feat: add option to ignore workspaces based on regex 2023-10-11 10:59:33 -03:00
f8340d88be chore: lint unrelated file
this file was edited in #2558 but not linted
2023-10-09 15:26:07 -03:00
592d5645a5 docs: include new feature in manual 2023-10-09 14:58:21 -03:00
f9a7ecf3a9 feat: optimize cache usage when window titles aren't involved 2023-10-09 14:49:38 -03:00
387e54498e docs: document new regex collection class 2023-10-09 14:46:57 -03:00
fad43d4b16 feat: listen to windowtitle IPC event condiationally to update window rules 2023-10-09 14:42:53 -03:00
8d057e6f96 refactor: separate regex rule matching and caching in separate class 2023-10-09 13:53:00 -03:00
b2e88347b3 added description for configuration option hide-on-silence in man file 2023-10-09 17:05:12 +02:00
1af02e0a67 fix(modules/mpris): fix on-*-click typos
In all other places, the norm is to use `on-click-(middle|right)` but in
the mpris module, `on-(middle|right)-click` was being used which caused
clicks to malfunction if set to some custom commands
2023-10-09 11:48:49 +05:30
30cc88a4c5 Merge pull request #2558 from SWarrener/master 2023-10-08 22:37:46 +02:00
32d326ca4a Some missing backticks 2023-10-08 16:34:27 +01:00
ae92d7d186 Updating man page with details of options to force specific units in disk size output 2023-10-08 16:26:06 +01:00
c16e791cdc Adding options to allow disk outputs to always be in a specific unit 2023-10-08 16:24:50 +01:00
fbd62e0071 Merge branch 'Alexays:master' into clock_fix 2023-10-07 18:39:56 -04:00
1eb0777799 add function to cava module to hide on silence 2023-10-07 12:50:24 +02:00
58e506a675 Merge pull request #2529 from Syndelis/feat/hyprland-window-workspaces
Feature: Hyprland dynamic window names on workspaces
2023-10-02 19:17:42 +02:00
1b98a04c93 chore: lint unrelated files so the CI passes 2023-10-02 12:33:28 -03:00
4c0347d9f2 Merge pull request #2540 from Syndelis/fix/hyprland-special-workspaces 2023-09-25 22:33:36 +02:00
9a3238c20b chore: avoid the creation and deletion of doubled-special workspaces
see hyprwm/Hyprland#3424 for more info

Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-25 17:13:26 -03:00
6e48b236a1 fix: workspace special wasn't removed
fixes  #2505

Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-25 17:12:51 -03:00
16f6d9dfa0 Merge pull request #2534 from woojiq/fix-hyprland-default-icon 2023-09-24 09:25:37 +02:00
d37954322a fix(hyprland): use workspace name as default icon
Wlr and Sway modules use the workspace `name` as the default icon if no icon is provided. This adds the same behavior for the `hyprland/workspace` module.

Closes https://github.com/Alexays/Waybar/issues/2533
2023-09-23 21:55:18 +03:00
258ab8b147 refactor: take window representation directly from old workspace on movewindow event 2023-09-22 21:12:42 -03:00
6663ca3d75 chore: document new properties 2023-09-22 20:41:38 -03:00
adbc9d95de feat: optional default icon for 0-match classes
Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:16:59 -03:00
fbe544984c fix: ipc vs json window addr format mismatch
feat: ignore empty windows

Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:16:56 -03:00
b9d5912a4f feat: rewrite window classes
feat: cache window class rewrite resolution

Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:16:53 -03:00
3e2761e81f feat: dynamically assign windows to workspaces
Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:12:50 -03:00
6997b34a81 Merge pull request #2517 from an-prata/master
Lighter Weight Signal-Based Custom Modules
2023-09-21 23:48:22 +02:00
5960e8f1ee Merge pull request #2518 from idm1try/fix-bl-asahi
fix(backlight): wrong percentage numbers for device apple-panel-bl
2023-09-21 23:47:23 +02:00
81ffeebfb1 fix: style
Co-authored-by: Alexis Rouillard <alexisr245@gmail.com>
2023-09-21 09:03:13 +05:00
f14fe96e19 add info to interval and signal in manpage for custom modules 2023-09-19 14:52:48 -07:00
954bea36f4 chore: remove result dir by nix 2023-09-19 18:52:00 +05:00
388c024298 fix(backlight): wrong percentage numbers for device apple-panel-bl 2023-09-19 18:50:39 +05:00
9b8adc1951 Merge pull request #2494 from KanuX-14/battery_fix
Fix battery not showing for some devices
2023-09-19 13:33:35 +02:00
bf371f70d1 add waitingWorker() to Custom 2023-09-18 14:56:14 -07:00
7c28ffc856 add indefinite sleep() function to SleeperThread 2023-09-18 14:55:50 -07:00
14820e5d18 fix clock to work with fmt 10.x 2023-09-17 16:32:19 -04:00
80a34eec81 Fixed formatting again 2023-09-13 23:25:39 +02:00
d5203e5b37 Fixed cpu module: Provide stub implementation for parseCpuFrequencies 2023-09-13 23:12:35 +02:00
91b6629103 Fixed format errors 2023-09-13 21:59:42 +02:00
93d66a9258 Moved cpu/common.cpp to cpu.cpp 2023-09-13 21:56:37 +02:00
8d7341da6e cpu module: Reuse getLoad of load module 2023-09-13 21:56:37 +02:00
d1602e383c cpu module: Reuse getCpuUsage of cpu_usage module 2023-09-13 21:56:36 +02:00
c45f6681b3 cpu module: Reuse getCpuFrequency of cpu_frequency module 2023-09-13 21:56:35 +02:00
dce6a98f38 Added changes made to the cpu module 2023-09-13 21:56:34 +02:00
982ffde002 Use labels instead of buttons 2023-09-13 21:56:33 +02:00
888adb57ec Introduce cpu_usage module 2023-09-13 21:56:32 +02:00
c36fe3a004 Introduce cpu_frequency module 2023-09-13 21:56:31 +02:00
729564cc27 Introduced separate load module
The module provides the three system load averages. This is an
improvement compared what you can do with the cpu module: cpu
only provides the one minute sample and the state of the cpu module is
derived from the cpu usage which messes up the formating of the load
average. Also, at least on modern Linux systems, the load of a system
takes much more than the cpu utilization into account and it should
therefore live in a separate module.
2023-09-13 21:56:30 +02:00
4d32991bee Merge pull request #2507 from hariseldon78/patch-1
Update workspaces.cpp
2023-09-13 18:21:22 +02:00
69736d68aa Update workspaces.cpp
Fix unchecked string to int conversion of workspace name (which can be a string)
Closes #2501
2023-09-13 18:20:13 +02:00
28a2d15fef Update 'bat-compatibility' option to manual 2023-09-12 13:39:09 -03:00
a90e275d5e Merge pull request #2470 from 4e554c4c/darkmode
search for dark or light mode stylesheet
2023-09-11 09:36:05 +02:00
fc67558717 Merge branch 'master' into darkmode 2023-09-11 09:25:45 +02:00
196b400abf Merge pull request #2468 from khaneliman/persistent-rename
deprecate persistent_workspaces in favor of persistent-workspaces
2023-09-11 09:22:07 +02:00
05a2af2d7c Merge pull request #2486 from khaneliman/workspace-sorting
feat: hyprland workspaces add sort-by
2023-09-11 09:21:35 +02:00
1ff4464b2f Use adapter status if battery status is inexistent 2023-09-10 15:16:43 -03:00
60611e9c2b Fix battery not showing for some devices
Adds 'bat-compatibility' boolean checking from configuration file.
2023-09-10 14:41:40 -03:00
79cf33b9f1 refactor: enumparser create implementation file 2023-09-09 17:59:40 -05:00
b8630968b2 refactor: move capitalize string helper 2023-09-09 13:23:17 -05:00
2fee12d930 fix: enumparser capitalize everything to avoid issues 2023-09-09 12:14:52 -05:00
3ae2fe3272 refactor: PR review cleanup 2023-09-09 12:08:30 -05:00
2b8c92e8fd refactor: enum utility allow overriding 2023-09-09 11:18:12 -05:00
8ce64ea784 refactor: make parsing sort-by more lenient 2023-09-09 10:04:49 -05:00
8ea2626de8 refactor: sort-by enum hyprland 2023-09-09 10:04:48 -05:00
65ba449460 chore: update man page index 2023-09-08 23:17:21 -05:00
cbc12e5443 feat: hyprland workspaces add sort-by 2023-09-08 22:49:15 -05:00
587bd0cd62 refactor: cleanup hyprland workspaces constructor 2023-09-08 22:24:05 -05:00
309edd0585 Merge pull request #2485 from khaneliman/active-rename 2023-09-08 23:11:58 +02:00
2837b72064 fix: rename workspace active fix 2023-09-08 14:11:02 -05:00
38ef38b72f Merge pull request #2477 from zjeffer/fix/urgent-icon 2023-09-07 20:33:22 +02:00
6c3565c520 Add urgent icon
Fixes #2476
2023-09-07 19:33:56 +02:00
9bb2c01a44 clean up client.cpp 2023-09-07 13:43:59 +00:00
09873f0ed9 search for dark or light mode stylesheet
summary:
-------
This commit adds xdg-desktop-portal support to waybar. If a portal
supporting `org.freedesktop.portal.Settings` exists, then it will be
queried for the current colorscheme. This colorscheme will then be used
to prefer a `style-light.css` or `style-dark.css` over the basic
`style.css`.

technical details:
-----------------
Appearance is provided by several libraries, such as libhandy (mobile)
and libadwaita. However, waybar links to neither of these libraries. As
the amount of code required to communicate with xdg-desktop portal as a
client is rather minimal, I believe doing so is better than linking to
an additional library.

The Gio library for communicating with dbus is rather messy, Instead of
the `Portal` class containing a `Gio::Dbus::Proxy`, it extends it which
simplifies signal handling.

`Portal` then exposes its own signal, which can be listened to by waybar
to update CSS.

For a reference implementation, please see another one of my projects:
https://github.com/4e554c4c/darkman.nvim/blob/main/portal.go

test plan:
---------
If no desktop portal which provides `Settings` exists, then waybar
continues with the log line
```
[2023-09-06 14:14:37.754] [info] Unable to receive desktop appearance: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
```

Furthermore, if `style-light.css` or `style-dark.css` do not exist, then
`style.css` will still be searched for.

Waybar has been tested with both light and dark startup. E.g. if the
appearance is dark on startup the log lines
```
[2023-09-06 14:27:45.379] [info] Discovered appearance 'dark'
[2023-09-06 14:27:45.379] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/style-dark.css
[2023-09-06 14:27:45.379] [debug] Found config file: $XDG_CONFIG_HOME/waybar/style-dark.css
[2023-09-06 14:27:45.379] [info] Using CSS file /home/pounce/.config/waybar/style-dark.css
```
will be observed.
If the color then changes to light during the operation of waybar, it
will change css files:
```
[2023-09-06 14:28:17.173] [info] Received new appearance 'dark'
[2023-09-06 14:28:17.173] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/style-light.css
[2023-09-06 14:28:17.173] [debug] Found config file: $XDG_CONFIG_HOME/waybar/style-light.css
[2023-09-06 14:28:17.173] [info] Using CSS file /home/pounce/.config/waybar/style-light.css
```

Finally, tested resetting waybar and toggling style (works, and style is
only changed once).

fixes: Alexays/Waybar#1973
2023-09-06 15:19:56 +00:00
c9e1899594 refactor: deprecate instead of remove persistent_workspaces 2023-09-05 16:02:45 -05:00
b405dc436c refactor!: wlr persistent workspaces config rename 2023-09-05 16:02:22 -05:00
4a6c1269fb refactor!: sway persistent workspaces config name rename 2023-09-05 16:02:21 -05:00
44ac6b8044 refactor!: hyprland persistent workspaces config option name standardization 2023-09-05 16:02:19 -05:00
80de22a159 Merge pull request #2408 from zjeffer/hyprland/workspaces_active-only
Implement 'active_only' option and 'visible' class in hyprland/workspaces
2023-09-05 22:59:49 +02:00
04b39ea64e hyprland/workspaces: implement 'active_only' option and visible class 2023-09-05 18:22:54 +02:00
116aa5cdbd Merge pull request #2466 from maximbaz/hyprland-support-workspace-rename
hyprland/workspaces: react on renameworkspace event
2023-09-05 17:23:06 +02:00
9c49f46b01 hyprland/workspaces: react on renameworkspace event 2023-09-05 17:13:25 +02:00
f7ff005dd5 Merge pull request #2460 from xercesblue/set_urgent_segfault
modules/hyprland: Fix segfault when attempting to set_urgent on a missing workspace
2023-09-05 08:42:39 +02:00
d40ccd0da8 modules/hyprland: Fix segfault when attempting to set_urgent on a missing workspace 2023-09-04 16:57:00 -07:00
6f66af9ab9 Merge pull request #2134 from bruceblore/battery-weighted-percentage
Display battery percentage as weighted average of battery levels
2023-09-04 22:01:40 +02:00
2d27e484c7 Merge pull request #2417 from Cherser-s/sni-click-coordinate-fix
sni: fix passing relative coordinates to dbus methods
2023-09-04 22:01:04 +02:00
a77ccf4bd1 Merge pull request #2457 from khaneliman/hyprland-cleanup
Hyprland linting cleanup
2023-09-04 22:00:44 +02:00
4cb8efbecc chore: cpplint fixes hyprland classes 2023-09-03 00:18:31 -05:00
8fc4187713 refactor: replace strcpy with snprintf 2023-09-02 23:56:06 -05:00
ce076927f3 chore: cpplint fixes hyprland headers 2023-09-02 23:56:04 -05:00
8eb614f69e Merge pull request #2438 from khaneliman/hyprland-workspace-array
hyprland persistent workspace support new config declaration
2023-09-01 09:10:23 +02:00
347dd1c799 Merge pull request #2431 from zjeffer/fix/persistent-workspace-icon
hyprland/workspaces: Add "empty" icon and class
2023-09-01 09:09:32 +02:00
82b7e4ea01 Merge pull request #2414 from KosmX/add_release_v2
Release button event second attempt
2023-09-01 09:08:23 +02:00
d7d4a6c632 Merge pull request #2442 from PucklaJ/hyprland_persistent
Show workspaces on all outputs if persistent_workspaces value is empty
2023-09-01 09:06:41 +02:00
a18b41911d hyprland/workspaces: Show workspace on all outputs if an empty array is given
This behaviour is consistent with sway/workspaces and wlr/workspaces
2023-08-30 13:35:19 +02:00
52309615c1 hyprland new persistent_workspace configuration style 2023-08-29 00:11:25 -05:00
65dfabc430 sni: fix passing relative coordinates to dbus methods
Doesn't correctly handle the case with both margin and width/height being set at the same time.
2023-08-25 20:37:16 +03:00
936937ec78 store margins and global window offset in the bar object 2023-08-25 20:37:14 +03:00
e163dd8216 hyprland/workspaces: update manpage 2023-08-24 22:51:06 +02:00
06a9f98878 hyprland/workspaces: Add "empty" icon and class 2023-08-24 21:19:20 +02:00
b665843085 Merge pull request #2429 from khaneliman/hyprland-urgent
Hyprland urgent class support
2023-08-24 17:00:40 +02:00
ee4fbc58f7 hyprland add urgent ipc support 2023-08-23 12:52:29 -05:00
3081b0c576 flake lock update 2023-08-23 12:14:35 -05:00
b7a527b122 Merge pull request #2424 from asas1asas200/feat-keyboard-bindingkey 2023-08-20 09:40:36 +02:00
54a6668846 feat(keyboard-state): add binding-keys options 2023-08-20 08:33:34 +08:00
ed0f7453c9 Merge pull request #2420 from Alexays/chore-subprojects
chore: update subprojects
2023-08-18 10:39:15 +02:00
19fe929d1f chore: update subprojects 2023-08-18 09:48:03 +02:00
392e863e6d Apply formatting 2023-08-16 17:33:36 +02:00
2ff347f9a8 Add handleRelease method to release events
This commit shouldn't change the handleToggle behaviour,
it shouldn't break anything.
2023-08-16 17:14:49 +02:00
1d8331d0c5 Add release events to event map 2023-08-16 17:12:32 +02:00
718db71638 Refactor enable click condition
This shouldn't change behaviour.
2023-08-16 17:11:44 +02:00
0a28b50a8c Merge pull request #2413 from PucklaJ/bluetooth-no-controller
Add format-no-controller to bluetooth module and fix it still being visible if the format string is empty
2023-08-16 17:08:48 +02:00
70bc318a01 Fix bluetooth module still being visible if format is empty 2023-08-16 16:30:59 +02:00
22817089db Add no-controller format to bluetooth module 2023-08-16 15:34:06 +02:00
aecd80702e Merge pull request #2412 from jpalus/simpleclock-fmt-compile-fix
Fix simpleclock module compilation with recent fmt
2023-08-16 14:35:39 +02:00
abd7a0cf25 Fix simpleclock module compilation with recent fmt
both `format_` and `tooltip_format` are dynamically provided formats so
wrap them in `fmt::runtime()`
2023-08-16 14:32:48 +02:00
e30fba0b8f chore: 0.9.22 2023-08-16 13:34:05 +02:00
b5ea14c896 revert: release event 2023-08-16 13:31:24 +02:00
5b33a5917c Merge pull request #2404 from eltociear/master-1
fix: typo in taskbar.cpp
2023-08-16 08:55:33 +02:00
66b71cc857 Merge pull request #2409 from jpalus/fmt-cast-ustring-to-string 2023-08-15 22:35:46 +02:00
c8237437d2 Explicitly cast ustring to string when passing to fmt
don't rely on implicit conversion which is no longer present in fmt
10.1.0

Fixes #2403
2023-08-15 20:57:07 +02:00
57544fe694 fix: typo in taskbar.cpp
ocurred -> occurred
2023-08-15 00:45:09 +09:00
e90c66a102 chore: 0.9.21 2023-08-14 15:33:52 +02:00
db1d859881 fix: lint 2023-08-14 14:20:08 +02:00
cc961d40b3 Merge pull request #2402 from frankebel/master
docs: fix Arch repository name
2023-08-14 13:28:54 +02:00
29cebaa0a7 docs: fix Arch repository name 2023-08-14 12:42:33 +02:00
2c7bbe9852 Merge pull request #2393 from zjeffer/hyprland/fixes
Hyprland/workspaces: use named icons instead of searching by id
2023-08-14 11:46:55 +02:00
eb74623b7d Merge pull request #2399 from KosmX/click_release_action
Button release action
2023-08-14 11:46:27 +02:00
b9260575e5 Merge pull request #2401 from zjeffer/master
Updated hyprland-workspaces manpage
2023-08-14 11:23:35 +02:00
8cf676176d Updated hyprland-workspaces manpage 2023-08-14 11:17:49 +02:00
3db5673e70 register key hander 2023-08-13 18:48:23 +02:00
46f5034030 Add button release events to eventMap 2023-08-13 18:20:43 +02:00
6f7e7c5199 formatting 2023-08-10 20:37:42 +02:00
2ba11e8401 Hyprland/workspaces: use named icons instead of searching by id 2023-08-10 20:09:30 +02:00
b084bf721e Merge pull request #2377 from marshallmoats/master
Change default workspace format
2023-08-09 08:16:52 +02:00
e40860c3e9 keep id 2023-08-08 17:17:58 -05:00
2bcd0eb09f Change default workspace format 2023-08-02 16:02:50 -05:00
94c34a29c4 Merge pull request #2370 from spikespaz/nix-fix-overlay
flake: fix infrec in package overlay
2023-08-02 08:41:39 +02:00
7fb37c0069 Merge pull request #2373 from marshallmoats/master 2023-08-02 08:35:10 +02:00
ce2ede70f2 Fix logical errors, formatting error 2023-08-01 15:55:37 -05:00
b91adc9f29 flake: fix infrec in package overlay 2023-07-31 09:37:33 -07:00
86b3e456e1 Merge pull request #2341 from zjeffer/hyprland/workspaces
Persistent workspaces in hyprland/workspaces
2023-07-31 08:34:30 +02:00
1eb4684b60 Merge pull request #2367 from diederikdehaas/more-manpage-fixes
man: Fix several whitespace formatting issues
2023-07-31 08:33:09 +02:00
a3904ff039 man: Fix several whitespace formatting issues
Fix the following whitespace formatting issues:
- Indentation in scdoc source files should be done with tabs.
- Lines where there (clearly) should be a line break, need to have '++'
  at the end, but several were missing them.
- The scdoc manual (clearly) states that lines should be hard wrapped
  at 80 columns, but when line(s) are indented, that causes rendering
  issues. So lines where a line break was not clearly intended or
  clearly not intended, have been put onto 1 line to circumvent the
  rendering issue.

Link: https://lists.sr.ht/~sircmpwn/public-inbox/%3C8251560.T7Z3S40VBb%40bagend%3E
2023-07-30 17:37:30 +02:00
88828265c0 Merge pull request #2366 from zjeffer/fix/build-warnings
Fixed sway IPC compile warnings
2023-07-30 11:52:11 +02:00
600653538b Persistent workspaces in hyprland/workspaces 2023-07-30 11:47:37 +02:00
28635c1f6d Fixed sway IPC compile warnings 2023-07-30 11:43:34 +02:00
b09f6cc731 Merge pull request #2365 from diederikdehaas/manpage-fixes
Manpage fixes
2023-07-30 10:07:03 +02:00
c8910901e5 man: Make NAME-ing consistent
Tools like `apropos` and `whatis` use the NAME section to generate their
database, so make sure every manpage has it.
Also make sure they all have a brief description and make it consistent
across the manpages.
2023-07-30 10:00:02 +02:00
6b7fd36863 man/waybar-clock: Fix typo and formatting
typo: Adressed -> Addressed
formatting: Add missing spaces
2023-07-30 09:56:19 +02:00
20b091dcd8 Merge pull request #2360 from LukashonakV/ISSUE_2356 2023-07-30 01:12:40 +02:00
106535e3eb tooltip-format spaces breaks pango format
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-29 23:46:35 +03:00
d3520536c4 Merge pull request #2352 from Mr-Pine/hyprland-window-fix 2023-07-29 11:02:39 +02:00
05e5a7e5fd Document icon for hyprland/window 2023-07-29 00:35:01 +02:00
2b07dea3a6 Fix broken start behavior for hyprland/window 2023-07-29 00:30:33 +02:00
629686f760 Merge pull request #2347 from MightyPlaza/typo
hyprland/workspaces fix typo
2023-07-28 09:58:09 +02:00
c71c0fca6e fix typo 2023-07-25 14:48:20 +00:00
9207fff627 Merge pull request #2345 from LukashonakV/ISSUE_2344
Clock. Narrow seconds precision
2023-07-24 23:19:19 +02:00
dae7794bdf Clock. Narrow seconds precision
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-25 00:08:13 +03:00
c087d8c318 Merge pull request #2316 from MightyPlaza/workspaces
hyprland/workspaces improvements
2023-07-24 13:40:23 +02:00
6dfa74bd5d Merge pull request #2322 from zjeffer/master
Use C++20 by default
2023-07-24 09:27:18 +02:00
e9b29613b2 Merge pull request #2340 from LukashonakV/ISSUE_2331
time conversion between time zones
2023-07-24 09:26:02 +02:00
d01ce7d812 Rewview changes.
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-24 10:16:38 +03:00
8ce1d15885 Merge pull request #2323 from zjeffer/mediaplayer-improvements
Mediaplayer improvements
2023-07-24 08:56:46 +02:00
4d9e0ea802 time conversion between time zones
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-24 01:21:33 +03:00
2f04a49129 Merge branch 'Alexays:master' into master 2023-07-23 14:30:14 +02:00
6dc33fe88f Mediaplayer improvements 2023-07-23 13:55:25 +02:00
effad1a5c3 Merge pull request #2336 from Anakael/pr/anakael/add-high-priority-workspaces
[sway/workspaces] feat: add high-priority-named optiion
2023-07-21 17:33:10 +02:00
05efdb74f0 format 2023-07-20 22:57:33 +03:00
d3bcff31e5 add high-priority-named optiion 2023-07-20 22:56:15 +03:00
430f0e5d65 Merge pull request #2333 from LukashonakV/cava_man
cava man page
2023-07-19 21:47:33 +02:00
4dff1d4b2b cava man page
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-19 20:44:52 +03:00
56df72f61c Merge pull request #2328 from LukashonakV/ISSUE_2281
cava bump
2023-07-18 16:59:38 +02:00
8fdd456fa9 cava bump
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-18 17:51:23 +03:00
3e1176e896 fix: lint 2023-07-18 08:35:46 +02:00
52a8b1d911 Merge pull request #2234 from kris7t/offscreen-app-id
sway/window: app_id on unfocused workspaces
2023-07-18 08:32:32 +02:00
3ecd4030e3 chore: v0.9.20 2023-07-18 08:29:32 +02:00
841a004acd fix: lint 2023-07-18 08:28:19 +02:00
839975c348 Merge pull request #2318 from calvinchd/hyprland-window-remove-empty-css
hyprland/window remove duplicate empty css
2023-07-18 08:22:27 +02:00
185aa104b0 Merge pull request #2326 from czM1K3/master
hyprland/language: Differentiating keyboard layout variants
2023-07-18 08:21:52 +02:00
24d56023fd last fixes 2023-07-17 22:38:58 +00:00
d3e7a8c797 Merge branch 'Alexays:master' into workspaces 2023-07-17 22:38:13 +00:00
b2279c9565 Differencing keyboard layout variant for hyprland/language 2023-07-17 22:20:50 +02:00
52906407af Merge pull request #3 from zjeffer/pr-fixes
Some more small improvements
2023-07-17 14:27:38 +00:00
2721e19ee6 small improvements 2023-07-17 16:22:59 +02:00
388912d4a7 Merge pull request #2324 from xytovl/fix-crash-on-resume 2023-07-17 08:26:53 +02:00
f62b3d0e9d Ensure signal is disconnected in destructor 2023-07-16 23:29:28 +02:00
2d0fdaeec6 special fix 2023-07-16 18:22:14 +00:00
b9348180f5 Merge branch 'Alexays:master' into workspaces 2023-07-16 18:21:36 +00:00
1e2b9cb5ed Merge pull request #2306 from stefonarch/patch-1
Fix wrong name for {name}
2023-07-16 18:21:00 +02:00
62702a4878 fixed lint 2023-07-16 16:00:26 +02:00
c85738574c Use C++20 by default 2023-07-16 16:00:26 +02:00
96a8e5df83 Merge branch 'Alexays:master' into workspaces 2023-07-16 13:19:24 +00:00
85b4ff4f81 Merge pull request #2321 from calvinchd/hyprland-runtime-err 2023-07-16 15:10:03 +02:00
0f6eff1f20 hyprland: fix json parser runtime err from socket read ending early 2023-07-16 22:18:27 +10:00
7a5e702334 Merge pull request #2317 from m4rch3n1ng/backlight-percent 2023-07-16 09:34:47 +02:00
8687ed2068 Update man for hyprland/window to replace #window.empty with window#waybar.empty #window 2023-07-16 16:41:50 +10:00
2be0e966e1 hyprland/window: remove .empty css class for #window 2023-07-16 16:40:54 +10:00
may
facb53e81f backlight: do not convert percent to string in fmt 2023-07-16 04:14:43 +02:00
2bfc0e1da6 moves createWorkspace to update() 2023-07-16 01:49:46 +00:00
6d24b22b21 moves createWorkspace to update() 2023-07-16 01:43:54 +00:00
5f0fa71f32 moves createWorkspace to update() 2023-07-16 01:43:25 +00:00
4f81e55e41 workspaces.hpp 2023-07-16 01:20:30 +00:00
ca0122c3cb workspaces.cpp 2023-07-16 01:18:41 +00:00
7200b16520 documentation 2023-07-16 01:02:39 +00:00
e488daae16 Merge pull request #2 from zjeffer/pr-fixes
use IPC for click events, clang-tidy fixes
2023-07-15 22:18:24 +00:00
f3df15650a use IPC for click events, clang-tidy fixes 2023-07-15 23:48:12 +02:00
f8a9a970b2 removes "sort-by-number" 2023-07-15 18:43:46 +00:00
75e21c4853 Update waybar-hyprland-workspaces.5.scd 2023-07-15 18:36:55 +00:00
495b63d7dc workspaces.hpp 2023-07-15 17:44:57 +00:00
52983c7188 workspaces.cpp 2023-07-15 17:43:22 +00:00
2211a79840 Merge pull request #2308 from gardenappl/hidden-fix
hyprland/window: rename .hidden to .swallowing (and fix grouped windows)
2023-07-12 18:13:50 +02:00
daca57129f hyprland/window: rename .hidden to .swallowing (and fix grouped windows) 2023-07-12 19:01:45 +03:00
19c7c0763f Merge pull request #2307 from gardenappl/hidden-fix
hyprland/window: Fix overlap with .hidden class from default style
2023-07-12 17:27:37 +02:00
14c6550593 hyprland/window: Fix overlap with .hidden class from default style 2023-07-12 17:56:12 +03:00
7aae93e7ed Fix wrong name for {name} 2023-07-12 16:31:58 +02:00
dffba78401 Merge pull request #2303 from Mr-Pine/hyprland-window-icon 2023-07-11 08:08:20 +02:00
a8a1a4985f Add removed secondary identifier
(class for xwayland under sway)
2023-07-10 23:48:18 +02:00
31683d9e2a Implemented AAppIconLabel for sway/window 2023-07-10 22:55:46 +02:00
00e143d47e Introducce AAppIconLabel class
Implemented for hyprland
2023-07-10 22:50:58 +02:00
6e9ba3fc01 Fix spacing if icon is false 2023-07-10 22:26:02 +02:00
a373f6b654 Icon working 2023-07-10 22:02:03 +02:00
91bd28d410 Merge pull request #2294 from Mr-Pine/hyprland-window-data
`hyprland/window` expose more data
2023-07-09 10:18:26 +02:00
acde076913 Merge pull request #2288 from LukashonakV/arch_cava
Arch CI cava
2023-07-09 10:17:55 +02:00
f5655526d0 Merge pull request #2296 from m-bdf/clock-tz-changes 2023-07-09 04:22:15 +02:00
56f956ff90 clock: handle timezone changes (again) 2023-07-09 01:44:39 +02:00
f97c1c7136 remove getWindowData 2023-07-08 23:22:29 +02:00
9ee883ee1b No dashes is format arg name 2023-07-08 23:11:11 +02:00
1887512ba1 Update scd 2023-07-08 22:40:16 +02:00
2ae13c4092 consitent naming 2023-07-08 22:40:16 +02:00
c5f1771375 Use already existing queryActiveWorkspace() 2023-07-08 22:40:16 +02:00
c4bace504c Separate query and struct 2023-07-08 22:40:16 +02:00
3bfeed31bc Merge pull request #2293 from sigboe/master 2023-07-08 21:47:04 +02:00
d774de6c46 fix, default to true, sway/workspaces: warp-on-scroll 2023-07-08 21:32:19 +02:00
b20041d85d cava dependencies 2023-07-08 08:41:37 +00:00
e4900db9a2 Merge pull request #2286 from calvinchd/hyprland-window-noinfo 2023-07-06 08:24:11 +02:00
e2bfa5e019 hyprland/window: fix no info with separate-outputs=true 2023-07-06 11:01:24 +10:00
423d8495e4 Merge pull request #2284 from jbeich/dbus 2023-07-05 20:17:51 +02:00
1fb2b8efd5 fix(util): don't abort modules from SleeperThread after 3c9cbc99d7
[warning] module sway/workspaces: Disabling module "sway/workspaces", Unable to connect to the SYSTEM Bus!...
[warning] module sway/mode: Disabling module "sway/mode", Unable to connect to the SYSTEM Bus!...
[warning] module sway/scratchpad: Disabling module "sway/scratchpad", Unable to connect to the SYSTEM Bus!...
[warning] module custom/media: Disabling module "custom/media", Unable to connect to the SYSTEM Bus!...
[warning] module sway/window: Disabling module "sway/window", Unable to connect to the SYSTEM Bus!...
[warning] module cpu: Disabling module "cpu", Unable to connect to the SYSTEM Bus!...
[warning] module memory: Disabling module "memory", Unable to connect to the SYSTEM Bus!...
[warning] module temperature: Disabling module "temperature", Unable to connect to the SYSTEM Bus!...
[warning] module sway/language: Disabling module "sway/language", Unable to connect to the SYSTEM Bus!...
[warning] module battery: Disabling module "battery", Unable to connect to the SYSTEM Bus!...
[warning] module battery#bat2: Disabling module "battery#bat2", Unable to connect to the SYSTEM Bus!...
2023-07-05 17:47:24 +00:00
3299d4a25c Merge pull request #2270 from gardenappl/hypr-backend
hyprland/window: Add .hidden CSS class, account for hidden & fullscreen windows
2023-07-05 08:14:49 +02:00
e125bbeb4d hyprland/window: properly check visibility for .floating class 2023-07-05 03:43:03 +03:00
55c59253d6 Update man pages 2023-07-05 03:15:59 +03:00
e7deab92c7 Merge pull request #2282 from zjeffer/fix/build-warnings
Fixed build warnings
2023-07-04 23:09:13 +02:00
d21f29cb14 Fixed build warnings 2023-07-04 23:05:26 +02:00
d8a808f76c chore: 0.9.19 2023-07-04 23:03:50 +02:00
5ef6636237 Merge pull request #2265 from tengyifei/master
Partially revert 3af1853260 to fix use-after-free
2023-07-04 22:59:45 +02:00
fc632f50ec fix: lint 2023-07-04 22:52:24 +02:00
31e4c9023e Merge pull request #1872 from HarHarLinks/patch-1
Add output parameter format to manpage
2023-07-04 22:46:06 +02:00
3e1c341933 Merge branch 'master' into patch-1 2023-07-04 22:45:15 +02:00
0d1016d4d2 Merge pull request #2203 from rodrgz/mprisImprovement
mpris: dynamic tag ordering and separator customization
2023-07-04 22:44:21 +02:00
12725f4418 Merge pull request #2220 from sigboe/warp-on-scroll-toggle
sway/workspaces: setting to not warp to window when scrolling
2023-07-04 22:42:53 +02:00
5c64d034a2 Merge pull request #2010 from chayleaf/improve-flake
improve nix dev shell; override the nixpkgs waybar
2023-07-04 22:40:52 +02:00
14fa9cf7b7 Merge pull request #2128 from Alan-Kuan/image-tooltip
Image tooltip
2023-07-04 22:40:04 +02:00
6c196b8f8d fix: lint 2023-07-04 22:35:27 +02:00
18d6dfea88 feat(man): start_hidden 2023-07-04 22:35:15 +02:00
d2eb8eb9fc Merge pull request #2175 from maqrrr/start_hidden
Add a new start_hidden flag
2023-07-04 22:33:33 +02:00
65f73d3e95 Merge pull request #2269 from Arcus92/master
wlr/taskbar: add support for rewrite rules
2023-07-04 22:31:37 +02:00
265b4edb2e Merge pull request #2276 from skligys/fix_mpris_ui_spamming
Stop MPRIS module from updating every ~20ms
2023-07-04 22:29:48 +02:00
18f5af835f Merge pull request #2280 from zjeffer/fix/hyprland/workspaces 2023-07-04 19:58:07 +02:00
7ef80d563b Formatting fixes 2023-07-04 19:48:04 +02:00
d3be9a7363 Fix rare segfault when destroying workspace 2023-07-04 19:40:43 +02:00
5f29e5a5e8 Merge pull request #2279 from LukashonakV/Catch_bump 2023-07-04 18:37:30 +02:00
cf4d58f30a Catch2 bump 2023-07-04 11:30:44 -04:00
bb61461aad Merge pull request #2278 from Anakael/pr/anakael/hyprland-workspaces 2023-07-04 08:02:45 +02:00
c91c8bbc45 Merge pull request #2277 from Aparicio99/fix_icon_theme_segfault 2023-07-04 08:01:45 +02:00
f26a125d15 format 2023-07-04 01:26:16 +03:00
de626dcbbc format 2023-07-04 01:24:34 +03:00
c9b963e82b fix segfault 2023-07-04 01:17:26 +03:00
a1cd0acac5 Fix random segfault on GTK icon functions
The segfaults were happening on GTK icon theme functions, which are
called via the C++ interface functions such as Gtk::IconTheme::has_icon.

There are multiple modules and threads using this functions on the default
icon theme by calling Gtk::IconTheme::get_default(), which returns the same
object for all callers, and was causing concurrent access to the same internal
data structures on the GTK lib. Even a seemingly read-only function such as
has_icon can cause writes due to the internal icon cache being updated.

To avoid this issues, a program wide global mutex must be used to ensure
a single thread is accessing the default icon theme instance.

This commit implements wrappers for the existing IconTheme function calls,
ensuring the global lock is held while calling the underling GTK functions.
2023-07-03 22:32:24 +01:00
c2f9d889f4 Stop MPRIS module from updating every ~20ms as onPlayerMetadata(), onPlayerPlay()
callbacks get triggered without regard for update interval.
2023-07-03 13:52:57 -07:00
cdece498c1 hyprland/window: .solo class accounts for hidden & fullscreen windows 2023-07-02 20:58:42 +03:00
58bdc6a41c fix spaces in waybar-wlr-taskbar.5.scd 2023-07-02 12:51:54 +02:00
c55cd82b39 wlr/taskbar: add support for rewrite rules 2023-07-02 12:23:36 +02:00
91588fb8bb Merge pull request #2212 from evyatark2/wpscroll
wireplumber: Support for scrolling
2023-07-02 11:46:56 +02:00
6b9600fecd Merge pull request #2267 from korylprince/reverse-scrolling
Don't apply reverse scrolling to mice wheels
2023-07-02 11:45:44 +02:00
0bfb29789c Merge pull request #2268 from zjeffer/hyprland/workspaces
Fixes for hyprland/workspaces
2023-07-02 11:45:09 +02:00
f6a62e258e fixes for hyprland/workspaces 2023-07-01 18:53:17 +02:00
1ba05d1ffa add reverse-mouse-scrolling to configure mouse wheel reverse scrolling 2023-07-01 10:35:37 -05:00
7a01143359 ignore reverse-scrolling from mouse wheel 2023-07-01 10:33:55 -05:00
35496f461f fix regression from #2232: reverse-scrolling was not applied to
GTK_SCROLL_SMOOTH events
2023-07-01 10:33:55 -05:00
b9cd0287f4 fix: typo 2023-07-01 11:12:46 +02:00
9d741f89e2 fix: lint 2023-07-01 11:12:14 +02:00
cc4370f1b2 fix: build 2023-07-01 11:08:31 +02:00
85854c71d6 Merge pull request #2219 from xytovl/wake_threads_on_resume
Wake all sleeping threads when leaving suspend
2023-07-01 11:02:13 +02:00
6ed550117c Merge pull request #2237 from LukashonakV/Gentoo_CI
Refresh Gentoo docker
2023-07-01 10:57:33 +02:00
15fe85d18d Merge pull request #2264 from Anakael/pr/anakael/hyprland-workspaces
feat: hyprland/workspaces
2023-07-01 10:55:24 +02:00
b62e5eb822 Merge pull request #2266 from zjeffer/master
Fixed some build warnings
2023-07-01 10:53:24 +02:00
25c2aaabcb Fixed build warnings 2023-07-01 10:12:24 +02:00
cd49eef229 Partially revert 3af1853260 to fix use-after-free
After upgrading to the latest release of Waybar the bar will crash
whenever I close the laptop lid. After some debugging I believe it is
because the watching added by watch_name is not being correctly canceled
using unwatch_name. After the Tray object and Host object are destroyed,
additional callbacks will become use-after-free.

Looks like commit 3af1853260 removed the
unwatch_name. I'm not sure why it did that, but it seemed dangerous.

Additionally, bus_name_id_ is created by own_name. According to that
function's documentation, the correct inverse operation is unown_name.
2023-06-30 23:25:24 -07:00
4f9fbbfa54 fix format 2023-07-01 02:25:15 +03:00
0b602632f2 return catch2 2023-07-01 02:23:37 +03:00
dbc7471f83 add docs 2023-07-01 02:13:36 +03:00
887c44bf68 finish MVP 2023-07-01 00:18:57 +03:00
33236c222f save 2023-06-28 02:52:01 +03:00
4116490535 Merge pull request #2256 from luttermann/master
Add output port (display) of workspace to template function of sway/workspace
2023-06-27 13:50:54 +02:00
08e18387c9 Add output port of workspace to template 2023-06-27 13:41:42 +02:00
0fff38c751 Merge pull request #2258 from Anakael/pr/anakael/hide-empty-taskbar
[wrl/taskbare] fix: use empty class for empty taskbar
2023-06-27 08:58:54 +02:00
afc489869a fix format 2023-06-27 00:18:49 +03:00
ce4da59f34 finish 2023-06-27 00:07:40 +03:00
43434254e0 Add output port of workspace to template 2023-06-26 11:01:50 +02:00
66ce74d29b mpris: Rename dynamic-priority to dynamic-importance-order keeping backward compatibility 2023-06-22 02:13:44 -03:00
77a8420aaf mpris: Add dynamic-order and dynamic-separator
This commit allows better handling of ordering and exclusion of the tags in Dynamics tags.
It also becomes possible to choose the separator between the tags.
2023-06-22 02:13:34 -03:00
b0f89f2bc1 Merge pull request #2241 from yangyingchao/master
support multiple items in hwmon-path of temperature module
2023-06-20 13:22:36 +02:00
7cda2dfd1a Merge pull request #2245 from gardenappl/main
hyprland/window: Add CSS customization similar to sway/window
2023-06-20 13:22:12 +02:00
238cfa9547 Merge pull request #2247 from gardenappl/hypr-backend
More robust Hyprland backend
2023-06-20 13:21:34 +02:00
b163b21ace More robust Hyprland backend 2023-06-20 13:36:48 +03:00
30c4f08773 hyprland/window: Correct application of .solo class 2023-06-20 03:54:02 +03:00
fd7c2a2012 hyprland/language: Show language on startup 2023-06-20 00:43:33 +03:00
4f14ce3285 hyprland/window: add .floating and .fullscreen CSS classes 2023-06-20 00:42:19 +03:00
e233022d1a hyprland/window: Rework, add .empty, .solo and .<app_id> CSS classes 2023-06-19 23:44:20 +03:00
e403c3b71b support multiple items in hwmon-path of temperature module
So user can share configuration file among different machines with different hardware
configurations.
2023-06-17 11:33:14 +08:00
d367b7e1d6 Merge pull request #2229 from LukashonakV/Upower_nativePath
Upower native-path filter
2023-06-16 15:38:58 +02:00
038644f8d9 Merge pull request #2238 from LukashonakV/ISSUE#2204
Issue#2204
2023-06-16 15:38:20 +02:00
d650c597f9 Renew clock man page
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-15 16:36:33 +03:00
5196009656 Refresh Gentoo docker
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-15 13:58:33 +03:00
4d8515930f Use local TZ, when user sets blank TZ in config
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-13 23:32:28 +03:00
192cea97f2 Upower man
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-13 18:44:29 +03:00
5bfdbf116d sway/window: app_id on unfocused workspaces
If the unfocused workspace has a single window, use window-specific
styling when offscreen-css is enabled.
2023-06-13 01:52:13 +02:00
83f3c2321e Merge pull request #2231 from RobertMueller2/appid-fix
sway/window: fix appid style not cleared
2023-06-12 15:40:56 +02:00
dff0583c12 Merge pull request #2232 from robertgzr/reverse-scroll
Lift reverse-scrolling option into AModule
2023-06-12 08:54:38 +02:00
73c7e54535 pulseaudio: document reverse-scrolling option
Signed-off-by: Robert Günzler <r@gnzler.io>
2023-06-12 14:08:22 +09:00
0f8c156f24 Lift reverse-scrolling option into AModule
The option is generally useful when scrolling is used, when configuring
input devices to use "natural scroll direction".
Both backlight and pulseaudio were using different implementations, this
unifies and documents them.

Signed-off-by: Robert Günzler <r@gnzler.io>
2023-06-12 14:08:18 +09:00
fff4509723 sway/window: fix appid style not cleared (#2227)
Probably a rebase error during development of #1419. The code block now
removed was not supposed to be there anymore.
2023-06-11 08:41:20 +02:00
17af49d421 Upower native-path filter
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-09 18:22:24 +03:00
9f38631c7f Merge pull request #2223 from Anakael/pr/shchemel/fix-class-priority 2023-06-09 08:36:34 +02:00
62f4125927 change order 2023-06-08 23:31:14 +03:00
a67e692d4a sway: warp-on-scroll toggle 2023-06-07 15:49:11 +02:00
3c9cbc99d7 Wake all sleeping threads when leaving suspend
std::condition_variable::wait_for does not count time spent in sleep
mode, resulting in longer than expected waits.
2023-06-07 10:17:42 +02:00
c5379fa52d Merge pull request #2218 from LukashonakV/Wdeprecated
deprecated: implicit capture of 'this' via '[=]'
2023-06-06 22:56:27 +02:00
070110af0c Merge pull request #2217 from LukashonakV/g_bus_unwatch_name
Tray module causes: Invalid id passed to g_bus_unwatch_name()
2023-06-06 22:37:46 +02:00
6bf5b15c13 deprecated: implicit capture of 'this' via '[=]'
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-06 23:31:12 +03:00
a9779c2aa2 Happy Linter
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-06 23:06:11 +03:00
3af1853260 Tray module cause error g_bus_unwatch_name()
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-06 23:02:36 +03:00
d638610db1 Merge pull request #2216 from LukashonakV/small_fixies
Small performance fixies
2023-06-06 13:03:52 +02:00
87023c39f8 Small performance fixies
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-06 13:58:05 +03:00
e96610e31a Use consistent tabbing 2023-06-06 12:01:25 +03:00
d61b1d54de Document new wireplumber module functionality 2023-06-06 11:44:17 +03:00
e397f568b7 Round volume instead of truncating it 2023-06-06 11:42:31 +03:00
d22fd3bbd1 Use a minimum step as provided by wireplubmer; Default step to 1 2023-06-06 11:42:02 +03:00
75990c2867 Fix linting 2023-06-05 22:23:46 +03:00
88a1a702b4 wireplumber: Support for scrolling 2023-06-05 22:03:46 +03:00
24407dbf4a Merge pull request #2196 from calvinchd/hyprland-window-empty-css
[hyprland/window] Add css class for empty window name
2023-06-05 16:48:59 +02:00
108285e9ac Merge pull request #2210 from D3vil0p3r/patch-1
Fixing 'incomplete type error' during building
2023-06-05 16:30:00 +02:00
b728a37b6d Fixing 'incomplete type error' during building
Fixing errors during the building due to missing library after latest GCC updates.
2023-06-05 16:28:32 +02:00
938a93a0d7 Merge pull request #2209 from Matias-Hall/river_window_tooltip 2023-06-05 12:39:38 +02:00
ff6f727631 river/window: Add tooltip. 2023-06-05 18:29:19 +08:00
84077e0253 Merge pull request #2207 from dejor/dwl-module 2023-06-04 18:39:03 +02:00
d2787cc2d8 fix: typo to avoid null pointer 2023-06-04 12:45:33 +02:00
17a56aa4f7 hyprland/window: use empty() for empty window name check 2023-06-03 12:29:36 +10:00
ca52892ab9 Merge pull request #2200 from Visne/patch-1 2023-06-01 22:52:54 +02:00
655bc8f215 Fix broken link 2023-06-01 22:08:54 +02:00
a3912436be hyprland/window: add css class for empty label 2023-06-01 21:38:27 +10:00
47193a3d2f chore: v0.9.18 2023-05-29 09:25:01 +02:00
097cbc0c53 fix: lint 2023-05-29 09:24:33 +02:00
13a9c4a08b Merge pull request #2185 from xdavidel/dwl-module
Update to new ipc version
2023-05-29 09:16:22 +02:00
ebba529682 Apply clang-format 2023-05-25 01:29:28 +03:00
b97b0ae605 Fix linter complains 2023-05-25 01:25:55 +03:00
7e9bfc504c Update to new ipc version 2023-05-25 00:27:50 +03:00
7b0d2e8043 Merge pull request #2184 from lfos/fix-battery-segfault
Fix SEGFAULT in battery module
2023-05-22 16:19:13 +02:00
75eacb95ef Fix SEGFAULT in battery module
In waybar::modules::Battery::~Battery(), store a copy of the batteries_
iterator before calling erase(), as erase() invalidates the iterator.

Prior to this change, disconnecting outputs resulted in a SEGFAULT when
using the battery module; e.g.,

    [debug] Received SIGCHLD in signalThread
    [debug] Cmd exited with code 0
    [debug] Received SIGCHLD in signalThread
    [debug] Cmd exited with code 0
    [debug] Received SIGCHLD in signalThread
    [debug] Cmd exited with code 0
    [debug] Output removed: AU Optronics 0x2336
    [info] Bar configured (width: 1280, height: 25) for output: eDP-1
    [info] Bar configured (width: 1280, height: 25) for output: eDP-1
    zsh: segmentation fault (core dumped)  ./build/waybar -l trace

Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>
2023-05-22 10:16:30 -04:00
2b24b16023 Merge pull request #2182 from cptpcrd/fd-closing 2023-05-22 07:40:14 +02:00
5cbbfd5c8a Close pipe if fork() fails when spawning processes
Prevents potential file descriptor leakage, albeit in a bit of an edge
case.
2023-05-21 12:15:49 -04:00
6163be687d Open network module eventfd as close-on-exec
Ensures that it is not leaked to child processes.
2023-05-21 12:13:17 -04:00
df65cab17a Open command pipes as close-on-exec
Avoids a race where the pipe could be inherited by another process
spawning at about the same time. If the other process didn't exit
quickly (e.g. if it was a custom script that did its own looping), it
would keep the write end of the pipe open, and so reading from the pipe
to try to get the command's output would block.

This bug manifested as some custom modules randomly not appearing in the
bar, requiring a reload to fix. The custom script had run and exited,
but the pipe had been inherited by another process, and the thread that
updated the module's output was blocked trying to read from it.
2023-05-21 12:10:44 -04:00
339bea1213 Add a new start_hidden bool 2023-05-15 07:01:00 -04:00
7b704071ff Merge pull request #2171 from FintasticMan/fix_mpris_man
mpris: Fix incorrect format replacement names
2023-05-13 23:25:30 +02:00
5748e56aeb mpris: Fix incorrect format replacement names 2023-05-13 21:45:29 +02:00
5b29119dab Merge pull request #2170 from FintasticMan/hide_mpris_if_empty
mpris: Hide label if empty
2023-05-13 18:26:12 +02:00
4bc30e040f mpris: Hide label if empty 2023-05-10 13:43:43 +02:00
919ad0a8bb Merge pull request #2156 from theRealCarneiro/master
Add persistent format-icon to wlr/workspaces
2023-05-05 14:05:32 +02:00
5df43be11f add persistent format-icon 2023-05-05 08:52:37 -03:00
56fa6b6afc Merge pull request #2153 from MonstrousOgre/master 2023-05-04 22:21:13 +02:00
c04485a5d0 separate css class for empty workspaces 2023-05-05 00:09:32 +05:30
b06953757e Merge pull request #2144 from LukashonakV/cava_bump 2023-04-29 00:13:25 +02:00
f5ef13c7f1 Gentoo docker. Add iniparser
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-04-28 15:46:51 +03:00
8c83af75a1 happy linter
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-04-28 15:38:34 +03:00
e253c34cd4 cava bump
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-04-28 13:38:35 +03:00
e4faf252b2 Merge pull request #2140 from 257/master 2023-04-26 21:35:46 +02:00
3da3732cc9 network: detect if link is p2p and use local addr
without this we endup with peer's addr

Signed-off-by: Paymon MARANDI <darwinskernel@gmail.com>
2023-04-26 13:52:17 -04:00
757f20fc04 Merge pull request #2135 from eneshecan/master 2023-04-23 13:47:28 +02:00
f00602058c Fix misinterpreting return value of getaddrinfo call which caused an early return for Hyprland language 2023-04-23 13:31:02 +02:00
bad6cfae6f Added option to calculate battery percentage as total_energy * 100 / total_energy_full 2023-04-22 23:43:04 -07:00
9389c8d854 chore: update manual of the image modle 2023-04-21 16:51:04 +08:00
6a17139423 feat: tooltip for image module 2023-04-21 16:38:21 +08:00
a9a2223469 fix: lint 2023-04-17 09:09:13 +02:00
33d1ee413f fix: typo 2023-04-17 09:07:59 +02:00
0b4c1cb877 Merge pull request #1950 from tleydxdy/shironeko 2023-04-17 09:06:43 +02:00
5e5569bb10 Merge pull request #1858 from uncomfyhalomacro/replace-gethostbyname-getaddrinfo 2023-04-17 09:05:35 +02:00
272d672953 fix: add missing man 2023-04-17 09:03:01 +02:00
ede1d25440 fix: lint 2023-04-17 09:01:14 +02:00
8be889c5aa Merge pull request #2103 from xdavidel/dwl-module
Add DWL tags module
2023-04-17 09:01:00 +02:00
b1e3347fca Merge pull request #2089 from MonstrousOgre/master 2023-04-17 08:59:22 +02:00
da2163ae41 Merge pull request #2092 from chayleaf/mpris-fix-non-dynamic-tag-escapes 2023-04-17 08:58:40 +02:00
1d7d1a8fe8 Merge pull request #2108 from yeheng282/backlight-fix 2023-04-17 08:58:03 +02:00
7d20034067 Merge pull request #2095 from alex-courtis/2094-pulseaudio-states 2023-04-17 08:56:26 +02:00
8aafe817bf Merge pull request #2102 from LukashonakV/Cava 2023-04-16 18:06:53 +02:00
a5607b66ca Cava module
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-04-15 02:36:15 +03:00
61648c55d9 Merge pull request #2113 from LukashonakV/ISSUE#2073 2023-04-13 16:29:34 +02:00
4dff1b91fe Merge branch 'Alexays:master' into dwl-module 2023-04-13 17:18:27 +03:00
1368ba64b5 Fix segfault in destructor 2023-04-13 17:16:37 +03:00
6de3b58d6a ISSUE#2073
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-04-13 17:16:03 +03:00
731eaeb0be Addapt to DWL new tag system
- tagscount is being used instead of tag array
2023-04-13 03:58:57 +03:00
022c9abad4 backlight: support tooltip 2023-04-11 21:01:02 +08:00
a46b8a0109 Merge pull request #2105 from skylar779/master
Made use of node_id_
2023-04-11 11:12:38 +02:00
3b2dfeec01 Made use of node_id_
Checking against names for volume changes seems a bit weird to me and
also didn't really work, so I've made use of node_id_ to check against
this instead and also fixed an issue, where the volume update would
refuse to do its thing despite it being the same id that was used on launch.
2023-04-11 10:51:25 +02:00
e62d339b57 Merge pull request #2104 from numas13/master 2023-04-11 07:44:52 +02:00
18a2b90fc0 fix: generate wireplumber module man page 2023-04-11 08:17:45 +03:00
60cdf10e64 Add DWL tags module 2023-04-11 04:50:21 +03:00
51f0fc6b72 #2094 pulseaudio apply states 2023-04-07 14:19:45 +10:00
6f3a27905d preventing persistent_workspaces and all-outputs from being used together 2023-04-06 12:14:44 +05:30
659fea07ee mpris: fix non-dynamic tags not being html escaped 2023-04-06 13:24:28 +07:00
bd908f6d97 Merge pull request #2090 from chayleaf/mpris-css-fix 2023-04-06 07:26:34 +02:00
cb82326b22 mpris: fix css class application
apply styles to label rather than event_box (fixes play/pause state and
per-player selectors)
2023-04-06 04:50:32 +07:00
33c4964187 replacing spdlog::info with spdlog::debug 2023-04-06 00:34:52 +05:30
3d980f92a3 fix: build 2023-04-03 10:59:29 +02:00
626a1f58be fix: build 2023-04-03 10:51:36 +02:00
1445dc4151 fix: lint 2023-04-03 10:06:01 +02:00
a6084ea7e6 Merge pull request #2068 from TheRealLorenz/master 2023-04-03 09:44:04 +02:00
60467ad7f2 Merge pull request #2064 from en3wton/hyprland-language-format-replacements 2023-04-03 09:43:28 +02:00
ef99b0226c Merge pull request #1932 from ldelossa/wlr-taskbar-sort-app-id 2023-04-03 09:42:19 +02:00
60e0584d16 fix: lint 2023-04-03 09:41:24 +02:00
ba6faa7859 Merge pull request #2011 from chayleaf/improve-mpris 2023-04-03 09:40:01 +02:00
02b3c125a1 fix: init optional to null 2023-04-03 09:38:12 +02:00
20a8039a25 Merge pull request #2080 from cdump/master 2023-03-31 19:17:56 +02:00
ffeef7f40f modules/clock: fix calendar shift in months with 31 days 2023-03-31 20:07:59 +03:00
0cfd1c7094 mpris: don't put ellipsis after whitespace 2023-03-31 19:54:44 +07:00
e5524d5059 mpris: switch base class from AModule to ALabel 2023-03-31 19:54:39 +07:00
774d8880cd mpris: fix potentially invalid seconds count on >1h media 2023-03-31 19:54:39 +07:00
a301b8c4cd mpris: update docs 2023-03-31 19:54:27 +07:00
5383f7bd56 mpris: add unicode support; add position tag 2023-03-31 19:54:20 +07:00
a53c97f7f6 mpris: add tooltip and length limits 2023-03-31 19:53:53 +07:00
9fd2703cb9 Merge pull request #2077 from lilydjwg/master 2023-03-30 20:45:17 +02:00
918de59988 custom module: free memory returned by libc's getline 2023-03-29 21:18:13 +08:00
4b27385da2 Update manpage for sway/window module 2023-03-25 17:41:09 +01:00
f557697e92 Rewrite entire label in sway/window module
Closes #1742
2023-03-25 17:37:49 +01:00
63525ec956 Rename function name 2023-03-25 17:33:01 +01:00
5791a6abc6 Reading persistent workspaces 2023-03-24 23:11:47 +05:30
bbcfb5e138 remove use of new on Layout 2023-03-21 19:30:35 +00:00
4ab4ff790e add more format replacements for hyprland/language 2023-03-19 15:12:11 +00:00
473eb0982b Merge pull request #2053 from paul-ri/exlude-in-array 2023-03-13 11:04:25 +01:00
fa9f3a6dc5 make:Add phony 'test' rule 2023-03-13 00:50:19 +00:00
c26849217e test:Add test for output config with multiple exclusion/wildcard 2023-03-13 00:49:18 +00:00
90206f55be config:output:Allow multiple exclusions & wildcard
Covers the use case where needing to exclude more than 1 output but
still include all other displays.

e.g. I have 3 monitors: laptop + HD + 4K; and 3 bar types:
- The main bar is on the laptop. `output: "laptop-monitor-id"`
- The 4K has a specific waybar bar-1 configuration. `output: "4K-monitor-id"`
- I want all other displays (3rd HD monitor / any HDMI output when presenting)
  to have a plain bar: `output: ["!laptop-monitor-id", "!4k-monitor-id", "*"]`
2023-03-13 00:44:07 +00:00
9a0dbd555d Merge pull request #2049 from 2e0byo/lint 2023-03-08 15:46:41 +01:00
a9015c7c98 refactor: make linter happy. 2023-03-08 14:35:07 +00:00
5b6e9d4e34 Merge pull request #2048 from LDAP/patch-1 2023-03-08 15:29:17 +01:00
8ccf00f0fe Wireplumber: Free the default node name
The `default_node_name_` is reassigned without calling `g_free` on the old string.
2023-03-08 15:21:52 +01:00
823c13a8c0 Merge pull request #2046 from 2e0byo/fix/mpd 2023-03-07 18:12:40 +01:00
3c96881a59 fix: mpd bug paused with no song. 2023-03-07 16:48:05 +00:00
b34d325a71 Merge pull request #2037 from LukashonakV/Happy_clang
Happy clang
2023-03-02 19:42:38 +01:00
3bda22da72 Merge pull request #1589 from qubidt/module-group-orientation
group module: configurable orientation
2023-03-02 19:42:22 +01:00
61a6c00c02 Happy clang 2023-03-02 16:57:32 +03:00
39bc54e3ad Merge pull request #2036 from LukashonakV/Clock_TZ_try_catch 2023-03-02 08:48:56 +01:00
4cb7e55a91 ISSUE #878. Try catch Clock timezones
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-03-02 10:10:34 +03:00
43862ceb34 ISSUE #878. Try catch Clock timezones 2023-03-02 10:07:10 +03:00
f29a400c97 Merge pull request #2035 from LukashonakV/AModule_forceEvents 2023-03-01 23:24:18 +01:00
ce16e029ed Issue #2030. AModule enable_click & enable_scroll
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-03-01 23:39:36 +03:00
79eb2f5bc1 wlr-taskbar: allow sorting by app_id
some users (maybe only myself) may want to sort the task bar by app_id
which then places occurrences of the same task next to each other.

Signed-off-by: Louis DeLosSantos <louis.delos@gmail.com>
2023-03-01 12:16:28 +00:00
b7e6a2dc25 Merge pull request #2034 from pascal-huber/master 2023-03-01 11:06:27 +01:00
23f39938fb Revert "feat(sway): add workspace css class"
This reverts commit a10464d9bb.
2023-03-01 10:55:15 +01:00
8cc8820369 Merge pull request #2017 from pascal-huber/master 2023-03-01 09:43:44 +01:00
c9c8b09e3f Merge pull request #1991 from alex-courtis/add-river-layout 2023-03-01 09:42:39 +01:00
fb1f550c1a Merge pull request #2019 from LukashonakV/ISSUE#1977 2023-03-01 09:38:28 +01:00
e25a7c9719 ISSUE#1977. AModule implements module actions call
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-02-28 15:32:28 +03:00
09142fa322 Merge pull request #2025 from ElyesH/master 2023-02-25 10:49:59 +01:00
1af25094b7 Fix some typos
Signed-off-by: Elyes Haouas <ehaouas@noos.fr>
2023-02-25 09:55:04 +01:00
0d99d38089 modules/network.cpp: Remove repeated "the"
Signed-off-by: Elyes Haouas <ehaouas@noos.fr>
2023-02-25 09:51:40 +01:00
a10464d9bb feat(sway): add workspace css class 2023-02-18 20:31:12 +01:00
3f23792df0 use the recommended way of using flake-compat 2023-02-16 20:31:02 +07:00
529031f44f fix typo 2023-02-16 20:26:57 +07:00
f51894614d after updating nix.lock all this soup isn't needed 2023-02-16 20:25:07 +07:00
a7dbab79e5 add default.nix for compatibility; update flake.lock 2023-02-16 20:02:39 +07:00
4dcce810d2 improve nix dev shell; override the nixpkgs waybar
for example, the update from 0.9.16 to 0.9.17 broke this flake, after
this change the derivation will be the same as the nixpkgs one. This is
the better option since the flake is unmaintained in this repo (although
it may still break inbetween releases)
2023-02-16 19:45:58 +07:00
43958ef560 fix: compilation errors with cpp_std=c++20 2023-02-11 13:26:03 +11:00
5e4a47c0a8 Merge branch 'master' into add-river-layout 2023-02-11 13:22:46 +11:00
ea38eec2af fix: lint 2023-02-09 13:25:39 +01:00
286a3c70f4 Merge pull request #1978 from kpanuragh/master 2023-02-09 13:25:15 +01:00
9049de583e Merge pull request #1996 from Kuruyia/feat/brightness-control
Closes https://github.com/Alexays/Waybar/issues/1411
2023-02-09 13:24:35 +01:00
a6eaaad97f Merge pull request #1998 from LukashonakV/Clock_revision 2023-02-09 09:32:57 +01:00
d25930793c Merge pull request #2004 from bwaite/fix-memory-leak-upower 2023-02-08 09:02:06 +01:00
67ab269706 Fixing memory leak on update UPower tooltip 2023-02-08 17:19:51 +11:00
48312f4c91 Merge pull request #2001 from LukashonakV/ISSUE#1988 2023-02-04 23:30:12 +01:00
677cbb3384 When no one timezone is provided use system's TZ
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-02-04 23:48:25 +03:00
973aa09f8b refactor(backlight): fix linter 2023-02-03 18:18:44 +01:00
e8c4b85328 feat(backlight): use dbus to set the brightness 2023-02-03 12:58:52 +01:00
b5ad77ea8c Avoid of unnecessary string transformation
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-02-02 13:26:05 +03:00
74a8464c09 updating man page 2023-02-01 21:22:10 +05:30
a78f0124d2 feat(backlight): add brightness control 2023-02-01 14:46:55 +01:00
8da5425189 Merge pull request #1994 from smoak/fix_wireplumber_invalid_pointer 2023-02-01 08:25:05 +01:00
a9c9f1d705 fix(wireplumber): free(): invalid pointer
When freeing the `default_node_name_` pointer using `free`, the `&`
operator was used to try to free the reference rather than the pointer.
This caused a core dump. In order to fix this, the pointer is freed
instead (ie the `&` operator is no longer used).
2023-01-31 17:56:58 -08:00
301b106c48 add river/layout clang-format 2023-01-31 16:41:36 +11:00
757a450324 add river/layout 2023-01-31 16:34:38 +11:00
7b3a6fbaa7 created local variable for _output 2023-01-30 18:35:06 +05:30
c93811b158 Merge pull request #1987 from adamant-pwn/patch-2 2023-01-30 08:57:28 +01:00
7554d7f071 Fixing build issue in image module 2023-01-29 19:13:01 +05:30
220b859948 Fix kbName initialization
Second argument of substr is the length of the substring, _not_ the position. With positions, it's better to do like this.

Example:
```sh
[2023-01-29 13:08:00.927] [debug] hyprland IPC received activelayout>>ITE Tech. Inc. ITE Device(8910) Keyboard,Russian (with Ukrainian-Belorussian layout)
[2023-01-29 13:08:00.927] [debug] kbName is ITE Tech. Inc. ITE Device(8910) Keyboard,Russian (with
```

After the fix it's correct:
```sh
[2023-01-29 13:11:11.408] [debug] hyprland IPC received activelayout>>ITE Tech. Inc. ITE Device(8910) Keyboard,Russian (with Ukrainian-Belorussian layout)
[2023-01-29 13:11:11.408] [debug] kbName is ITE Tech. Inc. ITE Device(8910) Keyboard
```
2023-01-29 13:14:05 +01:00
012baadaca added exec condition check on image module 2023-01-29 10:41:24 +05:30
0ecfce9c61 Merge pull request #1975 from bd-g/fix-image 2023-01-27 14:38:26 +01:00
d2116acb62 Merge pull request #1982 from LukashonakV/ClockSimplify 2023-01-27 14:33:28 +01:00
5d8f9a8273 Clock. Formating simplify
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-01-27 15:57:18 +03:00
9068b7548f for image module get path from executable file 2023-01-25 22:29:33 +05:30
1495b957f1 for image module get path from executable file 2023-01-25 22:28:07 +05:30
47cdd6f988 Merge pull request #1976 from LukashonakV/ClockAltMode 2023-01-25 15:10:08 +01:00
f3f0b008c6 Clock. Proper handletoggle propagation
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-01-25 16:56:45 +03:00
c1ceb7ac42 fix linting issues 2023-01-24 14:53:49 -05:00
e128c48573 image module CSS fix 2023-01-24 14:34:02 -05:00
dd9e3d0172 Merge pull request #1871 from Narice/feat/nix-flake-support 2023-01-24 09:34:03 +01:00
a9613892bb Rename .envrc to .envrc.sample 2023-01-24 09:33:38 +01:00
e7af29ac1e Merge pull request #1971 from LukashonakV/YearCalendar 2023-01-23 17:07:21 +01:00
3b28af8b51 Merge remote-tracking branch 'origin/master' into YearCalendar
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-01-23 18:49:45 +03:00
ed31b20c26 Merge branch 'master' into YearCalendar
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-01-23 18:42:32 +03:00
fea7ec9133 Merge pull request #1941 from eneshecan/master
Fixes https://github.com/Alexays/Waybar/issues/1940
2023-01-23 10:24:44 +01:00
3c8ca009ff Sanitize hyprland language string only instead of the whole format. Fixes #1940 2023-01-23 09:50:40 +01:00
f4cfafd238 fix: lint 2023-01-23 09:25:02 +01:00
5182fadede Merge pull request #1944 from PolpOnline/master 2023-01-23 09:22:27 +01:00
18e0e0c7c1 Merge pull request #1964 from tactikauan/master 2023-01-23 09:20:46 +01:00
69b95e6d71 Merge pull request #1959 from alebastr/gcc-13 2023-01-23 09:18:13 +01:00
5e2895ccb3 Merge pull request #1966 from asas1asas200/zeng-doc-image 2023-01-22 13:39:39 +01:00
0ca1c3957a docs(image): add image doc in meson and fix title 2023-01-22 20:16:46 +08:00
de77787b60 Allow any module to implement signal handling 2023-01-21 21:57:28 -03:00
51b6c22cab ci: add glibc locales for date formatting tests.
Add some missing dependencies for Fedora.
2023-01-21 02:18:46 -08:00
01cee153a4 ci: try to build with cpp_std=c++20
Add an extra job to build with `-std=c++20` on Fedora.
Update actions/checkout to v3.
2023-01-21 02:18:45 -08:00
93e340a081 feat(clock): support chrono Time Zone extensions.
Use chrono Calendars and Time Zones (P0355R7, P1466R3) when available
instead of the `date` library.
Verified with a patched build of a recent GCC 13 snapshot.
2023-01-21 02:18:44 -08:00
6225db0a48 test: refactor date formatter tests.
- Add tests for global locale.
- Warn about missing locales.
- Downgrade REQUIRE to CHECK.
- Skip tests if localized formatting does not work as expected.
2023-01-21 02:18:43 -08:00
ea17a66dfc fix: compilation errors with cpp_std=c++20
There were two main issues with fmtlib and C++20 mode:

 - `fmt::format` defaults to compile-time argument checking and requires
   using `fmt::runtime(format_string)` to bypass that.
 - `std::format` implementation introduces conflicting declarations and
   we have to specify the namespace for all `format`/`format_to` calls.
2023-01-20 22:50:02 -08:00
67efe1af89 refactor(clock): remove struct waybar_time
The structure was used to pass the locale instance to the date
formatter. All the supported versions of `fmt` are passing the locale
parameter via `FormatContext.locale()` so we can remove the struct and
simplify the code.

While we at it, drop `date::make_zoned` in favor of CTAD on a
`date::zoned_time` constructor.
2023-01-20 22:50:01 -08:00
ba498869c5 fix(clock): delete outdated warning 2023-01-20 22:50:00 -08:00
43d52c59d9 test: fix build with Catch2 v2.x
Use smaller includes for Catch2 v3.
2023-01-20 22:49:59 -08:00
ca9d237b00 fix(sway): add missing includes for GCC 13
See also: https://gcc.gnu.org/gcc-13/porting_to.html
2023-01-20 22:49:58 -08:00
bc07a82579 Merge pull request #1962 from maximbaz/hyprland-submap-init 2023-01-20 23:46:08 +01:00
6e9f21fc6b hyprland/submap: run initial render on startup 2023-01-20 23:40:08 +01:00
eb9d2d9c5d Merge pull request #1935 from multun/master 2023-01-17 09:40:45 +01:00
be3df41ae0 Merge pull request #1942 from smoak/fix-wireplumber-crashes
Fixes https://github.com/Alexays/Waybar/issues/1907
2023-01-17 09:36:05 +01:00
4e8ccf36b5 fix(wireplumber): waybar crashes when default node changes
In order to fix the issue, the default node name is cached rather than
the default node id. This is due to ids being unstable. So now when the
object manager is installed (ie ready), the default node name is
retrieved and stored for later.

Now when the mixer changed signal is emitted, the id of the changed node
is used to get the node from the object manager. The nodes name is
grabbed off that node and compared against the default node name, if
they match the volume is updated. Some safeguarding has been added such
that if the node cannot be found off the object manager, it's ignored.

Additionally, the "changed" signal on the default nodes api is now
utilized to update the default node name if it has changed. This way if
the default node changes, the module will be updated with the correct
volume and node.nick.

This adds additional debug logging for helping diagnose wireplumber
issues.

This also adds the wireplumber man page entry to the main waybar
supported section.
2023-01-16 10:29:35 -08:00
5649c3f552 river/tags: refactor to support special purpose tags
adds the set-tags and toggle-tags setting so it's possible to have
different tags set vs toggled. This enables the use of e.g. sticky tags

Also clean-up the code a bit.
2023-01-15 12:16:30 -05:00
a4b1b0a211 modules/custom: Added percentage rounding 2023-01-13 22:39:59 +01:00
6c8e186586 Merge pull request #1939 from RobertMueller2/master 2023-01-13 15:31:50 +01:00
544c6deb88 sway/window: fix manpage 2023-01-13 15:08:59 +01:00
e59b4e4c93 Merge pull request #1419 from RobertMueller2/sway-window-newstyles 2023-01-13 13:58:43 +01:00
d71a4569fe Merge pull request #1937 from cyrinux/fix/battery-time-remaining
fix https://github.com/Alexays/Waybar/pull/1867#pullrequestreview-1246756355
2023-01-13 09:51:40 +01:00
120cba0f5e fix: battery time remaining
time is reported in second and should be divided by 3600 and not 1000.
2023-01-13 09:44:39 +01:00
328573332f sway-window, Issue 1399: new style classes
Provides CSS classes empty, floating, tabbed, tiled, solo, stacked and
app_id.

Adds offscreen-css bool option (default false), only effective when
"all-outputs" is true. This adds styles on outputs without focused
node, according to its focused workspaces window situation.

Adds an "offscreen-css-text" string option (default empty), only
effective when "all-outputs" and "offscreen-style" are set. This
is shown as a text on outputs without a focused node.

Adds a "show-focused-workspace" bool option (default false) to indicate
the workspace name if the whole workspace is focused when nodes are
also present. If not set, empty text is shown, but css classes
according to nodes in the workspace are still applied.

Limitation:
When the top level layout changes, there is no sway event so the
module cannot react. Perhaps in the future recurring polling can
be added to go around this limitation.
2023-01-12 05:53:59 +01:00
df0fdce92b get_desktop_app_info: fix crash on failed DesktopAppInfo::create
Even though it makes little sense for this call to fail,
it sometimes randomly does, and takes down waybar with it.
2023-01-11 23:02:12 +01:00
f0bead34d4 chore: 0.9.17 2023-01-11 11:39:30 +01:00
d6bd440027 fix: lint 2023-01-09 15:48:31 +01:00
c692d7bf64 Merge pull request #1929 from julianschuler/monitor-reconnect-fix
Fixes https://github.com/Alexays/Waybar/issues/1783
2023-01-08 19:56:27 +01:00
2045aac5b0 Fix crash upon reconnecting monitor 2023-01-08 18:49:24 +01:00
a92223c316 Merge pull request #1926 from robertgzr/mpris-module 2023-01-07 09:23:25 +01:00
24d03d13ce mpris: fix build errors
to address https://github.com/Alexays/Waybar/pull/1520#issuecomment-1374229080

Signed-off-by: Robert Günzler <r@gnzler.io>
2023-01-07 01:44:25 +01:00
b3b5d8f9ab Activate ci for mpris module
Signed-off-by: Robert Günzler <r@gnzler.io>
2023-01-07 01:44:25 +01:00
86850f5c7a Merge pull request #1520 from robertgzr/mpris-module 2023-01-06 22:35:24 +01:00
0bc5314e08 Add mpris module
Uses libplayerctl to use the MPRIS dbus protocol to query, listen and
control media players.

Signed-off-by: Robert Günzler <r@gnzler.io>
2023-01-06 20:55:31 +01:00
1d6cfe7ce6 Merge pull request #1921 from Jonher937/cpu-load-pushed-back-twice 2023-01-05 08:52:22 +01:00
2a3ebc12de fix: cpu_load pushed twice to the vector 2023-01-05 01:10:04 +01:00
1938bb5d28 fix: lint 2023-01-04 16:26:50 +01:00
a35861b3b9 Merge pull request #1918 from ldelossa/sway-workspaces-alpha-sort 2023-01-03 11:52:39 +01:00
8b512e7b22 sway,feat: allow alphabetical sort
for users who do not utilize any form of "workspace prev/next" commands,
it can be very handle to sort the workspaces alphabetically.

this commit adds a new "alphabetical_sort" to the `sway/workspaces`
module which allows the module to alway sort workspaces alphabetically.

this docs are updated to warn the user of the implications involved.

Signed-off-by: Louis DeLosSantos <louis.delos@gmail.com>
2023-01-02 17:03:28 -05:00
fb083f93dc Merge pull request #1911 from cdump/master 2022-12-31 13:35:46 +01:00
f795e7a308 modules/clock: improve ux when calendar_shift is used:
1. change only date, but not time
  2. use shifted values only in tooltip
  3. reset shift when mouse leaves (popup closes)
2022-12-28 10:13:10 +03:00
21abd4f9f9 Merge pull request #1910 from eneshecan/master 2022-12-27 15:44:42 +01:00
f724cc3f9d Fix wrong layout name in hyprland language module when a variant is used 2022-12-27 15:29:10 +01:00
bfbb2f9a40 Merge pull request #1906 from Arisa-Snowbell/gitignore 2022-12-26 09:33:55 +01:00
91357f210d Ignore .cache generated by clangd 2022-12-26 06:39:15 +01:00
3e48551f25 Merge pull request #1897 from eneshecan/master 2022-12-21 09:43:08 +01:00
c05f41d732 Make linter happy 2022-12-21 01:55:39 +01:00
4d59de42af Implement hyprland submap module 2022-12-21 01:45:57 +01:00
6e296838e4 Update hyprland language module docs 2022-12-21 00:20:16 +01:00
e00e36981e Merge pull request #1890 from eneshecan/master 2022-12-16 10:37:54 +01:00
4136ffaecb Minor refactorings and formatting fixes for hyprland language module 2022-12-16 10:01:58 +01:00
bd199e414b Merge pull request #1888 from eneshecan/master
Fixes undefined
2022-12-16 09:20:49 +01:00
531bdfb8bb Fix hyprland language initialization issues 2022-12-15 01:48:14 +01:00
c1ea7626b9 Merge pull request #1887 from LukashonakV/ISSUE#1874 2022-12-14 16:08:36 +01:00
995802e8ae ISSUE#1874 - happy linter 2022-12-14 16:49:03 +03:00
0079092699 ISSUE#1874
1. Calendar. Weeks. Fix right paddings when first days of the week is
Monday
2. Fix small perfomrance penalty(avoid of defining parameter in the
month loop)
3. Small name convention for format string variables
2022-12-14 16:43:23 +03:00
b5c686c0dd Merge pull request #1882 from LukashonakV/ISSUE#1877 2022-12-12 09:18:10 +01:00
4c4d09992e Regular expression improved 2022-12-10 18:36:58 +03:00
9218968d2f Wrong assigning 2022-12-10 17:55:21 +03:00
a08967e008 Happy linter 2022-12-10 16:54:26 +03:00
272c638f7e Happy linter 2022-12-10 16:48:22 +03:00
57ad7f9536 ISSUE#1877 Calendar week numbers
1. Let's do code simplier
2. Week format using regexp. Needs when user provide additional
characters in format string and need to align week days according
3. Week format has got default formats: ":%U",":%V"
4. Week number is based on the first day of the week now. The output is
the same as of date library now.
5. Avoiding of unnecessary operations
2022-12-10 14:02:15 +03:00
2a76d8e5b9 Merge pull request #1862 from alebastr/battery-ignore-scope-device 2022-12-07 15:01:26 +01:00
1130e8c8ec Add output parameter format to manpage 2022-12-06 19:05:08 +01:00
d5a86526bc dev: Added Nix Flake support
- Enables Nix users to get the git version of waybar
- Enables Nix users to develop waybar easily
- Adds a fully reproducible development environment
  - The user only has to install Nix, no other depencencies
  - Automatic dev env on directory entry through .envrc
2022-12-06 18:44:26 +01:00
c5babb4c44 Merge pull request #1868 from prohornikitin/calendar-week-numbers
Fix https://github.com/Alexays/Waybar/issues/1802
2022-12-06 09:01:18 +01:00
328575a721 fix: calendar week numbers
fix their format to correct

fix last number hide if the last day of the month is the last day of the week

some refactoring(mostly renaming abbreviations to the full phrases)
2022-12-06 03:47:28 +03:00
ea9078d887 Merge pull request #1867 from cyrinux/feat/macsmc-battery-support 2022-12-05 22:30:47 +01:00
b1833b1f36 feat: add macsmc-battery time remaining support for asahi
use time_to_empty_now and time_to_full_now
2022-12-05 22:09:05 +01:00
53e89dace7 Merge pull request #1865 from Dordovel/master
Fix https://github.com/Alexays/Waybar/pull/1854#issue-1469577538
2022-12-05 09:01:45 +01:00
3cbcef61cf fix AIconLabel spacing between image and label 2022-12-05 10:02:38 +03:00
22084691ff fix(battery): ignore non-system power supplies
Linux power_supply sysfs interface allows checking if the battery powers
the whole system or a specific device/tree of devices with `scope`
attribute[1]. We can use it to skip the non-system power supplies in the
battery module and avoid adding HIDs or other peripheral devices to the
total.

The logic is based on UPower, where it is assumed that "Unknown" devices
or devices without a `scope` are system power supplies.

[1]: https://lore.kernel.org/lkml/alpine.LNX.2.00.1201031556460.24984@pobox.suse.cz/T/
2022-12-04 00:14:42 -08:00
f4afa59861 Merge pull request #1860 from prohornikitin/hide-module-if-empty 2022-12-03 15:32:12 +01:00
ce8c13788a fix formatting issues 2022-12-02 19:32:03 +03:00
b74f3c7aaa hide mdp/pulseaudio/sndio if text 'resolves' to be empty. 2022-12-02 18:15:51 +03:00
55d7868f86 fix(2): use getaddrinfo() instead of gethostbyname() 2022-12-02 22:18:32 +08:00
0540977e45 format: remove some newlines 2022-12-02 21:42:58 +08:00
385726e701 fix: use getaddrinfo() instead of gethostbyname() 2022-12-02 21:36:14 +08:00
2111865efe refactor: remove warning 2022-12-01 08:45:12 +01:00
94d6ae9741 Merge pull request #1845 from adamant-pwn/patch-1 2022-11-29 10:47:20 +01:00
e6760bf9dd Merge pull request #1846 from Dordovel/master 2022-11-29 08:46:06 +01:00
7671ccfbc6 added file existence check 2022-11-29 09:00:12 +03:00
459541ed89 Don't search "Keyboard at" from hyprland/language
The current output form of `hyprctl devices` is like this:
```
        Keyboard at 6f80ad70:
                ITE Tech. Inc. ITE Device(8910) Keyboard
                        rules: r "", m "", l "us,ru", v "", o "grp:alt_shift_toggle"
                        active keymap: Russian
                        main: no
```

That is, `Keyboard at` goes _before_ the keyboard name, so looking for `Keyboard at` only makes it skip to the keyboard _after_ the one that the user specified.
2022-11-29 01:11:25 +01:00
da3d9533d1 Merge pull request #1841 from encbar5/inverted-date-scroll 2022-11-28 07:43:48 +01:00
8db1996ccc Allow calendar_shift_init_ to be negative 2022-11-27 21:24:56 -06:00
cfef78a5bc Merge pull request #1837 from smoak/smoak/fix-wireplumber-bluetooth 2022-11-26 20:45:29 +01:00
60fa5e9f67 fix: wireplumber module when used with a bluetooth device
This fixes #1811 by falling back to `node.description` if `node.nick` is
not available. This can happen for bluetooth devices that do not have a
`node.nick`.
2022-11-26 11:35:45 -08:00
cea59ddc6c Merge pull request #1836 from smoak/smoak/wireplumber-icon-support 2022-11-26 20:23:17 +01:00
3730793197 feat: add icon support to the wireplumber module
Adds basic icon support for the wireplumber module.

This can be achieved by using `{icon}` in the `format` config and
pairing it with the `format-icons` config as well.

Example:

```
"wireplumber": {
    "format": "{volume}% {icon}",
    "format-icons": ["", "", ""]
}
```
2022-11-26 10:02:16 -08:00
d2b4076ac8 Merge pull request #1799 from Keloran/upower-click 2022-11-25 09:04:31 +01:00
e63e3a0ca9 Update upower.cpp 2022-11-25 09:03:27 +01:00
99d370d9ed Update README.md 2022-11-24 20:51:54 +01:00
80b2b29a77 Merge pull request #1397 from JakeStanger/feat/image-module
Resolves https://github.com/Alexays/Waybar/issues/1191
2022-11-24 20:40:56 +01:00
27ad9ec267 Update README.md 2022-11-24 20:37:30 +01:00
9eb6c4e296 chore: v0.9.16 2022-11-24 20:34:12 +01:00
748c6125d0 Merge pull request #1810 from pinselimo/revert-1120 2022-11-24 15:20:29 +01:00
235861fd3d button: Remove AButton class 2022-11-24 13:08:16 +01:00
5e9bbe5c76 modules: Revert button to label 2022-11-24 13:08:16 +01:00
74fa131ebe Merge pull request #1809 from herlev/hyprland-named-workspace-crash 2022-11-24 07:46:17 +01:00
2c7cb0e9d4 Fix crashes when using named workspaces in Hyprland
The first crash occurs when trying to parse the
ID of a workspace as an uint, since named
workspaces has negative IDs. This is fixed by
using ints for workspace IDs instead of uints.

The second crash occurs when converting a
workspace name that isn't a number to an integer.
This is fixed by wrapping std::stoi in a try
block and only sorting by number, when both names
can successfully be converted to integers.
2022-11-24 02:16:44 +01:00
ce8ae5bf17 Merge pull request #1748 from lilydjwg/fix-zombies
fixes https://github.com/Alexays/Waybar/issues/1713
2022-11-23 21:31:47 +01:00
062e7bb9b4 Merge pull request #1797 from smoak/wireplumber-support 2022-11-22 12:44:39 +01:00
3acd31c3e9 syntax issue 2022-11-21 09:48:41 +00:00
456e06c4b5 exact opposite, lol 2022-11-21 09:46:57 +00:00
a2751cfcd6 alt text readded 2022-11-18 14:25:16 +00:00
d9cc995405 added onclick to upower 2022-11-18 13:10:04 +00:00
00a2ebf00d added onclick to upower 2022-11-18 13:09:38 +00:00
c2f98d07ef feat: wireplumber support
Adds basic support for showing volume via wireplumber. Allows specifying
the node-id or falling back to the default Audio/Sink node id if node-id
is not set. If tooltip on hover is enabled, will show `{node_name}` by
default otherwise `tooltip-format`.

Format replacements:

`{volume}` - Volume in percentage
`{node_name}` - The node's nickname (`node.nick` property)
2022-11-16 23:23:07 -08:00
833dcc1bb8 Merge pull request #1795 from schmidma/bluez-output-detection 2022-11-16 19:07:46 +01:00
8c24e26f0e Recognize outputs with 'bluez' in monitor name as bluetooth class 2022-11-16 19:01:12 +01:00
56b4a11a9c Merge pull request #1793 from Dordovel/master 2022-11-16 07:41:29 +01:00
1111763251 added path settings 2022-11-16 08:04:18 +03:00
769858fbb4 fix call parent event handle, added commang to open user folder 2022-11-15 16:15:26 +03:00
2695815bcc Merge pull request #1787 from Dordovel/master 2022-11-15 08:41:12 +01:00
49afb87e34 Merge branch 'Alexays:master' into master 2022-11-13 16:17:04 +03:00
5250123dcb Merge pull request #1788 from grfrederic/normalize-battery-capacity 2022-11-12 23:41:00 +01:00
c0b3e9ee35 normalize capacity by number of batteries 2022-11-12 22:39:53 +01:00
454ba610f4 clicking on the user label opens the default file manager 2022-11-11 15:15:12 +03:00
3718902b9d Merge pull request #1785 from ElJeffe/hyprland_monitor_remove 2022-11-10 09:21:52 +01:00
9f0a14c22b make linter happy 2022-11-10 09:19:49 +01:00
781da93f3d Merge pull request #1780 from ElJeffe/hyprland_monitor_remove 2022-11-09 23:09:30 +01:00
8f4f67f69f Do not crash when a monitor is removed 2022-11-09 09:34:19 +01:00
8be5bab8ad Merge pull request #1734 from baltitenger/backlight-hide-when-powered-off
closes https://github.com/Alexays/Waybar/issues/393
2022-11-07 14:09:54 +01:00
d02e23c759 feat(backlight): hide if the display is powered off 2022-11-07 13:57:21 +01:00
d2b22c6ec5 fix: lint 2022-11-07 09:23:47 +01:00
ed898cd211 Merge pull request #1773 from kj/backlight-format-states 2022-11-07 09:23:17 +01:00
1a1c617520 Merge pull request #1772 from kj/fix-states-documentation 2022-11-07 09:13:41 +01:00
253222d31c Make backlight module respect format-<state> config 2022-11-07 21:06:16 +13:00
51e6fc6250 Fix states documentation 2022-11-07 20:30:01 +13:00
af1668dfd0 Merge pull request #1770 from Scrumplex/fix-mpd-double-encode 2022-11-06 09:52:31 +01:00
cf5877073a fix: don't escape mpd label twice
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
2022-11-05 20:23:00 +01:00
bd567800c9 Merge pull request #1769 from ericliou/master 2022-11-04 22:01:36 +01:00
6477e539d0 Battery: Plugged status has higher priority 2022-11-04 20:01:53 +00:00
242e19a07d Merge pull request #1767 from b1rger/fix-typos 2022-11-04 15:07:31 +01:00
0e53c37d6b Fix typos in manual pages 2022-11-04 15:03:10 +01:00
3030850b22 refactor: inherit disabled button 2022-11-04 08:39:59 +01:00
92cc01f401 fix: label default style 2022-11-03 15:53:45 +01:00
d48eebd4d3 fix: use GTK_STYLE_PROVIDER_PRIORITY_APPLICATION 2022-11-03 14:10:18 +01:00
eb705533b5 feat: jsoncpp wrap 2022-11-03 14:08:22 +01:00
3cf027fc56 fix: button default style 2022-11-03 14:04:29 +01:00
09120caf17 Merge pull request #1762 from jpalus/jsoncpp-version 2022-11-03 11:02:19 +01:00
73495df377 build: require jsoncpp >= 1.9.2
with #1719 Waybar started using Json::Value.as() available since jsoncpp
1.9.2.
2022-11-03 10:59:03 +01:00
fd417c0805 chore: 0.9.15 2022-11-03 09:43:05 +01:00
afa590f781 Merge pull request #1758 from Alexays/revert-1687-fix-custom-module-markup
Revert "Escape text in custom module"
2022-11-02 06:00:00 +01:00
df36ac3408 Revert "Escape text in custom module" 2022-11-02 05:59:50 +01:00
ebdf575d45 fix: lint 2022-10-28 14:44:48 +02:00
a4d27ea806 fix: checking router id in handleEvent function 2022-10-28 14:44:04 +02:00
a10266ceee fix: add power to tooltip format 2022-10-28 14:35:18 +02:00
31137c30fb fix custom module leaves zombie processes behind when bars are removed
fixes #1713.
2022-10-27 18:12:14 +08:00
c374c412d3 chore: remove unwanted file 2022-10-27 10:00:38 +02:00
2fec1d4907 fix: typo 2022-10-27 09:14:07 +02:00
be28ee3d7e fix(#1707): hide module when no controller found 2022-10-27 09:00:31 +02:00
2d7e21ed7d fix: lint 2022-10-26 17:26:15 +02:00
930a3e168b Merge pull request #1747 from bi4k8/taskbar-task-reorder 2022-10-26 17:25:55 +02:00
7948d03d25 Merge pull request #1744 from Quantenzitrone/master 2022-10-26 17:14:58 +02:00
ff61e7bf4e taskbar: implement drag-and-drop task reordering 2022-10-25 19:39:23 +00:00
64849f52c9 fixed memory module not rounding numbers 2022-10-22 02:31:14 +02:00
1374b0fce4 Merge pull request #1740 from ErikReider/gamemode-segfault-fix 2022-10-20 13:09:50 +02:00
1ceaff27c2 Fixed gamemode module segfaulting when disconnecting monitor 2022-10-20 12:38:52 +02:00
527017baca chore: update date wrap 2022-10-20 11:05:19 +02:00
f330e51472 fix: typo 2022-10-20 10:57:27 +02:00
411c6f4b4b chore: update catch 2022-10-20 10:56:47 +02:00
e8e8ccb6cf Merge pull request #1661 from asas1asas200/zeng-feat-improve_keyboard 2022-10-20 10:50:35 +02:00
a24f2d72a7 Merge pull request #1730 from herlev/hyprland-window-rewrite 2022-10-20 10:48:57 +02:00
ffa458223d Merge pull request #1724 from llyyr/fix-build-with-catch2 2022-10-20 10:47:52 +02:00
aa8bd51952 Merge pull request #1738 from pinselimo/fix-button-padding 2022-10-20 10:46:08 +02:00
05dbfe261a style: Revert set default minimal width of buttons to zero #1737 2022-10-20 10:34:20 +02:00
1f591e36f1 button: Hardcode min-width property set to zero
Buttons come with an intrinsic min-width but lack a method to alter this
property. Setting the requested size to zero has also no effect on it.
The only way found to work is to hard code the CSS into the button.
2022-10-20 10:31:11 +02:00
d0677c1801 Merge pull request #1737 from pinselimo/fix-button-padding 2022-10-19 14:59:49 +02:00
c18c6b080a Set default minimal width of buttons to zero
Even if all margins, padding and borders of buttons are removed the
label inside the buttons may still be padded if they are too short.
Setting the minimal width of buttons to zero fixes this issue.
2022-10-19 14:48:56 +02:00
7240611d87 Merge pull request #1736 from pinselimo/fix-battery-module 2022-10-19 13:39:20 +02:00
e1045381fe Fix linter 2022-10-19 13:30:28 +02:00
e660a3634d Fix linter 2022-10-19 13:29:05 +02:00
54e04b5a30 Refactor rewriteTitle 2022-10-19 13:25:08 +02:00
662a250705 Fix battery indicator crash on linux
A pre-processor flag was misspelled and is now corrected.
2022-10-19 13:15:21 +02:00
f72c1a54d3 Merge branch 'Alexays:master' into hyprland-window-rewrite 2022-10-19 12:18:22 +02:00
6b221133c2 Merge pull request #1703 from lbartoletti/freebsd_battery 2022-10-19 09:08:47 +02:00
d01fda6fae Merge pull request #1721 from herlev/sort-workspaces-by-number 2022-10-19 09:08:03 +02:00
692b90c995 fix build 2022-10-19 08:36:15 +02:00
dea2d721eb Merge pull request #1733 from ItsDrike/master 2022-10-18 19:45:42 +02:00
72a2ada82c remove clang-format lines 2022-10-18 19:30:43 +02:00
6156a62294 fix time_remaining. FreeBSD sysctl returns minutes and not hours 2022-10-18 19:30:43 +02:00
d4d35e2f89 apply clang-format 2022-10-18 19:30:43 +02:00
a58988ea9d Battery: replace #else by #elif defined(__linux__)
Cannot use #else here when inotify_init1() is hidden behind #if defined(__Linux__).

Co-authored-by: Jan Beich <jbeich@FreeBSD.org>
2022-10-18 19:30:43 +02:00
0ada5ac8b0 Battery::getAdapterStatus: better code format 2022-10-18 19:30:41 +02:00
1421163df3 remove useless include <sys/types.h> 2022-10-18 19:30:23 +02:00
9d5f0e45c0 Add test if there is battery 2022-10-18 19:30:23 +02:00
45e44e03bd Apply jbeich suggestion for if defined(__linux__) 2022-10-18 19:30:21 +02:00
830c5cd5d0 FreeBSD: Add support to battery
This commit aims to propose a FreeBSD to gain battery support using sysctl on hw.acpi.battery.*
2022-10-18 19:30:04 +02:00
90f206f92a Fix crash on quickly switching workspaces
The hyprland/window widget had an assertion ensuring that the output
from hyprctl matched the currently selected workspace id. However this
assertion fails if workspaces are switched too quickly, causing the
selected workspace to differ in id from the one in hyprctl, failing this
assertion which then crashes the entire program.

This fix simply changes this assertion into an if statement, and if a
mismatch is found, empty string is returned as the window name.
2022-10-18 18:36:00 +02:00
59e7f1974c Document hyprland/window rewrite option 2022-10-18 13:21:20 +02:00
97ae2ff343 Add rewrite option to hyprland/window 2022-10-18 13:18:43 +02:00
3d63080346 Document sort-by-number option in man page 2022-10-18 12:25:22 +02:00
cb842d9d50 Merge branch 'Alexays:master' into sort-workspaces-by-number 2022-10-18 12:19:00 +02:00
a7e6330078 Merge pull request #1729 from pinselimo/use_gtk_button_v2 2022-10-18 11:27:17 +02:00
93807b0b3e resources: Remove border effect on hover
Moves the ``border = none;`` attribute from workspace buttons to the
global scope. The hover effects on all buttons are now consistent in the
default stylesheet.
2022-10-18 11:25:20 +02:00
6e73c58e60 fix: lint 2022-10-18 09:01:45 +02:00
209225e381 Merge pull request #1701 from Dordovel/master 2022-10-18 09:01:00 +02:00
7746328daa Merge pull request #1667 from asas1asas200/zeng-feat-sway_scratchpad 2022-10-18 09:00:31 +02:00
c7d475ee86 Merge pull request #1728 from lilydjwg/fixpa 2022-10-18 08:45:45 +02:00
4ed13df092 Merge branch 'Alexays:master' into master 2022-10-17 19:00:21 +03:00
33c3ab35a8 Fix linter error (formatting) 2022-10-17 10:13:37 +02:00
4dfea72db0 Merge branch 'Alexays:master' into sort-workspaces-by-number 2022-10-17 10:01:12 +02:00
504132dc55 Merge pull request #1719 from herlev/master 2022-10-17 09:53:05 +02:00
debbfccf07 Merge pull request #1705 from lbartoletti/freebsd_temperature_use_thermal-zone_config 2022-10-17 09:52:54 +02:00
56ec72c31c Merge branch 'master' into master 2022-10-17 09:44:17 +02:00
27c6c96b37 Merge branch 'master' into freebsd_temperature_use_thermal-zone_config 2022-10-17 09:34:06 +02:00
8551c4bbe3 fix: lint 2022-10-17 09:19:00 +02:00
58362abfaf Merge pull request #1630 from duxovni/pow_format 2022-10-17 09:16:47 +02:00
2abeba2b52 Merge pull request #1679 from tomcharnock/master 2022-10-17 09:10:54 +02:00
bfa3adcfd6 Merge pull request #1120 from pinselimo/use_gtk_button_v2 2022-10-17 09:09:12 +02:00
2db6fc8b1b Merge pull request #1687 from sespiros/fix-custom-module-markup 2022-10-17 09:08:01 +02:00
c2dd296d31 Merge pull request #1704 from gunslingerfry/master 2022-10-17 09:07:26 +02:00
5b0c5ea9ce Merge pull request #1720 from IanManske/inhibitor-default-state 2022-10-17 09:06:26 +02:00
c7bb0ae0af Merge pull request #1636 from IsaacWoods/master 2022-10-17 09:05:03 +02:00
b2f90dffe1 Merge pull request #1710 from m-braunschweig/filename 2022-10-17 09:04:21 +02:00
f86dff60e6 utils: add sanitize_str to encode '&' etc.
gtk requires some chars (<>&"') to be encoded for them to render
properly. `sanitize_str` sanitizes raw strings that have such chars and
returns a properly encoded string
2022-10-17 00:31:19 +02:00
1db3c55b48 Fix build with catch2>=3.0.0 2022-10-16 19:21:43 +05:30
35254ee834 pulseaudio: disconnect on destruction 2022-10-16 15:24:17 +08:00
9a0013cb10 Add option to wlr/workspaces to sort workspaces by number 2022-10-15 01:44:58 +02:00
cca5227210 Add config value for inhibitor default state. 2022-10-13 21:47:57 -04:00
cf9d98a0be remove <optional> dependency 2022-10-13 23:49:41 +02:00
015409acaf Allow hyprland/window to show active window on a per monitor basis 2022-10-13 23:41:56 +02:00
2b735f44bc modules: Set tooltip on button
Mouse-over tooltips set on the label only appear once the mouse hovers
over exactly the label. Other apps (e.g. firefox) show the tooltip once
the pointer hovers the button. Not solely its label. With this commit we
get the same behaviour.
2022-10-12 10:25:30 +02:00
8fa5d9b838 modules: Set style-context on button
Fixes issue where the class parameters in style.css would have no
effect.

The CSS now references the GtkButton instead of the GtkLabel. Removing
all style-classes from the custom module GtkButton however removes
any properties set via style.css. Thus, the default classes 'flat' and
'text-button' are added on every update of these modules.
2022-10-12 10:25:30 +02:00
0012bcbd74 resources: Set button hover effects globally
Since now modules as well as workspaces are buttons, the fix for
the 'strange hover effects' has to be applied on a global level.
In return there is a nice hover effect also on the modules.
2022-10-12 10:25:30 +02:00
b8322c4b4b button: Add AButton class
The AButton class is designed as full a substitute to ALabel. The
GtkButton attribute 'button_' is initialized with a label. This
label can the be referenced by the subsequent inheritors of AButton
instead of the GtkLabel attribute 'label_' of ALabel.
For convenience a GtkLabel* 'label_' attribute is added to AButton.

If the button cannot be clicked it is disabled, effectively acting
like its label predecessor.

GtkButton seems to catch one-click mouse events regardless of the
flags set on it. Therefore, 'signal_pressed' is connected to a
function creating a fake GdkEventButton* and calling 'handleToggle'
(for details on this possible bug in GTK see:
https://stackoverflow.com/questions/45334911 )

In accordance with other GtkButtons (i.e. the sway/workspace ones)
set_relief(Gtk::RELIEF_NONE) is called on the 'button_' instance.
2022-10-12 10:25:29 +02:00
07050cf354 Merge branch 'Alexays:master' into master 2022-10-04 15:37:36 +03:00
ddf3e11240 remove clang-format lines 2022-10-04 11:28:32 +02:00
1ca660460a apply clang-format 2022-10-04 08:03:54 +02:00
0898236586 remove useless include <sys/types.h> 2022-10-04 07:37:05 +02:00
c3e91cd228 [FreeBSD] Use thermal-zone
The zone was hardcoded in #1702.
This commit allows to use the "thermal-zone"
variable.

Follow up #1702
2022-10-04 07:29:16 +02:00
c500c7d9a1 Fixed pulseaudio max-volume configuration. Fixed issue where volume stepping would cause the max volume to go above the max and never reach 0. 2022-09-30 15:25:12 -06:00
5da45ece9d Merge pull request #1702 from lbartoletti/freebsd_temperature 2022-09-30 21:24:05 +02:00
024777a5bc FreeBSD: Add support to temperature
This commit aims to propose a FreeBSD to gain temperature support using
sysctl on hw.acpi.thermal.tz0.temperature.
2022-09-30 21:12:28 +02:00
9758833027 added user module 2022-09-30 14:33:23 +03:00
9a958f6848 Merge branch 'master' of https://github.com/Alexays/Waybar 2022-09-22 09:52:45 +02:00
9e03bb61c7 Escape text in custom module 2022-09-16 01:19:44 +03:00
710f89599e Merge pull request #1686 from Alexays/revert-1685-master 2022-09-15 15:47:20 +02:00
d1700bf202 Revert "added checking router id in handleEvent function, because module does…" 2022-09-15 15:47:14 +02:00
e1b31db42b Merge pull request #1685 from Dordovel/master 2022-09-15 13:10:54 +02:00
52e9f624be added checking router id in handleEvent function, because module doesn't update state 2022-09-15 14:03:32 +03:00
e75eafcb34 Merge branch 'master' of https://github.com/tomcharnock/Waybar 2022-09-09 07:19:12 +00:00
6558a156b3 Add man entry for the ignored-sinks option 2022-09-09 00:54:32 +01:00
faf8954712 Add config option to ignore Pulseaudio Sinks
Fixes #1347
2022-09-09 00:51:25 +01:00
e58f1fd3e0 Merge pull request #1412 from eigenbrot/battery_zero_pad_minutes
Add battery format-time option for zero-padded minutes
2022-09-07 16:54:28 +02:00
6b83360e76 Add "{m}" battery format-time option for zero-pad minutes 2022-09-07 08:53:07 -06:00
03ca8de6d7 Update config.cpp 2022-09-07 10:33:57 +02:00
ac193ae669 Merge pull request #1646 from LukashonakV/ISSUE#1545
Issue#1545. Calendar scrolling opportunity
2022-09-07 09:16:59 +02:00
38d2815425 Merge pull request #1678 from asas1asas200/zeng-feat-idle_inhibitor_tooltip
feat(idle-inhibitor): add tooltip format
2022-09-05 17:52:27 +02:00
79f21c0d7b Merge pull request #1600 from leophys/master
Add support for reading the config path from env
2022-09-05 10:56:01 +02:00
0306c97173 Merge branch 'master' of https://github.com/Alexays/Waybar 2022-09-05 09:54:04 +02:00
8a82cdff16 Merge pull request #1659 from TheRealLorenz/master
Add 'max-volume' option to pulseaudio
2022-09-05 09:13:01 +02:00
29bdff5314 Merge pull request #1657 from vaxerski/hyprlandLanguage
Added a basic hyprland/language module
2022-09-05 09:12:17 +02:00
eb017347b8 Add support for reading the config path from env
This commit adds support to reading the config base path from the
environment variable `WAYBAR_CONFIG_DIR`. If it is set, but no
configuration is found there, it falls back to the previous mechanism
of using the default paths, without erroring.
2022-09-05 08:21:36 +02:00
f5a24d12e5 group module: configurable orientation
currently, the orientation of group modules is always the opposite of
the bar. Change it so that:

* the default orientation of the group module is always the opposite of
  its parent, even for nested groups
* the orientation can be overridden in the config
* css ID and class are set for the group element
2022-09-03 18:37:35 -05:00
912d7f8588 Making calculations uint64_t 2022-09-03 18:08:26 +02:00
5647146ac0 Added Discharging clause and corrected typo 2022-09-03 17:52:11 +02:00
af2a3f8bda Added alternative calculations for time remaining 2022-09-03 16:06:13 +02:00
55e83f90d1 feat(idle-inhibitor): add tooltip format 2022-09-03 19:21:32 +08:00
0d94853613 Added alternative variable calculations 2022-09-02 15:37:23 +02:00
120c68e014 Updated logic in battery module 2022-09-02 11:42:46 +02:00
4deb6d812d Merge pull request #1653 from kennypm/dsp
add JACK module
2022-09-02 08:12:57 +02:00
bc201fd0eb doc(sway/scratchpad): add man page 2022-08-31 16:27:25 +08:00
d2ff116c92 feat(sway/scratchpad): add some configs
Add some configs for displaying.
Remove draft codes.
2022-08-31 16:27:25 +08:00
e3342467fc feat(sway/scratchpad): add basic counter 2022-08-31 16:27:25 +08:00
ce10ce0d5e Merge pull request #1672 from asas1asas200/zeng-style-lint 2022-08-31 10:06:43 +02:00
4a929240df style(lint): fix some files lint 2022-08-31 15:51:50 +08:00
33d13af6d1 Merge pull request #1670 from akliuxingyuan/master 2022-08-30 20:43:51 +02:00
90878a5c98 Merge pull request #1669 from asas1asas200/zeng-fix-network 2022-08-30 20:43:03 +02:00
0d27949f0a scale icons for HiDPI monitor 2022-08-30 23:13:38 +08:00
f6322d2dd1 fix(network): dont escape essid in tooltip
Like #1256 , but escape by calling `set_tooltip_markup()`, because the
label text uses `set_markup()`.
2022-08-30 23:05:34 +08:00
330d166c82 Merge pull request #1668 from alex-courtis/1591-river-escape-window-and-mode 2022-08-29 08:26:40 +02:00
5f2dd99e6d #1591 river escape window and mode 2022-08-29 16:22:08 +10:00
8b03e38594 fix(keyboard): correct device-path config behavior 2022-08-24 14:08:34 +08:00
5944989a8a doc(keyboard): add deprecated warning 2022-08-24 02:41:12 +08:00
58a399b9af chore(ci, meson): add inotify dependency for BSD 2022-08-24 02:22:40 +08:00
dcd75b3b40 feat(keybaord): enable hotplug support
Use inotify listening devices path changes to implement hotplug support.
The new hotplug thread is also an event loop, so the interval value has
no effect.
The evdev is now open on demand.

Fix libinput_interface object life-time.
2022-08-23 23:30:16 +08:00
17f91391b6 Merge branch 'Alexays:master' into ISSUE#1545 2022-08-23 09:00:08 +00:00
061f4550f4 feat(keyboard): improve keyboard response time
Use libinput event for keyboard state updates.
The state will update when CAPS_LOCK, NUM_LOCK or SCROLL_LOCK has been
released,
`interval` will have no effect after this change.
2022-08-22 22:49:59 +08:00
fd24d7bcf6 Merge pull request #1660 from asas1asas200/master 2022-08-21 08:09:35 +02:00
51670f0506 Fix typo 2022-08-21 12:35:33 +08:00
4e930ba50a Add 'max-volume' option to pulseaudio. Fixes #1607 2022-08-20 22:21:57 +02:00
8839a86afe Merge branch 'Alexays:master' into ISSUE#1545 2022-08-19 13:52:52 +00:00
f4bfe777d9 oops 2022-08-18 20:56:26 -04:00
59e57ab9a0 man page and adjust default format 2022-08-18 17:05:04 -04:00
f00f30a5ae Merge pull request #5 from NotAShelf/hyprlandLanguage
Add man docs for Hyprland language module
2022-08-18 19:23:06 +02:00
40bc2e96db wording 2022-08-18 20:21:14 +03:00
9ac9dc368e Merge branch 'hyprlandLanguage' of https://github.com/vaxerski/Waybar into hyprlandLanguage 2022-08-18 20:16:42 +03:00
39c170bf10 remove one comment that I forgot to 2022-08-18 19:13:24 +02:00
5fea01300c Merge branch 'hyprlandLanguage' of github.com:NotAShelf/Waybar into hyprlandLanguage 2022-08-18 20:12:44 +03:00
b181cd04b6 update man docs for format-<lang> option 2022-08-18 20:11:44 +03:00
d786f9a0e6 Merge branch 'vaxerski:hyprlandLanguage' into hyprlandLanguage 2022-08-18 20:10:31 +03:00
c5910ae19a Merge branch 'hyprlandLanguage' of https://github.com/vaxerski/Waybar into hyprlandLanguage 2022-08-18 20:09:34 +03:00
ed6467e785 fix linter 2022-08-18 19:02:46 +02:00
43c3ca1d38 added the thing i was talking about 2022-08-18 18:59:34 +02:00
97f0d6fa42 remove redundant formatting 2022-08-18 19:35:40 +03:00
b8a68b8085 man documentation for hl language module 2022-08-18 19:32:26 +03:00
8881b9a6ef fix linter the most 2022-08-18 18:06:34 +02:00
e8942feefc fix linter more 2022-08-18 18:05:40 +02:00
a23d58e900 fix linter 2022-08-18 18:04:39 +02:00
16d5619f3b added a basic hyprland/language module 2022-08-18 18:00:27 +02:00
bcee4e15d3 fix: lint files 2022-08-18 15:22:25 +02:00
b7bd06ad8f Update window.cpp 2022-08-18 15:21:50 +02:00
e50c246601 Merge pull request #1651 from TheRealLorenz/master
Feature: sway/window can show 'shell' parameter
2022-08-18 15:21:09 +02:00
ee504b826d Update README.md 2022-08-18 15:16:28 +02:00
848ae1f818 Merge pull request #1656 from vaxerski/hyprland
Added a Hyprland backend and a Window module
2022-08-18 15:15:45 +02:00
406eb0ee9a Merge pull request #4 from NotAShelf/hyprland
Init man documentation
2022-08-18 15:10:42 +02:00
112d481ae7 Init man documentation 2022-08-18 15:59:00 +03:00
872cd6083d Merge pull request #3 from vaxerski/revert-2-master
Revert "init man documentation"
2022-08-18 14:54:30 +02:00
8dc78e4e40 Revert "init man documentation" 2022-08-18 14:54:20 +02:00
e662b8c624 Merge pull request #2 from NotAShelf/master
init man documentation
2022-08-18 14:53:15 +02:00
e0451816e2 init man documentation 2022-08-18 15:29:59 +03:00
e2e59a52df make the linter happy 2022-08-17 22:03:49 +02:00
123ed36739 remove workspaces module as its buggy and unnecessary 2022-08-17 21:58:33 +02:00
c64058c947 stabilize window module 2022-08-17 21:54:23 +02:00
56d46e62c1 add samplerate callback since pipewire supports dynamic samplerate changes 2022-08-12 11:30:12 -04:00
89a57f6722 simplify build option description 2022-08-11 18:35:33 -04:00
4336f10b29 Merge branch 'dsp' of https://github.com/kennypm/Waybar into dsp 2022-08-11 17:26:45 -04:00
a7979a3e56 add locks and refactor for clarity 2022-08-11 17:26:27 -04:00
bfed2114e4 jack_client_close working properly now 2022-08-11 15:49:24 -04:00
f65a372855 Merge branch 'Alexays:master' into dsp 2022-08-11 07:46:20 +00:00
6f3fe6d339 Update waybar-sway-window.5.scd 2022-08-11 08:41:10 +02:00
c287b0c82b Update manpage for sway/window 2022-08-10 22:24:48 +02:00
5b1cd65e20 Fix: better formatting 2022-08-10 10:41:18 +02:00
99ed2bb7fa Feature: sway/window can show 'shell' parameter 2022-08-10 10:34:51 +02:00
ddd5b4e157 refactor 2022-08-07 15:29:42 -04:00
e9e5780aae Calendar scrolling opportunity 2022-08-06 13:55:20 +03:00
061ad13082 Bug: tripple click uses wrong event type 2022-08-06 13:52:00 +03:00
77bea7c182 Merge pull request #1631 from m-braunschweig/filename
mpd: add filename formatter
2022-08-04 10:05:14 +02:00
c2ab2e6d19 Merge pull request #1627 from datMaffin/master
sni: Use the pixmap if for the given icon name an icon could not be found
2022-08-04 10:04:48 +02:00
11239a4900 mpd: add filename formatter 2022-08-03 20:52:18 +02:00
95b5348c24 sni: change missing icon in theme logging from info to trace 2022-08-03 17:34:34 +02:00
9616df58da Merge branch 'Alexays:master' into dsp 2022-08-01 03:30:45 +00:00
7b115913de Merge pull request #1638 from ErikReider/master 2022-07-31 21:27:05 +02:00
4029c5423f Added UPower to README 2022-07-31 10:56:42 +02:00
3996764880 Merge pull request #1637 from jbeich/ci 2022-07-30 09:09:26 +02:00
60821257ac chore(ci): adjust FreeBSD to follow upstream recommendations
- use macos-12 as macos-10.15 will be removed on 2022-08-30
- use major version to transparently pick up updates
2022-07-29 20:05:24 +00:00
e14005a6aa Fix binary pow formatting for values between 1000 and 1024 2022-07-21 16:37:43 -04:00
15dbe8965e fix Linter error 2022-07-19 22:36:59 -04:00
decc5bcd68 namespace cleanup 2022-07-19 22:34:35 -04:00
92870cab2a namespace cleanup 2022-07-19 22:30:42 -04:00
4cb2cc9f21 fix Linter errors 2022-07-19 21:54:36 -04:00
02df861829 fix Linter errors 2022-07-19 21:53:32 -04:00
23eaffc04b fix Linter errors 2022-07-19 21:49:56 -04:00
714451e4f9 cleanup 2022-07-19 19:40:23 -04:00
4cd6024f07 move issue from comment to Issues 2022-07-19 19:36:48 -04:00
8b5f42d934 remove unnecessary libprocps dependency 2022-07-19 19:27:39 -04:00
b65c976bc1 fix build type 2022-07-19 01:41:32 -04:00
5e7c9378df update fork 2022-07-19 01:40:05 -04:00
a9569e7d5c Merge branch 'dsp' of https://github.com/kennypm/Waybar into dsp 2022-07-19 01:39:19 -04:00
318a6e0969 fix segfault when stopping JACK2 server 2022-07-19 01:38:56 -04:00
a1d046b2e7 Update README.md 2022-07-19 01:38:56 -04:00
c7b09eea11 changed callbacks to use static_cast 2022-07-19 01:38:56 -04:00
bc8517fd08 fix callbacks 2022-07-19 01:38:56 -04:00
9439e4183c fix callbacks 2022-07-19 01:38:56 -04:00
8fc8bb40bf Initial commit for Waybar JACK monitoring module
-DSP load
  -xruns
  -connected/disconnected state
  -only tested with Pipewire so far but should work with JACK2 as well

 On branch dsp
 Changes to be committed:
	modified:   include/factory.hpp
	new file:   include/modules/jack.hpp
	modified:   meson.build
	modified:   meson_options.txt
	modified:   src/factory.cpp
	new file:   src/modules/jack.cpp
2022-07-19 01:38:35 -04:00
d906080f26 Merge pull request #1617 from alebastr/fmt-9
fix: adapt to fmt 9.0.0 breaking changes
2022-07-18 10:00:46 +02:00
04d66de866 sni: remove unnecesary parameter 2022-07-17 22:20:24 +02:00
699f732146 sni: Remove unnecessary getIconByName call 2022-07-17 22:15:14 +02:00
f437bf96e3 sni: Prefer system icons over pixmap 2022-07-17 22:15:12 +02:00
fc9a390977 sni: Use the given pixmap even if there is a name given 2022-07-17 22:14:57 +02:00
56a45e962b Merge pull request #1628 from carlosV2/master 2022-07-17 18:15:23 +02:00
48d2759df5 add layout as class to language module 2022-07-17 16:13:32 +01:00
1116ff0d67 Merge pull request #1624 from ersen0/fix-man
battery: fix wrong definition for "format"
2022-07-15 10:44:09 +02:00
0c04aea108 battery: fix wrong definition for "format" 2022-07-15 11:01:14 +03:00
a44622aa9f fix: fmt 9.x deprecation warning for implicit enum conversions 2022-07-13 22:36:37 -07:00
3117aefdf3 fix: drop conditionals for ancient fmt versions 2022-07-13 22:36:33 -07:00
24a8332b62 fix: adapt to fmt 9.0.0 breaking changes 2022-07-13 22:36:32 -07:00
84e7689521 Merge pull request #1621 from jbeich/ci 2022-07-14 07:33:06 +02:00
0708573fa4 chore(ci): upgrade FreeBSD to 13.1
FreeBSD doesn't support /latest and /quarterly package repos on EOL
versions. 13.0 reaches EOL on 2022-08-31, so avoid CI breakage.
2022-07-13 21:26:45 +00:00
08d472d1b1 Merge pull request #1612 from LukashonakV/Gentoo_CI
New Gentoo CI
2022-07-12 16:24:10 +02:00
c35f91ed7a Update linux.yml
New Gentoo CI container
2022-07-06 09:50:21 +00:00
9c3af1b6ad Gentoo docker file 2022-07-06 09:47:24 +00:00
17b60bc737 minor changes 2022-07-01 15:35:25 +02:00
c1f92d2a3c added workspaces 2022-07-01 15:16:54 +02:00
72f478c195 added backend and hyprland/window 2022-07-01 12:46:28 +02:00
5128a5d9f3 Merge pull request #1599 from LukashonakV/ISSUE#1565
Last weekday applies Unix fmt
2022-06-27 10:18:12 +02:00
36aa22189b Last weekday applies Unix fmt 2022-06-24 16:44:06 +03:00
d10d9b8202 Merge pull request #1590 from qubidt/pulseaudio-fix
pulseaudio: avoid retaining outdated form factor
2022-06-15 09:15:50 +02:00
e57899c0c5 pulseaudio: avoid retaining outdated form factor
when the module fails to get the pulseaudio device form factor, the
module persists the existing value, resulting in the incorrect
format-icon being used to format the label on device changes.

reset the form factor value so that the icon lookup properly falls back
to "default" when missing
2022-06-14 13:57:03 -05:00
249c0aad73 fix: lint 2022-06-14 09:17:40 +02:00
18a4f87a59 Merge pull request #1588 from qubidt/custom-module-class
Retain instance name css class for custom modules
2022-06-14 09:15:42 +02:00
458c03bf95 retain instance name css class for custom modules
When adding a custom module with a name, e.g.:

```jsonc
{
  ...,
  "custom/foo#bar": { },
  ...
}
```

The custom module does not retain the `bar` class as it should, because
all the classes are replaced with the runtime output:

1b4a7b02f4/src/modules/custom.cpp (L141-L147)

Avoid removing the module instance name class so css class behavior is
consistent between all modules.
2022-06-13 16:10:41 -05:00
1b4a7b02f4 Merge pull request #1575 from cosandr/bandwidth-update
Add total bandwidth formatting options
2022-06-11 11:45:18 +02:00
fb2ac8a765 Merge pull request #1580 from tiosgz/river-mode-readme
README.md: add river/mode to feature list
2022-06-02 16:48:46 +02:00
13100326b0 README.md: add river/mode to feature list 2022-06-02 14:36:18 +00:00
ca0d35286d Merge pull request #1579 from tiosgz/river-mode
river/mode: new module
2022-06-02 14:22:21 +02:00
f3a049c6df river/mode: new module
This module shows river's current mapping mode (e.g. normal, locked).
2022-06-01 15:35:08 +00:00
074b7c4b99 Merge pull request #1578 from NickHastings/readme-river
Advertise river modules
2022-06-01 10:18:03 +02:00
b24fd35add Advertise river modules 2022-06-01 09:10:26 +09:00
c27dab9379 Merge pull request #1576 from daangoossens22/fix_bluetooth 2022-05-28 15:28:20 +02:00
6857691679 style(bluetooth): apply project style 2022-05-28 12:58:37 +02:00
a475be7cf7 feat(bluetooth): add format-icons 2022-05-28 12:35:33 +02:00
00c11c64ca fix(bluetooth): tooltip-format-connected-battery 2022-05-28 12:33:47 +02:00
4e2305639b Add option for displaying total bandwidth 2022-05-28 10:54:10 +02:00
e0f29dbf71 Add bandwidth in bytes to 5 waybar-network 2022-05-28 10:39:43 +02:00
36d3d511d6 Merge pull request #1571 from daangoossens22/position_bar
fix: vertical bar not anchored when width is set
2022-05-25 16:42:20 +02:00
ae9fb57790 fix: vertical bar not anchored when width is set 2022-05-25 16:09:21 +02:00
b8ee448e71 Merge pull request #1567 from jbeich/freebsd 2022-05-23 20:47:45 +02:00
632058a4f6 chore(ci): test upower module on freebsd 2022-05-23 16:33:48 +00:00
d25278f710 fix(upower): add missing include for libc++
In file included from src/modules/upower/upower.cpp:1:
include/modules/upower/upower.hpp:25:16: error: no template named 'unordered_map' in namespace 'std'
  typedef std::unordered_map<std::string, UpDevice *> Devices;
          ~~~~~^
In file included from src/modules/upower/upower_tooltip.cpp:1:
include/modules/upower/upower_tooltip.hpp:13:16: error: no template named 'unordered_map' in namespace 'std'
  typedef std::unordered_map<std::string, UpDevice*> Devices;
          ~~~~~^
2022-05-23 16:27:32 +00:00
2dfd64e1c9 Merge pull request #1566 from ErikReider/master
Added gamemode man file to meson
2022-05-23 14:43:58 +02:00
3c182c9ca9 Added gamemode man file to meson 2022-05-23 14:13:30 +02:00
aa5f55bbe3 chore: v0.9.13 2022-05-23 13:54:24 +02:00
7ab9a560ae fix: lint 2022-05-23 13:47:14 +02:00
a5299af3c2 Merge pull request #1562 from trevnels/river-window
River Window Module
2022-05-23 13:43:28 +02:00
4d1aeb7eb8 Merge pull request #1525 from FlexW/feature/icon-heuristics
sway/window: Add heuristics for finding icons
2022-05-23 13:42:26 +02:00
38a846ae51 Merge pull request #1555 from LukashonakV/ISSUE#1552
Calendar module: localization issue #1552
2022-05-23 13:40:48 +02:00
03bbc9df64 Merge pull request #1554 from ErikReider/gamemode-module
Gamemode Module
2022-05-23 13:40:09 +02:00
1e4fe0bee8 Merge pull request #1557 from LukashonakV/ISSUE#1556
Issue#1556. Battery module: a lot of warnings when battery dissapears
2022-05-23 13:39:23 +02:00
5e2067d51f Merge pull request #1563 from groknull/crash-on-empty-cpuvec
Prevent segfault in getCpuFrequency
2022-05-23 13:38:53 +02:00
7ea0a2348b Man page example now uses default values 2022-05-21 12:08:05 +02:00
fd306e184a Added man page 2022-05-21 12:06:45 +02:00
f4f2989e85 Added tooltip-format 2022-05-21 12:02:45 +02:00
8d4c7176f8 Renamed not-running-bide to hide-not-running 2022-05-21 12:02:35 +02:00
7abcbe80e5 Prevent segfault in getCpuFrequency
When parseCpuFrequencies returns an empty vector, getCpuFrequency
would attempt to dereference an invalid iterator.

Return early from getCpuFrequency when parseCpuFrequencies returns an
empty vector.

Resolves a segfault when waybar is run within a VM on apple silicon.
2022-05-19 20:01:57 -04:00
165c5a861d manpage fixes 2022-05-19 16:41:05 -04:00
d84c0f13e6 forgot to commit meson build 2022-05-19 16:33:50 -04:00
01ffe2c290 add inherited ALabel options to river window manpage 2022-05-19 15:53:25 -04:00
b900c01381 add manpage and make format option work 2022-05-19 15:32:10 -04:00
e2b676b800 add river/window module 2022-05-19 15:20:04 -04:00
7f995507fe std::filesystem::path is a string representation 2022-05-14 17:10:44 +03:00
b39a8ede6c Issue#1556. Battery module: wrong string comparison
1. battery.hpp - added local bool variable. Force to print warnings the
only once in order to warn user about wrong battery configuraion. And
does not bring a mess when the battery is turned off (gamepads, etc.)
2. dir_name is an object which takes a part in comparison. So converted to the string.
2022-05-14 16:56:46 +03:00
315ea991bc Calendar module: localization issue #1552 Linter #60 2022-05-13 23:56:08 +03:00
bd0f6128d3 Revert "Waybar. Issue#1552. Calendar module, LC_TIME variable"
This reverts commit 7b7ee41e13.
2022-05-13 22:58:38 +03:00
5a014305ec Revert "Issue#1552. Calendar module, LC_TIME variable"
This reverts commit 448b413eca.
2022-05-13 22:58:00 +03:00
3411236697 Initial implementation 2022-05-13 21:30:45 +02:00
e615612bf4 Calendar module: localization issue #1552 2022-05-13 18:51:32 +03:00
448b413eca Issue#1552. Calendar module, LC_TIME variable 2022-05-13 12:54:18 +03:00
7b7ee41e13 Waybar. Issue#1552. Calendar module, LC_TIME variable 2022-05-12 19:04:45 +03:00
9bc821bdac Merge pull request #1551 from loserMcloser/keyboard-state-css-classes
Add classes to individual keyboard state labels
2022-05-12 13:55:32 +02:00
bfcb936d87 Add classes to individual keyboard state labels 2022-05-11 08:08:28 -06:00
3d023a0421 Merge pull request #1540 from daangoossens22/bluetooth
feat: extend bluetooth module
2022-05-11 09:26:38 +02:00
e235f48245 feat: hide module if empty 2022-05-07 13:42:27 +02:00
3043d42a89 style: apply projects clang-format 2022-05-06 17:01:43 +02:00
733fb8c62a docs: update + add experimental section 2022-05-06 16:43:53 +02:00
954bed3f5e refactor: adapter renamed to controller
Since it is also called controller in bluetoothctl
2022-05-06 16:37:48 +02:00
13df878bc3 refactor: logic for enumerating devices in tooltip 2022-05-06 16:37:40 +02:00
4592dd4a6c Merge pull request #1527 from siikamiika/network-current-iface-bandwidth
network: calculate bandwidth for current interface
2022-05-05 09:44:44 +02:00
794610a1ca feat: display all connected devices in tooltip 2022-05-04 19:27:39 +02:00
7bbf7c99a3 fix: lint 2022-05-04 17:29:08 +02:00
eec0a8255f Merge pull request #1454 from Psykar/idle_inhibitor_timeout
Add a config to set a timeout for the idle_inhibitor module
2022-05-04 17:27:21 +02:00
638b4e6573 feat: extend bluetooth module 2022-05-02 18:11:21 +02:00
caee2e611f Merge pull request #1530 from qubidt/backlight-fix
Backlight: avoid crash on getting brightness fails
2022-04-22 09:17:54 +02:00
96746142d2 Backlight: don't reset value when failing to read
Avoids the brightness percentage resetting to 0 on intermittent failures
2022-04-21 22:19:05 -05:00
1af7191740 Backlight: avoid crash on getting brightness fails
Reading brightness value for backlight device can fail intermittently
(particularly when using ddcci-driver-linux). Handle this more
gracefully rather than crashing
2022-04-21 22:02:45 -05:00
89be55b00b Merge pull request #1510 from towoe/sway-bar-show
Show hidden bar
2022-04-20 05:13:53 +02:00
23369aa14c Merge pull request #1500 from RobertMueller2/clock-thread-sleep
Replace sleep_until with sleep_for to prevent clock from getting stuck with system time adjustment
2022-04-20 05:11:49 +02:00
a16e54573e Merge pull request #1524 from berbiche/fix/gtk-layer-shell-anchors
bar: don't set layer-shell anchor for edges when width is not 'auto'
2022-04-20 05:09:36 +02:00
7231c47244 network: calculate bandwidth for current interface 2022-04-18 13:56:30 +03:00
6184e43c84 Merge pull request #1523 from FlexW/feature/icon-size
sway/window: Allow the user to change the size of the app icon
2022-04-18 08:59:36 +02:00
3f123d9c4e sway/window: Add heuristics for finding icons
This adds heuristics for finding the applications icon.
2022-04-18 03:09:25 +02:00
6851e26450 bar: don't set layer-shell anchor for edges
Don't set the anchor for certain edges when the width or the height
is not set to a value of 'auto' (1).

When the bar is vertical, the top and bottom edges are not anchored
otherwise the left and right edges are not anchored.

This resolves an issue wherein the width and height set for the
layer-shell were ignored because the layer was set to anchor to all
edges.
2022-04-17 18:19:36 -04:00
fc6f5741b1 sway/window: Allow the user to change the size of the app icon
Fixes #1461
2022-04-17 23:57:57 +02:00
264e2c3983 Merge pull request #1522 from FlexW/bugfix/app-icon 2022-04-17 23:32:59 +02:00
45988b3dbb Sway/window: Only update icon from main thread
If Gtk objects get updated from other threads than the main thread GTK
can get confused. This is a regression of bcadf64031.

Fixes #1464, #1474
2022-04-17 22:55:58 +02:00
4e3f91d237 Issue 1226/1497: align updates with times divisible by interval 2022-04-16 14:21:28 +02:00
e5d05baba3 Issue 1226/1497: Replace sleep_until with sleep_for to prevent clock from getting stuck with system time adjustment 2022-04-16 14:21:28 +02:00
7763d50691 Add reset behaviour of modifier key
Add an option to change the behaviour of the modifier key to reset the
visibility.
2022-04-15 20:04:58 +02:00
5a0e42cc76 Limit visibility updates
Prevent visibility updates to occur for inactive modules.
Check active modules and subscribe to only those events.
2022-04-15 20:04:56 +02:00
1dcd36b06c Show bar on sway mode
Display the bar if the sway mode is not the default mode.
2022-04-15 19:58:50 +02:00
93f9b3d213 Clear urgency hint with modifier press
If the modifier is pressed and release without another event, the
intended behaviour is to clear an urgency hint and hide the bar again.

Note that if multiple workspaces have the urgency hint set, the bar is
hidden again and an urgent workspace is focused, the bar does not stay
hidden anymore.
2022-04-15 19:55:06 +02:00
54b1df69a9 fix: lint clock 2022-04-15 14:39:13 +02:00
73cd156a7a Merge pull request #1492 from LukashonakV/master
#1315. Add option to display week number on calendar
2022-04-15 14:37:46 +02:00
e3700b924e Show bar if a workspace becomes urgent
Add a second reason to show the bar besides visible by modifier.
Update the visibility based on changes in the workspace urgency.
Check all workspaces for urgency and keep the bar visible if at least
one has an urgency hint.
2022-04-14 19:08:11 +02:00
d87cf8a8f2 Merge pull request #1518 from towoe/bluetooth-format
Add disabled bluetooth style
2022-04-12 10:35:54 +02:00
e8b022c096 Add disabled bluetooth style
Allow to set a different style if the bluetooth adapter is disabled.
2022-04-12 10:31:20 +02:00
503fe9a7ea Merge pull request #1516 from alebastr/ipc-enum-type
refactor: change `enum ipc_command_type` to uint32_t
2022-04-11 08:49:43 +02:00
b812596080 Update lint.yml 2022-04-11 08:49:20 +02:00
13fdbc13c3 refactor: change enum ipc_command_type to uint32_t
As we always use the enum to compare or initialize uint32_t values, it
would be better to declare it with the right type. This way we could
avoid `-Wnarrowing` warnings or unnecessary type casts.
2022-04-10 12:52:46 -07:00
1071b9f7c5 Add a config to set a timeout for the idle_inhibitor module 2022-04-10 22:47:52 +09:30
6ad1f6b853 Merge branch 'master' into master 2022-04-10 09:54:50 +00:00
a1129c4c87 fix: bsd 2022-04-06 14:55:08 +02:00
2e12ea6a81 fix: add missing include 2022-04-06 08:43:31 +02:00
f2fcadbf62 refactor: lint 2022-04-06 08:37:19 +02:00
168ba2ca5b Create lint.yml 2022-04-06 08:27:52 +02:00
46f07d24dd Merge branch 'master' into master 2022-04-05 15:28:55 +00:00
ed3e2ffdc3 Merge pull request #1499 from LukashonakV/ISSUE#1068
Waybar. Issue#1068. Double/Triple events
2022-04-05 16:40:52 +02:00
d5b76bd8b5 Merge pull request #1495 from 0cc4m/master
Battery module support for rk817
2022-04-05 16:39:08 +02:00
1d03034fbb Merge pull request #1493 from ErikReider/upower-fixes
Upower fixes
2022-04-05 16:37:36 +02:00
e094480684 Very basic hypr window title module 2022-04-02 21:08:43 +02:00
f4cc088d2f Waybar. Issue#1068. Double/Triple events. Removed unnecessary including 2022-03-29 13:47:38 +03:00
b086e2f995 Waybar. Issue#1068. Double/Triple events 2022-03-29 12:26:05 +03:00
4a457648f9 Waybar. Clock module. Calendar - custom output formats 2022-03-27 11:15:56 +03:00
3a95f8f599 Add battery module fallback for batteries without capacity or with _avg instead of _cur files 2022-03-26 19:42:06 +01:00
a7ed1ed570 Don't call dp.emit() when UPower service active status changes 2022-03-25 17:35:37 +01:00
e0f0931e2d Hide module if UPower service isn't running 2022-03-25 17:27:36 +01:00
0140606226 Fixed segfault on upower service restart 2022-03-25 16:57:25 +01:00
1d2a381b5f Waybar. Clock module - weeknum fix for the left side 2022-03-25 18:51:59 +03:00
d1d73b5003 Added missing "fulL" and "empty" CSS classes 2022-03-25 14:57:04 +01:00
9dc09d2702 Added upower man page into man_files meson variable 2022-03-25 14:53:46 +01:00
2ca4dcac49 Set box widget name to "upower" 2022-03-25 14:52:12 +01:00
2d87bcb1ab https://github.com/Alexays/Waybar/issues/1315. Option to display week number on calendar 2022-03-24 15:41:50 +03:00
d4a07483b2 Merge pull request #1484 from ErikReider/upower-module
Upower module
2022-03-22 10:00:28 +01:00
84dc82e1c1 Added tooltip-padding 2022-03-21 13:50:46 +01:00
e06316c80b Only set label text if string doesn't only contain spaces 2022-03-20 00:36:53 +01:00
7b071567ea Removed goto in update method 2022-03-20 00:36:13 +01:00
2633ff3fb9 Fixed time_left string not being set properly 2022-03-19 23:10:15 +01:00
0764e9ad6e Added format and format-alt config properties 2022-03-19 21:15:48 +01:00
c4282cfacc Made tooltip getDeviceIcon return const string 2022-03-19 19:22:21 +01:00
05effad18b Added CSS status classes 2022-03-19 19:22:00 +01:00
5f19a54deb Added man page 2022-03-19 17:25:43 +01:00
7fac2afb85 Added custom tooltip with device icon, device name and battery status 2022-03-19 17:09:55 +01:00
4196e0d5d1 Unref all devices on destruct 2022-03-19 11:35:13 +01:00
14a2a7027f Moved upower into its own directory 2022-03-19 11:34:34 +01:00
2b2ac311d5 Fixed not visible when only battery is plugged in 2022-03-19 11:19:39 +01:00
d7a030daf3 Lowered default icon size to 20 2022-03-19 11:19:08 +01:00
7345918f84 Added mutex locking to resetDevices 2022-03-19 11:18:51 +01:00
105f1cefe1 Fixed device unrefed 2022-03-19 10:52:05 +01:00
175d82858b Merge branch 'upower-module' of github.com:ErikReider/Waybar into upower-module 2022-03-19 10:48:43 +01:00
c8d785071f Merge branch 'master' into upower-module 2022-03-19 10:48:02 +01:00
8c6063d181 Merge pull request #1485 from LukashonakV/master
Hide/Unhide temperature module when "format*" is empty.
2022-03-19 10:24:59 +01:00
799125fb73 Merge pull request #1489 from momokrono/master
feat: added network speed in Bytes
2022-03-19 10:24:26 +01:00
fcf93a6c45 feat: added network speed in Bytes 2022-03-18 10:35:19 +01:00
6946288053 PR #1485 review 2022-03-17 11:31:06 +03:00
2a563f54e7 Change name to upower 2022-03-16 15:33:39 +01:00
9f337db2d2 Hide/Unhide module when "format*" is empty. 2022-03-16 15:50:00 +03:00
136b47ce0d Fixed percentage not getting rounded 2022-03-15 23:03:13 +01:00
6eb187a23e Moved upower.*pp out of the upower directories 2022-03-15 23:00:09 +01:00
9b9e42fc5f use device variable instead of getting the device from the map 2022-03-15 22:50:11 +01:00
d47073ef13 Reload all devices after wake from suspend 2022-03-15 22:49:40 +01:00
5396ffb71f Added "icon-size" and "hide-if-empty" config options 2022-03-15 20:22:32 +01:00
5e9faeb2d0 Now shows the percentage and the correct icon 2022-03-15 20:22:04 +01:00
4ee81c8dea Added all callbacks 2022-03-15 17:54:06 +01:00
a37ef74fb1 Merge pull request #1479 from dorgnarg/master
Use user-defined mode when toggling visibility rather than resetting to default
2022-03-15 09:06:08 +01:00
07034d561c Merge pull request #1481 from LukashonakV/master
Battery module. Gamepads support
2022-03-14 17:42:26 +01:00
37d87be3c1 Add supporting of the gamepads batteries 2022-03-14 17:53:19 +03:00
8aee7492d4 Plug/Unplug batteries on hot(useful for gamepads) 2022-03-14 17:12:05 +03:00
5c1c07a035 Merge pull request #1480 from avdv/xkb-load-exotic-rules
sway/language: Load exotic xkb rules too
2022-03-13 22:32:00 +01:00
caa24f0647 sway/language: Load exotic xkb rules too 2022-03-13 09:40:32 +01:00
f4c6dfcddc Uses user-defined mode when toggling visibility rather than resetting to default mode 2022-03-12 13:32:08 -07:00
2b3fc3acff Merge pull request #1478 from Artturin/moonemoji 2022-03-12 16:03:50 +01:00
25536f70a4 use moon phases for backlight format-icons 2022-03-12 16:05:06 +02:00
74ca1a42c6 Merge pull request #1476 from Psykar/fix-bsd-action
Fix freebsd action
2022-03-10 15:00:32 +01:00
8b6bc215cc Fix freebsd action 2022-03-10 14:48:40 +01:00
3c1ba0a240 chore: v0.9.12 2022-03-10 09:53:25 +01:00
6c7acf18b5 Update network.cpp 2022-03-10 09:53:02 +01:00
ead1b2f0dc Merge pull request #1467 from Pound-Hash/docs
Edited README
2022-03-10 09:51:12 +01:00
115c6e36e6 chore: v0.9.11 2022-03-10 09:50:04 +01:00
210f4454f0 Update waybar-sway-window.5.scd 2022-03-10 09:49:14 +01:00
77d8376fef refactor: disable icon by default 2022-03-10 09:48:50 +01:00
0e580236ce Fixed English mechanics: grammar, punctuation, and styling. 2022-03-08 15:52:20 -08:00
1aa7587cac Merge pull request #1333 from dartkron/list_of_times
Feature Clock: show list of time in other timezones in a tooltip
2022-03-08 10:00:04 +01:00
b6655e475b Merge branch 'master' into list_of_times 2022-03-08 09:59:22 +01:00
903fc2b6a2 Merge pull request #1459 from grmat/master
man: document icon in sway/window module
2022-03-07 15:17:35 +01:00
50fc63b749 man: document icon in sway/window module
Default changed in bcadf64031 and it
wasn't documented.
2022-03-07 14:56:37 +01:00
383d999fec chore: v0.9.10 2022-03-06 14:54:48 +01:00
56ebb09e5f Merge pull request #1440 from TheDaemoness/patch-1
Add 1 to songPosition in the MPD module
2022-03-06 14:51:20 +01:00
35d6da3965 Merge pull request #1292 from FlexW/feature/sway-app-icon
Show application icon when using sway window module
2022-03-06 14:50:41 +01:00
be1d2a02ca Merge pull request #1422 from technic/fixes
minor string utils methods refactoring
2022-03-06 14:50:02 +01:00
5e7ba0c9e3 Merge pull request #1445 from GrantMoyer/keyboard_state_errors
Improve keyboard_state error messages
2022-03-06 14:49:38 +01:00
18717d4b12 Merge remote-tracking branch 'upstream/master' into keyboard_state_errors 2022-03-04 12:14:23 -05:00
4dc1989744 Merge pull request #1451 from euclio/use-after-free 2022-03-04 06:10:25 +01:00
54085dbde0 avoid use-after-free in lambda 2022-03-03 19:40:43 -05:00
4635e8c5f8 Merge pull request #1450 from Xiretza/style-css-use-fontawesome 2022-03-03 18:38:05 +01:00
adc67b6f75 style.css: add fontawesome to beginning of font list
If there is some other font installed that 1) matches the four existing
font families and 2) provides its own glyph in the private use area used
by Awesome, then that font's glyph will be used instead of the intended
icon.

For example, the following character (U+F001, "music"): 
...looks like a pair of musical notes in fontawesome, but DejaVu Sans
also provides a glyph, which looks like a couple of squares. DejaVu Sans
matches first when "sans-serif" is requested, so its (unrelated) glyph
is used.
2022-03-03 18:18:21 +01:00
ebe4424795 Fix remaining posix compatability issues in keyboard_state 2022-02-25 13:28:47 -05:00
e3f56b8110 Don't use gnu extensions which are too new for debian and ubuntu 2022-02-25 13:13:43 -05:00
8f3fbebede Make error messages portable 2022-02-25 12:56:22 -05:00
a595b61e0f Improve keyboard_state error messages 2022-02-25 12:27:08 -05:00
ccce2b700b fix segfault when stopping JACK2 server 2022-02-24 02:46:45 -05:00
91339f6ad4 Merge pull request #1444 from bd-g/feat/cpu-load-fix
CPU Load Formatting Fix
2022-02-23 09:12:53 +01:00
41dea6e46c Merge branch 'master' into feat/image-module 2022-02-22 23:40:59 +00:00
3c18c43b9a limit cpu load figure to 2 points 2022-02-22 16:33:33 -07:00
ac20428fdf Add 1 to songPosition in the MPD module 2022-02-18 17:41:33 -08:00
65c3f0a132 Merge branch 'dsp' of https://github.com/kennypm/Waybar into dsp 2022-02-18 02:14:51 -05:00
e6262b870c changed callbacks to use static_cast 2022-02-18 02:13:43 -05:00
ad5ea7ad2b Merge pull request #1436 from jbeich/ci 2022-02-13 18:13:42 +01:00
851508df5e ci: explicitly install wayland-protocols on FreeBSD
meson.build:86:0: ERROR: Dependency "wayland-protocols" not found, tried pkgconfig
2022-02-13 11:14:35 +00:00
fc818dd794 ci: update freebsd-vm to 0.1.6 2022-02-13 11:12:52 +00:00
823ed887ab Update README.md 2022-02-12 05:53:32 -05:00
3bf815f6de fix callbacks 2022-02-12 01:52:51 -05:00
c1cda1553a fix callbacks 2022-02-12 01:51:11 -05:00
f6ee90e5ba Merge branch 'dsp' of https://github.com/kennypm/Waybar into dsp 2022-02-12 01:49:14 -05:00
e066e3080e Merge pull request #1432 from DorianRudolph/fix-unplug
fix #1431: audio output does not update on unplug
2022-02-09 15:29:36 +01:00
1a93a6cfa5 fix #1431: audio output does not update on unplug 2022-02-09 14:20:09 +01:00
d5c400c0cc Initial commit for Waybar JACK monitoring module
-DSP load
  -xruns
  -connected/disconnected state
  -only tested with Pipewire so far but should work with JACK2 as well

 On branch dsp
 Changes to be committed:
	modified:   include/factory.hpp
	new file:   include/modules/jack.hpp
	modified:   meson.build
	modified:   meson_options.txt
	modified:   src/factory.cpp
	new file:   src/modules/jack.cpp
2022-02-09 02:53:52 -05:00
074b559da5 Merge pull request #1423 from technic/fmt-refactor
move Glib ustring format helper to utils
2022-02-08 18:25:55 +01:00
7a61a00fb3 Merge pull request #1421 from gemmelos/patch-2
Update man page clock module - tooltip
2022-02-08 18:25:13 +01:00
d4da04a750 move Glib ustring format helper to utils
this formatter is useful for other modules
which want to print Glib exceptions messages
2022-02-05 21:26:48 +01:00
f3819ee954 remove duplicated string manipulation methods 2022-02-05 21:02:58 +01:00
2697d432a4 ltrim and rtrim take argument by const-ref 2022-02-05 21:02:58 +01:00
061cb76fc4 make functions in header file inline
added header guard
now string utils can be used in any part of the project
2022-02-05 21:02:58 +01:00
6c188455a4 Update man page clock module - tooltip
Add tooltip documentation to the clock man page now that this is works.
2022-02-05 19:05:50 +01:00
12caae8fd2 Merge pull request #1410 from ErikReider/reverse-tray
Reverse the tray icon order
2022-02-02 12:56:25 +01:00
26ea6fae32 Merge pull request #1413 from snehrbass/patch-1
Fix typo in example for sway/mode man page
2022-02-02 12:55:34 +01:00
26419e45b7 Merge pull request #1418 from gemmelos/patch-1
Fix disabled tooltip on clock module
2022-02-02 12:55:10 +01:00
6be741afc9 Fix disabled tooltip on clock module
Seems like the tooltip text should only be set if both `if (tooltipEnabled())` and `if (config_["tooltip-format"].isString())` passes.
2022-02-02 12:41:06 +01:00
c80cc873af Update spotify example to work on copy paste 2022-02-02 00:01:18 -05:00
2b42872b6c Merge pull request #1417 from evyatark2/master 2022-02-01 22:00:29 +01:00
895bc878f8 Properly initialize distance_scrolled members.
When they were uninitialized it caused getScrollDir() to incorrectly return SCROLL_DIR::NONE in some circumstances
2022-02-01 22:42:03 +02:00
a0ee9e7fc1 Fix Typo in Example for sway/mode 2022-01-29 14:19:53 -05:00
941cf47693 Add config option "reverse-direction" 2022-01-28 19:14:46 +01:00
32d42749f9 use pack_end instead of pack_start 2022-01-28 18:42:52 +01:00
96caa9f094 Merge pull request #1406 from Spiffyk/language-segfault
sway/language: fix segmentation fault for layouts not found in XKBContext
2022-01-25 23:08:32 +01:00
f4f1267a71 sway/language: fix segmentation fault for layouts not found in XKBContext 2022-01-25 20:03:19 +01:00
bcadf64031 Show application icon when using sway window module
Signed-off-by: Felix Weilbach <felix.weilbach@t-online.de>
2022-01-24 17:37:51 +01:00
8974bbf7b4 Merge pull request #1312 from mazunki/master
Changed a setting to include {gwaddr} by default
2022-01-24 09:23:43 +01:00
1c08d26af0 Merge branch 'master' into master 2022-01-24 09:23:23 +01:00
c4cc7ae396 Update client.cpp 2022-01-24 09:22:47 +01:00
65dd245362 Update clock.cpp 2022-01-24 09:21:56 +01:00
667d0a45f4 Update command.hpp 2022-01-24 09:20:43 +01:00
53fc750fc3 Merge pull request #1404 from kevinoid/fix-issue-1139 2022-01-24 09:02:53 +01:00
27df7a9aa7 battery: read status with spaces
According to the [sysfs class power ABI],
/sys/class/power_supply/<supply_name>/status may contain "Not charging".
This is already handled by status_gt() and update() (where ' ' is
converted to '-' for use in config keys) but was not being read due to
skipws.  Read with std::getline() to handle this case.

[sysfs class power ABI]: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-power

Fixes: #1139
Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
2022-01-23 18:36:59 -07:00
d575646c2d Merge pull request #1394 from nullobsi/patch-1
fix: Use locale when formatting clock
2022-01-18 11:35:55 +01:00
a650c7d90c feat: image module
Module which renders an image onto the bar.
2022-01-16 23:55:13 +00:00
3a6e5be59d Use locale when formatting clock 2022-01-14 10:36:24 -08:00
81f0bcb3a3 Merge pull request #1388 from ericonr/man2
fix(man): add missing newlines to wlr docs.
2022-01-12 11:09:09 +01:00
9ae99c2621 Merge pull request #1386 from Anakael/pr/anakael/add-swap-flags
[Memory] feat: Add swap flags
2022-01-12 11:08:50 +01:00
5abdecc402 fix(man): add missing newlines to wlr docs. 2022-01-11 17:29:17 -03:00
1540797cd9 chore: v0.9.9 2022-01-10 09:58:29 +01:00
5d8bc35476 Merge pull request #1385 from mvdan/css-checkboxes
resources: don't break tray icon checkboxes via CSS
2022-01-09 13:25:31 +01:00
5c574975b7 resources: don't break tray icon checkboxes via CSS
These three lines break checkboxes and other forms of UI in status
indicator dropdowns. For instance, they break checkboxes on
NetworkManager's "nm-applet --indicator" via libappindicator-gtk3.

First, disabling borders completely hides those UI elements,
as they seem to render entirely via borders.
Second, min-height makes checkboxes just flat lines.

When removed entirely, the border settings seem to have had an effect on
the workspaces widget, which now renders with round underline borders.
To undo that, re-add those two lines inside its section.

The min-height setting doesn't seem to affect anything that I can see.
Remove it entirely, for now.

Fixes #1148.
2022-01-09 10:32:16 +00:00
18cbd2aa1a Merge pull request #1380 from alebastr/fmt-build-fix
Fix build with fmt 8.1.0
2022-01-08 13:48:41 +01:00
ce404199de chore: add tzdata to the alpine builder
Fixes date formatting test execution on alpine.
2022-01-07 22:50:23 -08:00
7f6bef2049 fix(util): make waybar_time formatter compatible with fmt 8.1.0
Stop using private implementation details of the `formatter<std::tm>`.
We never needed anything from the class besides the format specifier,
which is easily obtainable with public API.
2022-01-07 22:34:00 -08:00
1489a539f8 chore: bump supported fmt ver to 7.0.0
Certain features we use were added only in 7.0 and the code no longer
compiles with any earlier versions.
2022-01-07 22:33:52 -08:00
766c8a1035 test: add tests for waybar_time formatter 2022-01-07 22:33:50 -08:00
8c41aaae04 refactor(test): use single executable 2022-01-07 19:21:51 -08:00
c0d84853ea refactor(clock): extract waybar_time to util/waybar_time.hpp 2022-01-07 18:09:44 -08:00
2301788a81 created a hotfix for libfmt-8.1.0 and above 2022-01-08 01:44:46 +01:00
d22d6a4522 Merge branch 'master' of github.com:Alexays/Waybar 2022-01-08 01:02:57 +01:00
d9b5c2595a Merge pull request #1376 from languitar/bugfix/sway-workspace-sorting
fix: match sway workspace order with sway one
2022-01-07 10:30:19 +01:00
4a85ec0f59 fix: match sway workspace order with sway one
Ensure that sway workspaces are always displayed in the same order as
used internally by sway. The previous sorting code always sorted
unnumbered workspaces lexicographically. This isn't the order used by
sway internally. Therefore, commands such as "workspace next" might have
jumped arbitrarily in waybar.

This commit reworks the sorting code such that the internal order is
always obeyed. Additionally, numbered persistent workspaces are inserted
at their natural position at the front of the workspace list while
unnumbered ones are appended. This should match the expectations of
workspace ordering known from sway's behavior.

The changes make the configuration property "numeric-first" unnecessary
as this will always be the case now. There's also no reasonable way
around this behavior now. Otherwise, persistent workspaces would jump
around in the visual representation as soon as they become known to
sway.

Fixes #802
2022-01-07 10:26:27 +01:00
621d686310 Merge pull request #1375 from Anakael/pr/anakael/fix-invisible-application
[wlr/taskbar] fix: Missing tasks
2022-01-05 13:49:31 +01:00
812832d38a fix: Missing tasks 2022-01-05 15:38:52 +03:00
19069482e2 Merge branch 'master' of https://github.com/Alexays/Waybar into pr/anakael/fix-invisible-application 2022-01-05 14:57:32 +03:00
1e560cf0c9 merge 2022-01-05 14:47:44 +03:00
0c9cdf7e0b Merge pull request #1370 from volucris1/patch-1 2022-01-04 09:00:28 +01:00
5a4f7a70ef fix indent 2022-01-04 14:53:59 +07:00
ce56a80792 Merge pull request #1353 from bd-g/master
Network Module Enhancements
2021-12-30 10:03:04 +01:00
db95644d26 Merge pull request #1364 from ilkecan/master
Add `fixed-center` option
2021-12-30 10:01:04 +01:00
548bd2ab1a Add fixed-center option
Resolves #957
2021-12-28 16:00:25 +03:00
7b9b10afc6 Merge branch 'master' into master 2021-12-26 20:14:26 -07:00
8ec321ddaf Merge pull request #1221 from Anakael/pr/anakael/add-name-to-taskbar
[Taskbar] feat: Add name format replacementf feat: Add app ids mapping (ready for review)
2021-12-23 23:01:21 +01:00
13d25d403e add to network module - signalStrengthApp shows what applications can run at current signal strength 2021-12-14 11:37:39 -07:00
3218612d3b change frequency to GHz 2021-12-14 11:36:46 -07:00
9bc86347be change signal strength to penalize overly strong signals 2021-12-14 11:34:15 -07:00
d1f8b42d22 add Debian build dependency to README 2021-12-14 11:28:13 -07:00
0e3be30e01 Merge pull request #1352 from fhost/fhost/inhibitor-man
man: Add waybar-inhibitor man page
2021-12-14 08:47:08 +01:00
795246263f man: Add waybar-inhibitor man page 2021-12-14 08:30:28 +01:00
89a8bd976e Merge pull request #1337 from 187Qrly/patch-1
Add Gentoo to README.md
2021-12-14 07:44:07 +01:00
9b399ea2bb Merge pull request #1334 from bd-g/master
Adjust max wifi strength that is possible
2021-12-14 07:43:41 +01:00
9608e0dabf Merge pull request #1341 from fhost/fhost/logind
Add logind feature, with its 'inhibitor' module
2021-12-14 07:43:15 +01:00
1d1cfda90d Merge pull request #1289 from aashu/master
Add reverse scrolling config option for pulseaudio module
2021-12-14 07:42:13 +01:00
ad20c0af2d Merge branch 'master' into master 2021-12-14 10:22:25 +05:30
eae65099d0 Add logind feature, with its 'inhibitor' module
The logind feature adds a new inhibitor module which allows to acquire
the inhibitor locks that logind presents.

Signed-off-by: Alexis Cellier <kernelserror@gmail.com>
2021-12-12 17:52:26 +01:00
39f42cdd7e Merge pull request #1338 from jfred9/master
bar: Fix crash when unplugging HDMI
2021-12-08 10:42:22 +01:00
f573e32d0b bar: Fix crash when unplugging HDMI
There is a double delete situation which causes a SIGSEGV to happen
during destruction of bar.

This was introduced by the group feature patch.

The same object pointer is stored in two different vectors of
unique_ptr<AModule> element. Replace with shared_ptr to handle
reference counting correctly and avoid double delete.
2021-12-05 10:55:07 +01:00
5cbbd65ac4 Add Gentoo 2021-12-03 20:11:25 +01:00
2240c79b1a Adjust max wifi strength that is possible 2021-12-01 18:24:35 -07:00
ece86c96d7 Feature Clock: show list of time in other timezones in a tooltip
Introducing new tooltip placeholder: {timezoned_time_list}. It will be replaced with the list of times in different time zones.
I've found it useful to hover the mouse pointer on time and see time in all my timezones at once.
Current timezone excluding from the list, so if you will scroll over the time module and change the active timezone, this timezone will be excluded from the list and the previous active zone will be added.
2021-12-01 17:08:05 +00:00
9e8a71c4ef Merge pull request #1277 from dartkron/master
Refactor Clock: generalize multi timezones and single timezone cases
2021-12-01 11:51:35 +01:00
7069429c03 Merge pull request #1229 from kraftwerk28/sway-language-country-flag
`sway/language` country flag
2021-12-01 11:49:39 +01:00
d41a60d2d9 Merge pull request #1244 from alebastr/swaybar-ipc
Yet another swaybar ipc implementation
2021-12-01 11:48:49 +01:00
05f7727dae Merge branch 'master' into swaybar-ipc 2021-12-01 11:48:03 +01:00
9bc6fae15b Merge pull request #1331 from xytovl/per-device-pulse-icon
Allow sink in addition to source for pulse icon
2021-11-30 16:36:22 +01:00
9dac851f6d Allow sink in addition to source for pulse icon 2021-11-30 16:31:41 +01:00
b6e24bd527 Merge pull request #1305 from njoyard/feat/groups
Add module group feature
2021-11-29 15:19:48 +01:00
b6d0a4b63f feat(bar): allow customization of bar modes
Allow changing existing modes and adding new ones via `modes`
configuration key.
`modes` accepts a JSON object roughly described by the following type
```typescript
type BarMode = {
    layer: 'bottom' | 'top' | 'overlay';
    exclusive: bool;
    passthrough: bool;
    visible: bool;
};
type BarModeList = {
    [name: string]: BarMode;
};
```
and will be merged with the default modes defined in `bar.cpp`.

Note that with absence of other ways to set mode, only those defined in
the `sway-bar(5)`[1] documentation could be used right now.

[1]: https://github.com/swaywm/sway/blob/master/sway/sway-bar.5.scd
2021-11-28 12:19:45 -08:00
cf5ddb2a5e fix(swaybar-ipc): avoid unnecessary copy of struct swaybar_config 2021-11-28 11:34:21 -08:00
4b5dc1bb3a test: count copies and moves done by SafeSignal 2021-11-28 09:52:18 -08:00
22ff26252b Merge pull request #1328 from Anakael/pr/anakael/experimental-flag
build: Add experimental build option
2021-11-28 11:27:12 +01:00
a832814b41 Merge pull request #1329 from m-bdf/patch-1
mediaplayer.py: Exit properly on SIGPIPE
2021-11-28 11:26:41 +01:00
2fb671f5fa Revert protocol build 2021-11-28 01:19:21 +03:00
3c2fa1625d Finish 2021-11-28 01:12:35 +03:00
d5112678c3 mediaplayer.py: Exit properly on SIGPIPE 2021-11-27 23:07:26 +01:00
0c18e57937 add group feature 2021-11-25 12:01:17 +01:00
b4e19678b7 ci: increase FreeBSD VM memory to 2048MB
Intermittent CI failures without any useful diagnostics could be caused
by the OOM killer. 1024MB is not really enough to run 3 parallel jobs
with a modern C++ compiler.
2021-11-23 19:48:31 -08:00
8fe42ebd2e doc: update exclusive and passthrough defaults 2021-11-23 19:18:24 -08:00
bb7b376fa6 removed commented useless runtime errors 2021-11-24 01:37:21 +01:00
89afa8e149 Checking if emoji byte doesn't get out of bounds 2021-11-24 02:15:10 +02:00
59040c53e4 Move definition to .cpp 2021-11-24 02:15:10 +02:00
02560a6537 Update manpage 2021-11-24 02:15:10 +02:00
0472d279e4 Add {flag} format replacement 2021-11-24 02:15:10 +02:00
166504256a Merge branch 'master' of https://github.com/Alexays/Waybar into pr/anakael/add-name-to-taskbar 2021-11-23 23:10:49 +03:00
2290fe10aa fix(bar): handle ipc connection errors.
Try to use the default bar id (`bar-0`) if none is set.
2021-11-23 08:46:58 -08:00
9fa7bfc0cb Merge pull request #720 from jbeich/disk
disk: make {used} match df(1)
2021-11-23 13:54:46 +01:00
6712cd05a3 Merge branch 'master' into disk 2021-11-23 13:54:17 +01:00
977d21b5f6 Merge pull request #805 from Anakael/workspace-manager-implementation
WLR Workspace manager implementation
2021-11-23 13:52:17 +01:00
0a4841371b Merge branch 'master' into workspace-manager-implementation 2021-11-23 13:52:08 +01:00
deab028e52 Merge pull request #1325 from Alexays/revert-1256-patch-1
Revert "dont escape essid in tooltip"
2021-11-23 10:10:24 +01:00
c51a973d60 Revert "dont escape essid in tooltip" 2021-11-23 10:10:14 +01:00
5a5f8c3b9f Merge pull request #1256 from WuerfelDev/patch-1
dont escape essid in tooltip
2021-11-23 10:04:59 +01:00
b1dc3005b7 Merge pull request #1294 from Anakael/pr/anakael/ignore-by-title
feat: Ignore by title
2021-11-23 10:03:41 +01:00
98f7a10a51 Fix sort 2021-11-23 03:18:00 +03:00
23991b6543 Finish 2021-11-23 03:10:44 +03:00
331dfa87da Merge pull request #1230 from ciarand/if-changes-isolate
Switch network module to read /proc/net/dev
2021-11-22 08:00:54 +01:00
29a8f52464 Merge pull request #1322 from alebastr/freebsd-ci-update
ci: update FreeBSD configuration
2021-11-22 07:59:31 +01:00
6bfb674d1b fix(swaybar-ipc): better logs 2021-11-21 17:28:47 -08:00
ef4c6a9ba3 Update to proto. Fix displaying. Rename classes. 2021-11-22 01:12:55 +03:00
ffeecf626c Update names 2021-11-21 15:01:25 +03:00
4154492603 ci: update FreeBSD configuration
Use latest action v0.1.5.
Pin runner to macos-10.15. macos-latest will start using macos-11 images
without VirtualBox in less than a month[1].

[1] https://github.com/actions/virtual-environments/issues/4060
2021-11-19 21:17:55 -08:00
5baffbf8f8 doc: document swaybar ipc options, ipc and id 2021-11-19 20:28:57 -08:00
60c1706273 Update taskbar.cpp 2021-11-19 18:54:37 +03:00
cb6af026f6 Update taskbar.hpp 2021-11-19 18:51:28 +03:00
18ea53fcbc Update taskbar.hpp 2021-11-19 18:39:49 +03:00
23955fdcc2 Update taskbar.hpp 2021-11-19 18:38:59 +03:00
a06ed00727 Merge pull request #1317 from jfred9/master
river/tags: Add possibility for mouse clicks
2021-11-19 16:33:29 +01:00
15761ef802 Merge branch 'master' of https://github.com/Alexays/Waybar into workspace-manager-implementation 2021-11-16 21:44:50 +03:00
ad3f46214d river/tags: Add possibility for mouse clicks
Left mouse click - set-focused-tags
Right mouse click - toggle-focused-tags
2021-11-15 22:31:38 +01:00
13fda1607f Merge pull request #1311 from b1rger/patch-2
Fix typo
2021-11-12 09:04:41 +01:00
9fda6695ea Merge pull request #1314 from Scrumplex/fix-negative-mpd-vol
Ensure MPD volume is not negative
2021-11-12 09:04:21 +01:00
b24f9ea569 Ensure MPD volume is not negative
If the primary output does not support changing volume MPD will report
-1. Ensure that negative volume levels will be represented as 0 instead.

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
2021-11-11 21:42:05 +01:00
e10c9dd011 changing want_route_dump to default to true, since we say we have gwaddr support 2021-11-09 19:04:05 +01:00
b0eab5d793 maybe we shouldn't actually runtime error, but still doing a check 2021-11-09 19:03:15 +01:00
17bb5643ae explicitly checking for errors to silence unused variable warnings when writing to fd 2021-11-09 18:38:07 +01:00
769b12f16a Fix typo 2021-11-06 09:00:15 +00:00
b511103fd9 Merge pull request #1301 from jonbakke/patch-1
Clarify less than/greater than in warning.
2021-10-29 13:23:28 +02:00
122fe33636 Merge pull request #1302 from marwing/master
Mark memory used by zfs arc as free in memory
2021-10-29 13:22:58 +02:00
8498ddefca Merge pull request #1304 from mamins1376/fix-1303
Fix divide by zero (#1303)
2021-10-29 13:22:01 +02:00
48117a2e97 Fix divide by zero (#1303) 2021-10-29 14:12:48 +03:30
decb13eef0 mark zfs arc size as free in memory 2021-10-28 19:10:46 +02:00
a015b2e3db Clarify less than/greater than in warning.
I was seeing "[warning] Requested height: 20 exceeds the minimum height: 30 required..."
Lines 114-134 are relevant; 133 overrides the requested height with the minimum height when GTK wants more pixels to work with. So, the code is behaving as expected, and "less than" matches the code's logic.
2021-10-28 09:37:11 -07:00
562e4157c0 Merge pull request #1297 from Molytho/master
Add spacing config option
2021-10-22 11:02:53 +02:00
01bfbc4656 Use spacing in config 2021-10-20 11:30:53 +02:00
7669029bfe Add man documentation for spacing config option 2021-10-20 11:30:49 +02:00
0b66454d5c Add spacing config option
This option allows to add spaces between the modules. It uses Gtk:Box's spacing property.
2021-10-20 11:30:40 +02:00
75a6dddea5 Finish 2021-10-20 01:23:00 +03:00
08b4a83331 Add reverse scrolling config option for pulseaudio
When natural scrolling is enabled, the behaviour of scrolling on pulseaudio
module is reversed, this commit reverses the direction of scroll variable
if "reverse-scrolling" is set to 1 in config file.
2021-10-15 19:07:25 +05:30
c5e4d26320 Fix working without timezone 2021-10-05 10:20:06 +00:00
d8bc6c92bb Fix style and spelling 2021-10-05 09:55:30 +00:00
110c66dd32 Refactor Clock: generalize multi timezones and single timezone cases
After this refactoring:
1. Timezones parses only once on start and the we refer to saved values. All time_zone.isString() checks gone to the constructor.
2. Single timezone case handling as case of multi timezoned logic.
3. Scroll event seems more clear now.
4. Tooltip template parses on start to check if there calendar placeholder or not. To do not calculate calendar_text() if not necessary.
2021-10-03 16:57:55 +00:00
6eb9606f23 Merge pull request #1274 from RobertMueller2/master
sway/window: include floating_nodes when considering window count for class
2021-10-03 10:27:26 +02:00
03ebbf6d98 Merge pull request #1275 from dartkron/master
Fix Clock crash on empty string in timezones field
2021-10-03 10:26:05 +02:00
174db444d6 Fix Clock crash on empty string in timezones field
Also fixed timezones behavior: now waybar starting with the first timezone in timezones list and falling back to timezone field only if timezones omit or has no elements.
2021-10-03 03:27:54 +00:00
9972384597 sway/window: include floating_nodes when considering window count for class 2021-10-02 18:35:38 +02:00
8b4dafd701 Merge pull request #1273 from ElyesH/master
Fix spelling errors
2021-10-02 18:29:41 +02:00
f18eb71ad7 Fix spelling errors
Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr>
2021-10-02 18:13:17 +02:00
7af6e8413c Merge pull request #1271 from alebastr/sni-passive-visibility
fix(tray): fix visibility of Passive items
2021-10-02 09:49:57 +02:00
fbedc3d133 fix(tray): fix visibility of Passive items
`show_all` call from `Tray::update` attempts to walk the widget tree and
make every widget visible. Since we control individual tray item
visibility based on `Status` SNI property, we don't want that to happen.

Modify `Tray::update` to control the visibility of a whole tray module
only and ensure that the children of `Item` are still visible when
necessary.
2021-10-02 00:08:45 -07:00
fe5ac0fe08 Merge pull request #1257 from tokyovigilante/fix-catch2
Update catch2 dependency 2.13.3 -> 2.13.7
2021-09-23 22:40:31 +02:00
f638fe473a Update catch2 dependency 2.13.3 -> 2.13.7 2021-09-22 11:43:25 +12:00
8d04da1551 dont escape essid in tooltip
just like https://github.com/Alexays/Waybar/pull/834 but for the network name.
2021-09-21 13:15:36 +02:00
8534175c59 Merge pull request #1252 from gavinbeatty/fix-sway-language-tabs
sway/language: remove tabs, indent with 2 spaces
2021-09-19 19:08:28 +02:00
6778a79033 Merge pull request #1253 from Darkclainer/per-core-cpu-usage
Add cpu usage for every core
2021-09-19 19:00:46 +02:00
6e5a0bc80a Add cpu usage for every core 2021-09-19 14:02:25 +03:00
fe547901fa sway/language: remove tabs, indent with 2 spaces 2021-09-18 15:28:45 -05:00
cee08eccd1 Merge pull request #1251 from Alexays/revert-1250-master
Revert "Add CPU usage for every core"
2021-09-18 13:50:25 +02:00
67c7302938 Revert "Add CPU usage for every core" 2021-09-18 13:50:16 +02:00
8489646b66 Merge pull request #1250 from Darkclainer/master
Add CPU usage for every core
2021-09-18 13:48:39 +02:00
6938921e92 Merge pull request #1239 from mazunki/default-gateway
Added support for {gwaddr} as a variable
2021-09-18 13:47:32 +02:00
7b73cc472f Merge branch 'default-gateway' of github.com:mazunki/waybar into default-gateway 2021-09-18 02:09:57 +02:00
1c91c71dcd updated original debug message with gateway ip, similar, yet not identical to ip route 2021-09-18 02:09:25 +02:00
6142dfba6a updated original debug message with gateway ip, similar, yet not identical to default via 10.13.37.100 dev enp7s0 metric 2
10.13.37.0/24 dev enp7s0 proto kernel scope link src 10.13.37.97 's output
2021-09-18 01:51:16 +02:00
13239417d8 fixed wrong dependency for make target 2021-09-18 01:20:16 +02:00
5f083193e4 fixed tab indentation to spaces, removed debug 2021-09-18 01:12:58 +02:00
a51ac59252 Merge remote-tracking branch 'origin/master' 2021-09-17 22:30:31 +03:00
8da940f929 Update man pages for cpu usage 2021-09-17 22:22:14 +03:00
ce9e8aead3 Merge pull request #1222 from mswiger/use_g_memdup2
Use g_memdup2 instead of g_memdup
2021-09-17 20:56:47 +02:00
73ce2a99ff Merge pull request #1238 from Matan1x/master
round brightness
2021-09-17 20:56:28 +02:00
b028a47d57 Merge pull request #1243 from alebastr/config-unittest
Unit-tests for configuration includes
2021-09-17 20:56:09 +02:00
4bf577e89b Add CPU usage for every core 2021-09-17 21:18:21 +03:00
5991bbb741 ci: run unit-tests 2021-09-15 22:20:46 +07:00
d7d606b721 doc: update documentation for 'include' 2021-09-15 22:20:45 +07:00
0c1d3e30b6 fix(config): preserve explicit null when merging objects 2021-09-15 22:20:44 +07:00
ccc60b4245 refactor(config): more sensible multi-bar include behavior 2021-09-15 22:15:27 +07:00
8912bd3ed0 test: multi-bar config with includes 2021-09-15 21:34:56 +07:00
9f3b34e4d9 test: validate configuration load 2021-09-15 21:34:55 +07:00
6eba62f060 test: add build configs for catch2 2021-09-15 21:34:55 +07:00
1f16d7955d refactor(config): drop getValidPath 2021-09-15 21:34:54 +07:00
1f7d399b8e refactor(config): remove style handling from Config 2021-09-15 21:34:53 +07:00
4fff2eaaa0 refactor(client): change config visibility to public 2021-09-15 21:34:10 +07:00
b377520a38 refactor(client): extract config handling into a new class 2021-09-14 13:15:54 +07:00
95ecff0551 added example tooltip usage 2021-09-09 20:12:20 +02:00
2c380a53ca added support for the {gwaddr} variable 2021-09-09 20:05:18 +02:00
aacd0fcc65 round brightness 2021-09-08 17:12:30 +03:00
4f76c9bd43 Only use g_memdup2 for glib >= 2.68 2021-08-29 13:11:04 -07:00
8d9e322507 Add man 2021-08-29 16:37:02 +03:00
94e53c3777 Add swap flags 2021-08-29 16:34:29 +03:00
12c42fc6e4 Merge branch 'master' of https://github.com/Alexays/Waybar into pr/anakael/add-name-to-taskbar 2021-08-27 01:43:31 +03:00
5186dd27e6 Use while (getline) instead of a for loop
Also make the comments surrounding the /proc/net/dev parsing clearer and
remove the apparently redundant "is the netdev file still good?" check.
2021-08-26 11:33:52 -07:00
9d9f959769 Switch network module to read /proc/net/dev
This fixes issue #610 by reading bandwidth usage per-interface from
/proc/net/dev instead of globally via /proc/net/netstat. It supports the
same matching logic as elsewhere, so setting interface to '*' should
display the same sum-total bandwidth usage as the previous
implementation.
2021-08-25 15:00:05 -07:00
4e256cf3f0 Merge pull request #1223 from xi/cpu-mem-format-icon
add format-icons for cpu und memory
2021-08-23 09:22:02 +02:00
eae94ee14a Merge pull request #1224 from xi/rm-travis-shield
rm travis-ci shield
2021-08-23 09:10:07 +02:00
e0260ac4fc rm travis-ci shield 2021-08-23 08:02:08 +02:00
7b4b5e55a2 support format-icon for cpu und memory 2021-08-23 07:30:19 +02:00
cb49650ea4 Use g_memdup2 instead of g_memdup
This fixes a compile warning.

See: https://discourse.gnome.org/t/port-your-module-from-g-memdup-to-g-memdup2-now/5538
2021-08-22 14:46:40 -07:00
d60bb90b77 Fix typo 2021-08-22 20:43:37 +03:00
ddfe036f00 Format 2021-08-22 20:42:16 +03:00
38afa345dd Finish 2021-08-22 20:18:03 +03:00
ab38f13052 Merge pull request #1217 from gavinbeatty/patch-1
Fix memory leak and data race
2021-08-21 20:44:51 +02:00
9ee701974f Fix memory leak and data race
- Delete previous Layout before creating next one, and in destructor
- Use stack XKBContext instead of local new+delete
- Lock mutex in update() as it is called from a different thread than onEvent(res)
2021-08-20 10:06:35 -05:00
8940c3bbe8 Merge pull request #1211 from mswiger/fix_multi_display_tray_icon_scaling
Fix tray icon scaling on multi-display setups
2021-08-20 17:00:41 +02:00
51f2c6bc46 Merge pull request #1216 from Anakael/pr/anakael/add-short-desc-to-lang
fix: Add number to shortDescripton
2021-08-20 09:04:35 +02:00
c058a2d196 Add number to shortDescripton 2021-08-20 01:09:16 +03:00
a4fff66bec Merge pull request #1215 from ifreund/river-urgent
river/tags: support urgent tags
2021-08-19 15:07:35 +02:00
024fd42e27 river/tags: support urgent tags
Upstream river has a concept of urgent views/tags as of commit e59c2a73.
Introduce a new urgent style to expose this in the waybar module.
2021-08-19 15:01:49 +02:00
c413c1ec23 Merge pull request #1209 from Anakael/pr/anakael/add-short-desc-to-lang
feat: Add short desc to lang
2021-08-17 09:11:55 +02:00
2d80d31527 Fix tray icon scaling on multi-display setups 2021-08-16 23:33:29 -07:00
a87a967a97 Fix leak 2021-08-17 05:29:35 +03:00
a57e431437 Add shortDescription 2021-08-17 05:28:41 +03:00
61783aafaa save 2021-08-17 04:31:17 +03:00
e5787a2617 chore: 0.9.8 2021-08-16 15:47:34 +02:00
9aec6bbed4 Merge pull request #1190 from mswiger/fix_incorrect_tray_icon_scale
Fix incorrect tray icon scaling
2021-08-01 13:39:29 +02:00
4f6a9b1bc2 Fix incorrect tray icon scaling 2021-07-31 18:01:31 -07:00
28e7a96e37 Merge pull request #1188 from WhyNotHugo/patch-1
Don't start if graphical-session is not running
2021-07-31 20:36:52 +02:00
710f933fa6 Don't start if graphical-session is not running
Currently waybar _can_ try to start even if there's no graphical session (and
no sway) running. Adding `Requisite=` prevents this. From `systemd.unit(5)`:

    Requisite=
       Similar to Requires=. However, if the units listed here are not
       started already, they will not be started and the starting of
       this unit will fail immediately.  Requisite= does not imply an
       ordering dependency, even if both units are started in the same
       transaction. Hence this setting should usually be combined with
       After=, to ensure this unit is not started before the other
       unit.

       When Requisite=b.service is used on a.service, this dependency
       will show as RequisiteOf=a.service in property listing of
       b.service.  RequisiteOf= dependency cannot be specified directly.
2021-07-31 16:56:55 +02:00
bad72de960 Merge pull request #1105 from Amanieu/fix_power_calc
Fix power calculation when battery units are in μA instead of μW
2021-07-25 15:07:27 +02:00
65166109c9 Merge branch 'master' into fix_power_calc 2021-07-25 15:07:01 +02:00
91156dfc75 Merge pull request #1178 from Anakael/pr/anakael/add-languge-tooltip-format
[sway/language] Add tooltip-format
2021-07-25 15:05:58 +02:00
af2113931a fix typo 2021-07-24 17:26:49 +03:00
68e4457f3a Add tooltip-formay 2021-07-24 17:24:37 +03:00
1b4ddbca3a Merge pull request #1024 from GrantMoyer/keyboard_state
Keyboard state module
2021-07-23 16:15:02 +02:00
445ad22580 Merge branch 'master' into keyboard_state 2021-07-23 15:59:08 +02:00
88a5f713ed Prefer keyboard-state over keyboard_state 2021-07-23 09:45:07 -04:00
2009ceb350 Update opensuse 2021-07-23 15:01:29 +02:00
77a2eff2ce Update opensuse 2021-07-23 14:49:03 +02:00
cf832798fb Update debian 2021-07-23 14:46:03 +02:00
3f3f2d9c2c Merge pull request #1159 from Anakael/pr/anakael/sway-language-impr
[sway/language] Improve sway/language
2021-07-23 14:42:22 +02:00
b47705ac21 Merge branch 'master' into pr/anakael/sway-language-impr 2021-07-23 09:07:43 +02:00
b33be38877 Merge pull request #1145 from alebastr/sni-enhancements
tray module enhancements
2021-07-23 09:05:54 +02:00
a5fe6f40b8 feat(tray): handle Status property
On the `Passive` value of `Status` tray items would be hidden unless
`show-passive-items` is set to true.
On the `NeedsAttention` value of `Status` tray items will have a
`.needs-attention` CSS class.
2021-07-22 08:04:06 -07:00
245f7f4b11 feat(tray): handle scroll events 2021-07-22 08:04:05 -07:00
1418f96e46 feat(tray): fallback to Title for items without ToolTip 2021-07-22 08:04:04 -07:00
84a8f79bbe feat(tray): implement tooltips (text only) for tray items 2021-07-22 08:04:03 -07:00
4b6253e810 refactor(tray): infer changed properties from signal name
Comparing two GVariants is too expensive; let's collect the set of
properties updated by each signal and apply them unconditionally.
2021-07-22 08:04:00 -07:00
929fc16994 fix(tray): ignore unused WindowId property 2021-07-22 08:01:25 -07:00
811f0896c9 Merge pull request #1174 from mswiger/fix_blurry_tray_icons
Fix blurry tray icons for HiDPI displays
2021-07-21 10:36:16 +02:00
7729ca3427 Update debian 2021-07-21 10:28:56 +02:00
100d4d3499 Merge branch 'master' into pr/anakael/sway-language-impr 2021-07-21 09:40:19 +02:00
7f5fd1ac86 Update opensuse 2021-07-21 09:30:47 +02:00
1f5c07a07f Update debian 2021-07-21 09:27:54 +02:00
67d482d28b Update opensuse 2021-07-21 09:23:52 +02:00
1440ed29d4 Fix blurry tray icons for HiDPI displays 2021-07-20 22:29:34 -07:00
311c5779ea Remove unused variable 2021-07-20 23:03:41 -04:00
9880c6929f Install libevdev in FreeBSD workflow 2021-07-20 23:03:41 -04:00
99138ffdcd Add man page for keyboard_state module 2021-07-20 21:09:00 -04:00
08e886ebc6 Search for device automatically if none given 2021-07-20 21:09:00 -04:00
6fdbc27998 Add default style 2021-07-20 21:09:00 -04:00
40e6360722 Update css class when locked/unlocked 2021-07-20 21:09:00 -04:00
642e28166b Add more configuaration 2021-07-20 21:09:00 -04:00
6dfa31fb17 Basic keyboard state module 2021-07-20 21:09:00 -04:00
c91cc2218b Merge pull request #1170 from larsch/default_name_fix
Fix pulseaudio icon name compilation error
2021-07-20 15:26:18 +02:00
6f2bfd43bf Fix pulseaudio icon name compilation error 2021-07-20 15:25:05 +02:00
f43f8773c4 Merge pull request #1169 from roosemberth/pa-control-active-sink
pulseaudio: Control currently running sink
2021-07-20 14:01:23 +02:00
bb072675ba Merge pull request #1161 from xytovl/per-device-pulse-icon
Support per-device icon in pulseaudio
2021-07-20 14:00:14 +02:00
fa43072be7 Merge pull request #1163 from Anakael/pr/anakael/update-dockerfiles
Update dockerfiles
2021-07-20 13:59:09 +02:00
86a43b9042 pulseaudio: Control currently running sink
In a system with multiple sinks, the default sink may not always be
the once currently being used. It is more useful to control the
currently active sink rather than an unused one.

This patch does not make any difference if the system only uses the
default sink.

Signed-off-by: Roosembert Palacios <roosemberth@posteo.ch>
2021-07-20 10:16:53 +02:00
2506c0104a Update Dockerfiles/fedora
Co-authored-by: Aleksei Bavshin <alebastr89@gmail.com>
2021-07-16 11:37:58 +03:00
948eba92a5 Update dockerfiles 2021-07-16 03:03:11 +03:00
ad09072a6d Merge branch 'master' into pr/anakael/sway-language-impr 2021-07-15 22:17:38 +02:00
9c2b5efe7b Support per-device icon in pulseaudio 2021-07-15 09:20:43 +02:00
91cdf80c65 Merge pull request #1157 from tiosgz/multi-bar-fix
Do not fail to parse a multi-bar config
2021-07-14 09:04:24 +02:00
9cce5ea6b5 Update dockerfiles 2021-07-13 04:49:19 +03:00
8310700bbb Improve sway/language 2021-07-13 04:33:12 +03:00
78aaa5c1b4 Do not fail to parse a multi-bar config 2021-07-10 20:22:37 +00:00
7c1303f57c Merge pull request #1147 from alebastr/github-ci-linux
Add GitHub CI jobs on Linux
2021-07-03 01:08:39 +02:00
569517c531 chore: update freebsd-vm to 0.1.4 2021-07-03 00:55:59 +02:00
1c2e0083ba Merge pull request #1144 from ajakk/master
libfmt >=8.0.0 compatibility
2021-07-03 00:30:33 +02:00
a8edc0886d Delete .travis.yml 2021-07-03 00:28:43 +02:00
8e1f85e1c3 Update archlinux 2021-07-03 00:27:57 +02:00
5420a91046 chore: update FreeBSD action to address ntp sync issue 2021-07-01 00:13:30 -07:00
2a52efa99a chore: update fedora dockerfile 2021-06-30 23:51:28 -07:00
d3c59c42ef feat(ci): add GitHub CI jobs on Linux 2021-06-30 23:51:09 -07:00
368e4813de libfmt >=8.0.0 compatibility 2021-06-30 13:12:38 -05:00
36857ae72b Merge pull request #995 from OskarCarl/master
Add recursive config includes
2021-06-23 23:35:56 +02:00
982d571b2e Add include man section 2021-06-23 23:08:47 +02:00
e62b634f72 Workaround for circular imports 2021-06-21 19:29:09 +02:00
e8278431d2 Proper formatting 2021-06-21 19:05:01 +02:00
14f626d422 Add recursive config includes 2021-06-21 19:05:01 +02:00
d08fbb2ef2 Merge pull request #1132 from alebastr/fix-noexcept-condvar-crash
fix(util): protect std::condition_variable methods from pthread_cancel
2021-06-15 13:20:05 +02:00
5da268077c fix(util): protect std::condition_variable methods from pthread_cancel
The changes in GCC 11.x made `std::condition_variable` implementation
internals `noexcept`. `noexcept` is known to interact particularly bad
with `pthread_cancel`, i.e. `__cxxabiv1::__force_unwind` passing through
the `noexcept` call stack frame causes a `std::terminate` call and
immediate termination of the program

Digging through the GCC ML archives[1] lead me to the idea of patching
this with a few pthread_setcancelstate's. As bad as the solution is, it
seems to be the best we can do within C++17 limits and without major
rework.

[1]: https://gcc.gnu.org/legacy-ml/gcc/2017-08/msg00156.html
2021-06-12 12:56:44 -07:00
20160749e7 Merge pull request #1130 from tperard/fix-network-format-config
network: Fix mix use of default and state specific format
2021-06-08 22:53:10 +02:00
194f4c2f18 network: Fix mix use of default and state specific format
Whenever the network module is configured with both "format" and
"format-$state" and when the module use "format-$state" once, it
override the value that was saved from "format".

For example, if both "format" and "format-disconnect" are configured,
and only those, as soon as the module show information about a
disconnected interface, it will keep showing the format for
disconnected, even if the interface is connected again later.

Fix that by always setting a value to default_format_ in update() and
thus use the intended default format when needed.

Fixes #1129
2021-06-08 18:50:32 +01:00
9e34be7b16 Merge pull request #1126 from tperard/fix-network-auto-detection
Fix network interface auto detection
2021-06-05 18:06:30 +02:00
6e041d5275 Merge pull request #1125 from maximbaz/sway-language-ignore-empty 2021-06-05 18:01:26 +02:00
33617b67f0 network: Fix one case where default route is deleted without notification
When an interface's state is change to "down", all the route
associated with it are deleted without an RTM_DELROUTE event.

So when this happen, reset the module to start looking for a new
external interface / default route.

Fixes #1117
2021-06-05 16:52:04 +01:00
efaac20d82 network: Handle ip route priority
When there's a new default route with higher priority, switch to it.
2021-06-05 16:51:54 +01:00
ce97df34e6 network: Also clear ifname in clearIface()
Since we reset `ifid_`, clear `ifname_` as well.
2021-06-05 16:51:40 +01:00
23b9923eeb network: Parse whole RTM_NEWROUTE msg before interpreting it
The check to figure out if we have the default route should be after
the for loop that parses the route attributes, to avoid acting on
incomplete information. We are going to use more fields from the
message.
2021-06-05 16:51:35 +01:00
999c1b6b81 sway-language: ignore events with empty layout 2021-06-05 15:03:52 +02:00
1a98ecf6b0 Merge branch 'master' into fix_power_calc 2021-05-30 11:17:54 +01:00
5444a66e71 Merge pull request #1116 from tperard/fix-network-rework
Fix network module rework
2021-05-27 21:24:07 +02:00
f49a7a1acb network: Update WiFi information when available
The module doesn't update the `essid_` as soon as a WiFi interface is
connected, but that happens at some point later, depending on
"interval" configuration.

Fix that by rerunning the get WiFi information thread when the
`carrier` state changes. Also, we will clear the state related to WiFi
when the connection is drop to avoid stale information.
2021-05-27 19:36:14 +01:00
28dfb0ba41 network: Fix use of carrier information
Some RTM_NEWLINK messages may not have the IFLA_CARRIER information.
This is the case when a WiFi interface report scan result are
available. `carrier` is used regardless of if it is present in the
message or not. This would result in the interface appearing
"disconnected" in waybar when it isn't.

This patch now check that `carrier` is available before using it.

The same thing could potentially happen to `ifname` so check if it's
set before recording it.

Fixes: c1427ff (network: Handle carrier information)
Fixes #388
2021-05-26 19:23:20 +01:00
94a882bf95 Merge pull request #1113 from alebastr/exclusive-and-passthrough
Add config options for exclusive zone and input event passthrough
2021-05-22 10:34:39 +02:00
da2d603b53 doc: add man for exclusive and passthrough flags 2021-05-21 22:44:19 -07:00
7aaa3df701 feat(bar): add config flag to disable exclusive zone 2021-05-21 22:44:18 -07:00
729553d3bc feat(bar): add config flag for pointer event passthrough 2021-05-21 22:44:17 -07:00
f78a802d11 Merge pull request #1106 from tperard/network-module-reword
Network module rework
2021-05-21 17:02:28 +02:00
826a549d1f Merge pull request #1112 from yonatan8070/master
Add options to use a .json extension for the config filename
2021-05-21 17:00:02 +02:00
99918205ed Correct .json to .jsonc 2021-05-21 17:53:43 +03:00
c65ec9e14f Add options to use a .json extension for the config filename 2021-05-21 15:54:48 +03:00
c1427ff807 network: Handle carrier information
IFLA_CARRIER allows to know when a cable is plugged to the Ethernet
card or when the WiFi is connected. If there's no carrier, the
interface will be considered disconnected.
2021-05-15 16:38:00 +01:00
0bb436f949 network: Rework interface auto detection, handle route change events
Last part of the rework of handleEvents(), this time we take the
getExternalInterface() function and add it to the handleEvents()
function. That way, waybar can react immediately when a new "external
interface" is available and doesn't need to probe. Also that avoid to
have two different functions consuming from the same socket and we
don't need to recode some of the functions that are already available
via libnl (to send and receive messages).
2021-05-15 16:38:00 +01:00
0fc7ef6685 network: Rework address lookup to use only events
In order to get the IP address of an interface, we can get the
information out of NEWADDR events without needed to call getifaddrs().
And when now events are expected, we can requests a dump of all
addresses and handle addresses changes the same way via handleEvents()
only.
2021-05-15 16:38:00 +01:00
c9bbaa7241 network: Rework initial interface search by using a dump
Instead of using an alternative way to list all links in order to
choose one when an "interface" is in the configuration, we can ask for
a dump of all interface an reuse the handleEvents() function.

This patch also start to rework the handleEvents() function to grab
more information out of each event, like the interface name.
2021-05-15 16:38:00 +01:00
63fdf66ad6 network: Read all available messages on ev_sock_
When more than one message is available to read on the ev_sock_
socket, only the first one is read.

Make some changes to be able to read all the messages available by
setting the socket to non-blocking. This way we can detect when
there's nothing left to read and loop back to wait with epoll.
2021-05-15 16:38:00 +01:00
9357a6cb88 network: Start the module with some text in the label_
Fix modules starting with no text, but not hidding.

Start with some "text" in the module's label_, update() will then
update it. Since the text should be different, update() will be able
to show or hide the event_box_. This is to work around the case where
the module start with no text, but the the event_box_ is shown.
2021-05-15 16:38:00 +01:00
dbc06abf18 network: Initialise cidr_ like clearIface() does 2021-05-15 16:38:00 +01:00
4d067619a8 Fix power calculation when battery units are in μA instead of μW 2021-05-15 15:55:38 +01:00
cf3d6545c3 Merge pull request #1101 from Max1Truc/master
fix: incorrect battery percentage on Pinebook Pro
2021-05-11 10:41:38 +02:00
f3a6e2d494 fix: incorrect battery percentage on Pinebook Pro 2021-05-10 21:00:14 +02:00
cdce3e03ea Update meson.build 2021-04-30 14:25:48 +02:00
b25b7d29fc Update spdlog.wrap 2021-04-30 14:25:26 +02:00
71d7596b6f fix: bluetooth status tooltip 2021-04-30 14:23:49 +02:00
06e699c862 Merge pull request #1087 from Synthetica9/multiple-rewrites
rewriteTitle: allow multiple sequential rewrites
2021-04-27 00:00:53 +02:00
a03283d65f rewriteTitle: allow multiple sequential rewrites 2021-04-26 20:26:43 +02:00
ef38061edd Merge pull request #1084 from gabegorelick/battery-discharging-full
[modules/battery] allow format-discharging-full
2021-04-26 09:28:00 +02:00
7e13e26c29 [modules/battery] allow format-discharging-full
`format-discharging-full` has been impossible since #923 made it
impossible to be full and discharging at the same time. This should
fix that by only making `format-charging-full` impossible. Whether
or not that should be allowed is a good question, but beyond the
scope of this change.

Fixes #1031
2021-04-25 22:00:24 -04:00
5f7329f5b9 Merge pull request #1081 from David96/master
[modules/pulseaudio] fix bluetooth class for PipeWire
2021-04-25 14:03:00 +02:00
2213380dc0 [modules/pulseaudio] fix bluetooth class for PipeWire
apparently, pipewire-pulse slightly changed the naming of the sink.
2021-04-25 11:19:35 +02:00
66d8035ed1 Merge pull request #1055 from vrld/feature-rewrite-window-title
Add option to rewrite sway/window title
2021-04-21 14:23:45 +02:00
7cdf178f8d Document changes in manpage
Add section on rewrite rules and extend example
2021-04-21 12:24:47 +02:00
af3c868a5b Catch exception on erroneous rules
std::regex and std::regex_replace may throw an std::regex_error if the
expression or replacement contain errors.

Log this error and carry on with the next rule, so that the title is
shown even if the config contains errors.
2021-04-21 12:24:47 +02:00
b16c8972c7 Add option to rewrite sway/window title
Rewrites window title according to config option "rewrite".
"rewrite" is an object where keys are regular expressions and values are
rewrite rules if the expression matches. Rules may contain references to
captures of the expression. Regex and replacement follow ECMA-script
rules. If no regex matches, the title is left unchanged.

example:
"sway/window": {
  "rewrite": {
    "(.*) - Mozilla Firefox": " $1",
    "(.*) - zsh": " $1",
  }
}
2021-04-21 12:24:47 +02:00
1c9b62de07 Merge pull request #1076 from Scrumplex/add-mpd-volume-status
Implement MPD volume status format template
2021-04-20 09:38:19 +02:00
fc89b01ba6 feat: implement mpd volume format template
Allow the user to show the current volume from MPD status via the
`format` and/or `tooltip-format` configuration options.

The values are provided by libmpdclient and are integers, generally
between 0-100 (without %). Values above 100 are also possible, as mpd
output plugins like `pulse` support volumes above 100%.

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
2021-04-20 08:35:47 +02:00
70e67c5daa Merge pull request #1074 from Anakael/feature/taskbar-ignore-list
[wlr/taskbar] Add ignore-list param
2021-04-18 20:02:14 +02:00
5ad3b6018a Remove exceed protected 2021-04-18 21:37:58 +03:00
ba278985e8 Add ignore-list param to wlr/taskbar 2021-04-18 21:34:29 +03:00
5300461c79 chore: v0.9.7 2021-04-15 21:17:54 +02:00
d0f60c47bf Merge pull request #1070 from jgmdev/cpumodulefix
[Module CPU] fix crash due to empty frequencies.
2021-04-15 21:17:00 +02:00
07f2470e36 Merge pull request #974 from kamushadenes/patch-1
Improve Pulseaudio sink/source separation
2021-04-15 21:09:35 +02:00
f8f1e791a3 [Module CPU] fix crash due to empty frequencies.
On some systems (eg: ARM) the supported frequencies of the CPU are not
properly reported by /proc/cpuinfo so if that fails try to retrieve them
from /sys/devices/system/cpu/cpufreq/policy[0-9]/cpuinfo_[max|min]_freq.
2021-04-15 14:30:29 -04:00
729a4fe37e chore: v0.9.6 2021-04-15 16:09:45 +02:00
97e4b53cf3 Merge pull request #1061 from akheron/multi-battery-status
Use the correct battery status when multiple batteries are present
2021-03-28 19:35:51 +02:00
c850212288 Use the correct battery status when multiple batteries are present 2021-03-28 20:07:35 +03:00
600afaf530 Merge pull request #1037 from Moonlight-Angel/cpu-frequency
Add cpu min/max/avg frequencies
2021-03-25 12:09:42 +01:00
c21dc681c9 Merge pull request #1052 from Logarithmus/fix-sway-language-manpage
meson.build: add missing waybar-sway-language manpage
2021-03-23 14:57:06 +01:00
f4ad5d36ec meson.build: add missing waybar-sway-language manpage 2021-03-23 16:51:08 +03:00
f627fe3a39 Merge pull request #1051 from lunik1/disk-css
Add default styling for disk module
2021-03-23 12:31:52 +01:00
7b6dc33824 Merge pull request #1056 from martin2250/patch-1
Add style for battery state "plugged"
2021-03-23 12:30:50 +01:00
b4ee994515 Add style for battery state "plugged" 2021-03-23 00:26:45 +01:00
b1dd62078f Merge pull request #1002 from nullobsi/master
add length limits for MPD module tags
2021-03-15 09:15:09 +01:00
bf3efdb89c Merge branch 'master' into master 2021-03-14 21:34:25 -07:00
354de5f13f style: add styling to disk module 2021-03-13 15:17:11 +00:00
b4ffb8af45 Merge pull request #1050 from cmovcc/cmovcc/load-values
Fix: CPU load values
2021-03-13 16:11:39 +01:00
a49b12b66b Fix CPU load values 2021-03-12 20:58:51 +01:00
1573e1eb97 change variable instead of substr(len) 2021-02-26 13:29:58 -08:00
9b9daaee6f Merge branch 'master' into master 2021-02-26 13:22:34 -08:00
99643ba2e6 Stub parseCpuFrequencies on *BSD platforms 2021-02-25 09:14:51 +01:00
08ea5ebe1f Add cpu frequency 2021-02-25 09:14:51 +01:00
cb1c7ea12c Merge pull request #1032 from matteodelabre/terminate-custom-on-exit
Terminate custom module scripts on exit
2021-02-23 09:40:05 +01:00
1026100c9d Merge pull request #1035 from alebastr/deferred-output-removal
fix: schedule output destruction on idle callback
2021-02-23 09:39:09 +01:00
943ba3a2da fix: schedule output destruction on idle callback
Defer destruction of bars for the output to the next iteration of the
event loop to avoid deleting objects referenced by currently executed
code.
2021-02-22 18:35:09 -08:00
bfa9f1e69b Merge branch 'master' into master 2021-02-22 09:34:58 -08:00
4d150e9340 Merge pull request #1036 from WhyNotHugo/systemd-reload
Configure systemd.service file to allow reloading
2021-02-19 15:21:15 +01:00
2019028688 Configure systemd.service file to allow reloading
This allows `systemctl --user reload waybar` to reload waybar's config
as expected.
2021-02-19 14:33:38 +01:00
b4728f2e1d Merge branch 'master' into master 2021-02-16 21:51:31 -08:00
d8706af2ea Terminate custom module scripts on exit
(Fixes #358.)

Subprocesses created for custom module scripts were previously left
running when the parent Waybar process exited. This patch sets the
parent-death signal of child processes (PR_SET_PDEATHSIG on Linux,
PROC_PDEATHSIG_CTL on FreeBSD) to SIGTERM.

Caveats:

* This uses Linux-specific or FreeBSD-specific calls. I don’t know if
  this project targets other systems?
* There is a possibility that Waybar exits after calling `fork()`, but
  before calling `prctl` to set the parent-death signal. In this case,
  the child will not receive the SIGTERM signal and will continue to
  run. I did not handle this case as I consider it quite unlikely, since
  module scripts are usually launched only when Waybar starts. Please
  let me know if you think it needs to be handled.

Testing:

* With `htop` open, run Waybar v0.9.5 with a custom module that has an
  `exec` script. Terminate the Waybar process and notice that the
  script’s subprocess stays alive and is now a child of the init
  process.
* Run Waybar with this patch and follow the same steps as above. Notice
  that this time the script’s subprocess terminates when the parent
  exits.
2021-02-12 21:14:46 +01:00
08e19602f7 Merge pull request #1015 from alebastr/rfkill-events
rfkill code refactoring
2021-02-11 10:20:13 +01:00
b12b500bfc Merge branch 'master' into master 2021-02-10 09:39:03 -08:00
e786ea601e fix(rfkill): handle EAGAIN correctly 2021-02-10 08:26:21 -08:00
36da8117c0 Merge pull request #1026 from euclio/idle-inhibit-fix
disable Idle Inhibitor module if unsupported
2021-02-10 10:32:09 +01:00
6d5afdaa5f fix(network): don't block the main thread on rfkill update
Moving rfkill to the main event loop had unexpected side-effects.
Notably, the network module mutex can block all the main thread events
for several seconds while the network worker thread is sleeping.

Instead of waiting for the mutex let's hope that the worker thread
succeeds and schedule timer thread wakeup just in case.
2021-02-09 21:27:22 -08:00
52dd3d2446 refactor(bluetooth): remove interval and timer thread
The timer thread was always reading the same value from Rfkill state.
2021-02-09 21:27:21 -08:00
ecc32ddd18 refactor(bluetooth): remove Bluetooth::status_
The string was always overwritten in `update()`; don't need to store
temporary value in the class.
2021-02-09 21:27:20 -08:00
38c29fc242 refactor(rfkill): poll rfkill events from Glib main loop
Open rfkill device only once per module.
Remove rfkill threads and use `Glib::signal_io` as a more efficient way
to poll the rfkill device.
Handle runtime errors from rfkill and stop polling of the device instead
of crashing waybar.
2021-02-09 21:27:19 -08:00
40f4dc9ecf fix(rfkill): accept events larger than v1 event size
Kernel 5.11 added one more field to the `struct rfkill_event` and broke
unnecessarily strict check in `rfkill.cpp`. According to `linux/rfkill.h`,
we must accept events at least as large as v1 event size and should be
prepared to get additional fields at the end of a v1 event structure.
2021-02-09 21:27:18 -08:00
95a6689077 disable Idle Inhibitor module if unsupported 2021-02-09 18:37:13 -05:00
c5f875dc5f Merge pull request #1027 from alebastr/output-fixes
Fix more issues with duplicated bars
2021-02-09 11:17:16 +01:00
89b5e819a3 fix(client): improve guard from repeated xdg_output.done events
Multiple .done events may arrive in batch. In this case libwayland would
queue xdg_output.destroy and dispatch all pending events, triggering
this callback several times for the same output.

Delete xdg_output pointer immediately on the first event and use the
value as a guard for reentering.
2021-02-08 23:25:58 -08:00
6585381230 fix(client): remove unnecessary wl_output_roundtrip
At this point we're not awaiting any protocol events and flushing
wayland queue makes little sense. As #1019 shows, it may be even harmful
as an extra roundtrip could process wl_output disappearance and delete
output object right from under our code.
2021-02-08 22:30:01 -08:00
f3ce7ff86c Merge pull request #1021 from jgmdev/taskbar-icons
[wlr/taskbar] Check StartupWMClass
2021-02-07 16:52:34 +01:00
e4a65c72dd Added missing 'if' space. 2021-02-07 04:27:16 -04:00
f14a73584f [wlr/taskbar] Added break when matching StartupWMClass is found. 2021-02-07 01:01:57 -04:00
fffb52dd93 [wlr/taskbar] Check StartupWMClass on list returned by g_desktop_app_info_searchi() 2021-02-07 00:50:52 -04:00
71f9ed3099 Merge pull request #1018 from jgmdev/taskbar-icons
[wlr/taskbar] Fix unhandled exception crash when icon name is a path.
2021-02-04 10:05:02 +01:00
e293b89f6b [wlr/taskbar] Removed unnecessary catch statement. 2021-02-04 04:57:08 -04:00
8a284e7c74 [wlr/taskbar] Declared load_icon_from_file() static. 2021-02-03 21:14:04 -04:00
22ed153004 [wlr/taskbar] Fix unhandled exception crash when icon name is a path. 2021-02-03 21:04:10 -04:00
ff9f09a24e Merge pull request #1014 from Moonlight-Angel/disable-auto-back-and-forth
Add a way to configure auto_back_and_forth on Sway workspaces
2021-02-03 09:57:05 +01:00
7eb2a6b709 Add a configuration entry to disable auto_back_and_forth on Sway workspaces 2021-02-02 21:58:26 +01:00
f2e9bb54f0 Merge pull request #1011 from jgmdev/taskbar-icons
[wlr/taskbar] More icon search improvements.
2021-02-02 09:03:35 +01:00
ac6667b1c9 [wlr/taskbar] More icon search improvements.
* Added ~/.local/share prefix to search in user defined apps.
* Add support for apps that don't properly set an id like pamac.
2021-02-02 01:03:28 -04:00
7d78a3aeef Merge pull request #1001 from max-k/master
[sway/window] Add app_id to usable fields in title
2021-02-01 22:23:49 +01:00
aa088721c3 Merge pull request #1008 from nullobsi/label-sizing
improve module sizing options
2021-02-01 22:22:33 +01:00
97f7050d7d Update man pages 2021-02-01 08:34:51 -08:00
e21be3382b Merge pull request #1007 from nullobsi/fullwidth-length
[calendar] CJK locale formatting
2021-02-01 11:15:30 +01:00
72cd753c02 align should use rotate property 2021-02-01 01:44:51 -08:00
c8d7b6fa92 rename fixed-length to min-length 2021-01-31 14:03:49 -08:00
8c70513a24 add common align config property to set text alignment
add fixed-length property to set the fixed width of the label
2021-01-31 13:58:41 -08:00
35062ceb99 Merge branch 'master' into master 2021-01-31 12:01:49 -08:00
f05afb5468 Merge branch 'master' into fullwidth-length 2021-01-31 11:58:12 -08:00
ecba117dc0 remove unnessecary logging 2021-01-31 11:56:25 -08:00
d2a1f41750 Use g_unichar_iswide to properly align calendar on CJK locales 2021-01-31 11:53:53 -08:00
be777b8525 Merge pull request #1006 from jgmdev/taskbar-icons
Improved wlr/taskbar icon search.
2021-01-31 20:47:23 +01:00
3881af4bbe Improved wlr/taskbar icon search. 2021-01-31 15:37:26 -04:00
933e0f5280 Merge pull request #1003 from joshuachp/patch-1
Update waybar-bluetooth.5.scd
2021-01-31 15:44:00 +01:00
149c1c2f1b Update waybar-bluetooth.5.scd
Remove the `status` from the `tooltip-format` example since it will
throw error. Related to #685
2021-01-31 11:37:41 +01:00
6cc3212605 add length limits for MPD module tags 2021-01-30 18:04:59 -08:00
e19aa1d43a [sway/window] Add app_id to usable fields in title 2021-01-30 01:41:45 +01:00
69a366dced Merge pull request #996 from martin2250/master
add power formatter to battery module
2021-01-24 23:33:12 +01:00
c9ef731fd0 Merge pull request #992 from alebastr/990-duplicated-bars-on-output-events
Fix duplicate bars on xdg_output property changes
2021-01-24 23:31:34 +01:00
cd97bdb30f document power formatter in battery module 2021-01-24 21:49:00 +01:00
3bcf390484 add power to battery formatter 2021-01-24 21:39:14 +01:00
7fa1c11833 fix(client): unsubscribe after receiving xdg_output.done event
Ignore any further xdg_output events. Name and description are constant
for the lifetime of wl_output in xdg-output-unstable-v1 version 2 and we
don't need other properties.

Fixes #990.
2021-01-21 08:35:38 -08:00
ab0f2c13af fix(client): attach styles only once
Gdk >= 3.10 has only one GdkScreen. No need to reattach styles on every
output change.
2021-01-21 08:32:44 -08:00
dc38640341 Merge branch 'master' into patch-1 2021-01-18 10:55:40 -03:00
66e5fda418 Merge pull request #964 from Ocisra/master
Add an option to use battery design capacity
2021-01-18 13:48:03 +01:00
e06d603154 Merge pull request #830 from Markaos/battery-custom-tooltip
Allow customization of battery module tooltip
2021-01-18 13:46:57 +01:00
392b0679c9 Merge branch 'master' into master 2021-01-18 12:39:25 +01:00
336cc9f336 . 2021-01-18 12:39:41 +01:00
0bd96f339e typo 2021-01-18 12:38:02 +01:00
ce0bf6269b battery: use timeTo as the default format name 2021-01-18 12:32:51 +01:00
fdaba72974 Merge branch 'master' into battery-custom-tooltip 2021-01-18 12:22:44 +01:00
a2d98ddde8 Merge pull request #842 from rdnetto/config-reloading
Implement support for reloading of config files.
2021-01-18 12:06:25 +01:00
51bfe9eaf6 Merge pull request #881 from olemartinorg/master
Support format-{state} for cpu/disk/memory
2021-01-18 12:02:59 +01:00
a25cf4d188 Merge pull request #891 from danieldg/temp-tooltip
Add "tooltip-format" to temperature module
2021-01-18 12:01:34 +01:00
ede1146ddc Merge pull request #903 from spk/simpleclock
Add simpleclock as fallback when hhdate is not available
2021-01-18 12:00:48 +01:00
b916ed3cae Merge pull request #980 from sjtio/master
add option 'tag-labels' to river/tags
2021-01-18 11:56:37 +01:00
9d5ce45f3b add option tag-labels to river/tags 2021-01-15 01:07:56 +00:00
a7941a00c5 fix missing parentheses 2021-01-12 19:10:34 -03:00
f4ffb21c8c improve sink/source separation
Add additional fields, namely `source_volume` and `source_desc`
Add `tooltip-format`, reverting to default behavior if not specified
Add additional CSS classes, namely `sink-muted` and `source-muted`
2021-01-12 18:51:44 -03:00
29cba22405 Merge pull request #969 from alebastr/wlr-taskbar-fixes
Fix issues in wlr/taskbar
2021-01-11 09:23:40 +01:00
b79301a5bd fix(wlr/taskbar): protocol error when reconnecting outputs
Destroy request is not specified for foreign toplevel manager and it
does not prevent the compositor from sending more events.
Libwayland would ignore events to a destroyed objects, but that could
indirectly cause a gap in the sequence of new object ids and trigger
error condition in the library.

With this commit waybar sends a `stop` request to notify the compositor
about the destruction of a toplevel manager. That fixes abnormal
termination of the bar with following errors:
```
(waybar:11791): Gdk-DEBUG: 20:04:19.778: not a valid new object id (4278190088), message toplevel(n)

Gdk-Message: 20:04:19.778: Error reading events from display: Invalid argument
```
2021-01-08 15:41:48 -08:00
ef9c3ef1cb fix(wlr/taskbar): fix wl_array out-of-bounds access
wl_array->size contains the number of bytes in the array instead of the
number of elements.
2021-01-08 15:28:29 -08:00
1f620828c2 Merge pull request #965 from ofwinterpassed/master
Fixing logic in getIcon
2021-01-03 19:55:33 +01:00
f20dbbbd74 Fixing logic in getIcon 2021-01-03 19:08:06 +01:00
00046d309d add an option to use battery design capacity as a reference for percentage informations 2021-01-03 15:25:19 +01:00
7b7edc9029 Merge pull request #949 from jbeich/ci
CI: add FreeBSD to Actions
2021-01-02 11:56:08 +01:00
bd208fcec6 Merge pull request #956 from AndreasBackx/feature/output-identifier
Added waybar_output.identifier support. #602
2021-01-02 11:52:14 +01:00
f233d27b78 Merge pull request #959 from dorgnarg/fix-section-css-classes
Fix for group module selectors when bar is vertical
2020-12-28 23:15:46 +01:00
42e8667773 Better way of doing it by just moving the original delcarations after everything's for sure been set 2020-12-28 13:44:16 -07:00
c0361e8546 A hopeful fix to the module section classes when the bar is vertical 2020-12-28 13:34:59 -07:00
3fbbbf8541 Removed redundant log line. 2020-12-25 23:31:29 +00:00
e5684c6127 Separated name and description setup and moved bar creation to done callback. 2020-12-25 23:03:01 +00:00
0233e0eeec Added waybar_output.identifier support.
Resolves #602.
2020-12-25 20:54:38 +00:00
7fbd3657e8 Merge pull request #955 from ilpianista/bugfix/revert-pipewire-pulse
Revert "Fix waybar-pulseaudio with pipewire-pulse"
2020-12-25 17:50:01 +01:00
005af7f7b7 Revert "Fix waybar-pulseaudio with pipewire-pulse"
This reverts commit 0d03c1d4da.
2020-12-25 17:37:21 +01:00
94f8f74f51 Merge pull request #953 from Alexays/revert-901-patch-1
Revert "Replace lowercase "k" with uppercase "K" to make it look more consistent"
2020-12-25 09:28:22 +01:00
f391186749 Revert "Replace lowercase "k" with uppercase "K" to make it look more consistent" 2020-12-25 09:28:05 +01:00
e4340a7536 CI: add FreeBSD to Actions 2020-12-23 20:40:44 +00:00
dd2792b204 Merge pull request #937 from ilpianista/bugfix/pipewire-pulse
Fix waybar-pulseaudio with pipewire-pulse
2020-12-23 21:39:40 +01:00
08ee5385ec Merge pull request #942 from danielrainer/patch-1
Fix typo in states man page
2020-12-23 21:37:47 +01:00
73eb517b86 Merge pull request #946 from narilth/sway-solo-css-fix
Fix Sway #waybar.solo CSS rule applying on split
2020-12-23 21:37:25 +01:00
cb7baee045 Fixed compile error 2020-12-18 18:17:17 -05:00
85ca5027f4 Fix Sway #waybar.solo CSS rule applying on split
This error occurs because of an incorrect assumption that the size of
the list of nodes that contains the focused window is the number of
windows in a workspace.

The windows in a workspace are stored as a tree by Sway, rather than a
list, so the number of windows has to be found by counting the leaves of
a workspace tree.
2020-12-18 18:14:14 -05:00
50ecc97284 Fix typo 2020-12-12 23:21:17 +01:00
d382734698 Merge branch 'master' into bugfix/pipewire-pulse 2020-12-09 18:14:22 +01:00
0d03c1d4da Fix waybar-pulseaudio with pipewire-pulse 2020-12-04 23:51:10 +01:00
3b576ae12d Add "tooltip-format" to temperature module 2020-11-26 20:23:19 -05:00
96d965fe04 Add simpleclock as fallback when hhdate is not available
ref https://github.com/Alexays/Waybar/issues/668
2020-10-29 19:40:28 +01:00
ebdeb86703 feat(swaybar-ipc): handle visibility_by_modifier update 2020-10-19 19:35:55 -07:00
bc13453155 feat(swaybar-ipc): handle mode update 2021-09-15 22:39:51 +07:00
23e5181cac feat(swaybar-ipc): add swaybar IPC client 2020-10-19 19:34:48 -07:00
452dcaa5d3 feat(client): store bar_id argument 2021-11-19 20:28:41 -08:00
5905078e56 doc: document mode option of the bar config 2021-11-19 21:02:29 -08:00
52361ed360 refactor(bar): make setVisible switch between "default" and "invisible" modes 2021-11-21 11:00:57 -08:00
87b43c2171 feat(bar): attach CSS class mode-{mode} to window when setting mode 2021-11-19 20:02:57 -08:00
ae88d7d8dc feat(bar): use "default" mode to store global options
Read `layer`, `exclusive`, `passthrough` into a special mode "default".
Drop `overlay` layer hacks, as it's easier to use `"mode": "overlay"`
for the same result.
2021-11-19 19:31:41 -08:00
6d2ba7a75b feat(bar): store modes as a map of presets
This allows to apply the mode atomically and adds possibility of
defining custom modes (to be implemented).
2021-11-19 19:29:51 -08:00
03a641ed83 feat(bar): support swaybar mode for configuring window
Use `mode` (`waybar::Bar::setMode`) as a shorthand to configure bar
visibility, layer, exclusive zones and input event handling in the same
way as `swaybar` does.
See `sway-bar(5)` for a description of available modes.
2021-09-15 22:35:50 +07:00
3e2197a82a test(util): add tests for SafeSignal
Add a fixture for writing tests that require interaction with Glib event
loop and a very basic test for SafeSignal.
2020-12-28 17:28:03 -08:00
79883dbce4 feat(util): optimize SafeSignal for events from the main thread 2020-12-28 17:31:23 -08:00
8a0e76c8d8 fix(util): avoid creating temporary functor for each event 2020-10-19 18:42:25 -07:00
285a264aae feat(util): SafeSignal class for cross-thread signals with arguments
Implement a wrapper over Glib::Dispatcher that passes the arguments to
the signal consumer via synchronized `std::queue`.
Arguments are always passed by value and the return type of the signal
is expected to be `void`.
2020-12-28 17:26:55 -08:00
4229e9b2ca Implemented format-{state} for cpu/disk/memory 2020-10-12 02:05:26 +02:00
45f7f9b07a Merge branch 'master' into config-reloading 2020-10-11 23:00:25 +02:00
943b6bc51b Implement support for reloading of config files.
Fixes #759.
2020-08-28 22:34:24 +10:00
9b51094743 Merge branch 'master' into battery-custom-tooltip 2020-08-20 13:52:25 +02:00
8fb54f47ea battery: allow custom tooltip format 2020-08-19 23:13:03 +02:00
22409d27c5 Fix docs typos
Add removing buttons
Adjust handling multiple outputs.
2020-08-11 00:28:56 +03:00
42b6c089f3 Add docs and adjust sorting 2020-08-08 00:09:35 +03:00
0ad29a5960 Finish base implementation 2020-08-07 23:46:47 +03:00
4c251578e9 Add formatting and states handling 2020-08-07 02:45:08 +03:00
7638f5c595 Add base name representation 2020-08-06 01:42:57 +03:00
edd4d8ee11 Finish implement wlr 2020-08-05 23:10:08 +03:00
2b11b7ef8c Base wlr impl (Manager, Group) 2020-08-05 02:17:38 +03:00
94a4d41a65 disk: make used calculation match df(1) output
Substract space only available to superuser as well.
2020-05-26 07:47:08 +00:00
314 changed files with 26558 additions and 5709 deletions

View File

@ -1,6 +1,5 @@
---
BasedOnStyle: Google
AlignConsecutiveDeclarations: true
BinPackArguments: false
AlignConsecutiveDeclarations: false
ColumnLimit: 100
...

29
.clang-tidy Normal file
View File

@ -0,0 +1,29 @@
Checks: >
-*,
bugprone-*
misc-*,
modernize-*,
performance-*,
portability-*,
readability-*,
-fuchsia-trailing-return,
-readability-magic-numbers,
-modernize-use-nodiscard,
-modernize-use-trailing-return-type,
-readability-braces-around-statements,
-readability-redundant-access-specifiers,
-readability-redundant-member-init,
-readability-redundant-string-init,
-readability-identifier-length
CheckOptions:
- { key: readability-identifier-naming.NamespaceCase, value: lower_case }
- { key: readability-identifier-naming.ClassCase, value: CamelCase }
- { key: readability-identifier-naming.StructCase, value: CamelCase }
- { key: readability-identifier-naming.FunctionCase, value: camelBack }
- { key: readability-identifier-naming.VariableCase, value: camelBack }
- { key: readability-identifier-naming.PrivateMemberCase, value: camelBack }
- { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }
- { key: readability-identifier-naming.EnumCase, value: CamelCase }
- { key: readability-identifier-naming.EnumConstantCase, value: UPPER_CASE }
- { key: readability-identifier-naming.GlobalConstantCase, value: UPPER_CASE }
- { key: readability-identifier-naming.StaticConstantCase, value: UPPER_CASE }

1
.envrc Normal file
View File

@ -0,0 +1 @@
use flake

65
.github/labeler.yml vendored Normal file
View File

@ -0,0 +1,65 @@
bug:
- "(crash|bug|error|coredump|freeze|segfault|issue|problem)"
enhancement:
- "(feature|enhancement|improvement|request|suggestion)"
hyprland:
- "(hyprland)"
network:
- "(network|wifi|ethernet)"
bluetooth:
- "(bluetooth|bluez)"
sway:
- "(sway)"
cpu:
- "(cpu)"
memory:
- "(memory|ram)"
disk:
- "(disk|storage)"
battery:
- "(upower|battery)"
sni:
- "(sni|tray)"
dwl:
- "(dwl)"
custom:
- "(custom|module|extension|plugin|script)"
mpd:
- "(mpd|music)"
audio:
- "(pulseaudio|alsa|jack|audio|pirewire|wireplumber)"
temperature:
- "(temperature|thermal|hwmon)"
clock:
- "(clock|time|date)"
gamemode:
- "(gamemode|game|gaming)"
inhibitor:
- "(inhibitor|idle|lock|suspend|hibernate|logout)"
cava:
- "(cava|audio-visualizer)"
backlight:
- "(backlight|brightness)"
keyboard:
- "(keyboard|keymap|layout|shortcut)"

19
.github/workflows/clang-format.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: clang-format
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-format-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: DoozyX/clang-format-lint-action@v0.16.2
name: clang-format
with:
source: "."
extensions: "hpp,h,cpp,c"
clangFormatVersion: 16

39
.github/workflows/clang-tidy.yml vendored Normal file
View File

@ -0,0 +1,39 @@
name: clang-tidy
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-tidy-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
container:
image: alexays/waybar:debian
steps:
- uses: actions/checkout@v3
- name: configure
run: |
meson -Dcpp_std=c++20 build # necessary to generate compile_commands.json
ninja -C build # necessary to find certain .h files (xdg, wayland, etc.)
- uses: actions/setup-python@v5
with:
python-version: '3.10' # to be kept in sync with cpp-linter-action
update-environment: true # the python dist installed by the action needs LD_LIBRARY_PATH to work
- uses: cpp-linter/cpp-linter-action@v2.9.1
name: clang-tidy
id: clang-tidy-check
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PIP_NO_CACHE_DIR: false
with:
style: "" # empty string => don't do clang-format checks here, we do them in clang-format.yml
files-changed-only: true # only check files that have changed
lines-changed-only: true # only check lines that have changed
tidy-checks: "" # empty string => use the .clang-tidy file
version: "17" # clang-tools version
database: "build" # path to the compile_commands.json file
- name: Check if clang-tidy failed on any files
if: steps.clang-tidy-check.outputs.checks-failed > 0
run: echo "Some files failed the linting checks!" && exit 1

36
.github/workflows/freebsd.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: freebsd
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-freebsd-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
clang:
# Run actions in a FreeBSD VM on the ubuntu runner
# https://github.com/actions/runner/issues/385 - for FreeBSD runner support
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Test in FreeBSD VM
uses: cross-platform-actions/action@v0.23.0
timeout-minutes: 180
env:
CPPFLAGS: '-isystem/usr/local/include'
LDFLAGS: '-L/usr/local/lib'
with:
operating_system: freebsd
version: "13.2"
environment_variables: CPPFLAGS LDFLAGS
sync_files: runner-to-vm
run: |
sudo sed -i '' 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
sudo pkg install -y git # subprojects/date
sudo pkg install -y catch evdev-proto gtk-layer-shell gtkmm30 jsoncpp \
libdbusmenu libevdev libfmt libmpdclient libudev-devd meson \
pkgconf pulseaudio scdoc sndio spdlog wayland-protocols upower \
libinotify
meson build -Dman-pages=enabled
ninja -C build
meson test -C build --no-rebuild --print-errorlogs --suite waybar

19
.github/workflows/labeler.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: "Issue Labeler"
on:
issues:
types: [opened, edited]
permissions:
issues: write
contents: read
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: github/issue-labeler@v3.4
with:
configuration-path: .github/labeler.yml
enable-versioned-regex: 0
include-title: 1
repo-token: ${{ secrets.GITHUB_TOKEN }}

33
.github/workflows/linux.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: linux
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-linux-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
strategy:
matrix:
distro:
- alpine
- archlinux
- debian
- fedora
- opensuse
- gentoo
cpp_std: [c++20]
runs-on: ubuntu-latest
container:
image: alexays/waybar:${{ matrix.distro }}
steps:
- uses: actions/checkout@v3
- name: configure
run: meson -Dman-pages=enabled -Dcpp_std=${{matrix.cpp_std}} build
- name: build
run: ninja -C build
- name: test
run: make test

7
.gitignore vendored
View File

@ -2,6 +2,8 @@
*~
vgcore.*
/.vscode
/.idea
/.cache
*.swp
packagecache
/subprojects/**/
@ -41,3 +43,8 @@ packagecache
*.exe
*.out
*.app
/.direnv/
# Nix
result
result-*

View File

@ -1,38 +0,0 @@
language: cpp
services:
- docker
git:
submodules: false
env:
- distro: debian
- distro: archlinux
- distro: fedora
- distro: alpine
- distro: opensuse
before_install:
- docker pull alexays/waybar:${distro}
- find . -type f \( -name '*.cpp' -o -name '*.h' \) -print0 | xargs -r0 clang-format -i
script:
- echo FROM alexays/waybar:${distro} > Dockerfile
- echo ADD . /root >> Dockerfile
- docker build -t waybar .
- docker run waybar /bin/sh -c "cd /root && meson build -Dman-pages=enabled && ninja -C build"
jobs:
include:
- os: freebsd
compiler: clang
env:
before_install:
- export CPPFLAGS+=-isystem/usr/local/include LDFLAGS+=-L/usr/local/lib # sndio
- sudo sed -i '' 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
- sudo pkg install -y gtk-layer-shell gtkmm30 jsoncpp libdbusmenu sndio
libfmt libmpdclient libudev-devd meson pulseaudio scdoc spdlog
script:
- meson build -Dman-pages=enabled
- ninja -C build

View File

@ -2,4 +2,4 @@
FROM alpine:latest
RUN apk add --no-cache git meson alpine-sdk libinput-dev wayland-dev wayland-protocols mesa-dev libxkbcommon-dev eudev-dev pixman-dev gtkmm3-dev jsoncpp-dev pugixml-dev libnl3-dev pulseaudio-dev libmpdclient-dev sndio-dev scdoc
RUN apk add --no-cache git meson alpine-sdk libinput-dev wayland-dev wayland-protocols mesa-dev libxkbcommon-dev eudev-dev pixman-dev gtkmm3-dev jsoncpp-dev pugixml-dev libnl3-dev pulseaudio-dev libmpdclient-dev sndio-dev scdoc libxkbcommon tzdata playerctl-dev

View File

@ -1,6 +1,7 @@
# vim: ft=Dockerfile
FROM archlinux/base:latest
FROM archlinux:base-devel
RUN pacman -Syu --noconfirm && \
pacman -S git meson base-devel libinput wayland wayland-protocols pixman libxkbcommon mesa gtkmm3 jsoncpp pugixml scdoc libpulse libdbusmenu-gtk3 libmpdclient gobject-introspection --noconfirm
pacman -S --noconfirm git meson base-devel libinput wayland wayland-protocols pixman libxkbcommon mesa gtkmm3 jsoncpp pugixml scdoc libpulse libdbusmenu-gtk3 libmpdclient gobject-introspection libxkbcommon playerctl iniparser fftw && \
sed -Ei 's/#(en_(US|GB)\.UTF)/\1/' /etc/locale.gen && locale-gen

View File

@ -2,6 +2,48 @@
FROM debian:sid
RUN apt-get update && \
apt-get install -y build-essential meson ninja-build git pkg-config libinput10 libpugixml-dev libinput-dev wayland-protocols libwayland-client0 libwayland-cursor0 libwayland-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libxkbcommon-dev libudev-dev libpixman-1-dev libgtkmm-3.0-dev libjsoncpp-dev scdoc libdbusmenu-gtk3-dev libnl-3-dev libnl-genl-3-dev libpulse-dev libmpdclient-dev gobject-introspection libgirepository1.0-dev && \
apt-get clean
RUN apt update && \
apt install --no-install-recommends --no-install-suggests -y \
build-essential \
catch2 \
cmake \
git \
gobject-introspection \
libdbusmenu-gtk3-dev \
libegl1-mesa-dev \
libfmt-dev \
libgbm-dev \
libgirepository1.0-dev \
libgles2-mesa-dev \
libgtk-layer-shell-dev \
libgtkmm-3.0-dev \
libhowardhinnant-date-dev \
libiniparser-dev \
libinput-dev \
libjack-jackd2-dev \
libjsoncpp-dev \
libmpdclient-dev \
libnl-3-dev \
libnl-genl-3-dev \
libpixman-1-dev \
libplayerctl-dev \
libpugixml-dev \
libpulse-dev \
libsndio-dev \
libspdlog-dev \
libudev-dev \
libupower-glib-dev \
libwayland-dev \
libwireplumber-0.4-dev \
libxkbcommon-dev \
libxkbregistry-dev \
locales \
meson \
ninja-build \
pkg-config \
python3-pip \
python3-venv \
scdoc \
sudo \
wayland-protocols \
&& apt clean

View File

@ -1,7 +1,34 @@
# vim: ft=Dockerfile
FROM fedora:32
FROM fedora:latest
RUN dnf install sway meson git libinput-devel wayland-devel wayland-protocols-devel pugixml-devel egl-wayland-devel mesa-libEGL-devel mesa-libGLES-devel mesa-libgbm-devel libxkbcommon-devel libudev-devel pixman-devel gtkmm30-devel jsoncpp-devel scdoc -y && \
dnf group install "C Development Tools and Libraries" -y && \
RUN dnf install -y @c-development \
git-core glibc-langpack-en meson scdoc \
'pkgconfig(catch2)' \
'pkgconfig(date)' \
'pkgconfig(dbusmenu-gtk3-0.4)' \
'pkgconfig(fmt)' \
'pkgconfig(gdk-pixbuf-2.0)' \
'pkgconfig(gio-unix-2.0)' \
'pkgconfig(gtk-layer-shell-0)' \
'pkgconfig(gtkmm-3.0)' \
'pkgconfig(jack)' \
'pkgconfig(jsoncpp)' \
'pkgconfig(libevdev)' \
'pkgconfig(libinput)' \
'pkgconfig(libmpdclient)' \
'pkgconfig(libnl-3.0)' \
'pkgconfig(libnl-genl-3.0)' \
'pkgconfig(libpulse)' \
'pkgconfig(libudev)' \
'pkgconfig(playerctl)' \
'pkgconfig(pugixml)' \
'pkgconfig(sigc++-2.0)' \
'pkgconfig(spdlog)' \
'pkgconfig(upower-glib)' \
'pkgconfig(wayland-client)' \
'pkgconfig(wayland-cursor)' \
'pkgconfig(wayland-protocols)' \
'pkgconfig(wireplumber-0.4)' \
'pkgconfig(xkbregistry)' && \
dnf clean all -y

11
Dockerfiles/gentoo Normal file
View File

@ -0,0 +1,11 @@
# vim: ft=Dockerfile
FROM gentoo/stage3:latest
RUN export FEATURES="-ipc-sandbox -network-sandbox -pid-sandbox -sandbox -usersandbox" && \
emerge --sync && \
eselect news read --quiet new 1>/dev/null 2>&1 && \
emerge --verbose --update --deep --with-bdeps=y --backtrack=30 --newuse @world && \
USE="wayland gtk3 gtk -doc X pulseaudio minimal" emerge dev-vcs/git dev-libs/wayland dev-libs/wayland-protocols =dev-cpp/gtkmm-3.24.6 x11-libs/libxkbcommon \
x11-libs/gtk+:3 dev-libs/libdbusmenu dev-libs/libnl sys-power/upower media-libs/libpulse dev-libs/libevdev media-libs/libmpdclient \
media-sound/sndio gui-libs/gtk-layer-shell app-text/scdoc media-sound/playerctl dev-libs/iniparser sci-libs/fftw

View File

@ -3,5 +3,7 @@
FROM opensuse/tumbleweed:latest
RUN zypper -n up && \
zypper addrepo https://download.opensuse.org/repositories/X11:Wayland/openSUSE_Tumbleweed/X11:Wayland.repo | echo 'a' && \
zypper -n refresh && \
zypper -n install -t pattern devel_C_C++ && \
zypper -n install git meson clang libinput10 libinput-devel pugixml-devel libwayland-client0 libwayland-cursor0 wayland-protocols-devel wayland-devel Mesa-libEGL-devel Mesa-libGLESv2-devel libgbm-devel libxkbcommon-devel libudev-devel libpixman-1-0-devel gtkmm3-devel jsoncpp-devel scdoc
zypper -n install git meson clang libinput10 libinput-devel pugixml-devel libwayland-client0 libwayland-cursor0 wayland-protocols-devel wayland-devel Mesa-libEGL-devel Mesa-libGLESv2-devel libgbm-devel libxkbcommon-devel libudev-devel libpixman-1-0-devel gtkmm3-devel jsoncpp-devel libxkbregistry-devel scdoc playerctl-devel

View File

@ -16,5 +16,12 @@ install: build
run: build
./build/waybar
debug-run: build-debug
./build/waybar --log-level debug
test:
meson test -C build --no-rebuild --verbose --suite waybar
.PHONY: test
clean:
rm -rf build

View File

@ -1,26 +1,33 @@
# Waybar [![Travis](https://travis-ci.org/Alexays/Waybar.svg?branch=master)](https://travis-ci.org/Alexays/Waybar) [![Licence](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Paypal Donate](https://img.shields.io/badge/Donate-Paypal-2244dd.svg)](https://paypal.me/ARouillard)<br>![Waybar](https://raw.githubusercontent.com/alexays/waybar/master/preview-2.png)
# Waybar [![Licence](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Paypal Donate](https://img.shields.io/badge/Donate-Paypal-2244dd.svg)](https://paypal.me/ARouillard)<br>![Waybar](https://raw.githubusercontent.com/alexays/waybar/master/preview-2.png)
> Highly customizable Wayland bar for Sway and Wlroots based compositors.<br>
> Available in Arch [community](https://www.archlinux.org/packages/community/x86_64/waybar/) or
[AUR](https://aur.archlinux.org/packages/waybar-git/), [openSUSE](https://build.opensuse.org/package/show/X11:Wayland/waybar), and [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=waybar)<br>
> Available in [all major distributions](https://github.com/Alexays/Waybar/wiki/Installation)<br>
> *Waybar [examples](https://github.com/Alexays/Waybar/wiki/Examples)*
#### Current features
- Sway (Workspaces, Binding mode, Focused window name)
- River (Mapping mode, Tags, Focused window name)
- Hyprland (Window Icons, Workspaces, Focused window name)
- DWL (Tags, Focused window name) [requires dwl ipc patch](https://github.com/djpohly/dwl/wiki/ipc)
- Tray [#21](https://github.com/Alexays/Waybar/issues/21)
- Local time
- Battery
- UPower
- Power profiles daemon
- Network
- Bluetooth
- Pulseaudio
- Privacy Info
- Wireplumber
- Disk
- Memory
- Cpu load average
- Temperature
- MPD
- Custom scripts
- Custom image
- Multiple output configuration
- And much more customizations
- And many more customizations
#### Configuration and Styling
@ -30,7 +37,7 @@
Waybar is available from a number of Linux distributions:
[![Packaging status](https://repology.org/badge/vertical-allrepos/waybar.svg)](https://repology.org/project/waybar/versions)
[![Packaging status](https://repology.org/badge/vertical-allrepos/waybar.svg?columns=3&header=Waybar%20Downstream%20Packaging)](https://repology.org/project/waybar/versions)
An Ubuntu PPA with more recent versions is available
[here](https://launchpad.net/~nschloe/+archive/ubuntu/waybar).
@ -68,6 +75,9 @@ libappindicator-gtk3 [Tray module]
libdbusmenu-gtk3 [Tray module]
libmpdclient [MPD module]
libsndio [sndio module]
libevdev [KeyboardState module]
xkbregistry
upower [UPower battery module]
```
**Build dependencies**
@ -79,13 +89,14 @@ scdoc
wayland-protocols
```
On Ubuntu you can install all the relevant dependencies using this command (tested with 19.10 and 20.04):
On Ubuntu, you can install all the relevant dependencies using this command (tested with 19.10 and 20.04):
```
sudo apt install \
clang-tidy \
gobject-introspection \
libdbusmenu-gtk3-dev \
libevdev-dev \
libfmt-dev \
libgirepository1.0-dev \
libgtk-3-dev \
@ -99,12 +110,15 @@ sudo apt install \
libsigc++-2.0-dev \
libspdlog-dev \
libwayland-dev \
scdoc
scdoc \
upower \
libxkbregistry-dev
```
Contributions welcome! - have fun :)<br>
The style guidelines is [Google's](https://google.github.io/styleguide/cppguide.html)
Contributions welcome!<br>
Have fun :)<br>
The style guidelines are [Google's](https://google.github.io/styleguide/cppguide.html)
## License

10
default.nix Normal file
View File

@ -0,0 +1,10 @@
(import
(
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{ src = ./.; }
).defaultNix

44
flake.lock generated Normal file
View File

@ -0,0 +1,44 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1711163522,
"narHash": "sha256-YN/Ciidm+A0fmJPWlHBGvVkcarYWSC+s3NTPk/P+q3c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "44d0940ea560dee511026a53f0e2e2cde489b4d4",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

67
flake.nix Normal file
View File

@ -0,0 +1,67 @@
{
description = "Highly customizable Wayland bar for Sway and Wlroots based compositors";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = { self, nixpkgs, ... }:
let
inherit (nixpkgs) lib;
genSystems = func: lib.genAttrs [
"x86_64-linux"
"aarch64-linux"
]
(system: func (import nixpkgs { inherit system; }));
mkDate = longDate: (lib.concatStringsSep "-" [
(builtins.substring 0 4 longDate)
(builtins.substring 4 2 longDate)
(builtins.substring 6 2 longDate)
]);
in
{
devShells = genSystems
(pkgs:
{
default =
pkgs.mkShell
{
name = "waybar-shell";
# inherit attributes from upstream nixpkgs derivation
inherit (pkgs.waybar) buildInputs depsBuildBuild depsBuildBuildPropagated depsBuildTarget
depsBuildTargetPropagated depsHostHost depsHostHostPropagated depsTargetTarget
depsTargetTargetPropagated propagatedBuildInputs propagatedNativeBuildInputs strictDeps;
# overrides for local development
nativeBuildInputs = pkgs.waybar.nativeBuildInputs ++ (with pkgs; [
clang-tools
gdb
]);
};
});
overlays.default = final: prev: {
waybar = final.callPackage ./nix/default.nix {
# take the first "version: '...'" from meson.build
version =
(builtins.head (builtins.split "'"
(builtins.elemAt
(builtins.split " version: '" (builtins.readFile ./meson.build))
2)))
+ "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty");
};
};
packages = genSystems (pkgs:
let packages = self.overlays.default pkgs pkgs;
in packages // {
default = packages.waybar;
});
};
}

27
include/AAppIconLabel.hpp Normal file
View File

@ -0,0 +1,27 @@
#pragma once
#include <gtkmm/box.h>
#include <gtkmm/image.h>
#include "AIconLabel.hpp"
namespace waybar {
class AAppIconLabel : public AIconLabel {
public:
AAppIconLabel(const Json::Value &config, const std::string &name, const std::string &id,
const std::string &format, uint16_t interval = 0, bool ellipsize = false,
bool enable_click = false, bool enable_scroll = false);
virtual ~AAppIconLabel() = default;
auto update() -> void override;
protected:
void updateAppIconName(const std::string &app_identifier,
const std::string &alternative_app_identifier);
void updateAppIcon();
unsigned app_icon_size_{24};
bool update_app_icon_{true};
std::string app_icon_name_;
};
} // namespace waybar

25
include/AIconLabel.hpp Normal file
View File

@ -0,0 +1,25 @@
#pragma once
#include <gtkmm/box.h>
#include <gtkmm/image.h>
#include "ALabel.hpp"
namespace waybar {
class AIconLabel : public ALabel {
public:
AIconLabel(const Json::Value &config, const std::string &name, const std::string &id,
const std::string &format, uint16_t interval = 0, bool ellipsize = false,
bool enable_click = false, bool enable_scroll = false);
virtual ~AIconLabel() = default;
auto update() -> void override;
protected:
Gtk::Image image_;
Gtk::Box box_;
bool iconEnabled() const;
};
} // namespace waybar

View File

@ -3,6 +3,7 @@
#include <glibmm/markup.h>
#include <gtkmm/label.h>
#include <json/json.h>
#include "AModule.hpp"
namespace waybar {
@ -10,20 +11,21 @@ namespace waybar {
class ALabel : public AModule {
public:
ALabel(const Json::Value &, const std::string &, const std::string &, const std::string &format,
uint16_t interval = 0, bool ellipsize = false, bool enable_click = false, bool enable_scroll = false);
uint16_t interval = 0, bool ellipsize = false, bool enable_click = false,
bool enable_scroll = false);
virtual ~ALabel() = default;
virtual auto update() -> void;
auto update() -> void override;
virtual std::string getIcon(uint16_t, const std::string &alt = "", uint16_t max = 0);
virtual std::string getIcon(uint16_t, std::vector<std::string> &alts, uint16_t max = 0);
virtual std::string getIcon(uint16_t, const std::vector<std::string> &alts, uint16_t max = 0);
protected:
Gtk::Label label_;
std::string format_;
Gtk::Label label_;
std::string format_;
const std::chrono::seconds interval_;
bool alt_ = false;
std::string default_format_;
bool alt_ = false;
std::string default_format_;
virtual bool handleToggle(GdkEventButton *const &e);
bool handleToggle(GdkEventButton *const &e) override;
virtual std::string getState(uint8_t value, bool lesser = false);
};

View File

@ -11,31 +11,64 @@ namespace waybar {
class AModule : public IModule {
public:
AModule(const Json::Value &, const std::string &, const std::string &, bool enable_click = false,
bool enable_scroll = false);
virtual ~AModule();
virtual auto update() -> void;
virtual operator Gtk::Widget &();
static constexpr const char *MODULE_CLASS = "module";
virtual ~AModule();
auto update() -> void override;
virtual auto refresh(int) -> void{};
operator Gtk::Widget &() override;
auto doAction(const std::string &name) -> void override;
/// Emitting on this dispatcher triggers a update() call
Glib::Dispatcher dp;
protected:
// Don't need to make an object directly
// Derived classes are able to use it
AModule(const Json::Value &, const std::string &, const std::string &, bool enable_click = false,
bool enable_scroll = false);
enum SCROLL_DIR { NONE, UP, DOWN, LEFT, RIGHT };
SCROLL_DIR getScrollDir(GdkEventScroll *e);
bool tooltipEnabled();
bool tooltipEnabled();
const std::string name_;
const std::string name_;
const Json::Value &config_;
Gtk::EventBox event_box_;
Gtk::EventBox event_box_;
virtual bool handleToggle(GdkEventButton *const &ev);
virtual bool handleScroll(GdkEventScroll *);
virtual bool handleRelease(GdkEventButton *const &ev);
private:
bool handleUserEvent(GdkEventButton *const &ev);
const bool isTooltip;
std::vector<int> pid_;
gdouble distance_scrolled_y_;
gdouble distance_scrolled_x_;
gdouble distance_scrolled_y_;
gdouble distance_scrolled_x_;
std::map<std::string, std::string> eventActionMap_;
static const inline std::map<std::pair<uint, GdkEventType>, std::string> eventMap_{
{std::make_pair(1, GdkEventType::GDK_BUTTON_PRESS), "on-click"},
{std::make_pair(1, GdkEventType::GDK_BUTTON_RELEASE), "on-click-release"},
{std::make_pair(1, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click"},
{std::make_pair(1, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click"},
{std::make_pair(2, GdkEventType::GDK_BUTTON_PRESS), "on-click-middle"},
{std::make_pair(2, GdkEventType::GDK_BUTTON_RELEASE), "on-click-middle-release"},
{std::make_pair(2, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-middle"},
{std::make_pair(2, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-middle"},
{std::make_pair(3, GdkEventType::GDK_BUTTON_PRESS), "on-click-right"},
{std::make_pair(3, GdkEventType::GDK_BUTTON_RELEASE), "on-click-right-release"},
{std::make_pair(3, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-right"},
{std::make_pair(3, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-right"},
{std::make_pair(8, GdkEventType::GDK_BUTTON_PRESS), "on-click-backward"},
{std::make_pair(8, GdkEventType::GDK_BUTTON_RELEASE), "on-click-backward-release"},
{std::make_pair(8, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-backward"},
{std::make_pair(8, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-backward"},
{std::make_pair(9, GdkEventType::GDK_BUTTON_PRESS), "on-click-forward"},
{std::make_pair(9, GdkEventType::GDK_BUTTON_RELEASE), "on-click-forward-release"},
{std::make_pair(9, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-forward"},
{std::make_pair(9, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-forward"}};
};
} // namespace waybar

19
include/ASlider.hpp Normal file
View File

@ -0,0 +1,19 @@
#pragma once
#include "AModule.hpp"
#include "gtkmm/scale.h"
namespace waybar {
class ASlider : public AModule {
public:
ASlider(const Json::Value& config, const std::string& name, const std::string& id);
virtual void onValueChanged();
protected:
bool vertical_ = false;
int min_ = 0, max_ = 100, curr_ = 50;
Gtk::Scale scale_;
};
} // namespace waybar

View File

@ -7,8 +7,9 @@ namespace waybar {
class IModule {
public:
virtual ~IModule() = default;
virtual auto update() -> void = 0;
virtual operator Gtk::Widget &() = 0;
virtual auto update() -> void = 0;
virtual operator Gtk::Widget&() = 0;
virtual auto doAction(const std::string& name) -> void = 0;
};
} // namespace waybar

View File

@ -8,7 +8,11 @@
#include <gtkmm/window.h>
#include <json/json.h>
#include <memory>
#include <vector>
#include "AModule.hpp"
#include "group.hpp"
#include "xdg-output-unstable-v1-client-protocol.h"
namespace waybar {
@ -16,7 +20,8 @@ namespace waybar {
class Factory;
struct waybar_output {
Glib::RefPtr<Gdk::Monitor> monitor;
std::string name;
std::string name;
std::string identifier;
std::unique_ptr<struct zxdg_output_v1, decltype(&zxdg_output_v1_destroy)> xdg_output = {
nullptr, &zxdg_output_v1_destroy};
@ -35,54 +40,83 @@ struct bar_margins {
int left = 0;
};
class BarSurface {
protected:
BarSurface() = default;
public:
virtual void setExclusiveZone(bool enable) = 0;
virtual void setLayer(bar_layer layer) = 0;
virtual void setMargins(const struct bar_margins &margins) = 0;
virtual void setPosition(const std::string_view &position) = 0;
virtual void setSize(uint32_t width, uint32_t height) = 0;
virtual void commit(){};
virtual ~BarSurface() = default;
struct bar_mode {
bar_layer layer;
bool exclusive;
bool passthrough;
bool visible;
};
#ifdef HAVE_SWAY
namespace modules::sway {
class BarIpcClient;
}
#endif // HAVE_SWAY
class Bar {
public:
using bar_mode_map = std::map<std::string, struct bar_mode>;
static const bar_mode_map PRESET_MODES;
static const std::string MODE_DEFAULT;
static const std::string MODE_INVISIBLE;
Bar(struct waybar_output *w_output, const Json::Value &);
Bar(const Bar &) = delete;
~Bar() = default;
~Bar();
void setMode(const std::string &mode);
void setVisible(bool visible);
void toggle();
void handleSignal(int);
struct waybar_output *output;
Json::Value config;
struct wl_surface * surface;
bool visible = true;
bool vertical = false;
Gtk::Window window;
Json::Value config;
struct wl_surface *surface;
bool visible = true;
Gtk::Window window;
Gtk::Orientation orientation = Gtk::ORIENTATION_HORIZONTAL;
Gtk::PositionType position = Gtk::POS_TOP;
int x_global;
int y_global;
#ifdef HAVE_SWAY
std::string bar_id;
#endif
private:
void onMap(GdkEventAny *);
auto setupWidgets() -> void;
void getModules(const Factory &, const std::string &);
void getModules(const Factory &, const std::string &, waybar::Group *);
void setupAltFormatKeyForModule(const std::string &module_name);
void setupAltFormatKeyForModuleList(const char *module_list_name);
void setMode(const bar_mode &);
void setPassThrough(bool passthrough);
void setPosition(Gtk::PositionType position);
void onConfigure(GdkEventConfigure *ev);
void configureGlobalOffset(int width, int height);
void onOutputGeometryChanged();
std::unique_ptr<BarSurface> surface_impl_;
bar_layer layer_;
Gtk::Box left_;
Gtk::Box center_;
Gtk::Box right_;
Gtk::Box box_;
std::vector<std::unique_ptr<waybar::AModule>> modules_left_;
std::vector<std::unique_ptr<waybar::AModule>> modules_center_;
std::vector<std::unique_ptr<waybar::AModule>> modules_right_;
/* Copy initial set of modes to allow customization */
bar_mode_map configured_modes = PRESET_MODES;
std::string last_mode_{MODE_DEFAULT};
struct bar_margins margins_;
uint32_t width_, height_;
bool passthrough_;
Gtk::Box left_;
Gtk::Box center_;
Gtk::Box right_;
Gtk::Box box_;
std::vector<std::shared_ptr<waybar::AModule>> modules_left_;
std::vector<std::shared_ptr<waybar::AModule>> modules_center_;
std::vector<std::shared_ptr<waybar::AModule>> modules_right_;
#ifdef HAVE_SWAY
using BarIpcClient = modules::sway::BarIpcClient;
std::unique_ptr<BarIpcClient> _ipc_client;
#endif
std::vector<std::shared_ptr<waybar::AModule>> modules_all_;
};
} // namespace waybar

View File

@ -3,12 +3,13 @@
#include <fmt/format.h>
#include <gdk/gdk.h>
#include <gdk/gdkwayland.h>
#include <unistd.h>
#include <wayland-client.h>
#include <wordexp.h>
#include "bar.hpp"
struct zwlr_layer_shell_v1;
#include "bar.hpp"
#include "config.hpp"
#include "util/css_reload_helper.hpp"
#include "util/portal.hpp"
struct zwp_idle_inhibitor_v1;
struct zwp_idle_inhibit_manager_v1;
@ -17,26 +18,24 @@ namespace waybar {
class Client {
public:
static Client *inst();
int main(int argc, char *argv[]);
int main(int argc, char *argv[]);
void reset();
Glib::RefPtr<Gtk::Application> gtk_app;
Glib::RefPtr<Gdk::Display> gdk_display;
struct wl_display * wl_display = nullptr;
struct wl_registry * registry = nullptr;
struct zwlr_layer_shell_v1 * layer_shell = nullptr;
struct zxdg_output_manager_v1 * xdg_output_manager = nullptr;
Glib::RefPtr<Gtk::Application> gtk_app;
Glib::RefPtr<Gdk::Display> gdk_display;
struct wl_display *wl_display = nullptr;
struct wl_registry *registry = nullptr;
struct zxdg_output_manager_v1 *xdg_output_manager = nullptr;
struct zwp_idle_inhibit_manager_v1 *idle_inhibit_manager = nullptr;
std::vector<std::unique_ptr<Bar>> bars;
std::vector<std::unique_ptr<Bar>> bars;
Config config;
std::string bar_id;
private:
Client() = default;
std::tuple<const std::string, const std::string> getConfigs(const std::string &config,
const std::string &style) const;
void bindInterfaces();
const std::string getValidPath(const std::vector<std::string> &paths) const;
void handleOutput(struct waybar_output &output);
bool isValidOutput(const Json::Value &config, struct waybar_output &output);
auto setupConfig(const std::string &config_file) -> void;
const std::string getStyle(const std::string &style, std::optional<Appearance> appearance);
void bindInterfaces();
void handleOutput(struct waybar_output &output);
auto setupCss(const std::string &css_file) -> void;
struct waybar_output &getOutput(void *);
std::vector<Json::Value> getOutputConfigs(struct waybar_output &output);
@ -44,14 +43,19 @@ class Client {
static void handleGlobal(void *data, struct wl_registry *registry, uint32_t name,
const char *interface, uint32_t version);
static void handleGlobalRemove(void *data, struct wl_registry *registry, uint32_t name);
static void handleOutputDone(void *, struct zxdg_output_v1 *);
static void handleOutputName(void *, struct zxdg_output_v1 *, const char *);
void handleMonitorAdded(Glib::RefPtr<Gdk::Monitor> monitor);
void handleMonitorRemoved(Glib::RefPtr<Gdk::Monitor> monitor);
static void handleOutputDescription(void *, struct zxdg_output_v1 *, const char *);
void handleMonitorAdded(Glib::RefPtr<Gdk::Monitor> monitor);
void handleMonitorRemoved(Glib::RefPtr<Gdk::Monitor> monitor);
void handleDeferredMonitorRemoval(Glib::RefPtr<Gdk::Monitor> monitor);
Json::Value config_;
Glib::RefPtr<Gtk::StyleContext> style_context_;
Glib::RefPtr<Gtk::CssProvider> css_provider_;
Glib::RefPtr<Gtk::CssProvider> css_provider_;
std::unique_ptr<Portal> portal;
std::list<struct waybar_output> outputs_;
std::unique_ptr<CssReloadHelper> m_cssReloadHelper;
std::string m_cssFile;
};
} // namespace waybar

40
include/config.hpp Normal file
View File

@ -0,0 +1,40 @@
#pragma once
#include <json/json.h>
#include <optional>
#include <string>
#ifndef SYSCONFDIR
#define SYSCONFDIR "/etc"
#endif
namespace waybar {
class Config {
public:
static const std::vector<std::string> CONFIG_DIRS;
static const char *CONFIG_PATH_ENV;
/* Try to find any of provided names in the supported set of config directories */
static std::optional<std::string> findConfigPath(
const std::vector<std::string> &names, const std::vector<std::string> &dirs = CONFIG_DIRS);
Config() = default;
void load(const std::string &config);
Json::Value &getConfig() { return config_; }
std::vector<Json::Value> getOutputConfigs(const std::string &name, const std::string &identifier);
private:
void setupConfig(Json::Value &dst, const std::string &config_file, int depth);
void resolveConfigIncludes(Json::Value &config, int depth);
void mergeConfig(Json::Value &a_config_, Json::Value &b_config_);
std::string config_file_;
Json::Value config_;
};
} // namespace waybar

View File

@ -1,66 +1,20 @@
#pragma once
#include <json/json.h>
#include "modules/clock.hpp"
#ifdef HAVE_SWAY
#include "modules/sway/mode.hpp"
#include "modules/sway/window.hpp"
#include "modules/sway/workspaces.hpp"
#include "modules/sway/language.hpp"
#endif
#ifdef HAVE_WLR
#include "modules/wlr/taskbar.hpp"
#endif
#ifdef HAVE_RIVER
#include "modules/river/tags.hpp"
#endif
#if defined(__linux__) && !defined(NO_FILESYSTEM)
#include "modules/battery.hpp"
#endif
#if defined(HAVE_CPU_LINUX) || defined(HAVE_CPU_BSD)
#include "modules/cpu.hpp"
#endif
#include "modules/idle_inhibitor.hpp"
#if defined(HAVE_MEMORY_LINUX) || defined(HAVE_MEMORY_BSD)
#include "modules/memory.hpp"
#endif
#include "modules/disk.hpp"
#ifdef HAVE_DBUSMENU
#include "modules/sni/tray.hpp"
#endif
#ifdef HAVE_LIBNL
#include "modules/network.hpp"
#endif
#ifdef HAVE_LIBUDEV
#include "modules/backlight.hpp"
#endif
#ifdef HAVE_LIBPULSE
#include "modules/pulseaudio.hpp"
#endif
#ifdef HAVE_LIBMPDCLIENT
#include "modules/mpd/mpd.hpp"
#endif
#ifdef HAVE_LIBSNDIO
#include "modules/sndio.hpp"
#endif
#include "bar.hpp"
#include "modules/custom.hpp"
#include "modules/temperature.hpp"
#if defined(__linux__)
# ifdef WANT_RFKILL
# include "modules/bluetooth.hpp"
# endif
#endif
#include <AModule.hpp>
namespace waybar {
class Bar;
class Factory {
public:
Factory(const Bar& bar, const Json::Value& config);
AModule* makeModule(const std::string& name) const;
AModule* makeModule(const std::string& name, const std::string& pos) const;
private:
const Bar& bar_;
const Bar& bar_;
const Json::Value& config_;
};

35
include/group.hpp Normal file
View File

@ -0,0 +1,35 @@
#pragma once
#include <gtkmm/box.h>
#include <gtkmm/widget.h>
#include <json/json.h>
#include "AModule.hpp"
#include "gtkmm/revealer.h"
namespace waybar {
class Group : public AModule {
public:
Group(const std::string&, const std::string&, const Json::Value&, bool);
virtual ~Group() = default;
auto update() -> void override;
operator Gtk::Widget&() override;
virtual Gtk::Box& getBox();
void addWidget(Gtk::Widget& widget);
bool handleMouseHover(GdkEventCrossing* const& e);
protected:
Gtk::Box box;
Gtk::Box revealer_box;
Gtk::Revealer revealer;
bool is_first_widget = true;
bool is_drawer = false;
std::string add_class_to_drawer_children;
void addHoverHandlerTo(Gtk::Widget& widget);
};
} // namespace waybar

View File

@ -1,13 +1,14 @@
#pragma once
#include <memory>
#include <optional>
#include <string>
#include <string_view>
#include <vector>
#include "ALabel.hpp"
#include "util/backlight_backend.hpp"
#include "util/json.hpp"
#include "util/sleeper_thread.hpp"
struct udev;
struct udev_device;
@ -15,47 +16,17 @@ struct udev_device;
namespace waybar::modules {
class Backlight : public ALabel {
class BacklightDev {
public:
BacklightDev() = default;
BacklightDev(std::string name, int actual, int max);
std::string_view name() const;
int get_actual() const;
void set_actual(int actual);
int get_max() const;
void set_max(int max);
friend inline bool operator==(const BacklightDev &lhs, const BacklightDev &rhs) {
return lhs.name_ == rhs.name_ && lhs.actual_ == rhs.actual_ && lhs.max_ == rhs.max_;
}
private:
std::string name_;
int actual_ = 1;
int max_ = 1;
};
public:
Backlight(const std::string &, const Json::Value &);
~Backlight();
auto update() -> void;
virtual ~Backlight() = default;
auto update() -> void override;
private:
template <class ForwardIt>
static const BacklightDev *best_device(ForwardIt first, ForwardIt last, std::string_view);
template <class ForwardIt, class Inserter>
static void upsert_device(ForwardIt first, ForwardIt last, Inserter inserter, udev_device *dev);
template <class ForwardIt, class Inserter>
static void enumerate_devices(ForwardIt first, ForwardIt last, Inserter inserter, udev *udev);
bool handleScroll(GdkEventScroll *e) override;
const std::string preferred_device_;
static constexpr int EPOLL_MAX_EVENTS = 16;
const std::string preferred_device_;
std::optional<BacklightDev> previous_best_;
std::string previous_format_;
std::string previous_format_;
std::mutex udev_thread_mutex_;
std::vector<BacklightDev> devices_;
// thread must destruct before shared data
util::SleeperThread udev_thread_;
util::BacklightBackend backend;
};
} // namespace waybar::modules

View File

@ -0,0 +1,24 @@
#pragma once
#include <chrono>
#include "ASlider.hpp"
#include "util/backlight_backend.hpp"
namespace waybar::modules {
class BacklightSlider : public ASlider {
public:
BacklightSlider(const std::string&, const Json::Value&);
virtual ~BacklightSlider() = default;
void update() override;
void onValueChanged() override;
private:
std::chrono::milliseconds interval_;
std::string preferred_device_;
util::BacklightBackend backend;
};
} // namespace waybar::modules

View File

@ -1,53 +1,54 @@
#pragma once
#ifdef FILESYSTEM_EXPERIMENTAL
#include <experimental/filesystem>
#else
#include <filesystem>
#endif
#include <fmt/format.h>
#include <filesystem>
#if defined(__linux__)
#include <sys/inotify.h>
#endif
#include <algorithm>
#include <fstream>
#include <string>
#include <vector>
#include "ALabel.hpp"
#include "bar.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
#ifdef FILESYSTEM_EXPERIMENTAL
namespace fs = std::experimental::filesystem;
#else
namespace fs = std::filesystem;
#endif
class Battery : public ALabel {
public:
Battery(const std::string&, const Json::Value&);
~Battery();
auto update() -> void;
Battery(const std::string&, const waybar::Bar&, const Json::Value&);
virtual ~Battery();
auto update() -> void override;
private:
static inline const fs::path data_dir_ = "/sys/class/power_supply/";
void refreshBatteries();
void worker();
const std::string getAdapterStatus(uint8_t capacity) const;
const std::tuple<uint8_t, float, std::string> getInfos();
const std::string formatTimeRemaining(float hoursRemaining);
void refreshBatteries();
void worker();
const std::string getAdapterStatus(uint8_t capacity) const;
std::tuple<uint8_t, float, std::string, float, uint16_t, float> getInfos();
const std::string formatTimeRemaining(float hoursRemaining);
void setBarClass(std::string&);
int global_watch;
std::map<fs::path,int> batteries_;
fs::path adapter_;
int battery_watch_fd_;
int global_watch_fd_;
std::mutex battery_list_mutex_;
std::string old_status_;
int global_watch;
std::map<fs::path, int> batteries_;
fs::path adapter_;
int battery_watch_fd_;
int global_watch_fd_;
std::mutex battery_list_mutex_;
std::string old_status_;
bool warnFirstTime_{true};
const Bar& bar_;
util::SleeperThread thread_;
util::SleeperThread thread_battery_update_;
util::SleeperThread thread_timer_;
util::SleeperThread thread_;
util::SleeperThread thread_battery_update_;
util::SleeperThread thread_timer_;
};
} // namespace waybar::modules

View File

@ -1,26 +1,80 @@
#pragma once
#include <fmt/format.h>
#include "ALabel.hpp"
#include <fmt/chrono.h>
#include "util/sleeper_thread.hpp"
#ifdef WANT_RFKILL
#include "util/rfkill.hpp"
#endif
#include <gio/gio.h>
#include <optional>
#include <string>
#include <vector>
namespace waybar::modules {
class Bluetooth : public ALabel {
struct ControllerInfo {
std::string path;
std::string address;
std::string address_type;
// std::string name; // just use alias instead
std::string alias;
bool powered;
bool discoverable;
bool pairable;
bool discovering;
};
// NOTE: there are some properties that not all devices provide
struct DeviceInfo {
std::string path;
std::string paired_controller;
std::string address;
std::string address_type;
// std::optional<std::string> name; // just use alias instead
std::string alias;
std::optional<std::string> icon;
bool paired;
bool trusted;
bool blocked;
bool connected;
bool services_resolved;
// NOTE: experimental feature in bluez
std::optional<unsigned char> battery_percentage;
};
public:
Bluetooth(const std::string&, const Json::Value&);
~Bluetooth() = default;
auto update() -> void;
virtual ~Bluetooth() = default;
auto update() -> void override;
private:
std::string status_;
util::SleeperThread thread_;
util::SleeperThread intervall_thread_;
static auto onInterfaceAddedOrRemoved(GDBusObjectManager*, GDBusObject*, GDBusInterface*,
gpointer) -> void;
static auto onInterfaceProxyPropertiesChanged(GDBusObjectManagerClient*, GDBusObjectProxy*,
GDBusProxy*, GVariant*, const gchar* const*,
gpointer) -> void;
auto getDeviceBatteryPercentage(GDBusObject*) -> std::optional<unsigned char>;
auto getDeviceProperties(GDBusObject*, DeviceInfo&) -> bool;
auto getControllerProperties(GDBusObject*, ControllerInfo&) -> bool;
// Returns std::nullopt if no controller could be found
auto findCurController() -> std::optional<ControllerInfo>;
auto findConnectedDevices(const std::string&, std::vector<DeviceInfo>&) -> void;
#ifdef WANT_RFKILL
util::Rfkill rfkill_;
#endif
const std::unique_ptr<GDBusObjectManager, void (*)(GDBusObjectManager*)> manager_;
std::string state_;
std::optional<ControllerInfo> cur_controller_;
std::vector<DeviceInfo> connected_devices_;
DeviceInfo cur_focussed_device_;
std::string device_enumerate_;
std::vector<std::string> device_preference_;
};
} // namespace waybar::modules

49
include/modules/cava.hpp Normal file
View File

@ -0,0 +1,49 @@
#pragma once
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace cava {
extern "C" {
#include <cava/common.h>
}
} // namespace cava
namespace waybar::modules {
using namespace std::literals::chrono_literals;
class Cava final : public ALabel {
public:
Cava(const std::string&, const Json::Value&);
virtual ~Cava();
auto update() -> void override;
auto doAction(const std::string& name) -> void override;
private:
util::SleeperThread thread_;
util::SleeperThread thread_fetch_input_;
struct cava::error_s error_ {}; // cava errors
struct cava::config_params prm_ {}; // cava parameters
struct cava::audio_raw audio_raw_ {}; // cava handled raw audio data(is based on audio_data)
struct cava::audio_data audio_data_ {}; // cava audio data
struct cava::cava_plan* plan_; //{new cava_plan{}};
// Cava API to read audio source
cava::ptr input_source_;
// Delay to handle audio source
std::chrono::milliseconds frame_time_milsec_{1s};
// Text to display
std::string text_{""};
int rePaint_{1};
std::chrono::seconds fetch_input_delay_{4};
std::chrono::seconds suspend_silence_delay_{0};
bool silence_{false};
bool hide_on_silence_{false};
int sleep_counter_{0};
// Cava method
void pause_resume();
// ModuleActionMap
static inline std::map<const std::string, void (waybar::modules::Cava::*const)()> actionMap_{
{"mode", &waybar::modules::Cava::pause_resume}};
};
} // namespace waybar::modules

60
include/modules/cffi.hpp Normal file
View File

@ -0,0 +1,60 @@
#pragma once
#include <string>
#include "AModule.hpp"
#include "util/command.hpp"
#include "util/json.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
namespace ffi {
extern "C" {
typedef struct wbcffi_module wbcffi_module;
typedef struct {
wbcffi_module* obj;
const char* waybar_version;
GtkContainer* (*get_root_widget)(wbcffi_module*);
void (*queue_update)(wbcffi_module*);
} wbcffi_init_info;
struct wbcffi_config_entry {
const char* key;
const char* value;
};
}
} // namespace ffi
class CFFI : public AModule {
public:
CFFI(const std::string&, const std::string&, const Json::Value&);
virtual ~CFFI();
virtual auto refresh(int signal) -> void override;
virtual auto doAction(const std::string& name) -> void override;
virtual auto update() -> void override;
private:
///
void* cffi_instance_ = nullptr;
typedef void*(InitFn)(const ffi::wbcffi_init_info* init_info,
const ffi::wbcffi_config_entry* config_entries, size_t config_entries_len);
typedef void(DenitFn)(void* instance);
typedef void(RefreshFn)(void* instance, int signal);
typedef void(DoActionFn)(void* instance, const char* name);
typedef void(UpdateFn)(void* instance);
// FFI hooks
struct {
std::function<InitFn> init = nullptr;
std::function<DenitFn> deinit = nullptr;
std::function<RefreshFn> refresh = [](void*, int) {};
std::function<DoActionFn> doAction = [](void*, const char*) {};
std::function<UpdateFn> update = [](void*) {};
} hooks_;
};
} // namespace waybar::modules

View File

@ -1,42 +1,89 @@
#pragma once
#include <fmt/format.h>
#if FMT_VERSION < 60000
#include <fmt/time.h>
#else
#include <fmt/chrono.h>
#endif
#include <date/tz.h>
#include "ALabel.hpp"
#include "util/date.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
struct waybar_time {
std::locale locale;
date::zoned_seconds ztime;
};
const std::string kCldPlaceholder{"calendar"};
const std::string kTZPlaceholder{"tz_list"};
const std::string kOrdPlaceholder{"ordinal_date"};
class Clock : public ALabel {
enum class CldMode { MONTH, YEAR };
enum class WS { LEFT, RIGHT, HIDDEN };
class Clock final : public ALabel {
public:
Clock(const std::string&, const Json::Value&);
~Clock() = default;
auto update() -> void;
virtual ~Clock() = default;
auto update() -> void override;
auto doAction(const std::string&) -> void override;
private:
const std::locale locale_;
// tooltip
const std::string tlpFmt_;
std::string tlpText_{""}; // tooltip text to print
// Calendar
const bool cldInTooltip_; // calendar in tooltip
/*
0 - calendar.format.months
1 - calendar.format.weekdays
2 - calendar.format.days
3 - calendar.format.today
4 - calendar.format.weeks
5 - tooltip-format
*/
std::map<int, std::string const> fmtMap_;
uint cldMonCols_{3}; // calendar count month columns
int cldWnLen_{3}; // calendar week number length
const int cldMonColLen_{20}; // calendar month column length
WS cldWPos_{WS::HIDDEN}; // calendar week side to print
months cldCurrShift_{0}; // calendar months shift
int cldShift_{1}; // calendar months shift factor
year_month_day cldYearShift_; // calendar Year mode. Cached ymd
std::string cldYearCached_; // calendar Year mode. Cached calendar
year_month cldMonShift_; // calendar Month mode. Cached ym
std::string cldMonCached_; // calendar Month mode. Cached calendar
day cldBaseDay_{0}; // calendar Cached day. Is used when today is changing(midnight)
std::string cldText_{""}; // calendar text to print
CldMode cldMode_{CldMode::MONTH};
auto get_calendar(const year_month_day& today, const year_month_day& ymd, const time_zone* tz)
-> const std::string;
// get local time zone
auto local_zone() -> const time_zone*;
// time zoned time in tooltip
const bool tzInTooltip_; // if need to print time zones text
std::vector<const time_zone*> tzList_; // time zones list
int tzCurrIdx_; // current time zone index for tzList_
std::string tzText_{""}; // time zones text to print
util::SleeperThread thread_;
std::locale locale_;
const date::time_zone* time_zone_;
bool fixed_time_zone_;
int time_zone_idx_;
date::year_month_day cached_calendar_ymd_ = date::January/1/0;
std::string cached_calendar_text_;
bool handleScroll(GdkEventScroll* e);
// ordinal date in tooltip
const bool ordInTooltip_;
std::string ordText_{""};
auto get_ordinal_date(const year_month_day& today) -> std::string;
auto calendar_text(const waybar_time& wtime) -> std::string;
auto weekdays_header(const date::weekday& first_dow, std::ostream& os) -> void;
auto first_day_of_week() -> date::weekday;
auto getTZtext(sys_seconds now) -> std::string;
auto first_day_of_week() -> weekday;
// Module actions
void cldModeSwitch();
void cldShift_up();
void cldShift_down();
void cldShift_reset();
void tz_up();
void tz_down();
// Module Action Map
static inline std::map<const std::string, void (waybar::modules::Clock::*const)()> actionMap_{
{"mode", &waybar::modules::Clock::cldModeSwitch},
{"shift_up", &waybar::modules::Clock::cldShift_up},
{"shift_down", &waybar::modules::Clock::cldShift_down},
{"shift_reset", &waybar::modules::Clock::cldShift_reset},
{"tz_up", &waybar::modules::Clock::tz_up},
{"tz_down", &waybar::modules::Clock::tz_down}};
};
} // namespace waybar::modules

View File

@ -1,13 +1,14 @@
#pragma once
#include <fmt/format.h>
#include <unistd.h>
#include <cstdint>
#include <fstream>
#include <numeric>
#include <string>
#include <utility>
#include <vector>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
@ -16,14 +17,10 @@ namespace waybar::modules {
class Cpu : public ALabel {
public:
Cpu(const std::string&, const Json::Value&);
~Cpu() = default;
auto update() -> void;
virtual ~Cpu() = default;
auto update() -> void override;
private:
uint16_t getCpuLoad();
std::tuple<uint16_t, std::string> getCpuUsage();
std::vector<std::tuple<size_t, size_t>> parseCpuinfo();
std::vector<std::tuple<size_t, size_t>> prev_times_;
util::SleeperThread thread_;

View File

@ -0,0 +1,32 @@
#pragma once
#include <fmt/format.h>
#include <cstdint>
#include <fstream>
#include <numeric>
#include <string>
#include <utility>
#include <vector>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class CpuFrequency : public ALabel {
public:
CpuFrequency(const std::string&, const Json::Value&);
virtual ~CpuFrequency() = default;
auto update() -> void override;
// This is a static member because it is also used by the cpu module.
static std::tuple<float, float, float> getCpuFrequency();
private:
static std::vector<float> parseCpuFrequencies();
util::SleeperThread thread_;
};
} // namespace waybar::modules

View File

@ -0,0 +1,35 @@
#pragma once
#include <fmt/format.h>
#include <cstdint>
#include <fstream>
#include <numeric>
#include <string>
#include <utility>
#include <vector>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class CpuUsage : public ALabel {
public:
CpuUsage(const std::string&, const Json::Value&);
virtual ~CpuUsage() = default;
auto update() -> void override;
// This is a static member because it is also used by the cpu module.
static std::tuple<std::vector<uint16_t>, std::string> getCpuUsage(
std::vector<std::tuple<size_t, size_t>>&);
private:
static std::vector<std::tuple<size_t, size_t>> parseCpuinfo();
std::vector<std::tuple<size_t, size_t>> prev_times_;
util::SleeperThread thread_;
};
} // namespace waybar::modules

View File

@ -1,8 +1,11 @@
#pragma once
#include <fmt/format.h>
#include <fmt/args.h>
#include <csignal>
#include <string>
#include "ALabel.hpp"
#include "util/command.hpp"
#include "util/json.hpp"
@ -12,30 +15,34 @@ namespace waybar::modules {
class Custom : public ALabel {
public:
Custom(const std::string&, const std::string&, const Json::Value&);
~Custom();
auto update() -> void;
void refresh(int /*signal*/);
Custom(const std::string&, const std::string&, const Json::Value&, const std::string&);
virtual ~Custom();
auto update() -> void override;
void refresh(int /*signal*/) override;
private:
void delayWorker();
void continuousWorker();
void waitingWorker();
void parseOutputRaw();
void parseOutputJson();
void handleEvent();
bool handleScroll(GdkEventScroll* e);
bool handleToggle(GdkEventButton* const& e);
bool handleScroll(GdkEventScroll* e) override;
bool handleToggle(GdkEventButton* const& e) override;
const std::string name_;
std::string text_;
std::string alt_;
std::string tooltip_;
const std::string name_;
const std::string output_name_;
std::string text_;
std::string id_;
std::string alt_;
std::string tooltip_;
std::vector<std::string> class_;
int percentage_;
FILE* fp_;
int pid_;
util::command::res output_;
util::JsonParser parser_;
fmt::dynamic_format_arg_store<fmt::format_context> fields_;
int percentage_;
FILE* fp_;
int pid_;
util::command::res output_;
util::JsonParser parser_;
util::SleeperThread thread_;
};

View File

@ -1,23 +1,28 @@
#pragma once
#include <fmt/format.h>
#include <fstream>
#include <sys/statvfs.h>
#include <fstream>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
#include "util/format.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class Disk : public ALabel {
public:
Disk(const std::string&, const Json::Value&);
~Disk() = default;
auto update() -> void;
virtual ~Disk() = default;
auto update() -> void override;
private:
util::SleeperThread thread_;
std::string path_;
std::string unit_;
float calc_specific_divisor(const std::string divisor);
};
} // namespace waybar::modules

View File

@ -0,0 +1,34 @@
#pragma once
#include <gtkmm/button.h>
#include <wayland-client.h>
#include "AModule.hpp"
#include "bar.hpp"
#include "dwl-ipc-unstable-v2-client-protocol.h"
#include "xdg-output-unstable-v1-client-protocol.h"
namespace waybar::modules::dwl {
class Tags : public waybar::AModule {
public:
Tags(const std::string &, const waybar::Bar &, const Json::Value &);
virtual ~Tags();
// Handlers for wayland events
void handle_view_tags(uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused);
void handle_primary_clicked(uint32_t tag);
bool handle_button_press(GdkEventButton *event_button, uint32_t tag);
struct zdwl_ipc_manager_v2 *status_manager_;
struct wl_seat *seat_;
private:
const waybar::Bar &bar_;
Gtk::Box box_;
std::vector<Gtk::Button> buttons_;
struct zdwl_ipc_output_v2 *output_status_;
};
} /* namespace waybar::modules::dwl */

View File

@ -0,0 +1,38 @@
#pragma once
#include <fmt/format.h>
#include <string>
#include "AAppIconLabel.hpp"
#include "bar.hpp"
#include "dwl-ipc-unstable-v2-client-protocol.h"
#include "util/json.hpp"
namespace waybar::modules::dwl {
class Window : public AAppIconLabel, public sigc::trackable {
public:
Window(const std::string &, const waybar::Bar &, const Json::Value &);
virtual ~Window() = default;
void handle_layout(const uint32_t layout);
void handle_title(const char *title);
void handle_appid(const char *ppid);
void handle_layout_symbol(const char *layout_symbol);
void handle_frame();
struct zdwl_ipc_manager_v2 *status_manager_;
private:
const Bar &bar_;
std::string title_;
std::string appid_;
std::string layout_symbol_;
uint32_t layout_;
struct zdwl_ipc_output_v2 *output_status_;
};
} // namespace waybar::modules::dwl

View File

@ -0,0 +1,77 @@
#pragma once
#include <iostream>
#include <map>
#include <string>
#include "ALabel.hpp"
#include "giomm/dbusconnection.h"
#include "giomm/dbusproxy.h"
#include "glibconfig.h"
#include "gtkmm/box.h"
#include "gtkmm/image.h"
#include "gtkmm/label.h"
#include "gtkmm/overlay.h"
namespace waybar::modules {
class Gamemode : public AModule {
public:
Gamemode(const std::string &, const Json::Value &);
virtual ~Gamemode();
auto update() -> void override;
private:
const std::string DEFAULT_ICON_NAME = "input-gaming-symbolic";
const std::string DEFAULT_FORMAT = "{glyph}";
const std::string DEFAULT_FORMAT_ALT = "{glyph} {count}";
const std::string DEFAULT_TOOLTIP_FORMAT = "Games running: {count}";
const std::string DEFAULT_GLYPH = "";
void appear(const Glib::RefPtr<Gio::DBus::Connection> &connection, const Glib::ustring &name,
const Glib::ustring &name_owner);
void disappear(const Glib::RefPtr<Gio::DBus::Connection> &connection, const Glib::ustring &name);
void prepareForSleep_cb(const Glib::RefPtr<Gio::DBus::Connection> &connection,
const Glib::ustring &sender_name, const Glib::ustring &object_path,
const Glib::ustring &interface_name, const Glib::ustring &signal_name,
const Glib::VariantContainerBase &parameters);
void notify_cb(const Glib::ustring &sender_name, const Glib::ustring &signal_name,
const Glib::VariantContainerBase &arguments);
void getData();
bool handleToggle(GdkEventButton *const &) override;
// Config
std::string format = DEFAULT_FORMAT;
std::string format_alt = DEFAULT_FORMAT_ALT;
std::string tooltip_format = DEFAULT_TOOLTIP_FORMAT;
std::string glyph = DEFAULT_GLYPH;
bool tooltip = true;
bool hideNotRunning = true;
bool useIcon = true;
uint iconSize = 20;
uint iconSpacing = 4;
std::string iconName = DEFAULT_ICON_NAME;
Gtk::Box box_;
Gtk::Image icon_;
Gtk::Label label_;
const std::string dbus_name = "com.feralinteractive.GameMode";
const std::string dbus_obj_path = "/com/feralinteractive/GameMode";
const std::string dbus_interface = "org.freedesktop.DBus.Properties";
const std::string dbus_get_interface = "com.feralinteractive.GameMode";
uint gameCount = 0;
std::string lastStatus;
bool showAltText = false;
guint login1_id;
Glib::RefPtr<Gio::DBus::Proxy> gamemode_proxy;
Glib::RefPtr<Gio::DBus::Connection> system_connection;
bool gamemodeRunning;
guint gamemodeWatcher_id;
};
} // namespace waybar::modules

View File

@ -0,0 +1,40 @@
#pragma once
#include <list>
#include <memory>
#include <mutex>
#include <string>
#include <utility>
#include "util/json.hpp"
namespace waybar::modules::hyprland {
class EventHandler {
public:
virtual void onEvent(const std::string& ev) = 0;
virtual ~EventHandler() = default;
};
class IPC {
public:
IPC() { startIPC(); }
void registerForIPC(const std::string& ev, EventHandler* ev_handler);
void unregisterForIPC(EventHandler* handler);
static std::string getSocket1Reply(const std::string& rq);
Json::Value getSocket1JsonReply(const std::string& rq);
private:
void startIPC();
void parseIPC(const std::string&);
std::mutex callbackMutex_;
util::JsonParser parser_;
std::list<std::pair<std::string, EventHandler*>> callbacks_;
};
inline std::unique_ptr<IPC> gIPC;
inline bool modulesReady = false;
}; // namespace waybar::modules::hyprland

View File

@ -0,0 +1,42 @@
#pragma once
#include <fmt/format.h>
#include <string>
#include "ALabel.hpp"
#include "bar.hpp"
#include "modules/hyprland/backend.hpp"
#include "util/json.hpp"
namespace waybar::modules::hyprland {
class Language : public waybar::ALabel, public EventHandler {
public:
Language(const std::string&, const waybar::Bar&, const Json::Value&);
virtual ~Language();
auto update() -> void override;
private:
void onEvent(const std::string&) override;
void initLanguage();
struct Layout {
std::string full_name;
std::string short_name;
std::string variant;
std::string short_description;
};
static auto getLayout(const std::string&) -> Layout;
std::mutex mutex_;
const Bar& bar_;
util::JsonParser parser_;
Layout layout_;
};
} // namespace waybar::modules::hyprland

View File

@ -0,0 +1,33 @@
#pragma once
#include <fmt/format.h>
#include <string>
#include "ALabel.hpp"
#include "bar.hpp"
#include "modules/hyprland/backend.hpp"
#include "util/json.hpp"
namespace waybar::modules::hyprland {
class Submap : public waybar::ALabel, public EventHandler {
public:
Submap(const std::string&, const waybar::Bar&, const Json::Value&);
~Submap() override;
auto update() -> void override;
private:
auto parseConfig(const Json::Value&) -> void;
void onEvent(const std::string& ev) override;
std::mutex mutex_;
const Bar& bar_;
util::JsonParser parser_;
std::string submap_;
bool always_on_ = false;
std::string default_submap_ = "Default";
};
} // namespace waybar::modules::hyprland

View File

@ -0,0 +1,65 @@
#pragma once
#include <fmt/format.h>
#include <string>
#include "AAppIconLabel.hpp"
#include "bar.hpp"
#include "modules/hyprland/backend.hpp"
#include "util/json.hpp"
namespace waybar::modules::hyprland {
class Window : public waybar::AAppIconLabel, public EventHandler {
public:
Window(const std::string&, const waybar::Bar&, const Json::Value&);
~Window() override;
auto update() -> void override;
private:
struct Workspace {
int id;
int windows;
std::string last_window;
std::string last_window_title;
static auto parse(const Json::Value& value) -> Workspace;
};
struct WindowData {
bool floating;
int monitor = -1;
std::string class_name;
std::string initial_class_name;
std::string title;
std::string initial_title;
bool fullscreen;
bool grouped;
static auto parse(const Json::Value&) -> WindowData;
};
static auto getActiveWorkspace(const std::string&) -> Workspace;
static auto getActiveWorkspace() -> Workspace;
void onEvent(const std::string& ev) override;
void queryActiveWorkspace();
void setClass(const std::string&, bool enable);
bool separateOutputs_;
std::mutex mutex_;
const Bar& bar_;
util::JsonParser parser_;
WindowData windowData_;
Workspace workspace_;
std::string soloClass_;
std::string lastSoloClass_;
bool solo_;
bool allFloating_;
bool swallowing_;
bool fullscreen_;
bool focused_;
};
} // namespace waybar::modules::hyprland

View File

@ -0,0 +1,226 @@
#pragma once
#include <gtkmm/button.h>
#include <gtkmm/label.h>
#include <json/value.h>
#include <cstddef>
#include <cstdint>
#include <map>
#include <memory>
#include <optional>
#include <regex>
#include <string>
#include <variant>
#include <vector>
#include "AModule.hpp"
#include "bar.hpp"
#include "modules/hyprland/backend.hpp"
#include "util/enum.hpp"
#include "util/regex_collection.hpp"
using WindowAddress = std::string;
namespace waybar::modules::hyprland {
class Workspaces;
class WindowCreationPayload {
public:
WindowCreationPayload(std::string workspace_name, WindowAddress window_address,
std::string window_repr);
WindowCreationPayload(std::string workspace_name, WindowAddress window_address,
std::string window_class, std::string window_title);
WindowCreationPayload(Json::Value const& client_data);
int incrementTimeSpentUncreated();
bool isEmpty(Workspaces& workspace_manager);
bool reprIsReady() const { return std::holds_alternative<Repr>(m_window); }
std::string repr(Workspaces& workspace_manager);
std::string getWorkspaceName() const { return m_workspaceName; }
WindowAddress getAddress() const { return m_windowAddress; }
void moveToWorksace(std::string& new_workspace_name);
private:
void clearAddr();
void clearWorkspaceName();
using Repr = std::string;
using ClassAndTitle = std::pair<std::string, std::string>;
std::variant<Repr, ClassAndTitle> m_window;
WindowAddress m_windowAddress;
std::string m_workspaceName;
int m_timeSpentUncreated = 0;
};
class Workspace {
public:
explicit Workspace(const Json::Value& workspace_data, Workspaces& workspace_manager,
const Json::Value& clients_data = Json::Value::nullRef);
std::string& selectIcon(std::map<std::string, std::string>& icons_map);
Gtk::Button& button() { return m_button; };
int id() const { return m_id; };
std::string name() const { return m_name; };
std::string output() const { return m_output; };
bool isActive() const { return m_isActive; };
bool isSpecial() const { return m_isSpecial; };
bool isPersistent() const { return m_isPersistentRule || m_isPersistentConfig; };
bool isPersistentConfig() const { return m_isPersistentConfig; };
bool isPersistentRule() const { return m_isPersistentRule; };
bool isVisible() const { return m_isVisible; };
bool isEmpty() const { return m_windows == 0; };
bool isUrgent() const { return m_isUrgent; };
bool handleClicked(GdkEventButton* bt) const;
void setActive(bool value = true) { m_isActive = value; };
void setPersistentRule(bool value = true) { m_isPersistentRule = value; };
void setPersistentConfig(bool value = true) { m_isPersistentConfig = value; };
void setUrgent(bool value = true) { m_isUrgent = value; };
void setVisible(bool value = true) { m_isVisible = value; };
void setWindows(uint value) { m_windows = value; };
void setName(std::string const& value) { m_name = value; };
void setOutput(std::string const& value) { m_output = value; };
bool containsWindow(WindowAddress const& addr) const { return m_windowMap.contains(addr); }
void insertWindow(WindowCreationPayload create_window_paylod);
std::string removeWindow(WindowAddress const& addr);
void initializeWindowMap(const Json::Value& clients_data);
bool onWindowOpened(WindowCreationPayload const& create_window_paylod);
std::optional<std::string> closeWindow(WindowAddress const& addr);
void update(const std::string& format, const std::string& icon);
private:
Workspaces& m_workspaceManager;
int m_id;
std::string m_name;
std::string m_output;
uint m_windows;
bool m_isActive = false;
bool m_isSpecial = false;
bool m_isPersistentRule = false; // represents the persistent state in hyprland
bool m_isPersistentConfig = false; // represents the persistent state in the Waybar config
bool m_isUrgent = false;
bool m_isVisible = false;
std::map<WindowAddress, std::string> m_windowMap;
Gtk::Button m_button;
Gtk::Box m_content;
Gtk::Label m_label;
};
class Workspaces : public AModule, public EventHandler {
public:
Workspaces(const std::string&, const waybar::Bar&, const Json::Value&);
~Workspaces() override;
void update() override;
void init();
auto allOutputs() const -> bool { return m_allOutputs; }
auto showSpecial() const -> bool { return m_showSpecial; }
auto activeOnly() const -> bool { return m_activeOnly; }
auto moveToMonitor() const -> bool { return m_moveToMonitor; }
auto getBarOutput() const -> std::string { return m_bar.output->name; }
std::string getRewrite(std::string window_class, std::string window_title);
std::string& getWindowSeparator() { return m_formatWindowSeparator; }
bool isWorkspaceIgnored(std::string const& workspace_name);
bool windowRewriteConfigUsesTitle() const { return m_anyWindowRewriteRuleUsesTitle; }
private:
void onEvent(const std::string& e) override;
void updateWindowCount();
void sortWorkspaces();
void createWorkspace(Json::Value const& workspaceData,
Json::Value const& clientsData = Json::Value::nullRef);
void removeWorkspace(std::string const& name);
void setUrgentWorkspace(std::string const& windowaddress);
void parseConfig(const Json::Value& config);
void registerIpc();
// workspace events
void onWorkspaceActivated(std::string const& payload);
void onSpecialWorkspaceActivated(std::string const& payload);
void onWorkspaceDestroyed(std::string const& payload);
void onWorkspaceCreated(std::string const& workspaceName,
Json::Value const& clientsData = Json::Value::nullRef);
void onWorkspaceMoved(std::string const& payload);
void onWorkspaceRenamed(std::string const& payload);
// monitor events
void onMonitorFocused(std::string const& payload);
// window events
void onWindowOpened(std::string const& payload);
void onWindowClosed(std::string const& addr);
void onWindowMoved(std::string const& payload);
void onWindowTitleEvent(std::string const& payload);
void onConfigReloaded();
int windowRewritePriorityFunction(std::string const& window_rule);
void doUpdate();
void extendOrphans(int workspaceId, Json::Value const& clientsJson);
void registerOrphanWindow(WindowCreationPayload create_window_payload);
void initializeWorkspaces();
void setCurrentMonitorId();
void loadPersistentWorkspacesFromConfig(Json::Value const& clientsJson);
void loadPersistentWorkspacesFromWorkspaceRules(const Json::Value& clientsJson);
bool m_allOutputs = false;
bool m_showSpecial = false;
bool m_activeOnly = false;
bool m_moveToMonitor = false;
Json::Value m_persistentWorkspaceConfig;
// Map for windows stored in workspaces not present in the current bar.
// This happens when the user has multiple monitors (hence, multiple bars)
// and doesn't share windows accross bars (a.k.a `all-outputs` = false)
std::map<WindowAddress, std::string> m_orphanWindowMap;
enum class SortMethod { ID, NAME, NUMBER, DEFAULT };
util::EnumParser<SortMethod> m_enumParser;
SortMethod m_sortBy = SortMethod::DEFAULT;
std::map<std::string, SortMethod> m_sortMap = {{"ID", SortMethod::ID},
{"NAME", SortMethod::NAME},
{"NUMBER", SortMethod::NUMBER},
{"DEFAULT", SortMethod::DEFAULT}};
std::string m_format;
std::map<std::string, std::string> m_iconsMap;
util::RegexCollection m_windowRewriteRules;
bool m_anyWindowRewriteRuleUsesTitle = false;
std::string m_formatWindowSeparator;
bool m_withIcon;
uint64_t m_monitorId;
std::string m_activeWorkspaceName;
std::string m_activeSpecialWorkspaceName;
std::vector<std::unique_ptr<Workspace>> m_workspaces;
std::vector<std::pair<Json::Value, Json::Value>> m_workspacesToCreate;
std::vector<std::string> m_workspacesToRemove;
std::vector<WindowCreationPayload> m_windowsToCreate;
std::vector<std::regex> m_ignoreWorkspaces;
std::mutex m_mutex;
const Bar& m_bar;
Gtk::Box m_box;
};
} // namespace waybar::modules::hyprland

View File

@ -1,6 +1,7 @@
#pragma once
#include <fmt/format.h>
#include "ALabel.hpp"
#include "bar.hpp"
#include "client.hpp"
@ -8,19 +9,22 @@
namespace waybar::modules {
class IdleInhibitor : public ALabel {
sigc::connection timeout_;
public:
IdleInhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
~IdleInhibitor();
auto update() -> void;
virtual ~IdleInhibitor();
auto update() -> void override;
static std::list<waybar::AModule*> modules;
static bool status;
static bool status;
private:
bool handleToggle(GdkEventButton* const& e);
bool handleToggle(GdkEventButton* const& e) override;
void toggleStatus();
const Bar& bar_;
const Bar& bar_;
struct zwp_idle_inhibitor_v1* idle_inhibitor_;
int pid_;
int pid_;
};
} // namespace waybar::modules

40
include/modules/image.hpp Normal file
View File

@ -0,0 +1,40 @@
#pragma once
#include <fmt/format.h>
#include <gtkmm/image.h>
#include <csignal>
#include <string>
#include "ALabel.hpp"
#include "gtkmm/box.h"
#include "util/command.hpp"
#include "util/json.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class Image : public AModule {
public:
Image(const std::string&, const Json::Value&);
virtual ~Image() = default;
auto update() -> void override;
void refresh(int /*signal*/) override;
private:
void delayWorker();
void handleEvent();
void parseOutputRaw();
Gtk::Box box_;
Gtk::Image image_;
std::string path_;
std::string tooltip_;
int size_;
int interval_;
util::command::res output_;
util::SleeperThread thread_;
};
} // namespace waybar::modules

View File

@ -0,0 +1,27 @@
#pragma once
#include <gio/gio.h>
#include <memory>
#include "ALabel.hpp"
#include "bar.hpp"
namespace waybar::modules {
class Inhibitor : public ALabel {
public:
Inhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
virtual ~Inhibitor();
auto update() -> void override;
auto activated() -> bool;
private:
auto handleToggle(::GdkEventButton* const& e) -> bool override;
const std::unique_ptr<::GDBusConnection, void (*)(::GDBusConnection*)> dbus_;
const std::string inhibitors_;
int handle_ = -1;
};
} // namespace waybar::modules

44
include/modules/jack.hpp Normal file
View File

@ -0,0 +1,44 @@
#pragma once
#include <fmt/format.h>
#include <jack/jack.h>
#include <jack/thread.h>
#include <fstream>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class JACK : public ALabel {
public:
JACK(const std::string &, const Json::Value &);
virtual ~JACK() = default;
auto update() -> void override;
int bufSize(jack_nframes_t size);
int sampleRate(jack_nframes_t rate);
int xrun();
void shutdown();
private:
std::string JACKState();
jack_client_t *client_;
jack_nframes_t bufsize_;
jack_nframes_t samplerate_;
unsigned int xruns_;
float load_;
bool running_;
std::mutex mutex_;
std::string state_;
util::SleeperThread thread_;
};
} // namespace waybar::modules
int bufSizeCallback(jack_nframes_t size, void *obj);
int sampleRateCallback(jack_nframes_t rate, void *obj);
int xrunCallback(void *obj);
void shutdownCallback(void *obj);

View File

@ -0,0 +1,49 @@
#pragma once
#include <fmt/chrono.h>
#include <gtkmm/label.h>
#include <set>
#include <unordered_map>
#include "AModule.hpp"
#include "bar.hpp"
#include "util/sleeper_thread.hpp"
extern "C" {
#include <libevdev/libevdev.h>
#include <libinput.h>
}
namespace waybar::modules {
class KeyboardState : public AModule {
public:
KeyboardState(const std::string&, const waybar::Bar&, const Json::Value&);
virtual ~KeyboardState();
auto update() -> void override;
private:
auto tryAddDevice(const std::string&) -> void;
Gtk::Box box_;
Gtk::Label numlock_label_;
Gtk::Label capslock_label_;
Gtk::Label scrolllock_label_;
std::string numlock_format_;
std::string capslock_format_;
std::string scrolllock_format_;
const std::chrono::seconds interval_;
std::string icon_locked_;
std::string icon_unlocked_;
std::string devices_path_;
struct libinput* libinput_;
std::unordered_map<std::string, struct libinput_device*> libinput_devices_;
std::set<int> binding_keys;
util::SleeperThread libinput_thread_, hotplug_thread_;
};
} // namespace waybar::modules

30
include/modules/load.hpp Normal file
View File

@ -0,0 +1,30 @@
#pragma once
#include <fmt/format.h>
#include <cstdint>
#include <fstream>
#include <numeric>
#include <string>
#include <utility>
#include <vector>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class Load : public ALabel {
public:
Load(const std::string&, const Json::Value&);
virtual ~Load() = default;
auto update() -> void override;
// This is a static member because it is also used by the cpu module.
static std::tuple<double, double, double> getLoad();
private:
util::SleeperThread thread_;
};
} // namespace waybar::modules

View File

@ -1,8 +1,10 @@
#pragma once
#include <fmt/format.h>
#include <fstream>
#include <unordered_map>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
@ -11,11 +13,11 @@ namespace waybar::modules {
class Memory : public ALabel {
public:
Memory(const std::string&, const Json::Value&);
~Memory() = default;
auto update() -> void;
virtual ~Memory() = default;
auto update() -> void override;
private:
void parseMeminfo();
void parseMeminfo();
std::unordered_map<std::string, unsigned long> meminfo_;

View File

@ -22,8 +22,8 @@ class MPD : public ALabel {
// Not using unique_ptr since we don't manage the pointer
// (It's either nullptr, or from the config)
const char* server_;
const unsigned port_;
const char* server_;
const unsigned port_;
const std::string password_;
unsigned timeout_;
@ -31,17 +31,18 @@ class MPD : public ALabel {
detail::unique_connection connection_;
detail::unique_status status_;
mpd_state state_;
detail::unique_song song_;
mpd_state state_;
detail::unique_song song_;
public:
MPD(const std::string&, const Json::Value&);
virtual ~MPD() noexcept = default;
auto update() -> void;
auto update() -> void override;
private:
std::string getTag(mpd_tag_type type, unsigned idx = 0) const;
void setLabel();
std::string getFilename() const;
void setLabel();
std::string getStateIcon() const;
std::string getOptionIcon(std::string optionName, bool activated) const;

View File

@ -1,7 +1,7 @@
#pragma once
#include <mpd/client.h>
#include <fmt/format.h>
#include <mpd/client.h>
#include <spdlog/spdlog.h>
#include <condition_variable>
@ -57,7 +57,7 @@ class State {
};
class Idle : public State {
Context* const ctx_;
Context* const ctx_;
sigc::connection idle_connection_;
public:
@ -80,7 +80,7 @@ class Idle : public State {
};
class Playing : public State {
Context* const ctx_;
Context* const ctx_;
sigc::connection timer_connection_;
public:
@ -102,7 +102,7 @@ class Playing : public State {
};
class Paused : public State {
Context* const ctx_;
Context* const ctx_;
sigc::connection timer_connection_;
public:
@ -124,7 +124,7 @@ class Paused : public State {
};
class Stopped : public State {
Context* const ctx_;
Context* const ctx_;
sigc::connection timer_connection_;
public:
@ -146,8 +146,9 @@ class Stopped : public State {
};
class Disconnected : public State {
Context* const ctx_;
Context* const ctx_;
sigc::connection timer_connection_;
int last_interval_;
public:
Disconnected(Context* const ctx) : ctx_{ctx} {}
@ -162,7 +163,7 @@ class Disconnected : public State {
Disconnected(Disconnected const&) = delete;
Disconnected& operator=(Disconnected const&) = delete;
void arm_timer(int interval) noexcept;
bool arm_timer(int interval) noexcept;
void disarm_timer() noexcept;
bool on_timer();
@ -170,7 +171,7 @@ class Disconnected : public State {
class Context {
std::unique_ptr<State> state_;
waybar::modules::MPD* mpd_module_;
waybar::modules::MPD* mpd_module_;
friend class State;
friend class Playing;
@ -188,18 +189,18 @@ class Context {
state_->entry();
}
bool is_connected() const;
bool is_playing() const;
bool is_paused() const;
bool is_stopped() const;
constexpr std::size_t interval() const;
void tryConnect() const;
void checkErrors(mpd_connection*) const;
void do_update();
void queryMPD() const;
void fetchState() const;
constexpr mpd_state state() const;
void emit() const;
bool is_connected() const;
bool is_playing() const;
bool is_paused() const;
bool is_stopped() const;
constexpr std::size_t interval() const;
void tryConnect() const;
void checkErrors(mpd_connection*) const;
void do_update();
void queryMPD() const;
void fetchState() const;
constexpr mpd_state state() const;
void emit() const;
[[nodiscard]] unique_connection& connection();
public:

View File

@ -8,13 +8,11 @@ inline bool Context::is_paused() const { return mpd_module_->paused(); }
inline bool Context::is_stopped() const { return mpd_module_->stopped(); }
constexpr inline std::size_t Context::interval() const { return mpd_module_->interval_.count(); }
inline void Context::tryConnect() const { mpd_module_->tryConnect(); }
inline unique_connection& Context::connection() { return mpd_module_->connection_; }
constexpr inline mpd_state Context::state() const { return mpd_module_->state_; }
inline void Context::tryConnect() const { mpd_module_->tryConnect(); }
inline unique_connection& Context::connection() { return mpd_module_->connection_; }
constexpr inline mpd_state Context::state() const { return mpd_module_->state_; }
inline void Context::do_update() {
mpd_module_->setLabel();
}
inline void Context::do_update() { mpd_module_->setLabel(); }
inline void Context::checkErrors(mpd_connection* conn) const { mpd_module_->checkErrors(conn); }
inline void Context::queryMPD() const { mpd_module_->queryMPD(); }

View File

@ -0,0 +1,88 @@
#pragma once
#include <iostream>
#include <optional>
#include <string>
#include "gtkmm/box.h"
#include "gtkmm/label.h"
extern "C" {
#include <playerctl/playerctl.h>
}
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules::mpris {
class Mpris : public ALabel {
public:
Mpris(const std::string&, const Json::Value&);
virtual ~Mpris();
auto update() -> void override;
bool handleToggle(GdkEventButton* const&) override;
private:
static auto onPlayerNameAppeared(PlayerctlPlayerManager*, PlayerctlPlayerName*, gpointer) -> void;
static auto onPlayerNameVanished(PlayerctlPlayerManager*, PlayerctlPlayerName*, gpointer) -> void;
static auto onPlayerPlay(PlayerctlPlayer*, gpointer) -> void;
static auto onPlayerPause(PlayerctlPlayer*, gpointer) -> void;
static auto onPlayerStop(PlayerctlPlayer*, gpointer) -> void;
static auto onPlayerMetadata(PlayerctlPlayer*, GVariant*, gpointer) -> void;
struct PlayerInfo {
std::string name;
PlayerctlPlaybackStatus status;
std::string status_string;
std::optional<std::string> artist;
std::optional<std::string> album;
std::optional<std::string> title;
std::optional<std::string> length; // as HH:MM:SS
std::optional<std::string> position; // same format
};
auto getPlayerInfo() -> std::optional<PlayerInfo>;
auto getIconFromJson(const Json::Value&, const std::string&) -> std::string;
auto getArtistStr(const PlayerInfo&, bool) -> std::string;
auto getAlbumStr(const PlayerInfo&, bool) -> std::string;
auto getTitleStr(const PlayerInfo&, bool) -> std::string;
auto getLengthStr(const PlayerInfo&, bool) -> std::string;
auto getPositionStr(const PlayerInfo&, bool) -> std::string;
auto getDynamicStr(const PlayerInfo&, bool, bool) -> std::string;
// config
std::string format_playing_;
std::string format_paused_;
std::string format_stopped_;
std::string tooltip_;
std::string tooltip_playing_;
std::string tooltip_paused_;
std::string tooltip_stopped_;
int artist_len_;
int album_len_;
int title_len_;
int dynamic_len_;
std::vector<std::string> dynamic_prio_;
std::vector<std::string> dynamic_order_;
std::string dynamic_separator_;
bool truncate_hours_;
bool tooltip_len_limits_;
std::string ellipsis_;
std::string player_;
std::vector<std::string> ignored_players_;
PlayerctlPlayerManager* manager;
PlayerctlPlayer* player;
std::string lastStatus;
std::string lastPlayer;
util::SleeperThread thread_;
std::chrono::time_point<std::chrono::system_clock> last_update_;
};
} // namespace waybar::modules::mpris

View File

@ -2,13 +2,14 @@
#include <arpa/inet.h>
#include <fmt/format.h>
#include <ifaddrs.h>
#include <linux/nl80211.h>
#include <net/if.h>
#include <netlink/genl/ctrl.h>
#include <netlink/genl/genl.h>
#include <netlink/netlink.h>
#include <sys/epoll.h>
#include <optional>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
#ifdef WANT_RFKILL
@ -20,65 +21,71 @@ namespace waybar::modules {
class Network : public ALabel {
public:
Network(const std::string&, const Json::Value&);
~Network();
auto update() -> void;
virtual ~Network();
auto update() -> void override;
private:
static const uint8_t MAX_RETRY = 5;
static const uint8_t EPOLL_MAX = 200;
static int handleEvents(struct nl_msg*, void*);
static int handleEventsDone(struct nl_msg*, void*);
static int handleScan(struct nl_msg*, void*);
void worker();
void createInfoSocket();
void createEventSocket();
int getExternalInterface(int skip_idx = -1) const;
void getInterfaceAddress();
int netlinkRequest(void*, uint32_t, uint32_t groups = 0) const;
int netlinkResponse(void*, uint32_t, uint32_t groups = 0) const;
void parseEssid(struct nlattr**);
void parseSignal(struct nlattr**);
void parseFreq(struct nlattr**);
bool associatedOrJoined(struct nlattr**);
bool checkInterface(struct ifinfomsg* rtif, std::string name);
int getPreferredIface(int skip_idx = -1, bool wait = true) const;
auto getInfo() -> void;
void checkNewInterface(struct ifinfomsg* rtif);
const std::string getNetworkState() const;
void clearIface();
bool wildcardMatch(const std::string& pattern, const std::string& text) const;
void askForStateDump(void);
int ifid_;
sa_family_t family_;
void worker();
void createInfoSocket();
void createEventSocket();
void parseEssid(struct nlattr**);
void parseSignal(struct nlattr**);
void parseFreq(struct nlattr**);
bool associatedOrJoined(struct nlattr**);
bool checkInterface(std::string name);
auto getInfo() -> void;
const std::string getNetworkState() const;
void clearIface();
bool wildcardMatch(const std::string& pattern, const std::string& text) const;
std::optional<std::pair<unsigned long long, unsigned long long>> readBandwidthUsage();
int ifid_;
sa_family_t family_;
struct sockaddr_nl nladdr_ = {0};
struct nl_sock* sock_ = nullptr;
struct nl_sock* ev_sock_ = nullptr;
int efd_;
int ev_fd_;
int nl80211_id_;
std::mutex mutex_;
struct nl_sock* sock_ = nullptr;
struct nl_sock* ev_sock_ = nullptr;
int efd_;
int ev_fd_;
int nl80211_id_;
std::mutex mutex_;
bool want_route_dump_;
bool want_link_dump_;
bool want_addr_dump_;
bool dump_in_progress_;
bool is_p2p_;
unsigned long long bandwidth_down_total_;
unsigned long long bandwidth_up_total_;
std::string state_;
std::string essid_;
bool carrier_;
std::string ifname_;
std::string ipaddr_;
std::string gwaddr_;
std::string netmask_;
int cidr_;
int32_t signal_strength_dbm_;
uint8_t signal_strength_;
uint32_t frequency_;
int cidr_;
int32_t signal_strength_dbm_;
uint8_t signal_strength_;
std::string signal_strength_app_;
uint32_t route_priority;
util::SleeperThread thread_;
util::SleeperThread thread_timer_;
#ifdef WANT_RFKILL
util::SleeperThread thread_rfkill_;
util::Rfkill rfkill_;
#endif
float frequency_;
};
} // namespace waybar::modules

View File

@ -0,0 +1,46 @@
#pragma once
#include <fmt/format.h>
#include "ALabel.hpp"
#include "giomm/dbusproxy.h"
namespace waybar::modules {
struct Profile {
std::string name;
std::string driver;
};
class PowerProfilesDaemon : public ALabel {
public:
PowerProfilesDaemon(const std::string &, const Json::Value &);
auto update() -> void override;
void profileChangedCb(const Gio::DBus::Proxy::MapChangedProperties &,
const std::vector<Glib::ustring> &);
void busConnectedCb(Glib::RefPtr<Gio::AsyncResult> &r);
void getAllPropsCb(Glib::RefPtr<Gio::AsyncResult> &r);
void setPropCb(Glib::RefPtr<Gio::AsyncResult> &r);
void populateInitState();
bool handleToggle(GdkEventButton *const &e) override;
private:
// True if we're connected to the dbug interface. False if we're
// not.
bool connected_;
// Look for a profile name in the list of available profiles and
// switch activeProfile_ to it.
void switchToProfile(std::string const &);
// Used to toggle/display the profiles
std::vector<Profile> availableProfiles_;
// Points to the active profile in the profiles list
std::vector<Profile>::iterator activeProfile_;
// Current CSS class applied to the label
std::string currentStyle_;
// Format string
std::string tooltipFormat_;
// DBus Proxy used to track the current active profile
Glib::RefPtr<Gio::DBus::Proxy> powerProfilesProxy_;
};
} // namespace waybar::modules

View File

@ -0,0 +1,41 @@
#pragma once
#include <iostream>
#include <map>
#include <string>
#include "ALabel.hpp"
#include "gtkmm/box.h"
#include "modules/privacy/privacy_item.hpp"
#include "util/pipewire/pipewire_backend.hpp"
#include "util/pipewire/privacy_node_info.hpp"
using waybar::util::PipewireBackend::PrivacyNodeInfo;
namespace waybar::modules::privacy {
class Privacy : public AModule {
public:
Privacy(const std::string &, const Json::Value &, const std::string &pos);
auto update() -> void override;
void onPrivacyNodesChanged();
private:
std::list<PrivacyNodeInfo *> nodes_screenshare; // Screen is being shared
std::list<PrivacyNodeInfo *> nodes_audio_in; // Application is using the microphone
std::list<PrivacyNodeInfo *> nodes_audio_out; // Application is outputting audio
std::mutex mutex_;
sigc::connection visibility_conn;
// Config
Gtk::Box box_;
uint iconSpacing = 4;
uint iconSize = 20;
uint transition_duration = 250;
std::shared_ptr<util::PipewireBackend::PipewireBackend> backend = nullptr;
};
} // namespace waybar::modules::privacy

View File

@ -0,0 +1,51 @@
#pragma once
#include <json/value.h>
#include <iostream>
#include <map>
#include <mutex>
#include <string>
#include "gtkmm/box.h"
#include "gtkmm/image.h"
#include "gtkmm/revealer.h"
#include "util/pipewire/privacy_node_info.hpp"
using waybar::util::PipewireBackend::PrivacyNodeInfo;
using waybar::util::PipewireBackend::PrivacyNodeType;
namespace waybar::modules::privacy {
class PrivacyItem : public Gtk::Revealer {
public:
PrivacyItem(const Json::Value &config_, enum PrivacyNodeType privacy_type_,
std::list<PrivacyNodeInfo *> *nodes, const std::string &pos, const uint icon_size,
const uint transition_duration);
enum PrivacyNodeType privacy_type;
void set_in_use(bool in_use);
private:
std::list<PrivacyNodeInfo *> *nodes;
sigc::connection signal_conn;
Gtk::Box tooltip_window;
bool init = false;
bool in_use = false;
// Config
std::string iconName = "image-missing-symbolic";
bool tooltip = true;
uint tooltipIconSize = 24;
Gtk::Box box_;
Gtk::Image icon_;
void update_tooltip();
};
} // namespace waybar::modules::privacy

View File

@ -1,51 +1,27 @@
#pragma once
#include <fmt/format.h>
#include <pulse/pulseaudio.h>
#include <pulse/volume.h>
#include <algorithm>
#include <array>
#include <memory>
#include "ALabel.hpp"
#include "util/audio_backend.hpp"
namespace waybar::modules {
class Pulseaudio : public ALabel {
public:
Pulseaudio(const std::string&, const Json::Value&);
~Pulseaudio();
auto update() -> void;
virtual ~Pulseaudio() = default;
auto update() -> void override;
private:
static void subscribeCb(pa_context*, pa_subscription_event_type_t, uint32_t, void*);
static void contextStateCb(pa_context*, void*);
static void sinkInfoCb(pa_context*, const pa_sink_info*, int, void*);
static void sourceInfoCb(pa_context*, const pa_source_info* i, int, void* data);
static void serverInfoCb(pa_context*, const pa_server_info*, void*);
static void volumeModifyCb(pa_context*, int, void*);
bool handleScroll(GdkEventScroll* e) override;
const std::vector<std::string> getPulseIcon() const;
bool handleScroll(GdkEventScroll* e);
const std::string getPortIcon() const;
pa_threaded_mainloop* mainloop_;
pa_mainloop_api* mainloop_api_;
pa_context* context_;
// SINK
uint32_t sink_idx_{0};
uint16_t volume_;
pa_cvolume pa_volume_;
bool muted_;
std::string port_name_;
std::string form_factor_;
std::string desc_;
std::string monitor_;
std::string default_sink_name_;
// SOURCE
uint32_t source_idx_{0};
uint16_t source_volume_;
bool source_muted_;
std::string source_port_name_;
std::string source_desc_;
std::string default_source_name_;
std::shared_ptr<util::AudioBackend> backend = nullptr;
};
} // namespace waybar::modules

View File

@ -0,0 +1,27 @@
#pragma once
#include <memory>
#include "ASlider.hpp"
#include "util/audio_backend.hpp"
namespace waybar::modules {
enum class PulseaudioSliderTarget {
Sink,
Source,
};
class PulseaudioSlider : public ASlider {
public:
PulseaudioSlider(const std::string&, const Json::Value&);
virtual ~PulseaudioSlider() = default;
void update() override;
void onValueChanged() override;
private:
std::shared_ptr<util::AudioBackend> backend = nullptr;
PulseaudioSliderTarget target = PulseaudioSliderTarget::Sink;
};
} // namespace waybar::modules

View File

@ -0,0 +1,33 @@
#pragma once
#include <wayland-client.h>
#include "ALabel.hpp"
#include "bar.hpp"
#include "river-status-unstable-v1-client-protocol.h"
namespace waybar::modules::river {
class Layout : public waybar::ALabel {
public:
Layout(const std::string &, const waybar::Bar &, const Json::Value &);
virtual ~Layout();
// Handlers for wayland events
void handle_name(const char *name);
void handle_clear();
void handle_focused_output(struct wl_output *output);
void handle_unfocused_output(struct wl_output *output);
struct zriver_status_manager_v1 *status_manager_;
struct wl_seat *seat_;
private:
const waybar::Bar &bar_;
struct wl_output *output_; // stores the output this module belongs to
struct wl_output *focused_output_; // stores the currently focused output
struct zriver_output_status_v1 *output_status_;
struct zriver_seat_status_v1 *seat_status_;
};
} /* namespace waybar::modules::river */

View File

@ -0,0 +1,28 @@
#pragma once
#include <wayland-client.h>
#include "ALabel.hpp"
#include "bar.hpp"
#include "river-status-unstable-v1-client-protocol.h"
namespace waybar::modules::river {
class Mode : public waybar::ALabel {
public:
Mode(const std::string &, const waybar::Bar &, const Json::Value &);
virtual ~Mode();
// Handlers for wayland events
void handle_mode(const char *mode);
struct zriver_status_manager_v1 *status_manager_;
struct wl_seat *seat_;
private:
const waybar::Bar &bar_;
std::string mode_;
struct zriver_seat_status_v1 *seat_status_;
};
} /* namespace waybar::modules::river */

View File

@ -5,6 +5,7 @@
#include "AModule.hpp"
#include "bar.hpp"
#include "river-control-unstable-v1-client-protocol.h"
#include "river-status-unstable-v1-client-protocol.h"
#include "xdg-output-unstable-v1-client-protocol.h"
@ -13,17 +14,23 @@ namespace waybar::modules::river {
class Tags : public waybar::AModule {
public:
Tags(const std::string &, const waybar::Bar &, const Json::Value &);
~Tags();
virtual ~Tags();
// Handlers for wayland events
void handle_focused_tags(uint32_t tags);
void handle_view_tags(struct wl_array *tags);
void handle_urgent_tags(uint32_t tags);
void handle_primary_clicked(uint32_t tag);
bool handle_button_press(GdkEventButton *event_button, uint32_t tag);
struct zriver_status_manager_v1 *status_manager_;
struct zriver_control_v1 *control_;
struct wl_seat *seat_;
private:
const waybar::Bar & bar_;
Gtk::Box box_;
const waybar::Bar &bar_;
Gtk::Box box_;
std::vector<Gtk::Button> buttons_;
struct zriver_output_status_v1 *output_status_;
};

View File

@ -0,0 +1,33 @@
#pragma once
#include <gtkmm/button.h>
#include <wayland-client.h>
#include "ALabel.hpp"
#include "bar.hpp"
#include "river-status-unstable-v1-client-protocol.h"
#include "xdg-output-unstable-v1-client-protocol.h"
namespace waybar::modules::river {
class Window : public waybar::ALabel {
public:
Window(const std::string &, const waybar::Bar &, const Json::Value &);
virtual ~Window();
// Handlers for wayland events
void handle_focused_view(const char *title);
void handle_focused_output(struct wl_output *output);
void handle_unfocused_output(struct wl_output *output);
struct zriver_status_manager_v1 *status_manager_;
struct wl_seat *seat_;
private:
const waybar::Bar &bar_;
struct wl_output *output_; // stores the output this module belongs to
struct wl_output *focused_output_; // stores the currently focused output
struct zriver_seat_status_v1 *seat_status_;
};
} /* namespace waybar::modules::river */

View File

@ -0,0 +1,20 @@
#pragma once
#include <fmt/chrono.h>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class Clock : public ALabel {
public:
Clock(const std::string&, const Json::Value&);
virtual ~Clock() = default;
auto update() -> void override;
private:
util::SleeperThread thread_;
};
} // namespace waybar::modules

View File

@ -1,7 +1,9 @@
#pragma once
#include <sndio.h>
#include <vector>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
@ -9,13 +11,13 @@ namespace waybar::modules {
class Sndio : public ALabel {
public:
Sndio(const std::string&, const Json::Value&);
~Sndio();
auto update() -> void;
Sndio(const std::string &, const Json::Value &);
virtual ~Sndio();
auto update() -> void override;
auto set_desc(struct sioctl_desc *, unsigned int) -> void;
auto put_val(unsigned int, unsigned int) -> void;
bool handleScroll(GdkEventScroll *);
bool handleToggle(GdkEventButton* const&);
bool handleScroll(GdkEventScroll *) override;
bool handleToggle(GdkEventButton *const &) override;
private:
auto connect_to_sndio() -> void;

View File

@ -4,38 +4,43 @@
#include <giomm.h>
#include <glibmm/refptr.h>
#include <json/json.h>
#include <tuple>
#include "bar.hpp"
#include "modules/sni/item.hpp"
namespace waybar::modules::SNI {
class Host {
public:
Host(const std::size_t id, const Json::Value&, const std::function<void(std::unique_ptr<Item>&)>&,
Host(const std::size_t id, const Json::Value&, const Bar&,
const std::function<void(std::unique_ptr<Item>&)>&,
const std::function<void(std::unique_ptr<Item>&)>&);
~Host();
private:
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
void nameAppeared(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring,
const Glib::ustring&);
void nameVanished(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
void nameAppeared(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring,
const Glib::ustring&);
void nameVanished(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring);
static void proxyReady(GObject*, GAsyncResult*, gpointer);
static void registerHost(GObject*, GAsyncResult*, gpointer);
static void itemRegistered(SnWatcher*, const gchar*, gpointer);
static void itemUnregistered(SnWatcher*, const gchar*, gpointer);
std::tuple<std::string, std::string> getBusNameAndObjectPath(const std::string);
void addRegisteredItem(std::string service);
void addRegisteredItem(std::string service);
std::vector<std::unique_ptr<Item>> items_;
const std::string bus_name_;
const std::string object_path_;
std::size_t bus_name_id_;
std::size_t watcher_id_;
GCancellable* cancellable_ = nullptr;
SnWatcher* watcher_ = nullptr;
const Json::Value& config_;
std::vector<std::unique_ptr<Item>> items_;
const std::string bus_name_;
const std::string object_path_;
std::size_t bus_name_id_;
std::size_t watcher_id_;
GCancellable* cancellable_ = nullptr;
SnWatcher* watcher_ = nullptr;
const Json::Value& config_;
const Bar& bar_;
const std::function<void(std::unique_ptr<Item>&)> on_add_;
const std::function<void(std::unique_ptr<Item>&)> on_remove_;
};

View File

@ -11,36 +11,45 @@
#include <libdbusmenu-gtk/dbusmenu-gtk.h>
#include <sigc++/trackable.h>
#include <set>
#include <string_view>
#include "bar.hpp"
namespace waybar::modules::SNI {
struct ToolTip {
Glib::ustring icon_name;
Glib::ustring text;
};
class Item : public sigc::trackable {
public:
Item(const std::string&, const std::string&, const Json::Value&);
Item(const std::string&, const std::string&, const Json::Value&, const Bar&);
~Item() = default;
std::string bus_name;
std::string object_path;
int icon_size;
int effective_icon_size;
Gtk::Image image;
int icon_size;
int effective_icon_size;
Gtk::Image image;
Gtk::EventBox event_box;
std::string category;
std::string id;
std::string status;
std::string category;
std::string id;
std::string title;
int32_t window_id;
std::string icon_name;
Glib::RefPtr<Gdk::Pixbuf> icon_pixmap;
std::string title;
std::string icon_name;
Glib::RefPtr<Gdk::Pixbuf> icon_pixmap;
Glib::RefPtr<Gtk::IconTheme> icon_theme;
std::string overlay_icon_name;
std::string attention_icon_name;
std::string attention_movie_name;
std::string icon_theme_path;
std::string menu;
DbusmenuGtkMenu* dbus_menu = nullptr;
Gtk::Menu* gtk_menu = nullptr;
std::string overlay_icon_name;
std::string attention_icon_name;
std::string attention_movie_name;
std::string icon_theme_path;
std::string menu;
ToolTip tooltip;
DbusmenuGtkMenu* dbus_menu = nullptr;
Gtk::Menu* gtk_menu = nullptr;
/**
* ItemIsMenu flag means that the item only supports the context menu.
* Default value is true because libappindicator supports neither ItemIsMenu nor Activate method
@ -49,23 +58,37 @@ class Item : public sigc::trackable {
bool item_is_menu = true;
private:
void onConfigure(GdkEventConfigure* ev);
void proxyReady(Glib::RefPtr<Gio::AsyncResult>& result);
void setProperty(const Glib::ustring& name, Glib::VariantBase& value);
void setStatus(const Glib::ustring& value);
void getUpdatedProperties();
void processUpdatedProperties(Glib::RefPtr<Gio::AsyncResult>& result);
void onSignal(const Glib::ustring& sender_name, const Glib::ustring& signal_name,
const Glib::VariantContainerBase& arguments);
void updateImage();
void updateImage();
Glib::RefPtr<Gdk::Pixbuf> extractPixBuf(GVariant* variant);
Glib::RefPtr<Gdk::Pixbuf> getIconPixbuf();
Glib::RefPtr<Gdk::Pixbuf> getIconByName(const std::string& name, int size);
static void onMenuDestroyed(Item* self, GObject* old_menu_pointer);
void makeMenu();
bool handleClick(GdkEventButton* const& /*ev*/);
double getScaledIconSize();
static void onMenuDestroyed(Item* self, GObject* old_menu_pointer);
void makeMenu();
bool handleClick(GdkEventButton* const& /*ev*/);
bool handleScroll(GdkEventScroll* const&);
// smooth scrolling threshold
gdouble scroll_threshold_ = 0;
gdouble distance_scrolled_x_ = 0;
gdouble distance_scrolled_y_ = 0;
// visibility of items with Status == Passive
bool show_passive_ = false;
const Bar& bar_;
Glib::RefPtr<Gio::DBus::Proxy> proxy_;
Glib::RefPtr<Gio::Cancellable> cancellable_;
bool update_pending_;
std::set<std::string_view> update_pending_;
};
} // namespace waybar::modules::SNI

View File

@ -1,6 +1,7 @@
#pragma once
#include <fmt/format.h>
#include "AModule.hpp"
#include "bar.hpp"
#include "modules/sni/host.hpp"
@ -12,17 +13,17 @@ namespace waybar::modules::SNI {
class Tray : public AModule {
public:
Tray(const std::string&, const Bar&, const Json::Value&);
~Tray() = default;
auto update() -> void;
virtual ~Tray() = default;
auto update() -> void override;
private:
void onAdd(std::unique_ptr<Item>& item);
void onRemove(std::unique_ptr<Item>& item);
static inline std::size_t nb_hosts_ = 0;
Gtk::Box box_;
SNI::Watcher::singleton watcher_;
SNI::Host host_;
Gtk::Box box_;
SNI::Watcher::singleton watcher_;
SNI::Host host_;
};
} // namespace waybar::modules::SNI

View File

@ -30,26 +30,26 @@ class Watcher {
typedef struct {
GfWatchType type;
Watcher * watcher;
gchar * service;
gchar * bus_name;
gchar * object_path;
guint watch_id;
Watcher *watcher;
gchar *service;
gchar *bus_name;
gchar *object_path;
guint watch_id;
} GfWatch;
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection> &, Glib::ustring);
void busAcquired(const Glib::RefPtr<Gio::DBus::Connection> &, Glib::ustring);
static gboolean handleRegisterHost(Watcher *, GDBusMethodInvocation *, const gchar *);
static gboolean handleRegisterItem(Watcher *, GDBusMethodInvocation *, const gchar *);
static GfWatch *gfWatchFind(GSList *list, const gchar *bus_name, const gchar *object_path);
static GfWatch *gfWatchNew(GfWatchType, const gchar *, const gchar *, const gchar *, Watcher *);
static void nameVanished(GDBusConnection *connection, const char *name, gpointer data);
static void gfWatchFree(gpointer data);
static void nameVanished(GDBusConnection *connection, const char *name, gpointer data);
static void gfWatchFree(gpointer data);
void updateRegisteredItems(SnWatcher *obj);
uint32_t bus_name_id_;
GSList * hosts_ = nullptr;
GSList * items_ = nullptr;
uint32_t bus_name_id_;
GSList *hosts_ = nullptr;
GSList *items_ = nullptr;
SnWatcher *watcher_ = nullptr;
};

View File

@ -0,0 +1,60 @@
#pragma once
#include <atomic>
#include <string>
#include "modules/sway/ipc/client.hpp"
#include "util/SafeSignal.hpp"
#include "util/json.hpp"
namespace waybar {
class Bar;
namespace modules::sway {
/*
* Supported subset of i3/sway IPC barconfig object
*/
struct swaybar_config {
std::string id;
std::string mode;
std::string hidden_state;
};
/**
* swaybar IPC client
*/
class BarIpcClient {
public:
BarIpcClient(waybar::Bar& bar);
private:
void onInitialConfig(const struct Ipc::ipc_response& res);
void onIpcEvent(const struct Ipc::ipc_response&);
void onCmd(const struct Ipc::ipc_response&);
void onConfigUpdate(const swaybar_config& config);
void onVisibilityUpdate(bool visible_by_modifier);
void onModeUpdate(bool visible_by_modifier);
void onUrgencyUpdate(bool visible_by_urgency);
void update();
bool isModuleEnabled(std::string name);
Bar& bar_;
util::JsonParser parser_;
Ipc ipc_;
swaybar_config bar_config_;
std::string modifier_reset_;
bool visible_by_mode_ = false;
bool visible_by_modifier_ = false;
bool visible_by_urgency_ = false;
std::atomic<bool> modifier_no_action_ = false;
SafeSignal<bool> signal_mode_;
SafeSignal<bool> signal_visible_;
SafeSignal<bool> signal_urgency_;
SafeSignal<swaybar_config> signal_config_;
};
} // namespace modules::sway
} // namespace waybar

View File

@ -4,9 +4,13 @@
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <cstring>
#include <memory>
#include <mutex>
#include <stdexcept>
#include <string>
#include "ipc.hpp"
#include "util/sleeper_thread.hpp"
@ -18,8 +22,8 @@ class Ipc {
~Ipc();
struct ipc_response {
uint32_t size;
uint32_t type;
uint32_t size;
uint32_t type;
std::string payload;
};
@ -33,16 +37,16 @@ class Ipc {
protected:
static inline const std::string ipc_magic_ = "i3-ipc";
static inline const size_t ipc_header_size_ = ipc_magic_.size() + 8;
static inline const size_t ipc_header_size_ = ipc_magic_.size() + 8;
const std::string getSocketPath() const;
int open(const std::string &) const;
const std::string getSocketPath() const;
int open(const std::string &) const;
struct ipc_response send(int fd, uint32_t type, const std::string &payload = "");
struct ipc_response recv(int fd);
int fd_;
int fd_event_;
std::mutex mutex_;
int fd_;
int fd_event_;
std::mutex mutex_;
util::SleeperThread thread_;
};

View File

@ -1,8 +1,10 @@
#pragma once
#include <cstdint>
#define event_mask(ev) (1u << (ev & 0x7F))
enum ipc_command_type {
enum ipc_command_type : uint32_t {
// i3 command types - see i3's I3_REPLY_TYPE constants
IPC_COMMAND = 0,
IPC_GET_WORKSPACES = 1,
@ -21,12 +23,16 @@ enum ipc_command_type {
IPC_GET_SEATS = 101,
// Events sent from sway to clients. Events have the highest bits set.
IPC_EVENT_WORKSPACE = ((1 << 31) | 0),
IPC_EVENT_OUTPUT = ((1 << 31) | 1),
IPC_EVENT_MODE = ((1 << 31) | 2),
IPC_EVENT_WINDOW = ((1 << 31) | 3),
IPC_EVENT_BARCONFIG_UPDATE = ((1 << 31) | 4),
IPC_EVENT_BINDING = ((1 << 31) | 5),
IPC_EVENT_SHUTDOWN = ((1 << 31) | 6),
IPC_EVENT_TICK = ((1 << 31) | 7),
IPC_EVENT_WORKSPACE = ((1U << 31) | 0),
IPC_EVENT_OUTPUT = ((1U << 31) | 1),
IPC_EVENT_MODE = ((1U << 31) | 2),
IPC_EVENT_WINDOW = ((1U << 31) | 3),
IPC_EVENT_BARCONFIG_UPDATE = ((1U << 31) | 4),
IPC_EVENT_BINDING = ((1U << 31) | 5),
IPC_EVENT_SHUTDOWN = ((1U << 31) | 6),
IPC_EVENT_TICK = ((1U << 31) | 7),
// sway-specific event types
IPC_EVENT_BAR_STATE_UPDATE = ((1U << 31) | 20),
IPC_EVENT_INPUT = ((1U << 31) | 21),
};

View File

@ -1,6 +1,11 @@
#pragma once
#include <fmt/format.h>
#include <xkbcommon/xkbregistry.h>
#include <map>
#include <string>
#include "ALabel.hpp"
#include "bar.hpp"
#include "client.hpp"
@ -12,17 +17,52 @@ namespace waybar::modules::sway {
class Language : public ALabel, public sigc::trackable {
public:
Language(const std::string& id, const Json::Value& config);
~Language() = default;
auto update() -> void;
virtual ~Language() = default;
auto update() -> void override;
private:
enum class DispayedShortFlag { None = 0, ShortName = 1, ShortDescription = 1 << 1 };
struct Layout {
std::string full_name;
std::string short_name;
std::string variant;
std::string short_description;
std::string country_flag() const;
};
class XKBContext {
public:
XKBContext();
~XKBContext();
auto next_layout() -> Layout*;
private:
rxkb_context* context_ = nullptr;
rxkb_layout* xkb_layout_ = nullptr;
Layout* layout_ = nullptr;
std::map<std::string, rxkb_layout*> base_layouts_by_name_;
};
void onEvent(const struct Ipc::ipc_response&);
void onCmd(const struct Ipc::ipc_response&);
std::string lang_;
auto set_current_layout(std::string current_layout) -> void;
auto init_layouts_map(const std::vector<std::string>& used_layouts) -> void;
const static std::string XKB_LAYOUT_NAMES_KEY;
const static std::string XKB_ACTIVE_LAYOUT_NAME_KEY;
Layout layout_;
std::string tooltip_format_ = "";
std::map<std::string, Layout> layouts_map_;
bool hide_single_;
bool is_variant_displayed;
std::byte displayed_short_flag = static_cast<std::byte>(DispayedShortFlag::None);
util::JsonParser parser_;
std::mutex mutex_;
Ipc ipc_;
std::mutex mutex_;
Ipc ipc_;
};
} // namespace waybar::modules::sway

View File

@ -1,6 +1,7 @@
#pragma once
#include <fmt/format.h>
#include "ALabel.hpp"
#include "bar.hpp"
#include "client.hpp"
@ -12,16 +13,16 @@ namespace waybar::modules::sway {
class Mode : public ALabel, public sigc::trackable {
public:
Mode(const std::string&, const Json::Value&);
~Mode() = default;
auto update() -> void;
virtual ~Mode() = default;
auto update() -> void override;
private:
void onEvent(const struct Ipc::ipc_response&);
std::string mode_;
std::string mode_;
util::JsonParser parser_;
std::mutex mutex_;
Ipc ipc_;
std::mutex mutex_;
Ipc ipc_;
};
} // namespace waybar::modules::sway

View File

@ -0,0 +1,35 @@
#pragma once
#include <gtkmm/label.h>
#include <mutex>
#include <string>
#include "ALabel.hpp"
#include "bar.hpp"
#include "client.hpp"
#include "modules/sway/ipc/client.hpp"
#include "util/json.hpp"
namespace waybar::modules::sway {
class Scratchpad : public ALabel {
public:
Scratchpad(const std::string&, const Json::Value&);
virtual ~Scratchpad() = default;
auto update() -> void override;
private:
auto getTree() -> void;
auto onCmd(const struct Ipc::ipc_response&) -> void;
auto onEvent(const struct Ipc::ipc_response&) -> void;
std::string tooltip_format_;
bool show_empty_;
bool tooltip_enabled_;
std::string tooltip_text_;
int count_;
std::mutex mutex_;
Ipc ipc_;
util::JsonParser parser_;
};
} // namespace waybar::modules::sway

View File

@ -1,8 +1,10 @@
#pragma once
#include <fmt/format.h>
#include <tuple>
#include "ALabel.hpp"
#include "AAppIconLabel.hpp"
#include "bar.hpp"
#include "client.hpp"
#include "modules/sway/ipc/client.hpp"
@ -10,28 +12,33 @@
namespace waybar::modules::sway {
class Window : public ALabel, public sigc::trackable {
class Window : public AAppIconLabel, public sigc::trackable {
public:
Window(const std::string&, const waybar::Bar&, const Json::Value&);
~Window() = default;
auto update() -> void;
virtual ~Window() = default;
auto update() -> void override;
private:
void onEvent(const struct Ipc::ipc_response&);
void onCmd(const struct Ipc::ipc_response&);
std::tuple<std::size_t, int, std::string, std::string> getFocusedNode(const Json::Value& nodes,
std::string& output);
void getTree();
void setClass(std::string classname, bool enable);
void onEvent(const struct Ipc::ipc_response&);
void onCmd(const struct Ipc::ipc_response&);
std::tuple<std::size_t, int, int, std::string, std::string, std::string, std::string, std::string>
getFocusedNode(const Json::Value& nodes, std::string& output);
void getTree();
const Bar& bar_;
std::string window_;
int windowId_;
std::string app_id_;
std::string old_app_id_;
std::size_t app_nb_;
const Bar& bar_;
std::string window_;
int windowId_;
std::string app_id_;
std::string app_class_;
std::string layout_;
std::string old_app_id_;
std::size_t app_nb_;
std::string shell_;
int floating_count_;
util::JsonParser parser_;
std::mutex mutex_;
Ipc ipc_;
std::mutex mutex_;
Ipc ipc_;
};
} // namespace waybar::modules::sway

View File

@ -1,48 +1,60 @@
#pragma once
#include <unordered_map>
#include <fmt/format.h>
#include <gtkmm/button.h>
#include <gtkmm/label.h>
#include <string_view>
#include <unordered_map>
#include "AModule.hpp"
#include "bar.hpp"
#include "client.hpp"
#include "modules/sway/ipc/client.hpp"
#include "util/json.hpp"
#include "util/regex_collection.hpp"
namespace waybar::modules::sway {
class Workspaces : public AModule, public sigc::trackable {
public:
Workspaces(const std::string&, const waybar::Bar&, const Json::Value&);
~Workspaces() = default;
auto update() -> void;
virtual ~Workspaces() = default;
auto update() -> void override;
private:
static inline const std::string workspace_switch_cmd_ = "workspace --no-auto-back-and-forth \"{}\"";
static constexpr std::string_view workspace_switch_cmd_ = "workspace {} \"{}\"";
static constexpr std::string_view persistent_workspace_switch_cmd_ =
R"(workspace {} "{}"; move workspace to output "{}"; workspace {} "{}")";
static int convertWorkspaceNameToNum(std::string name);
static int windowRewritePriorityFunction(std::string const& window_rule);
void onCmd(const struct Ipc::ipc_response&);
void onEvent(const struct Ipc::ipc_response&);
bool filterButtons();
Gtk::Button& addButton(const Json::Value&);
void onButtonReady(const Json::Value&, Gtk::Button&);
std::string getIcon(const std::string&, const Json::Value&);
void onCmd(const struct Ipc::ipc_response&);
void onEvent(const struct Ipc::ipc_response&);
bool filterButtons();
static bool hasFlag(const Json::Value&, const std::string&);
void updateWindows(const Json::Value&, std::string&);
Gtk::Button& addButton(const Json::Value&);
void onButtonReady(const Json::Value&, Gtk::Button&);
std::string getIcon(const std::string&, const Json::Value&);
const std::string getCycleWorkspace(std::vector<Json::Value>::iterator, bool prev) const;
uint16_t getWorkspaceIndex(const std::string& name) const;
std::string trimWorkspaceName(std::string);
bool handleScroll(GdkEventScroll*);
uint16_t getWorkspaceIndex(const std::string& name) const;
std::string trimWorkspaceName(std::string);
bool handleScroll(GdkEventScroll*) override;
const Bar& bar_;
std::vector<Json::Value> workspaces_;
std::vector<std::string> workspaces_order_;
Gtk::Box box_;
util::JsonParser parser_;
const Bar& bar_;
std::vector<Json::Value> workspaces_;
std::vector<std::string> high_priority_named_;
std::vector<std::string> workspaces_order_;
Gtk::Box box_;
std::string m_formatWindowSeperator;
std::string m_windowRewriteDefault;
util::RegexCollection m_windowRewriteRules;
util::JsonParser parser_;
std::unordered_map<std::string, Gtk::Button> buttons_;
std::mutex mutex_;
Ipc ipc_;
std::mutex mutex_;
Ipc ipc_;
};
} // namespace waybar::modules::sway

View File

@ -0,0 +1,31 @@
#pragma once
#include <giomm/dbusproxy.h>
#include <string>
#include "ALabel.hpp"
namespace waybar::modules {
class SystemdFailedUnits : public ALabel {
public:
SystemdFailedUnits(const std::string &, const Json::Value &);
virtual ~SystemdFailedUnits();
auto update() -> void override;
private:
bool hide_on_ok;
std::string format_ok;
bool update_pending;
uint32_t nr_failed_system, nr_failed_user;
std::string last_status;
Glib::RefPtr<Gio::DBus::Proxy> system_proxy, user_proxy;
void notify_cb(const Glib::ustring &sender_name, const Glib::ustring &signal_name,
const Glib::VariantContainerBase &arguments);
void updateData();
};
} // namespace waybar::modules

View File

@ -1,7 +1,9 @@
#pragma once
#include <fmt/format.h>
#include <fstream>
#include "ALabel.hpp"
#include "util/sleeper_thread.hpp"
@ -10,14 +12,14 @@ namespace waybar::modules {
class Temperature : public ALabel {
public:
Temperature(const std::string&, const Json::Value&);
~Temperature() = default;
auto update() -> void;
virtual ~Temperature() = default;
auto update() -> void override;
private:
float getTemperature();
bool isCritical(uint16_t);
float getTemperature();
bool isCritical(uint16_t);
std::string file_path_;
std::string file_path_;
util::SleeperThread thread_;
};

View File

@ -0,0 +1,82 @@
#pragma once
#include <libupower-glib/upower.h>
#include <iostream>
#include <map>
#include <string>
#include <unordered_map>
#include "ALabel.hpp"
#include "glibconfig.h"
#include "gtkmm/box.h"
#include "gtkmm/image.h"
#include "gtkmm/label.h"
#include "modules/upower/upower_tooltip.hpp"
namespace waybar::modules::upower {
class UPower : public AModule {
public:
UPower(const std::string &, const Json::Value &);
virtual ~UPower();
auto update() -> void override;
private:
typedef std::unordered_map<std::string, UpDevice *> Devices;
const std::string DEFAULT_FORMAT = "{percentage}";
const std::string DEFAULT_FORMAT_ALT = "{percentage} {time}";
static void deviceAdded_cb(UpClient *client, UpDevice *device, gpointer data);
static void deviceRemoved_cb(UpClient *client, const gchar *objectPath, gpointer data);
static void deviceNotify_cb(UpDevice *device, GParamSpec *pspec, gpointer user_data);
static void prepareForSleep_cb(GDBusConnection *system_bus, const gchar *sender_name,
const gchar *object_path, const gchar *interface_name,
const gchar *signal_name, GVariant *parameters,
gpointer user_data);
static void upowerAppear(GDBusConnection *conn, const gchar *name, const gchar *name_owner,
gpointer data);
static void upowerDisappear(GDBusConnection *connection, const gchar *name, gpointer user_data);
void removeDevice(const gchar *objectPath);
void addDevice(UpDevice *device);
void setDisplayDevice();
void resetDevices();
void removeDevices();
bool show_tooltip_callback(int, int, bool, const Glib::RefPtr<Gtk::Tooltip> &tooltip);
bool handleToggle(GdkEventButton *const &) override;
std::string timeToString(gint64 time);
const std::string getDeviceStatus(UpDeviceState &state);
Gtk::Box box_;
Gtk::Image icon_;
Gtk::Label label_;
// Config
bool hideIfEmpty = true;
bool tooltip_enabled = true;
uint tooltip_spacing = 4;
uint tooltip_padding = 4;
uint iconSize = 20;
std::string format = DEFAULT_FORMAT;
std::string format_alt = DEFAULT_FORMAT_ALT;
Devices devices;
std::mutex m_Mutex;
UpClient *client;
UpDevice *displayDevice = nullptr;
guint login1_id;
GDBusConnection *login1_connection;
std::unique_ptr<UPowerTooltip> upower_tooltip;
std::string lastStatus;
const char *lastWarningLevel;
bool showAltText;
bool showIcon = true;
bool upowerRunning;
guint upowerWatcher_id;
std::string nativePath_;
};
} // namespace waybar::modules::upower

View File

@ -0,0 +1,33 @@
#pragma once
#include <libupower-glib/upower.h>
#include <memory>
#include <unordered_map>
#include "gtkmm/box.h"
#include "gtkmm/label.h"
#include "gtkmm/window.h"
namespace waybar::modules::upower {
class UPowerTooltip : public Gtk::Window {
private:
typedef std::unordered_map<std::string, UpDevice*> Devices;
const std::string getDeviceIcon(UpDeviceKind& kind);
std::unique_ptr<Gtk::Box> contentBox;
uint iconSize;
uint tooltipSpacing;
uint tooltipPadding;
public:
UPowerTooltip(uint iconSize, uint tooltipSpacing, uint tooltipPadding);
virtual ~UPowerTooltip();
uint updateTooltip(Devices& devices);
};
} // namespace waybar::modules::upower

34
include/modules/user.hpp Normal file
View File

@ -0,0 +1,34 @@
#pragma once
#include <fmt/chrono.h>
#include <gdkmm/pixbuf.h>
#include <glibmm/refptr.h>
#include "AIconLabel.hpp"
#include "util/sleeper_thread.hpp"
namespace waybar::modules {
class User : public AIconLabel {
public:
User(const std::string&, const Json::Value&);
virtual ~User() = default;
auto update() -> void override;
bool handleToggle(GdkEventButton* const& e) override;
private:
util::SleeperThread thread_;
static constexpr inline int defaultUserImageWidth_ = 20;
static constexpr inline int defaultUserImageHeight_ = 20;
long uptime_as_seconds();
std::string get_user_login() const;
std::string get_user_home_dir() const;
std::string get_default_user_avatar_path() const;
void init_default_user_avatar(int width, int height);
void init_user_avatar(const std::string& path, int width, int height);
void init_avatar(const Json::Value& config);
void init_update_worker();
};
} // namespace waybar::modules

View File

@ -0,0 +1,49 @@
#pragma once
#include <fmt/format.h>
#include <wp/wp.h>
#include <algorithm>
#include <array>
#include "ALabel.hpp"
namespace waybar::modules {
class Wireplumber : public ALabel {
public:
Wireplumber(const std::string&, const Json::Value&);
virtual ~Wireplumber();
auto update() -> void override;
private:
void asyncLoadRequiredApiModules();
void prepare();
void activatePlugins();
static void updateVolume(waybar::modules::Wireplumber* self, uint32_t id);
static void updateNodeName(waybar::modules::Wireplumber* self, uint32_t id);
static void onPluginActivated(WpObject* p, GAsyncResult* res, waybar::modules::Wireplumber* self);
static void onDefaultNodesApiLoaded(WpObject* p, GAsyncResult* res,
waybar::modules::Wireplumber* self);
static void onMixerApiLoaded(WpObject* p, GAsyncResult* res, waybar::modules::Wireplumber* self);
static void onObjectManagerInstalled(waybar::modules::Wireplumber* self);
static void onMixerChanged(waybar::modules::Wireplumber* self, uint32_t id);
static void onDefaultNodesApiChanged(waybar::modules::Wireplumber* self);
bool handleScroll(GdkEventScroll* e) override;
WpCore* wp_core_;
GPtrArray* apis_;
WpObjectManager* om_;
WpPlugin* mixer_api_;
WpPlugin* def_nodes_api_;
gchar* default_node_name_;
uint32_t pending_plugins_;
bool muted_;
double volume_;
double min_step_;
uint32_t node_id_{0};
std::string node_name_;
};
} // namespace waybar::modules

View File

@ -1,160 +1,179 @@
#pragma once
#include <gdk/gdk.h>
#include <glibmm/refptr.h>
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/icontheme.h>
#include <gtkmm/image.h>
#include <gtkmm/label.h>
#include <wayland-client.h>
#include <map>
#include <memory>
#include <string>
#include <unordered_set>
#include <vector>
#include "AModule.hpp"
#include "bar.hpp"
#include "client.hpp"
#include "giomm/desktopappinfo.h"
#include "util/json.hpp"
#include <memory>
#include <string>
#include <vector>
#include <gdk/gdk.h>
#include <glibmm/refptr.h>
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/image.h>
#include <gtkmm/label.h>
#include <gtkmm/icontheme.h>
#include <wayland-client.h>
#include "wlr-foreign-toplevel-management-unstable-v1-client-protocol.h"
namespace waybar::modules::wlr {
class Taskbar;
class Task
{
public:
Task(const waybar::Bar&, const Json::Value&, Taskbar*,
struct zwlr_foreign_toplevel_handle_v1 *, struct wl_seat*);
~Task();
class Task {
public:
Task(const waybar::Bar &, const Json::Value &, Taskbar *,
struct zwlr_foreign_toplevel_handle_v1 *, struct wl_seat *);
~Task();
public:
enum State {
MAXIMIZED = (1 << 0),
MINIMIZED = (1 << 1),
ACTIVE = (1 << 2),
FULLSCREEN = (1 << 3),
INVALID = (1 << 4)
};
public:
enum State {
MAXIMIZED = (1 << 0),
MINIMIZED = (1 << 1),
ACTIVE = (1 << 2),
FULLSCREEN = (1 << 3),
INVALID = (1 << 4)
};
// made public so TaskBar can reorder based on configuration.
Gtk::Button button;
private:
static uint32_t global_id;
private:
static uint32_t global_id;
private:
const waybar::Bar &bar_;
const Json::Value &config_;
Taskbar *tbar_;
struct zwlr_foreign_toplevel_handle_v1 *handle_;
struct wl_seat *seat_;
private:
const waybar::Bar &bar_;
const Json::Value &config_;
Taskbar *tbar_;
struct zwlr_foreign_toplevel_handle_v1 *handle_;
struct wl_seat *seat_;
uint32_t id_;
uint32_t id_;
Gtk::Button button_;
Gtk::Box content_;
Gtk::Image icon_;
Gtk::Label text_before_;
Gtk::Label text_after_;
bool button_visible_;
Gtk::Box content_;
Gtk::Image icon_;
Gtk::Label text_before_;
Gtk::Label text_after_;
Glib::RefPtr<Gio::DesktopAppInfo> app_info_;
bool button_visible_ = false;
bool ignored_ = false;
bool with_icon_;
std::string format_before_;
std::string format_after_;
bool with_icon_ = false;
bool with_name_ = false;
std::string format_before_;
std::string format_after_;
std::string format_tooltip_;
std::string format_tooltip_;
std::string title_;
std::string app_id_;
uint32_t state_ = 0;
std::string name_;
std::string title_;
std::string app_id_;
uint32_t state_ = 0;
private:
std::string repr() const;
std::string state_string(bool = false) const;
int32_t drag_start_x;
int32_t drag_start_y;
int32_t drag_start_button = -1;
public:
/* Getter functions */
uint32_t id() const { return id_; }
std::string title() const { return title_; }
std::string app_id() const { return app_id_; }
uint32_t state() const { return state_; }
bool maximized() const { return state_ & MAXIMIZED; }
bool minimized() const { return state_ & MINIMIZED; }
bool active() const { return state_ & ACTIVE; }
bool fullscreen() const { return state_ & FULLSCREEN; }
private:
std::string repr() const;
std::string state_string(bool = false) const;
void set_app_info_from_app_id_list(const std::string &app_id_list);
bool image_load_icon(Gtk::Image &image, const Glib::RefPtr<Gtk::IconTheme> &icon_theme,
Glib::RefPtr<Gio::DesktopAppInfo> app_info, int size);
void hide_if_ignored();
public:
/* Callbacks for the wlr protocol */
void handle_title(const char *);
void handle_app_id(const char *);
void handle_output_enter(struct wl_output *);
void handle_output_leave(struct wl_output *);
void handle_state(struct wl_array *);
void handle_done();
void handle_closed();
public:
/* Getter functions */
uint32_t id() const { return id_; }
std::string title() const { return title_; }
std::string app_id() const { return app_id_; }
uint32_t state() const { return state_; }
bool maximized() const { return state_ & MAXIMIZED; }
bool minimized() const { return state_ & MINIMIZED; }
bool active() const { return state_ & ACTIVE; }
bool fullscreen() const { return state_ & FULLSCREEN; }
/* Callbacks for Gtk events */
bool handle_clicked(GdkEventButton *);
public:
/* Callbacks for the wlr protocol */
void handle_title(const char *);
void handle_app_id(const char *);
void handle_output_enter(struct wl_output *);
void handle_output_leave(struct wl_output *);
void handle_state(struct wl_array *);
void handle_done();
void handle_closed();
public:
bool operator==(const Task&) const;
bool operator!=(const Task&) const;
/* Callbacks for Gtk events */
bool handle_clicked(GdkEventButton *);
bool handle_button_release(GdkEventButton *);
bool handle_motion_notify(GdkEventMotion *);
void handle_drag_data_get(const Glib::RefPtr<Gdk::DragContext> &context,
Gtk::SelectionData &selection_data, guint info, guint time);
void handle_drag_data_received(const Glib::RefPtr<Gdk::DragContext> &context, int x, int y,
Gtk::SelectionData selection_data, guint info, guint time);
public:
void update();
public:
bool operator==(const Task &) const;
bool operator!=(const Task &) const;
public:
/* Interaction with the tasks */
void maximize(bool);
void minimize(bool);
void activate();
void fullscreen(bool);
void close();
public:
void update();
public:
/* Interaction with the tasks */
void maximize(bool);
void minimize(bool);
void activate();
void fullscreen(bool);
void close();
};
using TaskPtr = std::unique_ptr<Task>;
class Taskbar : public waybar::AModule {
public:
Taskbar(const std::string &, const waybar::Bar &, const Json::Value &);
~Taskbar();
void update();
class Taskbar : public waybar::AModule
{
public:
Taskbar(const std::string&, const waybar::Bar&, const Json::Value&);
~Taskbar();
void update();
private:
const waybar::Bar &bar_;
Gtk::Box box_;
std::vector<TaskPtr> tasks_;
private:
const waybar::Bar &bar_;
Gtk::Box box_;
std::vector<TaskPtr> tasks_;
std::vector<Glib::RefPtr<Gtk::IconTheme>> icon_themes_;
std::unordered_set<std::string> ignore_list_;
std::map<std::string, std::string> app_ids_replace_map_;
std::vector<Glib::RefPtr<Gtk::IconTheme>> icon_themes_;
struct zwlr_foreign_toplevel_manager_v1 *manager_;
struct wl_seat *seat_;
struct zwlr_foreign_toplevel_manager_v1 *manager_;
struct wl_seat *seat_;
public:
/* Callbacks for global registration */
void register_manager(struct wl_registry *, uint32_t name, uint32_t version);
void register_seat(struct wl_registry *, uint32_t name, uint32_t version);
public:
/* Callbacks for global registration */
void register_manager(struct wl_registry*, uint32_t name, uint32_t version);
void register_seat(struct wl_registry*, uint32_t name, uint32_t version);
/* Callbacks for the wlr protocol */
void handle_toplevel_create(struct zwlr_foreign_toplevel_handle_v1 *);
void handle_finished();
/* Callbacks for the wlr protocol */
void handle_toplevel_create(struct zwlr_foreign_toplevel_handle_v1 *);
void handle_finished();
public:
void add_button(Gtk::Button &);
void move_button(Gtk::Button &, int);
void remove_button(Gtk::Button &);
void remove_task(uint32_t);
public:
void add_button(Gtk::Button &);
void move_button(Gtk::Button &, int);
void remove_button(Gtk::Button &);
void remove_task(uint32_t);
bool show_output(struct wl_output *) const;
bool all_outputs() const;
bool show_output(struct wl_output *) const;
bool all_outputs() const;
std::vector<Glib::RefPtr<Gtk::IconTheme>> icon_themes() const;
const std::vector<Glib::RefPtr<Gtk::IconTheme>> &icon_themes() const;
const std::unordered_set<std::string> &ignore_list() const;
const std::map<std::string, std::string> &app_ids_replace_map() const;
};
} /* namespace waybar::modules::wlr */

View File

@ -0,0 +1,172 @@
#pragma once
#include <fmt/format.h>
#include <gtkmm/button.h>
#include <gtkmm/image.h>
#include <gtkmm/label.h>
#include <functional>
#include <map>
#include <memory>
#include <vector>
#include "AModule.hpp"
#include "bar.hpp"
#include "ext-workspace-unstable-v1-client-protocol.h"
namespace waybar::modules::wlr {
class WorkspaceManager;
class WorkspaceGroup;
class Workspace {
public:
Workspace(const waybar::Bar &bar, const Json::Value &config, WorkspaceGroup &workspace_group,
zext_workspace_handle_v1 *workspace, uint32_t id, std::string name);
~Workspace();
auto update() -> void;
auto id() const -> uint32_t { return id_; }
auto is_active() const -> bool { return state_ & static_cast<uint32_t>(State::ACTIVE); }
auto is_urgent() const -> bool { return state_ & static_cast<uint32_t>(State::URGENT); }
auto is_hidden() const -> bool { return state_ & static_cast<uint32_t>(State::HIDDEN); }
auto is_empty() const -> bool { return state_ & static_cast<uint32_t>(State::EMPTY); }
auto is_persistent() const -> bool { return persistent_; }
// wlr stuff
auto handle_name(const std::string &name) -> void;
auto handle_coordinates(const std::vector<uint32_t> &coordinates) -> void;
auto handle_state(const std::vector<uint32_t> &state) -> void;
auto handle_remove() -> void;
auto make_persistent() -> void;
auto handle_duplicate() -> void;
auto handle_done() -> void;
auto handle_clicked(GdkEventButton *bt) -> bool;
auto show() -> void;
auto hide() -> void;
auto get_button_ref() -> Gtk::Button & { return button_; }
auto get_name() -> std::string & { return name_; }
auto get_coords() -> std::vector<uint32_t> & { return coordinates_; }
enum class State {
ACTIVE = (1 << 0),
URGENT = (1 << 1),
HIDDEN = (1 << 2),
EMPTY = (1 << 3),
};
private:
auto get_icon() -> std::string;
const Bar &bar_;
const Json::Value &config_;
WorkspaceGroup &workspace_group_;
// wlr stuff
zext_workspace_handle_v1 *workspace_handle_;
uint32_t state_ = 0;
uint32_t id_;
std::string name_;
std::vector<uint32_t> coordinates_;
static std::map<std::string, std::string> icons_map_;
std::string format_;
bool with_icon_ = false;
bool persistent_ = false;
Gtk::Button button_;
Gtk::Box content_;
Gtk::Label label_;
};
class WorkspaceGroup {
public:
WorkspaceGroup(const waybar::Bar &bar, Gtk::Box &box, const Json::Value &config,
WorkspaceManager &manager, zext_workspace_group_handle_v1 *workspace_group_handle,
uint32_t id);
~WorkspaceGroup();
auto update() -> void;
auto id() const -> uint32_t { return id_; }
auto is_visible() const -> bool;
auto remove_workspace(uint32_t id_) -> void;
auto active_only() const -> bool;
auto creation_delayed() const -> bool;
auto workspaces() -> std::vector<std::unique_ptr<Workspace>> & { return workspaces_; }
auto persistent_workspaces() -> std::vector<std::string> & { return persistent_workspaces_; }
auto sort_workspaces() -> void;
auto set_need_to_sort() -> void { need_to_sort = true; }
auto add_button(Gtk::Button &button) -> void;
auto remove_button(Gtk::Button &button) -> void;
auto fill_persistent_workspaces() -> void;
auto create_persistent_workspaces() -> void;
// wlr stuff
auto handle_workspace_create(zext_workspace_handle_v1 *workspace_handle) -> void;
auto handle_remove() -> void;
auto handle_output_enter(wl_output *output) -> void;
auto handle_output_leave() -> void;
auto handle_done() -> void;
auto commit() -> void;
private:
static uint32_t workspace_global_id;
const waybar::Bar &bar_;
Gtk::Box &box_;
const Json::Value &config_;
WorkspaceManager &workspace_manager_;
// wlr stuff
zext_workspace_group_handle_v1 *workspace_group_handle_;
wl_output *output_ = nullptr;
uint32_t id_;
std::vector<std::unique_ptr<Workspace>> workspaces_;
bool need_to_sort = false;
std::vector<std::string> persistent_workspaces_;
bool persistent_created_ = false;
};
class WorkspaceManager : public AModule {
public:
WorkspaceManager(const std::string &id, const waybar::Bar &bar, const Json::Value &config);
~WorkspaceManager() override;
auto update() -> void override;
auto all_outputs() const -> bool { return all_outputs_; }
auto active_only() const -> bool { return active_only_; }
auto workspace_comparator() const
-> std::function<bool(std::unique_ptr<Workspace> &, std::unique_ptr<Workspace> &)>;
auto creation_delayed() const -> bool { return creation_delayed_; }
auto sort_workspaces() -> void;
auto remove_workspace_group(uint32_t id_) -> void;
// wlr stuff
auto register_manager(wl_registry *registry, uint32_t name, uint32_t version) -> void;
auto handle_workspace_group_create(zext_workspace_group_handle_v1 *workspace_group_handle)
-> void;
auto handle_done() -> void;
auto handle_finished() -> void;
auto commit() -> void;
private:
const waybar::Bar &bar_;
Gtk::Box box_;
std::vector<std::unique_ptr<WorkspaceGroup>> groups_;
// wlr stuff
zext_workspace_manager_v1 *workspace_manager_ = nullptr;
static uint32_t group_global_id;
bool sort_by_name_ = true;
bool sort_by_coordinates_ = true;
bool sort_by_number_ = false;
bool all_outputs_ = false;
bool active_only_ = false;
bool creation_delayed_ = false;
};
} // namespace waybar::modules::wlr

View File

@ -0,0 +1,10 @@
#include "ext-workspace-unstable-v1-client-protocol.h"
namespace waybar::modules::wlr {
void add_registry_listener(void *data);
void add_workspace_listener(zext_workspace_handle_v1 *workspace_handle, void *data);
void add_workspace_group_listener(zext_workspace_group_handle_v1 *workspace_group_handle,
void *data);
zext_workspace_manager_v1 *workspace_manager_bind(wl_registry *registry, uint32_t name,
uint32_t version, void *data);
} // namespace waybar::modules::wlr

View File

@ -0,0 +1,75 @@
#pragma once
#include <glibmm/dispatcher.h>
#include <sigc++/signal.h>
#include <functional>
#include <mutex>
#include <queue>
#include <thread>
#include <tuple>
#include <type_traits>
#include <utility>
namespace waybar {
/**
* Thread-safe signal wrapper.
* Uses Glib::Dispatcher to pass events to another thread and locked queue to pass the arguments.
*/
template <typename... Args>
struct SafeSignal : sigc::signal<void(std::decay_t<Args>...)> {
public:
SafeSignal() { dp_.connect(sigc::mem_fun(*this, &SafeSignal::handle_event)); }
template <typename... EmitArgs>
void emit(EmitArgs&&... args) {
if (main_tid_ == std::this_thread::get_id()) {
/*
* Bypass the queue if the method is called the main thread.
* Ensures that events emitted from the main thread are processed synchronously and saves a
* few CPU cycles on locking/queuing.
* As a downside, this makes main thread events prioritized over the other threads and
* disrupts chronological order.
*/
signal_t::emit(std::forward<EmitArgs>(args)...);
} else {
{
std::unique_lock lock(mutex_);
queue_.emplace(std::forward<EmitArgs>(args)...);
}
dp_.emit();
}
}
template <typename... EmitArgs>
inline void operator()(EmitArgs&&... args) {
emit(std::forward<EmitArgs>(args)...);
}
protected:
using signal_t = sigc::signal<void(std::decay_t<Args>...)>;
using slot_t = decltype(std::declval<signal_t>().make_slot());
using arg_tuple_t = std::tuple<std::decay_t<Args>...>;
// ensure that unwrapped methods are not accessible
using signal_t::emit_reverse;
using signal_t::make_slot;
void handle_event() {
for (std::unique_lock lock(mutex_); !queue_.empty(); lock.lock()) {
auto args = queue_.front();
queue_.pop();
lock.unlock();
std::apply(cached_fn_, args);
}
}
Glib::Dispatcher dp_;
std::mutex mutex_;
std::queue<arg_tuple_t> queue_;
const std::thread::id main_tid_ = std::this_thread::get_id();
// cache functor for signal emission to avoid recreating it on each event
const slot_t cached_fn_ = make_slot();
};
} // namespace waybar

View File

@ -0,0 +1,96 @@
#pragma once
#include <json/value.h>
#include <pulse/context.h>
#include <pulse/introspect.h>
#include <pulse/thread-mainloop.h>
#include <pulse/volume.h>
#include <functional>
#include <memory>
#include <string>
#include "util/backend_common.hpp"
namespace waybar::util {
class AudioBackend {
private:
static void subscribeCb(pa_context*, pa_subscription_event_type_t, uint32_t, void*);
static void contextStateCb(pa_context*, void*);
static void sinkInfoCb(pa_context*, const pa_sink_info*, int, void*);
static void sourceInfoCb(pa_context*, const pa_source_info* i, int, void* data);
static void serverInfoCb(pa_context*, const pa_server_info*, void*);
static void volumeModifyCb(pa_context*, int, void*);
void connectContext();
pa_threaded_mainloop* mainloop_;
pa_mainloop_api* mainloop_api_;
pa_context* context_;
pa_cvolume pa_volume_;
// SINK
uint32_t sink_idx_{0};
uint16_t volume_;
bool muted_;
std::string port_name_;
std::string form_factor_;
std::string desc_;
std::string monitor_;
std::string current_sink_name_;
bool current_sink_running_;
// SOURCE
uint32_t source_idx_{0};
uint16_t source_volume_;
bool source_muted_;
std::string source_port_name_;
std::string source_desc_;
std::string default_source_name_;
std::vector<std::string> ignored_sinks_;
std::function<void()> on_updated_cb_ = NOOP;
/* Hack to keep constructor inaccessible but still public.
* This is required to be able to use std::make_shared.
* It is important to keep this class only accessible via a reference-counted
* pointer because the destructor will manually free memory, and this could be
* a problem with C++20's copy and move semantics.
*/
struct private_constructor_tag {};
public:
static std::shared_ptr<AudioBackend> getInstance(std::function<void()> on_updated_cb = NOOP);
AudioBackend(std::function<void()> on_updated_cb, private_constructor_tag tag);
~AudioBackend();
void changeVolume(uint16_t volume, uint16_t min_volume = 0, uint16_t max_volume = 100);
void changeVolume(ChangeType change_type, double step = 1, uint16_t max_volume = 100);
void setIgnoredSinks(const Json::Value& config);
std::string getSinkPortName() const { return port_name_; }
std::string getFormFactor() const { return form_factor_; }
std::string getSinkDesc() const { return desc_; }
std::string getMonitor() const { return monitor_; }
std::string getCurrentSinkName() const { return current_sink_name_; }
bool getCurrentSinkRunning() const { return current_sink_running_; }
uint16_t getSinkVolume() const { return volume_; }
bool getSinkMuted() const { return muted_; }
uint16_t getSourceVolume() const { return source_volume_; }
bool getSourceMuted() const { return source_muted_; }
std::string getSourcePortName() const { return source_port_name_; }
std::string getSourceDesc() const { return source_desc_; }
std::string getDefaultSourceName() const { return default_source_name_; }
void toggleSinkMute();
void toggleSinkMute(bool);
void toggleSourceMute();
void toggleSourceMute(bool);
bool isBluetooth();
};
} // namespace waybar::util

View File

@ -0,0 +1,10 @@
#pragma once
#include "AModule.hpp"
namespace waybar::util {
const static auto NOOP = []() {};
enum class ChangeType : char { Increase, Decrease };
} // namespace waybar::util

Some files were not shown because too many files have changed in this diff Show More