[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kcwsh] /: add an event for isActive
From:       Patrick Spendrin <ps_ml () gmx ! de>
Date:       2014-06-30 21:14:36
Message-ID: E1X1iuK-0005t9-Qn () scm ! kde ! org
[Download RAW message or body]

Git commit 143f3254fcebb649438841205c9a2dec60bb3ef8 by Patrick Spendrin.
Committed on 30/06/2014 at 20:43.
Pushed by sengels into branch 'master'.

add an event for isActive

This event is triggered if the terminal is fully functional
and input can be safely send to the terminal.

M  +22   -2    terminal.cpp
M  +4    -0    terminal.h

http://commits.kde.org/kcwsh/143f3254fcebb649438841205c9a2dec60bb3ef8

diff --git a/terminal.cpp b/terminal.cpp
index b8a114f..1ec52a4 100644
--- a/terminal.cpp
+++ b/terminal.cpp
@@ -145,6 +145,10 @@ void Terminal::titleChanged() {
 //     KcwDebug() << __FUNCTION__;
 }
 
+void Terminal::activityChanged() {
+//     KcwDebug() << __FUNCTION__;
+}
+
 void Terminal::hasScrolled() {
 //     KcwDebug() << __FUNCTION__;
 }
@@ -206,6 +210,7 @@ void Terminal::setActive(bool t) {
         SuspendThread(m_inputWriter);
         SuspendThread(m_outputReader);
     }
+    m_activityChanged.notify();
 }
 
 bool Terminal::active() const {
@@ -232,6 +237,10 @@ void Terminal::setEnvironment(KcwProcess::KcwProcessEnvironment env) {
     m_process.setStartupEnvironment(env);
 }
 
+HANDLE Terminal::activityHandle() {
+    return m_activityChanged;
+}
+
 DWORD Terminal::run() {
     if(m_inputReader == NULL || m_outputWriter == NULL) {
         KcwDebug() << "no inputreader or outputwriter set!";
@@ -247,8 +256,6 @@ DWORD Terminal::run() {
     m_process.start();
     addCallback(m_process.process(), CB(hasQuit));
 
-    m_active = true;
-
     m_inputReader->setProcess(&m_process);
     m_inputReader->init();
     m_inputReader->start();
@@ -269,6 +276,14 @@ DWORD Terminal::run() {
     };
 
     wss.str(L"");
+    wss << "kcwsh-activity-" << m_process.pid();
+    if(m_activityChanged.open(wss.str().c_str()) != 0) {
+        KcwDebug() << "could not create activityEvent!";
+        return -1;
+    };
+    addCallback(m_activityChanged, CB(activityChanged));
+
+    wss.str(L"");
     wss << "kcwsh-titleChanged-" << m_process.pid();
     if(m_titleChanged.open(wss.str().c_str()) != 0) {
         KcwDebug() << "could not create titleChanged!";
@@ -318,5 +333,10 @@ DWORD Terminal::run() {
     sizeChanged();
 
     m_process.resume();
+
+    m_active = true;
+
+    m_activityChanged.notify();
+
     return KcwEventLoop::exec();
 }
diff --git a/terminal.h b/terminal.h
index c596e91..8ce4700 100644
--- a/terminal.h
+++ b/terminal.h
@@ -78,6 +78,8 @@ class KCWSH_EXPORT Terminal : public KcwThread {
 
         virtual KCW_CALLBACK(Terminal, titleChanged);
 
+        virtual KCW_CALLBACK(Terminal, activityChanged);
+
         void setActive(bool t);
         bool active() const;
 
@@ -101,6 +103,7 @@ class KCWSH_EXPORT Terminal : public KcwThread {
 
         void setEnvironment(KcwProcess::KcwProcessEnvironment env);
 
+        HANDLE activityHandle();
     protected:
         Terminal(InputReader* ir, OutputWriter* ow);
 
@@ -122,6 +125,7 @@ class KCWSH_EXPORT Terminal : public KcwThread {
         KcwNotifier m_exitEvent;
         KcwNotifier m_setupEvent;
         KcwNotifier m_titleChanged;
+        KcwNotifier m_activityChanged;
 };
 };
 #endif /* kcwsh_terminal */

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic