# HG changeset patch # User Chris Cannam # Date 1290705692 0 # Node ID 1928f9b408e62c2082b3ee7c4fa591f68089e048 # Parent af314dd436d50049cef5a40e87a88c392ecba3cb * Better-behaved comment dialog; avoid empty comments. Also ignore signals from closing ptys diff -r af314dd436d5 -r 1928f9b408e6 common.cpp --- a/common.cpp Thu Nov 25 14:30:40 2010 +0000 +++ b/common.cpp Thu Nov 25 17:21:32 2010 +0000 @@ -37,6 +37,7 @@ #include #include #include +#include #endif QString findExecutable(QString name) @@ -182,6 +183,17 @@ #endif } +void installSignalHandlers() +{ +#ifndef Q_OS_WIN32 + sigset_t sgnals; + sigemptyset (&sgnals); + sigaddset(&sgnals, SIGHUP); + sigaddset(&sgnals, SIGCONT); + pthread_sigmask(SIG_BLOCK, &sgnals, 0); +#endif +} + FolderStatus getFolderStatus(QString path) { if (path != "/" && path.endsWith("/")) { diff -r af314dd436d5 -r 1928f9b408e6 common.h --- a/common.h Thu Nov 25 14:30:40 2010 +0000 +++ b/common.h Thu Nov 25 17:21:32 2010 +0000 @@ -50,6 +50,8 @@ extern void loseControllingTerminal(); +void installSignalHandlers(); + /** * Status used in testing whether a folder argument (received from the * user) is valid for particular uses. diff -r af314dd436d5 -r 1928f9b408e6 confirmcommentdialog.cpp --- a/confirmcommentdialog.cpp Thu Nov 25 14:30:40 2010 +0000 +++ b/confirmcommentdialog.cpp Thu Nov 25 17:21:32 2010 +0000 @@ -24,6 +24,46 @@ #include #include +ConfirmCommentDialog::ConfirmCommentDialog(QWidget *parent, + QString title, + QString introText, + QString initialComment) : + QDialog(parent) +{ + setWindowTitle(title); + + QGridLayout *layout = new QGridLayout; + setLayout(layout); + QLabel *label = new QLabel(introText); + layout->addWidget(label, 0, 0); + + m_textEdit = new QTextEdit; + m_textEdit->setAcceptRichText(false); + m_textEdit->document()->setPlainText(initialComment); + m_textEdit->setMinimumWidth(360); + connect(m_textEdit, SIGNAL(textChanged()), this, SLOT(commentChanged())); + layout->addWidget(m_textEdit, 1, 0); + + QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok | + QDialogButtonBox::Cancel); + layout->addWidget(bbox, 2, 0); + m_ok = bbox->button(QDialogButtonBox::Ok); + m_ok->setEnabled(initialComment != ""); + + connect(bbox, SIGNAL(accepted()), this, SLOT(accept())); + connect(bbox, SIGNAL(rejected()), this, SLOT(reject())); +} + +void ConfirmCommentDialog::commentChanged() +{ + m_ok->setEnabled(getComment() != ""); +} + +QString ConfirmCommentDialog::getComment() const +{ + return m_textEdit->document()->toPlainText(); +} + bool ConfirmCommentDialog::confirmFilesAction(QWidget *parent, QString title, QString introText, @@ -82,22 +122,12 @@ comment = QInputDialog::getText(parent, title, introText, QLineEdit::Normal, comment, &ok); } else { - QDialog *d = new QDialog(parent); - d->setWindowTitle(title); - QGridLayout *layout = new QGridLayout; - d->setLayout(layout); - QLabel *label = new QLabel(introText); - layout->addWidget(label, 0, 0); - QTextEdit *textEdit = new QTextEdit; - textEdit->setAcceptRichText(false); - layout->addWidget(textEdit, 1, 0); - QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok | - QDialogButtonBox::Cancel); - layout->addWidget(bbox, 2, 0); - QObject::connect(bbox, SIGNAL(accepted()), d, SLOT(accept())); - QObject::connect(bbox, SIGNAL(rejected()), d, SLOT(reject())); + ConfirmCommentDialog *d = new ConfirmCommentDialog(parent, + title, + introText, + comment); if (d->exec() == QDialog::Accepted) { - comment = textEdit->document()->toPlainText(); + comment = d->getComment(); ok = true; } } diff -r af314dd436d5 -r 1928f9b408e6 confirmcommentdialog.h --- a/confirmcommentdialog.h Thu Nov 25 14:30:40 2010 +0000 +++ b/confirmcommentdialog.h Thu Nov 25 17:21:32 2010 +0000 @@ -18,12 +18,17 @@ #ifndef CONFIRMCOMMENTDIALOG_H #define CONFIRMCOMMENTDIALOG_H +#include #include #include #include +#include +#include -class ConfirmCommentDialog +class ConfirmCommentDialog : public QDialog { + Q_OBJECT + public: static bool confirmFilesAction(QWidget *parent, QString title, @@ -45,6 +50,19 @@ QString &comment, bool longComment); +private slots: + void commentChanged(); + +private: + ConfirmCommentDialog(QWidget *parent, + QString title, + QString introText, + QString initialComment); + + QString getComment() const; + + QTextEdit *m_textEdit; + QPushButton *m_ok; }; #endif // CONFIRMCOMMENTDIALOG_H diff -r af314dd436d5 -r 1928f9b408e6 main.cpp --- a/main.cpp Thu Nov 25 14:30:40 2010 +0000 +++ b/main.cpp Thu Nov 25 17:21:32 2010 +0000 @@ -31,6 +31,8 @@ // capture password requests) loseControllingTerminal(); + installSignalHandlers(); + QApplication app(argc, argv); MainWindow mainWin; mainWin.show();