diff options
Diffstat (limited to 'extensions/hibernate-status/confirmDialog.js')
-rw-r--r-- | extensions/hibernate-status/confirmDialog.js | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/extensions/hibernate-status/confirmDialog.js b/extensions/hibernate-status/confirmDialog.js new file mode 100644 index 0000000..62069e2 --- /dev/null +++ b/extensions/hibernate-status/confirmDialog.js @@ -0,0 +1,193 @@ +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: () => { + this.close(); + let signalId = this.connect('closed', + () => { + this.disconnect(signalId); + this._confirm(signal); + }); + }, + 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(); + } +}); |