123 lines
3.7 KiB
JavaScript
123 lines
3.7 KiB
JavaScript
|
/* eslint camelcase: ["error", { properties: "never", allow: ["^script_"] }] */
|
||
|
|
||
|
import Clutter from 'gi://Clutter';
|
||
|
import Shell from 'gi://Shell';
|
||
|
|
||
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||
|
import {sleep} from 'resource:///org/gnome/shell/ui/scripting.js';
|
||
|
|
||
|
const {Orientation, PickMode, TextDirection} = Clutter;
|
||
|
const EPSILON = 0.1;
|
||
|
|
||
|
function defineScriptEvent(eventName, description) {
|
||
|
Shell.PerfLog.get_default().define_event(
|
||
|
`script.${eventName}`, description, 'i');
|
||
|
}
|
||
|
|
||
|
function scriptEvent(eventName, bool) {
|
||
|
Shell.PerfLog.get_default().event_i(`script.${eventName}`,
|
||
|
Number(bool));
|
||
|
}
|
||
|
|
||
|
function checkFittsiness(eventName, actor, orientation, edge) {
|
||
|
const [x, y] = actor.get_transformed_position();
|
||
|
const pickCoords = orientation === Orientation.HORIZONTAL
|
||
|
? [edge, y + Math.floor(actor.height / 2)]
|
||
|
: [x + Math.floor(actor.width / 2), edge];
|
||
|
const pickedActor = global.stage.get_actor_at_pos(
|
||
|
PickMode.REACTIVE, ...pickCoords);
|
||
|
|
||
|
scriptEvent(eventName, pickedActor === actor);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* run:
|
||
|
*/
|
||
|
export async function run() {
|
||
|
defineScriptEvent('fittsyDash', 'Dash extends to screen edge');
|
||
|
defineScriptEvent('fittsyTopBarVert', 'Top bar extends to top screen edge');
|
||
|
defineScriptEvent('fittsyTopBarHorzLTR', 'Top bar extends to left screen edge');
|
||
|
defineScriptEvent('fittsyTopBarHorzRTL', 'Top bar extends to right screen edge');
|
||
|
|
||
|
const {primaryMonitor} = Main.layoutManager;
|
||
|
const topEdge = primaryMonitor.y + EPSILON;
|
||
|
const bottomEdge = primaryMonitor.y + primaryMonitor.height - EPSILON;
|
||
|
const leftEdge = primaryMonitor.x + EPSILON;
|
||
|
const rightEdge = primaryMonitor.x + primaryMonitor.width - EPSILON;
|
||
|
|
||
|
const showApps = Main.overview.dash.showAppsButton;
|
||
|
console.debug('Checking that dash extends to bottom screen edge');
|
||
|
checkFittsiness('fittsyDash',
|
||
|
showApps, Orientation.VERTICAL, bottomEdge);
|
||
|
|
||
|
const activitiesButton = Main.panel.statusArea.activities;
|
||
|
console.debug('Checking that top bar extends to top screen edge');
|
||
|
checkFittsiness('fittsyTopBarVert',
|
||
|
activitiesButton, Orientation.VERTICAL, topEdge);
|
||
|
|
||
|
Main.panel.text_direction = TextDirection.LTR;
|
||
|
await sleep(50);
|
||
|
|
||
|
console.debug('Checking that top bar extends to left screen edge for LTR');
|
||
|
checkFittsiness('fittsyTopBarHorzLTR',
|
||
|
activitiesButton, Orientation.HORIZONTAL, leftEdge);
|
||
|
|
||
|
Main.panel.text_direction = TextDirection.RTL;
|
||
|
await sleep(50);
|
||
|
|
||
|
console.debug('Checking that top bar extends to right screen edge for RTL');
|
||
|
checkFittsiness('fittsyTopBarHorzRTL',
|
||
|
activitiesButton, Orientation.HORIZONTAL, rightEdge);
|
||
|
}
|
||
|
|
||
|
let fittsyDash = false;
|
||
|
let fittsyTopBarVert = false;
|
||
|
let fittsyTopBarHorzLTR = false;
|
||
|
let fittsyTopBarHorzRTL = false;
|
||
|
|
||
|
/**
|
||
|
* @param {number} time
|
||
|
* @param {number} num
|
||
|
*/
|
||
|
export function script_fittsyDash(time, num) {
|
||
|
fittsyDash = num !== 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {number} time
|
||
|
* @param {number} num
|
||
|
*/
|
||
|
export function script_fittsyTopBarVert(time, num) {
|
||
|
fittsyTopBarVert = num !== 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {number} time
|
||
|
* @param {number} num
|
||
|
*/
|
||
|
export function script_fittsyTopBarHorzLTR(time, num) {
|
||
|
fittsyTopBarHorzLTR = num !== 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {number} time
|
||
|
* @param {number} num
|
||
|
*/
|
||
|
export function script_fittsyTopBarHorzRTL(time, num) {
|
||
|
fittsyTopBarHorzRTL = num !== 0;
|
||
|
}
|
||
|
|
||
|
export function finish() {
|
||
|
if (!fittsyDash)
|
||
|
throw new Error('Dash does not extend to screen edge');
|
||
|
|
||
|
if (!fittsyTopBarVert)
|
||
|
throw new Error('Top bar does not extend to top screen edge');
|
||
|
|
||
|
if (!fittsyTopBarHorzLTR)
|
||
|
throw new Error('Top bar does not extend to left screen edge');
|
||
|
|
||
|
if (!fittsyTopBarHorzRTL)
|
||
|
throw new Error('Top bar does not extend to right screen edge');
|
||
|
}
|