summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-06-20 15:48:41 (UTC)
committer mickeyl <mickeyl>2005-06-20 15:48:41 (UTC)
commit53e05ad30759aefd977e301c84b8b60a78819c76 (patch) (unidiff)
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
@@ -23,106 +23,113 @@ using namespace Opie::Core;
23 23
24/* QT */ 24/* QT */
25#include <qpopupmenu.h> 25#include <qpopupmenu.h>
26 26
27/* STD */ 27/* STD */
28#include <fcntl.h> 28#include <fcntl.h>
29#include <unistd.h> 29#include <unistd.h>
30#include <sys/types.h> 30#include <sys/types.h>
31#include <sys/stat.h> 31#include <sys/stat.h>
32#include <sys/ioctl.h> 32#include <sys/ioctl.h>
33#include <linux/vt.h> 33#include <linux/vt.h>
34 34
35VTApplet::VTApplet ( ) 35VTApplet::VTApplet()
36 : QObject ( 0, "VTApplet" ) 36 :QObject( 0, "VTApplet" ), m_ourVT( 0 )
37{ 37{
38} 38}
39 39
40VTApplet::~VTApplet ( ) 40VTApplet::~VTApplet()
41{ 41{
42} 42}
43 43
44int VTApplet::position ( ) const 44int VTApplet::position() const
45{ 45{
46 return 2; 46 return 2;
47} 47}
48 48
49QString VTApplet::name ( ) const 49QString VTApplet::name() const
50{ 50{
51 return tr( "VT shortcut" ); 51 return tr( "VT shortcut" );
52} 52}
53 53
54QString VTApplet::text ( ) const 54QString VTApplet::text() const
55{ 55{
56 return tr( "Terminal" ); 56 return tr( "Terminal" );
57} 57}
58 58
59/* 59/*
60QString VTApplet::tr( const char* s ) const 60QString VTApplet::tr( const char* s ) const
61{ 61{
62 return qApp->translate( "VTApplet", s, 0 ); 62 return qApp->translate( "VTApplet", s, 0 );
63} 63}
64 64
65QString VTApplet::tr( const char* s, const char* p ) const 65QString VTApplet::tr( const char* s, const char* p ) const
66{ 66{
67 return qApp->translate( "VTApplet", s, p ); 67 return qApp->translate( "VTApplet", s, p );
68} 68}
69*/ 69*/
70 70
71QIconSet VTApplet::icon ( ) const 71QIconSet VTApplet::icon() const
72{ 72{
73 QPixmap pix = Opie::Core::OResource::loadPixmap( "terminal", Opie::Core::OResource::SmallIcon ); 73 QPixmap pix = Opie::Core::OResource::loadPixmap( "terminal", Opie::Core::OResource::SmallIcon );
74 return pix; 74 return pix;
75} 75}
76 76
77QPopupMenu *VTApplet::popup ( QWidget* parent ) const 77QPopupMenu *VTApplet::popup( QWidget* parent ) const
78{ 78{
79 odebug << "VTApplet::popup" << oendl; 79 odebug << "VTApplet::popup" << oendl;
80 80
81 struct vt_stat vtstat; 81 struct vt_stat vtstat;
82#ifdef QT_QWS_DEVFS 82#ifdef QT_QWS_DEVFS
83 int fd = ::open( "/dev/vc/0", O_RDWR ); 83 int fd = ::open( "/dev/vc/0", O_RDWR );
84#else 84#else
85 int fd = ::open( "/dev/tty0", O_RDWR ); 85 int fd = ::open( "/dev/tty0", O_RDWR );
86#endif 86#endif
87 if ( fd == -1 ) return 0; 87 if ( fd == -1 ) return 0;
88 if ( ioctl( fd, VT_GETSTATE, &vtstat ) == -1 ) return 0; 88 if ( ioctl( fd, VT_GETSTATE, &vtstat ) == -1 ) return 0;
89 89
90 m_subMenu = new QPopupMenu( parent ); 90 m_subMenu = new QPopupMenu( parent );
91 m_subMenu->setCheckable( true ); 91 m_subMenu->setCheckable( true );
92 for ( int i = 1; i < 10; ++i ) 92 for ( int i = 1; i < 10; ++i )
93 { 93 {
94 int id = m_subMenu->insertItem( QString::number( i ), 500+i ); 94 int id = m_subMenu->insertItem( QString::number( i ), 500+i );
95 m_subMenu->setItemChecked( id, id-500 == vtstat.v_active ); 95 m_subMenu->setItemChecked( id, id-500 == vtstat.v_active );
96 } 96 }
97 ::close( fd ); 97 ::close( fd );
98 98
99 m_ourVT = vtstat.v_active;
100
99 connect( m_subMenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) ); 101 connect( m_subMenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) );
100 connect( m_subMenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); 102 connect( m_subMenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) );
101 103
102 return m_subMenu; 104 return m_subMenu;
103} 105}
104 106
105 107
106void VTApplet::changeVT( int index ) 108void VTApplet::changeVT( int index )
107{ 109{
108 //odebug << "VTApplet::changeVT( " << index-500 << " )" << oendl; 110 //odebug << "VTApplet::changeVT( " << index-500 << " )" << oendl;
109 111
110#ifdef QT_QWS_DEVFS 112#ifdef QT_QWS_DEVFS
111 int fd = ::open("/dev/vc/0", O_RDWR); 113 int fd = ::open("/dev/vc/0", O_RDWR);
112#else 114#else
113 int fd = ::open("/dev/tty0", O_RDWR); 115 int fd = ::open("/dev/tty0", O_RDWR);
114#endif 116#endif
115 if ( fd == -1 ) return; 117 if ( fd == -1 ) return;
116 ioctl( fd, VT_ACTIVATE, index-500 ); 118 ioctl( fd, VT_ACTIVATE, index-500 );
119 if ( m_ourVT )
120 {
121 odebug << "VTApplet::waiting for user to return to VT " << m_ourVT << oendl;
122 ioctl( fd, VT_WAITACTIVE, m_ourVT );
123 }
117} 124}
118 125
119 126
120void VTApplet::updateMenu() 127void VTApplet::updateMenu()
121{ 128{
122 //odebug << "VTApplet::updateMenu()" << oendl; 129 //odebug << "VTApplet::updateMenu()" << oendl;
123 130
124 int fd = ::open( "/dev/console", O_RDONLY ); 131 int fd = ::open( "/dev/console", O_RDONLY );
125 if ( fd == -1 ) return; 132 if ( fd == -1 ) return;
126 133
127 for ( int i = 1; i < 10; ++i ) 134 for ( int i = 1; i < 10; ++i )
128 { 135 {
@@ -139,25 +146,25 @@ void VTApplet::updateMenu()
139 } 146 }
140 147
141 ::close( fd ); 148 ::close( fd );
142} 149}
143 150
144 151
145void VTApplet::activated() 152void VTApplet::activated()
146{ 153{
147 odebug << "VTApplet::activated()" << oendl; 154 odebug << "VTApplet::activated()" << oendl;
148} 155}
149 156
150 157
151QRESULT VTApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) 158QRESULT VTApplet::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
152{ 159{
153 *iface = 0; 160 *iface = 0;
154 if ( uuid == IID_QUnknown ) 161 if ( uuid == IID_QUnknown )
155 *iface = this; 162 *iface = this;
156 else if ( uuid == IID_MenuApplet ) 163 else if ( uuid == IID_MenuApplet )
157 *iface = this; 164 *iface = this;
158 else 165 else
159 return QS_FALSE; 166 return QS_FALSE;
160 167
161 if ( *iface ) 168 if ( *iface )
162 (*iface)-> addRef ( ); 169 (*iface)-> addRef ( );
163 return QS_OK; 170 return QS_OK;
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:
37 virtual QString text ( ) const; 37 virtual QString text ( ) const;
38 //virtual QString tr( const char* ) const; 38 //virtual QString tr( const char* ) const;
39 //virtual QString tr( const char*, const char* ) const; 39 //virtual QString tr( const char*, const char* ) const;
40 virtual QPopupMenu *popup ( QWidget *parent ) const; 40 virtual QPopupMenu *popup ( QWidget *parent ) const;
41 41
42 virtual void activated (); 42 virtual void activated ();
43 43
44public slots: 44public slots:
45 virtual void changeVT( int index ); 45 virtual void changeVT( int index );
46 virtual void updateMenu(); 46 virtual void updateMenu();
47private: 47private:
48 mutable QPopupMenu* m_subMenu; 48 mutable QPopupMenu* m_subMenu;
49 mutable int m_ourVT;
49}; 50};
50 51
51 52
52#endif 53#endif