This commit introduces the "--hidden" cli option which prevents
Mumble and the ConnectDialog to show up on startup.
This is especially useful for users who want to automate the
startup process without human interaction.
Fixes#3879
Previously, only "window highlighting" was supported
by Mumble. However, when Mumble was minimized to tray,
there was no way to observe that highlighting.
As requested in #4584, this commit introduces highlighting
to the tray icon. When a highlight message is received, the
tray icon will flash the "information icon" every two seconds
until the MainWindow of Mumble receives focus again.
To enable this for a specific message type, the user needs to
check the "highlight" box in the "Messages" configuration dialog.
Fixes#4584
The old tray icon implementation was very old and contained
a lot of workaround for things that probably are no longer an issue.
Furthermore, the event loop was modified in a way such that it could
end up in an infinite loop draining CPU time and rendering Mumble
unusable.
Based on the new Qt5 implementation, this commit introduces
a complete rewrite of the tray icon. The following things should be noted:
* We assume the information in the Qt documentation [1] is valid. This
means that all versions of Windows, all Linux window managers/compositors
that implement the d-bus StatusNotifierItem specification, and all versions
of macos support the functionality of QSystemTrayIcon and its notification
system. That means we can drop the platform-specific code branches and handle
messages directly with QSystemTrayIcon::sendMessage. This should for example
also be true for recent versions of Gnome, which do not have an actual system
tray, but implement the d-bus StatusNotifierItem specification. Therefore, we
can actually merge and simplify the notification code for Windows and Unix*.
* With regards to the bullet point above, we only limit the "hide to tray"
functionality behind QSystemTrayIcon::isSystemTrayAvailable (because otherwise
you would not get the Mumble window back without binding a shortcut first).
Other code branches that were previously limited when isSystemTrayAvailable
returned false were removed. According to Qt, the QSystemTrayIcon code does not
actually care if a system tray is available and will even retroactively add itself
if a tray becomes available after the application was started.
* On (X)Wayland, the minimize button in the window frame does not trigger a
minimize change event. This means that users with such a system may only be
able to "hide to tray" by 1) pressing the close button in the window frame and
enabling "minimize instead of close" 2) clicking the tray icon or the tray icon
hide action or 3) binding a shortcut to hide the window. This is either a bug
or a deliberate decision by Qt or Wayland and we have no way to do anything
about that. (QTBUG-74310)
* The "messageClicked" event is buggy in Qt on some platforms. That means that
clicking the system notification spawned by Mumble via QSystemTrayIcon::sendMessage
will (on some systems) never trigger anything especially not showing and activating
the window. This is a long-standing bug in Qt (QTBUG-87329), but we have absolutely
no way to work around this. The event is correctly hooked up in Mumble and if
this is ever fixed in Qt, this will start working again automatically.
* The tray icon has been redesigned according to state-of-the-art tray icon
design guidelines [2]. Which basically just means: 1) d9a2d470ab has
been reverted to provide the user with a consistent menu 2) The main action of
the tray icon (toggle show/hide) is the first entry in the context menu
and the default action when the icon is clicked and 3) the TalkingUI toggle
action was added. Actions for double and middle mouse clicks were removed as
they might have contributed to infinite loops.
* There is no way in Windows to show and activate a window that is
not part of the current active process. If you have Mumble running in
the background and receive a message, we can not raise the Window without
you clicking the Mumble taskbar item or tray icon yourself. This
is deliberate by Microsoft and can and should not be circumvented. (#5701)
* This also fixes the case where the Mumble MainWindow would disappear when
pressing "OK" in the settings dialog. This happened because users would have
"minimize to tray" and "minimize on close" enabled.
[1]
https://doc.qt.io/qt-5/qsystemtrayicon.html#detailshttps://doc.qt.io/qt-6/qsystemtrayicon.html#details
[2] https://learn.microsoft.com/en-us/windows/win32/uxguide/winenv-notificationFixes#1486Fixes#3028Fixes#3722Fixes#3977Fixes#3999Fixes#5012
The existing code for the tray icon was ancient,
buggy and possibly entirely broken in more than one place.
This commit removes all tray related code, such that it can
be completely written from scratch.
Instead of providing explicit overloads for some integer types, we now
use a template to cover all integer types. Using a manually selected
subset has repeatedly led to issues where integer definitions vary
between platforms (and library versions?).
Currently translated at 99.0% (2294 of 2315 strings)
Co-authored-by: Dark Space <darkspace.lvcnr@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/it/
Translation: Mumble/Mumble Client
Currently translated at 36.5% (845 of 2315 strings)
TRANSLATION: Update English (United Kingdom) translation
Currently translated at 36.2% (839 of 2315 strings)
Co-authored-by: Andi Chandler <andi@gowling.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/mumble/mumble-client/en_GB/
Translation: Mumble/Mumble Client
Since we are now using C++17, we can make use of the
std::filesystem::path API for use with our std::fstreams.
This commit replaces boost::filesystem::path introduced by
a08a26efcc
with std::filesystem::path
Presumably a recent Windows update broke the way we were using
filepaths. Specifically, the internal representation of non-ASCII
characters is weird in Windows and not UTF-8.
Why the code we had ever worked before is unclear, but it is now
broken either way.
This commit introduces the boost::filesystem::path abstraction
to handle the creation of raw output files gracefully on all
platforms.
Fixes#6628
Mumble can be compiled with several system libraries, so add their
development library to the list of Build-Depends.
In order to actually compile with them, you need to specify the
configuration options as described in cmake_options.md.
Those are for the newly added B-Ds:
1) -Dbundled-gsl=OFF
2) -Dbundled-speex=OFF
3) -Dbundled-json=OFF
Closes: #6644
Since Debian Bookworm the pkg-config package is a transitional package
to pkgconf, so update the build dependency install instructions to point
to its target.
In PR 6643 I accidentally updated the instructions for Ubuntu instead of
for Debian, so now actually update the instructions for Debian as well.
FTR: In Ubuntu Noble (2024.04) it's also a transitional package.
Link: https://github.com/mumble-voip/mumble/pull/6643
Looks like targets are now built concurrently, which results in the installer failing to find the G15 and x64 overlay helpers.
This commit marks the G15 and overlay targets as dependencies of the client, when they're enabled.
As a bonus, plugins are now tied to their own dedicated target rather than the client's.
This is required because the client's subdirectory is now included later on.
This is a workaround for a bug that appeared in a recent version of CMake.
WORKING_DIRECTORY prepends the specified path to a list instead of using it directly, resulting in:
cd /D D:\a\1\b\overlay\overlay_xcompile-prefix;D:\a\1\b\overlay\overlay_xcompile-prefix\src\overlay_xcompile-build
For reference, this causes the build to fail on Windows with the following error:
"The filename, directory name, or volume label syntax is incorrect."
This commit simply removes the parameter from the ExternalProject_Add() call, since the default working directory is perfectly fine.
Since Debian Bookworm the pkg-config package is a transitional package
to pkgconf, so update the build dependency install instructions to point
to its target.
In a folder, GitHub shows a README by default, below the file list.
Combining the index.rst and introduction.rst, with text fixups, will serve as an appropriate landing page/doc.
Dropping the resources for Sphinx documentation generation drops support for generating this documentation into various formats (see make file; html, epub, and other less useful ones).
This network protocol documentation is the odd one out compared to our other documentation. The only one with this system.
Diverse tech has a maintenance cost, and the previous distance to our code made more likely to be missed for updates and discovery.
Handling only the network protocol documentation in this way feels disconnected/diverging.
Although readers may use the docs to implement clients and servers against only the docs, the question is whether the technology and maintenance additions are worth it.
Having simple structured text documentation files should serve us well enough.
It does for other developer documentation / documentation for developers.