refactor: use a client config dialog for client options

This commit is contained in:
sithlord48
2026-02-13 11:30:34 -05:00
committed by Chris Rizzitello
parent 2cc19c9f1e
commit f6b1546f8b
15 changed files with 647 additions and 215 deletions

View File

@ -66,6 +66,9 @@ add_library(${target} STATIC
dialogs/ActionDialog.cpp
dialogs/ActionDialog.h
dialogs/ActionDialog.ui
dialogs/ClientConfigDialog.h
dialogs/ClientConfigDialog.cpp
dialogs/ClientConfigDialog.ui
dialogs/FingerprintDialog.cpp
dialogs/FingerprintDialog.h
dialogs/HotkeyDialog.cpp

View File

@ -14,6 +14,7 @@
#include "StyleUtils.h"
#include "dialogs/AboutDialog.h"
#include "dialogs/ClientConfigDialog.h"
#include "dialogs/FingerprintDialog.h"
#include "dialogs/ServerConfigDialog.h"
#include "dialogs/SettingsDialog.h"
@ -198,6 +199,7 @@ void MainWindow::setupControls()
secureSocket(false);
ui->btnConfigureServer->setIcon(QIcon::fromTheme(QStringLiteral("configure")));
ui->btnConfigureClient->setIcon(QIcon::fromTheme(QStringLiteral("configure")));
if (Settings::value(Settings::Core::LastVersion).toString() != kVersion) {
Settings::setValue(Settings::Core::LastVersion, kVersion);
@ -315,6 +317,7 @@ void MainWindow::connectSlots()
connect(ui->btnSaveServerConfig, &QPushButton::clicked, this, &MainWindow::saveServerConfig);
connect(ui->btnConfigureServer, &QPushButton::clicked, this, [this] { showConfigureServer(""); });
connect(ui->btnConfigureClient, &QPushButton::clicked, this, [this] { showConfigureClient(); });
connect(ui->lblComputerName, &QLabel::linkActivated, this, &MainWindow::openSettings);
connect(m_btnFingerprint, &QPushButton::clicked, this, &MainWindow::showMyFingerprint);
@ -1100,6 +1103,14 @@ void MainWindow::showConfigureServer(const QString &message)
}
}
void MainWindow::showConfigureClient()
{
ClientConfigDialog dialog(this);
if ((dialog.exec() == QDialog::Accepted) && m_coreProcess.isStarted()) {
m_coreProcess.restart();
}
}
void MainWindow::secureSocket(bool secureSocket)
{
m_secureSocket = secureSocket;

View File

@ -145,6 +145,7 @@ private:
void updateScreenName();
void saveSettings() const;
void showConfigureServer(const QString &message);
void showConfigureClient();
void restoreWindow();
void setupControls();
void showFirstConnectedMessage();

View File

@ -321,6 +321,47 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="btnConfigureClient">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>32</height>
</size>
</property>
<property name="text">
<string>&amp;Configure Client</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="m_pLabelServerName">
<property name="sizePolicy">

View File

@ -0,0 +1,102 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2026 Deskflow Developers
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "ClientConfigDialog.h"
#include "ui_ClientConfigDialog.h"
#include "common/Settings.h"
#include <QPushButton>
ClientConfigDialog::ClientConfigDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ClientConfigDialog)
{
ui->setupUi(this);
updateText();
initConnections();
load();
setButtonBoxEnabledButtons();
}
ClientConfigDialog::~ClientConfigDialog()
{
delete ui;
}
void ClientConfigDialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
if (e->type() == QEvent::LanguageChange) {
ui->retranslateUi(this);
updateText();
}
}
void ClientConfigDialog::updateText() const
{
ui->buttonBox->button(QDialogButtonBox::Save)->setToolTip(tr("Close and save changes"));
ui->buttonBox->button(QDialogButtonBox::Cancel)->setToolTip(tr("Close and forget changes"));
ui->buttonBox->button(QDialogButtonBox::Reset)->setToolTip(tr("Reset to stored values"));
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setToolTip(tr("Reset to default values"));
}
void ClientConfigDialog::initConnections() const
{
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &ClientConfigDialog::save);
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &ClientConfigDialog::load);
connect(
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this,
&ClientConfigDialog::resetToDefault
);
connect(ui->cbLanguageSync, &QCheckBox::checkStateChanged, this, &ClientConfigDialog::setButtonBoxEnabledButtons);
connect(ui->cbYScrollInvert, &QCheckBox::checkStateChanged, this, &ClientConfigDialog::setButtonBoxEnabledButtons);
connect(ui->sbYScrollScale, &QDoubleSpinBox::valueChanged, this, &ClientConfigDialog::setButtonBoxEnabledButtons);
}
bool ClientConfigDialog::isModified() const
{
return (ui->cbLanguageSync->isChecked() != Settings::value(Settings::Client::LanguageSync).toBool()) ||
(ui->cbYScrollInvert->isChecked() != Settings::value(Settings::Client::InvertYScroll).toBool()) ||
(ui->sbYScrollScale->value() != Settings::value(Settings::Client::YScrollScale).toDouble());
}
bool ClientConfigDialog::isDefault() const
{
return (ui->cbLanguageSync->isChecked() == Settings::defaultValue(Settings::Client::LanguageSync).toBool()) &&
(ui->cbYScrollInvert->isChecked() == Settings::defaultValue(Settings::Client::InvertYScroll).toBool()) &&
(ui->sbYScrollScale->value() == Settings::defaultValue(Settings::Client::YScrollScale).toDouble());
}
void ClientConfigDialog::setButtonBoxEnabledButtons() const
{
const bool modified = isModified();
ui->buttonBox->button(QDialogButtonBox::Save)->setEnabled(modified);
ui->buttonBox->button(QDialogButtonBox::Reset)->setEnabled(modified);
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(!isDefault());
}
void ClientConfigDialog::load()
{
ui->cbLanguageSync->setChecked(Settings::value(Settings::Client::LanguageSync).toBool());
ui->cbYScrollInvert->setChecked(Settings::value(Settings::Client::InvertYScroll).toBool());
ui->sbYScrollScale->setValue(Settings::value(Settings::Client::YScrollScale).toDouble());
}
void ClientConfigDialog::resetToDefault()
{
ui->cbLanguageSync->setChecked(Settings::defaultValue(Settings::Client::LanguageSync).toBool());
ui->cbYScrollInvert->setChecked(Settings::defaultValue(Settings::Client::InvertYScroll).toBool());
ui->sbYScrollScale->setValue(Settings::defaultValue(Settings::Client::YScrollScale).toDouble());
}
void ClientConfigDialog::save()
{
Settings::setValue(Settings::Client::LanguageSync, ui->cbLanguageSync->isChecked());
Settings::setValue(Settings::Client::InvertYScroll, ui->cbYScrollInvert->isChecked());
Settings::setValue(Settings::Client::YScrollScale, ui->sbYScrollScale->value());
QDialog::accept();
}

View File

@ -0,0 +1,76 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2026 Deskflow Developers
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#pragma once
#include <QDialog>
namespace Ui {
class ClientConfigDialog;
}
/**
* @brief The ClientConfigDialog class
* Simple dialog to allow users to configure the Client settings
*/
class ClientConfigDialog : public QDialog
{
Q_OBJECT
public:
explicit ClientConfigDialog(QWidget *parent = nullptr);
~ClientConfigDialog() override;
protected:
void changeEvent(QEvent *e) override;
private:
/**
* @brief updateText update widget text
*/
void updateText() const;
/**
* @brief initConnections
* Sets up all the connections
*/
void initConnections() const;
/**
* @brief isModified
* @return true when any client settings in the gui do not match the stored settings values.
*/
bool isModified() const;
/**
* @brief isDefault
* @return true if all client settings match the default values
*/
bool isDefault() const;
/**
* @brief setButtonBoxEnabledButtons
* Enable / Disable the button box buttons based on the state of the gui
*/
void setButtonBoxEnabledButtons() const;
/**
* @brief Load the client setting into the gui
*/
void load();
/**
* @brief Set the gui values to the defalut values for all client settings
*/
void resetToDefault();
/**
* @brief save to settings and then calls QDialog::accept
*/
void save();
Ui::ClientConfigDialog *ui = nullptr;
};

View File

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ClientConfigDialog</class>
<widget class="QDialog" name="ClientConfigDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>425</width>
<height>148</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Client Configuration</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="cbLanguageSync">
<property name="text">
<string>Use server's keyboard language on this computer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbYScrollInvert">
<property name="text">
<string>Invert vertical scroll direction on this computer</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="lblScrollSpeed">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Vertical Scroll Scale</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="sbYScrollScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="accelerated">
<bool>true</bool>
</property>
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectionMode::CorrectToNearestValue</enum>
</property>
<property name="minimum">
<double>0.100000000000000</double>
</property>
<property name="maximum">
<double>10.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Reset|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ClientConfigDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ClientConfigDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -181,12 +181,9 @@ void SettingsDialog::accept()
Settings::setValue(Settings::Security::Certificate, ui->lineTlsCertPath->text());
Settings::setValue(Settings::Security::KeySize, ui->comboTlsKeyLength->currentText().toInt());
Settings::setValue(Settings::Security::TlsEnabled, ui->groupSecurity->isChecked());
Settings::setValue(Settings::Client::LanguageSync, ui->cbLanguageSync->isChecked());
Settings::setValue(Settings::Client::InvertYScroll, ui->cbScrollDirection->isChecked());
Settings::setValue(Settings::Gui::CloseToTray, ui->cbCloseToTray->isChecked());
Settings::setValue(Settings::Gui::SymbolicTrayIcon, ui->rbIconMono->isChecked());
Settings::setValue(Settings::Security::CheckPeers, ui->cbRequireClientCert->isChecked());
Settings::setValue(Settings::Client::YScrollScale, ui->sbYScrollScale->value());
Settings::setValue(Settings::Core::Language, I18N::nativeTo639Name(ui->comboLanguage->currentText()));
Settings::setValue(Settings::Log::GuiDebug, ui->cbGuiDebug->isChecked());
Settings::setValue(Settings::Core::UseWlClipboard, ui->cbUseWlClipboard->isChecked());
@ -210,12 +207,9 @@ void SettingsDialog::loadFromConfig()
ui->lineLogFilename->setText(Settings::value(Settings::Log::File).toString());
ui->cbAutoHide->setChecked(Settings::value(Settings::Gui::Autohide).toBool());
ui->cbPreventSleep->setChecked(Settings::value(Settings::Core::PreventSleep).toBool());
ui->cbLanguageSync->setChecked(Settings::value(Settings::Client::LanguageSync).toBool());
ui->cbScrollDirection->setChecked(Settings::value(Settings::Client::InvertYScroll).toBool());
ui->cbCloseToTray->setChecked(Settings::value(Settings::Gui::CloseToTray).toBool());
ui->cbElevateDaemon->setChecked(Settings::value(Settings::Daemon::Elevate).toBool());
ui->cbAutoUpdate->setChecked(Settings::value(Settings::Gui::AutoUpdateCheck).toBool());
ui->sbYScrollScale->setValue(Settings::value(Settings::Client::YScrollScale).toDouble());
ui->cbGuiDebug->setChecked(Settings::value(Settings::Log::GuiDebug).toBool());
ui->cbUseWlClipboard->setChecked(Settings::value(Settings::Core::UseWlClipboard).toBool());
ui->cbShowVersion->setChecked(Settings::value(Settings::Gui::ShowVersionInTitle).toBool());
@ -331,8 +325,6 @@ void SettingsDialog::updateControls()
ui->widgetWlClipboard->setVisible(false);
}
ui->groupClientOptions->setEnabled(writable && isClientMode());
ui->widgetLogFilename->setEnabled(writable && logToFile);
updateTlsControls();

View File

@ -33,93 +33,6 @@
<string>&amp;Regular</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupClientOptions">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Client mode</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="cbLanguageSync">
<property name="text">
<string>Use server's keyboard language on this computer</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbScrollDirection">
<property name="text">
<string>Invert vertical scroll direction on this computer</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="lblScrollSpeed">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Vertical Scroll Scale</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="sbYScrollScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="accelerated">
<bool>true</bool>
</property>
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectionMode::CorrectToNearestValue</enum>
</property>
<property name="minimum">
<double>0.100000000000000</double>
</property>
<property name="maximum">
<double>10.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupApp">
<property name="sizePolicy">
@ -357,6 +270,19 @@
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabAdvanced">

View File

@ -139,6 +139,41 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished">Cambiar a </translation>
</message>
</context>
<context>
<name>ClientConfigDialog</name>
<message>
<source>Client Configuration</source>
<translation type="unfinished">Configuración del cliente</translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished">Utilice el idioma del teclado del servidor en esta computadora</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished">Invertir la dirección del desplazamiento vertical en este ordenador</translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished">Escala de desplazamiento vertical</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Cerrar y guardar los cambios</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Cerrar y olvidar los cambios</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Restablecer los valores almacenados</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Restablecer valores predeterminados</translation>
</message>
</context>
<context>
<name>FingerprintDialog</name>
<message>
@ -538,6 +573,10 @@ Nombres válidos:
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation type="unfinished">No se pudo iniciar el archivo ejecutable principal, aunque existe. Compruebe si tiene permisos suficientes para ejecutar este programa.</translation>
</message>
<message>
<source>&amp;Configure Client</source>
<translation type="unfinished">&amp;Configurar cliente</translation>
</message>
<message>
<source>Connect to:</source>
<translation type="unfinished">Conectarse a:</translation>
@ -557,10 +596,6 @@ Nombres válidos:
</context>
<context>
<name>QObject</name>
<message>
<source>%1 is already running</source>
<translation type="unfinished">%1 ya se está ejecutando</translation>
</message>
<message>
<source>fatal error</source>
<translation type="unfinished">error fatal</translation>
@ -740,6 +775,10 @@ Nombres válidos:
<extracomment>%1 will be replaced by the certificate path</extracomment>
<translation type="unfinished">No se pudo leer la clave RSA del archivo de certificado: %1</translation>
</message>
<message>
<source>%1 is already running</source>
<translation type="unfinished">%1 ya se está ejecutando</translation>
</message>
</context>
<context>
<name>ScreenSettingsDialog</name>
@ -1104,14 +1143,6 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU
<source>&amp;Regular</source>
<translation type="unfinished">&amp;Regular</translation>
</message>
<message>
<source>Client mode</source>
<translation type="unfinished">Modo cliente</translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished">Utilice el idioma del teclado del servidor en esta computadora</translation>
</message>
<message>
<source>App</source>
<translation type="unfinished">Aplicación</translation>
@ -1316,14 +1347,6 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU
<source>Include version in the window title</source>
<translation type="unfinished">Incluir la versión en el título de la ventana</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished">Invertir la dirección del desplazamiento vertical en este ordenador</translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished">Escala de desplazamiento vertical</translation>
</message>
</context>
<context>
<name>i18n</name>

View File

@ -139,6 +139,41 @@ p, li { white-space: pre-wrap; }
<translation>Passa a </translation>
</message>
</context>
<context>
<name>ClientConfigDialog</name>
<message>
<source>Client Configuration</source>
<translation type="unfinished">Configurazione del client</translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished">Usa la lingua della tastiera del server su questo computer</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished">Inverti la direzione dello scorrimento verticale su questo computer</translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished">Scala di scorrimento verticale</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Chiudi e salva le modifiche</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Chiudi e dimentica le modifiche</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Ripristina i valori memorizzati</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Ripristina i valori predefiniti</translation>
</message>
</context>
<context>
<name>FingerprintDialog</name>
<message>
@ -538,6 +573,10 @@ Nomi validi:
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation type="unfinished">Non è stato possibile avviare correttamente l&apos;eseguibile Core, sebbene esista. Verifica di disporre delle autorizzazioni necessarie per eseguire questo programma.</translation>
</message>
<message>
<source>&amp;Configure Client</source>
<translation type="unfinished">&amp;Configurare il client</translation>
</message>
<message>
<source>Connect to:</source>
<translation type="unfinished">Connettiti a:</translation>
@ -557,10 +596,6 @@ Nomi validi:
</context>
<context>
<name>QObject</name>
<message>
<source>%1 is already running</source>
<translation>%1 è già in esecuzione</translation>
</message>
<message>
<source>fatal error</source>
<translation>errore fatale</translation>
@ -740,6 +775,10 @@ Nomi validi:
<extracomment>%1 will be replaced by the certificate path</extracomment>
<translation type="unfinished">impossibile leggere la chiave RSA dal file del certificato: %1</translation>
</message>
<message>
<source>%1 is already running</source>
<translation>%1 è già in esecuzione</translation>
</message>
</context>
<context>
<name>ScreenSettingsDialog</name>
@ -1104,14 +1143,6 @@ L&apos;abilitazione di questa impostazione disabiliterà l&apos;interfaccia graf
<source>&amp;Regular</source>
<translation>&amp;Regolare</translation>
</message>
<message>
<source>Client mode</source>
<translation>Modalità client</translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation>Usa la lingua della tastiera del server su questo computer</translation>
</message>
<message>
<source>App</source>
<translation>App</translation>
@ -1316,14 +1347,6 @@ L&apos;abilitazione di questa impostazione disabiliterà l&apos;interfaccia graf
<source>Include version in the window title</source>
<translation type="unfinished">Includi la versione nel titolo della finestra</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished">Inverti la direzione dello scorrimento verticale su questo computer</translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished">Scala di scorrimento verticale</translation>
</message>
</context>
<context>
<name>i18n</name>

View File

@ -139,6 +139,41 @@ p, li { white-space: pre-wrap; }
<translation></translation>
</message>
</context>
<context>
<name>ClientConfigDialog</name>
<message>
<source>Client Configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished">使</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FingerprintDialog</name>
<message>
@ -537,6 +572,10 @@ Valid names:
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation></translation>
</message>
<message>
<source>&amp;Configure Client</source>
<translation type="unfinished"> (&amp;C)</translation>
</message>
<message>
<source>Connect to:</source>
<translation type="unfinished">:</translation>
@ -556,10 +595,6 @@ Valid names:
</context>
<context>
<name>QObject</name>
<message>
<source>%1 is already running</source>
<translation>%1 </translation>
</message>
<message>
<source>fatal error</source>
<translation></translation>
@ -741,6 +776,10 @@ Valid names:
<extracomment>%1 will be replaced by the certificate path</extracomment>
<translation type="unfinished"> RSA : %1</translation>
</message>
<message>
<source>%1 is already running</source>
<translation>%1 </translation>
</message>
</context>
<context>
<name>ScreenSettingsDialog</name>
@ -1105,14 +1144,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&amp;Regular</source>
<translation>(&amp;R)</translation>
</message>
<message>
<source>Client mode</source>
<translation></translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation>使</translation>
</message>
<message>
<source>App</source>
<translation></translation>
@ -1317,14 +1348,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Include version in the window title</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>i18n</name>

View File

@ -139,6 +139,41 @@ p, li { white-space: pre-wrap; }
<translation>: </translation>
</message>
</context>
<context>
<name>ClientConfigDialog</name>
<message>
<source>Client Configuration</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished"> </translation>
</message>
</context>
<context>
<name>FingerprintDialog</name>
<message>
@ -537,6 +572,10 @@ Valid names:
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation> . .</translation>
</message>
<message>
<source>&amp;Configure Client</source>
<translation type="unfinished"> (&amp;C)</translation>
</message>
<message>
<source>Connect to:</source>
<translation type="unfinished"> :</translation>
@ -556,10 +595,6 @@ Valid names:
</context>
<context>
<name>QObject</name>
<message>
<source>%1 is already running</source>
<translation>%1() </translation>
</message>
<message>
<source>fatal error</source>
<translation> </translation>
@ -739,6 +774,10 @@ Valid names:
<extracomment>%1 will be replaced by the certificate path</extracomment>
<translation type="unfinished"> RSA : %1</translation>
</message>
<message>
<source>%1 is already running</source>
<translation>%1() </translation>
</message>
</context>
<context>
<name>ScreenSettingsDialog</name>
@ -1103,14 +1142,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&amp;Regular</source>
<translation>(&amp;R)</translation>
</message>
<message>
<source>Client mode</source>
<translation> </translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation> </translation>
</message>
<message>
<source>App</source>
<translation></translation>
@ -1315,14 +1346,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Include version in the window title</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished"> </translation>
</message>
</context>
<context>
<name>i18n</name>

View File

@ -139,6 +139,41 @@ p, li { white-space: pre-wrap; }
<translation>Переключиться на </translation>
</message>
</context>
<context>
<name>ClientConfigDialog</name>
<message>
<source>Client Configuration</source>
<translation type="unfinished">Конфигурация клиента</translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished">Использовать язык клавиатуры сервера на этом компьютере</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished">Инвертировать направление вертикальной прокрутки на этом компьютере</translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished">Вертикальная шкала прокрутки</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Закрыть и сохранить изменения</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Закройте изменения и забудьте о них</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Сбросить до сохраненных значений</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Сбросить до значений по умолчанию</translation>
</message>
</context>
<context>
<name>FingerprintDialog</name>
<message>
@ -539,6 +574,10 @@ Valid names:
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation>Не удалось запустить исполняемый файл ядра, хотя он существует. Проверьте наличие прав на запуск программы.</translation>
</message>
<message>
<source>&amp;Configure Client</source>
<translation type="unfinished">&amp;Настройка клиента</translation>
</message>
<message>
<source>Connect to:</source>
<translation type="unfinished">Подключиться к:</translation>
@ -558,10 +597,6 @@ Valid names:
</context>
<context>
<name>QObject</name>
<message>
<source>%1 is already running</source>
<translation>%1 уже запущен</translation>
</message>
<message>
<source>fatal error</source>
<translation>критическая ошибка</translation>
@ -741,6 +776,10 @@ Valid names:
<extracomment>%1 will be replaced by the certificate path</extracomment>
<translation>не удалось прочитать RSA-ключ из файла сертификата: %1</translation>
</message>
<message>
<source>%1 is already running</source>
<translation>%1 уже запущен</translation>
</message>
</context>
<context>
<name>ScreenSettingsDialog</name>
@ -1103,14 +1142,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&amp;Regular</source>
<translation>&amp;Основные</translation>
</message>
<message>
<source>Client mode</source>
<translation>Режим клиента</translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation>Использовать язык клавиатуры сервера на этом компьютере</translation>
</message>
<message>
<source>App</source>
<translation>Приложение</translation>
@ -1315,14 +1346,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Include version in the window title</source>
<translation type="unfinished">Включить номер версии в заголовок окна</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished">Инвертировать направление вертикальной прокрутки на этом компьютере</translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished">Вертикальная шкала прокрутки</translation>
</message>
</context>
<context>
<name>i18n</name>

View File

@ -139,6 +139,41 @@ p, li { white-space: pre-wrap; }
<translation> </translation>
</message>
</context>
<context>
<name>ClientConfigDialog</name>
<message>
<source>Client Configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation type="unfinished">使</translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FingerprintDialog</name>
<message>
@ -537,6 +572,10 @@ Valid names:
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation type="unfinished">Core </translation>
</message>
<message>
<source>&amp;Configure Client</source>
<translation type="unfinished">(&amp;C)</translation>
</message>
<message>
<source>Connect to:</source>
<translation type="unfinished"></translation>
@ -556,10 +595,6 @@ Valid names:
</context>
<context>
<name>QObject</name>
<message>
<source>%1 is already running</source>
<translation>%1 </translation>
</message>
<message>
<source>fatal error</source>
<translation></translation>
@ -741,6 +776,10 @@ Valid names:
<extracomment>%1 will be replaced by the certificate path</extracomment>
<translation type="unfinished"> RSA %1</translation>
</message>
<message>
<source>%1 is already running</source>
<translation>%1 </translation>
</message>
</context>
<context>
<name>ScreenSettingsDialog</name>
@ -1105,14 +1144,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&amp;Regular</source>
<translation>(&amp;R)</translation>
</message>
<message>
<source>Client mode</source>
<translation></translation>
</message>
<message>
<source>Use server&apos;s keyboard language on this computer</source>
<translation>使</translation>
</message>
<message>
<source>App</source>
<translation></translation>
@ -1317,14 +1348,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Include version in the window title</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Invert vertical scroll direction on this computer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Vertical Scroll Scale</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>i18n</name>