| Summary: | system tray displays incorrect status for MSN protocol | ||
|---|---|---|---|
| Product: | [Unmaintained] kopete | Reporter: | Arnout Boelens <a.m.p.boelens> |
| Component: | general | Assignee: | Kopete Developers <kopete-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | 0.50.0 | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Arnout Boelens
2008-02-08 18:51:10 UTC
I tried to reproduce this and it only happened exactly like described when I used 2 accounts. When I worked with 1 account I observed something similar. I tried this in Kopete 0.50.50 (updated svn today, revision 779627). In order to learn the Kopete code I tried to locate the source and possibly find a solution. I'm very new to Kopete code so there probably are errors in my explanation, but I hope it can be of any use. Here are my findings+notes: Reproduction (1) - 2 accounts: MSN and Jabber - use the auto login feature to connect both (online status) -> systemtray tooltip for MSN is connecting, Jabber online Reproduction (2): - You need 2 accounts ( I used Jabber+MSN or Jabber+Jabber ) in your identity - Log in (online status) with your Jabber account - Log in (online status) with your MSN account. -> Your jabber account should be online and your msn account should be offline when you check the systemtray tooltip Reproduction (3): - You can also do it with 1 account (tried with jabber and msn) - Log in with your account (online status) - Change online status to away - Change online status to busy -> Your account should still be away in the systemtray tooltip Problem identification (from what I could find out): The tray tooltip gets regenerated whenever the status of the identity changes: kopetewindow.cpp: - the systemtray tooltip is created by makeTrayToolTip() - slotIdentityStatusIconChanged() calls makeTrayToolTip() - this slot is called on the onlineStatusChanged() (*) signal of the Identity kopeteidentity.cpp: - When the status of an account changes ( onlineStatusChanged() signal) the slot updateOnlineStatus() is called - updateOnlineStatus() does emit onlineStatusChanged() (*) BUT only in certain cases - the signal is only emitted when the the new onlinestatus of one of the accounts has a higher significance than the onlinestatus of the identity (Reproduction 2) It is because of the selection in updateOnlineStatus() (kopeteidentity.cpp) that you don't get the correct info. Your identity will allready the have most significant status. Since your Jabber is allready connected the new msn connection won't have an impact on your idenitity status. In this case the emit onlineStatusChanged doesn't happen. Because of that kopetewindow won't regenerate the tooltip. Similar for (Reproduction 3) because Away and Busy have the the same onlinestatus significance (Kopete::OnlineStatus::StatusType) and the regeneration won't happen. Workaround: - You can move the emit onlineStatusChanged( this ) out of the loop in Identity::updateOnlineStatus(). But this does change the meaning of this signal (I think), because not necessarely the status of the identity changed but rather the status of one of the subaccounts. So this may be not an ideal solution. SVN commit 791176 by rjarosz: Correctly update tooltip of systray and identities. BUG: 156113 BUG: 157444 M +18 -10 kopete/kopetewindow.cpp M +6 -0 kopete/kopetewindow.h M +3 -0 libkopete/kopeteidentity.cpp M +1 -0 libkopete/kopeteidentity.h WebSVN link: http://websvn.kde.org/?view=rev&revision=791176 SVN commit 791180 by rjarosz: Backport commit 791176. Correctly update tooltip of systray and identities. CCBUG: 156113 CCBUG: 157444 M +14 -6 kopete/kopetewindow.cpp M +6 -0 kopete/kopetewindow.h M +3 -0 libkopete/kopeteidentity.cpp M +1 -0 libkopete/kopeteidentity.h WebSVN link: http://websvn.kde.org/?view=rev&revision=791180 |