summaryrefslogtreecommitdiff
authorharlekin <harlekin>2002-10-17 17:56:30 (UTC)
committer harlekin <harlekin>2002-10-17 17:56:30 (UTC)
commit08e9fcbbaf57383fd65fe4eb197d97a51abe0f26 (patch) (unidiff)
tree5d7fc6d46ae5721481e1f8f98a7872416f720993
parenteb70c5c231b80d1e925b0098ad3c951917900071 (diff)
downloadopie-08e9fcbbaf57383fd65fe4eb197d97a51abe0f26.zip
opie-08e9fcbbaf57383fd65fe4eb197d97a51abe0f26.tar.gz
opie-08e9fcbbaf57383fd65fe4eb197d97a51abe0f26.tar.bz2
autologin if profiles io layer offers it
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/MyPty.cpp2
-rw-r--r--noncore/apps/opie-console/mainwindow.cpp5
2 files changed, 7 insertions, 0 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp
index 565d03f..a2373bf 100644
--- a/noncore/apps/opie-console/MyPty.cpp
+++ b/noncore/apps/opie-console/MyPty.cpp
@@ -1,324 +1,326 @@
1/* -------------------------------------------------------------------------- */ 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [MyPty.C] Pseudo Terminal Device */ 3/* [MyPty.C] Pseudo Terminal Device */
4/* */ 4/* */
5/* -------------------------------------------------------------------------- */ 5/* -------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* -------------------------------------------------------------------------- */ 10/* -------------------------------------------------------------------------- */
11 /* */ 11 /* */
12/* Ported Konsole to Qt/Embedded */ 12/* Ported Konsole to Qt/Embedded */
13 /* */ 13 /* */
14/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 14/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
15 /* */ 15 /* */
16/* -------------------------------------------------------------------------- */ 16/* -------------------------------------------------------------------------- */
17 17
18/* If you're compiling konsole on non-Linux platforms and find 18/* If you're compiling konsole on non-Linux platforms and find
19 problems that you can track down to this file, please have 19 problems that you can track down to this file, please have
20 a look into ../README.ports, too. 20 a look into ../README.ports, too.
21*/ 21*/
22 22
23/*! \file 23/*! \file
24*/ 24*/
25 25
26/*! \class TEPty 26/*! \class TEPty
27 27
28 \brief Ptys provide a pseudo terminal connection to a program. 28 \brief Ptys provide a pseudo terminal connection to a program.
29 29
30 Although closely related to pipes, these pseudo terminal connections have 30 Although closely related to pipes, these pseudo terminal connections have
31 some ability, that makes it nessesary to uses them. Most importent, they 31 some ability, that makes it nessesary to uses them. Most importent, they
32 know about changing screen sizes and UNIX job control. 32 know about changing screen sizes and UNIX job control.
33 33
34 Within the terminal emulation framework, this class represents the 34 Within the terminal emulation framework, this class represents the
35 host side of the terminal together with the connecting serial line. 35 host side of the terminal together with the connecting serial line.
36 36
37 One can create many instances of this class within a program. 37 One can create many instances of this class within a program.
38 As a side effect of using this class, a signal(2) handler is 38 As a side effect of using this class, a signal(2) handler is
39 installed on SIGCHLD. 39 installed on SIGCHLD.
40 40
41 \par FIXME 41 \par FIXME
42 42
43 [NOTE: much of the technical stuff below will be replaced by forkpty.] 43 [NOTE: much of the technical stuff below will be replaced by forkpty.]
44 44
45 publish the SIGCHLD signal if not related to an instance. 45 publish the SIGCHLD signal if not related to an instance.
46 46
47 clearify TEPty::done vs. TEPty::~TEPty semantics. 47 clearify TEPty::done vs. TEPty::~TEPty semantics.
48 check if pty is restartable via run after done. 48 check if pty is restartable via run after done.
49 49
50 \par Pseudo terminals 50 \par Pseudo terminals
51 51
52 Pseudo terminals are a unique feature of UNIX, and always come in form of 52 Pseudo terminals are a unique feature of UNIX, and always come in form of
53 pairs of devices (/dev/ptyXX and /dev/ttyXX), which are connected to each 53 pairs of devices (/dev/ptyXX and /dev/ttyXX), which are connected to each
54 other by the operating system. One may think of them as two serial devices 54 other by the operating system. One may think of them as two serial devices
55 linked by a null-modem cable. Being based on devices the number of 55 linked by a null-modem cable. Being based on devices the number of
56 simultanous instances of this class is (globally) limited by the number of 56 simultanous instances of this class is (globally) limited by the number of
57 those device pairs, which is 256. 57 those device pairs, which is 256.
58 58
59 Another technic are UNIX 98 PTY's. These are supported also, and prefered 59 Another technic are UNIX 98 PTY's. These are supported also, and prefered
60 over the (obsolete) predecessor. 60 over the (obsolete) predecessor.
61 61
62 There's a sinister ioctl(2), signal(2) and job control stuff 62 There's a sinister ioctl(2), signal(2) and job control stuff
63 nessesary to make everything work as it should. 63 nessesary to make everything work as it should.
64*/ 64*/
65 65
66 66
67#include <qapplication.h> 67#include <qapplication.h>
68#include <qsocketnotifier.h> 68#include <qsocketnotifier.h>
69#include <qstring.h> 69#include <qstring.h>
70 70
71#include <stdlib.h> 71#include <stdlib.h>
72#include <stdio.h> 72#include <stdio.h>
73#include <signal.h> 73#include <signal.h>
74#include <fcntl.h> 74#include <fcntl.h>
75#include <unistd.h> 75#include <unistd.h>
76#include <termios.h> 76#include <termios.h>
77#include <sys/types.h> 77#include <sys/types.h>
78#include <sys/ioctl.h> 78#include <sys/ioctl.h>
79#include <sys/wait.h> 79#include <sys/wait.h>
80 80
81#ifdef HAVE_OPENPTY 81#ifdef HAVE_OPENPTY
82#include <pty.h> 82#include <pty.h>
83#endif 83#endif
84 84
85#include "procctl.h" 85#include "procctl.h"
86#include "MyPty.h" 86#include "MyPty.h"
87 87
88 88
89#undef VERBOSE_DEBUG 89#undef VERBOSE_DEBUG
90 90
91 91
92/* -------------------------------------------------------------------------- */ 92/* -------------------------------------------------------------------------- */
93 93
94/*! 94/*!
95 Informs the client program about the 95 Informs the client program about the
96 actual size of the window. 96 actual size of the window.
97*/ 97*/
98 98
99void MyPty::setSize(int lines, int columns) 99void MyPty::setSize(int lines, int columns)
100{ 100{
101 struct winsize wsize; 101 struct winsize wsize;
102 wsize.ws_row = (unsigned short)lines; 102 wsize.ws_row = (unsigned short)lines;
103 wsize.ws_col = (unsigned short)columns; 103 wsize.ws_col = (unsigned short)columns;
104 if(m_fd < 0) return; 104 if(m_fd < 0) return;
105 ioctl(m_fd,TIOCSWINSZ,(char *)&wsize); 105 ioctl(m_fd,TIOCSWINSZ,(char *)&wsize);
106} 106}
107 107
108 108
109void MyPty::donePty() 109void MyPty::donePty()
110{ 110{
111 // This is code from the Qt DumbTerminal example 111 // This is code from the Qt DumbTerminal example
112 int status = 0; 112 int status = 0;
113 113
114 ::close(m_fd); 114 ::close(m_fd);
115 115
116 if (m_cpid) { 116 if (m_cpid) {
117 kill(m_cpid, SIGHUP); 117 kill(m_cpid, SIGHUP);
118 //waitpid(m_cpid, &status, 0); 118 //waitpid(m_cpid, &status, 0);
119 delete m_sn_e; 119 delete m_sn_e;
120 delete m_sn_r; 120 delete m_sn_r;
121 m_sn_e = 0l; 121 m_sn_e = 0l;
122 m_sn_r = 0l; 122 m_sn_r = 0l;
123 } 123 }
124 124
125 m_cpid = 0; 125 m_cpid = 0;
126 m_fd = -1; 126 m_fd = -1;
127// emit done(status); 127// emit done(status);
128} 128}
129 129
130 130
131const char* MyPty::deviceName() 131const char* MyPty::deviceName()
132{ 132{
133 return m_ttynam; 133 return m_ttynam;
134} 134}
135 135
136 136
137void MyPty::error() 137void MyPty::error()
138{ 138{
139 // This is code from the Qt DumbTerminal example 139 // This is code from the Qt DumbTerminal example
140 donePty(); 140 donePty();
141} 141}
142 142
143void MyPty::start() { 143void MyPty::start() {
144 char* cmd = "/bin/sh"; 144 char* cmd = "/bin/sh";
145 QStrList lis; 145 QStrList lis;
146 int r =run(cmd, lis, 0, 0); 146 int r =run(cmd, lis, 0, 0);
147 r = r; 147 r = r;
148} 148}
149/*! 149/*!
150 start the client program. 150 start the client program.
151*/ 151*/
152int MyPty::run(const char* cmd, QStrList &, const char*, int) 152int MyPty::run(const char* cmd, QStrList &, const char*, int)
153{ 153{
154 // This is code from the Qt DumbTerminal example 154 // This is code from the Qt DumbTerminal example
155 m_cpid = fork(); 155 m_cpid = fork();
156 156
157 if ( !m_cpid ) { 157 if ( !m_cpid ) {
158 // child - exec shell on tty 158 // child - exec shell on tty
159 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL); 159 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
160 int ttyfd = ::open(m_ttynam, O_RDWR); 160 int ttyfd = ::open(m_ttynam, O_RDWR);
161 dup2(ttyfd, STDIN_FILENO); 161 dup2(ttyfd, STDIN_FILENO);
162 dup2(ttyfd, STDOUT_FILENO); 162 dup2(ttyfd, STDOUT_FILENO);
163 dup2(ttyfd, STDERR_FILENO); 163 dup2(ttyfd, STDERR_FILENO);
164 // should be done with tty, so close it 164 // should be done with tty, so close it
165 ::close(ttyfd); 165 ::close(ttyfd);
166 static struct termios ttmode; 166 static struct termios ttmode;
167 if ( setsid() < 0 ) 167 if ( setsid() < 0 )
168 perror( "failed to set process group" ); 168 perror( "failed to set process group" );
169#if defined (TIOCSCTTY) 169#if defined (TIOCSCTTY)
170 // grabbed from APUE by Stevens 170 // grabbed from APUE by Stevens
171 ioctl(STDIN_FILENO, TIOCSCTTY, 0); 171 ioctl(STDIN_FILENO, TIOCSCTTY, 0);
172#endif 172#endif
173 tcgetattr( STDIN_FILENO, &ttmode ); 173 tcgetattr( STDIN_FILENO, &ttmode );
174 ttmode.c_cc[VINTR] = 3; 174 ttmode.c_cc[VINTR] = 3;
175 ttmode.c_cc[VERASE] = 8; 175 ttmode.c_cc[VERASE] = 8;
176 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); 176 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
177 setenv("TERM","vt100",1); 177 setenv("TERM","vt100",1);
178 setenv("COLORTERM","0",1); 178 setenv("COLORTERM","0",1);
179 179
180 if (getuid() == 0) { 180 if (getuid() == 0) {
181 char msg[] = "WARNING: You are running this shell as root!\n"; 181 char msg[] = "WARNING: You are running this shell as root!\n";
182 write(ttyfd, msg, sizeof(msg)); 182 write(ttyfd, msg, sizeof(msg));
183 } 183 }
184 execl(cmd, cmd, 0); 184 execl(cmd, cmd, 0);
185 185
186 donePty(); 186 donePty();
187 exit(-1); 187 exit(-1);
188 } 188 }
189 189
190 // parent - continue as a widget 190 // parent - continue as a widget
191 delete m_sn_r; 191 delete m_sn_r;
192 m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); 192 m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this);
193 delete m_sn_e; 193 delete m_sn_e;
194 m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); 194 m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this);
195 connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); 195 connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty()));
196 connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); 196 connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error()));
197 197
198 return 0; 198 return 0;
199} 199}
200 200
201int MyPty::openPty() 201int MyPty::openPty()
202{ 202{
203 // This is code from the Qt DumbTerminal example 203 // This is code from the Qt DumbTerminal example
204 int ptyfd = -1; 204 int ptyfd = -1;
205 205
206#ifdef HAVE_OPENPTY 206#ifdef HAVE_OPENPTY
207 int ttyfd; 207 int ttyfd;
208 if ( openpty(&ptyfd,&ttyfd,ttynam,0,0) ) 208 if ( openpty(&ptyfd,&ttyfd,ttynam,0,0) )
209 ptyfd = -1; 209 ptyfd = -1;
210 else 210 else
211 close(ttyfd); // we open the ttynam ourselves. 211 close(ttyfd); // we open the ttynam ourselves.
212#else 212#else
213 for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) { 213 for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) {
214 for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) { 214 for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) {
215 sprintf(m_ptynam,"/dev/pty%c%c",*c0,*c1); 215 sprintf(m_ptynam,"/dev/pty%c%c",*c0,*c1);
216 sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1); 216 sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1);
217 if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) { 217 if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) {
218 if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) { 218 if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) {
219 ::close(ptyfd); 219 ::close(ptyfd);
220 ptyfd = -1; 220 ptyfd = -1;
221 } 221 }
222 } 222 }
223 } 223 }
224 } 224 }
225#endif 225#endif
226 226
227 if ( ptyfd < 0 ) { 227 if ( ptyfd < 0 ) {
228 //qApp->exit(1); 228 //qApp->exit(1);
229 return -1; 229 return -1;
230 } 230 }
231 231
232 return ptyfd; 232 return ptyfd;
233} 233}
234 234
235/*! 235/*!
236 Create an instance. 236 Create an instance.
237*/ 237*/
238MyPty::MyPty(const Profile&) : m_cpid(0) 238MyPty::MyPty(const Profile&) : m_cpid(0)
239{ 239{
240 m_sn_e = 0l; 240 m_sn_e = 0l;
241 m_sn_r = 0l; 241 m_sn_r = 0l;
242 m_fd = openPty(); 242 m_fd = openPty();
243 ProcCtl* ctl = ProcCtl::self(); 243 ProcCtl* ctl = ProcCtl::self();
244} 244}
245 245
246/*! 246/*!
247 Destructor. 247 Destructor.
248 Note that the related client program is not killed 248 Note that the related client program is not killed
249 (yet) when a instance is deleted. 249 (yet) when a instance is deleted.
250*/ 250*/
251MyPty::~MyPty() 251MyPty::~MyPty()
252{ 252{
253 donePty(); 253 donePty();
254} 254}
255QString MyPty::identifier()const { 255QString MyPty::identifier()const {
256 return QString::fromLatin1("term"); 256 return QString::fromLatin1("term");
257} 257}
258QString MyPty::name()const{ 258QString MyPty::name()const{
259 return identifier(); 259 return identifier();
260} 260}
261bool MyPty::open() { 261bool MyPty::open() {
262 if (m_fd < 0) 262 if (m_fd < 0)
263 m_fd = openPty(); 263 m_fd = openPty();
264 264
265 start(); 265 start();
266 return true; 266 return true;
267} 267}
268void MyPty::close() { 268void MyPty::close() {
269 donePty(); 269 donePty();
270 m_fd = openPty(); 270 m_fd = openPty();
271} 271}
272void MyPty::reload( const Profile& ) { 272void MyPty::reload( const Profile& ) {
273 273
274} 274}
275/*! sends len bytes through the line */ 275/*! sends len bytes through the line */
276void MyPty::send(const QByteArray& ar) 276void MyPty::send(const QByteArray& ar)
277{ 277{
278#ifdef VERBOSE_DEBUG 278#ifdef VERBOSE_DEBUG
279 // verbose debug 279 // verbose debug
280 printf("sending bytes:\n"); 280 printf("sending bytes:\n");
281 for (uint i = 0; i < ar.count(); i++) 281 for (uint i = 0; i < ar.count(); i++)
282 printf("%c", ar[i]); 282 printf("%c", ar[i]);
283 printf("\n"); 283 printf("\n");
284#endif 284#endif
285 285
286 ::write(m_fd, ar.data(), ar.count()); 286 ::write(m_fd, ar.data(), ar.count());
287} 287}
288 288
289/*! indicates that a block of data is received */ 289/*! indicates that a block of data is received */
290void MyPty::readPty() 290void MyPty::readPty()
291{ 291{
292 QByteArray buf(4096); 292 QByteArray buf(4096);
293 293
294 int len = ::read( m_fd, buf.data(), 4096 ); 294 int len = ::read( m_fd, buf.data(), 4096 );
295 295
296 if (len == -1 || len == 0) { 296 if (len == -1 || len == 0) {
297 donePty(); 297 donePty();
298 return; 298 return;
299 } 299 }
300 300
301 if (len < 0) 301 if (len < 0)
302 return; 302 return;
303 303
304 304
305 buf.resize(len); 305 buf.resize(len);
306 emit received(buf); 306 emit received(buf);
307 307
308#ifdef VERBOSE_DEBUG 308#ifdef VERBOSE_DEBUG
309 // verbose debug 309 // verbose debug
310 printf("read bytes:\n"); 310 printf("read bytes:\n");
311 for (uint i = 0; i < buf.count(); i++) 311 for (uint i = 0; i < buf.count(); i++)
312 printf("%c", buf[i]); 312 printf("%c", buf[i]);
313 printf("\n"); 313 printf("\n");
314#endif 314#endif
315 315
316} 316}
317QBitArray MyPty::supports()const { 317QBitArray MyPty::supports()const {
318 QBitArray ar(3); 318 QBitArray ar(3);
319 //autoconnect
319 ar[0] = 1; 320 ar[0] = 1;
321 //
320 ar[1] = 0; 322 ar[1] = 0;
321 ar[2] = 0; 323 ar[2] = 0;
322 324
323 return ar; 325 return ar;
324} 326}
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp
index 3066b35..fdb0452 100644
--- a/noncore/apps/opie-console/mainwindow.cpp
+++ b/noncore/apps/opie-console/mainwindow.cpp
@@ -17,466 +17,471 @@
17 17
18#include "keytrans.h" 18#include "keytrans.h"
19#include "profileeditordialog.h" 19#include "profileeditordialog.h"
20#include "configdialog.h" 20#include "configdialog.h"
21#include "default.h" 21#include "default.h"
22#include "metafactory.h" 22#include "metafactory.h"
23#include "profile.h" 23#include "profile.h"
24#include "profilemanager.h" 24#include "profilemanager.h"
25#include "mainwindow.h" 25#include "mainwindow.h"
26#include "tabwidget.h" 26#include "tabwidget.h"
27#include "transferdialog.h" 27#include "transferdialog.h"
28#include "function_keyboard.h" 28#include "function_keyboard.h"
29#include "emulation_handler.h" 29#include "emulation_handler.h"
30#include "script.h" 30#include "script.h"
31 31
32 32
33 33
34MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) { 34MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) {
35 KeyTrans::loadAll(); 35 KeyTrans::loadAll();
36 for (int i = 0; i < KeyTrans::count(); i++ ) { 36 for (int i = 0; i < KeyTrans::count(); i++ ) {
37 KeyTrans* s = KeyTrans::find(i ); 37 KeyTrans* s = KeyTrans::find(i );
38 assert( s ); 38 assert( s );
39 } 39 }
40 m_factory = new MetaFactory(); 40 m_factory = new MetaFactory();
41 Default def(m_factory); 41 Default def(m_factory);
42 m_sessions.setAutoDelete( TRUE ); 42 m_sessions.setAutoDelete( TRUE );
43 m_curSession = 0; 43 m_curSession = 0;
44 m_manager = new ProfileManager( m_factory ); 44 m_manager = new ProfileManager( m_factory );
45 m_manager->load(); 45 m_manager->load();
46 46
47 initUI(); 47 initUI();
48 populateProfiles(); 48 populateProfiles();
49} 49}
50void MainWindow::initUI() { 50void MainWindow::initUI() {
51 setToolBarsMovable( FALSE ); 51 setToolBarsMovable( FALSE );
52 52
53 /* tool bar for the menu */ 53 /* tool bar for the menu */
54 m_tool = new QToolBar( this ); 54 m_tool = new QToolBar( this );
55 m_tool->setHorizontalStretchable( TRUE ); 55 m_tool->setHorizontalStretchable( TRUE );
56 56
57 m_bar = new QMenuBar( m_tool ); 57 m_bar = new QMenuBar( m_tool );
58 m_console = new QPopupMenu( this ); 58 m_console = new QPopupMenu( this );
59 m_scripts = new QPopupMenu( this ); 59 m_scripts = new QPopupMenu( this );
60 m_sessionsPop= new QPopupMenu( this ); 60 m_sessionsPop= new QPopupMenu( this );
61 //m_settings = new QPopupMenu( this ); 61 //m_settings = new QPopupMenu( this );
62 62
63 /* add a toolbar for icons */ 63 /* add a toolbar for icons */
64 m_icons = new QToolBar(this); 64 m_icons = new QToolBar(this);
65 65
66 66
67 67
68 68
69 /* 69 /*
70 * the settings action 70 * the settings action
71 */ 71 */
72 m_setProfiles = new QAction(tr("Configure Profiles"), 72 m_setProfiles = new QAction(tr("Configure Profiles"),
73 Resource::loadPixmap( "SettingsIcon" ), 73 Resource::loadPixmap( "SettingsIcon" ),
74 QString::null, 0, this, 0); 74 QString::null, 0, this, 0);
75 // m_setProfiles->addTo( m_settings ); 75 // m_setProfiles->addTo( m_settings );
76 m_setProfiles->addTo( m_icons ); 76 m_setProfiles->addTo( m_icons );
77 m_setProfiles->addTo( m_console ); 77 m_setProfiles->addTo( m_console );
78 connect( m_setProfiles, SIGNAL(activated() ), 78 connect( m_setProfiles, SIGNAL(activated() ),
79 this, SLOT(slotConfigure() ) ); 79 this, SLOT(slotConfigure() ) );
80 80
81 81
82 /* 82 /*
83 * new Action for new sessions 83 * new Action for new sessions
84 */ 84 */
85 QAction* a = new QAction(tr("New Connection"), 85 QAction* a = new QAction(tr("New Connection"),
86 Resource::loadPixmap( "new" ), 86 Resource::loadPixmap( "new" ),
87 QString::null, 0, this, 0); 87 QString::null, 0, this, 0);
88 a->addTo( m_console ); 88 a->addTo( m_console );
89 a->addTo( m_icons ); 89 a->addTo( m_icons );
90 connect(a, SIGNAL(activated() ), 90 connect(a, SIGNAL(activated() ),
91 this, SLOT(slotNew() ) ); 91 this, SLOT(slotNew() ) );
92 92
93 /* 93 /*
94 * connect action 94 * connect action
95 */ 95 */
96 m_connect = new QAction(); 96 m_connect = new QAction();
97 m_connect->setText( tr("Connect") ); 97 m_connect->setText( tr("Connect") );
98 m_connect->addTo( m_console ); 98 m_connect->addTo( m_console );
99 connect(m_connect, SIGNAL(activated() ), 99 connect(m_connect, SIGNAL(activated() ),
100 this, SLOT(slotConnect() ) ); 100 this, SLOT(slotConnect() ) );
101 101
102 /* 102 /*
103 * disconnect action 103 * disconnect action
104 */ 104 */
105 m_disconnect = new QAction(); 105 m_disconnect = new QAction();
106 m_disconnect->setText( tr("Disconnect") ); 106 m_disconnect->setText( tr("Disconnect") );
107 m_disconnect->addTo( m_console ); 107 m_disconnect->addTo( m_console );
108 connect(m_disconnect, SIGNAL(activated() ), 108 connect(m_disconnect, SIGNAL(activated() ),
109 this, SLOT(slotDisconnect() ) ); 109 this, SLOT(slotDisconnect() ) );
110 110
111 m_transfer = new QAction(); 111 m_transfer = new QAction();
112 m_transfer->setText( tr("Transfer file...") ); 112 m_transfer->setText( tr("Transfer file...") );
113 m_transfer->addTo( m_console ); 113 m_transfer->addTo( m_console );
114 connect(m_transfer, SIGNAL(activated() ), 114 connect(m_transfer, SIGNAL(activated() ),
115 this, SLOT(slotTransfer() ) ); 115 this, SLOT(slotTransfer() ) );
116 116
117 117
118 /* 118 /*
119 * fullscreen 119 * fullscreen
120 */ 120 */
121 m_isFullscreen = false; 121 m_isFullscreen = false;
122 122
123 m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" ) 123 m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" )
124 , QString::null, 0, this, 0); 124 , QString::null, 0, this, 0);
125 m_fullscreen->addTo( m_console ); 125 m_fullscreen->addTo( m_console );
126 m_fullscreen->addTo( m_icons ); 126 m_fullscreen->addTo( m_icons );
127 connect( m_fullscreen, SIGNAL( activated() ), 127 connect( m_fullscreen, SIGNAL( activated() ),
128 this, SLOT( slotFullscreen() ) ); 128 this, SLOT( slotFullscreen() ) );
129 129
130 /* 130 /*
131 * terminate action 131 * terminate action
132 */ 132 */
133 m_terminate = new QAction(); 133 m_terminate = new QAction();
134 m_terminate->setText( tr("Terminate") ); 134 m_terminate->setText( tr("Terminate") );
135 m_terminate->addTo( m_console ); 135 m_terminate->addTo( m_console );
136 connect(m_terminate, SIGNAL(activated() ), 136 connect(m_terminate, SIGNAL(activated() ),
137 this, SLOT(slotTerminate() ) ); 137 this, SLOT(slotTerminate() ) );
138 138
139 m_closewindow = new QAction(); 139 m_closewindow = new QAction();
140 m_closewindow->setText( tr("Close Window") ); 140 m_closewindow->setText( tr("Close Window") );
141 m_closewindow->addTo( m_console ); 141 m_closewindow->addTo( m_console );
142 connect( m_closewindow, SIGNAL(activated() ), 142 connect( m_closewindow, SIGNAL(activated() ),
143 this, SLOT(slotClose() ) ); 143 this, SLOT(slotClose() ) );
144 144
145 145
146 /* 146 /*
147 * script actions 147 * script actions
148 */ 148 */
149 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); 149 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0);
150 m_recordScript->addTo(m_scripts); 150 m_recordScript->addTo(m_scripts);
151 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); 151 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript()));
152 152
153 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); 153 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0);
154 m_saveScript->addTo(m_scripts); 154 m_saveScript->addTo(m_scripts);
155 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); 155 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript()));
156 156
157 m_runScript = new QAction(tr("Run Script"), QString::null, 0, this, 0); 157 m_runScript = new QAction(tr("Run Script"), QString::null, 0, this, 0);
158 m_runScript->addTo(m_scripts); 158 m_runScript->addTo(m_scripts);
159 connect(m_runScript, SIGNAL(activated()), this, SLOT(slotRunScript())); 159 connect(m_runScript, SIGNAL(activated()), this, SLOT(slotRunScript()));
160 160
161 /* 161 /*
162 * action that open/closes the keyboard 162 * action that open/closes the keyboard
163 */ 163 */
164 m_openKeys = new QAction (tr("Open Keyboard..."), 164 m_openKeys = new QAction (tr("Open Keyboard..."),
165 Resource::loadPixmap( "down" ), 165 Resource::loadPixmap( "down" ),
166 QString::null, 0, this, 0); 166 QString::null, 0, this, 0);
167 167
168 m_openKeys->setToggleAction(true); 168 m_openKeys->setToggleAction(true);
169 169
170 connect (m_openKeys, SIGNAL(toggled(bool)), 170 connect (m_openKeys, SIGNAL(toggled(bool)),
171 this, SLOT(slotOpenKeb(bool))); 171 this, SLOT(slotOpenKeb(bool)));
172 m_openKeys->addTo(m_icons); 172 m_openKeys->addTo(m_icons);
173 173
174 174
175 /* insert the submenu */ 175 /* insert the submenu */
176 m_console->insertItem(tr("New from Profile"), m_sessionsPop, 176 m_console->insertItem(tr("New from Profile"), m_sessionsPop,
177 -1, 0); 177 -1, 0);
178 178
179 /* insert the connection menu */ 179 /* insert the connection menu */
180 m_bar->insertItem( tr("Connection"), m_console ); 180 m_bar->insertItem( tr("Connection"), m_console );
181 181
182 /* the scripts menu */ 182 /* the scripts menu */
183 m_bar->insertItem( tr("Scripts"), m_scripts ); 183 m_bar->insertItem( tr("Scripts"), m_scripts );
184 184
185 /* the settings menu */ 185 /* the settings menu */
186 // m_bar->insertItem( tr("Settings"), m_settings ); 186 // m_bar->insertItem( tr("Settings"), m_settings );
187 187
188 /* and the keyboard */ 188 /* and the keyboard */
189 m_keyBar = new QToolBar(this); 189 m_keyBar = new QToolBar(this);
190 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); 190 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE );
191 m_keyBar->setHorizontalStretchable( TRUE ); 191 m_keyBar->setHorizontalStretchable( TRUE );
192 m_keyBar->hide(); 192 m_keyBar->hide();
193 193
194 m_kb = new FunctionKeyboard(m_keyBar); 194 m_kb = new FunctionKeyboard(m_keyBar);
195 connect(m_kb, SIGNAL(keyPressed(ushort, ushort, bool, bool, bool)), 195 connect(m_kb, SIGNAL(keyPressed(ushort, ushort, bool, bool, bool)),
196 this, SLOT(slotKeyReceived(ushort, ushort, bool, bool, bool))); 196 this, SLOT(slotKeyReceived(ushort, ushort, bool, bool, bool)));
197 197
198 198
199 199
200 m_connect->setEnabled( false ); 200 m_connect->setEnabled( false );
201 m_disconnect->setEnabled( false ); 201 m_disconnect->setEnabled( false );
202 m_terminate->setEnabled( false ); 202 m_terminate->setEnabled( false );
203 m_transfer->setEnabled( false ); 203 m_transfer->setEnabled( false );
204 m_recordScript->setEnabled( false ); 204 m_recordScript->setEnabled( false );
205 m_saveScript->setEnabled( false ); 205 m_saveScript->setEnabled( false );
206 m_runScript->setEnabled( false ); 206 m_runScript->setEnabled( false );
207 m_fullscreen->setEnabled( false ); 207 m_fullscreen->setEnabled( false );
208 m_closewindow->setEnabled( false ); 208 m_closewindow->setEnabled( false );
209 209
210 /* 210 /*
211 * connect to the menu activation 211 * connect to the menu activation
212 */ 212 */
213 connect( m_sessionsPop, SIGNAL(activated( int ) ), 213 connect( m_sessionsPop, SIGNAL(activated( int ) ),
214 this, SLOT(slotProfile( int ) ) ); 214 this, SLOT(slotProfile( int ) ) );
215 215
216 m_consoleWindow = new TabWidget( this, "blah"); 216 m_consoleWindow = new TabWidget( this, "blah");
217 connect(m_consoleWindow, SIGNAL(activated(Session*) ), 217 connect(m_consoleWindow, SIGNAL(activated(Session*) ),
218 this, SLOT(slotSessionChanged(Session*) ) ); 218 this, SLOT(slotSessionChanged(Session*) ) );
219 setCentralWidget( m_consoleWindow ); 219 setCentralWidget( m_consoleWindow );
220 220
221} 221}
222 222
223ProfileManager* MainWindow::manager() { 223ProfileManager* MainWindow::manager() {
224 return m_manager; 224 return m_manager;
225} 225}
226TabWidget* MainWindow::tabWidget() { 226TabWidget* MainWindow::tabWidget() {
227 return m_consoleWindow; 227 return m_consoleWindow;
228} 228}
229void MainWindow::populateProfiles() { 229void MainWindow::populateProfiles() {
230 m_sessionsPop->clear(); 230 m_sessionsPop->clear();
231 Profile::ValueList list = manager()->all(); 231 Profile::ValueList list = manager()->all();
232 for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) { 232 for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) {
233 m_sessionsPop->insertItem( (*it).name() ); 233 m_sessionsPop->insertItem( (*it).name() );
234 } 234 }
235 235
236} 236}
237MainWindow::~MainWindow() { 237MainWindow::~MainWindow() {
238 delete m_factory; 238 delete m_factory;
239 manager()->save(); 239 manager()->save();
240} 240}
241 241
242MetaFactory* MainWindow::factory() { 242MetaFactory* MainWindow::factory() {
243 return m_factory; 243 return m_factory;
244} 244}
245 245
246Session* MainWindow::currentSession() { 246Session* MainWindow::currentSession() {
247 return m_curSession; 247 return m_curSession;
248} 248}
249 249
250QList<Session> MainWindow::sessions() { 250QList<Session> MainWindow::sessions() {
251 return m_sessions; 251 return m_sessions;
252} 252}
253 253
254void MainWindow::slotNew() { 254void MainWindow::slotNew() {
255 ProfileEditorDialog dlg(factory() ); 255 ProfileEditorDialog dlg(factory() );
256 dlg.showMaximized(); 256 dlg.showMaximized();
257 int ret = dlg.exec(); 257 int ret = dlg.exec();
258 258
259 if ( ret == QDialog::Accepted ) { 259 if ( ret == QDialog::Accepted ) {
260 create( dlg.profile() ); 260 create( dlg.profile() );
261 } 261 }
262} 262}
263 263
264void MainWindow::slotRecordScript() { 264void MainWindow::slotRecordScript() {
265/* if (currentSession()) { 265/* if (currentSession()) {
266 currentSession()->emulationLayer()->startRecording(); 266 currentSession()->emulationLayer()->startRecording();
267 } 267 }
268 */ 268 */
269} 269}
270 270
271void MainWindow::slotSaveScript() { 271void MainWindow::slotSaveScript() {
272/* if (currentSession() && currentSession()->emulationLayer()->isRecording()) { 272/* if (currentSession() && currentSession()->emulationLayer()->isRecording()) {
273 MimeTypes types; 273 MimeTypes types;
274 QStringList script; 274 QStringList script;
275 script << "text/plain"; 275 script << "text/plain";
276 types.insert("Script", script); 276 types.insert("Script", script);
277 QString filename = OFileDialog::getSaveFileName(2, "/", QString::null, types); 277 QString filename = OFileDialog::getSaveFileName(2, "/", QString::null, types);
278 if (!filename.isEmpty()) { 278 if (!filename.isEmpty()) {
279 currentSession()->emulationLayer()->script()->saveTo(filename); 279 currentSession()->emulationLayer()->script()->saveTo(filename);
280 currentSession()->emulationLayer()->clearScript(); 280 currentSession()->emulationLayer()->clearScript();
281 } 281 }
282 } 282 }
283 */ 283 */
284} 284}
285 285
286void MainWindow::slotRunScript() { 286void MainWindow::slotRunScript() {
287/* 287/*
288 if (currentSession()) { 288 if (currentSession()) {
289 MimeTypes types; 289 MimeTypes types;
290 QStringList script; 290 QStringList script;
291 script << "text/plain"; 291 script << "text/plain";
292 types.insert("Script", script); 292 types.insert("Script", script);
293 QString filename = OFileDialog::getOpenFileName(2, "/", QString::null, types); 293 QString filename = OFileDialog::getOpenFileName(2, "/", QString::null, types);
294 if (!filename.isEmpty()) { 294 if (!filename.isEmpty()) {
295 Script script(DocLnk(filename).file()); 295 Script script(DocLnk(filename).file());
296 currentSession()->emulationLayer()->runScript(&script); 296 currentSession()->emulationLayer()->runScript(&script);
297 } 297 }
298 } 298 }
299 */ 299 */
300} 300}
301 301
302void MainWindow::slotConnect() { 302void MainWindow::slotConnect() {
303 if ( currentSession() ) { 303 if ( currentSession() ) {
304 bool ret = currentSession()->layer()->open(); 304 bool ret = currentSession()->layer()->open();
305 if(!ret) QMessageBox::warning(currentSession()->widgetStack(), 305 if(!ret) QMessageBox::warning(currentSession()->widgetStack(),
306 QObject::tr("Failed"), 306 QObject::tr("Failed"),
307 QObject::tr("Connecting failed for this session.")); 307 QObject::tr("Connecting failed for this session."));
308 else { 308 else {
309 m_connect->setEnabled( false ); 309 m_connect->setEnabled( false );
310 m_disconnect->setEnabled( true ); 310 m_disconnect->setEnabled( true );
311 } 311 }
312 } 312 }
313} 313}
314 314
315void MainWindow::slotDisconnect() { 315void MainWindow::slotDisconnect() {
316 if ( currentSession() ) { 316 if ( currentSession() ) {
317 currentSession()->layer()->close(); 317 currentSession()->layer()->close();
318 m_connect->setEnabled( true ); 318 m_connect->setEnabled( true );
319 m_disconnect->setEnabled( false ); 319 m_disconnect->setEnabled( false );
320 } 320 }
321} 321}
322 322
323void MainWindow::slotTerminate() { 323void MainWindow::slotTerminate() {
324 if ( currentSession() ) 324 if ( currentSession() )
325 currentSession()->layer()->close(); 325 currentSession()->layer()->close();
326 326
327 slotClose(); 327 slotClose();
328 /* FIXME move to the next session */ 328 /* FIXME move to the next session */
329} 329}
330 330
331void MainWindow::slotConfigure() { 331void MainWindow::slotConfigure() {
332 ConfigDialog conf( manager()->all(), factory() ); 332 ConfigDialog conf( manager()->all(), factory() );
333 conf.showMaximized(); 333 conf.showMaximized();
334 334
335 int ret = conf.exec(); 335 int ret = conf.exec();
336 336
337 if ( QDialog::Accepted == ret ) { 337 if ( QDialog::Accepted == ret ) {
338 manager()->setProfiles( conf.list() ); 338 manager()->setProfiles( conf.list() );
339 manager()->save(); 339 manager()->save();
340 populateProfiles(); 340 populateProfiles();
341 } 341 }
342} 342}
343/* 343/*
344 * we will remove 344 * we will remove
345 * this window from the tabwidget 345 * this window from the tabwidget
346 * remove it from the list 346 * remove it from the list
347 * delete it 347 * delete it
348 * and set the currentSession() 348 * and set the currentSession()
349 */ 349 */
350void MainWindow::slotClose() { 350void MainWindow::slotClose() {
351 if (!currentSession() ) 351 if (!currentSession() )
352 return; 352 return;
353 353
354 Session* ses = currentSession(); 354 Session* ses = currentSession();
355 qWarning("removing! currentSession %s", currentSession()->name().latin1() ); 355 qWarning("removing! currentSession %s", currentSession()->name().latin1() );
356 /* set to NULL to be safe, if its needed slotSessionChanged resets it automatically */ 356 /* set to NULL to be safe, if its needed slotSessionChanged resets it automatically */
357 m_curSession = NULL; 357 m_curSession = NULL;
358 tabWidget()->remove( /*currentSession()*/ses ); 358 tabWidget()->remove( /*currentSession()*/ses );
359 /*it's autodelete */ 359 /*it's autodelete */
360 m_sessions.remove( ses ); 360 m_sessions.remove( ses );
361 qWarning("after remove!!"); 361 qWarning("after remove!!");
362 362
363 if (!currentSession() ) { 363 if (!currentSession() ) {
364 m_connect->setEnabled( false ); 364 m_connect->setEnabled( false );
365 m_disconnect->setEnabled( false ); 365 m_disconnect->setEnabled( false );
366 m_terminate->setEnabled( false ); 366 m_terminate->setEnabled( false );
367 m_transfer->setEnabled( false ); 367 m_transfer->setEnabled( false );
368 m_recordScript->setEnabled( false ); 368 m_recordScript->setEnabled( false );
369 m_saveScript->setEnabled( false ); 369 m_saveScript->setEnabled( false );
370 m_runScript->setEnabled( false ); 370 m_runScript->setEnabled( false );
371 m_fullscreen->setEnabled( false ); 371 m_fullscreen->setEnabled( false );
372 m_closewindow->setEnabled( false ); 372 m_closewindow->setEnabled( false );
373 } 373 }
374} 374}
375 375
376/* 376/*
377 * We will get the name 377 * We will get the name
378 * Then the profile 378 * Then the profile
379 * and then we will make a profile 379 * and then we will make a profile
380 */ 380 */
381void MainWindow::slotProfile( int id) { 381void MainWindow::slotProfile( int id) {
382 Profile prof = manager()->profile( m_sessionsPop->text( id) ); 382 Profile prof = manager()->profile( m_sessionsPop->text( id) );
383 create( prof ); 383 create( prof );
384} 384}
385void MainWindow::create( const Profile& prof ) { 385void MainWindow::create( const Profile& prof ) {
386 Session *ses = manager()->fromProfile( prof, tabWidget() ); 386 Session *ses = manager()->fromProfile( prof, tabWidget() );
387 387
388 if((!ses) || (!ses->layer()) || (!ses->widgetStack())) 388 if((!ses) || (!ses->layer()) || (!ses->widgetStack()))
389 { 389 {
390 QMessageBox::warning(this, 390 QMessageBox::warning(this,
391 QObject::tr("Session failed"), 391 QObject::tr("Session failed"),
392 QObject::tr("<qt>Cannot open session: Not all components were found.</qt>")); 392 QObject::tr("<qt>Cannot open session: Not all components were found.</qt>"));
393 //if(ses) delete ses; 393 //if(ses) delete ses;
394 return; 394 return;
395 } 395 }
396 396
397 m_sessions.append( ses ); 397 m_sessions.append( ses );
398 tabWidget()->add( ses ); 398 tabWidget()->add( ses );
399 m_curSession = ses; 399 m_curSession = ses;
400 400
401 // is io_layer wants direct connection, then autoconnect
402 if ( ( m_curSession->layer() )->supports()[0] = 1 ) {
403 slotConnect();
404 }
405
401 // dicide if its a local term ( then no connction and no tranfer), maybe make a wrapper method out of it 406 // dicide if its a local term ( then no connction and no tranfer), maybe make a wrapper method out of it
402 m_connect->setEnabled( true ); 407 m_connect->setEnabled( true );
403 m_disconnect->setEnabled( false ); 408 m_disconnect->setEnabled( false );
404 m_terminate->setEnabled( true ); 409 m_terminate->setEnabled( true );
405 m_transfer->setEnabled( true ); 410 m_transfer->setEnabled( true );
406 m_recordScript->setEnabled( true ); 411 m_recordScript->setEnabled( true );
407 m_saveScript->setEnabled( true ); 412 m_saveScript->setEnabled( true );
408 m_runScript->setEnabled( true ); 413 m_runScript->setEnabled( true );
409 m_fullscreen->setEnabled( true ); 414 m_fullscreen->setEnabled( true );
410 m_closewindow->setEnabled( true ); 415 m_closewindow->setEnabled( true );
411} 416}
412 417
413void MainWindow::slotTransfer() 418void MainWindow::slotTransfer()
414{ 419{
415 if ( currentSession() ) { 420 if ( currentSession() ) {
416 TransferDialog dlg(this); 421 TransferDialog dlg(this);
417 dlg.showMaximized(); 422 dlg.showMaximized();
418 dlg.exec(); 423 dlg.exec();
419 } 424 }
420} 425}
421 426
422 427
423void MainWindow::slotOpenKeb(bool state) { 428void MainWindow::slotOpenKeb(bool state) {
424 429
425 if (state) m_keyBar->show(); 430 if (state) m_keyBar->show();
426 else m_keyBar->hide(); 431 else m_keyBar->hide();
427 432
428} 433}
429void MainWindow::slotSessionChanged( Session* ses ) { 434void MainWindow::slotSessionChanged( Session* ses ) {
430 qWarning("changed!"); 435 qWarning("changed!");
431 if ( ses ) { 436 if ( ses ) {
432 m_curSession = ses; 437 m_curSession = ses;
433 qDebug(QString("is connected : %1").arg( m_curSession->layer()->isConnected() ) ); 438 qDebug(QString("is connected : %1").arg( m_curSession->layer()->isConnected() ) );
434 if ( m_curSession->layer()->isConnected() ) { 439 if ( m_curSession->layer()->isConnected() ) {
435 m_connect->setEnabled( false ); 440 m_connect->setEnabled( false );
436 m_disconnect->setEnabled( true ); 441 m_disconnect->setEnabled( true );
437 } else { 442 } else {
438 m_connect->setEnabled( true ); 443 m_connect->setEnabled( true );
439 m_disconnect->setEnabled( false ); 444 m_disconnect->setEnabled( false );
440 } 445 }
441 } 446 }
442} 447}
443 448
444void MainWindow::slotFullscreen() { 449void MainWindow::slotFullscreen() {
445 450
446 if ( m_isFullscreen ) { 451 if ( m_isFullscreen ) {
447 ( m_curSession->widgetStack() )->reparent( m_consoleWindow, 0, QPoint(0,0), false ); 452 ( m_curSession->widgetStack() )->reparent( m_consoleWindow, 0, QPoint(0,0), false );
448 ( m_curSession->widgetStack() )->setFrameStyle( QFrame::Panel | QFrame::Sunken ); 453 ( m_curSession->widgetStack() )->setFrameStyle( QFrame::Panel | QFrame::Sunken );
449 setCentralWidget( m_consoleWindow ); 454 setCentralWidget( m_consoleWindow );
450 ( m_curSession->widgetStack() )->show(); 455 ( m_curSession->widgetStack() )->show();
451 ( m_curSession->emulationHandler() )->cornerButton()->hide(); 456 ( m_curSession->emulationHandler() )->cornerButton()->hide();
452 disconnect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); 457 disconnect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) );
453 458
454 } else { 459 } else {
455 ( m_curSession->widgetStack() )->setFrameStyle( QFrame::NoFrame ); 460 ( m_curSession->widgetStack() )->setFrameStyle( QFrame::NoFrame );
456 ( m_curSession->widgetStack() )->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop 461 ( m_curSession->widgetStack() )->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop
457 , QPoint(0,0), false ); 462 , QPoint(0,0), false );
458 ( m_curSession->widgetStack() )->resize( qApp->desktop()->width(), qApp->desktop()->height() ); 463 ( m_curSession->widgetStack() )->resize( qApp->desktop()->width(), qApp->desktop()->height() );
459 ( m_curSession->widgetStack() )->setFocus(); 464 ( m_curSession->widgetStack() )->setFocus();
460 ( m_curSession->widgetStack() )->show(); 465 ( m_curSession->widgetStack() )->show();
461 466
462 ( ( m_curSession->emulationHandler() )->cornerButton() )->show(); 467 ( ( m_curSession->emulationHandler() )->cornerButton() )->show();
463 468
464 connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); 469 connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) );
465 } 470 }
466 471
467 m_isFullscreen = !m_isFullscreen; 472 m_isFullscreen = !m_isFullscreen;
468} 473}
469 474
470 475
471void MainWindow::slotKeyReceived(ushort u, ushort q, bool, bool, bool) { 476void MainWindow::slotKeyReceived(ushort u, ushort q, bool, bool, bool) {
472 477
473 qWarning("received key event! relay to TE widget"); 478 qWarning("received key event! relay to TE widget");
474 479
475 if ( m_curSession ) { 480 if ( m_curSession ) {
476 QKeyEvent ke(QEvent::KeyPress, q, u, 0); 481 QKeyEvent ke(QEvent::KeyPress, q, u, 0);
477 482
478 ke.ignore(); 483 ke.ignore();
479 // where should i send this event? doesnt work sending it here 484 // where should i send this event? doesnt work sending it here
480 QApplication::sendEvent((QObject *)m_curSession->widgetStack(), &ke); 485 QApplication::sendEvent((QObject *)m_curSession->widgetStack(), &ke);
481 } 486 }
482} 487}