[PATCH] Allow the program to explicitly hide a notification

Dirk Hohndel dirk at hohndel.org
Thu Mar 3 14:19:19 UTC 2016


On Thu, Mar 03, 2016 at 11:51:53AM +0100, Marco Martin wrote:
> On Wednesday 02 March 2016 14:50:52 Dirk Hohndel wrote:
> > If I want to use a PassiveNotification to give some information to the
> > user that either hides after a while or gets removed when it's no longer
> > valid (i.e.: accessing some web service), then I need a way to explicitly
> > hide the notification
> 
> since PassiveNotification is private, how do you access it? an hideNotification 
> wrapper in ApplicationWindow is needed as well i think?
> 
> that gives me another question: right now this passivenotification is intended 
> to be really simple, so there is one and only one (calling showNotification 
> with a notification already showing will just discard the old one)
> a more complex system system could be done , stacking them and whatnot, but 
> i'm very hesitand on that as i don't want another full notification system (for 
> which there is the system-wide one)

AH, right, I forgot to post about that problem.

So for me the magic notification attached to the action button didn't seem
to work - or more precisely, I couldn't figure out how to access it from a
page that didn't have it's own action button. So I simply instantiated the
private component myself like this:

	Component.onCompleted: {
		notificationComponent = Qt.createComponent("PassiveNotification.qml");
		if( notificationComponent.status != Component.Ready ) {
			print("notificationComponent isn't ready with status " + notificationComponent.status)
			if( notificationComponent.status == Component.Error )
				print("Error:"+ notificationComponent.errorString() );
		}
	}

Now I can create a passive notification like this

	property QtObject notificationComponent
	var notification = notificationComponent.createObject(contentItem.parent);
	notification.showNotification("Dive deleted", 3000, "Undo",
				      function() {
					      manager.undoDelete(deletedId)
				      });

(that's a more typical notification with an action that just disappears after a few seconds)

Or I can do a notification as discussed above that I can turn off when the
status I want to notify about ends

	property alias sharedNotificationComponent: detailsWindow.notificationComponent // this uses the notificationComponent above
	property alias accessingCloud: manager.accessingCloud // that's the status set in the logic C++ core of my app
	property QtObject notification: null
	onAccessingCloudChanged: {
		if (accessingCloud) {
			notification = sharedNotificationComponent.createObject(rootItem);
			notification.showNotification("Accessing Subsurface Cloud Storage", 5000);
		} else {
			if (notification) {
				notification.hideNotification();
			}
		}
		sharedNotificationComponent.show
	}

This seems to mostly do what I want (except in one scenario where my UI
appears to hang and I haven't figured out why, yet.

So I guess that isn't how you envisioned this being used - I'm open to better
implementation, but the underlying desire to be able to actively hide the
notification when the need to show it ends is still valid.

/D


More information about the Plasma-devel mailing list