RaveOS-Gnome/releng/airootfs/usr/share/gnome-shell/extensions/notification-timeout@chlumskyvaclav.gmail.com/prefspage.js
2025-03-15 15:27:53 +01:00

275 lines
8.2 KiB
JavaScript

'use strict';
/**
* extension notification-timeout
* JavaScript Gnome extension for setting same timeout for all notifications.
*
* @author Václav Chlumský
* @copyright Copyright 2023, Václav Chlumský.
*/
/**
* @license
* The MIT License (MIT)
*
* Copyright (c) 2023 Václav Chlumský
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import Gtk from 'gi://Gtk';
import Adw from 'gi://Adw';
import GObject from 'gi://GObject';
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export const PreferencesPage = GObject.registerClass({
GTypeName: 'NotificationTimeoutPrefsWidget'
}, class PreferencesPage extends GObject.Object {
_init(metadata, settings) {
super._init();
this._metadata = metadata;
this._settings = settings;
this._ignoreIdle = settings.get_boolean("ignore-idle");
this._alwaysNormal = settings.get_boolean("always-normal");
this._newTimeout = settings.get_int("timeout");
}
/**
* Build Settings page with general settings
*
* @method buildGeneralPage
* @return {Object} widget for page in notebook
*/
_buildGeneralPage() {
let top = 1;
let labelWidget = null;
let generalPage = new Gtk.Grid(
{
hexpand: true,
vexpand: true,
halign:Gtk.Align.CENTER,
valign:Gtk.Align.CENTER
}
);
/**
* Ignore idle
*/
labelWidget = new Gtk.Label(
{label: _("Ignore idle (always use timeout):")}
);
generalPage.attach(labelWidget, 1, top, 1, 1);
let ignoreIdleSwitch = new Gtk.Switch(
{
active: this._ignoreIdle,
hexpand: false,
vexpand: false,
halign:Gtk.Align.CENTER,
valign:Gtk.Align.CENTER
}
);
ignoreIdleSwitch.connect(
"notify::active",
() => {
this._ignoreIdle = ignoreIdleSwitch.get_active();
this._settings.set_boolean("ignore-idle", this._ignoreIdle);
}
)
generalPage.attach_next_to(
ignoreIdleSwitch,
labelWidget,
Gtk.PositionType.RIGHT,
1,
1
);
top++;
/**
* Notification' urgency is always normal
*/
labelWidget = new Gtk.Label(
{label: _("Timeouted notifications are always 'normal' ('critical' don't timeout):")}
);
generalPage.attach(labelWidget, 1, top, 1, 1);
let alwaysNormalSwitch = new Gtk.Switch(
{
active: this._alwaysNormal,
hexpand: false,
vexpand: false,
halign:Gtk.Align.CENTER,
valign:Gtk.Align.CENTER
}
);
alwaysNormalSwitch.connect(
"notify::active",
() => {
this._alwaysNormal = alwaysNormalSwitch.get_active();
this._settings.set_boolean("always-normal", this._alwaysNormal);
}
)
generalPage.attach_next_to(
alwaysNormalSwitch,
labelWidget,
Gtk.PositionType.RIGHT,
1,
1
);
top++;
/**
* Notification timeout
*/
labelWidget = new Gtk.Label(
{label: _("Notification timeout:")}
);
generalPage.attach(labelWidget, 1, top, 1, 1);
let timeoutComboBox = new Gtk.ComboBoxText();
timeoutComboBox.append("0", _("Don't timeout"));
timeoutComboBox.append("500", _("500 ms"));
timeoutComboBox.append("1000", _("1 s"));
timeoutComboBox.append("2000", _("2 s"));
timeoutComboBox.append("3000", _("3 s"));
timeoutComboBox.append("4000", _("4 s"));
timeoutComboBox.append("5000", _("5 s"));
timeoutComboBox.append("6000", _("6 s"));
timeoutComboBox.append("7000", _("7 s"));
timeoutComboBox.append("8000", _("8 s"));
timeoutComboBox.append("9000", _("9 s"));
timeoutComboBox.append("10000", _("10 s"));
timeoutComboBox.append("15000", _("15 s"));
timeoutComboBox.append("20000", _("20 s"));
timeoutComboBox.append("30000", _("30 s"));
timeoutComboBox.append("45000", _("45 s"));
timeoutComboBox.append("60000", _("1 min"));
timeoutComboBox.append("120000", _("2 min"));
timeoutComboBox.append("180000", _("3 min"));
timeoutComboBox.append("240000", _("4 min"));
timeoutComboBox.append("300000", _("5 min"));
timeoutComboBox.append("600000", _("10 min"));
timeoutComboBox.append("900000", _("15 min"));
timeoutComboBox.append("1800000", _("30 min"));
timeoutComboBox.set_active_id(this._newTimeout.toString());
timeoutComboBox.connect(
"changed",
() => {
this._newTimeout = parseInt(timeoutComboBox.get_active_id());
this._settings.set_int("timeout", this._newTimeout);
}
);
generalPage.attach_next_to(
timeoutComboBox,
labelWidget,
Gtk.PositionType.RIGHT,
1,
1
);
top++;
return generalPage;
}
/**
* Build About page
*
* @method buildGeneralPage
* @return {Object} widget for page in notebook
*/
_buildAboutPage() {
let aboutWidget = new Gtk.Box(
{
hexpand: true,
vexpand: true,
halign:Gtk.Align.CENTER,
valign:Gtk.Align.CENTER
}
);
let labelWidget = new Gtk.Label(
{label: `${this._metadata.name}, version: ${this._metadata.version}, Copyright (c) 2023 Václav Chlumský`}
);
aboutWidget.append(labelWidget);
return aboutWidget;
}
/**
* This function is called when the preferences window is first created to build
* and return a Gtk widget.
*
* @method buildPrefsWidget
* @return {Object} returns the prefsWidget
*/
buildPrefsWidget() {
let prefsPage = new Adw.PreferencesPage();
let prefsGroup = new Adw.PreferencesGroup();
let prefsMainBox = new Gtk.Box(
{
hexpand: true,
vexpand: true,
vexpand_set:true,
hexpand_set: true,
halign:Gtk.Align.FILL,
valign:Gtk.Align.FILL
}
);
let notebook = new Gtk.Notebook();
let pageGeneral = this._buildGeneralPage();
pageGeneral.border_width = 10;
notebook.append_page(
pageGeneral,
new Gtk.Label({label: _("General settings")})
);
let pageAbout = this._buildAboutPage()
pageAbout.border_width = 10;
notebook.append_page(
pageAbout,
Gtk.Image.new_from_icon_name("help-about", Gtk.IconSize.MENU)
);
prefsMainBox.append(notebook);
prefsGroup.add(prefsMainBox);
prefsPage.add(prefsGroup);
return prefsPage;
}
});