| 159 | } |
| 160 | |
| 161 | void MessageWidget::postMessage(Message* message, const QVector<QSharedPointer<QAction>>& actions) |
| 162 | { |
| 163 | Q_ASSERT(!m_messageHash.contains(message)); |
| 164 | m_messageHash.insert(message, actions); |
| 165 | |
| 166 | // insert message sorted after priority |
| 167 | int i = 0; |
| 168 | for (; i < m_messageQueue.count(); ++i) { |
| 169 | if (message->priority() > m_messageQueue[i]->priority()) { |
| 170 | break; |
| 171 | } |
| 172 | } |
| 173 | |
| 174 | // queue message |
| 175 | m_messageQueue.insert(i, message); |
| 176 | |
| 177 | // catch if the message gets deleted |
| 178 | connect(message, &Message::closed, |
| 179 | this, &MessageWidget::messageDestroyed); |
| 180 | |
| 181 | if (i == 0 && !m_messageWidget->isHideAnimationRunning()) { |
| 182 | // if message has higher priority than the one currently shown, |
| 183 | // then hide the current one and then show the new one. |
| 184 | if (m_currentMessage) { |
| 185 | // autoHide timer may be running for currently shown message, therefore |
| 186 | // simply disconnect autoHide timer to all timeout() receivers |
| 187 | disconnect(m_autoHideTimer, SIGNAL(timeout()), nullptr, nullptr); |
| 188 | m_autoHideTimer->stop(); |
| 189 | |
| 190 | // if there is a current message, the message queue must contain 2 messages |
| 191 | Q_ASSERT(m_messageQueue.size() > 1); |
| 192 | Q_ASSERT(m_currentMessage == m_messageQueue[1]); |
| 193 | |
| 194 | // a bit unnice: disconnect textChanged() and iconChanged() signals of previously visible message |
| 195 | disconnect(m_currentMessage, &Message::textChanged, |
| 196 | m_messageWidget, &KMessageWidget::setText); |
| 197 | disconnect(m_currentMessage, &Message::iconChanged, |
| 198 | m_messageWidget, &KMessageWidget::setIcon); |
| 199 | |
| 200 | m_currentMessage = nullptr; |
| 201 | m_messageWidget->animatedHide(); |
| 202 | } else { |
| 203 | showNextMessage(); |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | void MessageWidget::messageDestroyed(Message* message) |
| 209 | { |