Compare commits

..

43 Commits

Author SHA1 Message Date
Christoph Feck
8432171959 GIT_SILENT Upgrade KDE Applications version to 19.04.3. 2019-07-06 11:31:27 +02:00
Christoph Feck
ed7cb43440 GIT_SILENT Upgrade KDE Applications version to 19.04.2. 2019-05-31 12:34:01 +02:00
Christoph Feck
2f8761080f GIT_SILENT Upgrade KDE Applications version to 19.04.1. 2019-05-02 12:51:42 +02:00
l10n daemon script
e21d3844bd GIT_SILENT made messages (after extraction) 2019-04-22 07:59:22 +02:00
Christoph Feck
827e1f12e5 GIT_SILENT Upgrade KDE Applications version to 19.04.0. 2019-04-08 14:06:39 +02:00
Christoph Feck
c8d6973f9f GIT_SILENT Upgrade KDE Applications version to 19.03.90. 2019-03-31 14:08:44 +02:00
Albert Astals Cid
ee879c4e4c GIT_SILENT Upgrade KDE Applications version to 19.03.80. 2019-03-16 22:03:48 +01:00
l10n daemon script
aa189daffd GIT_SILENT made messages (after extraction) 2019-03-05 03:26:27 +01:00
Friedrich W. H. Kossebau
9797ff196e Port away from foreach 2019-03-01 07:04:49 +01:00
Friedrich W. H. Kossebau
7519e7918c Add a dummy krfbui.rc to please kxmlgui 2019-03-01 06:54:30 +01:00
Friedrich W. H. Kossebau
6ef393ba1c Network config page: align to top 2019-03-01 06:42:49 +01:00
Friedrich W. H. Kossebau
c47ee269f0 Use QT_USE_QSTRINGBUILDER 2019-03-01 06:26:07 +01:00
Friedrich W. H. Kossebau
a0992f7fea Build with QT_NO_CAST_FROM_ASCII 2019-03-01 06:15:53 +01:00
Friedrich W. H. Kossebau
ef6491a5c9 Build with QT_NO_CAST_FROM_BYTEARRAY & QT_NO_CAST_TO_ASCII 2019-03-01 05:50:10 +01:00
Friedrich W. H. Kossebau
63d6314b1b Ensure more modern Qt code 2019-03-01 05:47:41 +01:00
Friedrich W. H. Kossebau
78ed74ec1e Move ecm_setup_version after all find_package calls 2019-03-01 05:35:23 +01:00
Friedrich W. H. Kossebau
1cf5785007 find_package(Qt5) only after find_package(ECM) 2019-03-01 05:34:51 +01:00
Friedrich W. H. Kossebau
0f506011d0 Use KF5_MIN_VERSION also for find_package(KF5) 2019-03-01 05:33:38 +01:00
Friedrich W. H. Kossebau
d5aff98912 Properly add "nodialog" option before running QCommandLineParser::process() 2019-03-01 05:31:12 +01:00
Friedrich W. H. Kossebau
d77506c4c2 Do not repeat work of KAboutData::setupCommandLine() 2019-03-01 05:24:43 +01:00
l10n daemon script
c3d0313280 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2019-02-15 05:38:37 +01:00
l10n daemon script
1fc7238699 GIT_SILENT made messages (after extraction) 2019-01-26 03:10:58 +01:00
l10n daemon script
e4a82e3a52 GIT_SILENT made messages (after extraction) 2019-01-20 03:05:27 +01:00
Friedrich W. H. Kossebau
c57e9bc5f4 Use more https in links 2019-01-19 15:58:29 +01:00
Friedrich W. H. Kossebau
2916395ea9 Remove Qt4 vars QT_DEFINITIONS & QT_QTDBUS_DEFINITIONS 2019-01-19 15:56:17 +01:00
Friedrich W. H. Kossebau
3c63cf9563 Remove unneeded explicit use of ECM_KDE_MODULE_DIR, part of ECM_MODULE_PATH 2019-01-19 15:55:57 +01:00
Alexey Min
554f2994cc Reverse the condition to display warning
Actually the condition should be the opposite, because the option says "Do NOT store..."
Display warning when it is checked.
2019-01-16 11:02:12 +03:00
Alexey Min
313b4bbc67 Expose option to disable KWallet passwords storage
Summary:
Option "noWallet" was already supported in the code,
but was not visible in the configuration UI. This
option is useful on headless servers where you don't
really have a way to enter password to unlock the wallet.

CHANGELOG: Add an option to store passwords without using KDE Wallet
BUG: 397271
FIXED-IN: 19.04.0

Test Plan: Enable option, restart krfb, ensure that passwords are now in ~/.config/krfbrc. Disable option, restart krfb, see that passwords are no longer in krfbrc.

Reviewers: #kde_applications, aacid

Differential Revision: https://phabricator.kde.org/D18075
2019-01-16 00:15:38 +03:00
l10n daemon script
ff5ae6a885 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2019-01-06 05:37:01 +01:00
l10n daemon script
f8dfbee9ed GIT_SILENT made messages (after extraction) 2019-01-05 03:19:36 +01:00
l10n daemon script
d6bc236426 GIT_SILENT made messages (after extraction) 2018-12-26 03:14:47 +01:00
l10n daemon script
015518cb9f GIT_SILENT made messages (after extraction) 2018-12-21 03:18:13 +01:00
l10n daemon script
b2fcfeb7f5 GIT_SILENT made messages (after extraction) 2018-12-17 03:10:07 +01:00
l10n daemon script
77c6c35d3e GIT_SILENT made messages (after extraction) 2018-12-03 03:22:52 +01:00
l10n daemon script
d7380a93a3 GIT_SILENT made messages (after extraction) 2018-11-29 03:17:15 +01:00
l10n daemon script
8df92c41c4 GIT_SILENT made messages (after extraction) 2018-11-21 03:19:29 +01:00
l10n daemon script
546a588c18 GIT_SILENT made messages (after extraction) 2018-11-18 03:56:59 +01:00
l10n daemon script
e4fed2991a GIT_SILENT made messages (after extraction) 2018-11-16 03:51:49 +01:00
l10n daemon script
349b99ab47 GIT_SILENT made messages (after extraction) 2018-11-14 03:59:56 +01:00
l10n daemon script
927016cd85 GIT_SILENT made messages (after extraction) 2018-11-13 04:04:03 +01:00
l10n daemon script
abd7bf04ae GIT_SILENT made messages (after extraction) 2018-11-12 03:57:49 +01:00
Albert Astals Cid
8d19229593 GIT_SILENT Upgrade KDE Applications version to 19.03.70. 2018-11-10 08:46:09 +01:00
Albert Astals Cid
c8e4869c8a GIT_SILENT Upgrade KDE Applications version to 18.03.70. 2018-11-09 23:44:14 +01:00
21 changed files with 198 additions and 112 deletions

View File

@@ -1,8 +1,8 @@
cmake_minimum_required(VERSION 3.0)
# KDE Application Version, managed by release script
set (KDE_APPLICATIONS_VERSION_MAJOR "18")
set (KDE_APPLICATIONS_VERSION_MINOR "12")
set (KDE_APPLICATIONS_VERSION_MAJOR "19")
set (KDE_APPLICATIONS_VERSION_MINOR "04")
set (KDE_APPLICATIONS_VERSION_MICRO "3")
set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}")
@@ -11,10 +11,8 @@ project(krfb VERSION ${KDE_APPLICATIONS_VERSION})
set(QT_MIN_VERSION 5.6.0)
set(KF5_MIN_VERSION 5.31.0)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Widgets X11Extras)
find_package(ECM ${KF5_MIN_VERSION} NO_MODULE REQUIRED)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH})
include(KDEInstallDirs)
include(KDECMakeSettings)
@@ -24,11 +22,9 @@ include(ECMAddAppIcon)
include(ECMSetupVersion)
include(FeatureSummary)
ecm_setup_version(PROJECT
VARIABLE_PREFIX KRFB
VERSION_HEADER "krfb_version.h")
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Widgets X11Extras)
find_package(KF5 REQUIRED COMPONENTS
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
I18n
Completion
Config
@@ -60,17 +56,26 @@ if(WIN32)
set(CMAKE_REQUIRED_INCLUDES ${KDEWIN32_INCLUDES})
endif(WIN32)
add_definitions(${QT_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS})
add_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} )
set(CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
${CMAKE_MODULE_PATH}
add_definitions(
-DQT_DEPRECATED_WARNINGS
-DQT_DISABLE_DEPRECATED_BEFORE=0x050600
-DQT_USE_QSTRINGBUILDER
-DQT_NO_CAST_TO_ASCII
-DQT_NO_CAST_FROM_ASCII
-DQT_NO_CAST_FROM_BYTEARRAY
-DQT_STRICT_ITERATORS
-DQT_NO_URL_CAST_FROM_STRING
-DQT_NO_SIGNALS_SLOTS_KEYWORDS
-DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT
)
include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} )
find_package(LibVNCServer REQUIRED)
ecm_setup_version(PROJECT
VARIABLE_PREFIX KRFB
VERSION_HEADER "krfb_version.h")
include_directories ("${CMAKE_CURRENT_BINARY_DIR}/krfb"
"${CMAKE_CURRENT_SOURCE_DIR}/krfb"
@@ -79,7 +84,7 @@ include_directories ("${CMAKE_CURRENT_BINARY_DIR}/krfb"
if(Q_WS_X11)
if(NOT X11_XTest_FOUND)
message(FATAL_ERROR "krfb requires the libXtst (http://xorg.freedesktop.org) to be built")
message(FATAL_ERROR "krfb requires the libXtst (https://xorg.freedesktop.org) to be built")
endif(NOT X11_XTest_FOUND)
endif(Q_WS_X11)

View File

@@ -73,7 +73,7 @@ to help you perform a task.
<para>
Please report any problems or feature requests to the &kde; mailing
lists or file a bug at <ulink
url="http://bugs.kde.org">http://bugs.kde.org</ulink>.
url="https://bugs.kde.org">https://bugs.kde.org</ulink>.
</para>
</chapter>

View File

@@ -77,6 +77,6 @@
"krfb/framebuffer"
],
"Version": "0.1",
"Website": "http://www.kde.org"
"Website": "https://www.kde.org"
}
}

View File

@@ -77,6 +77,6 @@
"krfb/framebuffer"
],
"Version": "0.1",
"Website": "http://www.kde.org"
"Website": "https://www.kde.org"
}
}

View File

@@ -598,7 +598,7 @@ QList<QRect> XCBFrameBuffer::modifiedTiles() {
} else {
// not using shared memory
// will use just xcb_image_get() and copy pixels
foreach(const QRect &r, tiles) {
for (const QRect& r : qAsConst(tiles)) {
// I did not find XGetSubImage() analog in XCB!!
// need function that copies pixels from one image to another
xcb_image_t *damagedImage = xcb_image_get(

View File

@@ -73,6 +73,10 @@ ki18n_wrap_ui (krfb_SRCS
ui/mainwidget.ui
)
qt5_add_resources(krfb_SRCS
krfb.qrc
)
add_executable (krfb
${krfb_SRCS}
)

View File

@@ -55,7 +55,7 @@ ConnectionDialog<UI>::ConnectionDialog(QWidget *parent)
m_connectWidget = new QWidget(this);
m_ui.setupUi(m_connectWidget);
m_ui.pixmapLabel->setPixmap(QIcon::fromTheme("krfb").pixmap(128));
m_ui.pixmapLabel->setPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(128));
KGuiItem accept = KStandardGuiItem::ok();
accept.setText(i18n("Accept Connection"));

View File

@@ -65,17 +65,17 @@ PendingInvitationsRfbClient::~PendingInvitationsRfbClient()
void PendingInvitationsRfbClient::processNewClient()
{
QString host = peerAddress(m_rfbClient->sock) + ':' + QString::number(peerPort(m_rfbClient->sock));
QString host = peerAddress(m_rfbClient->sock) + QLatin1Char(':') + QString::number(peerPort(m_rfbClient->sock));
if (d->askOnConnect == false) {
KNotification::event("NewConnectionAutoAccepted",
KNotification::event(QStringLiteral("NewConnectionAutoAccepted"),
i18n("Accepted connection from %1", host));
accept(new InvitationsRfbClient(m_rfbClient, parent()));
} else {
KNotification::event("NewConnectionOnHold",
KNotification::event(QStringLiteral("NewConnectionOnHold"),
i18n("Received connection from %1, on hold (waiting for confirmation)",
host));

View File

@@ -47,22 +47,17 @@ void InvitationsRfbServer::init()
i18n("%1@%2 (shared desktop)",
KUser().loginName(),
QHostInfo::localHostName()),
"_rfb._tcp",
QStringLiteral("_rfb._tcp"),
KrfbConfig::port());
instance->setListeningAddress("0.0.0.0");
instance->setListeningPort(KrfbConfig::port());
instance->setPasswordRequired(true);
instance->m_wallet = nullptr;
if (KrfbConfig::noWallet()) {
instance->walletOpened(false);
}
else {
instance->m_wallet = Wallet::openWallet(
Wallet::NetworkWallet(), 0, Wallet::Asynchronous);
if(instance->m_wallet) {
connect(instance->m_wallet, &KWallet::Wallet::walletOpened,
instance, &InvitationsRfbServer::walletOpened);
}
instance->walletOpened(false);
} else {
instance->openKWallet();
}
}
@@ -115,8 +110,8 @@ void InvitationsRfbServer::toggleUnattendedAccess(bool allow)
InvitationsRfbServer::InvitationsRfbServer()
{
m_desktopPassword = readableRandomString(4)+'-'+readableRandomString(3);
m_unattendedPassword = readableRandomString(4)+'-'+readableRandomString(3);
m_desktopPassword = readableRandomString(4) + QLatin1Char('-') + readableRandomString(3);
m_unattendedPassword = readableRandomString(4) + QLatin1Char('-') + readableRandomString(3);
KConfigGroup krfbConfig(KSharedConfig::openConfig(),"Security");
m_allowUnattendedAccess = krfbConfig.readEntry(
"allowUnattendedAccess", QVariant(false)).toBool();
@@ -125,19 +120,12 @@ InvitationsRfbServer::InvitationsRfbServer()
InvitationsRfbServer::~InvitationsRfbServer()
{
stop();
KConfigGroup krfbConfig(KSharedConfig::openConfig(),"Security");
krfbConfig.writeEntry("allowUnattendedAccess",m_allowUnattendedAccess);
if(!KrfbConfig::noWallet()) {
if (m_wallet && m_wallet->isOpen()) {
if( (m_wallet->currentFolder()=="krfb") ||
((m_wallet->hasFolder("krfb") || m_wallet->createFolder("krfb")) &&
m_wallet->setFolder("krfb")) ) {
m_wallet->writePassword("desktopSharingPassword",m_desktopPassword);
m_wallet->writePassword("unattendedAccessPassword",m_unattendedPassword);
}
}
KConfigGroup krfbConfig(KSharedConfig::openConfig(), "Security");
krfbConfig.writeEntry("allowUnattendedAccess", m_allowUnattendedAccess);
if (!KrfbConfig::noWallet() && m_wallet) {
closeKWallet();
} else {
krfbConfig.writeEntry("desktopPassword",
KStringHandler::obscure(m_desktopPassword));
@@ -153,22 +141,47 @@ PendingRfbClient* InvitationsRfbServer::newClient(rfbClientPtr client)
return new PendingInvitationsRfbClient(client, this);
}
void InvitationsRfbServer::openKWallet()
{
m_wallet = Wallet::openWallet(Wallet::NetworkWallet(), 0, Wallet::Asynchronous);
if (m_wallet) {
connect(instance->m_wallet, &KWallet::Wallet::walletOpened,
this, &InvitationsRfbServer::walletOpened);
}
}
void InvitationsRfbServer::closeKWallet()
{
if (m_wallet && m_wallet->isOpen()) {
const QString krfbFolderName = QStringLiteral("krfb");
if ((m_wallet->currentFolder() == krfbFolderName) ||
((m_wallet->hasFolder(krfbFolderName) || m_wallet->createFolder(krfbFolderName)) &&
m_wallet->setFolder(krfbFolderName)) ) {
m_wallet->writePassword(QStringLiteral("desktopSharingPassword"), m_desktopPassword);
m_wallet->writePassword(QStringLiteral("unattendedAccessPassword"), m_unattendedPassword);
}
delete m_wallet; // closes the wallet
m_wallet = nullptr;
}
}
void InvitationsRfbServer::walletOpened(bool opened)
{
QString desktopPassword;
QString unattendedPassword;
Q_ASSERT(m_wallet);
const QString krfbFolderName = QStringLiteral("krfb");
if( opened &&
( m_wallet->hasFolder("krfb") || m_wallet->createFolder("krfb") ) &&
m_wallet->setFolder("krfb") ) {
( m_wallet->hasFolder(krfbFolderName) || m_wallet->createFolder(krfbFolderName) ) &&
m_wallet->setFolder(krfbFolderName) ) {
if(m_wallet->readPassword("desktopSharingPassword", desktopPassword)==0 &&
if(m_wallet->readPassword(QStringLiteral("desktopSharingPassword"), desktopPassword)==0 &&
!desktopPassword.isEmpty()) {
m_desktopPassword = desktopPassword;
emit passwordChanged(m_desktopPassword);
}
if(m_wallet->readPassword("unattendedAccessPassword", unattendedPassword)==0 &&
if(m_wallet->readPassword(QStringLiteral("unattendedAccessPassword"), unattendedPassword)==0 &&
!unattendedPassword.isEmpty()) {
m_unattendedPassword = unattendedPassword;
}
@@ -218,7 +231,7 @@ QString InvitationsRfbServer::readableRandomString(int length)
(c == '0')) {
continue;
}
str += c;
str += QLatin1Char(c);
length--;
}
return str;

View File

@@ -50,6 +50,8 @@ public Q_SLOTS:
bool start() override;
void stop() override;
void toggleUnattendedAccess(bool allow);
void openKWallet();
void closeKWallet();
protected:
InvitationsRfbServer();

6
krfb/krfb.qrc Normal file
View File

@@ -0,0 +1,6 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/kxmlgui5/krfb">
<file>krfbui.rc</file>
</qresource>
</RCC>

7
krfb/krfbui.rc Normal file
View File

@@ -0,0 +1,7 @@
<!DOCTYPE gui SYSTEM "kpartgui.dtd">
<gui name="krfb" version="0">
<MenuBar>
</MenuBar>
</gui>

View File

@@ -78,7 +78,7 @@ int main(int argc, char *argv[])
KLocalizedString::setApplicationDomain("krfb");
KAboutData aboutData("krfb",
KAboutData aboutData(QStringLiteral("krfb"),
i18n("Desktop Sharing"),
QStringLiteral(KRFB_VERSION_STRING),
i18n(description),
@@ -92,12 +92,12 @@ int main(int argc, char *argv[])
"(c) 1999, AT&T Laboratories Boston\n"));
aboutData.addAuthor(i18n("George Goldberg"),
i18n("Telepathy tubes support"),
"george.goldberg@collabora.co.uk");
QStringLiteral("george.goldberg@collabora.co.uk"));
aboutData.addAuthor(i18n("George Kiagiadakis"),
QString(),
"george.kiagiadakis@collabora.co.uk");
aboutData.addAuthor(i18n("Alessandro Praduroux"), i18n("KDE4 porting"), "pradu@pradu.it");
aboutData.addAuthor(i18n("Tim Jansen"), i18n("Original author"), "tim@tjansen.de");
QStringLiteral("george.kiagiadakis@collabora.co.uk"));
aboutData.addAuthor(i18n("Alessandro Praduroux"), i18n("KDE4 porting"), QStringLiteral("pradu@pradu.it"));
aboutData.addAuthor(i18n("Tim Jansen"), i18n("Original author"), QStringLiteral("tim@tjansen.de"));
aboutData.addCredit(i18n("Johannes E. Schindelin"),
i18n("libvncserver"));
aboutData.addCredit(i18n("Const Kaplinsky"),
@@ -107,18 +107,18 @@ int main(int argc, char *argv[])
aboutData.addCredit(i18n("AT&T Laboratories Boston"),
i18n("original VNC encoders and "
"protocol design"));
QCommandLineParser parser;
KAboutData::setApplicationData(aboutData);
parser.addVersionOption();
parser.addHelpOption();
QCommandLineParser parser;
aboutData.setupCommandLine(&parser);
const QCommandLineOption nodialogOption(QStringList{ QStringLiteral("nodialog") }, i18n("Do not show the invitations management dialog at startup"));
parser.addOption(nodialogOption);
parser.process(app);
aboutData.processCommandLine(&parser);
KDBusService service(KDBusService::Unique, &app);
parser.addOption(QCommandLineOption(QStringList() << QLatin1String("nodialog"), i18n("Do not show the invitations management dialog at startup")));
app.setQuitOnLastWindowClosed(false);
if (!checkX11Capabilities()) {
@@ -139,7 +139,7 @@ int main(int argc, char *argv[])
mainWindow.hide();
} else if (app.isSessionRestored() && KMainWindow::canBeRestored(1)) {
mainWindow.restore(1, false);
} else if (!parser.isSet("nodialog")) {
} else if (!parser.isSet(nodialogOption)) {
mainWindow.show();
}

View File

@@ -18,6 +18,7 @@
#include <KConfigDialog>
#include <KLocalizedString>
#include <KMessageBox>
#include <KMessageWidget>
#include <KStandardAction>
#include <KActionCollection>
#include <KLineEdit>
@@ -48,7 +49,20 @@ class Security: public QWidget, public Ui::Security
public:
Security(QWidget *parent = nullptr) : QWidget(parent) {
setupUi(this);
walletWarning = new KMessageWidget(this);
walletWarning->setText(i18n("Storing passwords in config file is insecure!"));
walletWarning->setCloseButtonVisible(false);
walletWarning->setMessageType(KMessageWidget::Warning);
walletWarning->hide();
vboxLayout->addWidget(walletWarning);
// show warning when "noWallet" checkbox is checked
QObject::connect(kcfg_noWallet, &QCheckBox::toggled, [this](bool checked){
walletWarning->setVisible(checked);
});
}
KMessageWidget *walletWarning = nullptr;
};
class ConfigFramebuffer: public QWidget, public Ui::Framebuffer
@@ -98,7 +112,7 @@ MainWindow::MainWindow(QWidget *parent)
QWidget *mainWidget = new QWidget;
m_ui.setupUi(mainWidget);
m_ui.krfbIconLabel->setPixmap(QIcon::fromTheme("krfb").pixmap(128));
m_ui.krfbIconLabel->setPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(128));
m_ui.enableUnattendedCheckBox->setChecked(
InvitationsRfbServer::instance->allowUnattendedAccess());
@@ -121,14 +135,14 @@ MainWindow::MainWindow(QWidget *parent)
// Figure out the address
int port = KrfbConfig::port();
QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
foreach(const QNetworkInterface & interface, interfaceList) {
const QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
for (const QNetworkInterface& interface : interfaceList) {
if(interface.flags() & QNetworkInterface::IsLoopBack)
continue;
if(interface.flags() & QNetworkInterface::IsRunning &&
!interface.addressEntries().isEmpty())
m_ui.addressDisplayLabel->setText(QString("%1 : %2")
m_ui.addressDisplayLabel->setText(QStringLiteral("%1 : %2")
.arg(interface.addressEntries().first().ip().toString())
.arg(port));
}
@@ -157,7 +171,7 @@ void MainWindow::editPassword()
{
if(m_passwordEditable) {
m_passwordEditable = false;
m_ui.passwordEditButton->setIcon(QIcon::fromTheme("document-properties"));
m_ui.passwordEditButton->setIcon(QIcon::fromTheme(QStringLiteral("document-properties")));
m_ui.passwordGridLayout->removeWidget(m_passwordLineEdit);
InvitationsRfbServer::instance->setDesktopPassword(
m_passwordLineEdit->text());
@@ -166,7 +180,7 @@ void MainWindow::editPassword()
m_passwordLineEdit->setVisible(false);
} else {
m_passwordEditable = true;
m_ui.passwordEditButton->setIcon(QIcon::fromTheme("document-save"));
m_ui.passwordEditButton->setIcon(QIcon::fromTheme(QStringLiteral("document-save")));
m_ui.passwordGridLayout->addWidget(m_passwordLineEdit,0,0);
m_passwordLineEdit->setText(
InvitationsRfbServer::instance->desktopPassword());
@@ -198,7 +212,7 @@ void MainWindow::toggleDesktopSharing(bool enable)
if(m_passwordEditable) {
m_passwordEditable = false;
m_passwordLineEdit->setVisible(false);
m_ui.passwordEditButton->setIcon(QIcon::fromTheme("document-properties"));
m_ui.passwordEditButton->setIcon(QIcon::fromTheme(QStringLiteral("document-properties")));
}
}
}
@@ -226,19 +240,21 @@ void MainWindow::aboutUnattendedMode()
void MainWindow::showConfiguration()
{
static QString s_prevFramebufferPlugin;
static bool s_prevNoWallet;
// ^^ needs to be static, because lambda will be called long time
// after showConfiguration() ends, so auto variable would go out of scope
// save previously selected framebuffer plugin config
s_prevFramebufferPlugin = KrfbConfig::preferredFrameBufferPlugin();
s_prevNoWallet = KrfbConfig::noWallet();
if (KConfigDialog::showDialog("settings")) {
if (KConfigDialog::showDialog(QStringLiteral("settings"))) {
return;
}
KConfigDialog *dialog = new KConfigDialog(this, "settings", KrfbConfig::self());
dialog->addPage(new TCP, i18n("Network"), "network-wired");
dialog->addPage(new Security, i18n("Security"), "security-high");
dialog->addPage(new ConfigFramebuffer, i18n("Screen capture"), "video-display");
KConfigDialog *dialog = new KConfigDialog(this, QStringLiteral("settings"), KrfbConfig::self());
dialog->addPage(new TCP, i18n("Network"), QStringLiteral("network-wired"));
dialog->addPage(new Security, i18n("Security"), QStringLiteral("security-high"));
dialog->addPage(new ConfigFramebuffer, i18n("Screen capture"), QStringLiteral("video-display"));
dialog->show();
connect(dialog, &KConfigDialog::settingsChanged, [this] () {
// check if framebuffer plugin config has changed
@@ -246,6 +262,19 @@ void MainWindow::showConfiguration()
KMessageBox::information(this, i18n("To apply framebuffer plugin setting, "
"you need to restart the program."));
}
// check if kwallet config has changed
if (s_prevNoWallet != KrfbConfig::noWallet()) {
// try to apply settings immediately
if (KrfbConfig::noWallet()) {
InvitationsRfbServer::instance->closeKWallet();
} else {
InvitationsRfbServer::instance->openKWallet();
// erase stored passwords from krfbconfig file
KConfigGroup securityConfigGroup(KSharedConfig::openConfig(), "Security");
securityConfigGroup.deleteEntry("desktopPassword");
securityConfigGroup.deleteEntry("unattendedPassword");
}
}
});
}

View File

@@ -112,6 +112,7 @@
<caption xml:lang="ca">Compartint l'escriptori amb el Krfb</caption>
<caption xml:lang="ca-valencia">Compartint l'escriptori amb el Krfb</caption>
<caption xml:lang="cs">Sdílím pracovní plochu pomocí Krfb</caption>
<caption xml:lang="da">Deler skrivebord med Krfb</caption>
<caption xml:lang="de">Freigabe der Arbeitsfläche mit Krfb</caption>
<caption xml:lang="en-GB">Sharing desktop with Krfb</caption>
<caption xml:lang="es">Compartiendo el escritorio con Krfb</caption>
@@ -120,6 +121,7 @@
<caption xml:lang="gl">Compartindo o escritorio con Krfb</caption>
<caption xml:lang="id">Berbagi desktop dengan Krfb</caption>
<caption xml:lang="it">Condivisone del desktop con Krfb</caption>
<caption xml:lang="ko">Krfb로 데스크톱 공유</caption>
<caption xml:lang="nl">Bureaublad delen met Krfb</caption>
<caption xml:lang="pl">Udostępnienie pulpitu przy użyciu Krfb</caption>
<caption xml:lang="pt">Partilha do ecrã com o Krfb</caption>

View File

@@ -43,7 +43,7 @@ struct RfbClient::Private
RfbClient::RfbClient(rfbClientPtr client, QObject* parent)
: QObject(parent), d(new Private(client))
{
d->remoteAddressString = peerAddress(d->client->sock) + ':' +
d->remoteAddressString = peerAddress(d->client->sock) + QLatin1Char(':') +
QString::number(peerPort(d->client->sock));
d->notifier = new QSocketNotifier(client->sock, QSocketNotifier::Read, this);
@@ -221,10 +221,10 @@ bool PendingRfbClient::vncAuthCheckPassword(const QByteArray& password, const QB
bzero(passwd, MAXPWLEN);
if (!password.isEmpty()) {
strncpy(passwd, password,
strncpy(passwd, password.constData(),
(MAXPWLEN <= password.size()) ? MAXPWLEN : password.size());
}
rfbEncryptBytes(challenge, passwd);
return memcmp(challenge, encryptedPassword, encryptedPassword.size()) == 0;
return memcmp(challenge, encryptedPassword.constData(), encryptedPassword.size()) == 0;
}

View File

@@ -120,7 +120,7 @@ void RfbServerManager::init()
d->fb = FrameBufferManager::instance()->frameBuffer(QApplication::desktop()->winId());
d->myCursor = rfbMakeXCursor(19, 19, (char *) cur, (char *) mask);
d->myCursor->cleanup = false;
d->desktopName = QString("%1@%2 (shared desktop)") //FIXME check if we can use utf8
d->desktopName = QStringLiteral("%1@%2 (shared desktop)") //FIXME check if we can use utf8
.arg(KUser().loginName(),QHostInfo::localHostName()).toLatin1();
connect(&d->rfbUpdateTimer, &QTimer::timeout, this, &RfbServerManager::updateScreens);
@@ -132,7 +132,7 @@ void RfbServerManager::updateScreens()
QList<QRect> rects = d->fb->modifiedTiles();
QPoint currentCursorPos = QCursor::pos();
Q_FOREACH(RfbServer *server, d->servers) {
for (RfbServer* server : qAsConst(d->servers)) {
server->updateScreen(rects);
server->updateCursorPosition(currentCursorPos);
}
@@ -140,8 +140,8 @@ void RfbServerManager::updateScreens()
//update() might disconnect some of the clients, which will synchronously
//call the removeClient() method and will change d->clients, so we need
//to copy the set here to avoid problems.
QSet<RfbClient*> clients = d->clients;
Q_FOREACH(RfbClient *client, clients) {
const QSet<RfbClient*> clients = d->clients;
for (RfbClient* client : clients) {
client->update();
}
}
@@ -151,10 +151,8 @@ void RfbServerManager::cleanup()
//qDebug();
//copy because d->servers is going to be modified while we delete the servers
QSet<RfbServer*> servers = d->servers;
Q_FOREACH(RfbServer *server, servers) {
delete server;
}
const QSet<RfbServer*> servers = d->servers;
qDeleteAll(servers);
Q_ASSERT(d->servers.isEmpty());
Q_ASSERT(d->clients.isEmpty());
@@ -213,7 +211,7 @@ void RfbServerManager::addClient(RfbClient* cc)
}
d->clients.insert(cc);
KNotification::event("UserAcceptsConnection",
KNotification::event(QStringLiteral("UserAcceptsConnection"),
i18n("The remote user %1 is now connected.", cc->name()));
Q_EMIT clientConnected(cc);
@@ -228,7 +226,7 @@ void RfbServerManager::removeClient(RfbClient* cc)
d->rfbUpdateTimer.stop();
}
KNotification::event("ConnectionClosed", i18n("The remote user %1 disconnected.", cc->name()));
KNotification::event(QStringLiteral("ConnectionClosed"), i18n("The remote user %1 disconnected.", cc->name()));
Q_EMIT clientDisconnected(cc);
}

View File

@@ -36,19 +36,19 @@ QString peerAddress(int sock)
if (getpeername(sock, &sa, &salen) == 0) {
if (sa.sa_family == AF_INET) {
struct sockaddr_in *si = (struct sockaddr_in *)&sa;
return QString(inet_ntoa(si->sin_addr));
return QString::fromLatin1(inet_ntoa(si->sin_addr));
}
if (sa.sa_family == AF_INET6) {
char inetbuf[ADDR_SIZE];
inet_ntop(sa.sa_family, &sa, inetbuf, ADDR_SIZE);
return QString(inetbuf);
return QString::fromLatin1(inetbuf);
}
return QString("not a network address");
return QStringLiteral("not a network address");
}
return QString("unable to determine...");
return QStringLiteral("unable to determine...");
}
unsigned short peerPort(int sock)
@@ -75,19 +75,19 @@ QString localAddress(int sock)
if (getsockname(sock, &sa, &salen) == 0) {
if (sa.sa_family == AF_INET) {
struct sockaddr_in *si = (struct sockaddr_in *)&sa;
return QString(inet_ntoa(si->sin_addr));
return QString::fromLatin1(inet_ntoa(si->sin_addr));
}
if (sa.sa_family == AF_INET6) {
char inetbuf[ADDR_SIZE];
inet_ntop(sa.sa_family, &sa, inetbuf, ADDR_SIZE);
return QString(inetbuf);
return QString::fromLatin1(inetbuf);
}
return QString("not a network address");
return QStringLiteral("not a network address");
}
return QString("unable to determine...");
return QStringLiteral("unable to determine...");
}
unsigned short localPort(int sock)

View File

@@ -96,7 +96,7 @@ ClientActions::~ClientActions()
TrayIcon::TrayIcon(QWidget *mainWindow)
: KStatusNotifierItem(mainWindow)
{
setIconByPixmap(QIcon::fromTheme("krfb").pixmap(22, 22, QIcon::Disabled));
setIconByPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(22, 22, QIcon::Disabled));
setToolTipTitle(i18n("Desktop Sharing - disconnected"));
setCategory(KStatusNotifierItem::ApplicationStatus);
@@ -113,7 +113,7 @@ TrayIcon::TrayIcon(QWidget *mainWindow)
void TrayIcon::onClientConnected(RfbClient* client)
{
if (m_clientActions.isEmpty()) { //first client connected
setIconByName("krfb");
setIconByName(QStringLiteral("krfb"));
setToolTipTitle(i18n("Desktop Sharing - connected with %1", client->name()));
setStatus(KStatusNotifierItem::Active);
} else { //Nth client connected, N != 1
@@ -129,7 +129,7 @@ void TrayIcon::onClientDisconnected(RfbClient* client)
delete actions;
if (m_clientActions.isEmpty()) {
setIconByPixmap(QIcon::fromTheme("krfb").pixmap(22, 22, QIcon::Disabled));
setIconByPixmap(QIcon::fromTheme(QStringLiteral("krfb")).pixmap(22, 22, QIcon::Disabled));
setToolTipTitle(i18n("Desktop Sharing - disconnected"));
setStatus(KStatusNotifierItem::Passive);
} else if (m_clientActions.size() == 1) { //clients number dropped back to 1

View File

@@ -21,6 +21,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="kcfg_noWallet">
<property name="text">
<string>Do not store passwords using KDE wallet</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation">

View File

@@ -10,12 +10,6 @@
</rect>
</property>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QCheckBox" name="kcfg_publishService" >
<property name="text" >
@@ -37,14 +31,20 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" >
<property name="margin" >
<layout class="QFormLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
<property name="topMargin">
<number>0</number>
</property>
<item>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label" >
<property name="text" >
<string>Listening port:</string>
@@ -54,7 +54,7 @@
</property>
</widget>
</item>
<item>
<item row="0" column="1">
<widget class="QSpinBox" name="kcfg_port" >
<property name="enabled" >
<bool>false</bool>
@@ -66,6 +66,19 @@
</item>
</layout>
</item>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<tabstops>