summaryrefslogtreecommitdiffstats
path: root/src/daemon/daemon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/daemon.cpp')
-rw-r--r--src/daemon/daemon.cpp46
1 files changed, 39 insertions, 7 deletions
diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp
index c0768d3..a0b1454 100644
--- a/src/daemon/daemon.cpp
+++ b/src/daemon/daemon.cpp
@@ -29,11 +29,11 @@
#include <tqpixmap.h>
#include <tqtimer.h>
#include <knotifyclient.h>
-#include <kpassivepopup.h>
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <klocale.h>
#include <kapplication.h>
+#include <kiconloader.h>
#include <kglobalsettings.h>
#include <stdlib.h>
@@ -47,6 +47,13 @@ NotifierContainer* GTKNotifierContainer = NULL;
void real_handleGTKMain();
NotifierContainer::NotifierContainer() : TQWidget() {
+ mPopupList.clear();
+
+ // Determine bottom of desktop
+ TQPoint cursorPos = TQCursor::pos();
+ TQRect r = KGlobalSettings::desktopGeometry(cursorPos);
+ mTopOfStack = r.height();
+ mRightOfStack = r.width();
}
NotifierContainer::~NotifierContainer() {
@@ -58,7 +65,11 @@ void NotifierContainer::handleGTKMain() {
void NotifierContainer::displayMessage(TQString title, TQString message, TQString icon, int x, int y) {
TQPixmap px;
- px.load( icon );
+ KIconLoader* il = KGlobal::iconLoader();
+ px = il->loadIcon( icon, KIcon::NoGroup );
+// if (px.isNull()) {
+// px = il->loadIcon( "gnome_apps", KIcon::NoGroup );
+// }
KPassivePopup *pop = new KPassivePopup( KPassivePopup::Boxed, this, "" );
pop->setAutoDelete( true );
@@ -66,13 +77,21 @@ void NotifierContainer::displayMessage(TQString title, TQString message, TQStrin
pop->setTimeout( -1 );
TQPoint leftCorner( x, y);
if (leftCorner.isNull()) {
- // FIXME: This should stack the popups on top of each other...
- TQPoint cursorPos = TQCursor::pos();
+ if (mPopupList.isEmpty()) {
+ // Determine bottom of desktop
+ TQPoint cursorPos = TQCursor::pos();
+ TQRect r = KGlobalSettings::desktopGeometry(cursorPos);
+ mTopOfStack = r.height();
+ mRightOfStack = r.width();
+ }
TQSize popupSize = pop->tqsizeHint();
- TQRect r = KGlobalSettings::desktopGeometry(cursorPos);
- leftCorner.setX(r.width()-popupSize.width());
- leftCorner.setY(r.height()-popupSize.height());
+ mTopOfStack = mTopOfStack-popupSize.height();
+ if (mTopOfStack < 0) mTopOfStack = 0;
+ leftCorner.setX(mRightOfStack-popupSize.width());
+ leftCorner.setY(mTopOfStack);
}
+ connect(pop, SIGNAL(hidden(KPassivePopup*)), this, SLOT(popupClosed(KPassivePopup*)));
+ mPopupList.append(pop);
pop->show(leftCorner);
processEvents();
@@ -82,6 +101,19 @@ void NotifierContainer::processEvents() {
tqApp->processEvents();
}
+void NotifierContainer::popupClosed(KPassivePopup* popup) {
+ // Remove the popup from our list of popups
+ mPopupList.remove(popup);
+
+ if (mPopupList.isEmpty()) {
+ // Determine bottom of desktop
+ TQPoint cursorPos = TQCursor::pos();
+ TQRect r = KGlobalSettings::desktopGeometry(cursorPos);
+ mTopOfStack = r.height();
+ mRightOfStack = r.width();
+ }
+}
+
#undef signals
#include <dbus/dbus.h>