As the ChannelListener feature was implemented via a Singleton class,
there was only ever a single, global instance keeping track of listeners.
If however there were multiple VServers running from within a single
Mumble server instance, all of them would use the same ChannelListener
instance. That allowed for user-IDs to collide across different VServers
when it came to listener-management.
Thus listeners could appear/disappear seemingly at random whenever a
user on a different VServer (with the same session ID on that server)
changed their listeners.
Fixes#4366
Currently translated at 98.7% (2019 of 2045 strings)
TRANSLATION: Update German translation
Currently translated at 98.7% (2019 of 2045 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Robert Adam <dev@robert-adam.de>
Co-authored-by: Thomas Umbach <thum@vikings.net>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/de/
Translation: Mumble/Mumble Client
As the ChannelListener feature was implemented via a Singleton class,
there was only ever a single, global instance keeping track of listeners.
If however there were multiple VServers running from within a single
Mumble server instance, all of them would use the same ChannelListener
instance. That allowed for user-IDs to collide across different VServers
when it came to listener-management.
Thus listeners could appear/disappear seemingly at random whenever a
user on a different VServer (with the same session ID on that server)
changed their listeners.
Fixes#4366
If one was to send a link like
"http://localhost/?var1=foo&var2=bar&var3=baz" either as-is or as a
markdown-style link ("name"), the "&" character in the link
would get escaped as "&".
For displaying purposes this is fine, as the Mumble client re-interprets
these escape sequences before rendering them to the user. The same
escaping was done in the surrounding HTML element's href
specification. This lead to invalid URLs being used as link targets.
Therefore this commit makes sure that the href content of an HTML
element will be un-escaped before inserting into the HTML structure
(thus preserving the original characters in the href specification).
Fixes#4999
If one was to send a link like
"http://localhost/?var1=foo&var2=bar&var3=baz" either as-is or as a
markdown-style link ("[name](<url>)"), the "&" character in the link
would get escaped as "&".
For displaying purposes this is fine, as the Mumble client re-interprets
these escape sequences before rendering them to the user. The same
escaping was done in the surrounding <a> HTML element's href
specification. This lead to invalid URLs being used as link targets.
Therefore this commit makes sure that the href content of an <a> HTML
element will be un-escaped before inserting into the HTML structure
(thus preserving the original characters in the href specification).
Fixes#4999
These Strings were not translated because as global static variables
they were created before the necessary translators are installed.
This commit fixes this by making sure the containing EchoCancelOption
objects are created lazily (at the time they are needed for the first
time), thus causing a delaying instantiation.
Fixes#4993
The following things were changed/adapted:
- Ordering of sliders to be grouped more logically
- Tooltips
- Added SpinBox to display and manually edit values (also partly beyond
the slider's range)
- Increased slider range for maximum distance to 200m (instead 100m)
Fixes#4990
Currently translated at 59.2% (1210 of 2043 strings)
TRANSLATION: Update Korean translation
Currently translated at 57.9% (1184 of 2043 strings)
TRANSLATION: Update Korean translation
Currently translated at 55.8% (1142 of 2043 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 린마루 <gkdwns0103@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/ko/
Translation: Mumble/Mumble Client
Currently translated at 99.8% (2039 of 2043 strings)
Co-authored-by: Game one <denis.melnyk.2006@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/ru/
Translation: Mumble/Mumble Client
Tested with PipeWire 0.3.26.
The implementation is quite basic and simple, yet it surpasses the JACK one in terms of features.
For example, support for the most common surround mappings is provided.
As opposed to JACK, an option to disable the auto endpoint connection is not provided.
However, it's something that can be easily implemented if needed.
Support for echo cancellation will definitely be added in future.
These Strings were not translated because as global static variables
they were created before the necessary translators are installed.
This commit fixes this by making sure the containing EchoCancelOption
objects are created lazily (at the time they are needed for the first
time), thus causing a delaying instantiation.
Fixes#4993
Co-Authored-By: Jan Klass <kissaki@posteo.de>
In the old qmake build system we included the functionality to bundle Qt
translations into our executable (potentially overwriting some of them).
See f5bf5f17f3/src/mumble/mumble.pro (L692-L728)
This functionality was not ported over to cmake which could lead to Qt
standard texts (e.g. "Ok") not being translated.
This commit ports the old functionality to the new cmake build system.
Note however that this new functionality is only enabled by default, if
a static build of Mumble is created. In other instances the option can
be specified manually.
Fixes#4359
When scaling the font size system-wide (e.g. set to 150%), the TalkingUI
might not adapt to this properly.
This started happening with the introduction of the
MultiStyleWidgetWrapper class (commit
ff040fb). As it turns out the
conversion from pixel to point size performed in its setFontSize did not
work properly, causing an incorrect font size to be used. And as the
font size also determines the icons size, these were not scaled properly
either.
The fix is to simply skip on the pixel to point conversion entirely and
instead use the appropriate unit when setting the respective StyleSheet
property. That way Qt can figure the conversion out as needed.
When scaling the font size system-wide (e.g. set to 150%), the TalkingUI
might not adapt to this properly.
This started happening with the introduction of the
MultiStyleWidgetWrapper class (commit
ff040fb23c). As it turns out the
conversion from pixel to point size performed in its setFontSize did not
work properly, causing an incorrect font size to be used. And as the
font size also determines the icons size, these were not scaled properly
either.
The fix is to simply skip on the pixel to point conversion entirely and
instead use the appropriate unit when setting the respective StyleSheet
property. That way Qt can figure the conversion out as needed.
Currently translated at 98.7% (2018 of 2043 strings)
TRANSLATION: Update German translation
Currently translated at 98.4% (2012 of 2043 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Robert Adam <dev@robert-adam.de>
Co-authored-by: Thomas Umbach <thum@vikings.net>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/de/
Translation: Mumble/Mumble Client
Previously we re-generated our translation files when building, causing
them to change in the source tree.
With this new approach, we assume that the .ts files are already
up-to-date and thus we only compile them to .qm files that are stored in
the build directory. That way the source dir remains uncluttered.
This PR introduces a fully featured search dialog.
Note that selections in the search dialog are synchronized with the main
UI and thus "whisper to selection" works by selecting something in the
search dialog as well.
There are also default actions that are executed when a search result is
activated (double-clicked or pressing enter on it). What that action is
exactly, can be configured in the settings.
Furthermore the context menu works as expected when invoked on entries
in the search result list.
In order to disambiguate the results, the full channel hierarchy to the
search result's parent channel is shown below each result.
The search dialog can be toggled via Ctrl+F when Mumble has focus or by
using the new entry in the toolbar. Additionally there is a new global
shortcut that can be configured for this purpose. Note however that on
Windows the SearchDialog won't obtain focus when toggled in a situation
when Mumble does not have focus already.
This commit introduces a fully featured search dialog.
Note that selections in the search dialog are synchronized with the main
UI and thus "whisper to selection" works by selecting something in the
search dialog as well.
There are also default actions that are executed when a search result is
activated (double-clicked or pressing enter on it). What that action is
exactly, can be configured in the settings.
Furthermore the context menu works as expected when invoked on entries
in the search result list.
In order to disambiguate the results, the full channel hierarchy to the
search result's parent channel is shown below each result.
The search dialog can be toggled via Ctrl+F when Mumble has focus or by
using the new entry in the toolbar. Additionally there is a new global
shortcut that can be configured for this purpose. Note however that on
Windows the search dialog won't obtain focus when toggled in a situation
when Mumble does not have focus already.
This pull request fixes the following issues:
The revamped raw inputs are not saving / loading shortcuts for the Windows client.
Keyboard shortcuts that are outside of the normal range show up as "Unknown"
Fix the shortcuts events not firing for input buttons when the structs were compared using the default memcmp.
The shortcut for toggling channel filters was Ctrl+F. While this makes
sense semantically, this specific shortcut is associated with starting a
search in 99% of all applications out there. Thus using it for something
else does not make for a very smooth user experience.
The new shortcut for filtering is thus set to be Alt+F instead.
Before the channel tree (UserView) in the main UI had a "feature" called
keyboard search. If the channel tree had focus and the user started
typing on their keyboard, Mumble would search for an entry in the tree
(either channel or user) that matches the invisibly typed search String.
This is however very impractical for searching as it is unclear if and
when this will expand collapsed entries or how subsequent searches work.
It is not even clear when the current search has ended and thus typing
another letter will start a new one.
And for users who don't expect such an invisible feature, this is a bad
experience as their channel tree selection jumps around wildly if they
accidentally push a key.
The search functionality will be provided by a more robust
implementation in a following commit.
Instead of implicitly assuming that the root channel has ID 0, there is
now an explicit constant (of the same value) that is used in all places
instead of literal "0" when referring to the root channel's ID.
Fixes InputHid buttons not firing events. For consistency and to prevent hard to track down memcmp issues the other Input structs also have comparators.
This was partially solved by the memory initializations found earlier via lnt-uninitialized-local.
QVariant uses the comparators but defaults to memcmp when they don't exist. memcmp works until you have non-primitives like std::string.
QMetaType::registerComparators requires both the == and < operators for each metatype.
GlobalShortcutEngine::handleButton() has calls to qlButtonList.indexOf() which need comparisons to work properly.
when GetKeyNameText() fails
For keys like F13 - F24 where GetKeyNameText() doesn't have a label.
Use similar technique to the InputMouse to show something other than "Unknown"
lnt-uninitialized-local errors were preventing InputKeyboard shortcuts from being detected/fired after relaunch.
When initially setup they would work until the client was relaunched.
Expression: invalid comparator
Thrown when opening the Settings window.
This started happening when I had multiple shortcuts defined and running in debug mode.
std::sort requires strict weak ordering. This fixes the compare to provide it.