[Bug 49369] Store Window Settings doesn't work with KMail
Lubos Lunak
l.lunak at suse.cz
Mon Oct 21 17:48:11 BST 2002
On Friday 18 October 2002 23:47, Ingo Klöcker wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi *whoever implemented this "Store Window Settings" feature*,
>
> please tell us, the KMail developers, how we can fix this bug. And
> please keep in mind that KMail currently has two different main
> windows. The composer window and the "main window" (with folder, header
> and preview pane and optionally mimetree viewer).
>
> How does KWin differentiate between the composer window and the main
> window when it stores and restores window settings?
Actually, I started looking at this issue at the end of the last week. The
only suitable window properties for identifying windows AFAIK are WM_NAME,
WM_CLASS and WM_WINDOW_ROLE (see
http://mail.gnome.org/archives/usability/2002-March/msg00012.html). Using the
window caption (WM_NAME) might probably cause more harm than good, so that
leaves only WM_CLASS and WM_WINDOW_ROLE. In Konsole, use " xprop | grep
'\(CLASS\)\|\(ROLE\)' " and click on various windows (Qt now incorrectly
uses WINDOW_ROLE without the WM_ prefix, see qapplication_x11.cpp.patch). If
the output is the same, the windows will be considered the same. I said 'will
be', after applying the attached kdebase/kwin patch, feel free to review (oh,
in case somebody notices the removal of SessionInfoPrivate, that's a private
class anyway).
For KMail (and all other apps): The WM_CLASS value is basically argv[0], so
you cannot do much about it. The WM_WINDOW_ROLE is set by Qt to the value of
QWidget::name() (i.e. the const char* argument to QWidget constructor, or
QWidget::setName()). I suggest setting it explicitly for all toplevel widgets
(different values for different types of widgets of course). As a slight
short-term disadvantage, this may break some DCOP scripts *shrug* hardcoding
kmail-mainwindow#1 somewhere may sometimes break even now.
Hmm, and while I'm at it, I also suggest the kmainwindow.cpp patch which
makes sure the name() will be really always unique. Probably not really
needed if I get in Qt a similar patch for QWidget::setName() for toplevel
widgets.
PS: I reassigned the bug to kwin, as it's a kwin bug (fixed by the attached
patch). Just set name() for toplevel widgets in KMail as I said (unless
somebody will complain about the possible DCOP breakage or whatever).
--
Lubos Lunak
KDE developer
---------------------------------------------------------------------
SuSE CR, s.r.o. e-mail: l.lunak at suse.cz , l.lunak at kde.org
Drahobejlova 27 tel: +420 2 9654 2373
190 00 Praha 9 fax: +420 2 9654 2374
Czech Republic http://www.suse.cz/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: qapplication_x11.cpp.patch
Type: text/x-diff
Size: 633 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20021021/8f974d16/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kwin.patch
Type: text/x-diff
Size: 9121 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20021021/8f974d16/attachment-0001.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kmainwindow.cpp.patch
Type: text/x-diff
Size: 1895 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20021021/8f974d16/attachment-0002.patch>
More information about the kde-core-devel
mailing list