SVN commit 1007412 by abnerf: Bug fixed. When presence widget is on 'choose new presence status' and the presence status is changed by another client (external peer), the view must change back to 'current presence status'. M +19 -13 presencewidget.cpp M +2 -1 presencewidget.h --- trunk/playground/base/plasma/applets/presence/presencewidget.cpp #1007411:1007412 @@ -84,7 +84,7 @@ icon->setMaximumWidth(s); connect(icon, SIGNAL(clicked()), - this, SLOT(onCurrentStatusClicked())); + this, SLOT(onNewStatusClicked())); m_status[PresenceWidget::Online] = icon; m_iconsLayout->addItem(icon); @@ -98,7 +98,7 @@ icon->setMaximumWidth(s); connect(icon, SIGNAL(clicked()), - this, SLOT(onCurrentStatusClicked())); + this, SLOT(onNewStatusClicked())); m_status[PresenceWidget::Away] = icon; m_iconsLayout->addItem(icon); @@ -112,7 +112,7 @@ icon->setMaximumWidth(s); connect(icon, SIGNAL(clicked()), - this, SLOT(onCurrentStatusClicked())); + this, SLOT(onNewStatusClicked())); m_status[PresenceWidget::Busy] = icon; m_iconsLayout->addItem(icon); @@ -126,7 +126,7 @@ icon->setMaximumWidth(s); connect(icon, SIGNAL(clicked()), - this, SLOT(onCurrentStatusClicked())); + this, SLOT(onNewStatusClicked())); m_status[PresenceWidget::Invisible] = icon; m_iconsLayout->addItem(icon); @@ -140,7 +140,7 @@ icon->setMaximumWidth(s); connect(icon, SIGNAL(clicked()), - this, SLOT(onCurrentStatusClicked())); + this, SLOT(onNewStatusClicked())); m_status[PresenceWidget::Offline] = icon; m_iconsLayout->addItem(icon); @@ -167,7 +167,7 @@ m_currentStatusIcon->setMaximumWidth(85); connect(m_currentStatusIcon, SIGNAL(clicked()), - this, SLOT(onCurrentStatusClicked())); + this, SLOT(onPresenceStatusSwitch())); m_currentStatusLayout->addItem(m_currentStatusIcon); m_currentStatusWidget->setLayout(m_currentStatusLayout); @@ -213,8 +213,17 @@ setLayout(m_layout); } -void PresenceWidget::onCurrentStatusClicked() +void PresenceWidget::onNewStatusClicked() { + PresenceStatus status = m_status.key( + static_cast(sender())); + setPresenceStatus(status); + + emit presenceStatusChanged(m_currentStatus, m_presenceMsg); +} + +void PresenceWidget::onPresenceStatusSwitch() +{ if (m_currentStatusIcon->isVisible()) { m_currentStatusIcon->hide(); m_currentStatusLayout->removeItem(m_currentStatusIcon); @@ -223,17 +232,11 @@ m_iconsWidget->show(); } else { - PresenceStatus status = m_status.key( - static_cast(sender())); - setPresenceStatus(status); - m_iconsWidget->hide(); m_currentStatusLayout->removeItem(m_iconsWidget); m_currentStatusLayout->addItem(m_currentStatusIcon); m_currentStatusIcon->show(); - - emit presenceStatusChanged(m_currentStatus, m_presenceMsg); } } @@ -299,6 +302,9 @@ m_currentStatusIcon->setText(icon->toolTip()); m_currentStatus = status; + + if (m_iconsWidget->isVisible()) + onPresenceStatusSwitch(); } PresenceWidget::PresenceStatus PresenceWidget::presenceStatus() const --- trunk/playground/base/plasma/applets/presence/presencewidget.h #1007411:1007412 @@ -66,7 +66,8 @@ const QString &msg); private Q_SLOTS: - void onCurrentStatusClicked(); + void onNewStatusClicked(); + void onPresenceStatusSwitch(); void onPresenceMsgReturn(); void onPresenceMsgSwitch();