- If the theme mode is set to auto, the system theme will be read when the application starts
- When the theme mode is set to auto, changes to the system theme will be applied to the window immediately
This PR uses [winget-releaser](https://github.com/vedantmgoyal9/winget-releaser) (which uses Komac). It requires a `Classic Github Personal Access Token` with `public_repo` scope is created, following [this link](https://github.com/settings/tokens/new), then the Token can be added to the repo as a secret named `WINGET_ACC_TOKEN`. See below, that user also will have to fork the winget-pkgs repository.
> Notes:
> You will need to create a *classic* Personal Access Token (PAT) with `public_repo` scope. New fine-grained PATs aren't supported by the action. Review #172 for information.
> Fork [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) under the same account/organization as the project's repository. If you are forking winget-pkgs on a different account (e.g. bot/personal account), you can use the fork-user input to specify the username of the account where the fork is present.
This is just the result of running "cargo update".
Most notably, this updates tauri-plugin-global-shortcut from 2.2.0 to
2.3.0, in order to fix a startup crash on pure Wayland sessions.
This crash was happening because the underlying global-hotkey dependency
used by tauri-plugin-global-shortcut, was dereferencing a null pointer
in version 0.6:
https://github.com/tauri-apps/global-hotkey/blob/global-hotkey-v0.6.4/src/platform_impl/x11/mod.rs#L191-L192
That XOpenDisplay() call can fail for many reasons, one of them being
the non-existence of an X server running (e.g. when we're on a pure
Wayland session).
For reference, the gdb stack trace of the crash looks like this:
Thread 11 (Thread 0x7fffe1b8b6c0 (LWP 60) "LRCGET"):
#0 0x00007fffed3ca524 in XDefaultRootWindow () at /usr/lib/x86_64-linux-gnu/libX11.so.6
#1 0x000055555617bd03 in global_hotkey::platform_impl::platform::events_processor ()
#2 0x000055555618c066 in std::sys::backtrace::__rust_begin_short_backtrace ()
#3 0x0000555556189d3a in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#4 0x00005555567caf8f in std::sys::pal::unix::thread::Thread::new::thread_start ()
#5 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#6 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 10 (Thread 0x7fffe2b846c0 (LWP 59) "[pango] fontcon"):
#0 0x00007fffef11bdcd in syscall () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fffef4c0a4b in g_cond_wait () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007fffef452dac in g_async_queue_pop_intern_unlocked () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007fffef45329c in g_async_queue_pop () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007fffecffcac9 in fc_thread_func () at /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
#5 0x00007fffef4c1209 in g_thread_proxy () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#6 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#7 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 9 (Thread 0x7fffe35fd6c0 (LWP 58) "gdbus"):
#0 0x00007fffef0a2c02 in __syscall_cancel_arch () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fffef096d3c in __internal_syscall_cancel () at /usr/lib/x86_64-linux-gnu/libc.so.6
#2 0x00007fffef096d84 in __syscall_cancel () at /usr/lib/x86_64-linux-gnu/libc.so.6
#3 0x00007fffef111196 in ppoll () at /usr/lib/x86_64-linux-gnu/libc.so.6
#4 0x00007fffef48dd21 in g_main_context_iterate_unlocked.isra () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007fffef48e747 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#6 0x00007ffff1540332 in gdbus_shared_thread_func () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#7 0x00007fffef4c1209 in g_thread_proxy () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#8 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#9 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 8 (Thread 0x7fffe3dfe6c0 (LWP 57) "gmain"):
#0 0x00007fffef0a2c02 in __syscall_cancel_arch () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fffef096d3c in __internal_syscall_cancel () at /usr/lib/x86_64-linux-gnu/libc.so.6
#2 0x00007fffef096d84 in __syscall_cancel () at /usr/lib/x86_64-linux-gnu/libc.so.6
#3 0x00007fffef111196 in ppoll () at /usr/lib/x86_64-linux-gnu/libc.so.6
#4 0x00007fffef48dd21 in g_main_context_iterate_unlocked.isra () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007fffef48e453 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#6 0x00007fffef48e4a1 in glib_worker_main () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#7 0x00007fffef4c1209 in g_thread_proxy () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#8 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#9 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 7 (Thread 0x7fffe89096c0 (LWP 56) "pool-spawner"):
#0 0x00007fffef11bdcd in syscall () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fffef4c0a4b in g_cond_wait () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007fffef452dac in g_async_queue_pop_intern_unlocked () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007fffef4c14e4 in g_thread_pool_spawn_thread () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007fffef4c1209 in g_thread_proxy () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#6 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 5 (Thread 0x7fffe8b0a6c0 (LWP 51) "tokio-runtime-w"):
#0 0x00007fffef11bdcd in syscall () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x0000555556568509 in parking_lot::condvar::Condvar::wait_until_internal ()
#2 0x0000555556517efe in tokio::runtime::scheduler::multi_thread::park::Parker::park ()
#3 0x000055555650d7f5 in tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout ()
#4 0x000055555650cee4 in tokio::runtime::scheduler::multi_thread::worker::Context::run ()
#5 0x0000555556516378 in tokio::runtime::context::scoped::Scoped<T>::set ()
#6 0x000055555651452b in tokio::runtime::context::runtime::enter_runtime ()
#7 0x000055555650c46b in tokio::runtime::scheduler::multi_thread::worker::run ()
#8 0x00005555565014cd in <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll ()
#9 0x0000555556504bf7 in tokio::runtime::task::core::Core<T,S>::poll ()
#10 0x00005555564f9d01 in tokio::runtime::task::harness::Harness<T,S>::poll ()
#11 0x000055555651f709 in tokio::runtime::blocking::pool::Inner::run ()
#12 0x00005555564fb597 in std::sys::backtrace::__rust_begin_short_backtrace ()
#13 0x00005555565028c2 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#14 0x00005555567caf8f in std::sys::pal::unix::thread::Thread::new::thread_start ()
#15 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#16 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 4 (Thread 0x7fffe8d0b6c0 (LWP 50) "tokio-runtime-w"):
#0 0x00007fffef11bdcd in syscall () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x0000555556568509 in parking_lot::condvar::Condvar::wait_until_internal ()
#2 0x0000555556517efe in tokio::runtime::scheduler::multi_thread::park::Parker::park ()
#3 0x000055555650d7f5 in tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout ()
#4 0x000055555650cee4 in tokio::runtime::scheduler::multi_thread::worker::Context::run ()
#5 0x0000555556516378 in tokio::runtime::context::scoped::Scoped<T>::set ()
#6 0x000055555651452b in tokio::runtime::context::runtime::enter_runtime ()
#7 0x000055555650c46b in tokio::runtime::scheduler::multi_thread::worker::run ()
#8 0x00005555565014cd in <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll ()
#9 0x0000555556504bf7 in tokio::runtime::task::core::Core<T,S>::poll ()
#10 0x00005555564f9d01 in tokio::runtime::task::harness::Harness<T,S>::poll ()
#11 0x000055555651f709 in tokio::runtime::blocking::pool::Inner::run ()
#12 0x00005555564fb597 in std::sys::backtrace::__rust_begin_short_backtrace ()
#13 0x00005555565028c2 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#14 0x00005555567caf8f in std::sys::pal::unix::thread::Thread::new::thread_start ()
#15 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#16 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 3 (Thread 0x7fffe3fff6c0 (LWP 49) "tokio-runtime-w"):
#0 0x00007fffef11bdcd in syscall () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x0000555556568509 in parking_lot::condvar::Condvar::wait_until_internal ()
#2 0x0000555556517efe in tokio::runtime::scheduler::multi_thread::park::Parker::park ()
#3 0x000055555650d7f5 in tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout ()
#4 0x000055555650cee4 in tokio::runtime::scheduler::multi_thread::worker::Context::run ()
#5 0x0000555556516378 in tokio::runtime::context::scoped::Scoped<T>::set ()
#6 0x000055555651452b in tokio::runtime::context::runtime::enter_runtime ()
#7 0x000055555650c46b in tokio::runtime::scheduler::multi_thread::worker::run ()
#8 0x00005555565014cd in <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll ()
#9 0x0000555556504bf7 in tokio::runtime::task::core::Core<T,S>::poll ()
#10 0x00005555564f9d01 in tokio::runtime::task::harness::Harness<T,S>::poll ()
#11 0x000055555651f709 in tokio::runtime::blocking::pool::Inner::run ()
#12 0x00005555564fb597 in std::sys::backtrace::__rust_begin_short_backtrace ()
#13 0x00005555565028c2 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#14 0x00005555567caf8f in std::sys::pal::unix::thread::Thread::new::thread_start ()
#15 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#16 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 2 (Thread 0x7fffe8f0c6c0 (LWP 48) "tokio-runtime-w"):
#0 0x00007fffef0a2c02 in __syscall_cancel_arch () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fffef096d3c in __internal_syscall_cancel () at /usr/lib/x86_64-linux-gnu/libc.so.6
#2 0x00007fffef096d84 in __syscall_cancel () at /usr/lib/x86_64-linux-gnu/libc.so.6
#3 0x00007fffef11e315 in epoll_wait () at /usr/lib/x86_64-linux-gnu/libc.so.6
#4 0x00005555565229da in mio::poll::Poll::poll ()
#5 0x00005555564feab9 in tokio::runtime::io::driver::Driver::turn ()
#6 0x0000555556510935 in tokio::runtime::time::Driver::park_internal ()
#7 0x0000555556517e6e in tokio::runtime::scheduler::multi_thread::park::Parker::park ()
#8 0x000055555650d7f5 in tokio::runtime::scheduler::multi_thread::worker::Context::park_timeout ()
#9 0x000055555650cee4 in tokio::runtime::scheduler::multi_thread::worker::Context::run ()
#10 0x0000555556516378 in tokio::runtime::context::scoped::Scoped<T>::set ()
#11 0x000055555651452b in tokio::runtime::context::runtime::enter_runtime ()
#12 0x000055555650c46b in tokio::runtime::scheduler::multi_thread::worker::run ()
#13 0x00005555565014cd in <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll ()
#14 0x0000555556504bf7 in tokio::runtime::task::core::Core<T,S>::poll ()
#15 0x00005555564f9d01 in tokio::runtime::task::harness::Harness<T,S>::poll ()
#16 0x000055555651f709 in tokio::runtime::blocking::pool::Inner::run ()
#17 0x00005555564fb597 in std::sys::backtrace::__rust_begin_short_backtrace ()
#18 0x00005555565028c2 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#19 0x00005555567caf8f in std::sys::pal::unix::thread::Thread::new::thread_start ()
#20 0x00007fffef09a56a in start_thread () at /usr/lib/x86_64-linux-gnu/libc.so.6
#21 0x00007fffef11de54 in clone () at /usr/lib/x86_64-linux-gnu/libc.so.6
Thread 1 (Thread 0x7fffe8f134c0 (LWP 45) "LRCGET"):
#0 0x00007fffeef0e514 in FcStrCmpIgnoreCase () at /usr/lib/x86_64-linux-gnu/libfontconfig.so.1
#1 0x00007fffeef1cd87 in FcValueEqual () at /usr/lib/x86_64-linux-gnu/libfontconfig.so.1
#2 0x00007fffeef0d8dc in FcFontSetList () at /usr/lib/x86_64-linux-gnu/libfontconfig.so.1
#3 0x00007fffecffd0d7 in ensure_families () at /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
#4 0x00007fffecffd551 in pango_fc_font_map_get_family () at /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
#5 0x00007fffecffd89a in pango_fc_font_map_get_face () at /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
#6 0x00007fffecfff2e4 in pango_fc_fontset_get_font_at () at /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
#7 0x00007fffecfff69d in pango_fc_fontset_foreach () at /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
#8 0x00007fffee470d40 in pango_context_get_metrics () at /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0
#9 0x00007ffff1d8e1cb in gtk_label_measure () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#10 0x00007ffff1cc1bc6 in gtk_css_custom_gadget_get_preferred_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#11 0x00007ffff1cc697c in gtk_css_gadget_get_preferred_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#12 0x00007ffff1d892cb in gtk_label_get_preferred_height_and_baseline_for_width () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#13 0x00007ffff1e4b546 in gtk_widget_query_size_for_orientation () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#14 0x00007ffff1e4bc3c in gtk_widget_get_preferred_height_and_baseline_for_width () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#15 0x00007ffff1c69503 in gtk_box_get_content_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#16 0x00007ffff1cc1bc6 in gtk_css_custom_gadget_get_preferred_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#17 0x00007ffff1cc697c in gtk_css_gadget_get_preferred_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#18 0x00007ffff1c6877b in gtk_box_get_preferred_height_and_baseline_for_width () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#19 0x00007ffff1e4b546 in gtk_widget_query_size_for_orientation () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#20 0x00007ffff1e4ad29 in gtk_widget_get_preferred_height () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#21 0x00007ffff1d62a68 in gtk_header_bar_get_content_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#22 0x00007ffff1cc1bc6 in gtk_css_custom_gadget_get_preferred_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#23 0x00007ffff1cc697c in gtk_css_gadget_get_preferred_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#24 0x00007ffff1d61d85 in gtk_header_bar_get_preferred_height () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#25 0x00007ffff1e4b42c in gtk_widget_query_size_for_orientation () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#26 0x00007ffff1e4bc3c in gtk_widget_get_preferred_height_and_baseline_for_width () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#27 0x00007ffff1e4b546 in gtk_widget_query_size_for_orientation () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#28 0x00007ffff1e4ad29 in gtk_widget_get_preferred_height () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#29 0x00007ffff1f1ed45 in gtk_window_update_csd_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#30 0x00007ffff1f274a4 in gtk_window_get_size () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#31 0x00007ffff1f2773f in gtk_window_get_position () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#32 0x00005555564b4f3e in tao::platform_impl::platform::window::Window::setup_signals ()
#33 0x0000555555cc3c21 in tao::platform_impl::platform::window::Window::new ()
#34 0x0000555555e13639 in tauri_runtime_wry::create_window ()
#35 0x0000555555e2d811 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#36 0x0000555555e1e24d in tauri_runtime_wry::handle_user_message ()
#37 0x0000555555e1d655 in tauri_runtime_wry::send_user_message ()
#38 0x0000555555e1b147 in tauri_runtime_wry::Context<T>::create_window ()
#39 0x0000555555e5399f in tauri::window::WindowBuilder<R,M>::build_internal ()
#40 0x0000555555e52bd3 in tauri::window::WindowBuilder<R,M>::with_webview ()
#41 0x0000555555dec49c in tauri::app::setup ()
#42 0x0000555555fc0083 in tauri::app::App<R>::run::{{closure}} ()
#43 0x0000555555e1b5f3 in tauri_runtime_wry::handle_event_loop ()
#44 0x0000555555fd17d3 in <tauri_runtime_wry::Wry<T> as tauri_runtime::Runtime<T>>::run::{{closure}} ()
#45 0x0000555555fa0263 in tao::platform_impl::platform::event_loop::EventLoop<T>::run_return ()
#46 0x0000555555e2b22c in tao::platform_impl::platform::event_loop::EventLoop<T>::run ()
#47 0x0000555555e6c19c in <tauri_runtime_wry::Wry<T> as tauri_runtime::Runtime<T>>::run ()
#48 0x0000555555e0bb4a in lrcget::main::{{closure}} ()
#49 0x0000555555df0698 in tokio::runtime::context::runtime::enter_runtime ()
#50 0x0000555555dac439 in lrcget::main ()
#51 0x0000555556039c23 in std::sys::backtrace::__rust_begin_short_backtrace ()
#52 0x00005555560387e9 in std::rt::lang_start::{{closure}} ()
#53 0x00005555567b84d0 in std::rt::lang_start_internal ()
#54 0x0000555555dac5a5 in main ()
This also installs a desktop file in the DEB and RPM packages.
It has hardcoded values on purpose, to make it easier to use it with
packaging formats not supported by Tauri (such as Flatpak).
This desktop file is not installed in the AppImage package, because
Tauri's AppImageConfig doesn't support the "desktopTemplate" option,
like DEB and RPM packages do.
Docs: https://specifications.freedesktop.org/desktop-entry-spec/latest/recognized-keys.html
Unfortunately, Kira 0.10.0 and later no longer have an easy way to
convert from amplitude on the interval `[0, 1]` to `Decibels`.
To maintain existing functionality, create one by inverting the formula
in Kira's `Decibels::as_amplitude()`. Add a test to verify its accuracy.
See section "Simplified volume and playback rate types"
in the Kira 0.10.0 release notes:
https://github.com/tesselode/kira/releases/tag/v0.10.0
The `progress` currently updates every `40ms` which re-computes
`progressPercent`. Vue needs to do a layout each time in order to update
the `ViewSliderDot` inside `Seek`'s `VueSlider`.
To reduce the CPU usage of these updates and make the interface more
responsive, round `progressPercent` to the nearest `0.001`. This will
limit layout updates to about `1000` over the duration of a track. Since
this is approximately the same as the default window width, there isn't
much impact to the smoothness of the seek slider while playing a track.
If the user resizes the window to be wider, the slider will scroll slightly
less smoothly than before. However, this does not reduce the precision if
the user seeks manually.
The style animations used by the equalizer are surprisingly expensive.
It's a nice visual feedback to show which track is playing, but it
impacts the user experience when editing lyrics. Since the `EditLyrics`
modal covers most of the track list anyways, hide the `Equalizer` when
the modal is open to avoid CPU impact from the "Styles Invalidated".
Editing lyrics caused CPU usage to jump to 100%. In devtools I saw many
"Styles Invalidated" events. By removing portions of the `EditLyrics`
component I found the cause was the `AsyncCodemirror` `style` property.
This issue occurs even if I set `:style="{}"`.
Since the parent `div` already has a style property, I moved the `fontSize`
there and combined with the existing `height` field. Unfortunately I don't
yet understand why this has such a significant performance impact.