• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdenetwork API Reference
  • KDE Home
  • Contact Us
 

krfb

  • sources
  • kde-4.14
  • kdenetwork
  • krfb
  • krfb
mainwindow.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2  Copyright (C) 2007 Alessandro Praduroux <pradu@pradu.it>
3  Copyright (C) 2013 Amandeep Singh <aman.dedman@gmail.com>
4 
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 */
10 #include "mainwindow.h"
11 #include "invitationsrfbserver.h"
12 
13 #include "krfbconfig.h"
14 #include "ui_configtcp.h"
15 #include "ui_configsecurity.h"
16 
17 #include <KConfigDialog>
18 #include <KIcon>
19 #include <KLocale>
20 #include <KMessageBox>
21 #include <KStandardGuiItem>
22 #include <KSystemTimeZone>
23 #include <KToolInvocation>
24 #include <KStandardAction>
25 #include <KActionCollection>
26 #include <KLineEdit>
27 #include <KNewPasswordDialog>
28 
29 #include <QtGui/QWidget>
30 #include <QtGui/QSizePolicy>
31 #include <QtNetwork/QNetworkInterface>
32 
33 #ifdef KRFB_WITH_KDE_TELEPATHY
34 #include "tubesrfbserver.h"
35 #include <TelepathyQt/PendingReady>
36 #include <TelepathyQt/PendingChannelRequest>
37 #include <KTp/actions.h>
38 #include <KTp/Widgets/contact-view-widget.h>
39 #include <KTp/Models/contacts-list-model.h>
40 #include <KTp/Models/contacts-filter-model.h>
41 #endif
42 
43 class TCP: public QWidget, public Ui::TCP
44 {
45 public:
46  TCP(QWidget *parent = 0) : QWidget(parent) {
47  setupUi(this);
48  }
49 };
50 
51 class Security: public QWidget, public Ui::Security
52 {
53 public:
54  Security(QWidget *parent = 0) : QWidget(parent) {
55  setupUi(this);
56  }
57 };
58 
59 
60 MainWindow::MainWindow(QWidget *parent)
61  : KXmlGuiWindow(parent)
62 {
63  setAttribute(Qt::WA_DeleteOnClose, false);
64 
65  m_passwordEditable = false;
66  m_passwordLineEdit = new KLineEdit(this);
67  m_passwordLineEdit->setVisible(false);
68  m_passwordLineEdit->setAlignment(Qt::AlignHCenter);
69 
70  QWidget *mainWidget = new QWidget;
71  m_ui.setupUi(mainWidget);
72  m_ui.krfbIconLabel->setPixmap(KIcon("krfb").pixmap(128));
73  m_ui.enableUnattendedCheckBox->setChecked(
74  InvitationsRfbServer::instance->allowUnattendedAccess());
75 
76  setCentralWidget(mainWidget);
77 
78  connect(m_ui.passwordEditButton,SIGNAL(clicked()),
79  this,SLOT(editPassword()));
80  connect(m_ui.enableSharingCheckBox,SIGNAL(toggled(bool)),
81  this, SLOT(toggleDesktopSharing(bool)));
82  connect(m_ui.enableUnattendedCheckBox, SIGNAL(toggled(bool)),
83  InvitationsRfbServer::instance, SLOT(toggleUnattendedAccess(bool)));
84  connect(m_ui.unattendedPasswordButton, SIGNAL(clicked()),
85  this, SLOT(editUnattendedPassword()));
86  connect(m_ui.addressAboutButton, SIGNAL(clicked()),
87  this, SLOT(aboutConnectionAddress()));
88  connect(m_ui.unattendedAboutButton, SIGNAL(clicked()),
89  this, SLOT(aboutUnattendedMode()));
90  connect(InvitationsRfbServer::instance, SIGNAL(passwordChanged(const QString&)),
91  this, SLOT(passwordChanged(const QString&)));
92 
93  // Figure out the address
94  int port = KrfbConfig::port();
95  QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
96  foreach(const QNetworkInterface & interface, interfaceList) {
97  if(interface.flags() & QNetworkInterface::IsLoopBack)
98  continue;
99 
100  if(interface.flags() & QNetworkInterface::IsRunning &&
101  !interface.addressEntries().isEmpty())
102  m_ui.addressDisplayLabel->setText(QString("%1 : %2")
103  .arg(interface.addressEntries().first().ip().toString())
104  .arg(port));
105  }
106 
107  //Figure out the password
108  m_ui.passwordDisplayLabel->setText(
109  InvitationsRfbServer::instance->desktopPassword());
110 
111 
112 #ifdef KRFB_WITH_KDE_TELEPATHY
113 
114  m_contactViewWidget = new KTp::ContactViewWidget(
115  TubesRfbServer::instance->contactsListModel(), this);
116 
117  m_contactViewWidget->setEnabled(false);
118  connect(m_ui.enableSharingCheckBox, SIGNAL(toggled(bool)),
119  m_contactViewWidget, SLOT(setEnabled(bool)));
120  m_contactViewWidget->setIconSize(QSize(32,32));
121  m_contactViewWidget->setMinimumWidth(120);
122  m_contactViewWidget->setMaximumWidth(360);
123  m_contactViewWidget->setMinimumHeight(300);
124  m_contactViewWidget->contactFilterLineEdit()->setClickMessage(i18n("Search in Contacts..."));
125  m_contactViewWidget->filter()->setPresenceTypeFilterFlags(KTp::ContactsFilterModel::ShowOnlyConnected);
126  m_contactViewWidget->filter()->setTubesFilterStrings(QStringList("rfb"));
127  m_contactViewWidget->filter()->setCapabilityFilterFlags(KTp::ContactsFilterModel::FilterByTubes);
128 
129  m_contactViewWidget->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
130  m_ui.tpContactsLayout->addWidget(m_contactViewWidget);
131  connect(m_contactViewWidget, SIGNAL(contactDoubleClicked(const Tp::AccountPtr &, const KTp::ContactPtr &)),
132  this, SLOT(onContactDoubleClicked(const Tp::AccountPtr &, const KTp::ContactPtr &)));
133 #endif
134 
135 
136  KStandardAction::quit(QCoreApplication::instance(), SLOT(quit()), actionCollection());
137  KStandardAction::preferences(this, SLOT(showConfiguration()), actionCollection());
138 
139  setupGUI();
140 
141  setAutoSaveSettings();
142 }
143 
144 MainWindow::~MainWindow()
145 {
146 }
147 
148 void MainWindow::editPassword()
149 {
150  if(m_passwordEditable) {
151  m_passwordEditable = false;
152  m_ui.passwordEditButton->setIcon(KIcon("document-properties"));
153  m_ui.passwordGridLayout->removeWidget(m_passwordLineEdit);
154  InvitationsRfbServer::instance->setDesktopPassword(
155  m_passwordLineEdit->text());
156  m_ui.passwordDisplayLabel->setText(
157  InvitationsRfbServer::instance->desktopPassword());
158  m_passwordLineEdit->setVisible(false);
159  } else {
160  m_passwordEditable = true;
161  m_ui.passwordEditButton->setIcon(KIcon("document-save"));
162  m_ui.passwordGridLayout->addWidget(m_passwordLineEdit,0,0);
163  m_passwordLineEdit->setText(
164  InvitationsRfbServer::instance->desktopPassword());
165  m_passwordLineEdit->setVisible(true);
166  m_passwordLineEdit->setFocus(Qt::MouseFocusReason);
167  }
168 }
169 
170 void MainWindow::editUnattendedPassword()
171 {
172  KNewPasswordDialog dialog(this);
173  dialog.setPrompt(i18n("Enter a new password for Unattended Access"));
174  if(dialog.exec()) {
175  InvitationsRfbServer::instance->setUnattendedPassword(dialog.password());
176  }
177 }
178 
179 void MainWindow::toggleDesktopSharing(bool enable)
180 {
181  if(enable) {
182  if(!InvitationsRfbServer::instance->start()) {
183  KMessageBox::error(this,
184  i18n("Failed to start the krfb server. Desktop sharing "
185  "will not work. Try setting another port in the settings "
186  "and restart krfb."));
187  }
188  } else {
189  InvitationsRfbServer::instance->stop();
190  if(m_passwordEditable) {
191  m_passwordEditable = false;
192  m_passwordLineEdit->setVisible(false);
193  m_ui.passwordEditButton->setIcon(KIcon("document-properties"));
194  }
195  }
196 }
197 
198 void MainWindow::passwordChanged(const QString& password)
199 {
200  m_passwordLineEdit->setText(password);
201  m_ui.passwordDisplayLabel->setText(password);
202 }
203 
204 void MainWindow::aboutConnectionAddress()
205 {
206  KMessageBox::about(this,
207  i18n("This field contains the address of your computer and the port number, separated by a colon.\n\nThe address is just a hint - you can use any address that can reach your computer.\n\nDesktop Sharing tries to guess your address from your network configuration, but does not always succeed in doing so.\n\nIf your computer is behind a firewall it may have a different address or be unreachable for other computers."),
208  i18n("KDE Desktop Sharing"));
209 }
210 
211 void MainWindow::aboutUnattendedMode()
212 {
213  KMessageBox::about(this,
214  i18n("Any remote user with normal desktop sharing password will have to be authenticated.\n\nIf unattended access is on, and the remote user provides unattended mode password, desktop sharing access will be granted without explicit confirmation."),
215  i18n("KDE Desktop Sharing"));
216 }
217 
218 #ifdef KRFB_WITH_KDE_TELEPATHY
219 
220 void MainWindow::onContactDoubleClicked(const Tp::AccountPtr &account, const KTp::ContactPtr &contact)
221 {
222  Tp::PendingOperation *op = KTp::Actions::startDesktopSharing(account, contact);
223  connect(op, SIGNAL(finished(Tp::PendingOperation*)),
224  this, SLOT(pendingDesktopShareFinished(Tp::PendingOperation*)));
225 }
226 
227 void MainWindow::pendingDesktopShareFinished(Tp::PendingOperation *operation)
228 {
229  if(operation->isError()) {
230  KMessageBox::error(this,
231  operation->errorName() + ": " + operation->errorMessage());
232  }
233 }
234 
235 #endif
236 
237 void MainWindow::showConfiguration()
238 {
239  if (KConfigDialog::showDialog("settings")) {
240  return;
241  }
242 
243  KConfigDialog *dialog = new KConfigDialog(this, "settings", KrfbConfig::self());
244  dialog->addPage(new TCP, i18n("Network"), "network-workgroup");
245  dialog->addPage(new Security, i18n("Security"), "security-high");
246  dialog->setHelp(QString(), "krfb");
247  dialog->show();
248 }
249 
250 void MainWindow::readProperties(const KConfigGroup& group)
251 {
252  if (group.readEntry("Visible", true)) {
253  show();
254  }
255  KMainWindow::readProperties(group);
256 }
257 
258 void MainWindow::saveProperties(KConfigGroup& group)
259 {
260  group.writeEntry("Visible", isVisible());
261  KMainWindow::saveProperties(group);
262 }
263 
264 #include "mainwindow.moc"
MainWindow::saveProperties
virtual void saveProperties(KConfigGroup &group)
Definition: mainwindow.cpp:258
QWidget
InvitationsRfbServer::setUnattendedPassword
void setUnattendedPassword(const QString &)
Definition: invitationsrfbserver.cpp:78
QWidget::setupUi
void setupUi(QWidget *widget)
QNetworkInterface::flags
InterfaceFlags flags() const
QSizePolicy
MainWindow::readProperties
virtual void readProperties(const KConfigGroup &group)
Definition: mainwindow.cpp:250
KXmlGuiWindow
krfbconfig.h
mainwindow.h
MainWindow::MainWindow
MainWindow(QWidget *parent=0)
Definition: mainwindow.cpp:60
MainWindow::showConfiguration
void showConfiguration()
Definition: mainwindow.cpp:237
KrfbConfig::port
static int port()
Get This is the port on which krfb will listen.
Definition: krfbconfig.h:31
QCoreApplication::instance
QCoreApplication * instance()
TubesRfbServer::instance
static TubesRfbServer * instance
Definition: tubesrfbserver.h:36
QString
QList
QNetworkInterface
QStringList
QSize
InvitationsRfbServer::stop
void stop(bool disconnectClients=true)
Definition: invitationsrfbserver.cpp:98
KrfbConfig::self
static KrfbConfig * self()
Definition: krfbconfig.cpp:17
InvitationsRfbServer::setDesktopPassword
void setDesktopPassword(const QString &)
Definition: invitationsrfbserver.cpp:68
tubesrfbserver.h
InvitationsRfbServer::instance
static InvitationsRfbServer * instance
Definition: invitationsrfbserver.h:37
QNetworkInterface::allInterfaces
QList< QNetworkInterface > allInterfaces()
invitationsrfbserver.h
MainWindow::~MainWindow
~MainWindow()
Definition: mainwindow.cpp:144
QObject::parent
QObject * parent() const
QNetworkInterface::addressEntries
QList< QNetworkAddressEntry > addressEntries() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:29:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

krfb

Skip menu "krfb"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal