summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/applets/vtapplet/vt.cpp9
-rw-r--r--core/applets/vtapplet/vt.h1
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
@@ -24,25 +24,25 @@ using namespace Opie::Core;
/* QT */
#include <qpopupmenu.h>
/* STD */
#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
{
return 2;
}
@@ -87,42 +87,49 @@ QPopupMenu *VTApplet::popup ( QWidget* parent ) const
if ( fd == -1 ) return 0;
if ( ioctl( fd, VT_GETSTATE, &vtstat ) == -1 ) return 0;
m_subMenu = new QPopupMenu( parent );
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 )
{
//odebug << "VTApplet::changeVT( " << index-500 << " )" << oendl;
#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 );
if ( fd == -1 ) return;
for ( int i = 1; i < 10; ++i )
{
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
@@ -37,16 +37,17 @@ public:
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:
mutable QPopupMenu* m_subMenu;
+ mutable int m_ourVT;
};
#endif