aboutsummaryrefslogtreecommitdiff
path: root/swaybar/tray
AgeCommit message (Collapse)AuthorLines
2025-01-07Use has_prefix() instead of strncmp() throughoutSimon Ser-5/+6
This is safer than hardcoded string lengths.
2024-11-10swaybar: Emit property changes for SNI watcherJoan Bruguera Micó-0/+12
Emit property change signals for the IsStatusNotifierHostRegistered and RegisteredStatusNotifierItems properties in StatusNotifierWatcher, so code relying on the PropertiesChanged signal, instead of signals such as StatusNotifierHostRegistered, can work properly. A library that is affected by this is the libappindicator-gtk3* library and it can cause tray icons to be missing after starting swaybar due to a race condition, as follows: * An application using libappindicator-gtk3 starts, e.g. nm-applet. * Some time later, swaybar starts. * swaybar creates the StatusNotifierWatcher. * libappindicator-gtk3 observes the new watcher, but it sees that IsStatusNotifierHostRegistered=false, so it falls back to the Freedesktop System tray protocol. * swaybar creates the StatusNotifierHost. At this point, libappindicator-gtk3 should "un-fallback" back to SNI. However, since swaybar does not emit the PropertiesChange signal on IsStatusNotifierHostRegistered, libappindicator-gtk3 doesn't get notified, and stays in fallback state forever. * As a result, nm-applet will not show in the swaybar tray. This race can be made reliable by inserting a 1-second long sleep here: https://github.com/swaywm/sway/blob/03483ff3707a358d935e451d39748e58c205ce8a/swaybar/tray/tray.c#L57 (*) Note that the libappindicator-gtk3 library has been mostly replaced by libayatana-appindicator, which is not affected by this. The affected version is still used by Arch Linux, source code at: https://bazaar.launchpad.net/~indicator-applet-developers/libappindicator/trunk/files/298
2024-09-28swaybar: Fix 100% cpu usage if dbus dies.Furkan Sahin-2/+10
Currently, swaybar does not gracefully die if it detects that the dbus connection was lost. Although it's not recommended to restart dbus without restarting the compositor, it can very easily happen. In the case it does, compositor's tray should not consume 100% cpu until it has to be force killed. apply suggestions just setting the bar to not running will call teardown and unref the dbus.
2024-02-23Define _POSIX_C_SOURCE globallySimon Ser-4/+0
See discussion in https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4555
2023-11-23common: move load_image to swaybarManuel Stoeckl-1/+1
swaynag, swaymsg, and sway do not use this function and are unlikely to in the future.
2023-11-23common: rename load_background_image to load_imageManuel Stoeckl-1/+1
2023-06-23swaybar: remove the argument of StatusNotifierHostRegisteredHodong-1/+1
According to https://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/StatusNotifierWatcher/ there is no argument for the StatusNotifierHostRegistered signal.
2023-04-14Use format_str() throughoutSimon Ser-33/+12
2022-11-26swaybar: Make hotspots block bar release bindingsJoan Bruguera-1/+6
The previous commit prioritized hotspots before bar bindings for press events, which matches i3's behaviour. However, since hotspots don't need to do any processing on release events, those were not handled, and simply fell through to `bindsym --release` bar bindings (if any). This is counter-intuitive, and doesn't match i3's behaviour. Instead in case a hotspot handles the press event, it should also handle the release event, doing nothing, but blocking the event from triggering a --release bar binding. E.g., in Sway, without this commit, this config. shows a text on tray clicks: bar { # ... bindsym --release button1 exec swaynag -m I_got_the_release_event. } But the same configuration in i3 (with i3-nagbar) doesn't show the text. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-01-19tray: do not render passive itemsTobias Bengfort-0/+5
https://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/StatusNotifierItem/#org.freedesktop.statusnotifieritem.status
2022-01-07swaybar: fix tray item icon scaling, positioningNathan Schulte-7/+19
2022-01-07swaybar: fix tray_padding vs min-height re: scaleNathan Schulte-2/+2
Co-authored-by: xdavidwu <xdavidwuph@gmail.com>
2021-05-10cairo: Replace <cairo/cairo.h> by <cairo.h>Issam E. Maghni-1/+1
For full context, read https://gitlab.freedesktop.org/cairo/cairo/-/issues/479 TL;DR, cairo’s pc file adds `/cairo` to CFLAGS. So namespace cairo shouldn’t be used.
2021-03-17swaybar: silence missing IconThemePath messagePi-Yueh Chuang-2/+7
IconThemePath is not a standard property in XDG's StatusNotifierItem specification, so missing this property should not be logged as an error. This patch changes the log level to SWAY_DEBUG when swaybar queries the value of IconThemePath so that swaybar won't log the returned message as an error if IconThemePath does not exist. Closes: https://github.com/swaywm/sway/issues/6092
2020-03-30tray: track SNI callbacksIan Fan-28/+37
This removes any pending messages once the item is destroyed. Furthermore, this installs SNI event calbacks asynchronously in order to prevent sd-bus from bypassing pending messages.
2020-03-30tray: tidy codeIan Fan-20/+10
This includes some refactoring and fixing a small memory leak.
2020-03-30tray: allow themes to inherit from multiple themesIan Fan-4/+9
2020-03-30tray: better errors when parsing index.themeIan Fan-60/+90
2020-02-10swaybar: fix i3bar relative coordinates when scaling is usedHristo Venev-1/+1
24e8ba048aef4751c6fa1d5982ee634f921e6cf6 did not take scaling into account. The hotspot size used pixel coordinates, the absolute coordinates were logical, and the relative coordinates were completely wrong. This commit makes all coordinates use logical values. If `"float_event_coords":true` is sent in the handshake message, coordinates are sent as floating-point values. The "scale" field is an integer containing the scale value.
2020-02-10Avoid calling strcmp on nullptrTill Hofmann-1/+4
The function group_handler may get a nullptr as `new_group`. If that's the case, return true, as if `new_group` was the empty string. Also make the conversion to bool explicit when calling `strcmp`.
2019-11-23Amend typosJason-1/+1
2019-10-23swaybar: fix typo in the loop over pixmapsKonstantin Pospelov-1/+1
Fixes #4665.
2019-10-21swaybar: do not retry search for tray iconsKonstantin Pospelov-52/+61
In case a tray icon cannot be found or does not have a desirable size, swaybar retries the search again and again, which increases load on disk and CPU. This commit solves it by storing target_size for each icon, so that swaybar does not search for an icon of some size if it already tried to. Fixes #3789.
2019-09-04Add icon_theme_path to find_icon() search if setBen Brown-1/+7
find_icon() will search in theme appropriate subdirs.
2019-08-12Fix memory leaksAntonin Décimo-0/+1
2019-04-20Validate icon_struct in read_theme_fileMaxime “pep” Buquet-2/+6
The read_theme_file function used to return an invalid icon_struct in some cases, for example when an empty index.theme file was read. This makes sure the struct we're returning is always valid as per the Icon Theme specification. Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2019-03-30Fix a crash in swaybar when an icon dir is not readableAlex Maese-0/+3
2019-03-13swaybar: fix loading of malformed icon themeStephan Hilb-0/+4
If the icon index.theme contained a key-value pair without a preceding group header, entry_handler() would be called with a zero pointer and lead to a segfault. Set the error flag and break on such malformed files.
2019-03-11Fix size_t temporary underflow in log_loaded_themesemersion-3/+3
`len` will underflow but will overflow right after, so it's not as bad as it may appear. Still better not to under/overflow at all. Fixes https://github.com/swaywm/sway/issues/3862
2019-03-11stringop.c: remove unused functionsIan Fan-9/+38
The only use of `join_list` in swaybar/tray/icon.c has been rewritten.
2019-02-28tray: fix pixmap colorsIan Fan-1/+7
by converting from network byte order to host byte order
2019-02-16tray: fix memory leaksIan Fan-3/+7
2019-02-16tray: when a service is lost, remove all matching itemsIan Fan-13/+14
Before, only the first matching item would be removed, which could leave stale items.
2019-02-15tray: use correct parameter to set bus slot to floatingIan Fan-3/+3
Counter-intuitively, `sd_bus_slot_set_floating` expects 0 to set it to floating.
2019-02-01Fix #3445: swaybar tray inerited thems not processedStefan Schick-1/+1
2019-01-23Merge pull request #3500 from progandy/validate_pixmapsDrew DeVault-7/+18
swaybar: fix crash with some tray icon pixmaps
2019-01-23Fix tray icon updatesLukas Lihotzki-0/+3
Apparently, IconThemePath needs to be reread on NewIcon signal. This fixes tray icon updates in electron apps with libappindicator-gtk3.
2019-01-23swaybar: fix crash with some tray icon pixmapsprogandy-7/+18
Discard pixmaps for icons where width and height are 0 or not equal. Fixes #3487
2019-01-22Fix dead stores found by scan-buildM Stoeckl-1/+1
In addition to removing unused code, two minor problems are fixed: (1) `resize set` and `resize adjust` did not error when given too many arguments. (2) `orientation` was incorrectly overridden to be 'U' for scroll events in the swaybar tray `handle_click` function.
2019-01-21swaybar: fix setting floating watcher slotsIan Fan-2/+2
2019-01-21Replace wlr_log with sway_logM Stoeckl-54/+54
This commit mostly duplicates the wlr_log functions, although with a sway_* prefix. (This is very similar to PR #2009.) However, the logging function no longer needs to be replaceable, so sway_log_init's second argument is used to set the exit callback for sway_abort. wlr_log_init is still invoked in sway/main.c This commit makes it easier to remove the wlroots dependency for the helper programs swaymsg, swaybg, swaybar, and swaynag.
2019-01-19Fix memory leaks in swaybarM Stoeckl-1/+8
2019-01-16bar_cmd_tray_bind: Use mouse button helpersBrian Ashworth-4/+11
This modifies `bar_cmd_tray_bindsym` to use `get_mouse_bindsym` for parsing mouse buttons. This also introduces `bar_cmd_tray_bindcode`, which will use `get_mouse_bindcode` for parsing mouse buttons. Like with sway bindings, the two commands are encapsulated in a single file to maximize shared code. This also modifies tray bindings to work off of events codes rather than x11 buttons, which allows for any mouse buttons to be used. For `get_bar_config`, `event_code` has been added to the `tray_bindings` section and will include to event code for the button. If the event code can be mapped to a x11 button, `input_code` will still be the x11 button number. Otherwise, `input_code` will be `0`.
2019-01-13swaybar: allow identifiers for output and trayBrian Ashworth-2/+6
This allows `bar output` and `bar tray_output` to specify an output identifier. Output names should still work as well. This parses the output identifier from the xdg_output description, which wlroots currently sets to `make model serial (name)`. Since this could change in the future, all identifier comparisons are guarded by NULL-checks in case the description cannot be parsed to an identifier.
2019-01-08swaybar: improve tray loggingIan Fan-30/+31
2019-01-08swaybar: handle SNI signals betterIan Fan-33/+61
This fixes a crash caused by callbacks not matching the right sender, and frees old values later, before they are re-assigned.
2019-01-08swaybar: free the right item during tray destructionIan Fan-3/+3
Also added a comment to make more obvious the reason for comparing sni->status[0] == 'N'
2018-12-31swaybar: use KDE's SNI IconThemePath propertyIan Fan-0/+5
2018-12-31swaybar: handle new and lost StatusNotifierWatcherIan Fan-1/+60
2018-12-31swaybar: draw a sad face if SNI has no iconIan Fan-9/+25