qt-bugs@ issue : none bugs.kde.org number : 83974 applied: no author: Lubos Lunak An ugly hack to get real transparency in Konsole working somehow, with Qt not having any support for the ARGB visual. QApplication has one ctor that allows passing any X connection and X visual, but that has some side effects, so this patch adds a magic flag to turn the side effects off. --- src/kernel/qapplication.cpp.sav 2007-02-23 14:01:19.000000000 +0100 +++ src/kernel/qapplication.cpp 2007-05-29 15:42:39.000000000 +0200 @@ -317,6 +317,7 @@ void qt_init( int *, char **, QApplicati void qt_cleanup(); #if defined(Q_WS_X11) void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE ); +void qt_init( int *, char **, Display* dpy, Qt::HANDLE, Qt::HANDLE ); #endif Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop ); @@ -905,7 +906,7 @@ QApplication::QApplication(Display *dpy, qt_init( &argc, argv, GuiClient ); } else { - qt_init(dpy, visual, colormap); + qt_init( &argc, argv, dpy, visual, colormap); } process_cmdline( &argc, argv ); --- src/kernel/qapplication_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 +++ src/kernel/qapplication_x11.cpp 2007-05-29 16:24:58.000000000 +0200 @@ -196,6 +196,7 @@ static bool noxim = FALSE; // connect t static Display *appDpy = 0; // X11 application display static char *appDpyName = 0; // X11 display name static bool appForeignDpy = FALSE; // we didn't create display +Q_EXPORT bool qt_no_foreign_hack = false; static bool appSync = FALSE; // X11 synchronization #if defined(QT_DEBUG) static bool appNoGrab = FALSE; // X11 grabbing enabled @@ -1541,7 +1542,7 @@ void qt_init_internal( int *argcptr, cha setlocale( LC_ALL, "" ); // use correct char set mapping setlocale( LC_NUMERIC, "C" ); // make sprintf()/scanf() work - if ( display ) { + if ( display && !qt_no_foreign_hack ) { // Qt part of other application appForeignDpy = TRUE; @@ -1698,7 +1699,9 @@ void qt_init_internal( int *argcptr, cha // Connect to X server if( qt_is_gui_used ) { - if ( ( appDpy = XOpenDisplay(appDpyName) ) == 0 ) { + if( display != NULL && qt_no_foreign_hack ) + appDpy = display; + else if ( ( appDpy = XOpenDisplay(appDpyName) ) == 0 ) { qWarning( "%s: cannot connect to X server %s", appName, XDisplayName(appDpyName) ); qApp = 0; @@ -2345,6 +2348,10 @@ void qt_init( Display *display, Qt::HAND qt_init_internal( 0, 0, display, visual, colormap ); } +void qt_init( int *argcptr, char **argv, Display *display, Qt::HANDLE visual, Qt::HANDLE colormap ) +{ + qt_init_internal( argcptr, argv, display, visual, colormap ); +} /***************************************************************************** qt_cleanup() - cleans up when the application is finished