[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [rkward/frameworks] rkward/windows: Allow preview status messages to be closed (by using KMessageWid
From: Thomas Friedrichsmeier <thomas.friedrichsmeier () ruhr-uni-bochum ! de>
Date: 2016-09-15 18:57:41
Message-ID: E1bkbqv-0000fJ-Hr () code ! kde ! org
[Download RAW message or body]
Git commit 11143202db5d4cf099834811f77252b83397150c by Thomas Friedrichsmeier.
Committed on 15/09/2016 at 18:56.
Pushed by tfry into branch 'frameworks'.
Allow preview status messages to be closed (by using KMessageWidget instead of \
KPassivePopup).
Status messaages are still shown as an overlay, in order to avoid resizing of the \
preview.
M +26 -18 rkward/windows/rkmdiwindow.cpp
M +4 -4 rkward/windows/rkmdiwindow.h
http://commits.kde.org/rkward/11143202db5d4cf099834811f77252b83397150c
diff --git a/rkward/windows/rkmdiwindow.cpp b/rkward/windows/rkmdiwindow.cpp
index 94d8e48..fe34128 100644
--- a/rkward/windows/rkmdiwindow.cpp
+++ b/rkward/windows/rkmdiwindow.cpp
@@ -23,12 +23,13 @@
#include <QEvent>
#include <QPaintEvent>
#include <QAction>
+#include <QVBoxLayout>
#include <kparts/partactivateevent.h>
#include <kxmlguifactory.h>
#include <kactioncollection.h>
#include <KLocalizedString>
-#include <kpassivepopup.h>
+#include <kmessagewidget.h>
#include "rkworkplace.h"
#include "rkworkplaceview.h"
@@ -70,6 +71,7 @@ RKMDIWindow::RKMDIWindow (QWidget *parent, int type, bool \
tool_window, const cha no_border_when_active = false;
standard_client = 0;
status_popup = 0;
+ status_popup_container = 0;
setWindowIcon (RKStandardIcons::iconForWindow (this));
}
@@ -79,7 +81,6 @@ RKMDIWindow::~RKMDIWindow () {
if (isToolWindow ()) RKToolWindowList::unregisterToolWindow (this);
delete standard_client;
- delete status_popup;
}
KActionCollection *RKMDIWindow::standardActionCollection () {
@@ -329,19 +330,32 @@ void RKMDIWindow::setStatusMessage (const QString& message, \
RCommand *command) { RK_TRACE (MISC);
if (!status_popup) {
- status_popup = new KPassivePopup (this);
- disconnect (status_popup, SIGNAL (clicked()), status_popup, SLOT (hide())); // \
no auto-hiding, please, either SIGNAL / SLOT mechanism
- disconnect (status_popup, static_cast<void \
(KPassivePopup::*)()>(&KPassivePopup::clicked), status_popup, &QWidget::hide); \
+ status_popup_container = new QWidget (this); + status_popup_container->resize \
(size ()); + QVBoxLayout *layout = new QVBoxLayout (status_popup_container);
+ layout->setContentsMargins (10, 10, 10, 10);
+ status_popup = new KMessageWidget (status_popup_container);
+ status_popup->setCloseButtonVisible (true);
+ status_popup->setMessageType (KMessageWidget::Warning);
+ layout->addWidget (status_popup);
+ layout->addStretch ();
}
if (command) connect (command->notifier (), &RCommandNotifier::commandFinished, \
this, &RKMDIWindow::clearStatusMessage); if (!message.isEmpty ()) {
- status_popup->setView (QString (), message);
- status_popup->show (this->mapToGlobal (QPoint (20, 20)));
- status_popup->setTimeout (0);
+ status_popup_container->show ();
+ if (status_popup->text () == message) {
+ if (!status_popup->isVisible ()) status_popup->animatedShow (); // it might have \
been close by user. And no, simply show() is _not_ good enough. KF5 (5.15.0) + }
+ if (status_popup->text () != message) {
+ if (status_popup->isVisible ()) status_popup->hide (); // otherwise, the \
KMessageWidget does not update geometry (KF5, 5.15.0) + status_popup->setText \
(message); + status_popup->animatedShow ();
+ }
} else {
+ status_popup_container->hide ();
status_popup->hide ();
- status_popup->setTimeout (10); // this is a lame way to keep track of whether the \
popup is empty. See showEvent() + status_popup->setText (QString ()); // this is a \
lame way to keep track of whether the popup is empty. See resizeEvent() }
}
@@ -351,16 +365,10 @@ void RKMDIWindow::clearStatusMessage () {
setStatusMessage (QString ());
}
-void RKMDIWindow::hideEvent (QHideEvent* ev) {
- if (status_popup) {
- status_popup->hide ();
+void RKMDIWindow::resizeEvent (QResizeEvent*) {
+ if (status_popup_container && !status_popup->text ().isEmpty ()) {
+ status_popup_container->resize (size ());
}
- QWidget::hideEvent (ev);
-}
-
-void RKMDIWindow::showEvent (QShowEvent* ev) {
- if (status_popup && (status_popup->timeout () == 0)) status_popup->show \
(this->mapToGlobal (QPoint (20, 20)));
- QWidget::showEvent (ev);
}
diff --git a/rkward/windows/rkmdiwindow.h b/rkward/windows/rkmdiwindow.h
index 049b5bc..8e36e6f 100644
--- a/rkward/windows/rkmdiwindow.h
+++ b/rkward/windows/rkmdiwindow.h
@@ -30,7 +30,7 @@ class QEvent;
class QPaintEvent;
class RKWorkplace;
class RKToolWindowBar;
-class KPassivePopup;
+class KMessageWidget;
class RCommand;
class RKMDIStandardActionClient : public KXMLGUIClient {
@@ -141,9 +141,9 @@ protected:
/** @see globalContextProperty() */
void setGlobalContextProperty (const QString& property, const QString& value) { \
global_context_properties.insert (property, value); };
- KPassivePopup* status_popup;
- void hideEvent (QHideEvent *ev);
- void showEvent (QShowEvent *ev);
+ KMessageWidget* status_popup;
+ QWidget* status_popup_container;
+ void resizeEvent (QResizeEvent *ev) override;
friend class RKWorkplace;
/** type of this window */
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic