author | mickeyl <mickeyl> | 2004-08-02 14:45:06 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-08-02 14:45:06 (UTC) |
commit | bef879b6de5bfba274c8e5ac2cebf14366db2826 (patch) (unidiff) | |
tree | 3bcedf3e6e889ad1e00e7f6938e252972566b93d | |
parent | eb1b398e44c55058d65be0a8d5d8c24db9b6d874 (diff) | |
download | opie-bef879b6de5bfba274c8e5ac2cebf14366db2826.zip opie-bef879b6de5bfba274c8e5ac2cebf14366db2826.tar.gz opie-bef879b6de5bfba274c8e5ac2cebf14366db2826.tar.bz2 |
add vtswitch and daemonize patch from oe
-rw-r--r-- | qt/qt-2.3.7.patch/qte237-0-vtswitch.patch | 205 | ||||
-rw-r--r-- | qt/qt-2.3.7.patch/qte237-1-daemon.patch | 113 |
2 files changed, 318 insertions, 0 deletions
diff --git a/qt/qt-2.3.7.patch/qte237-0-vtswitch.patch b/qt/qt-2.3.7.patch/qte237-0-vtswitch.patch new file mode 100644 index 0000000..be2745c --- a/dev/null +++ b/qt/qt-2.3.7.patch/qte237-0-vtswitch.patch | |||
@@ -0,0 +1,205 @@ | |||
1 | |||
2 | # | ||
3 | # Patch managed by http://www.holgerschurig.de/patcher.html | ||
4 | # | ||
5 | |||
6 | --- qt-2.3.7/src/kernel/qapplication_qws.cpp~vt-switch.patch | ||
7 | +++ qt-2.3.7/src/kernel/qapplication_qws.cpp | ||
8 | @@ -123,6 +123,12 @@ | ||
9 | static int qt_thread_pipe[2]; | ||
10 | #endif | ||
11 | |||
12 | +#if defined(_OS_LINUX_) | ||
13 | +#include <sys/ioctl.h> | ||
14 | +#include <linux/vt.h> | ||
15 | +#include <linux/kd.h> | ||
16 | +#endif | ||
17 | + | ||
18 | const int qwsSharedRamSize = 32 * 1024;//Small amount to fit on small devices. | ||
19 | |||
20 | // These are in qapplication.cpp in qt/main | ||
21 | @@ -163,6 +169,8 @@ | ||
22 | bool qws_accel = TRUE; // ### never set | ||
23 | const char *qws_display_spec = ":0"; | ||
24 | int qws_display_id = 0; | ||
25 | +int qws_terminal_id = 0; | ||
26 | +int qws_terminal_old = 0; | ||
27 | int qws_client_id = 0; | ||
28 | QWidget *qt_pressGrab = 0; | ||
29 | QWidget *qt_mouseGrb = 0; | ||
30 | @@ -1628,6 +1636,15 @@ | ||
31 | type = QApplication::GuiServer; | ||
32 | } else if ( arg == "-interlaced" ) { | ||
33 | qws_screen_is_interlaced = TRUE; | ||
34 | + } else if ( arg == "-terminal" ) { | ||
35 | + if ( ++i < argc ) | ||
36 | + { | ||
37 | + if ( ( qws_terminal_id = atoi( argv[i] ) ) < 1 ) | ||
38 | + { | ||
39 | + qWarning( "Ignoring Invalid Terminal Specification." ); | ||
40 | + qws_terminal_id = 0; | ||
41 | + } | ||
42 | + } | ||
43 | } else if ( arg == "-display" ) { | ||
44 | if ( ++i < argc ) | ||
45 | qws_display_spec = argv[i]; | ||
46 | @@ -1652,6 +1669,53 @@ | ||
47 | if ( type == QApplication::GuiServer ) { | ||
48 | qt_appType = type; | ||
49 | qws_single_process = TRUE; | ||
50 | + | ||
51 | + /* Allocate a dedicated virtual terminal -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> | ||
52 | + * Added a new command line option which only is relevant if the application is created as a GuiServer. | ||
53 | + * The option is -terminal <num>, where <num> specifies the virtual terminal to be occupied by the server. | ||
54 | + * As default in Linux, 0 means the current virtual terminal. | ||
55 | + */ | ||
56 | + #if defined(_OS_LINUX_) | ||
57 | + if ( qws_terminal_id ) | ||
58 | + { | ||
59 | + qDebug( "qt_init() - terminal specification is '%d'.", qws_terminal_id ); | ||
60 | + struct vt_stat console_stat; | ||
61 | + int console_fd = ::open( QString().sprintf( "/dev/tty%d", qws_terminal_id ).latin1(), O_RDWR ); | ||
62 | + if ( console_fd == -1) | ||
63 | + { | ||
64 | + qWarning( "qt_init() - can't open tty: %s", strerror( errno ) ); | ||
65 | + exit( -1 ); | ||
66 | + } | ||
67 | + if ( ioctl( console_fd, VT_GETSTATE, &console_stat ) == -1 ) | ||
68 | + { | ||
69 | + qWarning( "qt_init() - can't ioctl(VT_GETSTATE): %s", strerror( errno ) ); | ||
70 | + exit( -1 ); | ||
71 | + } | ||
72 | + qws_terminal_old = console_stat.v_active; | ||
73 | + qDebug( "qt_init() - active vt is #%d, switching to #%d as requested...", qws_terminal_old, qws_terminal_id ); | ||
74 | + | ||
75 | + if ( ioctl( console_fd, VT_ACTIVATE, qws_terminal_id ) == -1 ) | ||
76 | + { | ||
77 | + qWarning( "qt_init() - can't ioctl(VT_ACTIVATE): %s", strerror( errno ) ); | ||
78 | + exit( -1 ); | ||
79 | + } | ||
80 | + if ( ioctl( console_fd, VT_WAITACTIVE, qws_terminal_id ) == -1 ) | ||
81 | + { | ||
82 | + qWarning( "qt_init() - can't ioctl(VT_WAITACTIVE): %s", strerror( errno ) ); | ||
83 | + exit( -1 ); | ||
84 | + } | ||
85 | + if ( ioctl( console_fd, KDSETMODE, KD_GRAPHICS ) == -1 ) | ||
86 | + { | ||
87 | + qWarning( "qt_init() - can't ioctl(KDSETMODE:KD_GRAPHICS): %s", strerror( errno ) ); | ||
88 | + exit( -1 ); | ||
89 | + } | ||
90 | + ::close( console_fd ); | ||
91 | + } | ||
92 | + else | ||
93 | + { | ||
94 | + qDebug( "QWSApplication::qt_init() - current terminal specified." ); | ||
95 | + } | ||
96 | + #endif | ||
97 | QWSServer::startup(flags); | ||
98 | setenv("QWS_DISPLAY", qws_display_spec, 0); | ||
99 | } | ||
100 | @@ -1702,7 +1766,36 @@ | ||
101 | QFontManager::cleanup(); | ||
102 | |||
103 | if ( qws_single_process ) { | ||
104 | -QWSServer::closedown(); | ||
105 | + qDebug( "qt_cleanup() - shutting down QWSServer..." ); | ||
106 | +#ifndef QT_NO_QWS_KEYBOARD | ||
107 | + if ( qwsServer ) | ||
108 | + qwsServer->closeKeyboard(); | ||
109 | +#endif | ||
110 | + QWSServer::closedown(); | ||
111 | +#if defined(_OS_LINUX_) | ||
112 | + if ( qws_terminal_old > 0 ) | ||
113 | + { | ||
114 | + qDebug( "qt_cleanup() - switching back to virtual terminal #%d", qws_terminal_old ); | ||
115 | + | ||
116 | + int console_fd = ::open( "/dev/tty0", O_RDWR ); | ||
117 | + if ( console_fd == -1) | ||
118 | + { | ||
119 | + qWarning( "qt_init() - can't open tty: %s", strerror( errno ) ); | ||
120 | + } | ||
121 | + else | ||
122 | + { | ||
123 | + if ( ioctl( console_fd, KDSETMODE, KD_TEXT ) == -1 ) | ||
124 | + { | ||
125 | + qWarning( "qt_init() - can't ioctl(KDSETMODE:KD_TEXT): %s", strerror( errno ) ); | ||
126 | + } | ||
127 | + if ( ioctl( console_fd, VT_ACTIVATE, qws_terminal_old ) == -1 ) | ||
128 | + { | ||
129 | + qWarning( "qt_init() - can't ioctl(VT_ACTIVATE): %s", strerror( errno ) ); | ||
130 | + } | ||
131 | + ::close( console_fd ); | ||
132 | + } | ||
133 | + } | ||
134 | +#endif | ||
135 | } | ||
136 | if ( qt_is_gui_used ) { | ||
137 | delete qt_fbdpy; | ||
138 | @@ -2584,7 +2677,7 @@ | ||
139 | if ( !widget ) { // don't know this window | ||
140 | if ( !QWidget::mouseGrabber() | ||
141 | #ifndef QT_NO_QWS_MANAGER | ||
142 | - && !QWSManager::grabbedMouse() | ||
143 | + && !QWSManager::grabbedMouse() | ||
144 | #endif | ||
145 | ) { | ||
146 | qt_last_cursor = 0xffffffff; // cursor can be changed by another application | ||
147 | @@ -3394,7 +3487,7 @@ | ||
148 | #ifndef QT_NO_QWS_IM | ||
149 | if ( mouse.state&button && w != QInputContext::microFocusWidget() ) //button press | ||
150 | QInputContext::reset( oldFocus ); | ||
151 | -#endif | ||
152 | +#endif | ||
153 | QFocusEvent::setReason( QFocusEvent::Mouse); | ||
154 | w->setFocus(); | ||
155 | QFocusEvent::resetReason(); | ||
156 | @@ -3540,7 +3633,7 @@ | ||
157 | QApplication::sendEvent( widget, &enter ); | ||
158 | (*mouseInWidget) = widget; | ||
159 | #ifndef QT_NO_QWS_IM | ||
160 | - if ( e.type() == QEvent::MouseButtonPress && | ||
161 | + if ( e.type() == QEvent::MouseButtonPress && | ||
162 | !widget->testWFlags( Qt::WStyle_Tool ) && | ||
163 | !widget->topLevelWidget()->testWFlags( Qt::WStyle_Tool ) ) | ||
164 | QInputContext::reset( oldFocus ); | ||
165 | --- qt-2.3.7/src/kernel/qkeyboard_qws.cpp~vt-switch.patch | ||
166 | +++ qt-2.3.7/src/kernel/qkeyboard_qws.cpp | ||
167 | @@ -1068,6 +1068,24 @@ | ||
168 | { | ||
169 | if (kbdFD >= 0) | ||
170 | { | ||
171 | + | ||
172 | +#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) | ||
173 | + struct vt_mode vtMode; | ||
174 | + ioctl(kbdFD, VT_GETMODE, &vtMode); | ||
175 | + | ||
176 | + /* Mickey says: "Better give up control of VT switching. | ||
177 | + * Hey, I really hate that OS-will-reacquire-resources on process-death | ||
178 | + * kind of thinking! | ||
179 | + */ | ||
180 | + vtMode.mode = VT_AUTO; | ||
181 | + vtMode.relsig = 0; | ||
182 | + vtMode.acqsig = 0; | ||
183 | + ioctl(kbdFD, VT_SETMODE, &vtMode); | ||
184 | + | ||
185 | + signal(VTSWITCHSIG, 0); | ||
186 | + qDebug( "~QWSTtyKeyboardHandler() - released VT." ); | ||
187 | +#endif | ||
188 | + | ||
189 | #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) | ||
190 | ioctl(kbdFD, KDSKBMODE, K_XLATE); | ||
191 | #endif | ||
192 | --- qt-2.3.7/src/kernel/qgfxlinuxfb_qws.cpp~vt-switch.patch | ||
193 | +++ qt-2.3.7/src/kernel/qgfxlinuxfb_qws.cpp | ||
194 | @@ -251,9 +251,9 @@ | ||
195 | |||
196 | bool QLinuxFbScreen::initDevice() | ||
197 | { | ||
198 | - // No blankin' screen, no blinkin' cursor!, no cursor! | ||
199 | + /* Setting up the VT parameters is done in qapplication_qws.cpp | ||
200 | const char termctl[]="\033[9;0]\033[?33l\033[?25l"; | ||
201 | - writeTerm(termctl,sizeof(termctl)); | ||
202 | + writeTerm(termctl,sizeof(termctl)); */ | ||
203 | |||
204 | // Grab current mode so we can reset it | ||
205 | fb_var_screeninfo vinfo; | ||
diff --git a/qt/qt-2.3.7.patch/qte237-1-daemon.patch b/qt/qt-2.3.7.patch/qte237-1-daemon.patch new file mode 100644 index 0000000..1f83398 --- a/dev/null +++ b/qt/qt-2.3.7.patch/qte237-1-daemon.patch | |||
@@ -0,0 +1,113 @@ | |||
1 | |||
2 | # | ||
3 | # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher | ||
4 | # | ||
5 | |||
6 | --- qt-2.3.7/src/kernel/qapplication_qws.cpp~daemonize2004-07-17 22:47:54.840820000 +0200 | ||
7 | +++ qt-2.3.7/src/kernel/qapplication_qws.cpp2004-07-17 23:34:32.407525912 +0200 | ||
8 | @@ -103,6 +103,7 @@ | ||
9 | #endif | ||
10 | |||
11 | #include <sys/time.h> | ||
12 | +#include <syslog.h> | ||
13 | |||
14 | #if defined(_OS_AIX_) && defined(_CC_GNU_) | ||
15 | #include <sys/select.h> | ||
16 | @@ -162,6 +163,7 @@ | ||
17 | //these used to be environment variables, they are initialized from | ||
18 | //environment variables in | ||
19 | |||
20 | +bool qws_daemon = TRUE; | ||
21 | bool qws_savefonts = FALSE; | ||
22 | bool qws_screen_is_interlaced=FALSE; //### should be detected | ||
23 | bool qws_shared_memory = FALSE; | ||
24 | @@ -1614,6 +1616,10 @@ | ||
25 | mwGeometry = argv[i]; | ||
26 | } else if ( arg == "-shared" ) { | ||
27 | qws_shared_memory = TRUE; | ||
28 | +} else if ( arg == "-daemon" ) { | ||
29 | + qws_daemon = TRUE; | ||
30 | +} else if ( arg == "-nodaemon" ) { | ||
31 | + qws_daemon = FALSE; | ||
32 | } else if ( arg == "-noshared" ) { | ||
33 | qws_shared_memory = FALSE; | ||
34 | } else if ( arg == "-savefonts" ) { | ||
35 | @@ -1670,6 +1676,78 @@ | ||
36 | qt_appType = type; | ||
37 | qws_single_process = TRUE; | ||
38 | |||
39 | + /* Daemonize the server process -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> | ||
40 | + * Added a new command line option which only is relevant if the application is created as a GuiServer. | ||
41 | + * The option is -daemon respectively -nodaemon. If in daemon mode (which is the default now), the | ||
42 | + * server will detach from the controlling terminal and continue as a daemon. This is done via the standard | ||
43 | + * UNIX double fork magic. | ||
44 | + */ | ||
45 | + if ( qws_daemon ) | ||
46 | + { | ||
47 | + qWarning( "qt_init() - starting in daemon mode..." ); | ||
48 | + | ||
49 | + int pid1 = fork(); | ||
50 | + if ( pid1 == -1 ) | ||
51 | + { | ||
52 | + qWarning( "qt_init() - can't perform initial fork: %s", strerror( errno ) ); | ||
53 | + exit( -1 ); | ||
54 | + } | ||
55 | + if ( pid1 ) _exit( 0 ); // ok, first fork performed | ||
56 | + | ||
57 | + chdir( "/" ); | ||
58 | + setsid(); | ||
59 | + umask(0); | ||
60 | + close(0); | ||
61 | + close(1); | ||
62 | + close(2); | ||
63 | + | ||
64 | + int fdnull = ::open( "/dev/null", O_RDWR ); | ||
65 | + if ( fdnull == -1 ) | ||
66 | + { | ||
67 | + syslog( 3, "qt_init() - can't open /dev/null to redirect std{in|out|err}: %s", strerror( errno ) ); | ||
68 | + exit( -1 ); | ||
69 | + } | ||
70 | + dup2( fdnull, 0 ); // stdin | ||
71 | + dup2( fdnull, 1 ); // stdout | ||
72 | + dup2( fdnull, 2 ); // stderr | ||
73 | + | ||
74 | + int pid2 = fork(); | ||
75 | + if ( pid2 == -1 ) | ||
76 | + { | ||
77 | + syslog( 3, "qt_init() - can't perform initial fork: %s", strerror( errno ) ); | ||
78 | + exit( -1 ); | ||
79 | + } | ||
80 | + if ( pid2 ) | ||
81 | + { | ||
82 | + syslog( 4, "qt_init() [%d] - successfully entered daemon mode", pid2 ); | ||
83 | + _exit( 0 ); // ok, second fork performed | ||
84 | + } | ||
85 | + } | ||
86 | + | ||
87 | + /* | ||
88 | + * , , | ||
89 | + * /( )` | ||
90 | + * \ \___ / | B E W A R E ! | ||
91 | + * /- _ `-/ ' We are a DAEMON now! | ||
92 | + * (/\/ \ \ /\ | ||
93 | + * / / | ` \ | ||
94 | + * O O ) / | | ||
95 | + * `-^--'`< ' | ||
96 | + * (_.) _ ) / | ||
97 | + * `.___/` / | ||
98 | + * `-----' / | ||
99 | + * <----. __ / __ \ | ||
100 | + * <----|====O)))==) \) /==== | ||
101 | + * <----' `--' `.__,' \ | ||
102 | + * | | | ||
103 | + * \ / | ||
104 | + * ______( (_ / \______ | ||
105 | + * (FL) ,' ,-----' | \ | ||
106 | + * `--{__________) \/ | ||
107 | + * | ||
108 | + */ | ||
109 | + | ||
110 | + | ||
111 | /* Allocate a dedicated virtual terminal -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> | ||
112 | * Added a new command line option which only is relevant if the application is created as a GuiServer. | ||
113 | * The option is -terminal <num>, where <num> specifies the virtual terminal to be occupied by the server. | ||