Merge bk://openembedded@openembedded.bkbits.net/packages
authorMichael Lauer <mickey@vanille-media.de>
Mon, 28 Jun 2004 21:55:24 +0000 (21:55 +0000)
committerMichael Lauer <mickey@vanille-media.de>
Mon, 28 Jun 2004 21:55:24 +0000 (21:55 +0000)
into r2d2.tm.informatik.uni-frankfurt.de:/home/projekte/packages

2004/06/28 23:55:17+02:00 uni-frankfurt.de!mickey
update the vt-switch patch:
wait until the new VT is active and set it into GRAPHICS mode
remove emitting VT100 cursor keycodes to stdout hence fixing the infamous stolen cursor bug :D

BKrev: 40e093ccJGsfxoeyGGTMBtSuz7I4UA

qte/qte-2.3.7/vt-switch.patch

index e69de29..0763e06 100644 (file)
@@ -0,0 +1,205 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- 2.3.7/src/kernel/qapplication_qws.cpp~vt-switch    2004-06-28 15:17:37.000000000 +0200
++++ 2.3.7/src/kernel/qapplication_qws.cpp      2004-06-28 15:43:13.000000000 +0200
+@@ -123,6 +123,12 @@
+ static int qt_thread_pipe[2];
+ #endif
++#if defined(_OS_LINUX_)
++#include <sys/ioctl.h>
++#include <linux/vt.h>
++#include <linux/kd.h>
++#endif
++
+ const int qwsSharedRamSize = 32 * 1024;       //Small amount to fit on small devices.
+ // These are in qapplication.cpp in qt/main
+@@ -163,6 +169,8 @@
+ bool qws_accel = TRUE;            // ### never set
+ const char *qws_display_spec = ":0";
+ int qws_display_id = 0;
++int qws_terminal_id = 0;
++int qws_terminal_old = 0;
+ int qws_client_id = 0;
+ QWidget *qt_pressGrab = 0;
+ QWidget *qt_mouseGrb = 0;
+@@ -1628,6 +1636,15 @@
+           type = QApplication::GuiServer;
+       } else if ( arg == "-interlaced" ) {
+           qws_screen_is_interlaced = TRUE;
++    } else if ( arg == "-terminal" ) {
++    if ( ++i < argc )
++        {
++            if ( ( qws_terminal_id = atoi( argv[i] ) ) < 1 )
++            {
++                qWarning( "Ignoring Invalid Terminal Specification." );
++                qws_terminal_id = 0;
++            }
++        }
+       } else if ( arg == "-display" ) {
+           if ( ++i < argc )
+               qws_display_spec = argv[i];
+@@ -1652,6 +1669,53 @@
+     if ( type == QApplication::GuiServer ) {
+       qt_appType = type;
+       qws_single_process = TRUE;
++
++    /* Allocate a dedicated virtual terminal -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
++     * Added a new command line option which only is relevant if the application is created as a GuiServer.
++     * The option is -terminal <num>, where <num> specifies the virtual terminal to be occupied by the server.
++     * As default in Linux, 0 means the current virtual terminal.
++     */
++    #if defined(_OS_LINUX_)
++    if ( qws_terminal_id )
++    {
++        qDebug( "qt_init() - terminal specification is '%d'.", qws_terminal_id );
++        struct vt_stat console_stat;
++        int console_fd = ::open( QString().sprintf( "/dev/tty%d", qws_terminal_id ).latin1(), O_RDWR );
++        if ( console_fd == -1)
++        {
++            qWarning( "qt_init() - can't open tty: %s", strerror( errno ) );
++            exit( -1 );
++        }
++        if ( ioctl( console_fd, VT_GETSTATE, &console_stat ) == -1 )
++        {
++            qWarning( "qt_init() - can't ioctl(VT_GETSTATE): %s", strerror( errno ) );
++            exit( -1 );
++        }
++        qws_terminal_old = console_stat.v_active;
++        qDebug( "qt_init() - active vt is #%d, switching to #%d as requested...", qws_terminal_old, qws_terminal_id );
++
++        if ( ioctl( console_fd, VT_ACTIVATE, qws_terminal_id ) == -1 )
++        {
++            qWarning( "qt_init() - can't ioctl(VT_ACTIVATE): %s", strerror( errno ) );
++            exit( -1 );
++        }
++        if ( ioctl( console_fd, VT_WAITACTIVE, qws_terminal_id ) == -1 )
++        {
++            qWarning( "qt_init() - can't ioctl(VT_WAITACTIVE): %s", strerror( errno ) );
++            exit( -1 );
++        }
++        if ( ioctl( console_fd, KDSETMODE, KD_GRAPHICS ) == -1 )
++        {
++            qWarning( "qt_init() - can't ioctl(KDSETMODE:KD_GRAPHICS): %s", strerror( errno ) );
++            exit( -1 );
++        }
++        ::close( console_fd );
++    }
++    else
++    {
++        qDebug( "QWSApplication::qt_init() - current terminal specified." );
++    }
++    #endif
+       QWSServer::startup(flags);
+       setenv("QWS_DISPLAY", qws_display_spec, 0);
+     }
+@@ -1702,7 +1766,36 @@
+     QFontManager::cleanup();
+     if ( qws_single_process ) {
+-      QWSServer::closedown();
++        qDebug( "qt_cleanup() - shutting down QWSServer..." );
++#ifndef QT_NO_QWS_KEYBOARD
++        if ( qwsServer )
++            qwsServer->closeKeyboard();
++#endif
++        QWSServer::closedown();
++#if defined(_OS_LINUX_)
++        if ( qws_terminal_old > 0 )
++        {
++            qDebug( "qt_cleanup() - switching back to virtual terminal #%d", qws_terminal_old );
++
++            int console_fd = ::open( "/dev/tty0", O_RDWR );
++            if ( console_fd == -1)
++            {
++                qWarning( "qt_init() - can't open tty: %s", strerror( errno ) );
++            }
++            else
++            {
++                if ( ioctl( console_fd, KDSETMODE, KD_TEXT ) == -1 )
++                {
++                    qWarning( "qt_init() - can't ioctl(KDSETMODE:KD_TEXT): %s", strerror( errno ) );
++                }
++                if ( ioctl( console_fd, VT_ACTIVATE, qws_terminal_old ) == -1 )
++                {
++                    qWarning( "qt_init() - can't ioctl(VT_ACTIVATE): %s", strerror( errno ) );
++                }
++                ::close( console_fd );
++            }
++        }
++#endif
+     }
+     if ( qt_is_gui_used ) {
+       delete qt_fbdpy;
+@@ -2584,7 +2677,7 @@
+     if ( !widget ) {                          // don't know this window
+       if ( !QWidget::mouseGrabber()
+ #ifndef QT_NO_QWS_MANAGER
+-          && !QWSManager::grabbedMouse() 
++          && !QWSManager::grabbedMouse()
+ #endif
+           ) {
+           qt_last_cursor = 0xffffffff; // cursor can be changed by another application
+@@ -3399,7 +3492,7 @@
+ #ifndef QT_NO_QWS_IM
+                           if ( mouse.state&button && w != QInputContext::microFocusWidget() ) //button press
+                               QInputContext::reset( oldFocus );
+-#endif        
++#endif
+                           QFocusEvent::setReason( QFocusEvent::Mouse);
+                           w->setFocus();
+                           QFocusEvent::resetReason();
+@@ -3545,7 +3638,7 @@
+                   QApplication::sendEvent( widget, &enter );
+                   (*mouseInWidget) = widget;
+ #ifndef QT_NO_QWS_IM
+-                  if ( e.type() == QEvent::MouseButtonPress && 
++                  if ( e.type() == QEvent::MouseButtonPress &&
+                        !widget->testWFlags( Qt::WStyle_Tool ) &&
+                        !widget->topLevelWidget()->testWFlags( Qt::WStyle_Tool ) )
+                       QInputContext::reset( oldFocus );
+--- 2.3.7/src/kernel/qkeyboard_qws.cpp~vt-switch       2004-06-28 15:17:37.000000000 +0200
++++ 2.3.7/src/kernel/qkeyboard_qws.cpp 2004-06-28 15:18:13.000000000 +0200
+@@ -1068,6 +1068,24 @@
+ {
+     if (kbdFD >= 0)
+     {
++
++#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
++        struct vt_mode vtMode;
++        ioctl(kbdFD, VT_GETMODE, &vtMode);
++
++        /* Mickey says: "Better give up control of VT switching.
++         *               Hey, I really hate that OS-will-reacquire-resources on process-death
++         *               kind of thinking!
++         */
++        vtMode.mode = VT_AUTO;
++        vtMode.relsig = 0;
++        vtMode.acqsig = 0;
++        ioctl(kbdFD, VT_SETMODE, &vtMode);
++
++        signal(VTSWITCHSIG, 0);
++        qDebug( "~QWSTtyKeyboardHandler() - released VT." );
++#endif
++
+ #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
+       ioctl(kbdFD, KDSKBMODE, K_XLATE);
+ #endif
+--- 2.3.7/src/kernel/qgfxlinuxfb_qws.cpp~vt-switch     2003-07-17 03:20:25.000000000 +0200
++++ 2.3.7/src/kernel/qgfxlinuxfb_qws.cpp       2004-06-28 15:20:38.000000000 +0200
+@@ -251,9 +251,9 @@
+ bool QLinuxFbScreen::initDevice()
+ {
+-    // No blankin' screen, no blinkin' cursor!, no cursor!
++    /* Setting up the VT parameters is done in qapplication_qws.cpp
+     const char termctl[]="\033[9;0]\033[?33l\033[?25l";
+-    writeTerm(termctl,sizeof(termctl));
++    writeTerm(termctl,sizeof(termctl)); */
+     // Grab current mode so we can reset it
+     fb_var_screeninfo vinfo;