Commit Graph

10621 Commits

Author SHA1 Message Date
Robert Adam
fa8734747f CI(github-actions): Upgrade to Node 20 actions
The v3 actions are based on Node 16 and are therefore deprecated.
2024-04-06 17:17:17 +02:00
Hartmnt
d49be051b0
Merge pull request #6357 from mumble-voip/weblate-translation-update
Translations update from Hosted Weblate
2024-04-04 21:35:25 +00:00
Hosted Weblate
37bbc70535 TRANSLATION: Update Dutch translation
Currently translated at 98.2% (2118 of 2156 strings)

Co-authored-by: Gert-dev <Gert-dev@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/nl/
Translation: Mumble/Mumble Client
2024-04-04 21:08:36 +00:00
Hosted Weblate
05252e78ac TRANSLATION: Update Catalan translation
Currently translated at 100.0% (2156 of 2156 strings)

TRANSLATION: Update Catalan translation

Currently translated at 100.0% (2156 of 2156 strings)

TRANSLATION: Update Catalan translation

Currently translated at 100.0% (2156 of 2156 strings)

TRANSLATION: Update Catalan translation

Currently translated at 72.4% (1562 of 2156 strings)

TRANSLATION: Update Catalan translation

Currently translated at 49.8% (1075 of 2156 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Paco Rivière <paco@riviere.cat>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/ca/
Translation: Mumble/Mumble Client
2024-04-04 21:08:28 +00:00
Hosted Weblate
ce99eb8778 TRANSLATION: Update Romanian translation
Currently translated at 12.6% (272 of 2156 strings)

Co-authored-by: Efta <david.eftasiu@yahoo.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/ro/
Translation: Mumble/Mumble Client
2024-04-04 17:51:25 +00:00
Hosted Weblate
5607aff50b TRANSLATION: Update German translation
Currently translated at 99.9% (2155 of 2156 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/de/
Translation: Mumble/Mumble Client
2024-04-04 17:51:25 +00:00
Hartmnt
cb14dd3294
Merge pull request #5984 from Hartmnt/feat_a11y
a11y - A cumulative merge request
2024-04-04 13:46:01 +00:00
Hartmnt
74fe4e61ff TRANSLATION: Update translation files 2024-04-04 13:23:05 +00:00
Hartmnt
1e35791295 DOCS: Add accessibility checklist 2024-04-04 13:23:05 +00:00
Hartmnt
f63b7b42db FEAT(client): Add "Move To Own Channel" action to user context menu
Previously, there was no way to move users from channel to channel
using only the keyboard. For accessibility reasons, that was not ideal.

This commit adds a new action to the user context menu allowing
to move the selected user to your own channel (given enough
permissions).

While this is a decent workaround, the end goal will be to remove
this action and replace it with a dedicated dialog to choose
the channel a user will be moved to.

See #4642
2024-04-04 13:23:05 +00:00
Hartmnt
cd7b8ef19f FIX(ui): Update menu items to comform to design standards
This commit changes the menu items and some buttons to
conform to universal [1] standards. This means that:

* Labels are using title case (e.g. "Listen to channel" -> "Listen To Channel")
* Menu items are generally not including the menu title in
the action label (e.g. "Join Channel" -> "Join")
* ALL menu items have non-overlapping access keys (ALT + <access key>, denoted by underline)
* Ellipses ("...") are only used for actions that require further user input,
simply opening another window is not a reason for using an ellipsis.

[1] State of the art as documented by major vendors in the consumer
software industry. For example:
https://learn.microsoft.com/en-us/windows/win32/uxguide/cmd-menus
https://developer.apple.com/design/human-interface-guidelines/menus
https://develop.kde.org/hig/components/navigation/menubar/
2024-04-04 13:23:05 +00:00
Hartmnt
fffcfaa03a FIX(a11y): Make global shortcut settings more accessible
This commit switches the global shortcut tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.

Fixes #2293
2024-04-04 13:23:05 +00:00
Hartmnt
6a68696609 FIX(a11y): Make search result tree accessible
This commit switches the search result tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.
2024-04-04 13:23:05 +00:00
Hartmnt
2fc95963b5 FIX(a11y): Make message type settings accessible
This commit switches the message notification type tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.

Fixes #2972
2024-04-04 13:23:05 +00:00
Hartmnt
4bc60e9d11 FIX(a11y): Make plugin config accessible
This commit switches the plugin config tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.
2024-04-04 13:23:05 +00:00
Hartmnt
ed988e646a FIX(a11y): Improve inline volume slider accessibility
Previously, the accessibility of the inline slider was very
limited due to the cumbersome and lacking system Qt provides.

This commit gently tricks Qt into behaving like a nice
framework in regards to accessibility.

Fixes #6109
2024-04-04 13:23:05 +00:00
Hartmnt
bc591b79fb FIX(a11y): Update all accessible names and descriptions
A lot of accessible names or descriptions were either missing,
wrong or misleading.

This commit tries to unify and improve all accessible names
and descriptions

Fixes #1337
2024-04-04 13:23:05 +00:00
Hartmnt
8970afeff3 FIX(a11y): Move all accessible name definitions into XML where applicable
In c73f967711 accessibility names and descriptions were added to Mumble
but they were placed in code.

This commit moves all those texts into the respective .ui file where
applicable. If the accessible name is changed or calculated at runtime,
it obviously needs to still be defined in the source code.
2024-04-04 13:23:05 +00:00
Hartmnt
7e049ebc1d FIX(a11y): Fix all buddy labels
Qt offers a feature called buddy labels. With that certain
UI elements can have a label, which represents the UI element
in a textual way. This is very important for screen readers
as they otherwise might not read the correct for any given UI element.
Adding buddies is as simple as using the "Edit buddy" dialog
in the Qt editor.

This commit sweeps through (almost) all UI elements and
applies the correct buddies where applicable.
2024-04-04 13:23:05 +00:00
Hartmnt
ff4a67612b FIX(a11y): Add semantic description to sliders
Some screen readers (notably Orca) are either not capable
of reading semantic values for slides, or Qt prevents them
from doing so.
Sadly, the raw value of a slider e.g. in case of the voice activity
threshsold 0-32767 is pretty much entirely useless for a screen
reader user.

This commit introduces the concept of a semantic slider, which
has a separate accessible text for providing more sensible values
as well as units while still being able to pass the raw slider value
to underlying code.

For screen readers such as Orca, it is a bit hacky as it prepends
the semantic value of the slider to the accessibleName. (Orca does
not read the provided value object) But other than
that, this should work very well for almost all circumstances.
2024-04-04 13:23:05 +00:00
Hartmnt
cd3b921d0a FIX(a11y): Fix tab order in settings sub pages
Previously, the tab order of the elements in the
settings pages were all over the place.

This commit forces a sensible order.
2024-04-04 13:23:05 +00:00
Hartmnt
00584536a6 FIX(a11y): Improve accessibility of configuration dialog buttons
This commit fixes keyboard navigation for the settings
dialog.

Fixes #1337
2024-04-04 13:23:01 +00:00
Hartmnt
ca29279df9 FIX(a11y): Improve accessibility of the edit shortcut dialog
This commit switches the label in the shortcut dialog from
"Add" to "Listening to input" when the button is pressed.
This is supposed to indicate to screen readers that
the dialog is now in a different state, which is actually
listening for new key presses.
2024-04-04 13:05:19 +00:00
Hartmnt
057932afd6 FIX(a11y): Add search dialog action to server context menu
The search dialog is hard to find using the keyboard
and a screen reader.

This commit adds the search dialog action to the
server context menu.
2024-04-04 13:05:19 +00:00
Hartmnt
3b6acda9df FIX(a11y): Make the info in server and user information dialogs accessible
Using the new AccessibleGroupBox make the information inside
the server and user information dialogs accessible for
screen readers.

Fixes #1337
2024-04-04 13:05:19 +00:00
Hartmnt
6685fbf807 FIX(a11y): Improve Accessibility for CertWizard
The certificate wizard shows boxes with certificate info.
These boxes are created by using labels in a QGroupBox.
However, this information is not easily readable using a
screen reader (especially Orca).

This commit introduces the AccessibleGroupBox class
which aims to solve that by dynamically setting the
accessible description using layout information of
the labels inside the box.

Fixes #1337
2024-04-04 13:05:19 +00:00
Hartmnt
3474d63b86 FIX(a11y): Automatically send a focus event to the AudioWizard and CertWizard on page change
Previously, none of the description text of the wizard pages were read
by screen readers. (especially Orca)

To fix this, this commit will focus the dialog itself when
the page changes. This makes the screen reader read the current
page information. It also implements a new function that
finds the next focusable child and sets that in the focus
chain of the wizard as well.
2024-04-04 13:05:19 +00:00
Hartmnt
6a81d82ae3 FIX(a11y): Change focus handling and accessibility in connect dialog
Previously, the TAB focus order and focus handling in
the connection dialog was barely working.

This commit adds a manual TAB order and focus policies to
improve navigation.
2024-04-04 13:05:19 +00:00
Hartmnt
be7c328eae FIX(a11y): Add "filtered" to accessibleName for TreeView, if applicable
Previously, there was no way to know for sure, if the currently selected
user and channel tree was being filtered. (in a screen reader context)

This commit switches the accessibleName depending on the channel filter
state.
2024-04-04 13:05:19 +00:00
Hartmnt
7a9452de67 FIX(a11y): Make users and channels in tree accessible
Previously, screen readers would just read out the string of any selected
item in the tree.

With this new commit, the accessibleText and accessibleDescription are
set such that it is clear whether an item is a channel or a user and
which properties are set for both.

Fixes #2292
2024-04-04 13:05:19 +00:00
Hartmnt
f030543776 FIX(a11y): Automatically focus the stop button in the VoiceRecorderDialog
When clicking the "Start" button in the voice recorder dialog,
some random element receives focus automatically. Some or all
screen readers start reading the disabled options.

This commit automatically focuses the "Stop" button in the voice
recorder dialog when "Start" is clicked.
2024-04-04 13:05:19 +00:00
Hartmnt
9d281c0e04 FIX(a11y): Explicitly set the accessible name of "Next" and "Back" buttons in wizards
For some or all screen readers the "Next >" and "Back <" buttons
in wizards read out the ">" and "<" symbols which is rather annoying.

This commit explicitly sets the accessible name attribute such that
the buttons are read without the symbols.
2024-04-04 13:05:19 +00:00
Hartmnt
caa1490102 FIX(a11y): Add the quality radio button description to the actual radio buttons in AudioWizard
Some or all screen readers are not associating the large description text
for the radio buttons in the quality page of the AudioWizard.

This commit explicitly sets the label content as the accessibleDescription
for the radio buttons.
2024-04-04 13:05:19 +00:00
Hartmnt
ce4178691d FIX(a11y): Introduce accessibility source files 2024-04-04 13:05:19 +00:00
Hartmnt
c996ca94b8 FIX(a11y): Rework autocomplete username. Use TAB to navigate out of chat bar.
The autocomplete function for usernames introduced in 56f5f978c
overwrites the forward-TAB accessibility behaviour. This results in
screen reader users being stuck inside the chat bar having to shift-TAB
or "back TAB" out to reach other user interface modules.

This commit changes the TAB autocomplete behaviour requiring an explicit
"@" in the chatbar for it to trigger. Otherwise it behaves as normal TAB.

See #5811
2024-04-04 13:05:19 +00:00
Hartmnt
e103313253
Merge pull request #6370 from Hartmnt/fix_wasapi_hopefully_haha
FIX(client): Fix incorrect WASAPI sound device handling
2024-04-01 15:27:26 +02:00
Davide Beatrici
d99bd47b28
Merge PR #6371: FIX(client): Correctly subscribe to both sink and source events in PulseAudioSystem 2024-03-31 13:29:31 +02:00
Davide Beatrici
f29e7d3173 FIX(client): Correctly subscribe to both sink and source events in PulseAudioSystem
The second call to pa_context_subscribe() was overriding the first, as a result we were only receiving sink events.

This caused hotplugging to fail with devices that don't have any output ports (e.g. USB microphones).
2024-03-31 01:09:15 +01:00
Hartmnt
663be206d0 FIX(client): Fix incorrect WASAPI sound device handling
In b5a67c0 a refactor took place which removed some compiler warnings.
In WASAPI.cpp a STACKVAR was swapped for a static std::vector,
which led to some unforeseen consequences and total audio input
failure on some systems.

This commit removes the static modifier as it is not needed there
anyway.

Fixes #6356
2024-03-24 12:29:27 +00:00
Hartmnt
23f7650904
Merge pull request #6350 from Hartmnt/fix_ipv4
FIX(client): Use IPv4 HostAddress representation where applicable
2024-02-28 22:01:01 +01:00
Hartmnt
0784673d4b FIX(client): Use IPv4 HostAddress representation where applicable
In 6c565689 the HostAddress was refactored. A check for isV6 when
creating a QHostAddress was removed. However, the QHostAddress
determines the (IPv4 vs IPv6) distinction at construction time.
This resulted in some regressions both visually and functional.

This commit reintroduces the distinction.

Fixes #6349
2024-02-28 20:36:46 +00:00
Hartmnt
6b08960a9a
Merge pull request #6348 from jlallas384/issue-6302
FIX(ui): Preserve other check-box states if All messages was checked
2024-02-27 18:29:21 +01:00
jlallas384
9d580cb4fe FIX(ui): Preserve other check-box states if All messages was checked
In the 'Messages' settings, when disabling a single notification method
for a single message type, all check-boxes will disappear in that
column if 'All messages' was checked to begin with. This is because the
automatic unchecking of the 'All messages' check-box is treated as
if the user actually clicked it. Using a QSignalBlocker before unchecking
the 'All messages' fixes the issue

Fixes #6302
2024-02-27 17:09:01 +08:00
Hartmnt
8833542dc7
Merge pull request #6309 from dexgs/scrollfix2
FIX(client, ui): Fix log scroll position after loading resources
2024-02-18 23:22:43 +01:00
Dexter Gaon-Shatford
e126925401 FIX(client, ui): Fix log scroll position after loading resources
In my previous PR (#6290) addressing this bug, I wrote:
> The issue seems to be caused by the scrollbar sometimes being in an
> inconsistent state immediately after a message is sent, but not any
> longer.
>
> My workaround is to add a call to QApplication::processEvents before
> setting the scrollbar to its maximum position to avoid the inconsistent
> state.

I have found that this change only reduces the likelihood of the
incorrect scroll behaviour from happening: it is still reproducible
after the log grows past a certain size.

In my testing since then, the cause of the "inconsistent state" described
previously seems to be the following: When images (whose contents are
stored in a base64-encoded data URL) are inserted into the log, they are
not loaded immediately. Instead, they are "fetched" (although no actual
network request occurs) by the `loadResource` implementation on
`LogDocument`. The "fetching" is triggered by the call to `setHtml` in
the `Log::validHtml` method. However, the code which sets the scroll bar
to stay at the bottom runs immediately (i.e. not asynchronously) in the
`Log::log` method. There also seems to be a hack that forces a re-layout
by sending a "font changed" event.

The intended behaviour appears to be that when a log entry is added the
log will scroll to the bottom if the entry is a message sent by the user
themselves, OR if the log was already scrolled to the bottom before
the entry was added.

The previous solution in place addressing the asynchronous image loading
was dispatching a `LogDocumentResourceAddedEvent` when the image is
loaded whose handler scrolls the log to the bottom, but this causes 2
problems:

First, the handler for this event always scrolls the log to the bottom
no matter what, which means messages containing images are handled
differently from the intended scrolling behaviour, i.e. messages
containing images ALWAYS cause the log to scroll to the bottom instead
of obeying the rules described above.

Second, it seemingly causes the issue described in #2504. It looks like
there's a race condition when the scroll position is set from the main
thread as well as in an event handler. I couldn't get to the bottom of
the exact source of the issue because there is so much deferred
execution going on, but I am confident that adding resources/forcing
re-layout events from an event handler is to blame.

My current solution is to remove as much of this asynchronous code as
possible. The use of a `QNetworkReply` seems to be leftover from when
Mumble supported remote images in chat. As described above, this
implementation was problematic and its complexity is no longer needed,
so I changed the implementation of `LogDocument::loadResource` to simply
check that the image URL is valid and has the `data://` scheme and then
just fall back to QTextDocument::loadResource`.

Implementing the solution this way eliminates the need for
`LogDocumentResourceAddedEvent` because everything happens in order as
expected and there is no need to "correct" the scroll value after the
image gets loaded. I therefore removed this class and the associated
code.

The default behaviour of `QTextEdit` is that it scrolls to the bottom
whenever contents are added. `LogTextBrowser::scrollLogToBottom` seems
to be a workaround to try to get the log to stay at the bottom despite
the scroll bar jumping issue. With my solution, this method can be
removed, and we only need to worry about "restoring" the previous scroll
value when a message from another user arrives and the log isn't already
scrolled to the bottom.
2024-02-18 15:25:08 -05:00
Robert Adam
25f060082f
Merge PR #6270: TRANSLATION: Translations update from Hosted Weblate 2024-02-18 17:44:45 +01:00
Robert Adam
a0751b76bf TRANSLATION: Update translation files 2024-02-18 17:13:37 +01:00
Hosted Weblate
16634cb7ea
TRANSLATION: Update Chinese (Simplified) translation
Currently translated at 100.0% (2156 of 2156 strings)

TRANSLATION: Update Chinese (Simplified) translation

Currently translated at 100.0% (2156 of 2156 strings)

TRANSLATION: Update Chinese (Simplified) translation

Currently translated at 100.0% (2150 of 2150 strings)

TRANSLATION: Update Chinese (Simplified) translation

Currently translated at 100.0% (2150 of 2150 strings)

Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: deluxghost <deluxghost@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/zh_Hans/
Translation: Mumble/Mumble Client
2024-02-14 09:50:54 +01:00
Hosted Weblate
9f8ed9dfb6
TRANSLATION: Update Finnish translation
Currently translated at 100.0% (2156 of 2156 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: janne ojanperä <janne.ojanpera@iki.fi>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/fi/
Translation: Mumble/Mumble Client
2024-02-14 09:50:53 +01:00
Hosted Weblate
3534f942cb
TRANSLATION: Update Swedish translation
Currently translated at 100.0% (2156 of 2156 strings)

TRANSLATION: Update Swedish translation

Currently translated at 100.0% (2150 of 2150 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/sv/
Translation: Mumble/Mumble Client
2024-02-14 09:50:52 +01:00