14 #include "ui_configtcp.h"
15 #include "ui_configsecurity.h"
17 #include <KConfigDialog>
20 #include <KMessageBox>
21 #include <KStandardGuiItem>
22 #include <KSystemTimeZone>
23 #include <KToolInvocation>
24 #include <KStandardAction>
25 #include <KActionCollection>
27 #include <KNewPasswordDialog>
29 #include <QtGui/QWidget>
30 #include <QtGui/QSizePolicy>
31 #include <QtNetwork/QNetworkInterface>
33 #ifdef KRFB_WITH_KDE_TELEPATHY
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>
43 class TCP:
public QWidget,
public Ui::TCP
51 class Security:
public QWidget,
public Ui::Security
63 setAttribute(Qt::WA_DeleteOnClose,
false);
65 m_passwordEditable =
false;
66 m_passwordLineEdit =
new KLineEdit(
this);
67 m_passwordLineEdit->setVisible(
false);
68 m_passwordLineEdit->setAlignment(Qt::AlignHCenter);
71 m_ui.setupUi(mainWidget);
72 m_ui.krfbIconLabel->setPixmap(KIcon(
"krfb").pixmap(128));
73 m_ui.enableUnattendedCheckBox->setChecked(
76 setCentralWidget(mainWidget);
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)),
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()));
91 this, SLOT(passwordChanged(
const QString&)));
97 if(interface.
flags() & QNetworkInterface::IsLoopBack)
100 if(interface.
flags() & QNetworkInterface::IsRunning &&
102 m_ui.addressDisplayLabel->setText(
QString(
"%1 : %2")
108 m_ui.passwordDisplayLabel->setText(
112 #ifdef KRFB_WITH_KDE_TELEPATHY
114 m_contactViewWidget =
new KTp::ContactViewWidget(
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);
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 &)));
137 KStandardAction::preferences(
this, SLOT(
showConfiguration()), actionCollection());
141 setAutoSaveSettings();
148 void MainWindow::editPassword()
150 if(m_passwordEditable) {
151 m_passwordEditable =
false;
152 m_ui.passwordEditButton->setIcon(KIcon(
"document-properties"));
153 m_ui.passwordGridLayout->removeWidget(m_passwordLineEdit);
155 m_passwordLineEdit->text());
156 m_ui.passwordDisplayLabel->setText(
158 m_passwordLineEdit->setVisible(
false);
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(
165 m_passwordLineEdit->setVisible(
true);
166 m_passwordLineEdit->setFocus(Qt::MouseFocusReason);
170 void MainWindow::editUnattendedPassword()
172 KNewPasswordDialog dialog(
this);
173 dialog.setPrompt(i18n(
"Enter a new password for Unattended Access"));
179 void MainWindow::toggleDesktopSharing(
bool enable)
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."));
190 if(m_passwordEditable) {
191 m_passwordEditable =
false;
192 m_passwordLineEdit->setVisible(
false);
193 m_ui.passwordEditButton->setIcon(KIcon(
"document-properties"));
198 void MainWindow::passwordChanged(
const QString& password)
200 m_passwordLineEdit->setText(password);
201 m_ui.passwordDisplayLabel->setText(password);
204 void MainWindow::aboutConnectionAddress()
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"));
211 void MainWindow::aboutUnattendedMode()
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"));
218 #ifdef KRFB_WITH_KDE_TELEPATHY
220 void MainWindow::onContactDoubleClicked(
const Tp::AccountPtr &account,
const KTp::ContactPtr &contact)
222 Tp::PendingOperation *op = KTp::Actions::startDesktopSharing(account, contact);
223 connect(op, SIGNAL(finished(Tp::PendingOperation*)),
224 this, SLOT(pendingDesktopShareFinished(Tp::PendingOperation*)));
227 void MainWindow::pendingDesktopShareFinished(Tp::PendingOperation *operation)
229 if(operation->isError()) {
230 KMessageBox::error(
this,
231 operation->errorName() +
": " + operation->errorMessage());
239 if (KConfigDialog::showDialog(
"settings")) {
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");
252 if (group.readEntry(
"Visible",
true)) {
255 KMainWindow::readProperties(group);
260 group.writeEntry(
"Visible", isVisible());
261 KMainWindow::saveProperties(group);
264 #include "mainwindow.moc"
virtual void saveProperties(KConfigGroup &group)
void setUnattendedPassword(const QString &)
InterfaceFlags flags() const
virtual void readProperties(const KConfigGroup &group)
MainWindow(QWidget *parent=0)
static int port()
Get This is the port on which krfb will listen.
QCoreApplication * instance()
static TubesRfbServer * instance
void stop(bool disconnectClients=true)
static KrfbConfig * self()
void setDesktopPassword(const QString &)
static InvitationsRfbServer * instance
QList< QNetworkInterface > allInterfaces()
QList< QNetworkAddressEntry > addressEntries() const