author | mickeyl <mickeyl> | 2003-09-22 12:06:07 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-09-22 12:06:07 (UTC) |
commit | fd500184450e37c239e573adf1c12a6ff62b65f6 (patch) (side-by-side diff) | |
tree | 2ce7fad7a9af7d17d1ab9495b1e32d353c5f08b0 /core/applets/vtapplet | |
parent | bef84fa57fcb1ea5815ea55be7ac12b1a9df0c24 (diff) | |
download | opie-fd500184450e37c239e573adf1c12a6ff62b65f6.zip opie-fd500184450e37c239e573adf1c12a6ff62b65f6.tar.gz opie-fd500184450e37c239e573adf1c12a6ff62b65f6.tar.bz2 |
FEATURE: vtapplet now indicates which virtual terminals are occupied
-rw-r--r-- | core/applets/vtapplet/vt.cpp | 39 | ||||
-rw-r--r-- | core/applets/vtapplet/vt.h | 1 |
2 files changed, 30 insertions, 10 deletions
diff --git a/core/applets/vtapplet/vt.cpp b/core/applets/vtapplet/vt.cpp index 6200447..4cc2d60 100644 --- a/core/applets/vtapplet/vt.cpp +++ b/core/applets/vtapplet/vt.cpp @@ -20,32 +20,24 @@ #include <qiconset.h> #include <qpopupmenu.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <linux/vt.h> #include "vt.h" -class VTPopupMenu : public QPopupMenu -{ - public: - VTPopupMenu( QWidget * parent=0, const char * name=0 ) : QPopupMenu( parent, name ) {}; - - virtual void activated() { qDebug( "VTPopupMenu::activated()" ); } -}; - VTApplet::VTApplet ( ) : QObject ( 0, "VTApplet" ), ref ( 0 ) { } VTApplet::~VTApplet ( ) { } int VTApplet::position ( ) const { return 2; @@ -83,48 +75,75 @@ QIconSet VTApplet::icon ( ) const return pix; } QPopupMenu *VTApplet::popup ( QWidget* parent ) const { qDebug( "VTApplet::popup" ); struct vt_stat vtstat; int fd = ::open("/dev/tty0", O_RDWR); if ( fd == -1 ) return 0; if ( ioctl( fd, VT_GETSTATE, &vtstat ) == -1 ) return 0; - submenu = new VTPopupMenu( parent ); + submenu = new QPopupMenu( parent ); submenu->setCheckable( true ); for ( int i = 1; i < 10; ++i ) { int id = submenu->insertItem( QString::number( i ), 500+i ); submenu->setItemChecked( id, id-500 == vtstat.v_active ); } ::close( fd ); connect( submenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) ); + connect( submenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); return submenu; } void VTApplet::changeVT( int index ) { - qDebug( "VTApplet::changeVT( %d )", index-500 ); + //qDebug( "VTApplet::changeVT( %d )", index-500 ); + int fd = ::open("/dev/tty0", O_RDWR); if ( fd == -1 ) return; ioctl( fd, VT_ACTIVATE, index-500 ); } +void VTApplet::updateMenu() +{ + //qDebug( "VTApplet::updateMenu()" ); + + int fd = ::open( "/dev/console", O_RDONLY ); + if ( fd == -1 ) return; + + for ( int i = 1; i < 10; ++i ) + { + int result = ioctl( fd, VT_DISALLOCATE, i ); + + /* + if ( result == -1 ) + qDebug( "VT %d disallocated == free", i ); + else + qDebug( "VT %d _not_ disallocated == busy", i ); + */ + + submenu->setItemEnabled( 500+i, result == -1 ); + } + + ::close( fd ); +} + + void VTApplet::activated() { qDebug( "VTApplet::activated()" ); } QRESULT VTApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) { *iface = 0; if ( uuid == IID_QUnknown ) *iface = this; else if ( uuid == IID_MenuApplet ) diff --git a/core/applets/vtapplet/vt.h b/core/applets/vtapplet/vt.h index 2df9791..6bdb9e0 100644 --- a/core/applets/vtapplet/vt.h +++ b/core/applets/vtapplet/vt.h @@ -34,20 +34,21 @@ public: virtual QString name ( ) const; virtual QIconSet icon ( ) const; virtual QString text ( ) const; //virtual QString tr( const char* ) const; //virtual QString tr( const char*, const char* ) const; virtual QPopupMenu *popup ( QWidget *parent ) const; virtual void activated (); public slots: virtual void changeVT( int index ); + virtual void updateMenu(); private: ulong ref; }; static QPopupMenu* submenu; #endif |