# HG changeset patch # User Daniel J Sebald # Date 1365563301 14400 # Node ID fa842e78f49132bf5900dd36e7985032283d6afc # Parent fcf1b0b52083c7c11ef21a1f00986c50c56daa47 Restore STDERR stream pipe before exit to capture error messages. * QUnixTerminalImpl.cpp, QUnixTerminalImpl.h (QUnixTerminalImpl::fdstderr): New member variable. (QUnixTerminalImpl::connectToPty): Duplicate STDERR_FILENO file descriptor. (QUnixTerminalImpl::~QUnixTerminalImpl): Duplicate-2 the stored descriptor back to STDERR_FILENO. * main-window.cc (main_window::~main_window): Delete terminal window first. diff -r fcf1b0b52083 -r fa842e78f491 libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp --- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp Tue Apr 09 16:16:10 2013 -0700 +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp Tue Apr 09 23:08:21 2013 -0400 @@ -75,6 +75,10 @@ void QUnixTerminalImpl::connectToPty() { + // Store the file descriptor associated with the STDERR stream onto + // another temporary file descriptor for reconnect in the destructor. + fdstderr = dup (STDERR_FILENO); + int fds = m_kpty->slaveFd(); dup2 (fds, STDIN_FILENO); @@ -96,6 +100,9 @@ QUnixTerminalImpl::~QUnixTerminalImpl() { + // Restore stderr so that any errors at exit might appear somewhere. + dup2 (fdstderr, STDERR_FILENO); + emit destroyed(); } diff -r fcf1b0b52083 -r fa842e78f491 libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h --- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h Tue Apr 09 16:16:10 2013 -0700 +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h Tue Apr 09 23:08:21 2013 -0400 @@ -30,10 +30,13 @@ class QUnixTerminalImpl : public QTerminalInterface { Q_OBJECT + + int fdstderr; + public: QUnixTerminalImpl(QWidget *parent = 0); virtual ~QUnixTerminalImpl(); - + void setTerminalFont(const QFont &font); void setSize(int h, int v); void sendText(const QString& text); @@ -43,12 +46,12 @@ public slots: void copyClipboard(); void pasteClipboard(); - + protected: void focusInEvent(QFocusEvent *focusEvent); void showEvent(QShowEvent *); virtual void resizeEvent(QResizeEvent *); - + private: void initialize(); void connectToPty(); diff -r fcf1b0b52083 -r fa842e78f491 libgui/src/main-window.cc --- a/libgui/src/main-window.cc Tue Apr 09 16:16:10 2013 -0700 +++ b/libgui/src/main-window.cc Tue Apr 09 23:08:21 2013 -0400 @@ -78,9 +78,12 @@ main_window::~main_window (void) { ++ // Destroy the terminal first so that STDERR stream is redirected back ++ // to its original pipe to capture error messages at exit. + + delete command_window; delete _workspace_model; delete status_bar; - delete command_window; delete history_window; delete file_browser_window; delete doc_browser_window;