PrawnOS-nonfree/resources/InstallResources/extensions/window-corner-preview@fabiomereu.it/indicator.js
gdallasdye 93192fa511
Revived Gnome Support (#162)
* Add gnome, stable and unstable mesa packages,

* Install unstable mesa and stable gnome packages
2020-05-26 16:43:15 -07:00

182 lines
6.5 KiB
JavaScript

"use strict";
// Global modules
const Lang = imports.lang;
const St = imports.gi.St;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
// Internal modules
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const PopupSliderMenuItem = Me.imports.popupSliderMenuItem.PopupSliderMenuItem;
const Bundle = Me.imports.bundle;
const Polygnome = Me.imports.polygnome;
const Preview = Me.imports.preview;
// Utilities
const getWorkspaceWindowsArray = Polygnome.getWorkspaceWindowsArray;
const spliceTitle = Bundle.spliceTitle;
// Preview default values
const MIN_ZOOM = Preview.MIN_ZOOM;
const MAX_ZOOM = Preview.MAX_ZOOM;
const MAX_CROP_RATIO = Preview.MAX_CROP_RATIO;
const DEFAULT_ZOOM = Preview.DEFAULT_ZOOM;
const DEFAULT_CROP_RATIO = Preview.DEFAULT_CROP_RATIO;
var WindowCornerIndicator = new Lang.Class({
Name: "WindowCornerPreview.indicator",
Extends: PanelMenu.Button,
_init: function() {
this.parent(null, "WindowCornerPreview.indicator");
},
// Handler to turn preview on / off
_onMenuIsEnabled: function(item) {
(item.state) ? this.preview.show() : this.preview.hide();
},
_updateSliders: function() {
this.menuZoom.value = this.preview.zoom;
this.menuZoomLabel.label.set_text("Monitor Zoom: " + Math.floor(this.preview.zoom * 100).toString() + "%");
this.menuLeftCrop.value = this.preview.leftCrop;
this.menuRightCrop.value = this.preview.rightCrop;
this.menuTopCrop.value = this.preview.topCrop;
this.menuBottomCrop.value = this.preview.bottomCrop;
},
_onZoomChanged: function(source, value) {
this.preview.zoom = value;
this._updateSliders();
this.preview.emit("zoom-changed");
},
_onLeftCropChanged: function(source, value) {
this.preview.leftCrop = value;
this._updateSliders();
this.preview.emit("crop-changed");
},
_onRightCropChanged: function(source, value) {
this.preview.rightCrop = value;
this._updateSliders();
this.preview.emit("crop-changed");
},
_onTopCropChanged: function(source, value) {
this.preview.topCrop = value;
this._updateSliders();
this.preview.emit("crop-changed");
},
_onBottomCropChanged: function(source, value) {
this.preview.bottomCrop = value;
this._updateSliders();
this.preview.emit("crop-changed");
},
_onSettings: function() {
Main.Util.trySpawnCommandLine("gnome-shell-extension-prefs window-corner-preview@fabiomereu.it");
},
// Update windows list and other menus before menu pops up
_onUserTriggered: function() {
this.menuIsEnabled.setToggleState(this.preview.visible);
this.menuIsEnabled.actor.reactive = this.preview.window;
this._updateSliders()
this.menuWindows.menu.removeAll();
getWorkspaceWindowsArray().forEach(function(workspace, i) {
if (i > 0) {
this.menuWindows.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
}
// Populate window list on submenu
workspace.windows.forEach(function(window) {
let winMenuItem = new PopupMenu.PopupMenuItem(spliceTitle(window.get_title()));
winMenuItem.connect("activate", Lang.bind(this, function() {
this.preview.window = window;
this.preview.show();
}));
this.menuWindows.menu.addMenuItem(winMenuItem);
}, this);
}, this);
},
enable: function() {
// Add icon
this.icon = new St.Icon({
icon_name: "face-monkey-symbolic",
style_class: "system-status-icon"
});
this.actor.add_actor(this.icon);
// Prepare Menu...
// 1. Preview ON/OFF
this.menuIsEnabled = new PopupMenu.PopupSwitchMenuItem("Preview", false, {
hover: false,
reactive: true
});
this.menuIsEnabled.connect("toggled", Lang.bind(this, this._onMenuIsEnabled));
this.menu.addMenuItem(this.menuIsEnabled);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
// 2. Windows list
this.menuWindows = new PopupMenu.PopupSubMenuMenuItem("Windows");
this.menu.addMenuItem(this.menuWindows);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
// 3a. Zoom label
this.menuZoomLabel = new PopupMenu.PopupMenuItem("", {
activate: false,
reactive: false
});
this.menu.addMenuItem(this.menuZoomLabel);
// 3b, Zoom slider
this.menuZoom = new PopupSliderMenuItem(false, DEFAULT_ZOOM, MIN_ZOOM, MAX_ZOOM, 0.005); // slider step: 0.5%
this.menuZoom.connect("value-changed", Lang.bind(this, this._onZoomChanged));
this.menu.addMenuItem(this.menuZoom);
// 4. Crop Sliders
this.menuCrop = new PopupMenu.PopupSubMenuMenuItem("Crop");
this.menu.addMenuItem(this.menuCrop);
this.menuTopCrop = new PopupSliderMenuItem("Top", DEFAULT_CROP_RATIO, 0.0, MAX_CROP_RATIO);
this.menuTopCrop.connect("value-changed", Lang.bind(this, this._onTopCropChanged));
this.menuCrop.menu.addMenuItem(this.menuTopCrop);
this.menuLeftCrop = new PopupSliderMenuItem("Left", DEFAULT_CROP_RATIO, 0.0, MAX_CROP_RATIO);
this.menuLeftCrop.connect("value-changed", Lang.bind(this, this._onLeftCropChanged));
this.menuCrop.menu.addMenuItem(this.menuLeftCrop);
this.menuRightCrop = new PopupSliderMenuItem("Right", DEFAULT_CROP_RATIO, 0.0, MAX_CROP_RATIO);
this.menuRightCrop.connect("value-changed", Lang.bind(this, this._onRightCropChanged));
this.menuCrop.menu.addMenuItem(this.menuRightCrop);
this.menuBottomCrop = new PopupSliderMenuItem("Bottom", DEFAULT_CROP_RATIO, 0.0, MAX_CROP_RATIO);
this.menuBottomCrop.connect("value-changed", Lang.bind(this, this._onBottomCropChanged));
this.menuCrop.menu.addMenuItem(this.menuBottomCrop);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
// 5. Settings
this.menuSettings = new PopupMenu.PopupMenuItem("Settings");
this.menuSettings.connect("activate", Lang.bind(this, this._onSettings));
this.menu.addMenuItem(this.menuSettings);
this.actor.connect("enter-event", Lang.bind(this, this._onUserTriggered));
},
disable: function() {
this.menu.removeAll();
}
});