--Boundary-00=_apmCBh275M1wB3P Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, currently command-line arguments parsing, taskbar grouping or kwin's window specific settings don't work for Konsole, because of the way the support for real transparency is implemented. The attached Konsole patch is a hack fixing the WM_CLASS property, but I don't see anything that could be done about qAppName() or the arguments parsing other than changing Qt. Fredrik, has this been reported to TT, will Qt4 have some support for the ARGB visual? The qt_init* code in the Qt4 preview looks the same like in Qt3 to me. -- Lubos Lunak KDE developer --------------------------------------------------------------------- SuSE CR, s.r.o. e-mail: l.lunak@suse.cz , l.lunak@kde.org Drahobejlova 27 tel: +420 2 9654 2373 190 00 Praha 9 fax: +420 2 9654 2374 Czech Republic http://www.suse.cz/ --Boundary-00=_apmCBh275M1wB3P Content-Type: text/x-diff; charset="utf-8"; name="main.cpp.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="main.cpp.patch" --- main.cpp.sav 2004-07-13 16:17:28.000000000 +0200 +++ main.cpp 2004-07-30 17:23:20.658828632 +0200 @@ -146,7 +146,34 @@ public: Konsole *konsole; }; +#ifdef COMPOSITE +// Hack for #83974. Since Qt gets passed XDisplay* from Konsole, it thinks Qt is used +// in a foreign app, doesn't parse command-line arguments, and uses weird values +// for qAppName()/qAppClass()/WM_CLASS. This at least fixes the WM_CLASS property, +// making e.g. taskbar grouping work. +class KonsoleApplication : public KApplication { + public: + KonsoleApplication(Display *display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0, + bool allowStyles=true) + : KApplication( display, visual, colormap, allowStyles ) + {} + virtual bool notify( QObject*, QEvent* ); +}; +bool KonsoleApplication::notify( QObject* receiver, QEvent* event ) { + if(( event->type() == QEvent::Show || event->type() == QEvent::Reparent ) + && receiver->isWidgetType()) { + QWidget* w = static_cast< QWidget* >( receiver ); + if( w->isTopLevel() && !w->testWFlags( WX11BypassWM ) && !w->isPopup() && !event->spontaneous()) { + XClassHint hint; + hint.res_class = const_cast< char* >( "Konsole" ); + hint.res_name = const_cast< char* >( "konsole" ); + XSetClassHint( qt_xdisplay(), w->winId(), &hint ); + } + } + return KApplication::notify( receiver, event ); +} +#endif /* --| main |------------------------------------------------------ */ extern "C" int kdemain(int argc, char* argv[]) @@ -269,7 +296,7 @@ extern "C" int kdemain(int argc, char* a } } - KApplication a( dpy, Qt::HANDLE( visual ), Qt::HANDLE( colormap ) ); + KonsoleApplication a( dpy, Qt::HANDLE( visual ), Qt::HANDLE( colormap ) ); #else KApplication a; #endif --Boundary-00=_apmCBh275M1wB3P--