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
 }
 
 

Reply via email to