summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-06-20 15:48:41 (UTC)
committer mickeyl <mickeyl>2005-06-20 15:48:41 (UTC)
commit53e05ad30759aefd977e301c84b8b60a78819c76 (patch) (side-by-side diff)
tree0a98e76e6d37c958dae43537dd371de320a6510f
parent3b02e2a868535628090567ed612d9fdb5b247f61 (diff)
downloadopie-53e05ad30759aefd977e301c84b8b60a78819c76.zip
opie-53e05ad30759aefd977e301c84b8b60a78819c76.tar.gz
opie-53e05ad30759aefd977e301c84b8b60a78819c76.tar.bz2
an attempt to fix #1377
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/vtapplet/vt.cpp25
-rw-r--r--core/applets/vtapplet/vt.h1
2 files changed, 17 insertions, 9 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
@@ -1,171 +1,178 @@
/**********************************************************************
** Copyright (C) 2003-2004 Michael 'Mickey' Lauer <mickey@Vanille.de>
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
**********************************************************************/
#include "vt.h"
/* OPIE */
#include <opie2/odebug.h>
#include <opie2/oresource.h>
#include <qpe/applnk.h>
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" )
+VTApplet::VTApplet()
+ :QObject( 0, "VTApplet" ), m_ourVT( 0 )
{
}
-VTApplet::~VTApplet ( )
+VTApplet::~VTApplet()
{
}
-int VTApplet::position ( ) const
+int VTApplet::position() const
{
return 2;
}
-QString VTApplet::name ( ) const
+QString VTApplet::name() const
{
return tr( "VT shortcut" );
}
-QString VTApplet::text ( ) const
+QString VTApplet::text() const
{
return tr( "Terminal" );
}
/*
QString VTApplet::tr( const char* s ) const
{
return qApp->translate( "VTApplet", s, 0 );
}
QString VTApplet::tr( const char* s, const char* p ) const
{
return qApp->translate( "VTApplet", s, p );
}
*/
-QIconSet VTApplet::icon ( ) const
+QIconSet VTApplet::icon() const
{
QPixmap pix = Opie::Core::OResource::loadPixmap( "terminal", Opie::Core::OResource::SmallIcon );
return pix;
}
-QPopupMenu *VTApplet::popup ( QWidget* parent ) const
+QPopupMenu *VTApplet::popup( QWidget* parent ) const
{
odebug << "VTApplet::popup" << oendl;
struct vt_stat vtstat;
#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 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 )
{
int result = ioctl( fd, VT_DISALLOCATE, i );
/*
if ( result == -1 )
odebug << "VT " << i << " disallocated == free" << oendl;
else
odebug << "VT " << i << " _not_ disallocated == busy" << oendl;
*/
m_subMenu->setItemEnabled( 500+i, result == -1 );
}
::close( fd );
}
void VTApplet::activated()
{
odebug << "VTApplet::activated()" << oendl;
}
-QRESULT VTApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface )
+QRESULT VTApplet::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
{
*iface = 0;
if ( uuid == IID_QUnknown )
*iface = this;
else if ( uuid == IID_MenuApplet )
*iface = this;
else
return QS_FALSE;
if ( *iface )
(*iface)-> addRef ( );
return QS_OK;
}
Q_EXPORT_INTERFACE( )
{
Q_CREATE_INSTANCE( VTApplet )
}
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
@@ -1,52 +1,53 @@
/**********************************************************************
** Copyright (C) 2003 Michael 'Mickey' Lauer. All rights reserved.
**
** Contact me @ mickeyl@handhelds.org
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
**********************************************************************/
#ifndef __OPIE_VTAPPLET_H__
#define __OPIE_VTAPPLET_H__
#include <qpe/menuappletinterface.h>
#include <qobject.h>
class VTApplet : public QObject, public MenuAppletInterface
{
Q_OBJECT
public:
VTApplet ( );
virtual ~VTApplet ( );
QRESULT queryInterface( const QUuid&, QUnknownInterface** );
Q_REFCOUNT
virtual int position() const;
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:
mutable QPopupMenu* m_subMenu;
+ mutable int m_ourVT;
};
#endif