-rw-r--r-- | core/applets/vtapplet/vt.cpp | 41 | ||||
-rw-r--r-- | core/applets/vtapplet/vt.h | 1 |
2 files changed, 31 insertions, 11 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 @@ -31,10 +31,2 @@ -class VTPopupMenu : public QPopupMenu -{ - public: - VTPopupMenu( QWidget * parent=0, const char * name=0 ) : QPopupMenu( parent, name ) {}; - - virtual void activated() { qDebug( "VTPopupMenu::activated()" ); } -}; - VTApplet::VTApplet ( ) @@ -90,3 +82,3 @@ QPopupMenu *VTApplet::popup ( QWidget* parent ) const struct vt_stat vtstat; - int fd = ::open("/dev/tty0", O_RDWR); + int fd = ::open( "/dev/tty0", O_RDWR ); if ( fd == -1 ) return 0; @@ -94,3 +86,3 @@ QPopupMenu *VTApplet::popup ( QWidget* parent ) const - submenu = new VTPopupMenu( parent ); + submenu = new QPopupMenu( parent ); submenu->setCheckable( true ); @@ -104,2 +96,3 @@ QPopupMenu *VTApplet::popup ( QWidget* parent ) const connect( submenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) ); + connect( submenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); @@ -111,3 +104,4 @@ void VTApplet::changeVT( int index ) { - qDebug( "VTApplet::changeVT( %d )", index-500 ); + //qDebug( "VTApplet::changeVT( %d )", index-500 ); + int fd = ::open("/dev/tty0", O_RDWR); @@ -118,2 +112,27 @@ void VTApplet::changeVT( int index ) +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() 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 @@ -45,2 +45,3 @@ public slots: virtual void changeVT( int index ); + virtual void updateMenu(); |