Package: licq-plugin-qt Version: 1.3.2-5 Severity: normal Tags: patch The docking problems in WindowMaker, which were supposed to be fixed in the most recent upstream version (1.3.2), are still haunting me.
Upon starting licq, the dock icon docks properly. However, if one opens any further window (such as a message window or the options dialog), the dock icon "drops" down to the WindowMaker app icons at the bottom of the screen, leaving a vacant plain in the dock. This situation cannot be reverted without either disabling and reenabling the dock icon via Options or restarting licq. I already reported this upstream[1] and found out that this is a problem specific to the version of Qt in Debian. WindowMaker requires the window_group hint to be set equal for all windows of an application to allow docking. In the licq-qt-gui code, this is done manually with XSetWMHints() in three cases. All other windows are left untouched, with the window_group hint being managed automagically by Qt. This works fine on other distributions, but not with the Qt library included in Debian. There seems to be a patch to Qt which does not tolerate this inconsistent hint handling and thus causes breakage. The first patch attached fixes this by leaving the window_group handling to Qt in all cases and is definitely needed to allow for docking in Debian. Now on to the second problem, independent from the above. For proper redrawing of the dock icon, Qt requires the dock window to be shown. This surplus window is hidden off-desktop, but still shows up in the tabbing list of a WindowMaker workspace. The second patch completely hides this window from the window manager by calling XWithdrawWindow(), while at the same time tricking Qt into thinking that it is still shown. That way, the dock icon still receives redraw updates. It has already been included upstream (SVN r4390), as it affects all distributions. Regards, Peter [1] http://sf.net/mailarchive/forum.php?thread_id=10091700&forum_id=5420 -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (600, 'unstable'), (500, 'testing') Architecture: amd64 (x86_64) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.16-maia Locale: LANG=C, [EMAIL PROTECTED] (charmap=ISO-8859-15) Versions of packages licq-plugin-qt depends on: ii libc6 2.3.6-6 GNU C Library: Shared libraries ii libgcc1 1:4.1.0-1 GCC support library ii libgpg-error0 1.2-1 library for common error values an ii libgpgme11 1.1.2-1 GPGME - GnuPG Made Easy ii libice6 1:1.0.0-2 X11 Inter-Client Exchange library ii libqt3-mt 3:3.3.6-1 Qt GUI Library (Threaded runtime v ii libsm6 1:1.0.0-3 X11 Session Management library ii libstdc++6 4.1.0-1 The GNU Standard C++ Library v3 ii libx11-6 2:1.0.0-6 X11 client-side library ii libxext6 1:1.0.0-3 X11 miscellaneous extension librar ii libxss1 1:1.0.1-3 X11 Screen Saver extension library ii licq 1.3.2-5 ICQ client (base files) licq-plugin-qt recommends no packages. -- no debconf information
Index: plugins/qt-gui/src/mainwin.cpp =================================================================== RCS file: /cvsroot/licq/qt-gui/src/mainwin.cpp,v retrieving revision 1.378 diff -u -p -r1.378 mainwin.cpp --- plugins/qt-gui/src/mainwin.cpp 14 Dec 2005 08:01:57 -0000 1.378 +++ plugins/qt-gui/src/mainwin.cpp 2 Apr 2006 13:23:03 -0000 @@ -351,19 +351,6 @@ CMainWindow::CMainWindow(CICQDaemon *the m_bDisableDockIcon = bDisableDockIcon; - // set up appicon and docking, code supplied by Mark Deneed - if (!m_bDisableDockIcon) - { - WId win = winId(); // get the window - XWMHints *hints; // hints - Display *dsp = x11Display(); // get the display - hints = XGetWMHints(dsp, win); // init hints - hints->window_group = win; // set set the window hint - hints->flags = WindowGroupHint; // set the window group hint - XSetWMHints(dsp, win, hints); // set the window hints for WM to use. - XFree( hints ); - } - connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(slot_aboutToQuit())); // read in info from file Index: plugins/qt-gui/src/userbox.cpp =================================================================== RCS file: /cvsroot/licq/qt-gui/src/userbox.cpp,v retrieving revision 1.176 diff -u -p -r1.176 userbox.cpp --- plugins/qt-gui/src/userbox.cpp 26 Nov 2005 01:23:41 -0000 1.176 +++ plugins/qt-gui/src/userbox.cpp 2 Apr 2006 13:23:03 -0000 @@ -1005,11 +1005,6 @@ CUserView::CUserView(QPopupMenu *m, QWid classhint.res_name = "licq"; classhint.res_class = szClass; XSetClassHint(x11Display(), winId(), &classhint); - XWMHints *hints = XGetWMHints(x11Display(), winId()); - hints->window_group = winId(); - hints->flags = WindowGroupHint; - XSetWMHints(x11Display(), winId(), hints); - XFree( hints ); floaties->resize(floaties->size()+1); floaties->insert(floaties->size()-1, this); } Index: plugins/qt-gui/src/wharf.cpp =================================================================== RCS file: /cvsroot/licq/qt-gui/src/wharf.cpp,v retrieving revision 1.60 diff -u -p -r1.60 wharf.cpp --- plugins/qt-gui/src/wharf.cpp 22 Sep 2005 22:39:37 -0000 1.60 +++ plugins/qt-gui/src/wharf.cpp 2 Apr 2006 13:23:04 -0000 @@ -101,8 +101,7 @@ void IconManager::X11Init() hints->icon_x = 0; hints->icon_y = 0; hints->icon_window = wharfIcon->winId(); - hints->window_group = win; // set the window hint - hints->flags = WindowGroupHint | IconWindowHint | IconPositionHint | StateHint; // set the window group hint + hints->flags = IconWindowHint | IconPositionHint | StateHint; XSetWMHints(dsp, win, hints); // set the window hints for WM to use. XFree( hints );
diff -u plugins/qt-gui/src/wharf.cpp plugins/qt-gui/src/wharf.cpp --- plugins/qt-gui/src/wharf.cpp 2 Apr 2006 13:23:04 -0000 +++ plugins/qt-gui/src/wharf.cpp 3 Apr 2006 07:31:04 -0000 @@ -115,6 +115,9 @@ setMask(*wharfIcon->vis->mask()); move(-100,-100); show(); +#ifndef USE_KDE + XWithdrawWindow(dsp, win, XScreenNumberOfScreen(DefaultScreenOfDisplay(dsp))); +#endif }