author | zecke <zecke> | 2002-10-15 13:02:56 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-10-15 13:02:56 (UTC) |
commit | 09ba4d2c79a41b185902519639032a49c85deadb (patch) (unidiff) | |
tree | f1d9676bf3401bb93e527c8608a9307bf4adf244 /noncore | |
parent | b555d0c687db83cde89f1a75fccbd59723878621 (diff) | |
download | opie-09ba4d2c79a41b185902519639032a49c85deadb.zip opie-09ba4d2c79a41b185902519639032a49c85deadb.tar.gz opie-09ba4d2c79a41b185902519639032a49c85deadb.tar.bz2 |
Add a Feature Support BitArray to the IOLayer
This way we know what an IOLayer supports
Adjust IOSerial and MyPty to that change
Fix the after close window the previous session
window is empty bug
in Mainwindow::remove we had a problem
first we removed the currentSession from the tab and then
deleted the session
The problem is that removePage on OTabWidget does signal currentChanged
so we did not delete the session intended but the wrong one
because m_curSession got adjusted after a removePage...
3rd fix the close and reopen bug in MyPty
-rw-r--r-- | noncore/apps/opie-console/BUGS | 9 | ||||
-rw-r--r-- | noncore/apps/opie-console/MyPty.cpp | 23 | ||||
-rw-r--r-- | noncore/apps/opie-console/MyPty.h | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/io_layer.h | 14 | ||||
-rw-r--r-- | noncore/apps/opie-console/io_serial.cpp | 7 | ||||
-rw-r--r-- | noncore/apps/opie-console/io_serial.h | 4 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.cpp | 10 | ||||
-rw-r--r-- | noncore/apps/opie-console/profilemanager.cpp | 15 | ||||
-rw-r--r-- | noncore/apps/opie-console/session.cpp | 6 | ||||
-rw-r--r-- | noncore/apps/opie-console/session.h | 1 | ||||
-rw-r--r-- | noncore/apps/opie-console/tabwidget.cpp | 1 |
11 files changed, 72 insertions, 20 deletions
diff --git a/noncore/apps/opie-console/BUGS b/noncore/apps/opie-console/BUGS new file mode 100644 index 0000000..ffaceef --- a/dev/null +++ b/noncore/apps/opie-console/BUGS | |||
@@ -0,0 +1,9 @@ | |||
1 | Ok we all know we write perfect code | ||
2 | but sometimes the compiler produces bad code | ||
3 | and we need to work around some compiler bugs!! -zecke | ||
4 | |||
5 | MyPty is broken in some ways | ||
6 | if you do connect/disconnect/connect sh will be executed in the | ||
7 | process of opie-console.... funny aye? | ||
8 | |||
9 | OTabWidget seems to give us problems too | ||
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp index b6ae1d9..565d03f 100644 --- a/noncore/apps/opie-console/MyPty.cpp +++ b/noncore/apps/opie-console/MyPty.cpp | |||
@@ -117,10 +117,13 @@ void MyPty::donePty() | |||
117 | kill(m_cpid, SIGHUP); | 117 | kill(m_cpid, SIGHUP); |
118 | //waitpid(m_cpid, &status, 0); | 118 | //waitpid(m_cpid, &status, 0); |
119 | delete m_sn_e; | 119 | delete m_sn_e; |
120 | delete m_sn_r; | ||
120 | m_sn_e = 0l; | 121 | m_sn_e = 0l; |
122 | m_sn_r = 0l; | ||
121 | } | 123 | } |
122 | 124 | ||
123 | m_cpid = 0; | 125 | m_cpid = 0; |
126 | m_fd = -1; | ||
124 | // emit done(status); | 127 | // emit done(status); |
125 | } | 128 | } |
126 | 129 | ||
@@ -185,10 +188,11 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int) | |||
185 | } | 188 | } |
186 | 189 | ||
187 | // parent - continue as a widget | 190 | // parent - continue as a widget |
188 | QSocketNotifier* sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); | 191 | delete m_sn_r; |
192 | m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); | ||
189 | delete m_sn_e; | 193 | delete m_sn_e; |
190 | m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); | 194 | m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); |
191 | connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); | 195 | connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); |
192 | connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); | 196 | connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); |
193 | 197 | ||
194 | return 0; | 198 | return 0; |
@@ -221,7 +225,7 @@ int MyPty::openPty() | |||
221 | #endif | 225 | #endif |
222 | 226 | ||
223 | if ( ptyfd < 0 ) { | 227 | if ( ptyfd < 0 ) { |
224 | qApp->exit(1); | 228 | //qApp->exit(1); |
225 | return -1; | 229 | return -1; |
226 | } | 230 | } |
227 | 231 | ||
@@ -234,6 +238,7 @@ int MyPty::openPty() | |||
234 | MyPty::MyPty(const Profile&) : m_cpid(0) | 238 | MyPty::MyPty(const Profile&) : m_cpid(0) |
235 | { | 239 | { |
236 | m_sn_e = 0l; | 240 | m_sn_e = 0l; |
241 | m_sn_r = 0l; | ||
237 | m_fd = openPty(); | 242 | m_fd = openPty(); |
238 | ProcCtl* ctl = ProcCtl::self(); | 243 | ProcCtl* ctl = ProcCtl::self(); |
239 | } | 244 | } |
@@ -254,11 +259,15 @@ QString MyPty::name()const{ | |||
254 | return identifier(); | 259 | return identifier(); |
255 | } | 260 | } |
256 | bool MyPty::open() { | 261 | bool MyPty::open() { |
262 | if (m_fd < 0) | ||
263 | m_fd = openPty(); | ||
264 | |||
257 | start(); | 265 | start(); |
258 | return true; | 266 | return true; |
259 | } | 267 | } |
260 | void MyPty::close() { | 268 | void MyPty::close() { |
261 | donePty(); | 269 | donePty(); |
270 | m_fd = openPty(); | ||
262 | } | 271 | } |
263 | void MyPty::reload( const Profile& ) { | 272 | void MyPty::reload( const Profile& ) { |
264 | 273 | ||
@@ -286,7 +295,6 @@ void MyPty::readPty() | |||
286 | 295 | ||
287 | if (len == -1 || len == 0) { | 296 | if (len == -1 || len == 0) { |
288 | donePty(); | 297 | donePty(); |
289 | delete sender(); | ||
290 | return; | 298 | return; |
291 | } | 299 | } |
292 | 300 | ||
@@ -306,4 +314,11 @@ void MyPty::readPty() | |||
306 | #endif | 314 | #endif |
307 | 315 | ||
308 | } | 316 | } |
317 | QBitArray MyPty::supports()const { | ||
318 | QBitArray ar(3); | ||
319 | ar[0] = 1; | ||
320 | ar[1] = 0; | ||
321 | ar[2] = 0; | ||
309 | 322 | ||
323 | return ar; | ||
324 | } | ||
diff --git a/noncore/apps/opie-console/MyPty.h b/noncore/apps/opie-console/MyPty.h index 3166fa0..ad271df 100644 --- a/noncore/apps/opie-console/MyPty.h +++ b/noncore/apps/opie-console/MyPty.h | |||
@@ -41,6 +41,7 @@ public: | |||
41 | 41 | ||
42 | QString identifier()const; | 42 | QString identifier()const; |
43 | QString name()const; | 43 | QString name()const; |
44 | QBitArray supports()const; | ||
44 | 45 | ||
45 | public slots: | 46 | public slots: |
46 | /*! | 47 | /*! |
@@ -92,6 +93,7 @@ private: | |||
92 | int m_fd; | 93 | int m_fd; |
93 | int m_cpid; | 94 | int m_cpid; |
94 | QSocketNotifier* m_sn_e; | 95 | QSocketNotifier* m_sn_e; |
96 | QSocketNotifier* m_sn_r; | ||
95 | }; | 97 | }; |
96 | 98 | ||
97 | #endif | 99 | #endif |
diff --git a/noncore/apps/opie-console/io_layer.h b/noncore/apps/opie-console/io_layer.h index 5f2fa3c..4977e94 100644 --- a/noncore/apps/opie-console/io_layer.h +++ b/noncore/apps/opie-console/io_layer.h | |||
@@ -1,7 +1,10 @@ | |||
1 | #ifndef OPIE_IO_LAYER_H | 1 | #ifndef OPIE_IO_LAYER_H |
2 | #define OPIE_IO_LAYER_H | 2 | #define OPIE_IO_LAYER_H |
3 | 3 | ||
4 | #include <qbitarray.h> | ||
4 | #include <qobject.h> | 5 | #include <qobject.h> |
6 | |||
7 | |||
5 | #include <qpe/config.h> | 8 | #include <qpe/config.h> |
6 | 9 | ||
7 | #include "profile.h" | 10 | #include "profile.h" |
@@ -23,6 +26,11 @@ public: | |||
23 | Terminate = 4 | 26 | Terminate = 4 |
24 | /* add more errors here */ | 27 | /* add more errors here */ |
25 | }; | 28 | }; |
29 | enum Feature { | ||
30 | AutoConnect = 0, | ||
31 | TransferFile =1, | ||
32 | Close =2 | ||
33 | }; | ||
26 | /** | 34 | /** |
27 | * a small c'tor | 35 | * a small c'tor |
28 | */ | 36 | */ |
@@ -65,6 +73,11 @@ public: | |||
65 | */ | 73 | */ |
66 | virtual void closeRawIO(int); | 74 | virtual void closeRawIO(int); |
67 | 75 | ||
76 | /** | ||
77 | * What does the IOLayer support? | ||
78 | * Bits are related to features | ||
79 | */ | ||
80 | virtual QBitArray supports()const = 0; | ||
68 | 81 | ||
69 | signals: | 82 | signals: |
70 | /** | 83 | /** |
@@ -79,6 +92,7 @@ signals: | |||
79 | */ | 92 | */ |
80 | virtual void error( int, const QString& ); | 93 | virtual void error( int, const QString& ); |
81 | 94 | ||
95 | virtual void closed(); | ||
82 | public slots: | 96 | public slots: |
83 | /** | 97 | /** |
84 | * send a QCString to the device | 98 | * send a QCString to the device |
diff --git a/noncore/apps/opie-console/io_serial.cpp b/noncore/apps/opie-console/io_serial.cpp index a4a6f0b..c10d5a8 100644 --- a/noncore/apps/opie-console/io_serial.cpp +++ b/noncore/apps/opie-console/io_serial.cpp | |||
@@ -187,3 +187,10 @@ void IOSerial::closeRawIO(int fd) { | |||
187 | 187 | ||
188 | ::close( fd ); | 188 | ::close( fd ); |
189 | } | 189 | } |
190 | QBitArray IOSerial::supports()const { | ||
191 | QBitArray ar(3); | ||
192 | ar[0] = ar[2] = 0; | ||
193 | ar[1] = 1; | ||
194 | |||
195 | return ar; | ||
196 | } | ||
diff --git a/noncore/apps/opie-console/io_serial.h b/noncore/apps/opie-console/io_serial.h index facbbc1..b1d1be1 100644 --- a/noncore/apps/opie-console/io_serial.h +++ b/noncore/apps/opie-console/io_serial.h | |||
@@ -37,9 +37,11 @@ public: | |||
37 | QString name() const; | 37 | QString name() const; |
38 | int rawIO()const; | 38 | int rawIO()const; |
39 | void closeRawIO(int fd ); | 39 | void closeRawIO(int fd ); |
40 | signals: | 40 | QBitArray supports()const; |
41 | /*signals: | ||
41 | void received(const QByteArray &); | 42 | void received(const QByteArray &); |
42 | void error(int, const QString &); | 43 | void error(int, const QString &); |
44 | */ | ||
43 | public slots: | 45 | public slots: |
44 | void send(const QByteArray &); | 46 | void send(const QByteArray &); |
45 | bool open(); | 47 | bool open(); |
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp index 94c99bc..29dbcf3 100644 --- a/noncore/apps/opie-console/mainwindow.cpp +++ b/noncore/apps/opie-console/mainwindow.cpp | |||
@@ -360,11 +360,12 @@ void MainWindow::slotClose() { | |||
360 | if (!currentSession() ) | 360 | if (!currentSession() ) |
361 | return; | 361 | return; |
362 | 362 | ||
363 | Session* ses = currentSession(); | ||
364 | qWarning("removing! currentSession %s", currentSession()->name().latin1() ); | ||
363 | tabWidget()->remove( currentSession() ); | 365 | tabWidget()->remove( currentSession() ); |
364 | /*it's autodelete */ | 366 | /*it's autodelete */ |
365 | m_sessions.remove( m_curSession ); | 367 | m_sessions.remove( ses ); |
366 | m_curSession = m_sessions.first(); | 368 | qWarning("after remove!!"); |
367 | tabWidget()->setCurrent( m_curSession ); | ||
368 | 369 | ||
369 | if (!currentSession() ) { | 370 | if (!currentSession() ) { |
370 | m_connect->setEnabled( false ); | 371 | m_connect->setEnabled( false ); |
@@ -395,7 +396,7 @@ void MainWindow::create( const Profile& prof ) { | |||
395 | { | 396 | { |
396 | QMessageBox::warning(this, | 397 | QMessageBox::warning(this, |
397 | QObject::tr("Session failed"), | 398 | QObject::tr("Session failed"), |
398 | QObject::tr("Cannot open session: Not all components were found.")); | 399 | QObject::tr("<qt>Cannot open session: Not all components were found.</qt>")); |
399 | //if(ses) delete ses; | 400 | //if(ses) delete ses; |
400 | return; | 401 | return; |
401 | } | 402 | } |
@@ -433,6 +434,7 @@ void MainWindow::slotOpenKeb(bool state) { | |||
433 | 434 | ||
434 | } | 435 | } |
435 | void MainWindow::slotSessionChanged( Session* ses ) { | 436 | void MainWindow::slotSessionChanged( Session* ses ) { |
437 | qWarning("changed!"); | ||
436 | if ( ses ) { | 438 | if ( ses ) { |
437 | m_curSession = ses; | 439 | m_curSession = ses; |
438 | 440 | ||
diff --git a/noncore/apps/opie-console/profilemanager.cpp b/noncore/apps/opie-console/profilemanager.cpp index e5aedb6..7c15560 100644 --- a/noncore/apps/opie-console/profilemanager.cpp +++ b/noncore/apps/opie-console/profilemanager.cpp | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | 3 | ||
4 | #include <qfile.h> | 4 | #include <qfile.h> |
5 | #include <qhbox.h> | ||
5 | #include <qlayout.h> | 6 | #include <qlayout.h> |
6 | #include <qwidgetstack.h> | 7 | #include <qwidgetstack.h> |
7 | 8 | ||
@@ -85,19 +86,11 @@ Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) { | |||
85 | 86 | ||
86 | QWidgetStack *stack = new QWidgetStack( parent ); | 87 | QWidgetStack *stack = new QWidgetStack( parent ); |
87 | session->setWidgetStack( stack ); | 88 | session->setWidgetStack( stack ); |
88 | QWidget* dummy = new QWidget( stack ); | 89 | QWidget* dummy = new QHBox( stack ); |
89 | QHBoxLayout* lay = new QHBoxLayout( dummy ); | 90 | stack->raiseWidget( dummy ); |
90 | stack->addWidget( dummy, 0 ); | 91 | |
91 | stack->raiseWidget( 0 ); | ||
92 | EmulationHandler* handler = new EmulationHandler(prof,dummy ); | 92 | EmulationHandler* handler = new EmulationHandler(prof,dummy ); |
93 | session->setEmulationHandler( handler ); | 93 | session->setEmulationHandler( handler ); |
94 | lay->addWidget( handler->widget() ); | ||
95 | // WidgetLayer* wid = new EmulationWidget( prof, dummy ); | ||
96 | // lay->addWidget( wid ); | ||
97 | |||
98 | // session->setEmulationWidget( wid ); | ||
99 | // session->setEmulationLayer( m_fact->newEmulationLayer( m_fact->external( prof.terminalName() ), | ||
100 | // wid ) ); | ||
101 | session->connect(); | 94 | session->connect(); |
102 | 95 | ||
103 | return session; | 96 | return session; |
diff --git a/noncore/apps/opie-console/session.cpp b/noncore/apps/opie-console/session.cpp index e53dbc4..aad100d 100644 --- a/noncore/apps/opie-console/session.cpp +++ b/noncore/apps/opie-console/session.cpp | |||
@@ -36,6 +36,12 @@ IOLayer* Session::layer() { | |||
36 | EmulationHandler* Session::emulationHandler() { | 36 | EmulationHandler* Session::emulationHandler() { |
37 | return m_emu; | 37 | return m_emu; |
38 | } | 38 | } |
39 | QWidget* Session::widget() { | ||
40 | if (!m_emu ) | ||
41 | return 0l; | ||
42 | |||
43 | return m_emu->widget(); | ||
44 | } | ||
39 | /* | 45 | /* |
40 | WidgetLayer* Session::emulationWidget() { | 46 | WidgetLayer* Session::emulationWidget() { |
41 | return m_widLay; | 47 | return m_widLay; |
diff --git a/noncore/apps/opie-console/session.h b/noncore/apps/opie-console/session.h index a1121d3..ff92df3 100644 --- a/noncore/apps/opie-console/session.h +++ b/noncore/apps/opie-console/session.h | |||
@@ -34,6 +34,7 @@ public: | |||
34 | * semi modal == SessionModal | 34 | * semi modal == SessionModal |
35 | */ | 35 | */ |
36 | QWidgetStack* widgetStack(); | 36 | QWidgetStack* widgetStack(); |
37 | QWidget* widget(); | ||
37 | 38 | ||
38 | /** | 39 | /** |
39 | * return the layer | 40 | * return the layer |
diff --git a/noncore/apps/opie-console/tabwidget.cpp b/noncore/apps/opie-console/tabwidget.cpp index 8a691f9..419f8ac 100644 --- a/noncore/apps/opie-console/tabwidget.cpp +++ b/noncore/apps/opie-console/tabwidget.cpp | |||
@@ -11,6 +11,7 @@ TabWidget::~TabWidget() { | |||
11 | } | 11 | } |
12 | 12 | ||
13 | void TabWidget::add( Session* ses ) { | 13 | void TabWidget::add( Session* ses ) { |
14 | qWarning("session ses " + ses->name() ); | ||
14 | if ( !ses->widgetStack() ) return; | 15 | if ( !ses->widgetStack() ) return; |
15 | //reparent( ses->widgetStack(), QPoint() ); | 16 | //reparent( ses->widgetStack(), QPoint() ); |
16 | addTab( ses->widgetStack(), "console/konsole", ses->name() ); | 17 | addTab( ses->widgetStack(), "console/konsole", ses->name() ); |