From 09ba4d2c79a41b185902519639032a49c85deadb Mon Sep 17 00:00:00 2001 From: zecke Date: Tue, 15 Oct 2002 13:02:56 +0000 Subject: 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 --- (limited to 'noncore/apps/opie-console') 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 @@ +Ok we all know we write perfect code +but sometimes the compiler produces bad code +and we need to work around some compiler bugs!! -zecke + +MyPty is broken in some ways + if you do connect/disconnect/connect sh will be executed in the + process of opie-console.... funny aye? + +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() kill(m_cpid, SIGHUP); //waitpid(m_cpid, &status, 0); delete m_sn_e; + delete m_sn_r; m_sn_e = 0l; + m_sn_r = 0l; } m_cpid = 0; + m_fd = -1; // emit done(status); } @@ -185,10 +188,11 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int) } // parent - continue as a widget - QSocketNotifier* sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); + delete m_sn_r; + m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); delete m_sn_e; m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); - connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); + connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); return 0; @@ -221,7 +225,7 @@ int MyPty::openPty() #endif if ( ptyfd < 0 ) { - qApp->exit(1); +// qApp->exit(1); return -1; } @@ -234,6 +238,7 @@ int MyPty::openPty() MyPty::MyPty(const Profile&) : m_cpid(0) { m_sn_e = 0l; + m_sn_r = 0l; m_fd = openPty(); ProcCtl* ctl = ProcCtl::self(); } @@ -254,11 +259,15 @@ QString MyPty::name()const{ return identifier(); } bool MyPty::open() { + if (m_fd < 0) + m_fd = openPty(); + start(); return true; } void MyPty::close() { donePty(); + m_fd = openPty(); } void MyPty::reload( const Profile& ) { @@ -286,7 +295,6 @@ void MyPty::readPty() if (len == -1 || len == 0) { donePty(); - delete sender(); return; } @@ -306,4 +314,11 @@ void MyPty::readPty() #endif } +QBitArray MyPty::supports()const { + QBitArray ar(3); + ar[0] = 1; + ar[1] = 0; + ar[2] = 0; + return ar; +} 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: QString identifier()const; QString name()const; + QBitArray supports()const; public slots: /*! @@ -92,6 +93,7 @@ private: int m_fd; int m_cpid; QSocketNotifier* m_sn_e; + QSocketNotifier* m_sn_r; }; #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 @@ #ifndef OPIE_IO_LAYER_H #define OPIE_IO_LAYER_H +#include #include + + #include #include "profile.h" @@ -23,6 +26,11 @@ public: Terminate = 4 /* add more errors here */ }; + enum Feature { + AutoConnect = 0, + TransferFile =1, + Close =2 + }; /** * a small c'tor */ @@ -65,6 +73,11 @@ public: */ virtual void closeRawIO(int); + /** + * What does the IOLayer support? + * Bits are related to features + */ + virtual QBitArray supports()const = 0; signals: /** @@ -79,6 +92,7 @@ signals: */ virtual void error( int, const QString& ); + virtual void closed(); public slots: /** * 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) { ::close( fd ); } +QBitArray IOSerial::supports()const { + QBitArray ar(3); + ar[0] = ar[2] = 0; + ar[1] = 1; + + return ar; +} 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: QString name() const; int rawIO()const; void closeRawIO(int fd ); -signals: + QBitArray supports()const; +/*signals: void received(const QByteArray &); void error(int, const QString &); +*/ public slots: void send(const QByteArray &); 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() { if (!currentSession() ) return; + Session* ses = currentSession(); + qWarning("removing! currentSession %s", currentSession()->name().latin1() ); tabWidget()->remove( currentSession() ); /*it's autodelete */ - m_sessions.remove( m_curSession ); - m_curSession = m_sessions.first(); - tabWidget()->setCurrent( m_curSession ); + m_sessions.remove( ses ); + qWarning("after remove!!"); if (!currentSession() ) { m_connect->setEnabled( false ); @@ -395,7 +396,7 @@ void MainWindow::create( const Profile& prof ) { { QMessageBox::warning(this, QObject::tr("Session failed"), - QObject::tr("Cannot open session: Not all components were found.")); + QObject::tr("Cannot open session: Not all components were found.")); //if(ses) delete ses; return; } @@ -433,6 +434,7 @@ void MainWindow::slotOpenKeb(bool state) { } void MainWindow::slotSessionChanged( Session* ses ) { + qWarning("changed!"); if ( ses ) { m_curSession = ses; 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 @@ #include #include +#include #include #include @@ -85,19 +86,11 @@ Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) { QWidgetStack *stack = new QWidgetStack( parent ); session->setWidgetStack( stack ); - QWidget* dummy = new QWidget( stack ); - QHBoxLayout* lay = new QHBoxLayout( dummy ); - stack->addWidget( dummy, 0 ); - stack->raiseWidget( 0 ); + QWidget* dummy = new QHBox( stack ); + stack->raiseWidget( dummy ); + EmulationHandler* handler = new EmulationHandler(prof,dummy ); session->setEmulationHandler( handler ); - lay->addWidget( handler->widget() ); -// WidgetLayer* wid = new EmulationWidget( prof, dummy ); -// lay->addWidget( wid ); - -// session->setEmulationWidget( wid ); -// session->setEmulationLayer( m_fact->newEmulationLayer( m_fact->external( prof.terminalName() ), -// wid ) ); session->connect(); 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() { EmulationHandler* Session::emulationHandler() { return m_emu; } +QWidget* Session::widget() { + if (!m_emu ) + return 0l; + + return m_emu->widget(); +} /* WidgetLayer* Session::emulationWidget() { 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: * semi modal == SessionModal */ QWidgetStack* widgetStack(); + QWidget* widget(); /** * 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() { } void TabWidget::add( Session* ses ) { + qWarning("session ses " + ses->name() ); if ( !ses->widgetStack() ) return; //reparent( ses->widgetStack(), QPoint() ); addTab( ses->widgetStack(), "console/konsole", ses->name() ); -- cgit v0.9.0.2