Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package veyon for openSUSE:Factory checked in at 2022-03-09 18:48:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/veyon (Old) and /work/SRC/openSUSE:Factory/.veyon.new.2349 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "veyon" Wed Mar 9 18:48:04 2022 rev:15 rq:960443 version:4.7.2 Changes: -------- --- /work/SRC/openSUSE:Factory/veyon/veyon.changes 2022-01-25 17:37:11.885868214 +0100 +++ /work/SRC/openSUSE:Factory/.veyon.new.2349/veyon.changes 2022-03-11 11:37:19.086341317 +0100 @@ -1,0 +2,22 @@ +Tue Mar 1 23:20:08 UTC 2022 - andy great <andythe_gr...@pm.me> + +- Update to version 4.7.2. + * Core: + * VncView: limit preferred size to available desktop geometry + (i.e. all monitors) + * Plugins + * AuthKeys: use file name only to determine key name + * AuthKeys: fixed loading key specified through the + VEYON_AUTH_KEY_NAME environment variable + * Demo: in window mode, resize the window according to the + available desktop geometry + * PowerControl: don't allow aborting the shutdown countdown by pressing Alt+F4 + * RemoteAccess: allow screen switching by tab/backtab (in view-only mode) + * RemoteAccess: fixed window being created twice + * RemoteAccess: only update clipboard if a remote access window is opened + * ScreenLock: resize to available desktop geometry + * Master + * Computer zoom: allow screen switching by pressing tab or backtab + + +------------------------------------------------------------------- Old: ---- veyon-4.7.1-src.tar.bz2 New: ---- veyon-4.7.2-src.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ veyon.spec ++++++ --- /var/tmp/diff_new_pack.u6iwcH/_old 2022-03-11 11:37:19.642341969 +0100 +++ /var/tmp/diff_new_pack.u6iwcH/_new 2022-03-11 11:37:19.646341974 +0100 @@ -17,7 +17,7 @@ Name: veyon -Version: 4.7.1 +Version: 4.7.2 Release: 0 Summary: Computer monitoring and classroom management License: GPL-2.0-or-later ++++++ veyon-4.7.1-src.tar.bz2 -> veyon-4.7.2-src.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.centos.7.9/Dockerfile new/veyon-4.7.2/.ci/linux.centos.7.9/Dockerfile --- old/veyon-4.7.1/.ci/linux.centos.7.9/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.centos.7.9/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -3,6 +3,7 @@ RUN \ yum --enablerepo=extras install -y epel-release && \ + yum install -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm && \ yum install -y centos-release-scl && \ yum install -y git devtoolset-7 ninja-build cmake3 rpm-build fakeroot \ qt5-qtbase-devel qt5-qtbase qt5-linguist qt5-qttools qt5-qtquickcontrols2-devel qt5-qtwebkit-devel \ @@ -15,6 +16,7 @@ procps-devel \ lzo-devel \ qca-qt5-devel qca-qt5-ossl \ + ffmpeg-devel \ cyrus-sasl-devel \ openldap-devel && \ ln -s /usr/bin/cmake3 /usr/bin/cmake diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.centos.8.4/Dockerfile new/veyon-4.7.2/.ci/linux.centos.8.4/Dockerfile --- old/veyon-4.7.1/.ci/linux.centos.8.4/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.centos.8.4/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -3,8 +3,9 @@ RUN \ yum --enablerepo=extras install -y epel-release dnf-plugins-core && \ + yum install -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm && \ yum config-manager --set-enabled powertools && \ - dnf install -y https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm && \ + dnf install -y https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-2.el8.noarch.rpm && \ yum install -y git gcc-c++ make ninja-build cmake rpm-build fakeroot \ qt5-qtbase-devel qt5-qtbase-private-devel qt5-qtbase qt5-linguist qt5-qttools qt5-qtquickcontrols2-devel qt5-qtwebengine-devel \ libXtst-devel libXrandr-devel libXinerama-devel libXcursor-devel libXrandr-devel libXdamage-devel libXcomposite-devel libXfixes-devel \ @@ -17,5 +18,6 @@ procps-ng-devel \ lzo-devel \ qca-qt5-devel qca-qt5-ossl \ + ffmpeg-devel \ cyrus-sasl-devel \ openldap-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.debian.bullseye/Dockerfile new/veyon-4.7.2/.ci/linux.debian.bullseye/Dockerfile --- old/veyon-4.7.1/.ci/linux.debian.bullseye/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.debian.bullseye/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -16,6 +16,7 @@ libldap2-dev \ libsasl2-dev \ libqca-qt5-2-dev libqca-qt5-2-plugins \ + libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.debian.buster/Dockerfile new/veyon-4.7.2/.ci/linux.debian.buster/Dockerfile --- old/veyon-4.7.1/.ci/linux.debian.buster/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.debian.buster/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -20,6 +20,7 @@ libpng-dev \ liblzo2-dev \ libqca-qt5-2-dev libqca-qt5-2-plugins \ + libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.debian.stretch/Dockerfile new/veyon-4.7.2/.ci/linux.debian.stretch/Dockerfile --- old/veyon-4.7.1/.ci/linux.debian.stretch/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.debian.stretch/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -19,6 +19,7 @@ libpng-dev \ liblzo2-dev \ libqca-qt5-2-dev libqca-qt5-2-plugins \ + libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.fedora.34/Dockerfile new/veyon-4.7.2/.ci/linux.fedora.34/Dockerfile --- old/veyon-4.7.1/.ci/linux.fedora.34/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.fedora.34/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -2,6 +2,7 @@ MAINTAINER Tobias Junghans <toby...@veyon.io> RUN \ + dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-34.noarch.rpm && \ dnf install -y --setopt=install_weak_deps=False \ git gcc-c++ ninja-build cmake rpm-build fakeroot fakeroot-libs \ qt5-qtbase-devel qt5-qtbase-private-devel qt5-qtbase qt5-linguist qt5-qttools qt5-qtquickcontrols2-devel qt5-qtwebengine-devel \ @@ -12,5 +13,6 @@ pam-devel \ procps-devel \ qca-qt5-devel qca-qt5-ossl \ + ffmpeg-devel \ cyrus-sasl-devel \ openldap-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.fedora.35/Dockerfile new/veyon-4.7.2/.ci/linux.fedora.35/Dockerfile --- old/veyon-4.7.1/.ci/linux.fedora.35/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.fedora.35/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -2,6 +2,7 @@ MAINTAINER Tobias Junghans <toby...@veyon.io> RUN \ + dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-35.noarch.rpm && \ dnf install -y --setopt=install_weak_deps=False \ git gcc-c++ ninja-build cmake rpm-build fakeroot fakeroot-libs \ qt5-qtbase-devel qt5-qtbase-private-devel qt5-qtbase qt5-linguist qt5-qttools qt5-qtquickcontrols2-devel qt5-qtwebengine-devel \ @@ -12,5 +13,6 @@ pam-devel \ procps-devel \ qca-qt5-devel qca-qt5-ossl \ + ffmpeg-devel \ cyrus-sasl-devel \ openldap-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.opensuse.15.2/Dockerfile new/veyon-4.7.2/.ci/linux.opensuse.15.2/Dockerfile --- old/veyon-4.7.1/.ci/linux.opensuse.15.2/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.opensuse.15.2/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -13,6 +13,7 @@ procps-devel \ pam-devel lzo-devel \ libqca-qt5-devel libqca-qt5-plugins \ + libavcodec-devel libavformat-devel libavutil-devel libswscale-devel \ cyrus-sasl-devel \ openldap2-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.opensuse.15.3/Dockerfile new/veyon-4.7.2/.ci/linux.opensuse.15.3/Dockerfile --- old/veyon-4.7.1/.ci/linux.opensuse.15.3/Dockerfile 2021-08-12 16:34:28.000000000 +0200 +++ new/veyon-4.7.2/.ci/linux.opensuse.15.3/Dockerfile 2022-01-24 14:18:16.000000000 +0100 @@ -14,6 +14,7 @@ procps-devel \ pam-devel lzo-devel \ libqca-qt5-devel libqca-qt5-plugins \ + libavcodec-devel libavformat-devel libavutil-devel libswscale-devel \ cyrus-sasl-devel \ openldap2-devel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.ubuntu.bionic/Dockerfile new/veyon-4.7.2/.ci/linux.ubuntu.bionic/Dockerfile --- old/veyon-4.7.1/.ci/linux.ubuntu.bionic/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.ubuntu.bionic/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -18,6 +18,7 @@ libpng-dev \ liblzo2-dev \ libqca-qt5-2-dev libqca-qt5-2-plugins \ + libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/.ci/linux.ubuntu.focal/Dockerfile new/veyon-4.7.2/.ci/linux.ubuntu.focal/Dockerfile --- old/veyon-4.7.1/.ci/linux.ubuntu.focal/Dockerfile 2022-01-14 09:49:23.000000000 +0100 +++ new/veyon-4.7.2/.ci/linux.ubuntu.focal/Dockerfile 2022-02-26 14:52:46.000000000 +0100 @@ -19,6 +19,7 @@ libpng-dev \ liblzo2-dev \ libqca-qt5-2-dev libqca-qt5-2-plugins \ + libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/CMakeLists.txt new/veyon-4.7.2/CMakeLists.txt --- old/veyon-4.7.1/CMakeLists.txt 2022-01-24 10:41:45.000000000 +0100 +++ new/veyon-4.7.2/CMakeLists.txt 2022-02-26 14:52:46.000000000 +0100 @@ -98,7 +98,7 @@ if(NOT VERSION_STRING) set(VERSION_MAJOR 4) set(VERSION_MINOR 7) - set(VERSION_PATCH 1) + set(VERSION_PATCH 2) set(VERSION_BUILD 0) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") else() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/core/src/LockWidget.cpp new/veyon-4.7.2/core/src/LockWidget.cpp --- old/veyon-4.7.1/core/src/LockWidget.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/core/src/LockWidget.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -26,9 +26,6 @@ #include "PlatformInputDeviceFunctions.h" #include <QApplication> -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) -#include <QDesktopWidget> -#endif #include <QPainter> #include <QScreen> #include <QWindow> @@ -60,11 +57,11 @@ setWindowTitle( {} ); show(); move( 0, 0 ); -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - setFixedSize( screen()->size() ); -#else - setFixedSize( qApp->desktop()->size() ); + setFixedSize( +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + windowHandle()-> #endif + screen()->virtualSize()); VeyonCore::platform().coreFunctions().raiseWindow( this, true ); showFullScreen(); setFocusPolicy( Qt::StrongFocus ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/core/src/VeyonCore.cpp new/veyon-4.7.2/core/src/VeyonCore.cpp --- old/veyon-4.7.1/core/src/VeyonCore.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/core/src/VeyonCore.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -687,6 +687,7 @@ m_authenticationCredentials->loadPrivateKey( VeyonCore::filesystem().privateKeyPath( authKeyName ) ) ) { m_authenticationCredentials->setAuthenticationKeyName( authKeyName ); + return true; } } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/core/src/VncViewWidget.cpp new/veyon-4.7.2/core/src/VncViewWidget.cpp --- old/veyon-4.7.1/core/src/VncViewWidget.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/core/src/VncViewWidget.cpp 2022-02-16 15:14:00.000000000 +0100 @@ -25,13 +25,8 @@ #include <QApplication> #include <QMouseEvent> #include <QPainter> -#include <QtMath> - -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) #include <QScreen> -#else -#include <QDesktopWidget> -#endif +#include <QWindow> #include "VeyonConnection.h" #include "VncConnection.h" @@ -68,14 +63,6 @@ show(); -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - const auto screenGeometry = screen()->availableGeometry(); -#else - const auto screenGeometry = QApplication::desktop()->availableGeometry( this ); -#endif - - resize( screenGeometry.size() - QSize( 10, 30 ) ); - setFocusPolicy( Qt::WheelFocus ); setFocus(); @@ -99,7 +86,32 @@ QSize VncViewWidget::sizeHint() const { - return effectiveFramebufferSize(); + QSize availableSize{QGuiApplication::primaryScreen()->availableVirtualSize()}; +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + const auto* windowScreen = windowHandle() ? windowHandle()->screen() : nullptr; +#else + const auto* windowScreen = screen(); +#endif + if (windowScreen) + { + availableSize = windowScreen->availableVirtualSize(); + } + + availableSize -= window()->frameSize() - window()->size(); + + const auto size = effectiveFramebufferSize(); + if (size.isEmpty()) + { + return availableSize; + } + + if (size.width() > availableSize.width() || + size.height() > availableSize.height()) + { + return size.scaled(availableSize, Qt::KeepAspectRatio); + } + + return size; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/master/src/ComputerMonitoringWidget.cpp new/veyon-4.7.2/master/src/ComputerMonitoringWidget.cpp --- old/veyon-4.7.1/master/src/ComputerMonitoringWidget.cpp 2022-01-24 10:41:45.000000000 +0100 +++ new/veyon-4.7.2/master/src/ComputerMonitoringWidget.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -283,6 +283,13 @@ +void ComputerMonitoringWidget::resetIgnoreNumberOfMouseEvents( ) +{ + m_ignoreNumberOfMouseEvents = IgnoredNumberOfMouseEventsWhileHold; +} + + + void ComputerMonitoringWidget::runMousePressAndHoldFeature( ) { m_mousePressAndHold.stop(); @@ -292,18 +299,20 @@ selectedInterfaces.count() < 2 && selectedInterfaces.first()->state() == ComputerControlInterface::State::Connected && selectedInterfaces.first()->hasValidFramebuffer() ) - { + { m_ignoreMousePressAndHoldEvent = true; - m_ignoreNumberOfMouseEvents = IgnoredNumberOfMouseEventsWhileHold; + resetIgnoreNumberOfMouseEvents(); delete m_computerZoomWidget; m_computerZoomWidget = new ComputerZoomWidget( selectedInterfaces.first() ); - } + connect( m_computerZoomWidget, &ComputerZoomWidget::keypressInComputerZoomWidget, this, &ComputerMonitoringWidget::resetIgnoreNumberOfMouseEvents ); + } } void ComputerMonitoringWidget::stopMousePressAndHoldFeature( ) { + disconnect( m_computerZoomWidget, &ComputerZoomWidget::keypressInComputerZoomWidget, this, &ComputerMonitoringWidget::resetIgnoreNumberOfMouseEvents ); m_ignoreMousePressAndHoldEvent = false; m_ignoreNumberOfMouseEvents = 0; m_computerZoomWidget->close(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/master/src/ComputerMonitoringWidget.h new/veyon-4.7.2/master/src/ComputerMonitoringWidget.h --- old/veyon-4.7.1/master/src/ComputerMonitoringWidget.h 2022-01-24 10:41:45.000000000 +0100 +++ new/veyon-4.7.2/master/src/ComputerMonitoringWidget.h 2022-02-25 15:27:08.000000000 +0100 @@ -53,6 +53,8 @@ m_ignoreWheelEvent = enabled; } + void resetIgnoreNumberOfMouseEvents( ); + QTimer m_mousePressAndHold; private: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/master/src/ComputerZoomWidget.cpp new/veyon-4.7.2/master/src/ComputerZoomWidget.cpp --- old/veyon-4.7.1/master/src/ComputerZoomWidget.cpp 2022-01-24 10:41:45.000000000 +0100 +++ new/veyon-4.7.2/master/src/ComputerZoomWidget.cpp 2022-02-25 15:27:08.000000000 +0100 @@ -24,6 +24,7 @@ #include <QApplication> #include <QIcon> +#include <QKeyEvent> #include "ComputerZoomWidget.h" #include "VeyonConfiguration.h" @@ -56,6 +57,7 @@ setAttribute( Qt::WA_DeleteOnClose, true ); m_vncView->move( 0, 0 ); + m_vncView->installEventFilter( this ); connect( m_vncView, &VncViewWidget::sizeHintChanged, this, &ComputerZoomWidget::updateSize ); setWindowState(Qt::WindowMaximized); @@ -73,6 +75,62 @@ +bool ComputerZoomWidget::eventFilter( QObject* object, QEvent* event ) +{ + if( event->type() == QEvent::KeyPress ) + { + Q_EMIT keypressInComputerZoomWidget( ); + + const auto screens = m_vncView->computerControlInterface()->screens(); + const auto key = static_cast<QKeyEvent *>( event )->key(); + if ( screens.size() > 1 && ( key == Qt::Key_Tab || key == Qt::Key_Backtab ) ) + { + if( key == Qt::Key_Tab ) + { + if ( m_currentScreen < screens.size() - 1 ) + { + m_currentScreen++; + } else + { + m_currentScreen = -1; + } + } + + if( key == Qt::Key_Backtab ) + { + if ( m_currentScreen == -1 ) + { + m_currentScreen = screens.size()-1; + } else if ( m_currentScreen > 0 ) + { + m_currentScreen--; + } else + { + m_currentScreen = -1; + } + } + + showNormal(); + if ( m_currentScreen == -1) + { + m_vncView->setViewport( {} ); + } + else + { + m_vncView->setViewport(screens[m_currentScreen].geometry); + } + setWindowState(Qt::WindowMaximized); + return true; + } + + return false; + } + + return QObject::eventFilter(object, event); +} + + + void ComputerZoomWidget::updateComputerZoomWidgetTitle() { const auto username = m_vncView->computerControlInterface()->userFullName().isEmpty() ? @@ -116,5 +174,6 @@ void ComputerZoomWidget::closeEvent( QCloseEvent* event ) { + m_vncView->setViewport({}); QApplication::restoreOverrideCursor(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/master/src/ComputerZoomWidget.h new/veyon-4.7.2/master/src/ComputerZoomWidget.h --- old/veyon-4.7.1/master/src/ComputerZoomWidget.h 2022-01-24 10:41:45.000000000 +0100 +++ new/veyon-4.7.2/master/src/ComputerZoomWidget.h 2022-02-25 15:27:08.000000000 +0100 @@ -39,14 +39,20 @@ ~ComputerZoomWidget() override; protected: + bool eventFilter( QObject* object, QEvent* event ) override; + void resizeEvent( QResizeEvent* event ) override; + void closeEvent( QCloseEvent* event ) override; private: void updateSize(); void updateComputerZoomWidgetTitle(); - void closeEvent( QCloseEvent* event ) override; + int m_currentScreen{-1}; VncViewWidget* m_vncView; +Q_SIGNALS: + void keypressInComputerZoomWidget( ); + } ; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/authkeys/AuthKeysManager.cpp new/veyon-4.7.2/plugins/authkeys/AuthKeysManager.cpp --- old/veyon-4.7.1/plugins/authkeys/AuthKeysManager.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/authkeys/AuthKeysManager.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -461,7 +461,8 @@ QString AuthKeysManager::keyNameFromExportedKeyFile( const QString& keyFile ) { - const auto keyNameMatch = QRegularExpression( QStringLiteral("^(.*)_(.*)_key.pem$") ).match( keyFile ); + const auto keyNameMatch = QRegularExpression( QStringLiteral("^(.*)_(.*)_key.pem$") ) + .match(QFileInfo(keyFile).fileName()); if( keyNameMatch.hasMatch() ) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/demo/DemoClient.cpp new/veyon-4.7.2/plugins/demo/DemoClient.cpp --- old/veyon-4.7.1/plugins/demo/DemoClient.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/demo/DemoClient.cpp 2022-02-16 15:41:53.000000000 +0100 @@ -23,13 +23,7 @@ */ #include <QApplication> -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) -#include <QScreen> -#else -#include <QDesktopWidget> -#endif #include <QIcon> -#include <QLayout> #include "DemoClient.h" #include "VeyonConfiguration.h" @@ -54,29 +48,15 @@ m_toplevel->setWindowTitle( tr( "%1 Demo" ).arg( VeyonCore::applicationName() ) ); m_toplevel->setWindowIcon( QPixmap( QStringLiteral(":/core/icon64.png") ) ); m_toplevel->setAttribute( Qt::WA_DeleteOnClose, false ); + m_toplevel->installEventFilter(this); if( fullscreen == false ) { m_toplevel->setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint ); - -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - const auto screenGeometry = m_toplevel->screen()->availableGeometry(); -#else - const auto screenGeometry = QApplication::desktop()->availableGeometry( m_toplevel ); -#endif - - m_toplevel->resize( screenGeometry.size() - QSize( 10, 30 ) ); } m_vncView = new VncViewWidget( m_computerControlInterface, viewport, m_toplevel ); - auto toplevelLayout = new QVBoxLayout; - toplevelLayout->setContentsMargins( 0, 0, 0, 0 ); - toplevelLayout->setSpacing( 0 ); - toplevelLayout->addWidget( m_vncView ); - - m_toplevel->setLayout( toplevelLayout ); - connect( m_toplevel, &QObject::destroyed, this, &DemoClient::viewDestroyed ); connect( m_vncView, &VncViewWidget::sizeHintChanged, this, &DemoClient::resizeToplevelWidget ); @@ -90,6 +70,8 @@ m_toplevel->show(); } + resizeToplevelWidget(); + VeyonCore::platform().coreFunctions().raiseWindow( m_toplevel, fullscreen ); VeyonCore::platform().coreFunctions().disableScreenSaver(); @@ -106,6 +88,19 @@ +bool DemoClient::eventFilter(QObject* watched, QEvent* event) +{ + if (watched == m_toplevel && event->type() == QEvent::Resize) + { + m_vncView->setFixedSize(m_toplevel->size()); + return true; + } + + return QObject::eventFilter(watched, event); +} + + + void DemoClient::viewDestroyed( QObject* obj ) { // prevent double deletion of toplevel widget @@ -123,10 +118,10 @@ { if( m_toplevel->windowState() & Qt::WindowFullScreen ) { - m_vncView->resize( m_toplevel->size() ); + m_vncView->setFixedSize(m_toplevel->size()); } else { - m_toplevel->resize( m_vncView->sizeHint() ); + m_toplevel->resize(m_vncView->sizeHint()); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/demo/DemoClient.h new/veyon-4.7.2/plugins/demo/DemoClient.h --- old/veyon-4.7.1/plugins/demo/DemoClient.h 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/demo/DemoClient.h 2022-02-16 15:41:53.000000000 +0100 @@ -37,6 +37,9 @@ DemoClient( const QString& host, int port, bool fullscreen, QRect viewport, QObject* parent = nullptr ); ~DemoClient() override; +protected: + bool eventFilter(QObject* watched, QEvent* event) override; + private: void viewDestroyed( QObject* obj ); void resizeToplevelWidget(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/powercontrol/PowerControlFeaturePlugin.cpp new/veyon-4.7.2/plugins/powercontrol/PowerControlFeaturePlugin.cpp --- old/veyon-4.7.1/plugins/powercontrol/PowerControlFeaturePlugin.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/powercontrol/PowerControlFeaturePlugin.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -22,6 +22,7 @@ * */ +#include <QEvent> #include <QMessageBox> #include <QNetworkInterface> #include <QProgressBar> @@ -287,6 +288,20 @@ +bool PowerControlFeaturePlugin::eventFilter(QObject* watched, QEvent* event) +{ + if (event->type() == QEvent::Close && + qobject_cast<QProgressDialog *>(watched)) + { + event->ignore(); + return true; + } + + return QObject::eventFilter(watched, event); +} + + + bool PowerControlFeaturePlugin::confirmFeatureExecution( const Feature& feature, bool all, QWidget* parent ) { if( VeyonCore::config().confirmUnsafeActions() == false ) @@ -411,7 +426,7 @@ if( remainingSeconds <= 0 ) { - VeyonCore::platform().coreFunctions().powerDown( false ); + dialog->accept(); } } @@ -424,6 +439,7 @@ dialog.setMaximum( shutdownTimeout ); dialog.setCancelButton( nullptr ); dialog.setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint ); + dialog.installEventFilter(this); auto progressBar = dialog.findChild<QProgressBar *>(); if( progressBar ) @@ -444,4 +460,6 @@ } ); dialog.exec(); + + VeyonCore::platform().coreFunctions().powerDown(false); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/powercontrol/PowerControlFeaturePlugin.h new/veyon-4.7.2/plugins/powercontrol/PowerControlFeaturePlugin.h --- old/veyon-4.7.1/plugins/powercontrol/PowerControlFeaturePlugin.h 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/powercontrol/PowerControlFeaturePlugin.h 2022-02-26 14:52:46.000000000 +0100 @@ -109,6 +109,9 @@ CommandLinePluginInterface::RunResult handle_help( const QStringList& arguments ); CommandLinePluginInterface::RunResult handle_on( const QStringList& arguments ); +protected: + bool eventFilter(QObject* watched, QEvent* event) override; + private: bool confirmFeatureExecution( const Feature& feature, bool all, QWidget* parent ); static bool broadcastWOLPacket( QString macAddress ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessFeaturePlugin.cpp new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessFeaturePlugin.cpp --- old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessFeaturePlugin.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessFeaturePlugin.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -34,6 +34,7 @@ #include "VeyonConfiguration.h" #include "VeyonMasterInterface.h" #include "VeyonServerInterface.h" +#include "VncView.h" RemoteAccessFeaturePlugin::RemoteAccessFeaturePlugin( QObject* parent ) : @@ -149,7 +150,14 @@ if (message.featureUid() == m_clipboardExchangeFeature.uid()) { - loadClipboardData(message); + for (auto it = m_vncViews.constBegin(), end = m_vncViews.constEnd(); it != end; ++it) + { + if (it->first && it->second->computerControlInterface() == computerControlInterface) + { + loadClipboardData(message); + } + } + return true; } @@ -354,7 +362,6 @@ void RemoteAccessFeaturePlugin::createRemoteAccessWindow(const ComputerControlInterface::Pointer& computerControlInterface, bool viewOnly) { - new RemoteAccessWidget(computerControlInterface, viewOnly, remoteViewEnabled() && remoteControlEnabled()); auto widget = new RemoteAccessWidget(computerControlInterface, viewOnly, remoteViewEnabled() && remoteControlEnabled()); @@ -363,6 +370,22 @@ { sendClipboardData(widget->computerControlInterface()); }); + + connect(widget, &QObject::destroyed, this, [this](QObject* view) { + for (auto it = m_vncViews.begin(); it != m_vncViews.end();) + { + if (it->first == nullptr || it->first == view) + { + it = m_vncViews.erase(it); + } + else + { + it++; + } + } + }); + + m_vncViews.append(qMakePair(widget, widget->vncView())); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessFeaturePlugin.h new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessFeaturePlugin.h --- old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessFeaturePlugin.h 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessFeaturePlugin.h 2022-02-26 14:52:46.000000000 +0100 @@ -28,6 +28,7 @@ #include "FeatureProviderInterface.h" #include "CommandLinePluginInterface.h" +class VncView; class RemoteAccessFeaturePlugin : public QObject, CommandLinePluginInterface, FeatureProviderInterface, PluginInterface { @@ -149,4 +150,6 @@ QString m_clipboardText; QImage m_clipboardImage; + QList<QPair<QPointer<QObject>, VncView *> > m_vncViews{}; + }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessWidget.cpp new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessWidget.cpp --- old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessWidget.cpp 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessWidget.cpp 2022-02-26 14:52:46.000000000 +0100 @@ -93,30 +93,30 @@ #if QT_VERSION < 0x050600 #warning Building legacy compat code for unsupported version of Qt connect( shortcutMenu->addAction( tr( "Ctrl+Alt+Del" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlAltDel ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlAltDel ); } ); connect( shortcutMenu->addAction( tr( "Ctrl+Esc" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlEscape ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlEscape ); } ); connect( shortcutMenu->addAction( tr( "Alt+Tab" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutAltTab ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutAltTab ); } ); connect( shortcutMenu->addAction( tr( "Alt+F4" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutAltF4 ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutAltF4 ); } ); connect( shortcutMenu->addAction( tr( "Win+Tab" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutWinTab ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutWinTab ); } ); connect( shortcutMenu->addAction( tr( "Win" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutWin ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutWin ); } ); connect( shortcutMenu->addAction( tr( "Menu" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutMenu ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutMenu ); } ); connect( shortcutMenu->addAction( tr( "Alt+Ctrl+F1" ) ), &QAction::triggered, - vncView, [=]() { vncView->sendShortcut( VncView::ShortcutAltCtrlF1 ); } ); + this, [=]() { vncView->sendShortcut( VncView::ShortcutAltCtrlF1 ); } ); #else - shortcutMenu->addAction( tr( "Ctrl+Alt+Del" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlAltDel ); } ); - shortcutMenu->addAction( tr( "Ctrl+Esc" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlEscape ); } ); - shortcutMenu->addAction( tr( "Alt+Tab" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutAltTab ); } ); - shortcutMenu->addAction( tr( "Alt+F4" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutAltF4 ); } ); - shortcutMenu->addAction( tr( "Win+Tab" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutWinTab ); } ); - shortcutMenu->addAction( tr( "Win" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutWin ); } ); - shortcutMenu->addAction( tr( "Menu" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutMenu ); } ); - shortcutMenu->addAction( tr( "Alt+Ctrl+F1" ), vncView, [=]() { vncView->sendShortcut( VncView::ShortcutAltCtrlF1 ); } ); + shortcutMenu->addAction( tr( "Ctrl+Alt+Del" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlAltDel ); } ); + shortcutMenu->addAction( tr( "Ctrl+Esc" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutCtrlEscape ); } ); + shortcutMenu->addAction( tr( "Alt+Tab" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutAltTab ); } ); + shortcutMenu->addAction( tr( "Alt+F4" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutAltF4 ); } ); + shortcutMenu->addAction( tr( "Win+Tab" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutWinTab ); } ); + shortcutMenu->addAction( tr( "Win" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutWin ); } ); + shortcutMenu->addAction( tr( "Menu" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutMenu ); } ); + shortcutMenu->addAction( tr( "Alt+Ctrl+F1" ), this, [=]() { vncView->sendShortcut( VncView::ShortcutAltCtrlF1 ); } ); #endif m_sendShortcutButton->setMenu( shortcutMenu ); @@ -144,6 +144,9 @@ connect( vncView->computerControlInterface().data(), &ComputerControlInterface::screensChanged, this, &RemoteAccessWidgetToolBar::updateScreens ); + + connect( m_parent, &RemoteAccessWidget::screenChangedInRemoteAccessWidget, + this, &RemoteAccessWidgetToolBar::updateScreenSelectActions ); } @@ -182,6 +185,26 @@ +void RemoteAccessWidgetToolBar::updateScreenSelectActions( int newScreen ) +{ + const auto screens = m_parent->vncView()->computerControlInterface()->screens(); + const auto m_screenSelectActions = m_selectScreenButton->menu()->actions(); + for (const auto& screenSelectAction : m_screenSelectActions) + { + if ( newScreen == -1 ) + { + screenSelectAction->setChecked(true); + break; + } + if ( screenSelectAction->text() == screens[newScreen].name ) + { + screenSelectAction->setChecked(true); + } + } +} + + + void RemoteAccessWidgetToolBar::leaveEvent( QEvent *event ) { disappear(); @@ -326,6 +349,8 @@ showNormal(); + updateSize(); + setViewOnly( startViewOnly ); } @@ -338,6 +363,13 @@ +VncView* RemoteAccessWidget::vncView() const +{ + return m_vncView; +} + + + bool RemoteAccessWidget::eventFilter( QObject* object, QEvent* event ) { if( event->type() == QEvent::KeyRelease && @@ -353,6 +385,52 @@ m_toolBar->disappear(); } + if( event->type() == QEvent::KeyPress && m_vncView->viewOnly() ) + { + const auto screens = m_vncView->computerControlInterface()->screens(); + const auto key = static_cast<QKeyEvent *>( event )->key(); + if ( screens.size() > 1 && ( key == Qt::Key_Tab || key == Qt::Key_Backtab ) ) + { + if( key == Qt::Key_Tab ) + { + if ( m_currentScreen < screens.size() - 1 ) + { + m_currentScreen++; + } else + { + m_currentScreen = -1; + } + } + + if( key == Qt::Key_Backtab ) + { + if ( m_currentScreen == -1 ) + { + m_currentScreen = screens.size()-1; + } else if ( m_currentScreen > 0 ) + { + m_currentScreen--; + } else + { + m_currentScreen = -1; + } + } + + if ( m_currentScreen == -1) + { + m_vncView->setViewport( {} ); + } + else + { + m_vncView->setViewport(screens[m_currentScreen].geometry); + } + Q_EMIT screenChangedInRemoteAccessWidget(m_currentScreen); + return true; + } + + return false; + } + return QWidget::eventFilter( object, event ); } @@ -387,7 +465,7 @@ void RemoteAccessWidget::resizeEvent( QResizeEvent* event ) { - m_vncView->resize( size() ); + m_vncView->setFixedSize(size()); m_toolBar->setFixedSize( width(), m_toolBar->height() ); QWidget::resizeEvent( event ); @@ -397,8 +475,7 @@ void RemoteAccessWidget::updateSize() { - if( !( windowState() & Qt::WindowFullScreen ) && - m_vncView->sizeHint().isEmpty() == false ) + if (!(windowState() & Qt::WindowFullScreen)) { resize( m_vncView->sizeHint() ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessWidget.h new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessWidget.h --- old/veyon-4.7.1/plugins/remoteaccess/RemoteAccessWidget.h 2022-01-14 14:20:38.000000000 +0100 +++ new/veyon-4.7.2/plugins/remoteaccess/RemoteAccessWidget.h 2022-02-25 15:27:08.000000000 +0100 @@ -30,6 +30,7 @@ class QActionGroup; +class VncView; class VncViewWidget; class RemoteAccessWidget; class ToolButton; @@ -47,6 +48,7 @@ void appear(); void disappear(); void updateControls( bool viewOnly ); + void updateScreenSelectActions( int newScreen ); protected: @@ -93,10 +95,7 @@ return m_computerControlInterface; } - VncViewWidget* vncView() const - { - return m_vncView; - } + VncView* vncView() const; void toggleFullScreen( bool ); void setViewOnly( bool viewOnly ); @@ -122,4 +121,9 @@ static constexpr int AppearDelay = 500; + int m_currentScreen{-1}; + +Q_SIGNALS: + void screenChangedInRemoteAccessWidget( int newScreen ); + } ; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/project.yml new/veyon-4.7.2/project.yml --- old/veyon-4.7.1/project.yml 2022-01-24 10:41:45.000000000 +0100 +++ new/veyon-4.7.2/project.yml 2022-02-26 14:52:46.000000000 +0100 @@ -1,6 +1,6 @@ project: name: Veyon - version: 4.7.1 + version: 4.7.2 copyright: 2004-2022 author: Tobias Junghans contact: Tobias Junghans <toby...@veyon.io> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/translations/veyon_fr.ts new/veyon-4.7.2/translations/veyon_fr.ts --- old/veyon-4.7.1/translations/veyon_fr.ts 2022-01-24 10:48:51.000000000 +0100 +++ new/veyon-4.7.2/translations/veyon_fr.ts 2022-02-27 14:03:46.000000000 +0100 @@ -2621,7 +2621,7 @@ </message> <message> <source>Query timeout</source> - <translation type="unfinished"></translation> + <translation>D??lai d'expiration de la requ??te</translation> </message> <message> <source> ms</source> @@ -3398,11 +3398,11 @@ </message> <message> <source>Exchange clipboard contents</source> - <translation type="unfinished"></translation> + <translation>??changer le contenu du presse-papiers</translation> </message> <message> <source>No computer has been selected so you can enter a hostname or IP address of a computer for manual access:</source> - <translation type="unfinished"></translation> + <translation>Aucun ordinateur n'a ??t?? s??lectionn??, vous pouvez donc saisir le nom d'h??te ou l'adresse IP d'un ordinateur pour un acc??s manuel??:</translation> </message> </context> <context> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/translations/veyon_it.ts new/veyon-4.7.2/translations/veyon_it.ts --- old/veyon-4.7.1/translations/veyon_it.ts 2022-01-24 10:48:50.000000000 +0100 +++ new/veyon-4.7.2/translations/veyon_it.ts 2022-02-27 14:03:46.000000000 +0100 @@ -2608,7 +2608,7 @@ </message> <message> <source>Query timeout</source> - <translation type="unfinished"></translation> + <translation>Timeout query</translation> </message> <message> <source> ms</source> @@ -3385,11 +3385,11 @@ </message> <message> <source>Exchange clipboard contents</source> - <translation type="unfinished"></translation> + <translation>Scambia il contenuto degli appunti</translation> </message> <message> <source>No computer has been selected so you can enter a hostname or IP address of a computer for manual access:</source> - <translation type="unfinished"></translation> + <translation>Nessun computer ?? stato selezionato, quindi puoi inserire un nome host o un indirizzo IP di un computer per l'accesso manuale:</translation> </message> </context> <context> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/translations/veyon_ja.ts new/veyon-4.7.2/translations/veyon_ja.ts --- old/veyon-4.7.1/translations/veyon_ja.ts 2022-01-24 10:48:51.000000000 +0100 +++ new/veyon-4.7.2/translations/veyon_ja.ts 2022-02-27 14:03:46.000000000 +0100 @@ -1900,7 +1900,7 @@ </message> <message> <source>Rotate log files</source> - <translation type="unfinished"></translation> + <translation>??????????????????????????????????????????</translation> </message> <message> <source>x</source> @@ -2980,7 +2980,7 @@ </message> <message> <source>Hide computer filter field</source> - <translation type="unfinished"></translation> + <translation>"??????????????????????????????"???????????????</translation> </message> <message> <source>Actions such as rebooting or powering down computers</source> @@ -3072,7 +3072,7 @@ </message> <message> <source>Hide local session</source> - <translation type="unfinished"></translation> + <translation>????????????????????????????????????</translation> </message> <message> <source> px</source> @@ -3665,7 +3665,7 @@ </message> <message> <source>Network port numbers</source> - <translation type="unfinished"></translation> + <translation>?????????????????????</translation> </message> <message> <source>Veyon server</source> @@ -3677,7 +3677,7 @@ </message> <message> <source>Feature manager</source> - <translation type="unfinished"></translation> + <translation>????????????????????????</translation> </message> <message> <source>Demo server</source> @@ -3685,23 +3685,23 @@ </message> <message> <source>Miscellaneous network settings</source> - <translation type="unfinished"></translation> + <translation>????????????????????????????????????</translation> </message> <message> <source>Session mode</source> - <translation type="unfinished"></translation> + <translation>????????????????????????</translation> </message> <message> <source>Local session mode (single server instance for primary local session)</source> - <translation type="unfinished"></translation> + <translation>??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation> </message> <message> <source>Active session mode (single server instance for active local or remote session)</source> - <translation type="unfinished"></translation> + <translation>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation> </message> <message> <source>Multi session mode (distinct server instance for each local and remote desktop session)</source> - <translation type="unfinished"></translation> + <translation>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</translation> </message> </context> <context> @@ -4255,7 +4255,7 @@ </message> <message> <source>Use input device interception driver</source> - <translation type="unfinished"></translation> + <translation>???????????????????????????????????????????????????</translation> </message> </context> <context> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/translations/veyon_uk.ts new/veyon-4.7.2/translations/veyon_uk.ts --- old/veyon-4.7.1/translations/veyon_uk.ts 2022-01-24 10:48:50.000000000 +0100 +++ new/veyon-4.7.2/translations/veyon_uk.ts 2022-02-27 14:03:46.000000000 +0100 @@ -2620,7 +2620,7 @@ </message> <message> <source>Query timeout</source> - <translation type="unfinished"></translation> + <translation>?????????????????????? ???????? ???????????????????? ???? ?????????????????? ????????????</translation> </message> <message> <source> ms</source> @@ -3397,11 +3397,11 @@ </message> <message> <source>Exchange clipboard contents</source> - <translation type="unfinished"></translation> + <translation>?????????? ?????????????? ???????????? ???????????? ????????????</translation> </message> <message> <source>No computer has been selected so you can enter a hostname or IP address of a computer for manual access:</source> - <translation type="unfinished"></translation> + <translation>???? ?????????????? ?????????????? ????????'??????????. ???? ???????????? ???????????? ?????????? ?????????? ?????? IP-???????????? ????????'?????????? ?????? ?????????????? ????????????:</translation> </message> </context> <context> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/translations/veyon_zh_CN.ts new/veyon-4.7.2/translations/veyon_zh_CN.ts --- old/veyon-4.7.1/translations/veyon_zh_CN.ts 2022-01-24 10:48:51.000000000 +0100 +++ new/veyon-4.7.2/translations/veyon_zh_CN.ts 2022-02-27 14:03:46.000000000 +0100 @@ -736,7 +736,7 @@ </message> <message> <source>The import of CSV files is possible through the command line interface. For more information, see the <a href="https://docs.veyon.io/en/latest/admin/cli.html#network-object-directory">online documentation</a>.</source> - <translation>??????????????????????????????CSV?????????????????????????????????<a href="https://docs.veyon.io/en/latest/admin/cli.html#network-object-directory">????????????</a>???</translation> + <translation>??????????????????????????????CSV?????????????????????????????????<a href="https://docs.veyon.io/en/latest/admin/cli.html#network-object-directory">????????????</a>???</translation> </message> <message> <source>New location</source> @@ -1344,11 +1344,11 @@ </message> <message> <source>Share your own screen in a window</source> - <translation type="unfinished"></translation> + <translation>????????????????????????????????????</translation> </message> <message> <source>Share selected user's screen in fullscreen mode</source> - <translation type="unfinished"></translation> + <translation>??????????????????????????????????????????</translation> </message> <message> <source>In this mode the screen of the selected user is being displayed in full screen mode on all computers while the input devices of the users are locked.</source> @@ -1356,7 +1356,7 @@ </message> <message> <source>Share selected user's screen in a window</source> - <translation type="unfinished"></translation> + <translation>???????????????????????????????????????</translation> </message> <message> <source>In this mode the screen of the selected user being displayed in a window on all computers. The users are able to switch to other windows as needed.</source> @@ -1364,15 +1364,15 @@ </message> <message> <source>Please select a user screen to share.</source> - <translation type="unfinished"></translation> + <translation>??????????????????????????????????????????</translation> </message> <message> <source>Please select only one user screen to share.</source> - <translation type="unfinished"></translation> + <translation>?????????????????????????????????????????????</translation> </message> <message> <source>All screens</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> </context> <context> @@ -1426,11 +1426,11 @@ </message> <message> <source>Applications & websites</source> - <translation type="unfinished"></translation> + <translation>?????? & ??????</translation> </message> <message> <source>Predefined applications</source> - <translation type="unfinished"></translation> + <translation>??????????????????</translation> </message> <message> <source>Add new application</source> @@ -1442,7 +1442,7 @@ </message> <message> <source>Add new website</source> - <translation type="unfinished"></translation> + <translation>??????????????????</translation> </message> <message> <source>New application</source> @@ -1481,7 +1481,7 @@ </message> <message> <source>Custom application</source> - <translation type="unfinished"></translation> + <translation>???????????????</translation> </message> <message> <source>Start apps and open websites in user sessions</source> @@ -1532,7 +1532,7 @@ </message> <message> <source>Custom application</source> - <translation type="unfinished"></translation> + <translation>???????????????</translation> </message> </context> <context> @@ -1601,19 +1601,19 @@ </message> <message> <source>Lock the screen</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> <message> <source>Display a text message</source> - <translation type="unfinished"></translation> + <translation>??????????????????</translation> </message> <message> <source>Test message</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> <message> <source>Start an application</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> <message> <source>Stops the specified feature on the specified host by connecting to the Veyon Server running remotely. The feature can be specified by name or UID. Use the ``show`` command to see all available features.</source> @@ -1621,7 +1621,7 @@ </message> <message> <source>Unlock the screen</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> <message> <source>The specified command does not exist or no help is available for it.</source> @@ -1653,7 +1653,7 @@ </message> <message> <source>Plugin</source> - <translation type="unfinished"></translation> + <translation>??????</translation> </message> <message> <source>Invalid feature name or UID specified</source> @@ -3493,7 +3493,7 @@ </message> <message> <source>All screens</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> </context> <context> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/veyon-4.7.1/translations/veyon_zh_TW.ts new/veyon-4.7.2/translations/veyon_zh_TW.ts --- old/veyon-4.7.1/translations/veyon_zh_TW.ts 2022-01-24 10:48:50.000000000 +0100 +++ new/veyon-4.7.2/translations/veyon_zh_TW.ts 2022-02-27 14:03:46.000000000 +0100 @@ -2621,7 +2621,7 @@ </message> <message> <source>Query timeout</source> - <translation type="unfinished"></translation> + <translation>????????????</translation> </message> <message> <source> ms</source> @@ -3398,11 +3398,11 @@ </message> <message> <source>Exchange clipboard contents</source> - <translation type="unfinished"></translation> + <translation>?????????????????????</translation> </message> <message> <source>No computer has been selected so you can enter a hostname or IP address of a computer for manual access:</source> - <translation type="unfinished"></translation> + <translation>???????????????????????????????????????????????????????????? IP ???????????????????????????:</translation> </message> </context> <context>