author | mickeyl <mickeyl> | 2003-09-22 12:06:07 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-09-22 12:06:07 (UTC) |
commit | fd500184450e37c239e573adf1c12a6ff62b65f6 (patch) (unidiff) | |
tree | 2ce7fad7a9af7d17d1ab9495b1e32d353c5f08b0 | |
parent | bef84fa57fcb1ea5815ea55be7ac12b1a9df0c24 (diff) | |
download | opie-fd500184450e37c239e573adf1c12a6ff62b65f6.zip opie-fd500184450e37c239e573adf1c12a6ff62b65f6.tar.gz opie-fd500184450e37c239e573adf1c12a6ff62b65f6.tar.bz2 |
FEATURE: vtapplet now indicates which virtual terminals are occupied
-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 | |||
@@ -26,20 +26,12 @@ | |||
26 | #include <sys/stat.h> | 26 | #include <sys/stat.h> |
27 | #include <sys/ioctl.h> | 27 | #include <sys/ioctl.h> |
28 | #include <linux/vt.h> | 28 | #include <linux/vt.h> |
29 | 29 | ||
30 | #include "vt.h" | 30 | #include "vt.h" |
31 | 31 | ||
32 | class VTPopupMenu : public QPopupMenu | ||
33 | { | ||
34 | public: | ||
35 | VTPopupMenu( QWidget * parent=0, const char * name=0 ) : QPopupMenu( parent, name ) {}; | ||
36 | |||
37 | virtual void activated() { qDebug( "VTPopupMenu::activated()" ); } | ||
38 | }; | ||
39 | |||
40 | VTApplet::VTApplet ( ) | 32 | VTApplet::VTApplet ( ) |
41 | : QObject ( 0, "VTApplet" ), ref ( 0 ) | 33 | : QObject ( 0, "VTApplet" ), ref ( 0 ) |
42 | { | 34 | { |
43 | } | 35 | } |
44 | 36 | ||
45 | VTApplet::~VTApplet ( ) | 37 | VTApplet::~VTApplet ( ) |
@@ -85,40 +77,67 @@ QIconSet VTApplet::icon ( ) const | |||
85 | 77 | ||
86 | QPopupMenu *VTApplet::popup ( QWidget* parent ) const | 78 | QPopupMenu *VTApplet::popup ( QWidget* parent ) const |
87 | { | 79 | { |
88 | qDebug( "VTApplet::popup" ); | 80 | qDebug( "VTApplet::popup" ); |
89 | 81 | ||
90 | struct vt_stat vtstat; | 82 | struct vt_stat vtstat; |
91 | int fd = ::open("/dev/tty0", O_RDWR); | 83 | int fd = ::open( "/dev/tty0", O_RDWR ); |
92 | if ( fd == -1 ) return 0; | 84 | if ( fd == -1 ) return 0; |
93 | if ( ioctl( fd, VT_GETSTATE, &vtstat ) == -1 ) return 0; | 85 | if ( ioctl( fd, VT_GETSTATE, &vtstat ) == -1 ) return 0; |
94 | 86 | ||
95 | submenu = new VTPopupMenu( parent ); | 87 | submenu = new QPopupMenu( parent ); |
96 | submenu->setCheckable( true ); | 88 | submenu->setCheckable( true ); |
97 | for ( int i = 1; i < 10; ++i ) | 89 | for ( int i = 1; i < 10; ++i ) |
98 | { | 90 | { |
99 | int id = submenu->insertItem( QString::number( i ), 500+i ); | 91 | int id = submenu->insertItem( QString::number( i ), 500+i ); |
100 | submenu->setItemChecked( id, id-500 == vtstat.v_active ); | 92 | submenu->setItemChecked( id, id-500 == vtstat.v_active ); |
101 | } | 93 | } |
102 | ::close( fd ); | 94 | ::close( fd ); |
103 | 95 | ||
104 | connect( submenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) ); | 96 | connect( submenu, SIGNAL( activated(int) ), this, SLOT( changeVT(int) ) ); |
97 | connect( submenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); | ||
105 | 98 | ||
106 | return submenu; | 99 | return submenu; |
107 | } | 100 | } |
108 | 101 | ||
109 | 102 | ||
110 | void VTApplet::changeVT( int index ) | 103 | void VTApplet::changeVT( int index ) |
111 | { | 104 | { |
112 | qDebug( "VTApplet::changeVT( %d )", index-500 ); | 105 | //qDebug( "VTApplet::changeVT( %d )", index-500 ); |
106 | |||
113 | int fd = ::open("/dev/tty0", O_RDWR); | 107 | int fd = ::open("/dev/tty0", O_RDWR); |
114 | if ( fd == -1 ) return; | 108 | if ( fd == -1 ) return; |
115 | ioctl( fd, VT_ACTIVATE, index-500 ); | 109 | ioctl( fd, VT_ACTIVATE, index-500 ); |
116 | } | 110 | } |
117 | 111 | ||
118 | 112 | ||
113 | void VTApplet::updateMenu() | ||
114 | { | ||
115 | //qDebug( "VTApplet::updateMenu()" ); | ||
116 | |||
117 | int fd = ::open( "/dev/console", O_RDONLY ); | ||
118 | if ( fd == -1 ) return; | ||
119 | |||
120 | for ( int i = 1; i < 10; ++i ) | ||
121 | { | ||
122 | int result = ioctl( fd, VT_DISALLOCATE, i ); | ||
123 | |||
124 | /* | ||
125 | if ( result == -1 ) | ||
126 | qDebug( "VT %d disallocated == free", i ); | ||
127 | else | ||
128 | qDebug( "VT %d _not_ disallocated == busy", i ); | ||
129 | */ | ||
130 | |||
131 | submenu->setItemEnabled( 500+i, result == -1 ); | ||
132 | } | ||
133 | |||
134 | ::close( fd ); | ||
135 | } | ||
136 | |||
137 | |||
119 | void VTApplet::activated() | 138 | void VTApplet::activated() |
120 | { | 139 | { |
121 | qDebug( "VTApplet::activated()" ); | 140 | qDebug( "VTApplet::activated()" ); |
122 | } | 141 | } |
123 | 142 | ||
124 | 143 | ||
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 | |||
@@ -40,12 +40,13 @@ public: | |||
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 | ||
44 | public slots: | 44 | public slots: |
45 | virtual void changeVT( int index ); | 45 | virtual void changeVT( int index ); |
46 | virtual void updateMenu(); | ||
46 | 47 | ||
47 | private: | 48 | private: |
48 | ulong ref; | 49 | ulong ref; |
49 | }; | 50 | }; |
50 | 51 | ||
51 | static QPopupMenu* submenu; | 52 | static QPopupMenu* submenu; |