--Boundary-00=_6kuRHZOExn9Yoc0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Friday 23 of November 2007, Aaron J. Seigo wrote: > On Thursday 22 November 2007, Jason Stubbs wrote: > > Anybody care to puzzle this one out? The difference in the attached patch is that "KUniqueApplication(checkComposite() ? dpy : dpy, visual ? Qt::HANDLE(visual) : 0, colormap ? Qt::HANDLE(colormap) : 0)" is broken code. Order of evaluating arguments for a function is not defined, so here first 2nd and 3rd one are evaluated and only then checkComposite() is called -> Plasma runs without ARGB visuals in such case. > evidently something about setting an argb visual on the app is screwing up > the system tray. this is Not Good and hopefully isn't generic to QXEmbed. Wrong :(. Unfortunately it isn't generic to QXEmbed. It is Yet Another case of things breaking because of hacked-in ARGB visuals. From manpage for XReparentWindow() : "A BadMatch error results if: ... The specified window has a ParentRelative background, and the new parent window is not the same depth as the specified window." For those untouched by Xlib: - XEmbed uses XReparentWindow() for embedding - Other apps usually use windows with normal default depth for systray icons, not ARGB visuals, which are used by everything in Plasma - Background set to ParentRelative achieves making systray icons use the same background like the systray. (This problem is not caught because currently the only error handling in SystemTrayWidget is a TODO note and because there are some rather pitiful pieces of code in QX11EmbedContainer, for example broken error handling :(. TT will get a long patch when I get to going through it.) The attached is an ugly workaround for it. I'm not sure if there is a good way of handling it. Depends also on whether Qt::transparent not working QX11EmbedContainer is just a consequence of this problem or whether it's unrelated. -- Lubos Lunak KDE developer -------------------------------------------------------------- SUSE LINUX, s.r.o. e-mail: l.lunak@suse.cz , l.lunak@kde.org Lihovarska 1060/12 tel: +420 284 028 972 190 00 Prague 9 fax: +420 284 028 951 Czech Republic http//www.suse.cz --Boundary-00=_6kuRHZOExn9Yoc0 Content-Type: text/x-diff; charset="utf-8"; name="systemtraywidget.cpp.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="systemtraywidget.cpp.patch" --- systemtraywidget.cpp.sav 2007-10-18 15:12:11.000000000 +0200 +++ systemtraywidget.cpp 2007-11-23 15:39:05.000000000 +0100 @@ -109,6 +109,8 @@ void SystemTrayWidget::embedWindow(WId i kDebug() << "trying to add window with id " << id; if (! m_containers.contains(id)) { QX11EmbedContainer *container = new QX11EmbedContainer(this); + // TODO HACK: Reparenting of windows with ParentRelative backgrouns fails with different depths. + XSetWindowBackgroundPixmap( QX11Info::display(), id, None ); container->embedClient(id); // TODO: add error handling m_layout->addWidget(container); --Boundary-00=_6kuRHZOExn9Yoc0 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Panel-devel mailing list Panel-devel@kde.org https://mail.kde.org/mailman/listinfo/panel-devel --Boundary-00=_6kuRHZOExn9Yoc0--