| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*
- Copyright (C) 2016 Borsato Ivano
- The JavaScript code in this page is free software: you can
- redistribute it and/or modify it under the terms of the GNU
- General Public License (GNU GPL) as published by the Free Software
- Foundation, either version 3 of the License, or (at your option)
- any later version. The code is distributed WITHOUT ANY WARRANTY;
- without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
- */
- 'use strict';
- import GObject from 'gi://GObject';
- import * as Main from 'resource:///org/gnome/shell/ui/main.js';
- // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/messageTray.js
- import * as MessageTray from 'resource:///org/gnome/shell/ui/messageTray.js';
- import St from 'gi://St';
- import * as Lib from './convenience.js';
- import * as Settings from './settings.js';
- import * as Ext from './extension.js';
- import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
- /**
- * @type {NotifyManager}
- */
- export const NotifyManager = GObject.registerClass({
- GTypeName: 'EasyScreenCast_NotifyManager',
- }, class NotifyManager extends GObject.Object {
- /**
- * Create a notify manager
- */
- constructor() {
- super();
- Lib.TalkativeLog('-°-init notify manager');
- this._alertWidget = null;
- }
- /**
- * create notify
- *
- * @param {string} msg the title
- * @param {Gio.FileIcon} icon the icon
- * @param {boolean} sound whether to play a sound
- * @returns {MessageTray.Notification}
- */
- createNotify(msg, icon, sound) {
- Lib.TalkativeLog(`-°-create notify :${msg}`);
- var source = new MessageTray.Source({
- title: _('EasyScreenCast'),
- });
- var notify = new MessageTray.Notification({
- source,
- title: msg,
- body: null,
- gicon: icon,
- isTransient: false,
- resident: true,
- });
- Main.messageTray.add(source);
- source.addNotification(notify);
- if (sound)
- notify.playSound();
- return notify;
- }
- /**
- * update notify
- *
- * @param {MessageTray.Notification} notify the already existing notification to update
- * @param {string} msg the title
- * @param {Gio.FileIcon} icon the icon
- * @param {boolean} sound whether to play a sound
- */
- updateNotify(notify, msg, icon, sound) {
- Lib.TalkativeLog('-°-update notify');
- notify.set({
- title: msg,
- body: null,
- gicon: icon,
- });
- if (sound)
- notify.playSound();
- }
- /**
- * create alert
- *
- * @param {string} msg the message
- */
- createAlert(msg) {
- Lib.TalkativeLog(`-°-show alert tweener : ${msg}`);
- if (Ext.Indicator.getSettings().getOption('b', Settings.SHOW_NOTIFY_ALERT_SETTING_KEY)) {
- var monitor = Main.layoutManager.focusMonitor;
- this.resetAlert();
- this._alertWidget = new St.Label({
- style_class: 'alert-msg',
- opacity: 255,
- text: msg,
- });
- Main.uiGroup.add_child(this._alertWidget);
- this._alertWidget.set_position(
- Math.floor(monitor.width / 2 - this._alertWidget.width / 2),
- Math.floor(monitor.height / 2 - this._alertWidget.height / 2)
- );
- Lib.TalkativeLog(`-°-show alert tweener : opacity=${this._alertWidget.opacity}`);
- // see org/gnome/shell/ui/environment.js#_easeActor
- // TODO: for some reason, no transition is created, so the onComplete
- // callback is called _immediately_
- /*
- import Clutter from 'gi://Clutter';
- this._alertWidget.ease({
- opacity: 0,
- duration: 400,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- onComplete: () => {
- Lib.TalkativeLog(`-°-show alert tweener completed: opacity=${this._alertWidget.opacity}`);
- Main.uiGroup.remove_child(this._alertWidget);
- this._alertWidget = null;
- },
- });
- */
- }
- }
- resetAlert() {
- if (this._alertWidget !== null) {
- this._alertWidget.hide();
- Main.uiGroup.remove_child(this._alertWidget);
- this._alertWidget = null;
- }
- }
- });
|