changeset 105:1928f9b408e6

* Better-behaved comment dialog; avoid empty comments. Also ignore signals from closing ptys
author Chris Cannam
date Thu, 25 Nov 2010 17:21:32 +0000
parents af314dd436d5
children 729438d70af8
files common.cpp common.h confirmcommentdialog.cpp confirmcommentdialog.h main.cpp
diffstat 5 files changed, 80 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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 <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <signal.h>
 #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("/")) {
--- 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.
--- 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 <QTextEdit>
 #include <QDialogButtonBox>
 
+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;
         }
     }
--- 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 <QDialog>
 #include <QWidget>
 #include <QString>
 #include <QStringList>
+#include <QTextEdit>
+#include <QPushButton>
 
-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
--- 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();