This commit is contained in:
Jasper St. Pierre 2014-05-28 18:33:38 -04:00
parent 8750f1edc0
commit 02060d2bbc

View File

@ -1244,6 +1244,42 @@ const SystemTraySection = new Lang.Class({
},
});
const NotificationDrawerList = new Lang.Class({
Name: 'NotificationDrawerList',
_init: function() {
this.actor = new St.ScrollView({ style_class: 'notification-drawer-list-scrollview',
hscrollbar_policy: Gtk.PolicyType.NEVER });
this._list = new St.BoxLayout({ style_class: 'notification-drawer-list',
vertical: true });
this.actor.add_actor(this._list);
this._notifications = [];
},
pushNotification: function(notification) {
this._notifications.push(notification);
let wrapper = new St.Widget({ style_class: 'notification-drawer-notification' });
this._list.add_child(wrapper);
// XXX -- figure out a better policy for this
if (notification.actor.get_parent() == null) {
wrapper.add_child(notification.actor);
} else {
let id = notification.actor.connect('parent-set', Lang.bind(this, function() {
if (notification.actor.get_parent() == null) {
notification.actor.disconnect(id);
wrapper.add_child(notification.actor);
}
}));
}
notification.connect('destroy', function() {
wrapper.destroy();
});
},
});
const NotificationDrawer = new Lang.Class({
Name: 'NotificationDrawer',
@ -1253,6 +1289,9 @@ const NotificationDrawer = new Lang.Class({
this.actor = new St.BoxLayout({ style_class: 'notification-drawer',
vertical: true });
this._notificationList = new NotificationDrawerList();
this.actor.add_child(this._notificationList.actor);
this._footer = new St.BoxLayout({ style_class: 'notification-drawer-footer' });
this.actor.add_child(this._footer);
@ -1301,6 +1340,17 @@ const NotificationDrawer = new Lang.Class({
Main.overview.hide();
this._tray.close();
},
pushNotification: function(notification) {
this._notificationList.pushNotification(notification);
},
setVisible: function(visible) {
if (visible)
this.actor.y = -this.actor.height;
else
this.actor.y = 0;
},
});
const MessageTray = new Lang.Class({
@ -1683,6 +1733,8 @@ const MessageTray = new Lang.Class({
return (notification2.urgency - notification1.urgency);
});
}
this._notificationDrawer.pushNotification(notification);
this._updateState();
},
@ -1855,10 +1907,7 @@ const MessageTray = new Lang.Class({
}
}
if (this._traySummoned)
this._notificationDrawer.actor.y = -this._notificationDrawer.actor.height;
else
this._notificationDrawer.actor.y = 0;
this._notificationDrawer.setVisible(this._traySummoned);
this._updatingState = false;