1
0
Fork 0
gnome-shell-extensions-extra/extensions/44/hibernate-status/confirmDialog.js

194 lines
5.7 KiB
JavaScript
Raw Normal View History

const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Mainloop = imports.mainloop;
const LoginManager = imports.misc.loginManager;
const Main = imports.ui.main;
const StatusSystem = imports.ui.status.system;
const PopupMenu = imports.ui.popupMenu;
const ModalDialog = imports.ui.modalDialog;
const CheckBox = imports.ui.checkBox.CheckBox;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const ExtensionUtils = imports.misc.extensionUtils;
// Use __ () and N__() for the extension gettext domain, and reuse
// the shell domain with the default _() and N_()
const Gettext = imports.gettext.domain('hibernate-status-button');
const __ = Gettext.gettext;
const N__ = function(e) { return e };
ExtensionUtils.initTranslations('hibernate-status-button');
var HibernateDialogContent = {
subject: C_("title", __("Hibernate")),
description: __("Do you really want to hibernate the system?"),
confirmButtons: [{
signal: 'Cancel',
label: C_("button", __("Cancel")),
key: Clutter.Escape
},
{
signal: 'ConfirmedHibernate',
label: C_("button", __("Hibernate")),
default: true
}],
iconName: 'document-save-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon',
};
var SystemdMissingDialogContent = {
subject: C_("title", __("Hibernate button: Systemd Missing")),
description: __("Systemd seems to be missing and is required."),
confirmButtons: [{
signal: 'Cancel',
label: C_("button", __("Cancel")),
key: Clutter.Escape
},
{
signal: 'DisableExtension',
label: C_("button", __("Disable Extension")),
default: true
}],
iconName: 'document-save-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon',
};
var HibernateFailedDialogContent = {
subject: C_("title", __("Hibernate button: Hibernate failed")),
description: __("Looks like hibernation failed.\n" +
"On some linux distributions hibernation is disabled\n" +
"because not all hardware supports it well;\n" +
"please check your distribution documentation\n" +
"on how to enable it."),
checkBox: __("You are wrong, don't check this anymore!"),
confirmButtons: [{
signal: 'Cancel',
label: C_("button", __("Cancel")),
key: Clutter.Escape
},
{
signal: 'DisableExtension',
label: C_("button", __("Disable Extension")),
default: true
}],
iconName: 'document-save-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon',
};
const _DIALOG_ICON_SIZE = 32;
function _setLabelText(label, text) {
if (text) {
label.set_text(text);
label.show();
} else {
label.set_text('');
label.hide();
}
}
var ConfirmDialog = GObject.registerClass({
Signals: { 'ConfirmedHibernate': { param_types: [ GObject.TYPE_BOOLEAN ] },
'DisableExtension': { param_types: [ GObject.TYPE_BOOLEAN ] },
'Cancel': { param_types: [ GObject.TYPE_BOOLEAN ] } }
},
class ConfirmDialog extends ModalDialog.ModalDialog {
_init(dialog) {
super._init({
styleClass: 'end-session-dialog',
destroyOnClose: true
});
let mainContentLayout = new St.BoxLayout({
vertical: false,
x_expand: true ,
y_expand: false
});
this.contentLayout.add(mainContentLayout);
this._iconBin = new St.Bin({
x_expand: true,
y_expand: false,
x_align: St.Align.END,
y_align: St.Align.START
});
mainContentLayout.add(this._iconBin);
let messageLayout = new St.BoxLayout({
vertical: true,
y_align: St.Align.START
});
mainContentLayout.add(messageLayout);
this._subjectLabel = new St.Label({
style_class: 'end-session-dialog-subject',
y_expand: false,
y_align: St.Align.START
});
messageLayout.add(this._subjectLabel);
this._descriptionLabel = new St.Label({
style_class: 'end-session-dialog-description',
y_expand: true,
y_align: St.Align.START
});
messageLayout.add(this._descriptionLabel);
// fill dialog
_setLabelText(this._descriptionLabel, dialog.description);
_setLabelText(this._subjectLabel, dialog.subject);
if (dialog.iconName) {
this._iconBin.child = new St.Icon({
icon_name: dialog.iconName,
icon_size: _DIALOG_ICON_SIZE,
style_class: dialog.iconStyleClass
});
}
if (dialog.checkBox) {
this._checkBox = new CheckBox(dialog.checkBox);
mainContentLayout.add(this._checkBox.actor);
}
let buttons = [];
for (let i = 0; i < dialog.confirmButtons.length; i++) {
let signal = dialog.confirmButtons[i].signal;
let label = dialog.confirmButtons[i].label;
let keys = dialog.confirmButtons[i].key;
buttons.push({
action: () => {
let signalId = this.connect('closed',
() => {
this.disconnect(signalId);
this._confirm(signal);
});
this.close();
},
label: label,
key: keys
});
};
this.setButtons(buttons);
}
_confirm(signal) {
var checked;
if (this._checkBox)
checked = this._checkBox.actor.get_checked()
this.emit(signal, checked);
}
cancel() {
this.close();
}
});