-rw-r--r-- | core/applets/vtapplet/vt.cpp | 9 | ||||
-rw-r--r-- | core/applets/vtapplet/vt.h | 1 |
2 files changed, 9 insertions, 1 deletions
diff --git a/core/applets/vtapplet/vt.cpp b/core/applets/vtapplet/vt.cpp index 0d4e657..7885f83 100644 --- a/core/applets/vtapplet/vt.cpp +++ b/core/applets/vtapplet/vt.cpp @@ -28,17 +28,17 @@ using namespace Opie::Core; #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <linux/vt.h> VTApplet::VTApplet ( ) - : QObject ( 0, "VTApplet" ) + :QObject( 0, "VTApplet" ), m_ourVT( 0 ) { } VTApplet::~VTApplet ( ) { } int VTApplet::position ( ) const @@ -91,16 +91,18 @@ QPopupMenu *VTApplet::popup ( QWidget* parent ) const m_subMenu->setCheckable( true ); for ( int i = 1; i < 10; ++i ) { int id = m_subMenu->insertItem( QString::number( i ), 500+i ); m_subMenu->setItemChecked( id, id-500 == vtstat.v_active ); } ::close( fd ); + m_ourVT = vtstat.v_active; + connect( m_subMenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) ); connect( m_subMenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); return m_subMenu; } void VTApplet::changeVT( int index ) @@ -109,16 +111,21 @@ void VTApplet::changeVT( int index ) #ifdef QT_QWS_DEVFS int fd = ::open("/dev/vc/0", O_RDWR); #else int fd = ::open("/dev/tty0", O_RDWR); #endif if ( fd == -1 ) return; ioctl( fd, VT_ACTIVATE, index-500 ); + if ( m_ourVT ) + { + odebug << "VTApplet::waiting for user to return to VT " << m_ourVT << oendl; + ioctl( fd, VT_WAITACTIVE, m_ourVT ); + } } void VTApplet::updateMenu() { //odebug << "VTApplet::updateMenu()" << oendl; int fd = ::open( "/dev/console", O_RDONLY ); diff --git a/core/applets/vtapplet/vt.h b/core/applets/vtapplet/vt.h index 4c92ddd..4fa73e5 100644 --- a/core/applets/vtapplet/vt.h +++ b/core/applets/vtapplet/vt.h @@ -41,12 +41,13 @@ public: virtual void activated (); public slots: virtual void changeVT( int index ); virtual void updateMenu(); private: mutable QPopupMenu* m_subMenu; + mutable int m_ourVT; }; #endif |