| 631 | } |
| 632 | |
| 633 | void MainWindowPrivate::postMessage(Message* message) |
| 634 | { |
| 635 | if (!message) { |
| 636 | return; |
| 637 | } |
| 638 | |
| 639 | message->setParent(this); |
| 640 | |
| 641 | // if there are no actions, add a close action by default if widget does not auto-hide |
| 642 | if (message->actions().isEmpty() && message->autoHide() < 0) { |
| 643 | auto* closeAction = new QAction(QIcon::fromTheme(QStringLiteral("window-close")), |
| 644 | i18nc("@action", "Close")); |
| 645 | closeAction->setToolTip(i18nc("@info:tooltip", "Close message")); |
| 646 | message->addAction(closeAction); |
| 647 | } |
| 648 | |
| 649 | // reparent actions, as we want full control over when they are deleted |
| 650 | QVector<QSharedPointer<QAction>> managedMessageActions; |
| 651 | const auto messageActions = message->actions(); |
| 652 | managedMessageActions.reserve(messageActions.size()); |
| 653 | for (QAction* action : messageActions) { |
| 654 | action->setParent(nullptr); |
| 655 | managedMessageActions.append(QSharedPointer<QAction>(action)); |
| 656 | } |
| 657 | m_messageHash.insert(message, managedMessageActions); |
| 658 | |
| 659 | // also catch if the user manually calls delete message |
| 660 | connect(message, &Message::closed, this, &MainWindowPrivate::messageDestroyed); |
| 661 | |
| 662 | messageWidget->postMessage(message, managedMessageActions); |
| 663 | } |
| 664 | |
| 665 | void MainWindowPrivate::messageDestroyed(Message* message) |
| 666 | { |