forked from bennypowers/gnome-shell-extension-firefox-pip
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextension.js
60 lines (51 loc) · 1.83 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* extension.js
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import { Extension } from 'resource:///org/gnome/shell/extensions/extension.js';
import _GLib from 'gi://GLib';
/** @type {import('@girs/glib-2.0')} */
const GLib = _GLib;
import { locales } from './lib/locales.js';
export default class FirefoxPIPExtension extends Extension {
/** @param {import('@girs/meta-13').Window} window */
static isPiP(window) {
if (window.get_wm_class().match(/firefox/) || window.get_sandboxed_app_id().match(/firefox/)) {
const title = window.get_title();
for (const lang of GLib.get_language_names())
if (title === locales.get(lang))
return true;
}
return false;
}
listenerId = 0;
enable() {
this.listenerId = global.display.connect('window-created', (_, window) =>
window.get_compositor_private().connect('realize', () =>
void this.onCreated(window)));
}
disable() {
global.display.disconnect(this.listenerId);
}
/** @param {import('@girs/meta-13').Window} window */
onCreated(window) {
if (FirefoxPIPExtension.isPiP(window)) {
window.raise_and_make_recent();
window.make_above();
window.stick();
}
}
}