You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fw-daemon/gnome-shell/firewall@subgraph.com/cmonitor.js

98 lines
2.9 KiB

const Lang = imports.lang;
const Main = imports.ui.main;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Tweener = imports.ui.tweener;
const Extension = imports.misc.extensionUtils.getCurrentExtension();
const Convenience = Extension.imports.convenience;
const ConnectionMonitor = new Lang.Class({
Name: 'ConnectionMonitor',
_init: function() {
this._settings = Convenience.getSettings();
this._open = false;
this.actor = new St.BoxLayout({ style_class: 'connection-monitor',
vertical: true,
visible: false,
reactive: true});
this._resize();
},
install: function() {
Main.wm.addKeybinding('open-connection-monitor',
this._settings,
Meta.KeyBindingFlags.NONE,
Shell.ActionMode.ALL,
Lang.bind(this, this._toggle));
Main.uiGroup.add_actor(this.actor);
Main.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.panelBox);
log("install ConnectionMonitor")
},
remove: function() {
Main.wm.removeKeybinding('open-connection-monitor');
Main.uiGroup.remove_actor(this.actor);
log("remove ConnectionMonitor")
},
_toggle: function() {
if (this._open)
this.close();
else
this.open();
},
open: function() {
if (this._open) {
return;
}
this.actor.show();
this._open = true;
Tweener.removeTweens(this.actor);
Tweener.addTween(this.actor, {
time: 0.5,
transition: 'easeOutQuad',
y: this._targetY
});
},
close: function() {
if (!this._open) {
return;
}
this._open = false;
Tweener.removeTweens(this.actor);
Tweener.addTween(this.actor, {
time: 0.5,
transition: 'easeOutQuad',
y: this._hiddenY,
onComplete: Lang.bind(this, function() {
this.actor.hide();
})
});
},
_queueResize: function() {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
Lang.bind(this, function() { this._resize(); }));
},
_resize: function() {
let primary = Main.layoutManager.primaryMonitor;
let myWidth = primary.width * 0.6;
let availableHeight = primary.height - Main.layoutManager.keyboardBox.height;
let myHeight = primary.height * 0.5;
this.actor.x = primary.x + primary.width - myWidth;
this._hiddenY = primary.y + Main.layoutManager.panelBox.height - myHeight;
this._targetY = this._hiddenY + myHeight;
this.actor.y = this._hiddenY;
this.actor.width = myWidth;
this.actor.height = myHeight;
}
});