This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2godesktopsharing. commit ef3dfac2eae54c1a4138ff962d44371b9f30a813 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Nov 12 14:18:12 2018 +0100 Replace QMessageBox based access dialog by a QDialog based access dialog. QMessageBox in Qt5 is not suitable for adding a QCheckBox widget into it anymore. --- accessdialog.cpp | 62 ++++++++++++++ accessdialog.h | 36 ++++++++ debian/changelog | 3 + icons/svg/dialog-question.svg | 185 ++++++++++++++++++++++++++++++++++++++++++ messagebox.cpp | 38 --------- messagebox.h | 31 ------- resources.qrc | 1 + sharetray.cpp | 16 ++-- x2godesktopsharing.pro | 4 +- 9 files changed, 297 insertions(+), 79 deletions(-) diff --git a/accessdialog.cpp b/accessdialog.cpp new file mode 100644 index 0000000..723decb --- /dev/null +++ b/accessdialog.cpp @@ -0,0 +1,62 @@ +// +// C++ Implementation: AccessDialog +// +// Description: +// +// +// Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>, (C) 2018 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "accessdialog.h" +#include <QCheckBox> +#include <QDialogButtonBox> +#include <QLabel> +#include <QPixmap> +#include <QPushButton> +#include <QHBoxLayout> +#include <QVBoxLayout> + +AccessWindow::AccessWindow(QString uname, QString hname, QWidget *parent) + : QDialog (parent) +{ + setWindowTitle(QString("%1 (%2)").arg(uname).arg(hname)); + + QVBoxLayout *hbox = new QVBoxLayout(this); + + /* question mark and text */ + QHBoxLayout *vtexticonbox = new QHBoxLayout(); + QLabel *icon = new QLabel(); + icon->setPixmap ( QPixmap (":icons/svg/dialog-question.svg") ); + vtexticonbox->addWidget(icon, 1, Qt::AlignLeft); + QLabel *text = new QLabel(); + text->setText(QString(tr("Accept %1 from %2 ?")).arg(uname).arg(hname)); + vtexticonbox->addWidget(text, 1, Qt::AlignLeft); + hbox->addLayout(vtexticonbox); + + /* the check box (remember this setting for user X) */ + checkBox=new QCheckBox(QString(tr("Save selection for %1")).arg(uname),this); + hbox->addWidget(checkBox, 1, Qt::AlignLeft); + + /* dialog buttons */ + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Grant access")); + connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Deny access")); + buttonBox->button(QDialogButtonBox::Cancel)->setDefault(true); + connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + hbox->addWidget(buttonBox, 1, Qt::AlignRight | Qt::AlignBottom); + + /* modality */ + setWindowModality(Qt::WindowModal); +} + +AccessWindow::~AccessWindow() +{ +} + +bool AccessWindow::isChecked() +{ + return checkBox->isChecked(); +} diff --git a/accessdialog.h b/accessdialog.h new file mode 100644 index 0000000..1dd01c8 --- /dev/null +++ b/accessdialog.h @@ -0,0 +1,36 @@ +// +// C++ Interface: AccessDialog +// +// Description: +// +// +// Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>, (C) 2018 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef ACCESSDIALOG_H +#define ACCESSDIALOG_H + +/** + @author Mike Gabriel <mike.gabriel@das-netzwerkteam.de> +*/ + +#include <QDialog> +#include <QCheckBox> + +/** + @author Mike Gabriel <mike.gabriel@das-netzwerkteam.de> +*/ +class AccessWindow : public QDialog +{ + Q_OBJECT +public: + AccessWindow(QString uname, QString hname, QWidget *parent = NULL); + ~AccessWindow(); + bool isChecked(); +private: + QCheckBox* checkBox; +}; + +#endif diff --git a/debian/changelog b/debian/changelog index b55c7d7..057d4b3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,9 @@ x2godesktopsharing (3.1.1.5-0x2go1) UNRELEASED; urgency=medium - Make the desktop sharing group configurable system-wide and by the user. - man/man8/x2goterminate-desktopsharing.8: Grammar fix. - resources.qrc: Rename file from resources.rcc. + - Replace QMessageBox based access dialog by a QDialog based access dialog. + QMessageBox in Qt5 is not suitable for adding a QCheckBox widget into it + anymore. * debian/*: + Convert to DH packaging style. Build against Qt5. * debian/control: diff --git a/icons/svg/dialog-question.svg b/icons/svg/dialog-question.svg new file mode 100644 index 0000000..50123ac --- /dev/null +++ b/icons/svg/dialog-question.svg @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg7220" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="dialog-question.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs7222"> + <linearGradient + inkscape:collect="always" + id="linearGradient4873"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4875" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4877" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4873" + id="linearGradient2704" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.3440063,0,0,2.3440063,-121.79862,31.22942)" + x1="62.745731" + y1="-13.444987" + x2="62.608765" + y2="7.1072145" /> + <linearGradient + id="linearGradient3811"> + <stop + id="stop3813" + offset="0" + style="stop-color:#204a87;stop-opacity:1" /> + <stop + id="stop3815" + offset="1" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3811" + id="linearGradient3927" + x1="15.046636" + y1="44.787998" + x2="15.046636" + y2="3.8851264" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0805272,0,0,1.0805026,-1.5082857,-3.3507604)" /> + <linearGradient + id="linearGradient5106"> + <stop + style="stop-color:#8fb3d9;stop-opacity:1" + offset="0" + id="stop5108" /> + <stop + id="stop8208" + offset="0.25288007" + style="stop-color:#729fcf;stop-opacity:1" /> + <stop + style="stop-color:#3465a4;stop-opacity:1" + offset="0.68271071" + id="stop8210" /> + <stop + style="stop-color:#204a87;stop-opacity:1" + offset="1" + id="stop5110" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5106" + id="radialGradient2707" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-7.565785,-6.219707e-7,3.9644633e-7,-4.8230546,494.60904,-26.555114)" + cx="62.202274" + cy="-5.7132163" + fx="62.202274" + fy="-5.7132163" + r="9.7552835" /> + <linearGradient + id="linearGradient10691" + inkscape:collect="always"> + <stop + id="stop10693" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop10695" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10691" + id="radialGradient3080" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.902215,0.525703)" + cx="6.702713" + cy="73.615715" + fx="6.702713" + fy="73.615715" + r="7.228416" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="7" + inkscape:cx="24" + inkscape:cy="24" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="1680" + inkscape:window-height="1000" + inkscape:window-x="0" + inkscape:window-y="25" /> + <metadata + id="metadata7225"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + transform="matrix(1.6,0,0,1.8421053,3.6000003,-30.289476)" + d="M 26.5,38.700001 A 13.75,3.8 0 1 1 -1,38.700001 A 13.75,3.8 0 1 1 26.5,38.700001 z" + sodipodi:ry="3.8" + sodipodi:rx="13.75" + sodipodi:cy="38.700001" + sodipodi:cx="12.75" + id="path2625" + style="opacity:0.5;fill:url(#radialGradient3080);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" /> + <path + style="fill:url(#radialGradient2707);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3927);stroke-width:1.00004065;stroke-miterlimit:4;stroke-dasharray:none" + d="M 45.499979,22.999239 C 45.499979,34.87373 35.873401,44.49998 24.000271,44.49998 C 12.126053,44.49998 2.5000203,34.873621 2.5000203,22.999239 C 2.5000203,11.12529 12.126053,1.5000193 24.000271,1.5000193 C 35.873401,1.5000193 45.499979,11.12529 45.499979,22.999239 L 45.499979,22.999239 z" + id="path6495" /> + <path + id="path8655" + d="M 44.49904,22.999272 C 44.49904,34.321462 35.320423,43.499975 23.999791,43.499975 C 12.678124,43.499975 3.5000253,34.321356 3.5000253,22.999272 C 3.5000253,11.677606 12.678124,2.5000243 23.999791,2.5000243 C 35.320423,2.5000243 44.49904,11.677606 44.49904,22.999272 L 44.49904,22.999272 z" + style="opacity:0.6;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2704);stroke-width:1.00004995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + id="path9053" + style="font-size:72px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Standard Symbols L" + d="M 25.499549,29.000001 C 25.500288,27.000001 24.999549,24.022899 27.499549,22.000001 C 29.987045,20.009725 32.016392,18.017155 31.999549,15.000001 C 32.036328,12.012312 28.999549,10.023333 25.999549,9.7499987 C 22.008774,9.4823727 17.999549,10.031438 15.999549,14.000001 C 15.707504,15.711192 15.898252,18.000001 17.999549,18.000001 C 18.983603,18.000001 19.999549,17.038081 19.999549,16.000001 L 19.999549,15.000001 C 19.999549,14.500001 20.028884,14.041648 20.999549,13.500001 C 22 [...] + sodipodi:nodetypes="cccccsssssssscc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path8287" + sodipodi:cx="18.4417" + sodipodi:cy="34.547359" + sodipodi:rx="2.2272584" + sodipodi:ry="2.4054391" + d="M 20.668958,34.547359 A 2.2272584,2.4054391 0 1 1 16.214442,34.547359 A 2.2272584,2.4054391 0 1 1 20.668958,34.547359 z" + transform="matrix(0.8979649,0,0,0.831449,7.4395493,5.2756317)" /> + </g> +</svg> diff --git a/messagebox.cpp b/messagebox.cpp deleted file mode 100644 index 60e0075..0000000 --- a/messagebox.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// -// C++ Implementation: messagebox -// -// Description: -// -// -// Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>, (C) 2009-2015 -// -// Copyright: See COPYING file that comes with this distribution -// -// -#include "messagebox.h" -#include <QCheckBox> -#include <QGridLayout> - -MessageBox::MessageBox(QString uname, QString hname, QWidget *parent) - : QMessageBox(parent) -{ - checkBox=new QCheckBox( - QString(tr("Save selection for %1")).arg(uname),this); - ((QGridLayout*)layout())->addWidget(checkBox,1,1); - setIcon(Question); - setWindowModality(Qt::WindowModal); - setText(QString(tr("Accept %1 from %2 ?")).arg(uname).arg(hname)); - setStandardButtons(Yes|No); - setWindowTitle(QString("%1(%2)").arg(uname).arg(hname)); -} - - -MessageBox::~MessageBox() -{ -} - -bool MessageBox::isChecked() -{ - return checkBox->isChecked(); -} - diff --git a/messagebox.h b/messagebox.h deleted file mode 100644 index a77ad1f..0000000 --- a/messagebox.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// C++ Interface: messagebox -// -// Description: -// -// -// Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>, (C) 2009-2015 -// -// Copyright: See COPYING file that comes with this distribution -// -// -#ifndef MESSAGEBOX_H -#define MESSAGEBOX_H - -#include <QMessageBox> -/** - @author Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> -*/ -class QCheckBox; -class MessageBox : public QMessageBox -{ - Q_OBJECT -public: - MessageBox(QString uname, QString hname, QWidget *parent = 0); - ~MessageBox(); - bool isChecked(); -private: - QCheckBox* checkBox; -}; - -#endif diff --git a/resources.qrc b/resources.qrc index 5e5a232..7cd4c6e 100644 --- a/resources.qrc +++ b/resources.qrc @@ -18,6 +18,7 @@ <file>icons/32x32/wlist.png</file> <file>icons/32x32/x2godesktopsharing.png</file> <file>icons/128x128/x2godesktopsharing.png</file> + <file>icons/svg/dialog-question.svg</file> <file>x2godesktopsharing_da.qm</file> <file>x2godesktopsharing_de.qm</file> <file>x2godesktopsharing_es.qm</file> diff --git a/sharetray.cpp b/sharetray.cpp index c7e96bb..a975004 100644 --- a/sharetray.cpp +++ b/sharetray.cpp @@ -18,18 +18,19 @@ #include <QDir> #include <QtDebug> #include <QMessageBox> +#include <QDialog> #include <QSocketNotifier> #include <sys/socket.h> #include <sys/unistd.h> #include "simplelocalsocket.h" #include "accessaction.h" +#include "accessdialog.h" #include <sys/types.h> #include <csignal> #include <errno.h> #include <QToolTip> #include <QTimer> #include <QSettings> -#include "messagebox.h" #include <QSystemTrayIcon> #include <QCloseEvent> #include <QDateTime> @@ -404,7 +405,7 @@ QString ShareTray::getSocketAnswer ( QString message ) QString client=lst[0]; QString user=params[1]; QString remote_user=lst[10]; - if ( getAccess ( remote_user, client ) ==QMessageBox::Yes ) + if ( getAccess ( remote_user, client ) ==QDialog::Accepted ) { trayMessage ( tr ( "Access granted" ),QString ( tr ( "%1(%2): access granted" ) ).arg (remote_user ).arg ( client ) ); //start agent @@ -486,13 +487,12 @@ int ShareTray::getAccess ( QString remote_user, QString host ) if ( systemwideBlackList.contains ( remote_user ) ) return QMessageBox::Yes; - MessageBox m ( remote_user, host, this ); - m.activateWindow(); - m.raise(); - int res=m.exec(); - if ( m.isChecked() &&res==QMessageBox::Yes ) + AccessWindow ad ( remote_user, host, this ); + ad.raise(); + int res=ad.exec(); + if ( ad.isChecked() &&res==QDialog::Accepted ) userWhiteList<<remote_user; - if ( m.isChecked() &&res==QMessageBox::No ) + if ( ad.isChecked() &&res==QDialog::Rejected ) userBlackList<<remote_user; actBlack->setEnabled ( userBlackList.size() >0 ); actWhite->setEnabled ( userWhiteList.size() >0 ); diff --git a/x2godesktopsharing.pro b/x2godesktopsharing.pro index 530e3ed..75a9556 100644 --- a/x2godesktopsharing.pro +++ b/x2godesktopsharing.pro @@ -44,11 +44,11 @@ SOURCES += main.cpp \ sharetray.cpp \ simplelocalsocket.cpp \ accessaction.cpp \ - messagebox.cpp + accessdialog.cpp HEADERS += sharetray.h \ simplelocalsocket.h \ accessaction.h \ - messagebox.h + accessdialog.h RESOURCES += resources.qrc FORMS = dlg.ui -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2godesktopsharing.git