1 Commits
56.11 ... 65.2

Author SHA1 Message Date
Artyom Zorin
bb69c75c70 Bump to version 65.2 2025-02-27 15:46:57 +00:00
41 changed files with 3713 additions and 4179 deletions

View File

@@ -20,7 +20,7 @@ INSTALLNAME = zorin-taskbar@zorinos.com
# in the metadata and in the generated zip-file.
ifdef VERSION
else
VERSION = 56
VERSION = 65
endif
ifdef TARGET

View File

@@ -22,40 +22,31 @@
*/
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const GObject = imports.gi.GObject;
const Signals = imports.signals;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Mainloop = imports.mainloop;
import Clutter from 'gi://Clutter';
import GLib from 'gi://GLib';
import Gio from 'gi://Gio';
import Graphene from 'gi://Graphene';
import GObject from 'gi://GObject';
import Mtk from 'gi://Mtk';
import Shell from 'gi://Shell';
import St from 'gi://St';
const Config = imports.misc.config;
const AppDisplay = imports.ui.appDisplay;
const AppMenu = imports.ui.appMenu;
if (Config.PACKAGE_VERSION < '42') {
const AppMenu = imports.ui.appDisplay;
}
const AppFavorites = imports.ui.appFavorites;
const Dash = imports.ui.dash;
const DND = imports.ui.dnd;
const IconGrid = imports.ui.iconGrid;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
const Workspace = imports.ui.workspace;
const BoxPointer = imports.ui.boxpointer;
const ExtensionUtils = imports.misc.extensionUtils
import * as AppDisplay from 'resource:///org/gnome/shell/ui/appDisplay.js';
import * as AppMenu from 'resource:///org/gnome/shell/ui/appMenu.js';
import * as Dash from 'resource:///org/gnome/shell/ui/dash.js';
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import * as Util from 'resource:///org/gnome/shell/misc/util.js';
import * as BoxPointer from 'resource:///org/gnome/shell/ui/boxpointer.js';
import {EventEmitter} from 'resource:///org/gnome/shell/misc/signals.js';
const Me = ExtensionUtils.getCurrentExtension();
const Utils = Me.imports.utils;
const PanelSettings = Me.imports.panelSettings;
const Taskbar = Me.imports.taskbar;
const Progress = Me.imports.progress;
const _ = imports.gettext.domain(Utils.TRANSLATION_DOMAIN).gettext;
import * as Utils from './utils.js';
import * as PanelSettings from './panelSettings.js';
import * as Taskbar from './taskbar.js';
import * as Progress from './progress.js';
import {DTP_EXTENSION, SETTINGS, DESKTOPSETTINGS, EXTENSION_PATH} from './extension.js';
import {gettext as _, ngettext} from 'resource:///org/gnome/shell/extensions/extension.js';
//timeout names
const T2 = 'mouseScrollTimeout';
@@ -73,7 +64,7 @@ const DOUBLE_CLICK_DELAY_MS = 450;
let LABEL_GAP = 5;
let MAX_INDICATORS = 4;
var DEFAULT_PADDING_SIZE = 4;
export const DEFAULT_PADDING_SIZE = 4;
let DOT_STYLE = {
DOTS: "DOTS",
@@ -113,7 +104,7 @@ let tracker = Shell.WindowTracker.get_default();
*
*/
var TaskbarAppIcon = GObject.registerClass({
export const TaskbarAppIcon = GObject.registerClass({
}, class TaskbarAppIcon extends AppDisplay.AppIcon {
_init(appInfo, panel, iconParams, previewMenu, iconAnimator) {
@@ -152,13 +143,13 @@ var TaskbarAppIcon = GObject.registerClass({
this._dot.set_width(0);
this._isGroupApps = Me.settings.get_boolean('group-apps');
this._isGroupApps = SETTINGS.get_boolean('group-apps');
this._container = new St.Widget({ style_class: 'dtp-container', layout_manager: new Clutter.BinLayout() });
this._dotsContainer = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._dtpIconContainer = new St.Widget({ layout_manager: new Clutter.BinLayout(), style: getIconContainerStyle(panel.checkIfVertical()) });
this.remove_actor(this._iconContainer);
this.remove_child(this._iconContainer);
this._dtpIconContainer.add_child(this._iconContainer);
@@ -208,7 +199,7 @@ var TaskbarAppIcon = GObject.registerClass({
this._stateChangedId = this.app.connect('windows-changed', this.onWindowsChanged.bind(this));
if (!this.window) {
if (Me.settings.get_boolean('isolate-monitors')) {
if (SETTINGS.get_boolean('isolate-monitors')) {
this._windowEnteredMonitorId = Utils.DisplayWrapper.getScreen().connect('window-entered-monitor', this.onWindowEnteredOrLeft.bind(this));
this._windowLeftMonitorId = Utils.DisplayWrapper.getScreen().connect('window-left-monitor', this.onWindowEnteredOrLeft.bind(this));
}
@@ -234,12 +225,12 @@ var TaskbarAppIcon = GObject.registerClass({
this._hoverChangeId = this.connect('notify::hover', () => this._onAppIconHoverChanged());
this._dtpSettingsSignalIds = [
Me.settings.connect('changed::panel-positions', this._settingsChangeRefresh.bind(this)),
Me.settings.connect('changed::dot-style-focused', this._settingsChangeRefresh.bind(this)),
Me.settings.connect('changed::dot-style-unfocused', this._settingsChangeRefresh.bind(this)),
Me.settings.connect('changed::panel-positions', this._settingsChangeRefresh.bind(this)),
Me.settings.connect('changed::group-apps-label-max-width', this._updateWindowTitleStyle.bind(this)),
Me.settings.connect('changed::group-apps-use-fixed-width', this._updateWindowTitleStyle.bind(this)),
SETTINGS.connect('changed::panel-positions', this._settingsChangeRefresh.bind(this)),
SETTINGS.connect('changed::dot-style-focused', this._settingsChangeRefresh.bind(this)),
SETTINGS.connect('changed::dot-style-unfocused', this._settingsChangeRefresh.bind(this)),
SETTINGS.connect('changed::panel-positions', this._settingsChangeRefresh.bind(this)),
SETTINGS.connect('changed::group-apps-label-max-width', this._updateWindowTitleStyle.bind(this)),
SETTINGS.connect('changed::group-apps-use-fixed-width', this._updateWindowTitleStyle.bind(this)),
]
this._progressIndicator = new Progress.ProgressIndicator(this, panel.progressManager);
@@ -252,8 +243,8 @@ var TaskbarAppIcon = GObject.registerClass({
}
shouldShowTooltip() {
if (!Me.settings.get_boolean('show-tooltip') ||
(!this.isLauncher && Me.settings.get_boolean("show-window-previews") &&
if (!SETTINGS.get_boolean('show-tooltip') ||
(!this.isLauncher && SETTINGS.get_boolean("show-window-previews") &&
this.getAppIconInterestingWindows().length > 0)) {
return false;
} else {
@@ -264,7 +255,7 @@ var TaskbarAppIcon = GObject.registerClass({
}
_onAppIconHoverChanged() {
if (!Me.settings.get_boolean('show-window-previews') ||
if (!SETTINGS.get_boolean('show-window-previews') ||
(!this.window && !this._nWindows)) {
return;
}
@@ -321,7 +312,7 @@ var TaskbarAppIcon = GObject.registerClass({
}
for (let i = 0; i < this._dtpSettingsSignalIds.length; ++i) {
Me.settings.disconnect(this._dtpSettingsSignalIds[i]);
SETTINGS.disconnect(this._dtpSettingsSignalIds[i]);
}
}
@@ -354,7 +345,7 @@ var TaskbarAppIcon = GObject.registerClass({
if (this.get_stage() == null)
return;
let rect = new Meta.Rectangle();
let rect = new Mtk.Rectangle();
[rect.x, rect.y] = this.get_transformed_position();
[rect.width, rect.height] = this.get_transformed_size();
@@ -366,7 +357,7 @@ var TaskbarAppIcon = GObject.registerClass({
}
_onMouseScroll(actor, event) {
let scrollAction = Me.settings.get_string('scroll-icon-action');
let scrollAction = SETTINGS.get_string('scroll-icon-action');
if (scrollAction === 'NOTHING' || (!this.window && !this._nWindows)) {
return;
@@ -410,12 +401,12 @@ var TaskbarAppIcon = GObject.registerClass({
if (!this._dashItemContainer.animatingOut)
// don't draw and trigger more animations if the icon is in the middle of
// being removed from the panel
this._drawRunningIndicator(this._focusedDots, Me.settings.get_string('dot-style-focused'), true);
this._drawRunningIndicator(this._focusedDots, SETTINGS.get_string('dot-style-focused'), true);
});
this._unfocusedDots.connect('repaint', () => {
if (!this._dashItemContainer.animatingOut)
this._drawRunningIndicator(this._unfocusedDots, Me.settings.get_string('dot-style-unfocused'), false);
this._drawRunningIndicator(this._unfocusedDots, SETTINGS.get_string('dot-style-unfocused'), false);
});
this._dotsContainer.add_child(this._unfocusedDots);
@@ -432,11 +423,11 @@ var TaskbarAppIcon = GObject.registerClass({
}
_resetDots() {
let position = PanelSettings.getPanelPosition(Me.settings, this.dtpPanel.monitor.index);
let position = PanelSettings.getPanelPosition(SETTINGS, this.dtpPanel.monitor.index);
let isHorizontalDots = position == DOT_POSITION.TOP || position == DOT_POSITION.BOTTOM;
let sizeProp = isHorizontalDots ? 'width' : 'height';
let focusedDotStyle = Me.settings.get_string('dot-style-focused');
let unfocusedDotStyle = Me.settings.get_string('dot-style-unfocused');
let focusedDotStyle = SETTINGS.get_string('dot-style-focused');
let unfocusedDotStyle = SETTINGS.get_string('dot-style-unfocused');
this._focusedIsWide = this._isWideDotStyle(focusedDotStyle);
this._unfocusedIsWide = this._isWideDotStyle(unfocusedDotStyle);
@@ -465,9 +456,9 @@ var TaskbarAppIcon = GObject.registerClass({
_updateWindowTitleStyle() {
if (this._windowTitle) {
let useFixedWidth = Me.settings.get_boolean('group-apps-use-fixed-width');
let useFixedWidth = SETTINGS.get_boolean('group-apps-use-fixed-width');
let scaleFactor = Utils.getScaleFactor();
let maxLabelWidth = Me.settings.get_int('group-apps-label-max-width') * scaleFactor;
let maxLabelWidth = SETTINGS.get_int('group-apps-label-max-width') * scaleFactor;
let variableWidth = !useFixedWidth || this.dtpPanel.checkIfVertical() || this.dtpPanel.taskbar.fullScrollView;
this._windowTitle[(maxLabelWidth > 0 ? 'show' : 'hide')]();
@@ -504,8 +495,8 @@ var TaskbarAppIcon = GObject.registerClass({
_checkIfMonitorHasFocus() {
return global.display.focus_window &&
(!Me.settings.get_boolean('multi-monitors') || // only check same monitor index if multi window is enabled.
!Me.settings.get_boolean('isolate-monitors') ||
(!SETTINGS.get_boolean('multi-monitors') || // only check same monitor index if multi window is enabled.
!SETTINGS.get_boolean('isolate-monitors') ||
global.display.focus_window.get_monitor() === this.dtpPanel.monitor.index);
}
@@ -540,7 +531,7 @@ var TaskbarAppIcon = GObject.registerClass({
// We want to keep the item hovered while the menu is up
this._menu.blockSourceEvents = true;
Main.uiGroup.add_actor(this._menu.actor);
Main.uiGroup.add_child(this._menu.actor);
this._menuManager.addMenu(this._menu);
}
this._menu.updateQuitText();
@@ -561,7 +552,7 @@ var TaskbarAppIcon = GObject.registerClass({
_onOverviewWindowDragEnd(windowTracker) {
this._timeoutsHandler.add([T4, 0, () => {
if (Me.settings.get_boolean('isolate-workspaces'))
if (SETTINGS.get_boolean('isolate-workspaces'))
this._updateWindows()
this._displayProperIndicator()
@@ -578,7 +569,7 @@ var TaskbarAppIcon = GObject.registerClass({
_displayProperIndicator() {
let isFocused = this._isFocusedWindow();
let position = PanelSettings.getPanelPosition(Me.settings, this.dtpPanel.monitor.index);
let position = PanelSettings.getPanelPosition(SETTINGS, this.dtpPanel.monitor.index);
let isHorizontalDots = position == DOT_POSITION.TOP || position == DOT_POSITION.BOTTOM;
this._setIconStyle(isFocused);
@@ -713,20 +704,23 @@ var TaskbarAppIcon = GObject.registerClass({
if (button && button == 2 ) {
if (modifiers & Clutter.ModifierType.SHIFT_MASK)
buttonAction = Me.settings.get_string('shift-middle-click-action');
buttonAction = SETTINGS.get_string('shift-middle-click-action');
else
buttonAction = Me.settings.get_string('middle-click-action');
buttonAction = SETTINGS.get_string('middle-click-action');
}
else if (button && button == 1) {
// fixed issue #1676 by checking for button 0 or 1 to also handle touchscreen
// input, probably not the proper fix as i'm not aware button 0 should exist
// but from using this fix for months it seems to not create any issues
else if (button === 0 || button === 1) {
let now = global.get_current_time()
doubleClick = now - this.lastClick < DOUBLE_CLICK_DELAY_MS
this.lastClick = now
if (modifiers & Clutter.ModifierType.SHIFT_MASK)
buttonAction = Me.settings.get_string('shift-click-action');
buttonAction = SETTINGS.get_string('shift-click-action');
else
buttonAction = Me.settings.get_string('click-action');
buttonAction = SETTINGS.get_string('click-action');
}
let closePreview = () => this._previewMenu.close(true);
@@ -918,7 +912,7 @@ var TaskbarAppIcon = GObject.registerClass({
_getRunningIndicatorColor(isFocused) {
let color;
const fallbackColor = new Clutter.Color({ red: 82, green: 148, blue: 226, alpha: 255 });
const fallbackColor = new Utils.ColorUtils.Color({ red: 82, green: 148, blue: 226, alpha: 255 });
// Re-use the style - background color, and border width and color -
// of the default dot
@@ -938,7 +932,7 @@ var TaskbarAppIcon = GObject.registerClass({
return;
}
let position = PanelSettings.getPanelPosition(Me.settings, this.dtpPanel.monitor.index);
let position = PanelSettings.getPanelPosition(SETTINGS, this.dtpPanel.monitor.index);
let isHorizontalDots = position == DOT_POSITION.TOP || position == DOT_POSITION.BOTTOM;
let bodyColor = this._getRunningIndicatorColor(isFocused);
let [areaWidth, areaHeight] = area.get_surface_size();
@@ -964,29 +958,29 @@ var TaskbarAppIcon = GObject.registerClass({
if (type == DOT_STYLE.SOLID || type == DOT_STYLE.METRO) {
if (type == DOT_STYLE.SOLID || n <= 1) {
cr.translate(startX, startY);
Clutter.cairo_set_source_color(cr, bodyColor);
cr.setSourceColor(bodyColor);
cr.newSubPath();
cr.rectangle.apply(cr, [0, 0].concat(isHorizontalDots ? [areaSize, size] : [size, areaSize]));
cr.fill();
} else {
let blackenedLength = (1 / 48) * areaSize; // need to scale with the SVG for the stacked highlight
let darkenedLength = isFocused ? (2 / 48) * areaSize : (10 / 48) * areaSize;
let blackenedColor = bodyColor.shade(.3);
let darkenedColor = bodyColor.shade(.7);
let blackenedColor = new Utils.ColorUtils.Color({ red: bodyColor.red * .3, green: bodyColor.green * .3, blue: bodyColor.blue * .3, alpha: bodyColor.alpha });
let darkenedColor = new Utils.ColorUtils.Color({ red: bodyColor.red * .7, green: bodyColor.green * .7, blue: bodyColor.blue * .7, alpha: bodyColor.alpha });
let solidDarkLength = areaSize - darkenedLength;
let solidLength = solidDarkLength - blackenedLength;
cr.translate(startX, startY);
Clutter.cairo_set_source_color(cr, bodyColor);
cr.setSourceColor(bodyColor);
cr.newSubPath();
cr.rectangle.apply(cr, [0, 0].concat(isHorizontalDots ? [solidLength, size] : [size, solidLength]));
cr.fill();
Clutter.cairo_set_source_color(cr, blackenedColor);
cr.setSourceColor(blackenedColor);
cr.newSubPath();
cr.rectangle.apply(cr, isHorizontalDots ? [solidLength, 0, 1, size] : [0, solidLength, size, 1]);
cr.fill();
Clutter.cairo_set_source_color(cr, darkenedColor);
cr.setSourceColor(darkenedColor);
cr.newSubPath();
cr.rectangle.apply(cr, isHorizontalDots ? [solidDarkLength, 0, darkenedLength, size] : [0, solidDarkLength, size, darkenedLength]);
cr.fill();
@@ -1062,7 +1056,7 @@ var TaskbarAppIcon = GObject.registerClass({
translate();
Clutter.cairo_set_source_color(cr, bodyColor);
cr.setSourceColor(bodyColor);
preDraw();
for (let i = 0; i < n; i++) {
cr.newSubPath();
@@ -1141,7 +1135,7 @@ var TaskbarAppIcon = GObject.registerClass({
});
TaskbarAppIcon.prototype.scaleAndFade = TaskbarAppIcon.prototype.undoScaleAndFade = () => {};
function minimizeWindow(app, param, monitor){
export function minimizeWindow(app, param, monitor){
// Param true make all app windows minimize
let windows = getInterestingWindows(app, monitor);
let current_workspace = Utils.DisplayWrapper.getWorkspaceManager().get_active_workspace();
@@ -1161,7 +1155,7 @@ function minimizeWindow(app, param, monitor){
* By default only non minimized windows are activated.
* This activates all windows in the current workspace.
*/
function activateAllWindows(app, monitor){
export function activateAllWindows(app, monitor){
// First activate first window so workspace is switched if needed,
// then activate all other app windows in the current workspace.
@@ -1180,13 +1174,13 @@ function activateAllWindows(app, monitor){
}
}
function activateFirstWindow(app, monitor){
export function activateFirstWindow(app, monitor){
let windows = getInterestingWindows(app, monitor);
Main.activateWindow(windows[0]);
}
function cycleThroughWindows(app, reversed, shouldMinimize, monitor) {
export function cycleThroughWindows(app, reversed, shouldMinimize, monitor) {
// Store for a little amount of time last clicked app and its windows
// since the order changes upon window interaction
let MEMORY_TIME=3000;
@@ -1197,9 +1191,10 @@ function cycleThroughWindows(app, reversed, shouldMinimize, monitor) {
app_windows.push("MINIMIZE");
if (recentlyClickedAppLoopId > 0)
Mainloop.source_remove(recentlyClickedAppLoopId);
GLib.Source.remove(recentlyClickedAppLoopId);
recentlyClickedAppLoopId = Mainloop.timeout_add(MEMORY_TIME, resetRecentlyClickedApp);
recentlyClickedAppLoopId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
MEMORY_TIME, resetRecentlyClickedApp);
// If there isn't already a list of windows for the current app,
// or the stored list is outdated, use the current windows list.
@@ -1227,9 +1222,9 @@ function cycleThroughWindows(app, reversed, shouldMinimize, monitor) {
Main.activateWindow(recentlyClickedAppWindows[index]);
}
function resetRecentlyClickedApp() {
export function resetRecentlyClickedApp() {
if (recentlyClickedAppLoopId > 0)
Mainloop.source_remove(recentlyClickedAppLoopId);
GLib.Source.remove(recentlyClickedAppLoopId);
recentlyClickedAppLoopId=0;
recentlyClickedApp =null;
@@ -1240,7 +1235,7 @@ function resetRecentlyClickedApp() {
return false;
}
function closeAllWindows(app, monitor) {
export function closeAllWindows(app, monitor) {
let windows = getInterestingWindows(app, monitor);
for (let i = 0; i < windows.length; i++)
windows[i].delete(global.get_current_time());
@@ -1248,7 +1243,7 @@ function closeAllWindows(app, monitor) {
// Filter out unnecessary windows, for instance
// nautilus desktop window.
function getInterestingWindows(app, monitor, isolateMonitors) {
export function getInterestingWindows(app, monitor, isolateMonitors) {
let windows = (
app ?
app.get_windows() :
@@ -1257,13 +1252,13 @@ function getInterestingWindows(app, monitor, isolateMonitors) {
// When using workspace or monitor isolation, we filter out windows
// that are not in the current workspace or on the same monitor as the appicon
if (Me.settings.get_boolean('isolate-workspaces'))
if (SETTINGS.get_boolean('isolate-workspaces'))
windows = windows.filter(function(w) {
return w.get_workspace() &&
w.get_workspace() == Utils.getCurrentWorkspace();
});
if (monitor && Me.settings.get_boolean('multi-monitors') && (isolateMonitors || Me.settings.get_boolean('isolate-monitors'))) {
if (monitor && SETTINGS.get_boolean('multi-monitors') && (isolateMonitors || SETTINGS.get_boolean('isolate-monitors'))) {
windows = windows.filter(function(w) {
return w.get_monitor() == monitor.index;
});
@@ -1272,17 +1267,17 @@ function getInterestingWindows(app, monitor, isolateMonitors) {
return windows;
}
function cssHexTocssRgba(cssHex, opacity) {
var bigint = parseInt(cssHex.slice(1), 16);
var r = (bigint >> 16) & 255;
var g = (bigint >> 8) & 255;
var b = bigint & 255;
export function cssHexTocssRgba(cssHex, opacity) {
let bigint = parseInt(cssHex.slice(1), 16);
let r = (bigint >> 16) & 255;
let g = (bigint >> 8) & 255;
let b = bigint & 255;
return 'rgba(' + [r, g, b].join(',') + ',' + opacity + ')';
}
function getIconPadding(monitorIndex) {
let panelSize = PanelSettings.getPanelSize(Me.settings, monitorIndex);
export function getIconPadding(monitorIndex) {
let panelSize = PanelSettings.getPanelSize(SETTINGS, monitorIndex);
let padding = Taskbar.APPICON_PADDING;
let availSize = panelSize - Taskbar.MIN_ICON_SIZE - panelSize % 2;
@@ -1302,7 +1297,7 @@ function getIconPadding(monitorIndex) {
* (https://github.com/deuill/shell-extension-quitfromdash)
*/
class TaskbarSecondaryMenu extends AppMenu.AppMenu {
export class TaskbarSecondaryMenu extends AppMenu.AppMenu {
constructor(source, side) {
super(source, side);
@@ -1324,7 +1319,7 @@ function getIconPadding(monitorIndex) {
if (count == 1)
quitFromTaskbarMenuText = _("Quit");
else
quitFromTaskbarMenuText = _("Quit") + ' ' + count + ' ' + _("Windows");
quitFromTaskbarMenuText = ngettext('Quit %d Window', 'Quit %d Windows', count).format(count);
this._quitItem.label.set_text(quitFromTaskbarMenuText);
}
@@ -1339,16 +1334,19 @@ function getIconPadding(monitorIndex) {
if (windows.length == this._app.get_windows().length)
this._app.request_quit()
GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
windows.forEach((w) => !!w.get_compositor_private() && w.delete(time++));
Mainloop.idle_add(() =>
windows.forEach((w) => !!w.get_compositor_private() && w.delete(time++)))
return GLib.SOURCE_REMOVE;
});
}
};
/**
* This function is used for extendDashItemContainer
*/
function ItemShowLabel() {
export function ItemShowLabel() {
if (!this._labelText)
return;
@@ -1411,7 +1409,7 @@ function ItemShowLabel() {
time: duration,
transition: 'easeOutQuad',
});
};
}
/**
* A wrapper class around the ShowAppsIcon class.
@@ -1425,9 +1423,11 @@ function ItemShowLabel() {
* use of this class in place of the original showAppsButton.
*
*/
var ShowAppsIconWrapper = class {
export const ShowAppsIconWrapper = class extends EventEmitter {
constructor(dtpPanel) {
super();
this.realShowAppsIcon = new Dash.ShowAppsIcon();
/* the variable equivalent to toggleButton has a different name in the appIcon class
@@ -1520,7 +1520,7 @@ function ItemShowLabel() {
// We want to keep the item hovered while the menu is up
this._menu.blockSourceEvents = true;
Main.uiGroup.add_actor(this._menu.actor);
Main.uiGroup.add_child(this._menu.actor);
this._menuManager.addMenu(this._menu);
}
}
@@ -1541,7 +1541,7 @@ function ItemShowLabel() {
}
shouldShowTooltip() {
return Me.settings.get_boolean('show-tooltip') &&
return SETTINGS.get_boolean('show-tooltip') &&
(this.actor.hover && (!this._menu || !this._menu.isOpen));
}
@@ -1549,12 +1549,11 @@ function ItemShowLabel() {
this.realShowAppsIcon.destroy();
}
};
Signals.addSignalMethods(ShowAppsIconWrapper.prototype);
/**
* A menu for the showAppsIcon
*/
var MyShowAppsIconMenu = class extends PopupMenu.PopupMenu {
export const MyShowAppsIconMenu = class extends PopupMenu.PopupMenu {
constructor(actor, dtpPanel) {
super(actor, 0, dtpPanel.getPosition());
@@ -1590,19 +1589,19 @@ var MyShowAppsIconMenu = class extends PopupMenu.PopupMenu {
});
this._appendList(
Me.settings.get_strv('panel-context-menu-commands'),
Me.settings.get_strv('panel-context-menu-titles')
SETTINGS.get_strv('panel-context-menu-commands'),
SETTINGS.get_strv('panel-context-menu-titles')
)
this._appendSeparator();
let lockTaskbarMenuItem = this._appendMenuItem(Me.settings.get_boolean('taskbar-locked') ? _('Unlock taskbar') : _('Lock taskbar'));
let lockTaskbarMenuItem = this._appendMenuItem(SETTINGS.get_boolean('taskbar-locked') ? _('Unlock taskbar') : _('Lock taskbar'));
lockTaskbarMenuItem.connect('activate', () => {
Me.settings.set_boolean('taskbar-locked', !Me.settings.get_boolean('taskbar-locked'));
SETTINGS.set_boolean('taskbar-locked', !SETTINGS.get_boolean('taskbar-locked'));
});
let settingsMenuItem = this._appendMenuItem(_('Taskbar Settings'));
settingsMenuItem.connect('activate', () => ExtensionUtils.openPrefs())
settingsMenuItem.connect('activate', () => DTP_EXTENSION.openPreferences())
if(this.sourceActor == Main.layoutManager.dummyCursor) {
this._appendSeparator();
@@ -1614,7 +1613,7 @@ var MyShowAppsIconMenu = class extends PopupMenu.PopupMenu {
// Only add menu entries for commands that exist in path
_appendItem(info) {
if (Utils.checkIfCommandExists(info.cmd[0])) {
if (GLib.find_program_in_path(info.cmd[0])) {
let item = this._appendMenuItem(_(info.title));
item.connect('activate', function() {
@@ -1632,8 +1631,8 @@ var MyShowAppsIconMenu = class extends PopupMenu.PopupMenu {
return;
}
for (var entry = 0; entry < commandList.length; entry++) {
_appendItem({
for (let entry = 0; entry < commandList.length; entry++) {
this._appendItem({
title: titleList[entry],
cmd: commandList[entry].split(' ')
});
@@ -1654,10 +1653,10 @@ var MyShowAppsIconMenu = class extends PopupMenu.PopupMenu {
};
var getIconContainerStyle = function(isVertical) {
export const getIconContainerStyle = function(isVertical) {
let style = 'padding: ';
if (Me.settings.get_boolean('group-apps')) {
if (SETTINGS.get_boolean('group-apps')) {
style += (isVertical ? '0;' : '0 ' + DEFAULT_PADDING_SIZE + 'px;');
} else {
style += (isVertical ? '' : '0 ') + DEFAULT_PADDING_SIZE + 'px;';

19
debian/changelog vendored
View File

@@ -1,3 +1,22 @@
gnome-shell-extension-zorin-taskbar (65.2) noble; urgency=medium
* Separated floating rounded theme from intellihide as an independent
styling option
-- Artyom Zorin <azorin@zoringroup.com> Thu, 27 Feb 2025 13:57:03 +0000
gnome-shell-extension-zorin-taskbar (65.1) noble; urgency=medium
* Fixed various bugs
-- Artyom Zorin <azorin@zoringroup.com> Wed, 26 Feb 2025 12:20:34 +0000
gnome-shell-extension-zorin-taskbar (65) noble; urgency=medium
* Re-based on upstream version 65
-- Artyom Zorin <azorin@zoringroup.com> Tue, 25 Feb 2025 22:29:43 +0000
gnome-shell-extension-zorin-taskbar (56.11) jammy; urgency=medium
* Updated French translations

4
debian/control vendored
View File

@@ -8,6 +8,6 @@ Rules-Requires-Root: no
Package: gnome-shell-extension-zorin-taskbar
Architecture: all
Depends: ${misc:Depends}, gnome-shell (>= 42), gnome-shell (<< 45~)
Depends: ${misc:Depends}, gnome-shell (>= 46), gnome-shell (<< 48~)
Description: Zorin Taskbar extension
A taskbar extension for the Zorin Desktop environment.
A taskbar extension for the Zorin OS desktop.

4
debian/copyright vendored
View File

@@ -2,8 +2,8 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: gnome-shell-extension-zorin-taskbar
Files: *
Copyright: 2016-2021, Jason DeRose (https://github.com/jderose9)
2016-2023, Zorin OS Technologies Ltd.
Copyright: 2016-2025, Jason DeRose (https://github.com/jderose9)
2016-2025, Zorin OS Technologies Ltd.
License: GPL-2+
Files: po/cs.po

View File

@@ -55,16 +55,22 @@
*
*******************************************************************************/
const GLib = imports.gi.GLib;
const Main = imports.ui.main;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
import GLib from 'gi://GLib';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as ExtensionUtils from 'resource:///org/gnome/shell/misc/extensionUtils.js';
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
const IDENTIFIER_UUID = "130cbc66-235c-4bd6-8571-98d2d8bba5e2";
var DesktopIconsUsableAreaClass = class {
export class DesktopIconsUsableAreaClass {
_checkIfExtensionIsEnabled(extension) {
return (extension?.state === ExtensionUtils.ExtensionState.ENABLED) ||
(extension?.state === ExtensionUtils.ExtensionState.ACTIVE);
}
constructor() {
const Me = Extension.lookupByURL(import.meta.url);
this._UUID = Me.uuid;
this._extensionManager = Main.extensionManager;
this._timedMarginsID = 0;
this._margins = {};
@@ -73,7 +79,7 @@ var DesktopIconsUsableAreaClass = class {
return;
// If an extension is being enabled and lacks the DesktopIconsUsableArea object, we can avoid launching a refresh
if (extension.state === ExtensionUtils.ExtensionState.ENABLED) {
if (this._checkIfExtensionIsEnabled(extension)) {
this._sendMarginsToExtension(extension);
return;
}
@@ -149,11 +155,11 @@ var DesktopIconsUsableAreaClass = class {
_sendMarginsToExtension(extension) {
// check that the extension is an extension that has the logic to accept
// working margins
if (extension?.state !== ExtensionUtils.ExtensionState.ENABLED)
if (!this._checkIfExtensionIsEnabled(extension))
return;
const usableArea = extension?.stateObj?.DesktopIconsUsableArea;
if (usableArea?.uuid === IDENTIFIER_UUID)
usableArea.setMarginsForExtension(Me.uuid, this._margins);
if (usableArea?.uuid === IDENTIFIER_UUID)
usableArea.setMarginsForExtension(this._UUID, this._margins);
}
}

View File

@@ -17,130 +17,116 @@
*/
const Main = imports.ui.main;
const Meta = imports.gi.Meta;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const WindowManager = imports.ui.windowManager;
const ExtensionUtils = imports.misc.extensionUtils;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
import Gio from 'gi://Gio';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {EventEmitter} from 'resource:///org/gnome/shell/misc/signals.js';
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
import * as PanelManager from './panelManager.js';
import * as AppIcons from './appIcons.js';
const Me = ExtensionUtils.getCurrentExtension();
const { PanelManager } = Me.imports.panelManager;
const Utils = Me.imports.utils;
const AppIcons = Me.imports.appIcons;
const ZORIN_DASH_UUID = 'zorin-dash@zorinos.com';
let panelManager;
let extensionChangedHandler;
let startupCompleteHandler;
let disabledZorinDash;
let extensionSystem = (Main.extensionManager || imports.ui.extensionSystem);
let extensionSystem = Main.extensionManager;
function init() {
this._realHasOverview = Main.sessionMode.hasOverview;
export let DTP_EXTENSION = null;
export let SETTINGS = null;
export let DESKTOPSETTINGS = null;
export let TERMINALSETTINGS = null;
export let PERSISTENTSTORAGE = null;
export let EXTENSION_UUID = null;
export let EXTENSION_PATH = null;
ExtensionUtils.initTranslations(Utils.TRANSLATION_DOMAIN);
//create an object that persists until gnome-shell is restarted, even if the extension is disabled
Me.persistentStorage = {};
}
export default class ZorinTaskbarExtension extends Extension {
constructor(metadata) {
super(metadata);
function enable() {
// The Zorin Dash extension might get enabled after this extension
extensionChangedHandler = extensionSystem.connect('extension-state-changed', (data, extension) => {
if (extension.uuid === ZORIN_DASH_UUID && extension.state === 1) {
_enable();
}
});
//create a global object that can emit signals and conveniently expose functionalities to other extensions
global.zorinTaskbar = {};
Signals.addSignalMethods(global.zorinTaskbar);
_enable();
}
function _enable() {
let zorinDash = Main.extensionManager ?
Main.extensionManager.lookup(ZORIN_DASH_UUID) : //gnome-shell >= 3.33.4
ExtensionUtils.extensions[ZORIN_DASH_UUID];
if (zorinDash && zorinDash.stateObj && zorinDash.stateObj.dockManager) {
// Disable Zorin Dash
let extensionOrder = (extensionSystem.extensionOrder || extensionSystem._extensionOrder);
Utils.getStageTheme().get_theme().unload_stylesheet(zorinDash.stylesheet);
zorinDash.stateObj.disable();
disabledZorinDash = true;
zorinDash.state = 2; //ExtensionState.DISABLED
extensionOrder.splice(extensionOrder.indexOf(ZORIN_DASH_UUID), 1);
//reset to prevent conflicts with the Zorin Dash
if (panelManager) {
disable(true);
}
this._realHasOverview = Main.sessionMode.hasOverview;
//create an object that persists until gnome-shell is restarted, even if the extension is disabled
PERSISTENTSTORAGE = {};
}
if (panelManager) return; //already initialized
enable() {
DTP_EXTENSION = this;
Me.settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.zorin-taskbar');
Me.desktopSettings = ExtensionUtils.getSettings('org.gnome.desktop.interface');
// The Zorin Dash extension might get enabled after this extension
extensionChangedHandler = extensionSystem.connect('extension-state-changed', (data, extension) => {
if (extension.uuid === ZORIN_DASH_UUID && extension.state === 1) {
_enable(this);
}
});
//create a global object that can emit signals and conveniently expose functionalities to other extensions
global.zorinTaskbar = new EventEmitter();
_enable(this);
}
disable(reset = false) {
panelManager.disable();
DTP_EXTENSION = null;
SETTINGS = null;
DESKTOPSETTINGS = null;
TERMINALSETTINGS = null;
panelManager = null;
if (!reset) {
extensionSystem.disconnect(extensionChangedHandler);
if (disabledZorinDash) {
disabledZorinDash = false;
extensionSystem.enableExtension(ZORIN_DASH_UUID);
}
delete global.zorinTaskbar;
AppIcons.resetRecentlyClickedApp();
}
if (startupCompleteHandler) {
Main.layoutManager.disconnect(startupCompleteHandler);
startupCompleteHandler = null;
}
Main.sessionMode.hasOverview = this._realHasOverview;
}
}
function _enable(extension) {
let enabled = global.settings.get_strv('enabled-extensions');
if (enabled?.indexOf(ZORIN_DASH_UUID) >= 0) {
disabledZorinDash = true;
extensionSystem.disableExtension(ZORIN_DASH_UUID);
}
if (panelManager)
return panelManager.toggleDash(); // already initialized but Zorin Dash restored the original dash on disable
SETTINGS = extension.getSettings('org.gnome.shell.extensions.zorin-taskbar');
DESKTOPSETTINGS = new Gio.Settings({schema_id: 'org.gnome.desktop.interface'});
TERMINALSETTINGS = new Gio.Settings({schema_id: 'org.gnome.desktop.default-applications.terminal'})
EXTENSION_UUID = extension.uuid
EXTENSION_PATH = extension.path
Main.layoutManager.startInOverview = false;
if (Main.layoutManager._startingUp) {
Main.sessionMode.hasOverview = false;
Main.layoutManager.connect('startup-complete', () => {
Main.sessionMode.hasOverview = this._realHasOverview
startupCompleteHandler = Main.layoutManager.connect('startup-complete', () => {
Main.sessionMode.hasOverview = extension._realHasOverview
});
}
panelManager = new PanelManager();
panelManager = new PanelManager.PanelManager();
panelManager.enable();
Utils.removeKeybinding('open-application-menu');
Utils.addKeybinding(
'open-application-menu',
new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }),
() => {
panelManager.primaryPanel.taskbar.popupFocusedAppSecondaryMenu();
},
Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP
);
}
function disable(reset) {
panelManager.disable();
Me.settings.run_dispose();
Me.desktopSettings.run_dispose();
delete Me.settings;
panelManager = null;
Utils.removeKeybinding('open-application-menu');
Utils.addKeybinding(
'open-application-menu',
new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }),
Main.wm._toggleAppMenu.bind(Main.wm),
Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP
);
if (!reset) {
extensionSystem.disconnect(extensionChangedHandler);
delete global.zorinTaskbar;
// Re-enable Zorin Dash if it was disabled by dash to panel
if (disabledZorinDash && Main.sessionMode.allowExtensions) {
(extensionSystem._callExtensionEnable || extensionSystem.enableExtension).call(extensionSystem, ZORIN_DASH_UUID);
}
AppIcons.resetRecentlyClickedApp();
}
Main.sessionMode.hasOverview = this._realHasOverview;
}

View File

@@ -18,21 +18,20 @@
* This file is based on code from the Dash to Panel extension
*/
const Clutter = imports.gi.Clutter;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
import Clutter from 'gi://Clutter';
import Meta from 'gi://Meta';
import Shell from 'gi://Shell';
import St from 'gi://St';
var GrabHelper = imports.ui.grabHelper;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
const OverviewControls = imports.ui.overviewControls;
const PointerWatcher = imports.ui.pointerWatcher;
import * as GrabHelper from 'resource:///org/gnome/shell/ui/grabHelper.js';
import * as Layout from 'resource:///org/gnome/shell/ui/layout.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as OverviewControls from 'resource:///org/gnome/shell/ui/overviewControls.js';
import * as PointerWatcher from 'resource:///org/gnome/shell/ui/pointerWatcher.js';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Panel = Me.imports.panel;
const Proximity = Me.imports.proximity;
const Utils = Me.imports.utils;
import * as Proximity from './proximity.js';
import * as Utils from './utils.js';
import {SETTINGS} from './extension.js';
var INTELLIHIDE_PRESSURE_THRESHOLD = 100;
var INTELLIHIDE_PRESSURE_TIME = 1000;
@@ -50,17 +49,16 @@ const MIN_UPDATE_MS = 250;
const T1 = 'checkGrabTimeout';
const T2 = 'limitUpdateTimeout';
const T3 = 'postAnimateTimeout';
const T4 = 'panelBoxClipTimeout';
var SIDE_CONTROLS_ANIMATION_TIME = OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / (OverviewControls.SIDE_CONTROLS_ANIMATION_TIME > 1 ? 1000 : 1);
const SIDE_CONTROLS_ANIMATION_TIME = OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / (OverviewControls.SIDE_CONTROLS_ANIMATION_TIME > 1 ? 1000 : 1);
var Hold = {
export const Hold = {
NONE: 0,
TEMPORARY: 1,
PERMANENT: 2
};
var Intellihide = class {
export const Intellihide = class {
constructor(dtpPanel) {
this._dtpPanel = dtpPanel;
@@ -72,8 +70,8 @@ var Intellihide = class {
this._signalsHandler = new Utils.GlobalSignalsHandler();
this._timeoutsHandler = new Utils.TimeoutsHandler();
this._intellihideChangedId = Me.settings.connect('changed::intellihide', () => this._changeEnabledStatus());
this._intellihideOnlySecondaryChangedId = Me.settings.connect('changed::intellihide-only-secondary', () => this._changeEnabledStatus());
this._intellihideChangedId = SETTINGS.connect('changed::intellihide', () => this._changeEnabledStatus());
this._intellihideOnlySecondaryChangedId = SETTINGS.connect('changed::intellihide-only-secondary', () => this._changeEnabledStatus());
this.enabled = false;
this._changeEnabledStatus();
@@ -94,11 +92,11 @@ var Intellihide = class {
this._setTrackPanel(true);
this._bindGeneralSignals();
if (Me.settings.get_boolean('intellihide-hide-from-windows')) {
if (SETTINGS.get_boolean('intellihide-hide-from-windows')) {
this._proximityWatchId = this._proximityManager.createWatch(
this._panelBox.get_parent(),
this._dtpPanel.monitor.index,
Proximity.Mode[Me.settings.get_string('intellihide-behaviour')],
Proximity.Mode[SETTINGS.get_string('intellihide-behaviour')],
0, 0,
overlap => {
this._windowOverlap = overlap;
@@ -109,7 +107,6 @@ var Intellihide = class {
this._setRevealMechanism();
this._queueUpdatePanelPosition();
this._toggleFloatingRoundedTheme();
}
disable(reset) {
@@ -127,17 +124,11 @@ var Intellihide = class {
this._revealPanel(!reset);
this.enabled = false;
if (this._panelBox.has_style_class_name('floating')) {
this._panelBox.remove_style_class_name('floating');
this._resetPanelGeometry();
}
}
destroy() {
Me.settings.disconnect(this._intellihideChangedId);
Me.settings.disconnect(this._intellihideOnlySecondaryChangedId);
SETTINGS.disconnect(this._intellihideChangedId);
SETTINGS.disconnect(this._intellihideOnlySecondaryChangedId);
if (this.enabled) {
this.disable();
@@ -169,27 +160,9 @@ var Intellihide = class {
this.enable();
}
_toggleFloatingRoundedTheme() {
if (Me.settings.get_boolean('intellihide-floating-rounded-theme')) {
if (!this._panelBox.has_style_class_name('floating'))
this._panelBox.add_style_class_name('floating');
} else {
if (this._panelBox.has_style_class_name('floating'))
this._panelBox.remove_style_class_name('floating');
}
this._resetPanelGeometry();
}
_resetPanelGeometry() {
this._dtpPanel.geom = this._dtpPanel.getGeometry();
this._dtpPanel._setPanelPosition();
this._dtpPanel.dynamicTransparency.updateExternalStyle();
}
_changeEnabledStatus() {
let intellihide = Me.settings.get_boolean('intellihide');
let onlySecondary = Me.settings.get_boolean('intellihide-only-secondary');
let intellihide = SETTINGS.get_boolean('intellihide');
let onlySecondary = SETTINGS.get_boolean('intellihide-only-secondary');
let enabled = intellihide && !(this._dtpPanel.isPrimary && onlySecondary);
if (this.enabled !== enabled) {
@@ -208,7 +181,7 @@ var Intellihide = class {
}
],
[
Me.settings,
SETTINGS,
[
'changed::intellihide-use-pressure',
'changed::intellihide-hide-from-windows',
@@ -216,13 +189,6 @@ var Intellihide = class {
],
() => this.reset()
],
[
Me.settings,
[
'changed::intellihide-floating-rounded-theme'
],
() => this._toggleFloatingRoundedTheme()
],
[
this._panelBox,
'notify::hover',
@@ -273,7 +239,7 @@ var Intellihide = class {
_setRevealMechanism() {
let barriers = Meta.BackendCapabilities.BARRIERS
if ((global.backend.capabilities & barriers) === barriers && Me.settings.get_boolean('intellihide-use-pressure')) {
if ((global.backend.capabilities & barriers) === barriers && SETTINGS.get_boolean('intellihide-use-pressure')) {
this._edgeBarrier = this._createBarrier();
this._pressureBarrier = new Layout.PressureBarrier(
INTELLIHIDE_PRESSURE_THRESHOLD,
@@ -373,13 +339,13 @@ var Intellihide = class {
//the user is trying to reveal the panel
if (this._monitor.inFullscreen && !mouseBtnIsPressed) {
return Me.settings.get_boolean('intellihide-show-in-fullscreen');
return SETTINGS.get_boolean('intellihide-show-in-fullscreen');
}
return !mouseBtnIsPressed;
}
if (!Me.settings.get_boolean('intellihide-hide-from-windows')) {
if (!SETTINGS.get_boolean('intellihide-hide-from-windows')) {
return this._panelBox.hover;
}

View File

@@ -1,9 +1,9 @@
{
"extension-id": "zorin-taskbar",
"uuid": "zorin-taskbar@zorinos.com",
"name": "Zorin Taskbar",
"description": "A taskbar extension for the Zorin Desktop environment.",
"shell-version": [ "42", "43", "44" ],
"gettext-domain": "zorin-taskbar",
"version": 56
"extension-id": "zorin-taskbar",
"uuid": "zorin-taskbar@zorinos.com",
"name": "Zorin Taskbar",
"description": "A taskbar extension for the Zorin OS desktop.",
"shell-version": [ "46", "47" ],
"gettext-domain": "zorin-taskbar",
"version": 65
}

View File

@@ -20,24 +20,18 @@
* Some code was also adapted from the upstream Gnome Shell source code.
*/
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Intellihide = Me.imports.intellihide;
const Utils = Me.imports.utils;
import * as Intellihide from './intellihide.js';
import * as Utils from './utils.js';
const Clutter = imports.gi.Clutter;
const Main = imports.ui.main;
const Shell = imports.gi.Shell;
const Gtk = imports.gi.Gtk;
const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio;
const Mainloop = imports.mainloop;
const IconGrid = imports.ui.iconGrid;
const { OverviewActor } = imports.ui.overview;
const Workspace = imports.ui.workspace;
const St = imports.gi.St;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
const Meta = imports.gi.Meta;
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import Shell from 'gi://Shell';
import St from 'gi://St';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as WindowManager from 'resource:///org/gnome/shell/ui/windowManager.js';
import {WindowPreview} from 'resource:///org/gnome/shell/ui/windowPreview.js';
import {InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
import {SETTINGS} from './extension.js';
const GS_HOTKEYS_KEY = 'switch-to-application-';
const OVERLAY_TIMEOUT = 750;
@@ -52,9 +46,10 @@ const LABEL_MARGIN = 60;
const T1 = 'swipeEndTimeout';
const T2 = 'numberOverlayTimeout';
var Overview = class {
export const Overview = class {
constructor() {
this._injectionManager = new InjectionManager();
this._numHotkeys = 10;
}
@@ -70,15 +65,15 @@ var Overview = class {
this._optionalHotKeys();
this._optionalNumberOverlay();
this._toggleDash();
this._adaptAlloc(true);
this.toggleDash();
this._adaptAlloc();
this._signalsHandler.add([
Me.settings,
SETTINGS,
[
'changed::panel-sizes'
],
() => this._toggleDash()
() => this.toggleDash()
]);
}
@@ -86,16 +81,16 @@ var Overview = class {
this._signalsHandler.destroy();
this._injectionsHandler.destroy();
this._timeoutsHandler.destroy();
this._injectionManager.clear();
this._toggleDash(true);
this._adaptAlloc();
this.toggleDash(true);
// Remove key bindings
this._disableHotKeys();
this._disableExtraShortcut();
}
_toggleDash(visible) {
toggleDash(visible) {
if (visible === undefined) {
visible = false;
}
@@ -108,41 +103,39 @@ var Overview = class {
overviewControls.dash.set_height(height);
}
_adaptAlloc(enable) {
_adaptAlloc() {
let overviewControls = Main.overview._overview._controls
let proto = Object.getPrototypeOf(overviewControls)
let allocFunc = null
if (enable)
allocFunc = (box) => {
let focusedPanel = this._panel.panelManager.focusedMonitorPanel
if (focusedPanel) {
let position = focusedPanel.geom.position
let isBottom = position == St.Side.BOTTOM
this._injectionManager.overrideMethod(Object.getPrototypeOf(overviewControls), 'vfunc_allocate',
(originalAllocate) =>
(box) => {
let focusedPanel = this._panel.panelManager.focusedMonitorPanel
if (focusedPanel) {
let position = focusedPanel.geom.position
let isBottom = position == St.Side.BOTTOM
if (focusedPanel.intellihide?.enabled) {
// Panel intellihide is enabled (struts aren't taken into account on overview allocation),
// dynamically modify the overview box to follow the reveal/hide animation
let { transitioning, finalState, progress } = overviewControls._stateAdjustment.getStateTransitionParams()
let size = focusedPanel.geom[focusedPanel.checkIfVertical() ? 'w' : 'h'] *
(transitioning ? Math.abs((finalState != 0 ? 0 : 1) - progress) : 1)
if (focusedPanel.intellihide?.enabled) {
// Panel intellihide is enabled (struts aren't taken into account on overview allocation),
// dynamically modify the overview box to follow the reveal/hide animation
let { transitioning, finalState, progress } = overviewControls._stateAdjustment.getStateTransitionParams()
let size = focusedPanel.geom[focusedPanel.checkIfVertical() ? 'w' : 'h'] *
(transitioning ? Math.abs((finalState != 0 ? 0 : 1) - progress) : 1)
if (isBottom || position == St.Side.RIGHT)
box[focusedPanel.fixedCoord.c2] -= size
else
box[focusedPanel.fixedCoord.c1] += size
} else if (isBottom)
// The default overview allocation is very good and takes into account external
// struts, everywhere but the bottom where the dash is usually fixed anyway.
// If there is a bottom panel under the dash location, give it some space here
box.y2 -= focusedPanel.geom.h
if (isBottom || position == St.Side.RIGHT)
box[focusedPanel.fixedCoord.c2] -= size
else
box[focusedPanel.fixedCoord.c1] += size
} else if (isBottom)
// The default overview allocation is very good and takes into account external
// struts, everywhere but the bottom where the dash is usually fixed anyway.
// If there is a bottom panel under the dash location, give it some space here
box.y2 -= focusedPanel.geom.h
}
originalAllocate.call(overviewControls, box)
}
proto.vfunc_allocate.call(overviewControls, box)
}
Utils.hookVfunc(proto, 'allocate', allocFunc)
);
}
/**
@@ -188,19 +181,19 @@ var Overview = class {
}
this._signalsHandler.add([
Me.settings,
SETTINGS,
'changed::isolate-workspaces',
() => {
this._panel.panelManager.allPanels.forEach(p => p.taskbar.resetAppIcons());
if (Me.settings.get_boolean('isolate-workspaces'))
if (SETTINGS.get_boolean('isolate-workspaces'))
enable();
else
disable();
}
]);
if (Me.settings.get_boolean('isolate-workspaces'))
if (SETTINGS.get_boolean('isolate-workspaces'))
enable();
}
@@ -224,7 +217,7 @@ var Overview = class {
let seenAppCount = seenApps[appIcon.app];
let windowCount = appIcon.window || appIcon._hotkeysCycle ? seenAppCount : appIcon._nWindows;
if (Me.settings.get_boolean('shortcut-previews') && windowCount > 1 &&
if (SETTINGS.get_boolean('shortcut-previews') && windowCount > 1 &&
!(modifiers & ~(Clutter.ModifierType.MOD1_MASK | Clutter.ModifierType.SUPER_MASK))) { //ignore the alt (MOD1_MASK) and super key (SUPER_MASK)
if (this._hotkeyPreviewCycleInfo && this._hotkeyPreviewCycleInfo.appIcon != appIcon) {
this._endHotkeyPreviewCycle();
@@ -278,14 +271,14 @@ var Overview = class {
_optionalHotKeys() {
this._hotKeysEnabled = false;
if (Me.settings.get_boolean('hot-keys'))
if (SETTINGS.get_boolean('hot-keys'))
this._enableHotKeys();
this._signalsHandler.add([
Me.settings,
SETTINGS,
'changed::hot-keys',
() => {
if (Me.settings.get_boolean('hot-keys'))
if (SETTINGS.get_boolean('hot-keys'))
this._enableHotKeys();
else
this._disableHotKeys();
@@ -310,12 +303,12 @@ var Overview = class {
}
// Setup keyboard bindings for taskbar elements
let shortcutNumKeys = Me.settings.get_string('shortcut-num-keys');
let shortcutNumKeys = SETTINGS.get_string('shortcut-num-keys');
let bothNumKeys = shortcutNumKeys == 'BOTH';
let keys = [];
let prefixModifiers = Clutter.ModifierType.SUPER_MASK
if (Me.settings.get_string('hotkey-prefix-text') == 'SuperAlt')
if (SETTINGS.get_string('hotkey-prefix-text') == 'SuperAlt')
prefixModifiers |= Clutter.ModifierType.MOD1_MASK
if (bothNumKeys || shortcutNumKeys == 'NUM_ROW') {
@@ -337,13 +330,13 @@ var Overview = class {
for (let i = 0; i < this._numHotkeys; i++) {
let appNum = i;
Utils.addKeybinding(key + (i + 1), Me.settings, () => this._activateApp(appNum, modifiers));
Utils.addKeybinding(key + (i + 1), SETTINGS, () => this._activateApp(appNum, modifiers));
}
}, this);
this._hotKeysEnabled = true;
if (Me.settings.get_string('hotkeys-overlay-combo') === 'ALWAYS')
if (SETTINGS.get_string('hotkeys-overlay-combo') === 'ALWAYS')
this.taskbar.toggleNumberOverlay(true);
}
@@ -360,7 +353,7 @@ var Overview = class {
}, this);
if (Main.wm._switchToApplication) {
let gsSettings = new Gio.Settings({ schema_id: imports.ui.windowManager.SHELL_KEYBINDINGS_SCHEMA });
let gsSettings = new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA });
for (let i = 1; i < 10; ++i) {
Utils.addKeybinding(GS_HOTKEYS_KEY + i, gsSettings, Main.wm._switchToApplication.bind(Main.wm));
@@ -374,38 +367,38 @@ var Overview = class {
_optionalNumberOverlay() {
// Enable extra shortcut
if (Me.settings.get_boolean('hot-keys'))
if (SETTINGS.get_boolean('hot-keys'))
this._enableExtraShortcut();
this._signalsHandler.add([
Me.settings,
SETTINGS,
'changed::hot-keys',
this._checkHotkeysOptions.bind(this)
], [
Me.settings,
SETTINGS,
'changed::hotkeys-overlay-combo',
() => {
if (Me.settings.get_boolean('hot-keys') && Me.settings.get_string('hotkeys-overlay-combo') === 'ALWAYS')
if (SETTINGS.get_boolean('hot-keys') && SETTINGS.get_string('hotkeys-overlay-combo') === 'ALWAYS')
this.taskbar.toggleNumberOverlay(true);
else
this.taskbar.toggleNumberOverlay(false);
}
], [
Me.settings,
SETTINGS,
'changed::shortcut-num-keys',
() => this._resetHotkeys()
]);
}
_checkHotkeysOptions() {
if (Me.settings.get_boolean('hot-keys'))
if (SETTINGS.get_boolean('hot-keys'))
this._enableExtraShortcut();
else
this._disableExtraShortcut();
}
_enableExtraShortcut() {
Utils.addKeybinding('shortcut', Me.settings, () => this._showOverlay(true));
Utils.addKeybinding('shortcut', SETTINGS, () => this._showOverlay(true));
}
_disableExtraShortcut() {
@@ -419,7 +412,7 @@ var Overview = class {
}
// Restart the counting if the shortcut is pressed again
let hotkey_option = Me.settings.get_string('hotkeys-overlay-combo');
let hotkey_option = SETTINGS.get_string('hotkeys-overlay-combo');
if (hotkey_option === 'NEVER')
return;

278
panel.js
View File

@@ -27,45 +27,37 @@
* Some code was also adapted from the upstream Gnome Shell source code.
*/
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Clutter = imports.gi.Clutter;
const Config = imports.misc.config;
const Gtk = imports.gi.Gtk;
const GObject = imports.gi.GObject;
const Gi = imports._gi;
const Gio = imports.gi.Gio;
const AppIcons = Me.imports.appIcons;
const Utils = Me.imports.utils;
const { Taskbar, TaskbarItemContainer } = Me.imports.taskbar;
const Pos = Me.imports.panelPositions;
const PanelSettings = Me.imports.panelSettings;
const { PanelStyle } = Me.imports.panelStyle;
const Main = imports.ui.main;
const Mainloop = imports.mainloop;
const Dash = imports.ui.dash;
const CtrlAltTab = imports.ui.ctrlAltTab;
const GSPanel = imports.ui.panel;
const PanelMenu = imports.ui.panelMenu;
const St = imports.gi.St;
const GLib = imports.gi.GLib;
const Meta = imports.gi.Meta;
const Pango = imports.gi.Pango;
const DND = imports.ui.dnd;
const Shell = imports.gi.Shell;
const PopupMenu = imports.ui.popupMenu;
const IconGrid = imports.ui.iconGrid;
const DateMenu = imports.ui.dateMenu;
const Volume = imports.ui.status.volume;
const Progress = Me.imports.progress;
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
import * as AppIcons from './appIcons.js';
import * as Utils from './utils.js';
import * as Taskbar from './taskbar.js';
import * as TaskbarItemContainer from './taskbar.js';
import * as Pos from './panelPositions.js';
import * as PanelSettings from './panelSettings.js';
import * as PanelStyle from './panelStyle.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as Dash from 'resource:///org/gnome/shell/ui/dash.js';
import * as CtrlAltTab from 'resource:///org/gnome/shell/ui/ctrlAltTab.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import St from 'gi://St';
import Meta from 'gi://Meta';
import Pango from 'gi://Pango';
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
import Shell from 'gi://Shell';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import * as DateMenu from 'resource:///org/gnome/shell/ui/dateMenu.js';
import * as Volume from 'resource:///org/gnome/shell/ui/status/volume.js';
import * as Progress from './progress.js';
const Intellihide = Me.imports.intellihide;
const Transparency = Me.imports.transparency;
const _ = imports.gettext.domain(Me.imports.utils.TRANSLATION_DOMAIN).gettext;
import * as Intellihide from './intellihide.js';
import * as Transparency from './transparency.js';
import {SETTINGS, DESKTOPSETTINGS, PERSISTENTSTORAGE, EXTENSION_PATH} from './extension.js';
import {gettext as _, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
let tracker = Shell.WindowTracker.get_default();
var panelBoxes = ['_leftBox', '_centerBox', '_rightBox'];
var SHOW_DESKTOP_ICON = Me.path + '/img/show-desktop-symbolic.svg';
export const panelBoxes = ['_leftBox', '_centerBox', '_rightBox'];
//timeout names
const T2 = 'startIntellihideTimeout';
@@ -78,7 +70,7 @@ const SHOW_SHOWDESKTOP_TIME = 200;
const FLOATING_MARGIN = 8;
var Panel = GObject.registerClass({
export const Panel = GObject.registerClass({
}, class Panel extends St.Widget {
_init(panelManager, monitor, panelBox, isStandalone) {
@@ -86,9 +78,10 @@ var Panel = GObject.registerClass({
this._timeoutsHandler = new Utils.TimeoutsHandler();
this._signalsHandler = new Utils.GlobalSignalsHandler();
this._injectionManager = new InjectionManager();
this.panelManager = panelManager;
this.panelStyle = new PanelStyle();
this.panelStyle = new PanelStyle.PanelStyle();
this.monitor = monitor;
this.panelBox = panelBox;
@@ -97,7 +90,7 @@ var Panel = GObject.registerClass({
// so in this case use isPrimary to get the panel on the primary dtp monitor, which
// might be different from the system's primary monitor.
this.isStandalone = isStandalone;
this.isPrimary = !isStandalone || (Me.settings.get_boolean('stockgs-keep-top-panel') &&
this.isPrimary = !isStandalone || (SETTINGS.get_boolean('stockgs-keep-top-panel') &&
monitor == panelManager.dtpPrimaryMonitor);
this._sessionStyle = null;
@@ -131,7 +124,7 @@ var Panel = GObject.registerClass({
this._setPanelMenu(systemMenuInfo.name, systemMenuInfo.constructor, this.panel);
this._setPanelMenu('dateMenu', DateMenu.DateMenuButton, this.panel);
this._setPanelMenu('activities', GSPanel.ActivitiesButton, this.panel);
this._setPanelMenu('activities', Main.panel.statusArea.activities.constructor, this.panel);
this.panel.add_child(this._leftBox);
this.panel.add_child(this._centerBox);
@@ -146,8 +139,11 @@ var Panel = GObject.registerClass({
['activities', systemMenuInfo.name, 'dateMenu'].forEach(b => {
let container = this.statusArea[b].container;
let parent = container.get_parent();
let siblings = parent.get_children();
let index = siblings.indexOf(container);
container._dtpOriginalParent = parent;
container._dtpOriginalIndex = index && index == siblings.length - 1 ? -1: index;
parent ? parent.remove_child(container) : null;
this.panel.add_child(container);
});
@@ -184,21 +180,23 @@ var Panel = GObject.registerClass({
enable () {
let { name: systemMenuName } = Utils.getSystemMenuInfo();
if (this.statusArea[systemMenuName]) {
Utils.getIndicators(this.statusArea[systemMenuName]._volume)._dtpIgnoreScroll = 1;
if (this.statusArea[systemMenuName] && this.statusArea[systemMenuName]._volumeOutput) {
Utils.getIndicators(this.statusArea[systemMenuName]._volumeOutput)._dtpIgnoreScroll = 1;
}
this._toggleFloatingRoundedTheme();
this.geom = this.getGeometry();
this._setPanelPosition();
if (!this.isStandalone) {
Utils.hookVfunc(Object.getPrototypeOf(this.panel), 'allocate', (box) => this._mainPanelAllocate(box));
this._injectionManager.overrideMethod(Object.getPrototypeOf(this.panel), 'vfunc_allocate', () => (box) => this._mainPanelAllocate(box));
// remove the extra space before the clock when the message-indicator is displayed
if (DateMenu.IndicatorPad) {
Utils.hookVfunc(DateMenu.IndicatorPad.prototype, 'get_preferred_width', () => [0,0]);
Utils.hookVfunc(DateMenu.IndicatorPad.prototype, 'get_preferred_height', () => [0,0]);
this._injectionManager.overrideMethod(DateMenu.IndicatorPad.prototype, 'vfunc_get_preferred_width', () => () => [0,0]);
this._injectionManager.overrideMethod(DateMenu.IndicatorPad.prototype, 'vfunc_get_preferred_height', () => () => [0,0]);
}
}
@@ -212,18 +210,17 @@ var Panel = GObject.registerClass({
this.menuManager._oldChangeMenu = this.menuManager._changeMenu;
this.menuManager._changeMenu = (menu) => {
if (!Me.settings.get_boolean('stockgs-panelbtn-click-only')) {
if (!SETTINGS.get_boolean('stockgs-panelbtn-click-only')) {
this.menuManager._oldChangeMenu(menu);
}
};
this.dynamicTransparency = new Transparency.DynamicTransparency(this);
this.taskbar = new Taskbar(this);
this.taskbar = new Taskbar.Taskbar(this);
this.panel.add_child(this.taskbar.actor);
this._setAppmenuVisible(false);
this._setShowDesktopButton(true);
this._setAllocationMap();
@@ -275,12 +272,12 @@ var Panel = GObject.registerClass({
],
[
this._centerBox,
'actor-added',
'child-added',
() => this._onBoxActorAdded(this._centerBox)
],
[
this._rightBox,
'actor-added',
'child-added',
() => this._onBoxActorAdded(this._rightBox)
],
[
@@ -331,7 +328,6 @@ var Panel = GObject.registerClass({
this._signalsHandler.destroy();
this.panel.remove_child(this.taskbar.actor);
this._setAppmenuVisible(false);
if (this.intellihide) {
this.intellihide.destroy();
@@ -369,26 +365,27 @@ var Panel = GObject.registerClass({
['vertical', 'horizontal', 'zorintaskbarMainPanel'].forEach(c => this.panel.remove_style_class_name(c));
if (!Main.sessionMode.isLocked) {
[['activities', 0], [systemMenuName, -1], ['dateMenu', 0]].forEach(b => {
let container = this.statusArea[b[0]].container;
['activities', systemMenuName, 'dateMenu'].forEach(b => {
let container = this.statusArea[b].container;
let originalParent = container._dtpOriginalParent;
this.panel.remove_child(container);
originalParent ? originalParent.insert_child_at_index(container, b[1]) : null;
originalParent && originalParent.insert_child_at_index(
container,
Math.min(container._dtpOriginalIndex, originalParent.get_children().length - 1)
);
delete container._dtpOriginalParent;
delete container._dtpOriginalIndex;
});
}
this._setShowDesktopButton(false);
delete Utils.getIndicators(this.statusArea[systemMenuName]._volume)._dtpIgnoreScroll;
delete Utils.getIndicators(this.statusArea[systemMenuName]._volumeOutput)._dtpIgnoreScroll;
if (DateMenu.IndicatorPad) {
Utils.hookVfunc(DateMenu.IndicatorPad.prototype, 'get_preferred_width', DateMenu.IndicatorPad.prototype.vfunc_get_preferred_width);
Utils.hookVfunc(DateMenu.IndicatorPad.prototype, 'get_preferred_height', DateMenu.IndicatorPad.prototype.vfunc_get_preferred_height);
}
Utils.hookVfunc(Object.getPrototypeOf(this.panel), 'allocate', Object.getPrototypeOf(this.panel).vfunc_allocate);
this._injectionManager.clear();
this.panel._delegate = this.panel;
} else {
@@ -400,20 +397,8 @@ var Panel = GObject.registerClass({
Main.ctrlAltTabManager.removeGroup(this);
}
handleDragOver(source, actor, x, y, time) {
if (source == Main.xdndHandler) {
// open overview so they can choose a window for focusing
// and ultimately dropping dragged item onto
if(Main.overview.shouldToggleByCornerOrButton())
Main.overview.show();
}
return DND.DragMotionResult.CONTINUE;
}
getPosition() {
let position = PanelSettings.getPanelPosition(Me.settings, this.monitor.index);
let position = PanelSettings.getPanelPosition(SETTINGS, this.monitor.index);
if (position == Pos.TOP) {
return St.Side.TOP;
@@ -500,7 +485,7 @@ var Panel = GObject.registerClass({
this._signalsHandler.add(
[
Me.settings,
SETTINGS,
[
'changed::panel-sizes',
'changed::group-apps'
@@ -508,7 +493,7 @@ var Panel = GObject.registerClass({
() => this._resetGeometry()
],
[
Me.settings,
SETTINGS,
[
'changed::showdesktop-button-width',
'changed::show-showdesktop-icon'
@@ -516,7 +501,14 @@ var Panel = GObject.registerClass({
() => this._setShowDesktopButtonStyle()
],
[
Me.desktopSettings,
SETTINGS,
'changed::floating-rounded-theme',
() => {
this._resetGeometry();
}
],
[
DESKTOPSETTINGS,
'changed::clock-format',
() => {
this._clockFormat = null;
@@ -527,19 +519,19 @@ var Panel = GObject.registerClass({
}
],
[
Me.settings,
SETTINGS,
'changed::progress-show-bar',
() => this._initProgressManager()
],
[
Me.settings,
SETTINGS,
'changed::progress-show-count',
() => this._initProgressManager()
]
);
if (isVertical) {
this._signalsHandler.add([Me.settings, 'changed::group-apps-label-max-width', () => this._resetGeometry()]);
this._signalsHandler.add([SETTINGS, 'changed::group-apps-label-max-width', () => this._resetGeometry()]);
}
}
@@ -556,7 +548,7 @@ var Panel = GObject.registerClass({
let parent = this.statusArea[propName].container.get_parent();
if (parent) {
parent.remove_actor(this.statusArea[propName].container);
parent.remove_child(this.statusArea[propName].container);
}
//calling this.statusArea[propName].destroy(); is buggy for now, gnome-shell never
@@ -567,19 +559,19 @@ var Panel = GObject.registerClass({
let panelMenu = this.statusArea[propName];
this.menuManager.removeMenu(panelMenu.menu);
Me.persistentStorage[propName].push(panelMenu);
PERSISTENTSTORAGE[propName].push(panelMenu);
this.statusArea[propName] = null;
}
}
_getPanelMenu(propName, constr) {
Me.persistentStorage[propName] = Me.persistentStorage[propName] || [];
PERSISTENTSTORAGE[propName] = PERSISTENTSTORAGE[propName] || [];
if (!Me.persistentStorage[propName].length) {
Me.persistentStorage[propName].push(new constr());
if (!PERSISTENTSTORAGE[propName].length) {
PERSISTENTSTORAGE[propName].push(new constr());
}
return Me.persistentStorage[propName].pop();
return PERSISTENTSTORAGE[propName].pop();
}
_adjustForOverview() {
@@ -595,7 +587,40 @@ var Panel = GObject.registerClass({
this.panelBox[isShown ? 'show' : 'hide']();
}
_toggleFloatingRoundedTheme() {
if (this.panelBox.has_style_class_name('top')) {
this.panelBox.remove_style_class_name('top');
} else if (this.panelBox.has_style_class_name('left')) {
this.panelBox.remove_style_class_name('left');
} else if (this.panelBox.has_style_class_name('right')) {
this.panelBox.remove_style_class_name('right');
} else if (this.panelBox.has_style_class_name('bottom')) {
this.panelBox.remove_style_class_name('bottom');
}
if (SETTINGS.get_boolean('floating-rounded-theme')) {
if (!this.panelBox.has_style_class_name('floating')) {
this.panelBox.add_style_class_name('floating');
}
let position = this.getPosition();
if (position == St.Side.TOP) {
this.panelBox.add_style_class_name('top');
} else if (position == St.Side.RIGHT) {
this.panelBox.add_style_class_name('right');
} else if (position == St.Side.BOTTOM) {
this.panelBox.add_style_class_name('bottom');
} else {
this.panelBox.add_style_class_name('left');
}
} else {
if (this.panelBox.has_style_class_name('floating'))
this.panelBox.remove_style_class_name('floating');
}
}
_resetGeometry() {
this._toggleFloatingRoundedTheme()
this.geom = this.getGeometry();
this._setPanelPosition();
this.taskbar.resetAppIcons(true);
@@ -618,24 +643,24 @@ var Panel = GObject.registerClass({
let topPadding = panelBoxTheme.get_padding(St.Side.TOP);
let tbPadding = topPadding + panelBoxTheme.get_padding(St.Side.BOTTOM);
let position = this.getPosition();
let length = PanelSettings.getPanelLength(Me.settings, this.monitor.index) / 100;
let anchor = PanelSettings.getPanelAnchor(Me.settings, this.monitor.index);
let length = PanelSettings.getPanelLength(SETTINGS, this.monitor.index) / 100;
let anchor = PanelSettings.getPanelAnchor(SETTINGS, this.monitor.index);
let anchorPlaceOnMonitor = 0;
let gsTopPanelOffset = 0;
let x = 0, y = 0;
let w = 0, h = 0;
const panelSize = PanelSettings.getPanelSize(Me.settings, this.monitor.index);
const panelSize = PanelSettings.getPanelSize(SETTINGS, this.monitor.index);
this.dtpSize = panelSize * scaleFactor;
if (Me.settings.get_boolean('stockgs-keep-top-panel') && Main.layoutManager.primaryMonitor == this.monitor) {
if (SETTINGS.get_boolean('stockgs-keep-top-panel') && Main.layoutManager.primaryMonitor == this.monitor) {
gsTopPanelOffset = Main.layoutManager.panelBox.height - topPadding;
}
if (this.checkIfVertical()) {
if (!Me.settings.get_boolean('group-apps')) {
if (!SETTINGS.get_boolean('group-apps')) {
// add window title width and side padding of _dtpIconContainer when vertical
this.dtpSize += Me.settings.get_int('group-apps-label-max-width') + AppIcons.DEFAULT_PADDING_SIZE * 2 / scaleFactor;
this.dtpSize += SETTINGS.get_int('group-apps-label-max-width') + AppIcons.DEFAULT_PADDING_SIZE * 2 / scaleFactor;
}
this.sizeFunc = 'get_preferred_height',
@@ -686,8 +711,7 @@ var Panel = GObject.registerClass({
x = x + anchorPlaceOnMonitor;
}
if (Me.settings.get_boolean('intellihide') &&
Me.settings.get_boolean('intellihide-floating-rounded-theme')) {
if (SETTINGS.get_boolean('floating-rounded-theme')) {
if (position == St.Side.BOTTOM || position == St.Side.TOP) {
x -= FLOATING_MARGIN;
} else { // LEFT or RIGHT
@@ -904,10 +928,14 @@ var Panel = GObject.registerClass({
this.showAppsIconWrapper.popupMenu(Main.layoutManager.dummyCursor);
return Clutter.EVENT_STOP;
} else if (Main.modalCount > 0 || event.get_source() != actor ||
(!isPress && type != Clutter.EventType.TOUCH_BEGIN) ||
(isPress && button != 1)) {
return Clutter.EVENT_PROPAGATE;
} else {
const targetActor = global.stage.get_event_actor(event);
if (Main.modalCount > 0 || targetActor != actor ||
(!isPress && type != Clutter.EventType.TOUCH_BEGIN) ||
(isPress && button != 1)) {
return Clutter.EVENT_PROPAGATE;
}
}
let params = this.checkIfVertical() ? [stageY, 'y', 'height'] : [stageX, 'x', 'width'];
@@ -959,13 +987,16 @@ var Panel = GObject.registerClass({
_setVertical(actor, isVertical) {
let _set = (actor, isVertical) => {
if (!actor || actor instanceof Dash.DashItemContainer || actor instanceof TaskbarItemContainer) {
if (!actor || actor instanceof Dash.DashItemContainer || actor instanceof TaskbarItemContainer.TaskbarItemContainer) {
return;
}
if (actor instanceof St.BoxLayout) {
actor.vertical = isVertical;
} else if ((actor._delegate || actor) instanceof PanelMenu.ButtonBox && actor != this.statusArea.appMenu) {
} else if (
actor != this.statusArea.appMenu &&
((actor._delegate || actor) instanceof PanelMenu.ButtonBox || actor == this.statusArea.quickSettings)
) {
let child = actor.get_first_child();
if (isVertical && !actor.visible && !actor._dtpVisibleId) {
@@ -1006,22 +1037,6 @@ var Panel = GObject.registerClass({
this._unmappedButtons.splice(this._unmappedButtons.indexOf(actor), 1);
}
_setAppmenuVisible(isVisible) {
let parent;
let appMenu = this.statusArea.appMenu;
if(appMenu)
parent = appMenu.container.get_parent();
if (parent) {
parent.remove_child(appMenu.container);
}
if (isVisible && appMenu) {
this._leftBox.insert_child_above(appMenu.container, null);
}
}
_formatVerticalClock() {
// https://github.com/GNOME/gnome-desktop/blob/master/libgnome-desktop/gnome-wall-clock.c#L310
if (this.statusArea.dateMenu) {
@@ -1059,7 +1074,7 @@ var Panel = GObject.registerClass({
let timeParts = time.split('');
if (!this._clockFormat) {
this._clockFormat = Me.desktopSettings.get_string('clock-format');
this._clockFormat = DESKTOPSETTINGS.get_string('clock-format');
}
if (this._clockFormat == '12h') {
@@ -1083,13 +1098,18 @@ var Panel = GObject.registerClass({
// y_fill: true,
track_hover: true });
this._showDesktopButton.icon = new St.Icon({ gicon: Gio.icon_new_for_string(SHOW_DESKTOP_ICON), style_class: 'system-status-icon' });
this._showDesktopButton.icon = new St.Icon({ gicon: Gio.icon_new_for_string(`${EXTENSION_PATH}/img/show-desktop-symbolic.svg`), style_class: 'system-status-icon' });
this._setShowDesktopButtonStyle();
this._showDesktopButton.connect('touch-event', (actor, event) => {
if (event.type() == Clutter.EventType.TOUCH_BEGIN) {
this._onShowDesktopButtonPress();
}
});
this._showDesktopButton.connect('button-press-event', () => this._onShowDesktopButtonPress());
this._showDesktopButton.connect('enter-event', () => {
if (Me.settings.get_boolean('show-showdesktop-hover')) {
if (SETTINGS.get_boolean('show-showdesktop-hover')) {
this._timeoutsHandler.add([T4, SHOW_SHOWDESKTOP_DELAY, () => {
this._hiddenDesktopWorkspace = Utils.DisplayWrapper.getWorkspaceManager().get_active_workspace();
this._toggleWorkspaceWindows(true, this._hiddenDesktopWorkspace);
@@ -1098,7 +1118,7 @@ var Panel = GObject.registerClass({
});
this._showDesktopButton.connect('leave-event', () => {
if (Me.settings.get_boolean('show-showdesktop-hover')) {
if (SETTINGS.get_boolean('show-showdesktop-hover')) {
if (this._timeoutsHandler.getId(T4)) {
this._timeoutsHandler.remove(T4);
} else if (this._hiddenDesktopWorkspace) {
@@ -1123,21 +1143,21 @@ var Panel = GObject.registerClass({
for (let i = 0; i < this._showDesktopButton.get_children().length; i++) {
if (this._showDesktopButton.get_children()[i] == this._showDesktopButton.icon) {
this._showDesktopButton.remove_actor(this._showDesktopButton.icon);
this._showDesktopButton.remove_child(this._showDesktopButton.icon);
}
}
if (this._showDesktopButton) {
if (Me.settings.get_boolean('show-showdesktop-icon')) {
this._showDesktopButton.add_actor(this._showDesktopButton.icon);
if (SETTINGS.get_boolean('show-showdesktop-icon')) {
this._showDesktopButton.add_child(this._showDesktopButton.icon);
let buttonSize = Me.settings.get_int('showdesktop-button-width') + 'px';
let buttonSize = SETTINGS.get_int('showdesktop-button-width') + 'px';
let isVertical = this.checkIfVertical();
let buttonPadding = isVertical ? buttonSize + ' 0;' : '0 ' + buttonSize + ';';
this._showDesktopButton.set_style('padding: ' + buttonPadding);
} else {
let buttonSize = Me.settings.get_int('showdesktop-button-width') + 'px;';
let buttonSize = SETTINGS.get_int('showdesktop-button-width') + 'px;';
let isVertical = this.checkIfVertical();
let style = "border: 0 solid " + rgb + "; padding: 0;";
@@ -1213,8 +1233,8 @@ var Panel = GObject.registerClass({
}
_initProgressManager() {
const progressVisible = Me.settings.get_boolean('progress-show-bar');
const countVisible = Me.settings.get_boolean('progress-show-count');
const progressVisible = SETTINGS.get_boolean('progress-show-bar');
const countVisible = SETTINGS.get_boolean('progress-show-count');
const pm = this.progressManager;
if(!pm && (progressVisible || countVisible))
@@ -1224,7 +1244,7 @@ var Panel = GObject.registerClass({
}
});
var SecondaryPanel = GObject.registerClass({
export const SecondaryPanel = GObject.registerClass({
}, class SecondaryPanel extends St.Widget {
_init(params) {

View File

@@ -27,39 +27,36 @@
* Some code was also adapted from the upstream Gnome Shell source code.
*/
const Me = imports.misc.extensionUtils.getCurrentExtension();
const { Overview } = Me.imports.overview;
const { Panel, panelBoxes } = Me.imports.panel;
const PanelSettings = Me.imports.panelSettings;
const Proximity = Me.imports.proximity;
const Taskbar = Me.imports.taskbar;
const Utils = Me.imports.utils;
const DesktopIconsIntegration = Me.imports.desktopIconsIntegration;
import * as Overview from './overview.js';
import * as Panel from './panel.js';
import * as PanelSettings from './panelSettings.js';
import * as Proximity from './proximity.js';
import * as Utils from './utils.js';
import * as DesktopIconsIntegration from './desktopIconsIntegration.js';
const Gi = imports._gi;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Clutter = imports.gi.Clutter;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import Clutter from 'gi://Clutter';
import Meta from 'gi://Meta';
import Shell from 'gi://Shell';
import St from 'gi://St';
const AppDisplay = imports.ui.appDisplay;
const BoxPointer = imports.ui.boxpointer;
const Dash = imports.ui.dash;
const IconGrid = imports.ui.iconGrid;
const LookingGlass = imports.ui.lookingGlass;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const Layout = imports.ui.layout;
const WM = imports.ui.windowManager;
const { SecondaryMonitorDisplay, WorkspacesView } = imports.ui.workspacesView;
import * as BoxPointer from 'resource:///org/gnome/shell/ui/boxpointer.js';
import * as LookingGlass from 'resource:///org/gnome/shell/ui/lookingGlass.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as Layout from 'resource:///org/gnome/shell/ui/layout.js';
import {InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
import {SETTINGS} from './extension.js';
import {SecondaryMonitorDisplay, WorkspacesView} from 'resource:///org/gnome/shell/ui/workspacesView.js';
var PanelManager = class {
export const PanelManager = class {
constructor() {
this.overview = new Overview();
this.overview = new Overview.Overview();
this.panelsElementPositions = {};
this._injectionManager = new InjectionManager();
this._saveMonitors();
}
@@ -70,14 +67,14 @@ var PanelManager = class {
this.proximityManager = new Proximity.ProximityManager();
if (this.dtpPrimaryMonitor) {
this.primaryPanel = this._createPanel(this.dtpPrimaryMonitor, Me.settings.get_boolean('stockgs-keep-top-panel'));
this.primaryPanel = this._createPanel(this.dtpPrimaryMonitor, SETTINGS.get_boolean('stockgs-keep-top-panel'));
this.allPanels.push(this.primaryPanel);
this.overview.enable(this.primaryPanel);
this.setFocusedMonitor(this.dtpPrimaryMonitor);
}
if (Me.settings.get_boolean('multi-monitors')) {
if (SETTINGS.get_boolean('multi-monitors')) {
Main.layoutManager.monitors.filter(m => m != this.dtpPrimaryMonitor).forEach(m => {
this.allPanels.push(this._createPanel(m, true));
});
@@ -105,7 +102,7 @@ var PanelManager = class {
if (BoxPointer.BoxPointer.prototype.vfunc_get_preferred_height) {
let panelManager = this;
Utils.hookVfunc(BoxPointer.BoxPointer.prototype, 'get_preferred_height', function(forWidth) {
this._injectionManager.overrideMethod(BoxPointer.BoxPointer.prototype, 'vfunc_get_preferred_height', () => function(forWidth) {
let alloc = { min_size: 0, natural_size: 0 };
[alloc.min_size, alloc.natural_size] = this.vfunc_get_preferred_height(forWidth);
@@ -153,7 +150,7 @@ var PanelManager = class {
//listen settings
this._signalsHandler.add(
[
Me.settings,
SETTINGS,
[
'changed::multi-monitors',
'changed::isolate-monitors',
@@ -165,17 +162,17 @@ var PanelManager = class {
() => this._reset()
],
[
Me.settings,
SETTINGS,
'changed::panel-element-positions',
() => this._updatePanelElementPositions()
],
[
Me.settings,
SETTINGS,
'changed::intellihide-key-toggle-text',
() => this._setKeyBindings(true)
],
[
Me.settings,
SETTINGS,
'changed::panel-sizes',
() => {
GLib.idle_add(GLib.PRIORITY_LOW, () => {
@@ -196,20 +193,22 @@ var PanelManager = class {
]
);
panelBoxes.forEach(c => this._signalsHandler.add(
Panel.panelBoxes.forEach(c => this._signalsHandler.add(
[
Main.panel[c],
'actor-added',
(parent, child) =>
this.primaryPanel &&
this._adjustPanelMenuButton(this._getPanelMenuButton(child), this.primaryPanel.monitor, this.primaryPanel.getPosition())
'child-added',
(parent, child) => {
this.primaryPanel &&
child instanceof St.Bin &&
this._adjustPanelMenuButton(this._getPanelMenuButton(child.get_first_child()), this.primaryPanel.monitor, this.primaryPanel.getPosition())
}
]
));
this._setKeyBindings(true);
// keep GS overview.js from blowing away custom panel styles
if(!Me.settings.get_boolean('stockgs-keep-top-panel'))
if(!SETTINGS.get_boolean('stockgs-keep-top-panel'))
Object.defineProperty(Main.panel, "style", {configurable: true, set(v) {}});
}
@@ -244,7 +243,7 @@ var PanelManager = class {
} else {
p.panelBox.remove_child(p);
p.remove_child(p.panel);
p.panelBox.add(p.panel);
p.panelBox.add_child(p.panel);
p.panelBox.set_position(clipContainer.x, clipContainer.y);
@@ -253,9 +252,7 @@ var PanelManager = class {
}
});
if (BoxPointer.BoxPointer.prototype.vfunc_get_preferred_height) {
Utils.hookVfunc(BoxPointer.BoxPointer.prototype, 'get_preferred_height', BoxPointer.BoxPointer.prototype.vfunc_get_preferred_height);
}
this._injectionManager.clear();
if (Main.layoutManager.primaryMonitor) {
Main.layoutManager.panelBox.set_position(Main.layoutManager.primaryMonitor.x, Main.layoutManager.primaryMonitor.y);
@@ -292,6 +289,10 @@ var PanelManager = class {
this._desktopIconsUsableArea = null;
}
toggleDash() {
this.overview.toggleDash();
}
_setDesktopIconsMargins() {
this._desktopIconsUsableArea?.resetMargins();
this.allPanels.forEach(p => {
@@ -356,12 +357,12 @@ var PanelManager = class {
} else {
// No idea why atm, but we need the import at the top of this file and to use the
// full imports ns here, otherwise SecondaryMonitorDisplay can't be used ¯\_(ツ)_/¯
view = new imports.ui.workspacesView.SecondaryMonitorDisplay(i,
view = new SecondaryMonitorDisplay(i,
this._controls,
this._scrollAdjustment,
this._fitModeAdjustment,
this._overviewAdjustment);
Main.layoutManager.overviewGroup.add_actor(view);
Main.layoutManager.overviewGroup.add_child(view);
}
this._workspacesViews.push(view);
@@ -379,7 +380,7 @@ var PanelManager = class {
Main.layoutManager.monitors.filter(m => m.index != primaryIndex).forEach(m => newMonitors.push(m.index));
Me.settings.set_value(keyMonitors, new GLib.Variant('ai', newMonitors));
SETTINGS.set_value(keyMonitors, new GLib.Variant('ai', newMonitors));
}
checkIfFocusedMonitor(monitor) {
@@ -404,8 +405,8 @@ var PanelManager = class {
clipContainer.add_child(panelBox);
Main.layoutManager.trackChrome(panelBox, { trackFullscreen: true, affectsStruts: true, affectsInputRegion: true });
panel = new Panel(this, monitor, panelBox, isStandalone);
panelBox.add(panel);
panel = new Panel.Panel(this, monitor, panelBox, isStandalone);
panelBox.add_child(panel);
panel.enable();
panelBox.visible = true;
@@ -424,7 +425,7 @@ var PanelManager = class {
}
_updatePanelElementPositions() {
this.panelsElementPositions = PanelSettings.getSettingsJson(Me.settings, 'panel-element-positions');
this.panelsElementPositions = PanelSettings.getSettingsJson(SETTINGS, 'panel-element-positions');
this.allPanels.forEach(p => p.updateElementPositions());
}
@@ -444,7 +445,7 @@ var PanelManager = class {
}
_getBoxPointerPreferredHeight(boxPointer, alloc, monitor) {
if (boxPointer._dtpInPanel && boxPointer.sourceActor && Me.settings.get_boolean('intellihide')) {
if (boxPointer._dtpInPanel && boxPointer.sourceActor && SETTINGS.get_boolean('intellihide')) {
monitor = monitor || Main.layoutManager.findMonitorForActor(boxPointer.sourceActor);
let panel = Utils.find(global.zorinTaskbar.panels, p => p.monitor == monitor);
let excess = alloc.natural_size + panel.dtpSize + 10 - monitor.height; // 10 is arbitrary
@@ -498,7 +499,7 @@ var PanelManager = class {
Utils.removeKeybinding(k);
if (enable) {
Utils.addKeybinding(k, Me.settings, keys[k], Shell.ActionMode.NORMAL);
Utils.addKeybinding(k, SETTINGS, keys[k], Shell.ActionMode.NORMAL);
}
});
}
@@ -507,7 +508,7 @@ var PanelManager = class {
// This class drives long-running icon animations, to keep them running in sync
// with each other.
var IconAnimator = class {
export const IconAnimator = class {
constructor(actor) {
this._count = 0;

View File

@@ -18,31 +18,31 @@
* This file is based on code from the Dash to Panel extension
*/
var SHOW_APPS_BTN = 'showAppsButton';
var ACTIVITIES_BTN = 'activitiesButton';
var TASKBAR = 'taskbar';
var DATE_MENU = 'dateMenu';
var SYSTEM_MENU = 'systemMenu';
var LEFT_BOX = 'leftBox';
var CENTER_BOX = 'centerBox';
var RIGHT_BOX = 'rightBox';
var DESKTOP_BTN = 'desktopButton';
export const SHOW_APPS_BTN = 'showAppsButton';
export const ACTIVITIES_BTN = 'activitiesButton';
export const TASKBAR = 'taskbar';
export const DATE_MENU = 'dateMenu';
export const SYSTEM_MENU = 'systemMenu';
export const LEFT_BOX = 'leftBox';
export const CENTER_BOX = 'centerBox';
export const RIGHT_BOX = 'rightBox';
export const DESKTOP_BTN = 'desktopButton';
var STACKED_TL = 'stackedTL';
var STACKED_BR = 'stackedBR';
var CENTERED = 'centered';
var CENTERED_MONITOR = 'centerMonitor';
export const STACKED_TL = 'stackedTL';
export const STACKED_BR = 'stackedBR';
export const CENTERED = 'centered';
export const CENTERED_MONITOR = 'centerMonitor';
var TOP = 'TOP';
var BOTTOM = 'BOTTOM';
var LEFT = 'LEFT';
var RIGHT = 'RIGHT';
export const TOP = 'TOP';
export const BOTTOM = 'BOTTOM';
export const LEFT = 'LEFT';
export const RIGHT = 'RIGHT';
var START = 'START';
var MIDDLE = 'MIDDLE';
var END = 'END';
export const START = 'START';
export const MIDDLE = 'MIDDLE';
export const END = 'END';
var defaults = [
export const defaults = [
{ element: LEFT_BOX, visible: true, position: STACKED_TL },
{ element: SHOW_APPS_BTN, visible: false, position: STACKED_TL },
{ element: ACTIVITIES_BTN, visible: true, position: STACKED_TL },
@@ -54,11 +54,11 @@ var defaults = [
{ element: DESKTOP_BTN, visible: false, position: STACKED_BR },
];
var optionDialogFunctions = {};
export const optionDialogFunctions = {};
optionDialogFunctions[DATE_MENU] = '_showDateMenuOptions';
optionDialogFunctions[DESKTOP_BTN] = '_showDesktopButtonOptions';
function checkIfCentered(position) {
export function checkIfCentered(position) {
return position == CENTERED || position == CENTERED_MONITOR;
}

View File

@@ -15,11 +15,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Pos = Me.imports.panelPositions;
import * as Pos from './panelPositions.js';
/** Return object representing a settings value that is stored as JSON. */
function getSettingsJson(settings, setting) {
export function getSettingsJson(settings, setting) {
try {
return JSON.parse(settings.get_string(setting));
} catch(e) {
@@ -27,7 +26,7 @@ function getSettingsJson(settings, setting) {
}
}
/** Write value object as JSON to setting in settings. */
function setSettingsJson(settings, setting, value) {
export function setSettingsJson(settings, setting, value) {
try {
const json = JSON.stringify(value);
settings.set_string(setting, json);
@@ -37,7 +36,7 @@ function setSettingsJson(settings, setting, value) {
}
/** Returns size of panel on a specific monitor, in pixels. */
function getPanelSize(settings, monitorIndex) {
export function getPanelSize(settings, monitorIndex) {
const sizes = getSettingsJson(settings, 'panel-sizes');
// Pull in deprecated setting if panel-sizes does not have setting for monitor.
const fallbackSize = settings.get_int('panel-size');
@@ -45,7 +44,7 @@ function getPanelSize(settings, monitorIndex) {
return sizes[monitorIndex] || fallbackSize || theDefault;
}
function setPanelSize(settings, monitorIndex, value) {
export function setPanelSize(settings, monitorIndex, value) {
if (!(Number.isInteger(value) && value <= 128 && value >= 16)) {
log('Not setting invalid panel size: ' + value);
return;
@@ -59,13 +58,13 @@ function setPanelSize(settings, monitorIndex, value) {
* Returns length of panel on a specific monitor, as a whole number percent,
* from settings. e.g. 100
*/
function getPanelLength(settings, monitorIndex) {
export function getPanelLength(settings, monitorIndex) {
const lengths = getSettingsJson(settings, 'panel-lengths');
const theDefault = 100;
return lengths[monitorIndex] || theDefault;
}
function setPanelLength(settings, monitorIndex, value) {
export function setPanelLength(settings, monitorIndex, value) {
if (!(Number.isInteger(value) && value <= 100 && value >= 0)) {
log('Not setting invalid panel length: ' + value);
return;
@@ -76,14 +75,14 @@ function setPanelLength(settings, monitorIndex, value) {
}
/** Returns position of panel on a specific monitor. */
function getPanelPosition(settings, monitorIndex) {
export function getPanelPosition(settings, monitorIndex) {
const positions = getSettingsJson(settings, 'panel-positions');
const fallbackPosition = settings.get_string('panel-position');
const theDefault = Pos.BOTTOM;
return positions[monitorIndex] || fallbackPosition || theDefault;
}
function setPanelPosition(settings, monitorIndex, value) {
export function setPanelPosition(settings, monitorIndex, value) {
if (!(value === Pos.TOP || value === Pos.BOTTOM || value === Pos.LEFT
|| value === Pos.RIGHT)) {
log('Not setting invalid panel position: ' + value);
@@ -95,13 +94,13 @@ function setPanelPosition(settings, monitorIndex, value) {
}
/** Returns anchor location of panel on a specific monitor. */
function getPanelAnchor(settings, monitorIndex) {
export function getPanelAnchor(settings, monitorIndex) {
const anchors = getSettingsJson(settings, 'panel-anchors');
const theDefault = Pos.MIDDLE;
return anchors[monitorIndex] || theDefault;
}
function setPanelAnchor(settings, monitorIndex, value) {
export function setPanelAnchor(settings, monitorIndex, value) {
if (!(value === Pos.START || value === Pos.MIDDLE || value === Pos.END)) {
log('Not setting invalid panel anchor: ' + value);
return;

View File

@@ -22,18 +22,9 @@
* mathematical.coffee@gmail.com
*/
const Me = imports.misc.extensionUtils.getCurrentExtension();
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main;
const Mainloop = imports.mainloop;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
import * as Utils from './utils.js';
const Panel = Me.imports.panel;
const Taskbar = Me.imports.taskbar;
const Utils = Me.imports.utils;
var PanelStyle = class {
export const PanelStyle = class {
enable(panel) {
this.panel = panel;
@@ -56,7 +47,7 @@ var PanelStyle = class {
this._applyStylesRecursively();
/* connect signal */
this._rightBoxActorAddedID = this.panel._rightBox.connect('actor-added',
this._rightBoxActorAddedID = this.panel._rightBox.connect('child-added',
(container, actor) => {
if(this._rightBoxOperations.length && !this._ignoreAddedChild)
this._recursiveApply(actor, this._rightBoxOperations);
@@ -64,7 +55,7 @@ var PanelStyle = class {
this._ignoreAddedChild = 0;
}
);
this._centerBoxActorAddedID = this.panel._centerBox.connect('actor-added',
this._centerBoxActorAddedID = this.panel._centerBox.connect('child-added',
(container, actor) => {
if(this._centerBoxOperations.length && !this._ignoreAddedChild)
this._recursiveApply(actor, this._centerBoxOperations);
@@ -72,7 +63,7 @@ var PanelStyle = class {
this._ignoreAddedChild = 0;
}
);
this._leftBoxActorAddedID = this.panel._leftBox.connect('actor-added',
this._leftBoxActorAddedID = this.panel._leftBox.connect('child-added',
(container, actor) => {
if(this._leftBoxOperations.length)
this._recursiveApply(actor, this._leftBoxOperations);

415
po/cs.po

File diff suppressed because it is too large Load Diff

626
po/de.po

File diff suppressed because it is too large Load Diff

View File

@@ -255,6 +255,12 @@ msgstr "Importar configuraciones"
msgid "Quit"
msgstr "Salir"
#: appIcons.js:1497
msgid "Quit %d Window"
msgid_plural "Quit %d Windows"
msgstr[0] "Cerrar %d ventana"
msgstr[1] "Cerrar %d ventanas"
#: appIcons.js:1515
msgid "Windows"
msgstr "Ventanas"

889
po/fr.po

File diff suppressed because it is too large Load Diff

252
po/it.po
View File

@@ -2,15 +2,16 @@
# This file is distributed under the same license as the Dash to Panel package.
# Enrico Bella <enricobe@hotmail.com>, 2018.
# Kowalski7cc <kowalski.7cc@gmail.com>, 2020.
# Albano Battistella <albanobattistella@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-08 08:31-0500\n"
"PO-Revision-Date: 2020-05-15 23:12+0200\n"
"Last-Translator: l3nn4rt <l3nn4rt@protonmail.com>\n"
"Language-Team: \n"
"PO-Revision-Date: 2023-12-22 20:38+0200\n"
"Last-Translator: Albano Battistella <albanoattistella@gmail.com>\n"
"Language-Team: Italian\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -35,9 +36,8 @@ msgid "Left"
msgstr "Sinistra"
#: prefs.js:318
#, fuzzy
msgid "Center"
msgstr "Allinea al centro dello spazio disponibile"
msgstr "Centro"
#: prefs.js:319 ui/SettingsPosition.ui.h:13 ui/SettingsStyle.ui.h:12
msgid "Right"
@@ -50,7 +50,7 @@ msgstr "Alto"
#: prefs.js:322 prefs.js:327 ui/SettingsPosition.ui.h:21
msgid "Middle"
msgstr ""
msgstr "A metà"
#: prefs.js:323 ui/BoxWindowPreviewOptions.ui.h:37 ui/SettingsPosition.ui.h:10
#: ui/SettingsStyle.ui.h:9
@@ -59,11 +59,11 @@ msgstr "Basso"
#: prefs.js:326 ui/SettingsPosition.ui.h:20
msgid "Start"
msgstr ""
msgstr "Inizio"
#: prefs.js:328 ui/SettingsPosition.ui.h:22
msgid "End"
msgstr ""
msgstr "Fine"
#: prefs.js:413
msgid "Show Applications button"
@@ -155,7 +155,7 @@ msgstr "Opzioni Mostra Applicazioni"
#: prefs.js:530
msgid "Open icon"
msgstr ""
msgstr "Apri icona"
#: prefs.js:577
msgid "Show Desktop options"
@@ -164,7 +164,7 @@ msgstr "Opzioni Mostra Desktop"
#: prefs.js:661
#, javascript-format
msgid "%d ms"
msgstr ""
msgstr "%d ms"
#: prefs.js:666
#, javascript-format
@@ -185,8 +185,8 @@ msgstr ""
#, javascript-format
msgid "%d icon"
msgid_plural "%d icons"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "%d icona"
msgstr[1] "%d icone"
#: prefs.js:782
msgid "Running Indicator Options"
@@ -241,9 +241,8 @@ msgid "Advanced Options"
msgstr "Impostazioni avanzate"
#: prefs.js:2040
#, fuzzy
msgid "App icon animation options"
msgstr "Opzioni Mostra Applicazioni"
msgstr "Opzioni di animazione dell'icona dell'app"
#: prefs.js:2088
msgid "Export settings"
@@ -288,9 +287,8 @@ msgid "Terminal"
msgstr "Terminale"
#: appIcons.js:1824
#, fuzzy
msgid "System Monitor"
msgstr "Isola monitor"
msgstr "Monitor di sistema"
#: appIcons.js:1829
msgid "Files"
@@ -330,50 +328,47 @@ msgstr "Ancora niente!"
#: ui/BoxAdvancedOptions.ui.h:2
msgid "For real..."
msgstr ""
msgstr "Per davvero..."
#: ui/BoxAnimateAppIconHoverOptions.ui.h:1
#, fuzzy
msgid "Animation type"
msgstr "Durata animazione (ms)"
msgstr "Tipo di animazione"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:2
msgid "Simple"
msgstr ""
msgstr "Semplice"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:3
msgid "Ripple"
msgstr ""
msgstr "Ondulata"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:4
msgid "Plank"
msgstr ""
msgstr "Plank"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:5
msgid "Duration"
msgstr ""
msgstr "Durata"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:6
#, fuzzy
msgid "Rotation"
msgstr "Posizione"
msgstr "Rotazione"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:7
msgid "Travel"
msgstr ""
msgstr "Gamma di movimento"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:8
msgid "Zoom"
msgstr ""
msgstr "Zoom"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:9
msgid "Convexity"
msgstr ""
msgstr "Convessità"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:10
#, fuzzy
msgid "Extent"
msgstr "Estensioni"
msgstr "Estensione"
#: ui/BoxDotOptions.ui.h:1
msgid "Highlight focused application"
@@ -498,16 +493,12 @@ msgid "Font color of the minimized application titles"
msgstr "Colore font titoli delle applicazioni minimizzate"
#: ui/BoxGroupAppsOptions.ui.h:10
#, fuzzy
msgid "Maximum width (px) of the application titles"
msgstr "Larghezza massima (px) dei titoli delle app (predef. 160)"
msgstr "Larghezza massima (px) dei titoli delle applicazioni"
#: ui/BoxGroupAppsOptions.ui.h:11
#, fuzzy
msgid "(default is 160)"
msgstr ""
"Dimensione pannello\n"
"(predefinito 48)"
msgstr "(predefinito è 160)"
#: ui/BoxGroupAppsOptions.ui.h:12
msgid "Use a fixed width for the application titles"
@@ -532,9 +523,8 @@ msgid "Use the favorite icons as application launchers"
msgstr "Usa le icone dei Preferiti come lanciatori delle app"
#: ui/BoxIntellihideOptions.ui.h:1
#, fuzzy
msgid "Only hide the panel when it is obstructed by windows"
msgstr "Nascondi pannello solo quando è ostruito dalle finestre "
msgstr "Nascondi il pannello solo quando è ostruito da finestre"
#: ui/BoxIntellihideOptions.ui.h:2
msgid "The panel hides from"
@@ -557,14 +547,12 @@ msgid "Allow the panel to be revealed while in fullscreen mode"
msgstr "Permetti al pannello di apparire quando in modalità fullscreen"
#: ui/BoxIntellihideOptions.ui.h:10
#, fuzzy
msgid "Only hide secondary panels"
msgstr "Visualizza l'orologio su pannelli secondari"
msgstr "Nascondi solo i pannelli secondari"
#: ui/BoxIntellihideOptions.ui.h:11
#, fuzzy
msgid "(requires multi-monitors option)"
msgstr "Opzioni multi-monitor"
msgstr "(richiede l'opzione multi-monitor)"
#: ui/BoxIntellihideOptions.ui.h:12
msgid "Keyboard shortcut to reveal and hold the panel"
@@ -627,9 +615,8 @@ msgid "Toggle single / Preview multiple"
msgstr "Commuta finestra singola e mostra anteprime"
#: ui/BoxMiddleClickOptions.ui.h:9 ui/SettingsAction.ui.h:6
#, fuzzy
msgid "Toggle single / Cycle multiple"
msgstr "Commuta finestra singola e mostra anteprime"
msgstr "Attiva singolo / Ciclo multiplo"
#: ui/BoxMiddleClickOptions.ui.h:11
msgid "Middle-Click action"
@@ -757,9 +744,8 @@ msgid "<i>Show Details</i> menu item"
msgstr "Visualizza <i>Mostra Dettagli</i>"
#: ui/BoxShowApplicationsOptions.ui.h:1
#, fuzzy
msgid "Show Applications icon"
msgstr "Opzioni Mostra Applicazioni"
msgstr "Mostra l'icona Applicazioni"
#: ui/BoxShowApplicationsOptions.ui.h:2
msgid "Show Applications icon side padding (px)"
@@ -772,7 +758,7 @@ msgstr ""
#: ui/BoxShowDesktopOptions.ui.h:1
msgid "Override Show Desktop line color"
msgstr ""
msgstr "Sostituisci Mostra colore linea desktop"
#: ui/BoxShowDesktopOptions.ui.h:2
msgid "Reveal the desktop when hovering the Show Desktop button"
@@ -788,23 +774,21 @@ msgid "Fade duration (ms)"
msgstr "Durata dissolvenza (ms)"
#: ui/BoxWindowPreviewOptions.ui.h:1
#, fuzzy
msgid "Time (ms) before showing"
msgstr ""
"Tempo (ms) prima della visualizzazione (400 è l'impostazione predefinita)"
"Tempo (ms) prima della visualizzazione"
#: ui/BoxWindowPreviewOptions.ui.h:2
msgid "(400 is default)"
msgstr ""
msgstr "(400 è predefinita)"
#: ui/BoxWindowPreviewOptions.ui.h:3
#, fuzzy
msgid "Time (ms) before hiding"
msgstr "Tempo (ms) prima di nascondersi (100 è l'impostazione predefinita)"
msgstr "Tempo (ms) prima di nascondersi"
#: ui/BoxWindowPreviewOptions.ui.h:4
msgid "(100 is default)"
msgstr ""
msgstr "(100 è predefinito)"
#: ui/BoxWindowPreviewOptions.ui.h:5
msgid "Immediate on application icon click"
@@ -927,11 +911,10 @@ msgid "Use custom opacity for the previews background"
msgstr "Usa l'opacità personalizzata per lo sfondo delle anteprime"
#: ui/BoxWindowPreviewOptions.ui.h:35
#, fuzzy
msgid ""
"If disabled, the previews background have the same opacity as the panel."
msgstr ""
"Se disabilitato, lo sfondo delle anteprime ha la stessa opacità del pannello"
"Se disabilitato, lo sfondo delle anteprime avrà la stessa opacità del pannello."
#: ui/BoxWindowPreviewOptions.ui.h:36
msgid "Close button and header position"
@@ -942,15 +925,12 @@ msgid "Display window preview headers"
msgstr "Visualizza le intestazioni di anteprima della finestra"
#: ui/BoxWindowPreviewOptions.ui.h:40
#, fuzzy
msgid "Icon size (px) of the window preview"
msgstr "Dimensione carattere (px) dei titoli di anteprima"
msgstr "Dimensioni dell'icona (px) dell'anteprima della finestra"
#: ui/BoxWindowPreviewOptions.ui.h:41
#, fuzzy
msgid "If disabled, the previews icon size will be based on headerbar size"
msgstr ""
"Se disabilitato, lo sfondo delle anteprime ha la stessa opacità del pannello"
msgstr "Se disabilitato, la dimensione dell'icona delle anteprime sarà basata sulla dimensione della barra di intestazione"
#: ui/BoxWindowPreviewOptions.ui.h:42
msgid "Font size (px) of the preview titles"
@@ -1003,25 +983,23 @@ msgstr ""
#: ui/SettingsAbout.ui.h:1
msgid "Info"
msgstr ""
msgstr "Informazioni"
#: ui/SettingsAbout.ui.h:2
#, fuzzy
msgid "Version"
msgstr "versione: "
msgstr "versione"
#: ui/SettingsAbout.ui.h:3
msgid "Source"
msgstr ""
msgstr "Sorgente"
#: ui/SettingsAbout.ui.h:4
msgid "GitHub"
msgstr "GitHub"
#: ui/SettingsAbout.ui.h:5
#, fuzzy
msgid "Export and Import"
msgstr "Esporta e importa impostazioni"
msgstr "Esporta e importa"
#: ui/SettingsAbout.ui.h:6
msgid "Export and import settings"
@@ -1067,9 +1045,8 @@ msgid "Toggle windows"
msgstr "Commuta le finestre"
#: ui/SettingsAction.ui.h:10
#, fuzzy
msgid "Scroll action"
msgstr "Azione scorrimento icona"
msgstr "Azione di scorrimento"
#: ui/SettingsAction.ui.h:11
msgid "Scroll panel action"
@@ -1109,9 +1086,8 @@ msgid "Same as panel"
msgstr "Stesso del pannello"
#: ui/SettingsAction.ui.h:20
#, fuzzy
msgid "Hotkey overlay"
msgstr "Sovrimpressione numero"
msgstr "Sovrapposizione tasti di scelta rapida"
#: ui/SettingsAction.ui.h:21
msgid "Use hotkeys to activate apps"
@@ -1126,9 +1102,8 @@ msgstr ""
"assieme a Shift e Ctrl."
#: ui/SettingsBehavior.ui.h:1
#, fuzzy
msgid "Applications"
msgstr "Non raggruppare applicazioni"
msgstr "Applicazioni"
#: ui/SettingsBehavior.ui.h:2
msgid "Show favorite applications"
@@ -1152,7 +1127,7 @@ msgstr "Non raggruppare applicazioni"
#: ui/SettingsBehavior.ui.h:7
msgid "Show notification counter badge"
msgstr ""
msgstr "Mostra il badge del contatore delle notifiche"
#: ui/SettingsBehavior.ui.h:8
msgid "Show window previews on hover"
@@ -1163,9 +1138,8 @@ msgid "Show tooltip on hover"
msgstr "Mostra suggerimento al passaggio"
#: ui/SettingsBehavior.ui.h:10
#, fuzzy
msgid "Isolate"
msgstr "Isola monitor"
msgstr "Isola"
#: ui/SettingsBehavior.ui.h:11
msgid "Isolate Workspaces"
@@ -1177,70 +1151,55 @@ msgstr "Isola monitor"
#: ui/SettingsBehavior.ui.h:13
msgid "Overview"
msgstr ""
msgstr "Panoramica"
#: ui/SettingsBehavior.ui.h:14
msgid "Click empty space to close overview"
msgstr ""
msgstr "Fare clic su uno spazio vuoto per chiudere la panoramica"
#: ui/SettingsBehavior.ui.h:15
msgid "Disable show overview on startup"
msgstr ""
msgstr "Disabilita mostra panoramica all'avvio"
#: ui/SettingsFineTune.ui.h:1
msgid "Font size"
msgstr ""
msgstr "Dimensione del font"
#: ui/SettingsFineTune.ui.h:2
msgid "Tray Font Size"
msgstr ""
msgstr "Dimensione font Tray"
#: ui/SettingsFineTune.ui.h:3
#, fuzzy
msgid "(0 = theme default)"
msgstr ""
"Dimens. Font Tray\n"
"(0 = predefinito)"
msgstr "(0 = tema predefinito)"
#: ui/SettingsFineTune.ui.h:4
#, fuzzy
msgid "LeftBox Font Size"
msgstr ""
"Dimens. Font LeftBox\n"
"(0 = predefinito)"
msgstr "Dimensione font casella sinistra"
#: ui/SettingsFineTune.ui.h:5
msgid "Padding"
msgstr ""
msgstr "Imbottitura"
#: ui/SettingsFineTune.ui.h:6
#, fuzzy
msgid "Tray Item Padding"
msgstr ""
"Spaziatura Icone Tray\n"
"(-1 = predefinito)"
msgstr "Imbottitura degli elementi della tray"
#: ui/SettingsFineTune.ui.h:7
#, fuzzy
msgid "(-1 = theme default)"
msgstr ""
"Spaziatura LeftBox\n"
"(-1 = predefinito)"
msgstr "(-1 = tema predefinito)"
#: ui/SettingsFineTune.ui.h:8
#, fuzzy
msgid "Status Icon Padding"
msgstr ""
"Spaziatura icone stato\n"
"(-1 = predefinito)"
msgstr "Imbottitura icona di stato"
#: ui/SettingsFineTune.ui.h:9
msgid "LeftBox Padding"
msgstr ""
msgstr "Imbottitura della casella sinistra"
#: ui/SettingsFineTune.ui.h:10
msgid "Animate"
msgstr ""
msgstr "Animato"
#: ui/SettingsFineTune.ui.h:11
msgid "Animate switching applications"
@@ -1252,49 +1211,43 @@ msgstr "Animazione apertura nuove finestre"
#: ui/SettingsFineTune.ui.h:13
msgid "Gnome functionality"
msgstr ""
msgstr "Funzionalità Gnome"
#: ui/SettingsFineTune.ui.h:14
#, fuzzy
msgid "Keep original gnome-shell dash"
msgstr "Mantieni dash originale di gnome-shell (schermata panoramica)"
msgstr "Mantieni dash originale di gnome-shell"
#: ui/SettingsFineTune.ui.h:15
msgid "(overview)"
msgstr ""
msgstr "(panoramica)"
#: ui/SettingsFineTune.ui.h:16
msgid "Keep original gnome-shell top panel"
msgstr "Mantieni il pannello superiore della gnome-shell originale"
#: ui/SettingsFineTune.ui.h:17
#, fuzzy
msgid "Activate panel menu buttons on click only"
msgstr ""
"Attiva i pulsanti del menu del pannello (ad es. Menu della data) solo al clic"
msgstr "Attiva i pulsanti del menu del pannello solo con un clic"
#: ui/SettingsFineTune.ui.h:18
#, fuzzy
msgid "(e.g. date menu)"
msgstr "Data e ora"
msgstr "(es. menu data)"
#: ui/SettingsFineTune.ui.h:19
msgid "Force Activities hot corner on primary monitor"
msgstr "Forza angolo attivo delle attività sul monitor principale"
#: ui/SettingsFineTune.ui.h:20
#, fuzzy
msgid "App icon secondary menu"
msgstr "Menu secondario (clic destro) delle icone"
msgstr "Menu secondario dell'icona dell'app"
#: ui/SettingsFineTune.ui.h:21
#, fuzzy
msgid "(right-click menu)"
msgstr "Menu secondario (clic destro) delle icone"
msgstr "(menù cliccabile con il tasto destro)"
#: ui/SettingsPosition.ui.h:1
msgid "Panel"
msgstr ""
msgstr "Pannello"
#: ui/SettingsPosition.ui.h:2
msgid "Display the main panel on"
@@ -1313,14 +1266,12 @@ msgid "Hide and reveal the panel according to preferences"
msgstr "Mostra e nascondi il pannello secondo le preferenze"
#: ui/SettingsPosition.ui.h:6
#, fuzzy
msgid "Order and Position on monitors"
msgstr "Ordinamento e posizione sullo schermo"
msgstr "Ordinamento e posizione sui monitor"
#: ui/SettingsPosition.ui.h:7
#, fuzzy
msgid "Monitor"
msgstr "Monitor "
msgstr "Monitor"
#: ui/SettingsPosition.ui.h:8
msgid "Apply changes to all monitors"
@@ -1331,79 +1282,57 @@ msgid "Panel screen position"
msgstr "Posizione pannello sullo schermo"
#: ui/SettingsPosition.ui.h:14
#, fuzzy
msgid "Panel thickness"
msgstr "Pannello Intellihide"
msgstr "Spessore del pannello"
#: ui/SettingsPosition.ui.h:15
#, fuzzy
msgid "(default is 48)"
msgstr ""
"Dimensione pannello\n"
"(predefinito 48)"
msgstr "(predefinito è 48)"
#: ui/SettingsPosition.ui.h:17
#, no-c-format
msgid "Panel length (%)"
msgstr ""
msgstr "Lunghezza del pannello (%)"
#: ui/SettingsPosition.ui.h:18
#, fuzzy
msgid "(default is 100)"
msgstr ""
"Dimensione pannello\n"
"(predefinito 48)"
msgstr "(predefinito è 100)"
#: ui/SettingsPosition.ui.h:19
msgid "Anchor"
msgstr ""
msgstr "Ancora"
#: ui/SettingsPosition.ui.h:23
#, fuzzy
msgid "Taskbar Display"
msgstr "Taskbar"
msgstr "Visualizzazione Taskbar"
#: ui/SettingsStyle.ui.h:1
msgid "AppIcon style"
msgstr ""
msgstr "Stile icona dell'app"
#: ui/SettingsStyle.ui.h:2
#, fuzzy
msgid "App Icon Margin"
msgstr ""
"Margine icone app\n"
"(predefinito 8)"
msgstr "Margine icona app"
#: ui/SettingsStyle.ui.h:3
#, fuzzy
msgid "(default is 8)"
msgstr ""
"Dimensione pannello\n"
"(predefinito 48)"
msgstr "(predefinito è 8)"
#: ui/SettingsStyle.ui.h:4
#, fuzzy
msgid "App Icon Padding"
msgstr ""
"Spaziatura icone app\n"
"(predefinito 4)"
msgstr "Imbottitura delle icone dell'app"
#: ui/SettingsStyle.ui.h:5
#, fuzzy
msgid "(default is 4)"
msgstr ""
"Dimensione pannello\n"
"(predefinito 48)"
msgstr "(predefinito è 4)"
#: ui/SettingsStyle.ui.h:6
#, fuzzy
msgid "Animate hovering app icons"
msgstr "Animazione passaggio tra applicazioni"
msgstr "Animazione passaggio tra le icone delle app"
#: ui/SettingsStyle.ui.h:7
#, fuzzy
msgid "Running indicator"
msgstr "Posizione indicatore di esecuzione"
msgstr "Indicatore di esecuzione"
#: ui/SettingsStyle.ui.h:8
msgid "Running indicator position"
@@ -1446,14 +1375,12 @@ msgid "Running indicator style (Unfocused apps)"
msgstr "Stile indicatore di esecuzione (app senza focus)"
#: ui/SettingsStyle.ui.h:22
#, fuzzy
msgid "Panel style"
msgstr "Pannello Intellihide"
msgstr "Stile del pannello"
#: ui/SettingsStyle.ui.h:23
#, fuzzy
msgid "Override panel theme background color"
msgstr "Ignora il colore di sfondo del pannello "
msgstr "Sostituisci il colore di sfondo del tema del pannello"
#: ui/SettingsStyle.ui.h:24
msgid "Override panel theme background opacity"
@@ -1473,9 +1400,8 @@ msgid "Change opacity when a window gets close to the panel"
msgstr "Cambia l'opacità quando una finestra è vicina al pannello"
#: ui/SettingsStyle.ui.h:30
#, fuzzy
msgid "Override panel theme gradient"
msgstr "Ignora gradiente del pannello "
msgstr "Sostituisci il gradiente del tema del pannello"
#: ui/SettingsStyle.ui.h:32
#, no-c-format
@@ -1607,7 +1533,7 @@ msgstr "Isola aree di lavoro e monitor nelle impostazioni di Cambio applicazione
#~ "about/\">Leggi di più</a>"
#~ msgid "About"
#~ msgstr "Informazioni su"
#~ msgstr "Informazioni"
#~ msgid "Top, with plugin icons collapsed to bottom"
#~ msgstr "In alto, con le icone dei plugin raggruppate in bassoa"

295
po/pl.po
View File

@@ -20,15 +20,15 @@ msgstr ""
#: prefs.js:247
msgid "Show Desktop button height (px)"
msgstr "Wysokość przycisku <i>Pokaż pulpit</i> (px)"
msgstr "Wysokość przycisku <Pokaż pulpit (px)"
#: prefs.js:247
msgid "Show Desktop button width (px)"
msgstr "Szerokość przycisku <i>Pokaż pulpit</i> (px)"
msgstr "Szerokość przycisku Pokaż pulpit (px)"
#: prefs.js:259
msgid "Unavailable when gnome-shell top panel is present"
msgstr ""
msgstr "Niedostępne, gdy górna belka gnome-shell jest widoczna"
#: prefs.js:317 ui/SettingsPosition.ui.h:12 ui/SettingsStyle.ui.h:11
msgid "Left"
@@ -36,7 +36,7 @@ msgstr "Lewo"
#: prefs.js:318
msgid "Center"
msgstr ""
msgstr "Wyśrodkowane"
#: prefs.js:319 ui/SettingsPosition.ui.h:13 ui/SettingsStyle.ui.h:12
msgid "Right"
@@ -49,7 +49,7 @@ msgstr "Góra"
#: prefs.js:322 prefs.js:327 ui/SettingsPosition.ui.h:21
msgid "Middle"
msgstr ""
msgstr "Po środku"
#: prefs.js:323 ui/BoxWindowPreviewOptions.ui.h:37 ui/SettingsPosition.ui.h:10
#: ui/SettingsStyle.ui.h:9
@@ -58,101 +58,91 @@ msgstr "Dół"
#: prefs.js:326 ui/SettingsPosition.ui.h:20
msgid "Start"
msgstr ""
msgstr "Początek"
#: prefs.js:328 ui/SettingsPosition.ui.h:22
msgid "End"
msgstr ""
msgstr "Koniec"
#: prefs.js:413
#, fuzzy
msgid "Show Applications button"
msgstr "Opcje wyświetlania programów"
#: prefs.js:414
#, fuzzy
msgid "Activities button"
msgstr "Pokaż przycisk <i>Podgląd</i>"
msgstr "Przycisk Podgląd"
#: prefs.js:415
#, fuzzy
msgid "Taskbar"
msgstr "Górna strona paska zadań"
#: prefs.js:416
msgid "Date menu"
msgstr ""
msgstr "Menu daty"
#: prefs.js:417
#, fuzzy
msgid "System menu"
msgstr "Monitor procesów"
#: prefs.js:418
#, fuzzy
msgid "Left box"
msgstr "Lewo"
msgstr "Po lewej"
#: prefs.js:419
msgid "Center box"
msgstr ""
msgstr "Wyśrodkowanie do okna"
#: prefs.js:420
#, fuzzy
msgid "Right box"
msgstr "Prawo"
msgstr "Po prawej"
#: prefs.js:421
#, fuzzy
msgid "Desktop button"
msgstr "Pokaż przycisk <i>Pulpit</i>"
msgstr "Przycisk Pulpit"
#: prefs.js:427
msgid "Move up"
msgstr ""
msgstr "W górę"
#: prefs.js:429
msgid "Move down"
msgstr ""
msgstr "W dół"
#: prefs.js:431
msgid "Visible"
msgstr ""
msgstr "Widoczny"
#: prefs.js:432
#, fuzzy
msgid "Select element position"
msgstr "Położenie panelu na ekranie"
#: prefs.js:443
msgid "Stacked to top"
msgstr ""
msgstr "Przypięto do góry"
#: prefs.js:443
msgid "Stacked to left"
msgstr ""
msgstr "Przypięto do lewej"
#: prefs.js:444
msgid "Stacked to bottom"
msgstr ""
msgstr "Przypięto do dołu"
#: prefs.js:444
msgid "Stacked to right"
msgstr ""
msgstr "Przypięto do prawej"
#: prefs.js:445
msgid "Centered"
msgstr ""
msgstr "Wyśrodkowano"
#: prefs.js:446
#, fuzzy
msgid "Monitor Center"
msgstr "Monitor "
#: prefs.js:465
#, fuzzy
msgid "More options"
msgstr "Opcje zasilania"
msgstr "Więcej opcji"
#: prefs.js:497
msgid "Reset to defaults"
@@ -160,11 +150,11 @@ msgstr "Przywróć domyślne"
#: prefs.js:520
msgid "Show Applications options"
msgstr "Opcje wyświetlania programów"
msgstr "Pokaż opcje programów"
#: prefs.js:530
msgid "Open icon"
msgstr ""
msgstr "Wybierz ikonę"
#: prefs.js:577
msgid "Show Desktop options"
@@ -173,37 +163,36 @@ msgstr "Pokaż opcje pulpitu"
#: prefs.js:661
#, javascript-format
msgid "%d ms"
msgstr ""
msgstr "%d ms"
#: prefs.js:666
#, javascript-format
msgid "%d °"
msgstr ""
msgstr "%d °"
#: prefs.js:671 prefs.js:676
#, javascript-format
msgid "%d %%"
msgstr ""
msgstr "%d %%"
#: prefs.js:681
#, javascript-format
msgid "%.1f"
msgstr ""
msgstr "%.1f"
#: prefs.js:686
#, javascript-format
msgid "%d icon"
msgid_plural "%d icons"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[0] "%d ikon"
msgstr[1] "%d ikona"
msgstr[2] "%d ikon"
#: prefs.js:782
msgid "Running Indicator Options"
msgstr "Opcje wskaźnika aktywnych programów"
#: prefs.js:928
#, fuzzy
msgid "Primary monitor"
msgstr "Domyślny (Główny monitor)"
@@ -252,7 +241,6 @@ msgid "Advanced Options"
msgstr "Opcje zaawansowane"
#: prefs.js:2040
#, fuzzy
msgid "App icon animation options"
msgstr "Opcje wyświetlania programów"
@@ -307,7 +295,7 @@ msgstr "Pliki"
#: appIcons.js:1834
msgid "Extensions"
msgstr ""
msgstr "Rozszerzenia"
#: appIcons.js:1839
msgid "Settings"
@@ -339,49 +327,47 @@ msgstr "Jeszcze nic!"
#: ui/BoxAdvancedOptions.ui.h:2
msgid "For real..."
msgstr ""
msgstr "Na pewno..."
#: ui/BoxAnimateAppIconHoverOptions.ui.h:1
#, fuzzy
msgid "Animation type"
msgstr "Długość animacji (ms)"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:2
msgid "Simple"
msgstr ""
msgstr "Prosta"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:3
msgid "Ripple"
msgstr ""
msgstr "Fala"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:4
msgid "Plank"
msgstr ""
msgstr "Mała fala"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:5
msgid "Duration"
msgstr ""
msgstr "Trwanie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:6
#, fuzzy
msgid "Rotation"
msgstr "Położenie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:7
msgid "Travel"
msgstr ""
msgstr "Przemieszczanie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:8
msgid "Zoom"
msgstr ""
msgstr "Powiększenie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:9
msgid "Convexity"
msgstr ""
msgstr "Wypukłość"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:10
msgid "Extent"
msgstr ""
msgstr "Zakres"
#: ui/BoxDotOptions.ui.h:1
msgid "Highlight focused application"
@@ -400,7 +386,6 @@ msgid "Highlight opacity"
msgstr "Przeźroczystość podświetlenia"
#: ui/BoxDotOptions.ui.h:5
#, fuzzy
msgid "Indicator size (px)"
msgstr "Wysokość wskaźnika (px)"
@@ -503,21 +488,16 @@ msgid "Font color of the application titles"
msgstr "Kolor czcionki"
#: ui/BoxGroupAppsOptions.ui.h:9
#, fuzzy
msgid "Font color of the minimized application titles"
msgstr "Kolor czcionki"
#: ui/BoxGroupAppsOptions.ui.h:10
#, fuzzy
msgid "Maximum width (px) of the application titles"
msgstr "Maksymalna szerokość (px) etykiet (domyślnie 160)"
#: ui/BoxGroupAppsOptions.ui.h:11
#, fuzzy
msgid "(default is 160)"
msgstr ""
"Rozmiar panelu\n"
"(domyślnie 48)"
msgstr "(domyślnie 160)"
#: ui/BoxGroupAppsOptions.ui.h:12
msgid "Use a fixed width for the application titles"
@@ -542,7 +522,6 @@ msgid "Use the favorite icons as application launchers"
msgstr "Oddziel ulubione od uruchomionych programów"
#: ui/BoxIntellihideOptions.ui.h:1
#, fuzzy
msgid "Only hide the panel when it is obstructed by windows"
msgstr "Ukryj panel tylko wtedy, gdy jest zasłonięty przez okna "
@@ -567,12 +546,10 @@ msgid "Allow the panel to be revealed while in fullscreen mode"
msgstr "Pozwól, aby panel został odsłonięty w trybie pełnoekranowym"
#: ui/BoxIntellihideOptions.ui.h:10
#, fuzzy
msgid "Only hide secondary panels"
msgstr "Ukryj wyłącznie drugorzędne panele (dla wielu monitorów)"
#: ui/BoxIntellihideOptions.ui.h:11
#, fuzzy
msgid "(requires multi-monitors option)"
msgstr "Opcje wielu monitorów"
@@ -637,7 +614,6 @@ msgid "Toggle single / Preview multiple"
msgstr "Przełącz pojedyncze / Podejrzyj wiele"
#: ui/BoxMiddleClickOptions.ui.h:9 ui/SettingsAction.ui.h:6
#, fuzzy
msgid "Toggle single / Cycle multiple"
msgstr "Przełącz pojedyncze / Podejrzyj wiele"
@@ -655,9 +631,7 @@ msgstr "Kliknięcie środkowym przyciskiem + Shift"
#: ui/BoxMiddleClickOptions.ui.h:14
msgid "Behavior for Shift+Middle-Click."
msgstr ""
"Konfiguruje działanie kliknięcia środkowym przyciskiem z przytrzymanym "
"klawiszem Shift."
msgstr "Zachowanie dla Shift+środkowy przycisk"
#: ui/BoxOverlayShortcut.ui.h:1
msgid "Hotkeys prefix"
@@ -749,40 +723,39 @@ msgstr "Użyj tą wartość by ograniczyć liczbę przechwyceń przewijania mysz
#: ui/BoxScrollPanelOptions.ui.h:3
msgid "Show popup when changing workspace"
msgstr ""
msgstr "Pokaż wyskakujące okno podczas zmiany przestrzeni roboczej"
#: ui/BoxScrollPanelOptions.ui.h:4
msgid "This affects workspace popup when scrolling on the panel only."
msgstr ""
msgstr "Ma wpływ na wyskakujące okno w przestrzeni roboczej tylko na panelu"
#: ui/BoxSecondaryMenuOptions.ui.h:1
msgid "Integrate <i>AppMenu</i> items"
msgstr "Zintegruj elementy <i>menu programów</i>"
msgstr "Zintegruj elementy <i>Menu programów</i>"
#: ui/BoxSecondaryMenuOptions.ui.h:2
msgid "<i>Show Details</i> menu item"
msgstr "<i>Wyświetl szczegóły</i>"
#: ui/BoxShowApplicationsOptions.ui.h:1
#, fuzzy
msgid "Show Applications icon"
msgstr "Opcje wyświetlania programów"
#: ui/BoxShowApplicationsOptions.ui.h:2
msgid "Show Applications icon side padding (px)"
msgstr "Wewnętrzny margines przycisku <i>Pokaż programy</i> (px)"
msgstr "Wewnętrzny margines przycisku Pokaż programy (px)"
#: ui/BoxShowApplicationsOptions.ui.h:4
msgid "Override escape key and return to desktop"
msgstr ""
msgstr "Nadpisz przycisk wyjścia i wróć do pulpitu"
#: ui/BoxShowDesktopOptions.ui.h:1
msgid "Override Show Desktop line color"
msgstr ""
msgstr "Nadpisz kolor przycisku Pokaż pulpit"
#: ui/BoxShowDesktopOptions.ui.h:2
msgid "Reveal the desktop when hovering the Show Desktop button"
msgstr "Pokaż pulpit po najechaniu na przycisk <i>Pokaż pulpit</i>"
msgstr "Pokaż pulpit po najechaniu na przycisk Pokaż pulpit"
#: ui/BoxShowDesktopOptions.ui.h:3
msgid "Delay before revealing the desktop (ms)"
@@ -793,22 +766,20 @@ msgid "Fade duration (ms)"
msgstr "Opóźnienie ukrywania (ms)"
#: ui/BoxWindowPreviewOptions.ui.h:1
#, fuzzy
msgid "Time (ms) before showing"
msgstr "Opóźnienie (ms) przed pokazaniem (domyślnie 100)"
#: ui/BoxWindowPreviewOptions.ui.h:2
msgid "(400 is default)"
msgstr ""
msgstr "(Domyślnie 400)"
#: ui/BoxWindowPreviewOptions.ui.h:3
#, fuzzy
msgid "Time (ms) before hiding"
msgstr "Opóźnienie ukrywania miniatur (domyślnie 100 ms)"
#: ui/BoxWindowPreviewOptions.ui.h:4
msgid "(100 is default)"
msgstr ""
msgstr "(Domyślnie 100)"
#: ui/BoxWindowPreviewOptions.ui.h:5
msgid "Immediate on application icon click"
@@ -932,7 +903,6 @@ msgid "Use custom opacity for the previews background"
msgstr "Własna przeźroczystość dla tła podglądu okna"
#: ui/BoxWindowPreviewOptions.ui.h:35
#, fuzzy
msgid ""
"If disabled, the previews background have the same opacity as the panel."
msgstr ""
@@ -947,12 +917,10 @@ msgid "Display window preview headers"
msgstr "Wyświetlaj nagłówek w podglądzie okna"
#: ui/BoxWindowPreviewOptions.ui.h:40
#, fuzzy
msgid "Icon size (px) of the window preview"
msgstr "Wielkość czcionki etykiet (px) etykiet podglądu"
#: ui/BoxWindowPreviewOptions.ui.h:41
#, fuzzy
msgid "If disabled, the previews icon size will be based on headerbar size"
msgstr ""
"Jeśli wyłączone, podgląd okna będzie mieć taką samą przeźroczystość jak panel"
@@ -1002,31 +970,26 @@ msgid "Window peeking mode opacity"
msgstr "Przeźroczystość podglądanych okien"
#: ui/BoxWindowPreviewOptions.ui.h:56
msgid ""
"All windows except for the peeked one have their opacity set to the same "
"value."
msgstr ""
"Wszystkie okna, za wyjątkiem okna głównego, mają tą samą przeźroczystość."
msgid "All windows except for the peeked one have their opacity set to the same value."
msgstr "Wszystkie okna, za wyjątkiem okna głównego, mają tą samą przeźroczystość."
#: ui/SettingsAbout.ui.h:1
msgid "Info"
msgstr ""
msgstr "Info"
#: ui/SettingsAbout.ui.h:2
#, fuzzy
msgid "Version"
msgstr "wersja: "
msgstr "Wersja"
#: ui/SettingsAbout.ui.h:3
msgid "Source"
msgstr ""
msgstr "Źródło"
#: ui/SettingsAbout.ui.h:4
msgid "GitHub"
msgstr "GitHub"
#: ui/SettingsAbout.ui.h:5
#, fuzzy
msgid "Export and Import"
msgstr "Ustawienia eksportu i importu"
@@ -1074,7 +1037,6 @@ msgid "Toggle windows"
msgstr "Przełącz okna"
#: ui/SettingsAction.ui.h:10
#, fuzzy
msgid "Scroll action"
msgstr "Działanie przewijania na ikonie"
@@ -1100,7 +1062,7 @@ msgstr "Przełącz między oknami"
#: ui/SettingsAction.ui.h:16
msgid "Change volume"
msgstr ""
msgstr "Zmień głośność"
#: ui/SettingsAction.ui.h:17
msgid "Scroll icon action"
@@ -1112,10 +1074,9 @@ msgstr "Reakcja na przewijanie myszą nad ikoną programu."
#: ui/SettingsAction.ui.h:19
msgid "Same as panel"
msgstr ""
msgstr "Tak jak panel"
#: ui/SettingsAction.ui.h:20
#, fuzzy
msgid "Hotkey overlay"
msgstr "Pokazywanie cyfr"
@@ -1132,7 +1093,6 @@ msgstr ""
"Super+(0-9) - możliwe użycie razem z Shift i Ctrl."
#: ui/SettingsBehavior.ui.h:1
#, fuzzy
msgid "Applications"
msgstr "Tryb listy (nie scalaj ikon)"
@@ -1141,7 +1101,6 @@ msgid "Show favorite applications"
msgstr "Pokaż ulubione programy"
#: ui/SettingsBehavior.ui.h:3
#, fuzzy
msgid "Show favorite applications on secondary panels"
msgstr "Pokaż ulubione programy"
@@ -1159,7 +1118,7 @@ msgstr "Tryb listy (nie scalaj ikon)"
#: ui/SettingsBehavior.ui.h:7
msgid "Show notification counter badge"
msgstr ""
msgstr "Pokaż licznik powiadomień"
#: ui/SettingsBehavior.ui.h:8
msgid "Show window previews on hover"
@@ -1170,7 +1129,6 @@ msgid "Show tooltip on hover"
msgstr "Pokaż szczegóły po najechaniu myszą"
#: ui/SettingsBehavior.ui.h:10
#, fuzzy
msgid "Isolate"
msgstr "Niezależne obszary robocze"
@@ -1184,33 +1142,29 @@ msgstr "Niezależne obszary robocze"
#: ui/SettingsBehavior.ui.h:13
msgid "Overview"
msgstr ""
msgstr "Przegląd"
#: ui/SettingsBehavior.ui.h:14
msgid "Click empty space to close overview"
msgstr ""
msgstr "Kliknij na pustą przestrzeń, aby zamknąć podgląd"
#: ui/SettingsBehavior.ui.h:15
msgid "Disable show overview on startup"
msgstr ""
msgstr "Wyłącz pokazywanie podglądu przy uruchomieniu"
#: ui/SettingsFineTune.ui.h:1
msgid "Font size"
msgstr ""
msgstr "Rozmiar czcionki"
#: ui/SettingsFineTune.ui.h:2
msgid "Tray Font Size"
msgstr ""
msgstr "Rozmiar czcionki zasobnika"
#: ui/SettingsFineTune.ui.h:3
#, fuzzy
msgid "(0 = theme default)"
msgstr ""
"Rozmiar czcionki zasobnika\n"
"(0 - domyślne motywu)"
msgstr "(0 - domyślne motywu)"
#: ui/SettingsFineTune.ui.h:4
#, fuzzy
msgid "LeftBox Font Size"
msgstr ""
"Rozmiar czcionki lewej strony panelu\n"
@@ -1218,36 +1172,27 @@ msgstr ""
#: ui/SettingsFineTune.ui.h:5
msgid "Padding"
msgstr ""
msgstr "Odstęp"
#: ui/SettingsFineTune.ui.h:6
#, fuzzy
msgid "Tray Item Padding"
msgstr ""
"Odstęp elementów zasobnika\n"
"(-1 - domyślne motywu)"
msgstr "Odstęp elementów zasobnika"
#: ui/SettingsFineTune.ui.h:7
#, fuzzy
msgid "(-1 = theme default)"
msgstr ""
"Odstęp elementów lewej strony panelu\n"
"(-1 - domyślne motywu)"
msgstr "(-1 - domyślne motywu)"
#: ui/SettingsFineTune.ui.h:8
#, fuzzy
msgid "Status Icon Padding"
msgstr ""
"Odstęp elementów menu systemowego\n"
"(-1 - domyślne motywu)"
msgstr "Odstęp ikon stanu"
#: ui/SettingsFineTune.ui.h:9
msgid "LeftBox Padding"
msgstr ""
msgstr "Do lewej"
#: ui/SettingsFineTune.ui.h:10
msgid "Animate"
msgstr ""
msgstr "Animacja"
#: ui/SettingsFineTune.ui.h:11
msgid "Animate switching applications"
@@ -1259,49 +1204,44 @@ msgstr "Animuj uruchamianie nowych programów"
#: ui/SettingsFineTune.ui.h:13
msgid "Gnome functionality"
msgstr ""
msgstr "Funkcja Gnome"
#: ui/SettingsFineTune.ui.h:14
#, fuzzy
msgid "Keep original gnome-shell dash"
msgstr "Zachowaj oryginalny panel (podgląd)"
#: ui/SettingsFineTune.ui.h:15
msgid "(overview)"
msgstr ""
msgstr "(przegląd)"
#: ui/SettingsFineTune.ui.h:16
#, fuzzy
msgid "Keep original gnome-shell top panel"
msgstr "Zachowaj oryginalny panel (podgląd)"
#: ui/SettingsFineTune.ui.h:17
#, fuzzy
msgid "Activate panel menu buttons on click only"
msgstr ""
"Aktywuj przyciski menu panelu (np. menu kalendarza) tylko po kliknięciu"
#: ui/SettingsFineTune.ui.h:18
msgid "(e.g. date menu)"
msgstr ""
msgstr "(np. menu daty)"
#: ui/SettingsFineTune.ui.h:19
msgid "Force Activities hot corner on primary monitor"
msgstr ""
msgstr "Wymuś Aktywności gorącego rogu na głównym monitorze"
#: ui/SettingsFineTune.ui.h:20
#, fuzzy
msgid "App icon secondary menu"
msgstr "Menu kontekstowe programu (prawy przycisk myszy)"
#: ui/SettingsFineTune.ui.h:21
#, fuzzy
msgid "(right-click menu)"
msgstr "Menu kontekstowe programu (prawy przycisk myszy)"
msgstr "(prawy przycisk myszy)"
#: ui/SettingsPosition.ui.h:1
msgid "Panel"
msgstr ""
msgstr "Panel"
#: ui/SettingsPosition.ui.h:2
msgid "Display the main panel on"
@@ -1321,93 +1261,70 @@ msgstr "Ukryj i odsłoń panel według preferencji"
#: ui/SettingsPosition.ui.h:6
msgid "Order and Position on monitors"
msgstr ""
msgstr "Kolejność i pozycja na monitorach"
#: ui/SettingsPosition.ui.h:7
#, fuzzy
msgid "Monitor"
msgstr "Monitor "
msgstr "Monitor"
#: ui/SettingsPosition.ui.h:8
#, fuzzy
msgid "Apply changes to all monitors"
msgstr "Wyświetl panel na wszystkich monitorach"
msgstr "Zastosuj zmiany na wszyskich monitorach"
#: ui/SettingsPosition.ui.h:9
msgid "Panel screen position"
msgstr "Położenie panelu na ekranie"
#: ui/SettingsPosition.ui.h:14
#, fuzzy
msgid "Panel thickness"
msgstr "Inteligentne ukrywanie panelu"
#: ui/SettingsPosition.ui.h:15
#, fuzzy
msgid "(default is 48)"
msgstr ""
"Rozmiar panelu\n"
"(domyślnie 48)"
msgstr "(domyślnie 48)"
#: ui/SettingsPosition.ui.h:17
#, no-c-format
msgid "Panel length (%)"
msgstr ""
msgstr "Długość panela (%)"
#: ui/SettingsPosition.ui.h:18
#, fuzzy
msgid "(default is 100)"
msgstr ""
"Rozmiar panelu\n"
"(domyślnie 48)"
msgstr "(domyślnie 100)"
#: ui/SettingsPosition.ui.h:19
msgid "Anchor"
msgstr ""
msgstr "Zakotwiczenie"
#: ui/SettingsPosition.ui.h:23
msgid "Taskbar Display"
msgstr ""
msgstr "Wyświetlanie paska zadań"
#: ui/SettingsStyle.ui.h:1
msgid "AppIcon style"
msgstr ""
msgstr "Styl ikon aplikacji"
#: ui/SettingsStyle.ui.h:2
#, fuzzy
msgid "App Icon Margin"
msgstr ""
"Odstęp między\n"
"ikonami (domyślnie 8)"
msgstr "Odstęp między ikonami"
#: ui/SettingsStyle.ui.h:3
#, fuzzy
msgid "(default is 8)"
msgstr ""
"Rozmiar panelu\n"
"(domyślnie 48)"
msgstr "(domyślnie 8)"
#: ui/SettingsStyle.ui.h:4
#, fuzzy
msgid "App Icon Padding"
msgstr ""
"Wypełnienie wnętrza\n"
"ikony (domyślnie 4)"
msgstr "Wypełnienie ikony aplikacji"
#: ui/SettingsStyle.ui.h:5
#, fuzzy
msgid "(default is 4)"
msgstr ""
"Rozmiar panelu\n"
"(domyślnie 48)"
msgstr "(domyślnie 4)"
#: ui/SettingsStyle.ui.h:6
#, fuzzy
msgid "Animate hovering app icons"
msgstr "Animuj przełączenie programów"
#: ui/SettingsStyle.ui.h:7
#, fuzzy
msgid "Running indicator"
msgstr "Pozycja wskaźnika aktywnych okien"
@@ -1441,7 +1358,7 @@ msgstr "Ciągły"
#: ui/SettingsStyle.ui.h:19
msgid "Ciliora"
msgstr "Ciliora"
msgstr "Rzęski"
#: ui/SettingsStyle.ui.h:20
msgid "Metro"
@@ -1452,12 +1369,10 @@ msgid "Running indicator style (Unfocused apps)"
msgstr "Wygląd wskaźnika (okno na drugim planie)"
#: ui/SettingsStyle.ui.h:22
#, fuzzy
msgid "Panel style"
msgstr "Inteligentne ukrywanie panelu"
#: ui/SettingsStyle.ui.h:23
#, fuzzy
msgid "Override panel theme background color"
msgstr "Zastąp kolor panelu "
@@ -1479,19 +1394,18 @@ msgid "Change opacity when a window gets close to the panel"
msgstr "Zmiana przeźroczystości w kontakcie z oknem"
#: ui/SettingsStyle.ui.h:30
#, fuzzy
msgid "Override panel theme gradient"
msgstr "Zastąp kolor panelu gradientem "
#: ui/SettingsStyle.ui.h:32
#, no-c-format
msgid "Gradient top color and opacity (%)"
msgstr "Góra, kolor i przeźroczystość (%)"
msgstr "Gradient górnego koloru i przeźroczystość (%)"
#: ui/SettingsStyle.ui.h:34
#, no-c-format
msgid "Gradient bottom color and opacity (%)"
msgstr "Dół, kolor i przeźroczystość (%)"
msgstr "Gradient dolnego koloru i przeźroczystość (%)"
msgid "Weekday"
msgstr "Dzień tygodnia"
@@ -1600,8 +1514,7 @@ msgstr "Izoluj obszary robocze i monitory w ustawieniach Przełączanie program
#~ msgstr "Wyloguj"
#~ msgid "Update successful, please restart GNOME Shell"
#~ msgstr ""
#~ "Aktualizacja zakończona pomyślnie, prosimy zrestartować powłokę GNOME"
#~ msgstr "Aktualizacja zakończona pomyślnie, prosimy zrestartować powłokę GNOME"
#~ msgid "Restart GNOME Shell"
#~ msgstr "Zrestartuj powłokę GNOME"
@@ -1622,13 +1535,13 @@ msgstr "Izoluj obszary robocze i monitory w ustawieniach Przełączanie program
#~ msgstr "Menu systemowe na wszystkich monitorach"
#~ msgid "Current Show Applications icon"
#~ msgstr "Aktualna ikona przycisku <i>Pokaż programy</i>"
#~ msgstr "Aktualna ikona przycisku Pokaż programy"
#~ msgid "Select a Show Applications image icon"
#~ msgstr "Wybierz ikonę przycisku <i>Pokaż programy</i>"
#~ msgstr "Wybierz ikonę przycisku Pokaż programy"
#~ msgid "Custom Show Applications image icon"
#~ msgstr "Wybierz własną ikonę przycisku <i>Pokaż programy</i>"
#~ msgstr "Wybierz własną ikonę przycisku Pokaż programy"
#~ msgid "Taskbar position"
#~ msgstr "Położenie paska zadań"
@@ -1657,6 +1570,18 @@ msgstr "Izoluj obszary robocze i monitory w ustawieniach Przełączanie program
#~ msgid "Fine-Tune"
#~ msgstr "Dostrajanie"
#~ msgid "Position"
#~ msgstr "Pozycja"
#~ msgid "Icon style"
#~ msgstr "Styl ikony"
#~ msgid "Normal"
#~ msgstr "Normalna"
#~ msgid "Symbolic"
#~ msgstr "Symboliczna"
#~ msgid ""
#~ "This allows you to update the extension directly from the GitHub "
#~ "repository."

View File

@@ -69,7 +69,7 @@ msgstr "Final"
#: prefs.js:413
msgid "Show Applications button"
msgstr "Mostrar botão de plicações"
msgstr "Mostrar botão de aplicações"
#: prefs.js:414
msgid "Activities button"
@@ -1136,12 +1136,12 @@ msgstr ""
#: ui/SettingsBehavior.ui.h:1
#, fuzzy
msgid "Applications"
msgstr "Mostrar botão de plicações"
msgstr "Mostrar botão de aplicações"
#: ui/SettingsBehavior.ui.h:2
#, fuzzy
msgid "Show favorite applications"
msgstr "Mostrar botão de plicações"
msgstr "Mostrar botão de aplicações"
#: ui/SettingsBehavior.ui.h:3
msgid "Show favorite applications on secondary panels"
@@ -1150,7 +1150,7 @@ msgstr ""
#: ui/SettingsBehavior.ui.h:4
#, fuzzy
msgid "Show running applications"
msgstr "Mostrar botão de plicações"
msgstr "Mostrar botão de aplicações"
#: ui/SettingsBehavior.ui.h:5
msgid "Show <i>AppMenu</i> button"

636
po/ru.po

File diff suppressed because it is too large Load Diff

250
po/sk.po
View File

@@ -2,29 +2,30 @@
# Copyright (C) 2018
# This file is distributed under the same license as the dash-to-panel package.
# Jose Riha <jose1711 gmail com>, 2021.
# Jozef Gaal <preklady@mayday.sk>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-08 08:31-0500\n"
"PO-Revision-Date: 2021-08-05 14:16+0200\n"
"Last-Translator: Jose Riha <jose1711@gmail.com>\n"
"Language-Team: \n"
"PO-Revision-Date: 2024-12-07 02:10+0100\n"
"Last-Translator: Jozef Gaal <preklady@mayday.sk>\n"
"Language-Team: Jozef Gaal <preklady@mayday.sk>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n"
"X-Generator: Poedit 3.4.2\n"
#: prefs.js:247
msgid "Show Desktop button height (px)"
msgstr "Výška tlačidla plochy (px)"
msgstr "Výška tlačidla zobrazenia plochy (px)"
#: prefs.js:247
msgid "Show Desktop button width (px)"
msgstr "Šírka tlačidla plochy (px)"
msgstr "Šírka tlačidla zobrazenia plochy (px)"
#: prefs.js:259
msgid "Unavailable when gnome-shell top panel is present"
@@ -78,11 +79,11 @@ msgstr "Zoznam úloh"
#: prefs.js:416
msgid "Date menu"
msgstr "Menu hodín"
msgstr "Ponuka dátumu"
#: prefs.js:417
msgid "System menu"
msgstr "Systémové menu"
msgstr "Ponuka systému"
#: prefs.js:418
msgid "Left box"
@@ -118,19 +119,19 @@ msgstr "Vyberte umiestnenie prvku"
#: prefs.js:443
msgid "Stacked to top"
msgstr "Zvrchu"
msgstr "Hore"
#: prefs.js:443
msgid "Stacked to left"
msgstr "Zľava"
msgstr "Vľavo"
#: prefs.js:444
msgid "Stacked to bottom"
msgstr "Zdola"
msgstr "Dole"
#: prefs.js:444
msgid "Stacked to right"
msgstr "Sprava"
msgstr "Vpravo"
#: prefs.js:445
msgid "Centered"
@@ -158,7 +159,7 @@ msgstr "Otvoriť ikonu"
#: prefs.js:577
msgid "Show Desktop options"
msgstr "Nastavenia plochy"
msgstr "Nastavenia tlačidla zobrazenia plochy"
#: prefs.js:661
#, javascript-format
@@ -168,7 +169,7 @@ msgstr "%d ms"
#: prefs.js:666
#, javascript-format
msgid "%d °"
msgstr ""
msgstr "%d °"
#: prefs.js:671 prefs.js:676
#, javascript-format
@@ -190,7 +191,7 @@ msgstr[2] "%d ikon"
#: prefs.js:782
msgid "Running Indicator Options"
msgstr "Možnosti indikátora bežiacich aplikácií"
msgstr "Možnosti indikátora činnosti"
#: prefs.js:928
msgid "Primary monitor"
@@ -234,7 +235,7 @@ msgstr "Nastavenie ďalších klávesových skratiek"
#: prefs.js:1898
msgid "Secondary Menu Options"
msgstr "Nastavenie sekundárneho menu"
msgstr "Možnosti sekundárnej ponuky"
#: prefs.js:1924 ui/SettingsFineTune.ui.h:22
msgid "Advanced Options"
@@ -327,7 +328,7 @@ msgstr "Zatiaľ nedostupné!"
#: ui/BoxAdvancedOptions.ui.h:2
msgid "For real..."
msgstr ""
msgstr "Naozaj..."
#: ui/BoxAnimateAppIconHoverOptions.ui.h:1
msgid "Animation type"
@@ -343,7 +344,7 @@ msgstr "Vlnenie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:4
msgid "Plank"
msgstr "Prekrytie"
msgstr "Doska"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:5
msgid "Duration"
@@ -351,7 +352,7 @@ msgstr "Trvanie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:6
msgid "Rotation"
msgstr "Otočenie"
msgstr "Otáčanie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:7
msgid "Travel"
@@ -363,11 +364,11 @@ msgstr "Priblíženie"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:9
msgid "Convexity"
msgstr "Vypuklina"
msgstr "Vypuklosť"
#: ui/BoxAnimateAppIconHoverOptions.ui.h:10
msgid "Extent"
msgstr "Rozšírenie"
msgstr "Rozsah"
#: ui/BoxDotOptions.ui.h:1
msgid "Highlight focused application"
@@ -453,7 +454,7 @@ msgstr "0"
#: ui/BoxDynamicOpacityOptions.ui.h:9
msgid "Opacity change animation duration (ms)"
msgstr "Rýchlosť animácie zobrazenia/skrytia panela"
msgstr "Dĺžka animácie zmeny priehľadnosti (ms)"
#: ui/BoxGroupAppsOptions.ui.h:1
msgid "Font size (px) of the application titles (default is 14)"
@@ -492,16 +493,12 @@ msgid "Font color of the minimized application titles"
msgstr "Farba písma názvu minimalizovanej aplikácie"
#: ui/BoxGroupAppsOptions.ui.h:10
#, fuzzy
msgid "Maximum width (px) of the application titles"
msgstr "Maximálna šírka (px) pre názov aplikácie (predvolená: 160)"
msgstr "Maximálna šírka (px) pre názov aplikácie"
#: ui/BoxGroupAppsOptions.ui.h:11
#, fuzzy
msgid "(default is 160)"
msgstr ""
"Dĺžka panela (%)\n"
"(predvolená: 100)"
msgstr "(predvolená je 160)"
#: ui/BoxGroupAppsOptions.ui.h:12
msgid "Use a fixed width for the application titles"
@@ -525,9 +522,8 @@ msgid "Use the favorite icons as application launchers"
msgstr "Použiť ikony obľúbených aplikácií ako spúšťače"
#: ui/BoxIntellihideOptions.ui.h:1
#, fuzzy
msgid "Only hide the panel when it is obstructed by windows"
msgstr "Skryť panel iba pri prekrytí oknami aplikácií "
msgstr "Skryť panel len vtedy, keď je prekrytý oknami"
#: ui/BoxIntellihideOptions.ui.h:2
msgid "The panel hides from"
@@ -550,14 +546,12 @@ msgid "Allow the panel to be revealed while in fullscreen mode"
msgstr "Povoliť zobrazenie panela v režime celej obrazovky"
#: ui/BoxIntellihideOptions.ui.h:10
#, fuzzy
msgid "Only hide secondary panels"
msgstr "Skryť iba sekundárne panely (pre viac monitorov)"
msgstr "Skryť iba sekundárne panely"
#: ui/BoxIntellihideOptions.ui.h:11
#, fuzzy
msgid "(requires multi-monitors option)"
msgstr "Skryť iba sekundárne panely (pre viac monitorov)"
msgstr "(vyžaduje možnosť viacerých monitorov)"
#: ui/BoxIntellihideOptions.ui.h:12
msgid "Keyboard shortcut to reveal and hold the panel"
@@ -585,7 +579,7 @@ msgstr "Oneskorenie pred skrytím pri štarte (ms)"
#: ui/BoxMiddleClickOptions.ui.h:1
msgid "Shift+Click action"
msgstr "Akcia pri Shift+Click"
msgstr "Akcia pri Shift+Kliknutie"
#: ui/BoxMiddleClickOptions.ui.h:2
msgid ""
@@ -640,7 +634,7 @@ msgstr "Shift + prostredné tlačidlo myši."
#: ui/BoxOverlayShortcut.ui.h:1
msgid "Hotkeys prefix"
msgstr "Skratka"
msgstr "Predpona klávesových skratiek"
#: ui/BoxOverlayShortcut.ui.h:2
msgid "Hotkeys will either be Super+Number or Super+Alt+Num"
@@ -686,7 +680,7 @@ msgstr "Skratka pre zobrazenie prehľadu na 2 sekundy"
#: ui/BoxOverlayShortcut.ui.h:13
msgid "e.g. <Super>q"
msgstr "napr: <Super>q"
msgstr "napr. <Super>q"
#: ui/BoxOverlayShortcut.ui.h:14
msgid "Show window previews on hotkey"
@@ -735,16 +729,15 @@ msgstr ""
#: ui/BoxSecondaryMenuOptions.ui.h:1
msgid "Integrate <i>AppMenu</i> items"
msgstr "Zobraziť položky menu <i>aplikácie</i>"
msgstr "Integrovať položky <i>ponuky aplikácií</i>"
#: ui/BoxSecondaryMenuOptions.ui.h:2
msgid "<i>Show Details</i> menu item"
msgstr "Zobraziť menu <i>Detail</i>"
msgstr "Položka ponuky <i>Zobraziť podrobnosti</i>"
#: ui/BoxShowApplicationsOptions.ui.h:1
#, fuzzy
msgid "Show Applications icon"
msgstr "Zobraziť ikonu <i>aplikácií</i>"
msgstr "Zobraziť ikonu aplikácií"
#: ui/BoxShowApplicationsOptions.ui.h:2
msgid "Show Applications icon side padding (px)"
@@ -756,7 +749,7 @@ msgstr "Zmeniť správanie klávesu Esc a vrátiť sa na plochu"
#: ui/BoxShowDesktopOptions.ui.h:1
msgid "Override Show Desktop line color"
msgstr "Vlastná farba deliacej čiary plochy"
msgstr "Prepísať farbu čiary tlačidla zobrazenia plochy"
#: ui/BoxShowDesktopOptions.ui.h:2
msgid "Reveal the desktop when hovering the Show Desktop button"
@@ -771,22 +764,20 @@ msgid "Fade duration (ms)"
msgstr "Skryť po (ms)"
#: ui/BoxWindowPreviewOptions.ui.h:1
#, fuzzy
msgid "Time (ms) before showing"
msgstr "Pauza (ms) pred zobrazením náhľadu (predvolená: 400)"
msgstr "Čas (ms) pred zobrazením"
#: ui/BoxWindowPreviewOptions.ui.h:2
msgid "(400 is default)"
msgstr ""
msgstr "(400 is predvolené)"
#: ui/BoxWindowPreviewOptions.ui.h:3
#, fuzzy
msgid "Time (ms) before hiding"
msgstr "Pauza (ms) pred skrytím náhľadu (predvolená: 100)"
msgstr "Čas (ms) pred skrytím"
#: ui/BoxWindowPreviewOptions.ui.h:4
msgid "(100 is default)"
msgstr ""
msgstr "(100 is predvolené)"
#: ui/BoxWindowPreviewOptions.ui.h:5
msgid "Immediate on application icon click"
@@ -909,10 +900,10 @@ msgid "Use custom opacity for the previews background"
msgstr "Použiť vlastné nastavenie priehľadnosti náhľadov"
#: ui/BoxWindowPreviewOptions.ui.h:35
#, fuzzy
msgid ""
"If disabled, the previews background have the same opacity as the panel."
msgstr "Pri vypnutí sa použije hodnota priehľadnosti panela"
msgstr ""
"Ak je vypnuté, pozadie náhľadov bude mať rovnakú nepriehľadnosť ako panel."
#: ui/BoxWindowPreviewOptions.ui.h:36
msgid "Close button and header position"
@@ -979,25 +970,23 @@ msgstr "Všetky okna, okrem aktívneho, majú rovnaké nastavenie priehľadnosti
#: ui/SettingsAbout.ui.h:1
msgid "Info"
msgstr ""
msgstr "Informácie"
#: ui/SettingsAbout.ui.h:2
#, fuzzy
msgid "Version"
msgstr "verzia: "
msgstr "Verzia"
#: ui/SettingsAbout.ui.h:3
msgid "Source"
msgstr ""
msgstr "Zdroj"
#: ui/SettingsAbout.ui.h:4
msgid "GitHub"
msgstr "GitHub"
#: ui/SettingsAbout.ui.h:5
#, fuzzy
msgid "Export and Import"
msgstr "Export a import nastavení"
msgstr "Export a import"
#: ui/SettingsAbout.ui.h:6
msgid "Export and import settings"
@@ -1042,13 +1031,12 @@ msgid "Toggle windows"
msgstr "Prepínanie okien"
#: ui/SettingsAction.ui.h:10
#, fuzzy
msgid "Scroll action"
msgstr "Akcia kolieska myši"
#: ui/SettingsAction.ui.h:11
msgid "Scroll panel action"
msgstr "Akcia panelu pri skrolovaní"
msgstr "Akcia kolieska myši na paneli"
#: ui/SettingsAction.ui.h:12
msgid "Behavior when mouse scrolling over the panel."
@@ -1072,7 +1060,7 @@ msgstr "Upraviť hlasitosť"
#: ui/SettingsAction.ui.h:17
msgid "Scroll icon action"
msgstr "Akcia kolieska myši"
msgstr "Akcia kolieska myši na ikone"
#: ui/SettingsAction.ui.h:18
msgid "Behavior when mouse scrolling over an application icon."
@@ -1083,9 +1071,8 @@ msgid "Same as panel"
msgstr "Rovnaké ako panel"
#: ui/SettingsAction.ui.h:20
#, fuzzy
msgid "Hotkey overlay"
msgstr "Zobraziť číslo"
msgstr "Klávesové skratky"
#: ui/SettingsAction.ui.h:21
msgid "Use hotkeys to activate apps"
@@ -1100,9 +1087,8 @@ msgstr ""
"použiť v kombinácií s Shift a Ctrl."
#: ui/SettingsBehavior.ui.h:1
#, fuzzy
msgid "Applications"
msgstr "Nezoskupené aplikácie"
msgstr "Aplikácie"
#: ui/SettingsBehavior.ui.h:2
msgid "Show favorite applications"
@@ -1118,7 +1104,7 @@ msgstr "Zobraziť bežiace aplikácie"
#: ui/SettingsBehavior.ui.h:5
msgid "Show <i>AppMenu</i> button"
msgstr "Zobraziť tlačidlo aplikácií"
msgstr "Zobraziť tlačidlo <i>ponuky aplikácií</i>"
#: ui/SettingsBehavior.ui.h:6
msgid "Ungroup applications"
@@ -1126,7 +1112,7 @@ msgstr "Nezoskupené aplikácie"
#: ui/SettingsBehavior.ui.h:7
msgid "Show notification counter badge"
msgstr ""
msgstr "Zobraziť znak počítadla oznámení"
#: ui/SettingsBehavior.ui.h:8
msgid "Show window previews on hover"
@@ -1137,9 +1123,8 @@ msgid "Show tooltip on hover"
msgstr "Zobraziť tip okna pri podržaní myši"
#: ui/SettingsBehavior.ui.h:10
#, fuzzy
msgid "Isolate"
msgstr "Oddeliť monitory"
msgstr "Oddeliť"
#: ui/SettingsBehavior.ui.h:11
msgid "Isolate Workspaces"
@@ -1151,7 +1136,7 @@ msgstr "Oddeliť monitory"
#: ui/SettingsBehavior.ui.h:13
msgid "Overview"
msgstr ""
msgstr "Prehľad"
#: ui/SettingsBehavior.ui.h:14
msgid "Click empty space to close overview"
@@ -1163,59 +1148,43 @@ msgstr "Vypnúť zobrazenie prehľadu po štarte"
#: ui/SettingsFineTune.ui.h:1
msgid "Font size"
msgstr ""
msgstr "Veľkosť písma"
#: ui/SettingsFineTune.ui.h:2
msgid "Tray Font Size"
msgstr ""
msgstr "Veľkosť písma systémového bloku"
#: ui/SettingsFineTune.ui.h:3
#, fuzzy
msgid "(0 = theme default)"
msgstr ""
"Veľkosť písma stavovej oblasti\n"
"(0 = určená motívom)"
msgstr "(0 = predvolené témou)"
#: ui/SettingsFineTune.ui.h:4
#, fuzzy
msgid "LeftBox Font Size"
msgstr ""
"Veľkosť písma ľavého bloku\n"
"(0 = určená motívom)"
msgstr "Veľkosť písma ľavého bloku"
#: ui/SettingsFineTune.ui.h:5
msgid "Padding"
msgstr ""
msgstr "Odsadenie"
#: ui/SettingsFineTune.ui.h:6
#, fuzzy
msgid "Tray Item Padding"
msgstr ""
"Odsadenie položiek v systémovej oblasti\n"
"(-1 = určené motívom)"
msgstr "Odsadenie položky v systémovom bloku"
#: ui/SettingsFineTune.ui.h:7
#, fuzzy
msgid "(-1 = theme default)"
msgstr ""
"Odsadenie v ľavom bloku\n"
"(-1 = určené motívom)"
msgstr "(-1 = predvolené témou)"
#: ui/SettingsFineTune.ui.h:8
#, fuzzy
msgid "Status Icon Padding"
msgstr ""
"Odsadenie medzi stavovými ikonami\n"
"(-1 = určené motívom)"
msgstr "Odsadenie stavových ikon"
#: ui/SettingsFineTune.ui.h:9
msgid "LeftBox Padding"
msgstr ""
msgstr "Odsadenie ľavého bloku"
#: ui/SettingsFineTune.ui.h:10
#, fuzzy
msgid "Animate"
msgstr "Typ animácie"
msgstr "Animovať"
#: ui/SettingsFineTune.ui.h:11
msgid "Animate switching applications"
@@ -1227,48 +1196,43 @@ msgstr "Animovať vytváranie nových okien"
#: ui/SettingsFineTune.ui.h:13
msgid "Gnome functionality"
msgstr ""
msgstr "Funkcionalita Gnome"
#: ui/SettingsFineTune.ui.h:14
#, fuzzy
msgid "Keep original gnome-shell dash"
msgstr "Ponechať pôvodný 'gnome-shell dash' (prehľad úloh)"
msgstr "Ponechať pôvodný gnome-shell dash"
#: ui/SettingsFineTune.ui.h:15
msgid "(overview)"
msgstr ""
msgstr "(prehľad)"
#: ui/SettingsFineTune.ui.h:16
msgid "Keep original gnome-shell top panel"
msgstr "Ponechať pôvodný horný panel gnome-shell"
#: ui/SettingsFineTune.ui.h:17
#, fuzzy
msgid "Activate panel menu buttons on click only"
msgstr "Aktivovať tlačidlá na paneli iba po stlačení (napr. menu hodín)"
msgstr "Aktivovať tlačidlá ponuky na paneli iba pri kliknutí"
#: ui/SettingsFineTune.ui.h:18
#, fuzzy
msgid "(e.g. date menu)"
msgstr "Menu hodín"
msgstr "(napr. ponuka s dátumom)"
#: ui/SettingsFineTune.ui.h:19
msgid "Force Activities hot corner on primary monitor"
msgstr "Vynútiť aktívny roh na primárnom monitore"
#: ui/SettingsFineTune.ui.h:20
#, fuzzy
msgid "App icon secondary menu"
msgstr "Nastavenie pravého kliknutia na ikonu aplikácie"
msgstr "Sekundárna ponuka ikony aplikácie"
#: ui/SettingsFineTune.ui.h:21
#, fuzzy
msgid "(right-click menu)"
msgstr "Nastavenie pravého kliknutia na ikonu aplikácie"
msgstr "(ponuka pravého tlačidla myši)"
#: ui/SettingsPosition.ui.h:1
msgid "Panel"
msgstr ""
msgstr "Panel"
#: ui/SettingsPosition.ui.h:2
msgid "Display the main panel on"
@@ -1287,14 +1251,12 @@ msgid "Hide and reveal the panel according to preferences"
msgstr "Zobraziť/skryť panel podľa nastavení"
#: ui/SettingsPosition.ui.h:6
#, fuzzy
msgid "Order and Position on monitors"
msgstr "Poradie a pozícia na monitore"
msgstr "Poradie a pozícia na monitoroch"
#: ui/SettingsPosition.ui.h:7
#, fuzzy
msgid "Monitor"
msgstr "Monitor "
msgstr "Monitor"
#: ui/SettingsPosition.ui.h:8
msgid "Apply changes to all monitors"
@@ -1305,90 +1267,65 @@ msgid "Panel screen position"
msgstr "Pozícia panela na obrazovke"
#: ui/SettingsPosition.ui.h:14
#, fuzzy
msgid "Panel thickness"
msgstr ""
"Šírka panela\n"
"(predvolená: 48)"
msgstr "Šírka panela"
#: ui/SettingsPosition.ui.h:15
#, fuzzy
msgid "(default is 48)"
msgstr ""
"Šírka panela\n"
"(predvolená: 48)"
msgstr "(predvolená je 48)"
#: ui/SettingsPosition.ui.h:17
#, fuzzy, no-c-format
#, no-c-format
msgid "Panel length (%)"
msgstr ""
"Dĺžka panela (%)\n"
"(predvolená: 100)"
msgstr "Dĺžka panela (%)"
#: ui/SettingsPosition.ui.h:18
#, fuzzy
msgid "(default is 100)"
msgstr ""
"Dĺžka panela (%)\n"
"(predvolená: 100)"
msgstr "(predvolená je 100)"
#: ui/SettingsPosition.ui.h:19
msgid "Anchor"
msgstr "Ukotvenie"
#: ui/SettingsPosition.ui.h:23
#, fuzzy
msgid "Taskbar Display"
msgstr "Zoznam úloh"
msgstr "Zobrazenie panela úloh"
#: ui/SettingsStyle.ui.h:1
msgid "AppIcon style"
msgstr ""
msgstr "Štýl ikony aplikácií"
#: ui/SettingsStyle.ui.h:2
#, fuzzy
msgid "App Icon Margin"
msgstr ""
"Rozostup ikon aplikácií\n"
"(predvolený: 8)"
msgstr "Rozostup ikon aplikácií"
#: ui/SettingsStyle.ui.h:3
#, fuzzy
msgid "(default is 8)"
msgstr ""
"Rozostup ikon aplikácií\n"
"(predvolený: 8)"
msgstr "(predvolené je 8)"
#: ui/SettingsStyle.ui.h:4
#, fuzzy
msgid "App Icon Padding"
msgstr ""
"Odsadenie ikon aplikácií\n"
"(predvolené: 4)"
msgstr "Odsadenie ikon aplikácií"
#: ui/SettingsStyle.ui.h:5
#, fuzzy
msgid "(default is 4)"
msgstr ""
"Odsadenie ikon aplikácií\n"
"(predvolené: 4)"
msgstr "(predvolené je 4)"
#: ui/SettingsStyle.ui.h:6
msgid "Animate hovering app icons"
msgstr "Animovať prepínanie medzi ikonami aplikácií"
#: ui/SettingsStyle.ui.h:7
#, fuzzy
msgid "Running indicator"
msgstr "Pozícia indikátora"
msgstr "Indikátor činnosti"
#: ui/SettingsStyle.ui.h:8
msgid "Running indicator position"
msgstr "Pozícia indikátora"
msgstr "Pozícia indikátora činnosti"
#: ui/SettingsStyle.ui.h:13
msgid "Running indicator style (Focused app)"
msgstr "Štýl indikátora bežiacich aplikácií (na popredí)"
msgstr "Štýl indikátora bežiacich aplikácií (na popredí)činnosti"
#: ui/SettingsStyle.ui.h:14
msgid "Dots"
@@ -1404,7 +1341,7 @@ msgstr "Čiarky"
#: ui/SettingsStyle.ui.h:17
msgid "Segmented"
msgstr "Segmenty"
msgstr "Segmentované"
#: ui/SettingsStyle.ui.h:18
msgid "Solid"
@@ -1423,18 +1360,16 @@ msgid "Running indicator style (Unfocused apps)"
msgstr "Štýl indikátora bežiacich aplikácií (na pozadí)"
#: ui/SettingsStyle.ui.h:22
#, fuzzy
msgid "Panel style"
msgstr "Inteligentné skrývanie (Intellihide)"
msgstr "Štýl panelu"
#: ui/SettingsStyle.ui.h:23
#, fuzzy
msgid "Override panel theme background color"
msgstr "Vlastná farba pozadia panela (ignorovať motív) "
msgstr "Prepísať farbu pozadia témy panela"
#: ui/SettingsStyle.ui.h:24
msgid "Override panel theme background opacity"
msgstr "Vlastná priehľadnosť panela (ignorovať motív)"
msgstr "Prepísať nepriehľadnosť pozadia témy panela"
#: ui/SettingsStyle.ui.h:26
#, no-c-format
@@ -1450,9 +1385,8 @@ msgid "Change opacity when a window gets close to the panel"
msgstr "Zmeniť priehľadnosť pri priblížení okna"
#: ui/SettingsStyle.ui.h:30
#, fuzzy
msgid "Override panel theme gradient"
msgstr "Vlastné nastavenie farebného prechodu panela (ignorovať motív) "
msgstr "Prepísať gradient témy panela"
#: ui/SettingsStyle.ui.h:32
#, no-c-format

1108
po/tr.po

File diff suppressed because it is too large Load Diff

1496
po/uk.po

File diff suppressed because it is too large Load Diff

100
prefs.js
View File

@@ -21,22 +21,17 @@
* Some code was also adapted from the upstream Gnome Shell source code.
*/
const GdkPixbuf = imports.gi.GdkPixbuf;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Adw = imports.gi.Adw;
const Gdk = imports.gi.Gdk;
const Mainloop = imports.mainloop;
import GdkPixbuf from 'gi://GdkPixbuf';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk';
import Gdk from 'gi://Gdk';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const ExtensionUtils = imports.misc.extensionUtils;
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
const _ = Gettext.gettext;
const N_ = function(e) { return e };
const PanelSettings = Me.imports.panelSettings;
const Pos = Me.imports.panelPositions;
import * as PanelSettings from './panelSettings.js';
import * as Pos from './panelPositions.js';
import {ExtensionPreferences, gettext as _, ngettext} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
const SCALE_UPDATE_TIMEOUT = 500;
const DEFAULT_PANEL_SIZES = [ 96, 64, 48, 32, 24 ];
@@ -146,51 +141,55 @@ function checkHotkeyPrefix(settings) {
}
function mergeObjects(main, bck) {
for (var prop in bck) {
for (const prop in bck) {
if (!main.hasOwnProperty(prop) && bck.hasOwnProperty(prop)) {
main[prop] = bck[prop];
}
}
return main;
};
}
const Preferences = class {
constructor(window) {
this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.zorin-taskbar');
this._gnomeInterfaceSettings = ExtensionUtils.getSettings('org.gnome.desktop.interface');
constructor(window, settings, gnomeInterfaceSettings, path) {
// this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.zorin-taskbar');
this._rtl = (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL);
this._builder = new Gtk.Builder();
this._builder.set_scope(new BuilderScope(this));
this._builder.set_translation_domain(Me.metadata['gettext-domain']);
this._settings = settings;
this._gnomeInterfaceSettings = gnomeInterfaceSettings;
this._path = path;
this._metadata = ExtensionPreferences.lookupByURL(import.meta.url).metadata;
this._builder.set_translation_domain(this._metadata['gettext-domain']);
window.set_search_enabled(true);
// dialogs
this._builder.add_from_file(Me.path + '/ui/BoxShowDesktopOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxDynamicOpacityOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxIntellihideOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxShowDateMenuOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxWindowPreviewOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxGroupAppsOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxMiddleClickOptions.ui');
this._builder.add_from_file(Me.path + '/ui/BoxOverlayShortcut.ui');
this._builder.add_from_file(this._path + '/ui/BoxShowDesktopOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxDynamicOpacityOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxIntellihideOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxShowDateMenuOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxWindowPreviewOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxGroupAppsOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxMiddleClickOptions.ui');
this._builder.add_from_file(this._path + '/ui/BoxOverlayShortcut.ui');
// pages
this._builder.add_from_file(Me.path + '/ui/SettingsStyle.ui');
this._builder.add_from_file(this._path + '/ui/SettingsStyle.ui');
let pageStyle = this._builder.get_object('style');
window.add(pageStyle);
this._builder.add_from_file(Me.path + '/ui/SettingsPosition.ui');
this._builder.add_from_file(this._path + '/ui/SettingsPosition.ui');
let pagePosition = this._builder.get_object('position');
window.add(pagePosition);
this._builder.add_from_file(Me.path + '/ui/SettingsBehavior.ui');
this._builder.add_from_file(this._path + '/ui/SettingsBehavior.ui');
let pageBehavior = this._builder.get_object('behavior');
window.add(pageBehavior);
this._builder.add_from_file(Me.path + '/ui/SettingsAction.ui');
this._builder.add_from_file(this._path + '/ui/SettingsAction.ui');
let pageAction = this._builder.get_object('action');
window.add(pageAction);
@@ -627,6 +626,12 @@ const Preferences = class {
this._updateWidgetSettingsForMonitor(this._currentMonitorIndex);
//panel style
this._settings.bind('floating-rounded-theme',
this._builder.get_object('floating_rounded_theme_switch'),
'active',
Gio.SettingsBindFlags.DEFAULT);
//dynamic opacity
this._settings.bind('trans-use-custom-opacity',
this._builder.get_object('trans_opacity_override_switch'),
@@ -700,11 +705,6 @@ const Preferences = class {
'sensitive',
Gio.SettingsBindFlags.DEFAULT);
this._settings.bind('intellihide-floating-rounded-theme',
this._builder.get_object('intellihide_floating_rounded_theme_switch'),
'active',
Gio.SettingsBindFlags.DEFAULT);
this._settings.bind('intellihide-hide-from-windows',
this._builder.get_object('intellihide_window_hide_switch'),
'active',
@@ -757,7 +757,6 @@ const Preferences = class {
let dialog = this._createPreferencesDialog(_('Intellihide options'), box, () =>
{
// restore default settings
this._settings.set_value('intellihide-floating-rounded-theme', this._settings.get_default_value('intellihide-floating-rounded-theme'));
this._settings.set_value('intellihide-hide-from-windows', this._settings.get_default_value('intellihide-hide-from-windows'));
this._settings.set_value('intellihide-behaviour', this._settings.get_default_value('intellihide-behaviour'));
this._settings.set_value('intellihide-use-pressure', this._settings.get_default_value('intellihide-use-pressure'));
@@ -1053,7 +1052,7 @@ const Preferences = class {
{objectName: 'panel_length_scale', valueName: '', range: LENGTH_MARKS }
];
for(var idx in sizeScales) {
for(const idx in sizeScales) {
let size_scale = this._builder.get_object(sizeScales[idx].objectName);
let range = sizeScales[idx].range;
size_scale.set_range(range[range.length - 1], range[0]);
@@ -1142,9 +1141,9 @@ const BuilderScope = GObject.registerClass({
panel_size_scale_value_changed_cb(scale) {
// Avoid settings the size continuously
if (this._preferences._panel_size_timeout > 0)
Mainloop.source_remove(this._preferences._panel_size_timeout);
GLib.Source.remove(this._preferences._panel_size_timeout);
this._preferences._panel_size_timeout = Mainloop.timeout_add(SCALE_UPDATE_TIMEOUT, (() => {
this._preferences._panel_size_timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, SCALE_UPDATE_TIMEOUT, () => {
const value = scale.get_value();
const monitorSync = this._preferences._settings.get_boolean('panel-element-positions-monitors-sync');
const monitorsToSetFor = monitorSync ? this._preferences.monitors : [this._preferences._currentMonitorIndex];
@@ -1154,17 +1153,18 @@ const BuilderScope = GObject.registerClass({
this._preferences._panel_size_timeout = 0;
return GLib.SOURCE_REMOVE;
}));
});
}
});
function init() {
ExtensionUtils.initTranslations();
}
export default class ZorinTaskbarPreferences extends ExtensionPreferences {
fillPreferencesWindow(window) {
window._settings = this.getSettings('org.gnome.shell.extensions.zorin-taskbar');
window._gnomeInterfaceSettings = this.getSettings('org.gnome.desktop.interface');
function fillPreferencesWindow(window) {
// use default width or window
window.set_default_size(0, 625);
// use default width or window
window.set_default_size(0, 625);
let preferences = new Preferences(window);
let preferences = new Preferences(window, window._settings, window._gnomeInterfaceSettings, this.path);
}
}

View File

@@ -20,19 +20,22 @@
* and code from the Dash to Panel extension
*/
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Gio = imports.gi.Gio;
const Cairo = imports.cairo;
const Clutter = imports.gi.Clutter;
const Pango = imports.gi.Pango;
const St = imports.gi.St;
const Signals = imports.signals;
const Utils = Me.imports.utils;
import Cairo from 'cairo';
import Gio from 'gi://Gio';
import Clutter from 'gi://Clutter';
import Pango from 'gi://Pango';
import St from 'gi://St';
import * as Utils from './utils.js';
import {SETTINGS} from './extension.js';
import {EventEmitter} from 'resource:///org/gnome/shell/misc/signals.js';
var ProgressManager = class {
export const ProgressManager = class extends EventEmitter {
constructor() {
super();
this._entriesByDBusName = {};
this._launcher_entry_dbus_signal_id =
@@ -163,11 +166,12 @@ var ProgressManager = class {
}
}
};
Signals.addSignalMethods(ProgressManager.prototype);
class AppProgress {
export class AppProgress extends EventEmitter {
constructor(dbusName, appId, properties) {
super();
this._dbusName = dbusName;
this._appId = appId;
this._count = 0;
@@ -263,11 +267,11 @@ class AppProgress {
if (property == 'count') {
this.setCount(other[property].get_int64());
} else if (property == 'count-visible') {
this.setCountVisible(Me.settings.get_boolean('progress-show-count') && other[property].get_boolean());
this.setCountVisible(SETTINGS.get_boolean('progress-show-count') && other[property].get_boolean());
} else if (property == 'progress') {
this.setProgress(other[property].get_double());
} else if (property == 'progress-visible') {
this.setProgressVisible(Me.settings.get_boolean('progress-show-bar') && other[property].get_boolean());
this.setProgressVisible(SETTINGS.get_boolean('progress-show-bar') && other[property].get_boolean());
} else if (property == 'urgent') {
this.setUrgent(other[property].get_boolean());
} else {
@@ -277,11 +281,10 @@ class AppProgress {
}
}
}
};
Signals.addSignalMethods(AppProgress.prototype);
}
var ProgressIndicator = class {
export const ProgressIndicator = class {
constructor(source, progressManager) {
this._source = source;
@@ -406,13 +409,13 @@ var ProgressIndicator = class {
if (hasColor)
this._progressbar_background = color
else
this._progressbar_background = new Clutter.Color({red: 204, green: 204, blue: 204, alpha: 255});
this._progressbar_background = new Utils.ColorUtils.Color({red: 204, green: 204, blue: 204, alpha: 255});
[hasColor, color] = node.lookup_color('-progress-bar-border', false);
if (hasColor)
this._progressbar_border = color;
else
this._progressbar_border = new Clutter.Color({red: 230, green: 230, blue: 230, alpha: 255});
this._progressbar_border = new Utils.ColorUtils.Color({red: 230, green: 230, blue: 230, alpha: 255});
this._updateProgressOverlay();
}

View File

@@ -18,13 +18,12 @@
* This file is based on code from the Dash to Panel extension
*/
const Meta = imports.gi.Meta;
import Meta from 'gi://Meta';
import Mtk from 'gi://Mtk';
const Layout = imports.ui.layout;
const Main = imports.ui.main;
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Utils = Me.imports.utils;
import * as Utils from './utils.js';
//timeout intervals
const MIN_UPDATE_MS = 200;
@@ -32,13 +31,13 @@ const MIN_UPDATE_MS = 200;
//timeout names
const T1 = 'limitUpdateTimeout';
var Mode = {
export const Mode = {
ALL_WINDOWS: 0,
FOCUSED_WINDOWS: 1,
MAXIMIZED_WINDOWS: 2
};
class ProximityWatch {
export class ProximityWatch {
constructor(actor, monitorIndex, mode, xThreshold, yThreshold, handler) {
this.actor = actor;
@@ -60,7 +59,7 @@ class ProximityWatch {
_updateWatchRect() {
let [actorX, actorY] = this.actor.get_position();
this.rect = new Meta.Rectangle({
this.rect = new Mtk.Rectangle({
x: actorX - this.threshold[0],
y: actorY - this.threshold[1],
width: this.actor.width + this.threshold[0] * 2,
@@ -69,7 +68,7 @@ class ProximityWatch {
}
};
var ProximityManager = class {
export const ProximityManager = class {
constructor() {
this._counter = 1;

View File

@@ -189,10 +189,10 @@
<summary>Keybinding toggle intellihide</summary>
<description>Keybinding to reveal the panel while in intellihide mode</description>
</key>
<key type="b" name="intellihide-floating-rounded-theme">
<default>true</default>
<key type="b" name="floating-rounded-theme">
<default>false</default>
<summary>Floating rounded theme</summary>
<description>Display the panel with a floating rounded theme while in intellihide mode</description>
<description>Display the panel with a floating rounded theme</description>
</key>
<key type="as" name="panel-context-menu-commands">
<default>[]</default>

View File

@@ -22,34 +22,39 @@
*/
#zorintaskbarTaskbar .dash-item-container > StWidget,
.zorintaskbarMainPanel .show-apps {
margin: 0;
padding: 0;
}
#zorintaskbarScrollview .app-well-app .overview-icon,
.zorintaskbarMainPanel .show-apps .overview-icon {
background: none;
border: none;
.zorintaskbarMainPanel .dash-item-container .show-apps {
margin: 0;
padding: 0;
}
#zorintaskbarScrollview .app-well-app .overview-label {
/* must match TITLE_RIGHT_PADDING in apppicons.js */
padding-right: 8px;
#zorintaskbarScrollview .overview-tile,
.zorintaskbarMainPanel .overview-tile {
background: none;
}
#zorintaskbarScrollview .app-well-app .favorite {
#zorintaskbarScrollview .overview-tile .overview-label {
/* must match TITLE_RIGHT_PADDING in apppicons.js */
padding-right: 8px;
text-align: left;
}
.zorintaskbarMainPanel .dash-item-container .show-apps .overview-icon {
color: #FFF;
}
#zorintaskbarTaskbar .dash-item-container .overview-tile:hover,
#zorintaskbarTaskbar .dash-item-container .overview-tile .dtp-container .overview-icon,
#zorintaskbarScrollview .overview-tile:hover .dtp-container.animate-appicon-hover,
.zorintaskbarMainPanel .dash-item-container .show-apps:hover .overview-icon {
background: none;
}
#zorintaskbarScrollview .overview-tile .favorite {
/*background-color: rgba(80, 150, 255, 0.4);*/
}
#zorintaskbarScrollview .app-well-app-running-dot {
margin-bottom: 0;
}
#zorintaskbarTaskbar .scrollview-fade {
background-gradient-end: rgba(0, 0, 0, 0);
background-gradient-end: rgba(0, 0, 0, 0);
}
.zorintaskbarSecondaryMenu {
@@ -57,13 +62,13 @@
}
.zorintaskbarMainPanel.vertical .panel-button {
text-align: center;
text-align: center;
}
.zorintaskbarMainPanel.vertical .panel-button.vertical *,
.zorintaskbarMainPanel.vertical .panel-button.clock-display * {
padding: 0;
margin: 0;
margin: 0;
}
.zorintaskbarMainPanel.vertical .panel-button > *,
@@ -71,7 +76,7 @@
.zorintaskbarMainPanel.vertical .panel-button.vertical .system-status-icon,
.zorintaskbarMainPanel.vertical .panel-button.clock-display > *,
.zorintaskbarMainPanel.vertical .panel-button.clock-display .clock {
padding: 8px 0;
padding: 8px 0;
}
.zorintaskbarMainPanel.vertical .panel-button.clock-display {
@@ -100,17 +105,28 @@
}
.popup-menu.panel-menu {
margin-bottom: 0;
margin-bottom: 0;
}
#panel #panelLeft, #panel #panelCenter {
spacing: 0px;
spacing: 0px;
}
#panelBox.floating {
padding: 8px;
background: transparent;
}
#panelBox.floating.top {
padding: 8px 8px 0 8px;
}
#panelBox.floating.right {
padding: 8px 8px 8px 0;
}
#panelBox.floating.bottom {
padding: 0 8px 8px 8px;
}
#panelBox.floating.left {
padding: 8px 0 8px 8px;
}
#panelBox.floating #panel,
#panelBox.floating .panel-button,
@@ -129,15 +145,14 @@
}
#zorintaskbarScrollview .notification-badge {
background-color: rgba(255,0,0,0.8);
margin: 2px;
background-color: rgba(255,0,0,0.8);
margin: 2px;
}
#zorintaskbarScrollview .progress-bar {
/* Customization of the progress bar style, e.g.:
-progress-bar-background: rgba(0.8, 0.8, 0.8, 1);
-progress-bar-border: rgba(0.9, 0.9, 0.9, 1);
*/
/* Customization of the progress bar style, e.g.:
-progress-bar-background: rgba(0.8, 0.8, 0.8, 1);
-progress-bar-border: rgba(0.9, 0.9, 0.9, 1); */
}
.preview-container,

View File

@@ -22,45 +22,41 @@
*/
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Signals = imports.signals;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import Graphene from 'gi://Graphene';
import Shell from 'gi://Shell';
import St from 'gi://St';
const SearchController = imports.ui.main.overview._overview._controls._searchController;
const AppDisplay = imports.ui.main.overview._overview._controls.appDisplay;
const AppFavorites = imports.ui.appFavorites;
const Dash = imports.ui.dash;
const DND = imports.ui.dnd;
const IconGrid = imports.ui.iconGrid;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Workspace = imports.ui.workspace;
import * as AppFavorites from 'resource:///org/gnome/shell/ui/appFavorites.js';
import * as Dash from 'resource:///org/gnome/shell/ui/dash.js';
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {EventEmitter} from 'resource:///org/gnome/shell/misc/signals.js';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const AppIcons = Me.imports.appIcons;
const Panel = Me.imports.panel;
const PanelManager = Me.imports.panelManager;
const PanelSettings = Me.imports.panelSettings;
const Pos = Me.imports.panelPositions;
const Utils = Me.imports.utils;
const WindowPreview = Me.imports.windowPreview;
import * as AppIcons from './appIcons.js';
import * as PanelManager from './panelManager.js';
import * as PanelSettings from './panelSettings.js';
import * as Pos from './panelPositions.js';
import * as Utils from './utils.js';
import * as WindowPreview from './windowPreview.js';
import {SETTINGS} from './extension.js';
var DASH_ANIMATION_TIME = Dash.DASH_ANIMATION_TIME / (Dash.DASH_ANIMATION_TIME > 1 ? 1000 : 1);
var DASH_ITEM_HOVER_TIMEOUT = Dash.DASH_ITEM_HOVER_TIMEOUT;
var MIN_ICON_SIZE = 4;
var APPICON_MARGIN = 4;
var APPICON_PADDING = 8;
const SearchController = Main.overview.searchController;
export const DASH_ANIMATION_TIME = .2; // Dash.DASH_ANIMATION_TIME is now private
const DASH_ITEM_HOVER_TIMEOUT = .3; // Dash.DASH_ITEM_HOVER_TIMEOUT is now private
export const MIN_ICON_SIZE = 4;
export const APPICON_MARGIN = 4;
export const APPICON_PADDING = 8;
const T1 = 'ensureAppIconVisibilityTimeout'
const T2 = 'showLabelTimeout'
const T3 = 'resetHoverTimeout'
/**
* Extend DashItemContainer
*
@@ -70,9 +66,9 @@ const T3 = 'resetHoverTimeout'
* thus use this ugly pattern.
*/
function extendDashItemContainer(dashItemContainer) {
export function extendDashItemContainer(dashItemContainer) {
dashItemContainer.showLabel = AppIcons.ItemShowLabel;
};
}
/* This class is a fork of the upstream DashActor class (ui.dash.js)
*
@@ -80,7 +76,7 @@ function extendDashItemContainer(dashItemContainer) {
* - modified chldBox calculations for when 'show-apps-at-top' option is checked
* - handle horizontal dash
*/
var TaskbarActor = GObject.registerClass({
export const TaskbarActor = GObject.registerClass({
}, class TaskbarActor extends St.Widget {
_init(delegate) {
this._delegate = delegate;
@@ -110,7 +106,7 @@ var TaskbarActor = GObject.registerClass({
scrollview.allocate(childBox);
let [value, , upper, , , pageSize] = scrollview[orientation[0] + 'scroll'].adjustment.get_values();
let [value, , upper, , , pageSize] = scrollview[orientation[0] + 'adjustment'].get_values();
upper = Math.floor(upper);
scrollview._dtpFadeSize = upper > pageSize ? this._delegate.iconSize : 0;
@@ -161,9 +157,11 @@ var TaskbarActor = GObject.registerClass({
* - Sync minimization application target position.
*/
var Taskbar = class {
export const Taskbar = class extends EventEmitter {
constructor(panel) {
super();
this.dtpPanel = panel;
// start at smallest size due to running indicator drawing area expanding but not shrinking
@@ -186,12 +184,12 @@ var Taskbar = class {
this._container = new TaskbarActor(this);
this._scrollView = new St.ScrollView({ name: 'zorintaskbarScrollview',
hscrollbar_policy: Gtk.PolicyType.NEVER,
vscrollbar_policy: Gtk.PolicyType.NEVER,
hscrollbar_policy: St.PolicyType.NEVER,
vscrollbar_policy: St.PolicyType.NEVER,
enable_mouse_scrolling: true });
this._scrollView.connect('scroll-event', this._onScrollEvent.bind(this));
this._scrollView.add_actor(this._box);
this._scrollView.add_child(this._box);
this._showAppsIconWrapper = panel.showAppsIconWrapper;
this._showAppsIconWrapper.connect('menu-state-changed', (showAppsIconWrapper, opened) => {
@@ -215,31 +213,33 @@ var Taskbar = class {
this._hookUpLabel(this._showAppsIcon, this._showAppsIconWrapper);
this._container.add_child(new St.Widget({ width: 0, reactive: false }));
this._container.add_actor(this._scrollView);
this._container.add_child(this._scrollView);
let orientation = panel.getOrientation();
let fadeStyle = 'background-gradient-direction:' + orientation;
let fade1 = new St.Widget({ style_class: 'scrollview-fade', reactive: false });
let fade2 = new St.Widget({ style_class: 'scrollview-fade',
reactive: false,
pivot_point: new imports.gi.Graphene.Point({ x: .5, y: .5 }),
pivot_point: new Graphene.Point({ x: .5, y: .5 }),
rotation_angle_z: 180 });
fade1.set_style(fadeStyle);
fade2.set_style(fadeStyle);
this._container.add_actor(fade1);
this._container.add_actor(fade2);
this._container.add_child(fade1);
this._container.add_child(fade2);
this.previewMenu = new WindowPreview.PreviewMenu(panel);
this.previewMenu.enable();
let rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL;
this.actor = new St.Bin({ child: this._container,
y_align: St.Align.START, x_align:rtl?St.Align.END:St.Align.START
this.actor = new St.Bin({
child: this._container,
y_align: Clutter.ActorAlign.START,
x_align: rtl ? Clutter.ActorAlign.END : Clutter.ActorAlign.START
});
let adjustment = this._scrollView[orientation[0] + 'scroll'].adjustment;
const adjustment = this._scrollView[orientation[0] + 'adjustment'];
this._workId = Main.initializeDeferredWork(this._box, this._redisplay.bind(this));
@@ -269,9 +269,9 @@ var Taskbar = class {
}
],
[
this._appSystem,
'app-state-changed',
this._queueRedisplay.bind(this)
this._appSystem,
'app-state-changed',
this._queueRedisplay.bind(this)
],
[
AppFavorites.getAppFavorites(),
@@ -290,7 +290,7 @@ var Taskbar = class {
'window-left-monitor'
],
() => {
if (Me.settings.get_boolean('isolate-monitors')) {
if (SETTINGS.get_boolean('isolate-monitors')) {
this._queueRedisplay();
}
}
@@ -317,7 +317,7 @@ var Taskbar = class {
this._syncShowAppsButtonToggled.bind(this)
],
[
Me.settings,
SETTINGS,
[
'changed::show-favorites',
'changed::show-running-apps',
@@ -329,7 +329,7 @@ var Taskbar = class {
}
],
[
Me.settings,
SETTINGS,
'changed::group-apps',
() => {
setAttributes()
@@ -337,7 +337,7 @@ var Taskbar = class {
}
],
[
Me.settings,
SETTINGS,
[
'changed::group-apps-use-launchers',
'changed::taskbar-locked'
@@ -358,11 +358,11 @@ var Taskbar = class {
);
let setAttributes = () => {
this.isGroupApps = Me.settings.get_boolean('group-apps');
this.usingLaunchers = !this.isGroupApps && Me.settings.get_boolean('group-apps-use-launchers');
this.showFavorites = Me.settings.get_boolean('show-favorites') &&
(this.dtpPanel.isPrimary || Me.settings.get_boolean('show-favorites-all-monitors'))
this.showRunningApps = Me.settings.get_boolean('show-running-apps')
this.isGroupApps = SETTINGS.get_boolean('group-apps');
this.usingLaunchers = !this.isGroupApps && SETTINGS.get_boolean('group-apps-use-launchers');
this.showFavorites = SETTINGS.get_boolean('show-favorites') &&
(this.dtpPanel.isPrimary || SETTINGS.get_boolean('show-favorites-all-monitors'))
this.showRunningApps = SETTINGS.get_boolean('show-running-apps')
this.allowSplitApps = this.usingLaunchers || (!this.isGroupApps && !this.showFavorites)
}
@@ -407,7 +407,7 @@ var Taskbar = class {
let adjustment, delta;
adjustment = this._scrollView[orientation[0] + 'scroll'].get_adjustment();
adjustment = this._scrollView[orientation[0] + 'adjustment'];
let increment = adjustment.step_increment;
@@ -454,7 +454,9 @@ var Taskbar = class {
if (initial != this.fullScrollView && !this._waitIdleId) {
this._waitIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
this._getAppIcons().forEach(a => a.updateTitleStyle())
this._waitIdleId = 0
this._waitIdleId = 0;
return GLib.SOURCE_REMOVE;
});
}
}
@@ -512,7 +514,7 @@ var Taskbar = class {
}
_onDragMotion(dragEvent) {
let app = Dash.getAppFromSource(dragEvent.source);
let app = Dash.Dash.getAppFromSource(dragEvent.source);
if (app == null)
return DND.DragMotionResult.CONTINUE;
@@ -584,7 +586,7 @@ var Taskbar = class {
{
setSizeManually: true,
showLabel: false,
isDraggable: !Me.settings.get_boolean('taskbar-locked'),
isDraggable: !SETTINGS.get_boolean('taskbar-locked'),
},
this.previewMenu,
this.iconAnimator
@@ -726,7 +728,7 @@ var Taskbar = class {
_adjustIconSize() {
const thisMonitorIndex = this.dtpPanel.monitor.index;
let panelSize = PanelSettings.getPanelSize(Me.settings, thisMonitorIndex);
let panelSize = PanelSettings.getPanelSize(SETTINGS, thisMonitorIndex);
let availSize = panelSize - APPICON_PADDING * 2;
let minIconSize = MIN_ICON_SIZE + panelSize % 2;
@@ -958,8 +960,8 @@ var Taskbar = class {
icon.updateHotkeyNumberOverlay();
});
if (Me.settings.get_boolean('hot-keys') &&
Me.settings.get_string('hotkeys-overlay-combo') === 'ALWAYS')
if (SETTINGS.get_boolean('hot-keys') &&
SETTINGS.get_string('hotkeys-overlay-combo') === 'ALWAYS')
this.toggleNumberOverlay(true);
}
@@ -1196,14 +1198,13 @@ var Taskbar = class {
}
};
Signals.addSignalMethods(Taskbar.prototype);
var TaskbarItemContainer = GObject.registerClass({
export const TaskbarItemContainer = GObject.registerClass({
}, class TaskbarItemContainer extends Dash.DashItemContainer {
_init() {
super._init()
this.x_expand = this.y_expand = false
}
vfunc_allocate(box) {
@@ -1241,7 +1242,7 @@ var TaskbarItemContainer = GObject.registerClass({
}
});
var DragPlaceholderItem = GObject.registerClass({
const DragPlaceholderItem = GObject.registerClass({
}, class DragPlaceholderItem extends St.Widget {
_init(appIcon, iconSize, isVertical) {
@@ -1255,7 +1256,7 @@ var DragPlaceholderItem = GObject.registerClass({
height: iconSize
});
this.add_actor(this._clone);
this.add_child(this._clone);
}
destroy() {
@@ -1264,7 +1265,7 @@ var DragPlaceholderItem = GObject.registerClass({
}
});
function getAppStableSequence(app, monitor) {
export function getAppStableSequence(app, monitor) {
let windows = AppIcons.getInterestingWindows(app, monitor);
return windows.reduce((prevWindow, window) => {
@@ -1272,10 +1273,10 @@ function getAppStableSequence(app, monitor) {
}, Infinity);
}
function sortWindowsCompareFunction(windowA, windowB) {
export function sortWindowsCompareFunction(windowA, windowB) {
return getWindowStableSequence(windowA) - getWindowStableSequence(windowB);
}
function getWindowStableSequence(window) {
export function getWindowStableSequence(window) {
return ('_dtpPosition' in window ? window._dtpPosition : window.get_stable_sequence());
}

View File

@@ -18,21 +18,17 @@
* This file is based on code from the Dash to Panel extension
*/
const Clutter = imports.gi.Clutter;
const GdkPixbuf = imports.gi.GdkPixbuf;
const Main = imports.ui.main;
const Meta = imports.gi.Meta;
const St = imports.gi.St;
const Config = imports.misc.config;
import GdkPixbuf from 'gi://GdkPixbuf';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import St from 'gi://St';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Panel = Me.imports.panel;
const Proximity = Me.imports.proximity;
const Utils = Me.imports.utils;
import * as Proximity from './proximity.js';
import * as Utils from './utils.js';
import {SETTINGS} from './extension.js';
const TRANS_DYNAMIC_DISTANCE = 20;
var DynamicTransparency = class {
export const DynamicTransparency = class {
constructor(dtpPanel) {
this._dtpPanel = dtpPanel;
@@ -77,7 +73,7 @@ var DynamicTransparency = class {
() => this._updateAlphaAndSet()
],
[
Me.settings,
SETTINGS,
[
'changed::trans-use-custom-opacity',
'changed::trans-panel-opacity',
@@ -87,7 +83,7 @@ var DynamicTransparency = class {
() => this._updateAlphaAndSet()
],
[
Me.settings,
SETTINGS,
[
'changed::trans-dynamic-behavior',
'changed::trans-use-dynamic-opacity'
@@ -100,7 +96,7 @@ var DynamicTransparency = class {
_updateProximityWatch() {
this._proximityManager.removeWatch(this._proximityWatchId);
if (Me.settings.get_boolean('trans-use-dynamic-opacity')) {
if (SETTINGS.get_boolean('trans-use-dynamic-opacity')) {
let isVertical = this._dtpPanel.checkIfVertical();
let threshold = TRANS_DYNAMIC_DISTANCE;
@@ -110,7 +106,7 @@ var DynamicTransparency = class {
this._proximityWatchId = this._proximityManager.createWatch(
this._dtpPanel.panelBox.get_parent(),
this._dtpPanel.monitor.index,
Proximity.Mode[Me.settings.get_string('trans-dynamic-behavior')],
Proximity.Mode[SETTINGS.get_string('trans-dynamic-behavior')],
isVertical ? threshold : 0,
isVertical ? 0 : threshold,
overlap => {
@@ -147,11 +143,11 @@ var DynamicTransparency = class {
}
_updateAlpha(themeBackground) {
if (this._windowOverlap && !Main.overview.visibleTarget && Me.settings.get_boolean('trans-use-dynamic-opacity')) {
this.alpha = Me.settings.get_double('trans-dynamic-anim-target');
if (this._windowOverlap && !Main.overview.visibleTarget && SETTINGS.get_boolean('trans-use-dynamic-opacity')) {
this.alpha = SETTINGS.get_double('trans-dynamic-anim-target');
} else {
this.alpha = Me.settings.get_boolean('trans-use-custom-opacity') ?
Me.settings.get_double('trans-panel-opacity') :
this.alpha = SETTINGS.get_boolean('trans-use-custom-opacity') ?
SETTINGS.get_double('trans-panel-opacity') :
(themeBackground || this._getThemeBackground()).alpha * 0.003921569; // 1 / 255 = 0.003921569
}
}

View File

@@ -11,23 +11,6 @@
<property name="margin-start">32</property>
<property name="margin-end">32</property>
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Floating rounded theme</property>
<child>
<object class="GtkSwitch" id="intellihide_floating_rounded_theme_switch">
<property name="valign">center</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="AdwPreferencesGroup">
@@ -107,7 +90,7 @@
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Keyboard shortcut to reveal and hold the panel</property>
<property name="subtitle" translatable="yes">Syntax: &lt;Shift&gt;, &lt;Ctrl&gt;, &lt;Alt&gt;, &lt;Super&gt;</property>
<property name="subtitle" translatable="yes">Syntax: &amp;lt;Shift&amp;gt;, &amp;lt;Ctrl&amp;gt;, &amp;lt;Alt&amp;gt;, &amp;lt;Super&amp;gt;</property>
<child>
<object class="GtkEntry" id="intellihide_toggle_entry">
<property name="valign">center</property>

View File

@@ -50,7 +50,7 @@
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Shortcut to show the overlay for 2 seconds</property>
<property name="subtitle" translatable="yes">Syntax: &lt;Shift&gt;, &lt;Ctrl&gt;, &lt;Alt&gt;, &lt;Super&gt;</property>
<property name="subtitle" translatable="yes">Syntax: &amp;lt;Shift&amp;gt;, &amp;lt;Ctrl&amp;gt;, &amp;lt;Alt&amp;gt;, &amp;lt;Super&amp;gt;</property>
<child>
<object class="GtkEntry" id="shortcut_entry">
<property name="valign">center</property>

View File

@@ -3,7 +3,7 @@
<requires lib="gtk" version="4.0"/>
<object class="AdwPreferencesPage" id="action">
<property name="title">Action</property>
<property name="title" translatable="yes">Action</property>
<property name="icon_name">view-pin-symbolic</property>
<!-- group click action -->

View File

@@ -2,7 +2,7 @@
<interface>
<requires lib="gtk" version="4.0"/>
<object class="AdwPreferencesPage" id="behavior">
<property name="title">Behavior</property>
<property name="title" translatable="yes">Behavior</property>
<property name="icon_name">preferences-system-symbolic</property>
<!-- group applications -->
@@ -87,7 +87,7 @@
<!-- group hover -->
<child>
<object class="AdwPreferencesGroup" id="behavior_group_hover">
<property name="title">Hover</property>
<property name="title" translatable="yes">Hover</property>
<child>
<object class="AdwActionRow">

View File

@@ -16,7 +16,7 @@
</object>
<object class="AdwPreferencesPage" id="position">
<property name="title">Position</property>
<property name="title" translatable="yes">Position</property>
<property name="icon_name">find-location-symbolic</property>
<!-- group panel -->

View File

@@ -9,7 +9,7 @@
</object>
<object class="AdwPreferencesPage" id="style">
<property name="title">Style</property>
<property name="title" translatable="yes">Style</property>
<property name="icon_name">applications-graphics-symbolic</property>
<!-- group panel intellihide -->
@@ -50,6 +50,17 @@
<object class="AdwPreferencesGroup" id="style_group_dynamic_trans2">
<property name="title" translatable="yes">Panel style</property>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Floating rounded theme</property>
<child>
<object class="GtkSwitch" id="floating_rounded_theme_switch">
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="AdwActionRow">
<property name="title" translatable="yes">Override panel theme background opacity</property>

192
utils.js
View File

@@ -21,27 +21,24 @@
* Some code was also adapted from the upstream Gnome Shell source code.
*/
const Clutter = imports.gi.Clutter;
const GdkPixbuf = imports.gi.GdkPixbuf;
const Gi = imports._gi;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Config = imports.misc.config;
const Util = imports.misc.util;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
import Clutter from 'gi://Clutter';
import Cogl from 'gi://Cogl';
import GdkPixbuf from 'gi://GdkPixbuf';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import Graphene from 'gi://Graphene';
import Meta from 'gi://Meta';
import Shell from 'gi://Shell';
import St from 'gi://St';
import * as Util from 'resource:///org/gnome/shell/misc/util.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as MessageTray from 'resource:///org/gnome/shell/ui/messageTray.js';
var TRANSLATION_DOMAIN = imports.misc.extensionUtils.getCurrentExtension().metadata['gettext-domain'];
var SCROLL_TIME = Util.SCROLL_TIME / (Util.SCROLL_TIME > 1 ? 1000 : 1);
const SCROLL_TIME = Util.SCROLL_TIME / (Util.SCROLL_TIME > 1 ? 1000 : 1);
// simplify global signals and function injections handling
// abstract class
var BasicHandler = class {
export const BasicHandler = class {
constructor() {
this._storage = new Object();
@@ -101,7 +98,7 @@ var BasicHandler = class {
}
// Manage global signals
var GlobalSignalsHandler = class extends BasicHandler {
export const GlobalSignalsHandler = class extends BasicHandler {
_create(item) {
let handlers = [];
@@ -134,7 +131,7 @@ var GlobalSignalsHandler = class extends BasicHandler {
* Manage function injection: both instances and prototype can be overridden
* and restored
*/
var InjectionsHandler = class extends BasicHandler {
export const InjectionsHandler = class extends BasicHandler {
_create(item) {
let object = item[0];
@@ -157,7 +154,7 @@ var InjectionsHandler = class extends BasicHandler {
/**
* Manage timeouts: the added timeouts have their id reset on completion
*/
var TimeoutsHandler = class extends BasicHandler {
export const TimeoutsHandler = class extends BasicHandler {
_create(item) {
let name = item[0];
@@ -166,9 +163,11 @@ var TimeoutsHandler = class extends BasicHandler {
this._remove(item);
this[name] = Mainloop.timeout_add(delay, () => {
this[name] = GLib.timeout_add(GLib.PRIORITY_DEFAULT, delay, () => {
this[name] = 0;
timeoutHandler();
return GLib.SOURCE_REMOVE;
});
return [[name]];
@@ -182,7 +181,7 @@ var TimeoutsHandler = class extends BasicHandler {
let name = item[0];
if (this[name]) {
Mainloop.source_remove(this[name]);
GLib.Source.remove(this[name]);
this[name] = 0;
}
}
@@ -194,7 +193,7 @@ var TimeoutsHandler = class extends BasicHandler {
// This is wrapper to maintain compatibility with GNOME-Shell 3.30+ as well as
// previous versions.
var DisplayWrapper = {
export const DisplayWrapper = {
getScreen() {
return global.screen || global.display;
},
@@ -209,7 +208,7 @@ var DisplayWrapper = {
};
let unredirectEnabled = true
var setDisplayUnredirect = (enable) => {
export const setDisplayUnredirect = (enable) => {
if (enable && !unredirectEnabled)
Meta.enable_unredirect_for_display(global.display);
else if (!enable && unredirectEnabled)
@@ -218,40 +217,34 @@ var setDisplayUnredirect = (enable) => {
unredirectEnabled = enable;
};
var getSystemMenuInfo = function() {
if (Config.PACKAGE_VERSION < '43')
return {
name: 'aggregateMenu',
constructor: imports.ui.panel.AggregateMenu
};
export const getSystemMenuInfo = function() {
return {
name: 'quickSettings',
constructor: imports.ui.panel.QuickSettings
constructor: Main.panel.statusArea.quickSettings.constructor
};
}
var getCurrentWorkspace = function() {
export const getCurrentWorkspace = function() {
return DisplayWrapper.getWorkspaceManager().get_active_workspace();
};
var getWorkspaceByIndex = function(index) {
export const getWorkspaceByIndex = function(index) {
return DisplayWrapper.getWorkspaceManager().get_workspace_by_index(index);
};
var getWorkspaceCount = function() {
export const getWorkspaceCount = function() {
return DisplayWrapper.getWorkspaceManager().n_workspaces;
};
var getStageTheme = function() {
export const getStageTheme = function() {
return St.ThemeContext.get_for_stage(global.stage);
};
var getScaleFactor = function() {
export const getScaleFactor = function() {
return getStageTheme().scale_factor || 1;
};
var findIndex = function(array, predicate) {
export const findIndex = function(array, predicate) {
if (array) {
if (Array.prototype.findIndex) {
return array.findIndex(predicate);
@@ -267,7 +260,7 @@ var findIndex = function(array, predicate) {
return -1;
};
var find = function(array, predicate) {
export const find = function(array, predicate) {
let index = findIndex(array, predicate);
if (index > -1) {
@@ -275,8 +268,8 @@ var find = function(array, predicate) {
}
};
var mergeObjects = function(main, bck) {
for (var prop in bck) {
export const mergeObjects = function(main, bck) {
for (const prop in bck) {
if (!main.hasOwnProperty(prop) && bck.hasOwnProperty(prop)) {
main[prop] = bck[prop];
}
@@ -285,24 +278,14 @@ var mergeObjects = function(main, bck) {
return main;
};
var hookVfunc = function(proto, symbol, func) {
if (!func) return
if (Gi.gobject_prototype_symbol && proto[Gi.gobject_prototype_symbol]) {
proto[Gi.gobject_prototype_symbol][Gi.hook_up_vfunc_symbol] (symbol, func);
} else {
proto[Gi.hook_up_vfunc_symbol] (symbol, func);
}
};
var getTrackedActorData = (actor) => {
export const getTrackedActorData = (actor) => {
let trackedIndex = Main.layoutManager._findActor(actor);
if (trackedIndex >= 0)
return Main.layoutManager._trackedActors[trackedIndex]
}
var getTransformedAllocation = function(actor) {
export const getTransformedAllocation = function(actor) {
let extents = actor.get_transformed_extents();
let topLeft = extents.get_top_left();
let bottomRight = extents.get_bottom_right();
@@ -310,13 +293,13 @@ var getTransformedAllocation = function(actor) {
return { x1: topLeft.x, x2: bottomRight.x, y1: topLeft.y, y2: bottomRight.y };
};
var setClip = function(actor, x, y, width, height) {
export const setClip = function(actor, x, y, width, height) {
actor.set_clip(0, 0, width, height);
actor.set_position(x, y);
actor.set_size(width, height);
};
var addKeybinding = function(key, settings, handler, modes) {
export const addKeybinding = function(key, settings, handler, modes) {
if (!Main.wm._allowedKeybindings[key]) {
Main.wm.addKeybinding(
key,
@@ -328,19 +311,19 @@ var addKeybinding = function(key, settings, handler, modes) {
}
};
var removeKeybinding = function(key) {
export const removeKeybinding = function(key) {
if (Main.wm._allowedKeybindings[key]) {
Main.wm.removeKeybinding(key);
}
};
var getrgbColor = function(color) {
color = typeof color === 'string' ? Clutter.color_from_string(color)[1] : color;
export const getrgbColor = function(color) {
color = typeof color === 'string' ? ColorUtils.color_from_string(color)[1] : color;
return { red: color.red, green: color.green, blue: color.blue };
};
var getrgbaColor = function(color, alpha, offset) {
export const getrgbaColor = function(color, alpha, offset) {
if (alpha <= 0) {
return 'transparent; ';
}
@@ -360,14 +343,14 @@ var getrgbaColor = function(color, alpha, offset) {
return 'rgba(' + rgb.red + ',' + rgb.green + ',' + rgb.blue + ',' + (Math.floor(alpha * 100) * 0.01) + '); ' ;
};
var checkIfColorIsBright = function(color) {
export const checkIfColorIsBright = function(color) {
let rgb = getrgbColor(color);
let brightness = 0.2126 * rgb.red + 0.7152 * rgb.green + 0.0722 * rgb.blue;
return brightness > 128;
};
var getMouseScrollDirection = function(event) {
export const getMouseScrollDirection = function(event) {
let direction;
switch (event.get_scroll_direction()) {
@@ -384,7 +367,7 @@ var getMouseScrollDirection = function(event) {
return direction;
};
var checkIfWindowHasTransient = function(window) {
export const checkIfWindowHasTransient = function(window) {
let hasTransient;
window.foreach_transient(t => !(hasTransient = true));
@@ -392,7 +375,7 @@ var checkIfWindowHasTransient = function(window) {
return hasTransient;
};
var activateSiblingWindow = function(windows, direction, startWindow) {
export const activateSiblingWindow = function(windows, direction, startWindow) {
let windowIndex = windows.indexOf(global.display.focus_window);
let nextWindowIndex = windowIndex < 0 ?
startWindow ? windows.indexOf(startWindow) : 0 :
@@ -409,7 +392,7 @@ var activateSiblingWindow = function(windows, direction, startWindow) {
}
};
var animateWindowOpacity = function(window, tweenOpts) {
export const animateWindowOpacity = function(window, tweenOpts) {
//there currently is a mutter bug with the windowactor opacity, starting with 3.34
//https://gitlab.gnome.org/GNOME/mutter/issues/836
@@ -438,7 +421,7 @@ var animateWindowOpacity = function(window, tweenOpts) {
animate(window, tweenOpts);
};
var animate = function(actor, options) {
export const animate = function(actor, options) {
//the original animations used Tweener instead of Clutter animations, so we
//use "time" and "delay" properties defined in seconds, as opposed to Clutter
//animations "duration" and "delay" which are defined in milliseconds
@@ -471,15 +454,15 @@ var animate = function(actor, options) {
actor.ease.apply(actor, params);
}
var isAnimating = function(actor, prop) {
export const isAnimating = function(actor, prop) {
return !!actor.get_transition(prop);
}
var stopAnimations = function(actor) {
export const stopAnimations = function(actor) {
actor.remove_all_transitions();
}
var getIndicators = function(delegate) {
export const getIndicators = function(delegate) {
if (delegate instanceof St.BoxLayout) {
return delegate;
}
@@ -487,11 +470,11 @@ var getIndicators = function(delegate) {
return delegate.indicators;
}
var getPoint = function(coords) {
return new imports.gi.Graphene.Point(coords);
export const getPoint = function(coords) {
return new Graphene.Point(coords);
}
var notify = function(text, iconName, action, isTransient) {
export const notify = function(text, iconName, action, isTransient) {
let source = new MessageTray.SystemNotificationSource();
let notification = new MessageTray.Notification(source, 'Dash to Panel', text);
let notifyFunc = source.showNotification || source.notify;
@@ -522,9 +505,9 @@ var notify = function(text, iconName, action, isTransient) {
* it would be clamp to the current one in any case.
* Return the amount of shift applied
*/
var ensureActorVisibleInScrollView = function(scrollView, actor, fadeSize, onComplete) {
let vadjustment = scrollView.vscroll.adjustment;
let hadjustment = scrollView.hscroll.adjustment;
export const ensureActorVisibleInScrollView = function(scrollView, actor, fadeSize, onComplete) {
const vadjustment = scrollView.vadjustment;
const hadjustment = scrollView.hadjustment;
let [vvalue, vlower, vupper, vstepIncrement, vpageIncrement, vpageSize] = vadjustment.get_values();
let [hvalue, hlower, hupper, hstepIncrement, hpageIncrement, hpageSize] = hadjustment.get_values();
@@ -579,7 +562,12 @@ var ensureActorVisibleInScrollView = function(scrollView, actor, fadeSize, onCom
/**
* ColorUtils is adapted from https://github.com/micheleg/dash-to-dock
*/
var ColorUtils = {
let colorNs = Clutter.Color ? Clutter : Cogl
export const ColorUtils = {
color_from_string: colorNs.color_from_string,
Color: colorNs.Color,
colorLuminance(r, g, b, dlum) {
// Darken or brighten color by a fraction dlum
// Each rgb value is modified by the same fraction.
@@ -690,7 +678,7 @@ const MAX_CACHED_ITEMS = 1000;
const BATCH_SIZE_TO_DELETE = 50;
const DOMINANT_COLOR_ICON_SIZE = 64;
var DominantColorExtractor = class {
export const DominantColorExtractor = class {
constructor(app){
this._app = app;
@@ -701,14 +689,9 @@ var DominantColorExtractor = class {
*/
_getIconPixBuf() {
let iconTexture = this._app.create_icon_texture(16);
let isGtk3 = !!Gtk.IconTheme.prototype.set_custom_theme;
if (themeLoader === null) {
let ifaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" });
let themeFunc = isGtk3 ? 'set_custom_theme' : 'set_theme_name';
themeLoader = new Gtk.IconTheme(),
themeLoader[themeFunc](ifaceSettings.get_string('icon-theme')); // Make sure the correct theme is loaded
themeLoader = new St.IconTheme();
}
// Unable to load the icon texture, use fallback
@@ -730,19 +713,11 @@ var DominantColorExtractor = class {
// Get the pixel buffer from the icon theme
if (iconTexture instanceof Gio.ThemedIcon) {
let params = [iconTexture.get_names()[0], DOMINANT_COLOR_ICON_SIZE, 0];
if (!isGtk3) {
params.splice(1, 0, null);
params.splice(3, 1, 1, 1, 1);
}
let icon_info = themeLoader.lookup_icon.apply(themeLoader, params);
let icon_info = themeLoader.lookup_icon(iconTexture.get_names()[0],
DOMINANT_COLOR_ICON_SIZE, 0);
if (icon_info !== null) {
if (isGtk3) return icon_info.load_icon();
return GdkPixbuf.Pixbuf.new_from_file(icon_info.get_file().get_path());
return icon_info.load_icon();
}
}
@@ -880,7 +855,7 @@ var DominantColorExtractor = class {
};
var drawRoundedLine = function(cr, x, y, width, height, isRoundLeft, isRoundRight, stroke, fill) {
export const drawRoundedLine = function(cr, x, y, width, height, isRoundLeft, isRoundRight, stroke, fill) {
if (height > width) {
y += Math.floor((height - width) / 2.0);
height = width;
@@ -888,8 +863,8 @@ var drawRoundedLine = function(cr, x, y, width, height, isRoundLeft, isRoundRigh
height = 2.0 * Math.floor(height / 2.0);
var leftRadius = isRoundLeft ? height / 2.0 : 0.0;
var rightRadius = isRoundRight ? height / 2.0 : 0.0;
const leftRadius = isRoundLeft ? height / 2.0 : 0.0;
const rightRadius = isRoundRight ? height / 2.0 : 0.0;
cr.moveTo(x + width - rightRadius, y);
cr.lineTo(x + leftRadius, y);
@@ -912,28 +887,3 @@ var drawRoundedLine = function(cr, x, y, width, height, isRoundLeft, isRoundRigh
cr.setSource(stroke);
cr.stroke();
}
/**
* Check if an app exists in the system.
*/
var checkedCommandsMap = new Map();
function checkIfCommandExists(app) {
let answer = checkedCommandsMap.get(app);
if (answer === undefined) {
// Command is a shell built in, use shell to call it.
// Quotes around app value are important. They let command operate
// on the whole value, instead of having shell interpret it.
let cmd = "sh -c 'command -v \"" + app + "\"'";
try {
let out = GLib.spawn_command_line_sync(cmd);
// out contains 1: stdout, 2: stderr, 3: exit code
answer = out[3] == 0;
} catch (ex) {
answer = false;
}
checkedCommandsMap.set(app, answer);
}
return answer;
}

View File

@@ -18,24 +18,19 @@
* This file is based on code from the Dash to Panel extension
*/
const GObject = imports.gi.GObject;
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Graphene = imports.gi.Graphene;
const Gtk = imports.gi.Gtk;
const Main = imports.ui.main;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const PopupMenu = imports.ui.popupMenu;
const Signals = imports.signals;
const St = imports.gi.St;
const WindowManager = imports.ui.windowManager;
const Workspace = imports.ui.workspace;
import GObject from 'gi://GObject';
import Clutter from 'gi://Clutter';
import GLib from 'gi://GLib';
import Graphene from 'gi://Graphene';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import Meta from 'gi://Meta';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import St from 'gi://St';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Panel = Me.imports.panel;
const Taskbar = Me.imports.taskbar;
const Utils = Me.imports.utils;
import * as Taskbar from './taskbar.js';
import * as Utils from './utils.js';
import {SETTINGS} from './extension.js';
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
//timeout intervals
const ENSURE_VISIBLE_MS = 200;
@@ -74,7 +69,7 @@ let scaleFactor = 1;
let animationTime = 0;
let aspectRatio = {};
var PreviewMenu = GObject.registerClass({
export const PreviewMenu = GObject.registerClass({
Signals: { 'open-state-changed': {} }
}, class PreviewMenu extends St.Widget {
@@ -108,13 +103,13 @@ var PreviewMenu = GObject.registerClass({
this._box = new St.BoxLayout({ vertical: this.isVertical });
this._scrollView = new St.ScrollView({
name: 'zorintaskbarPreviewScrollview',
hscrollbar_policy: Gtk.PolicyType.NEVER,
vscrollbar_policy: Gtk.PolicyType.NEVER,
hscrollbar_policy: St.PolicyType.NEVER,
vscrollbar_policy: St.PolicyType.NEVER,
enable_mouse_scrolling: true,
y_expand: !this.isVertical
});
this._scrollView.add_actor(this._box);
this._scrollView.add_child(this._box);
this.menu.add_child(this._scrollView);
this.add_child(this.menu);
}
@@ -157,7 +152,7 @@ var PreviewMenu = GObject.registerClass({
}
],
[
Me.settings,
SETTINGS,
[
'changed::panel-sizes',
'changed::window-preview-size'
@@ -275,7 +270,7 @@ var PreviewMenu = GObject.registerClass({
requestPeek(window) {
this._timeoutsHandler.remove(T3);
if (Me.settings.get_boolean('peek-mode')) {
if (SETTINGS.get_boolean('peek-mode')) {
if (this.peekInitialWorkspaceIndex < 0) {
this._timeoutsHandler.add([T3, ENTER_PEEK_MODE_TIMEOUT, () => this._peek(window)]);
} else {
@@ -448,7 +443,7 @@ var PreviewMenu = GObject.registerClass({
let x, y, w;
let geom = this.panel.getGeometry();
let panelBoxTheme = this.panel.panelBox.get_theme_node();
let previewSize = (Me.settings.get_int('window-preview-size') +
let previewSize = (SETTINGS.get_int('window-preview-size') +
WINDOW_PREVIEW_PADDING * 2) * scaleFactor;
if (this.isVertical) {
@@ -526,7 +521,7 @@ var PreviewMenu = GObject.registerClass({
}
_getScrollAdjustmentValues() {
let [value , , upper, , , pageSize] = this._scrollView[(this.isVertical ? 'v' : 'h') + 'scroll'].adjustment.get_values();
let [value , , upper, , , pageSize] = this._scrollView[(this.isVertical ? 'v' : 'h') + 'adjustment'].get_values();
return [value, upper, pageSize];
}
@@ -717,7 +712,7 @@ var PreviewMenu = GObject.registerClass({
}
});
var Preview = GObject.registerClass({
export const Preview = GObject.registerClass({
}, class Preview extends St.Widget {
_init(previewMenu) {
@@ -741,7 +736,7 @@ var Preview = GObject.registerClass({
let [previewBinWidth, previewBinHeight] = this._getBinSize();
let closeButton = new St.Button({ style_class: 'window-close', accessible_name: 'Close window' });
closeButton.add_actor(new St.Icon({ icon_name: 'window-close-symbolic' }));
closeButton.add_child(new St.Icon({ icon_name: 'window-close-symbolic' }));
this._closeButtonBin = new St.Widget({
style_class: 'preview-close-btn-container',
@@ -827,12 +822,14 @@ var Preview = GObject.registerClass({
this._addClone(cloneBin, animateSize);
this._previewMenu.updatePosition();
} else if (!this._waitWindowId) {
this._waitWindowId = Mainloop.idle_add(() => {
this._waitWindowId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
this._waitWindowId = 0;
if (this._previewMenu.opened) {
_assignWindowClone();
}
return GLib.SOURCE_REMOVE;
});
}
};
@@ -900,7 +897,7 @@ var Preview = GObject.registerClass({
this._hideOrShowCloseButton(true);
this.reactive = false;
if (!Me.settings.get_boolean('group-apps')) {
if (!SETTINGS.get_boolean('group-apps')) {
this._previewMenu.close();
} else {
this._previewMenu.endPeekHere();
@@ -915,7 +912,7 @@ var Preview = GObject.registerClass({
this.activate();
break;
case 2: // Middle click
if (Me.settings.get_boolean('preview-middle-click-close')) {
if (SETTINGS.get_boolean('preview-middle-click-close')) {
this._onCloseBtnClick();
}
break;
@@ -1090,7 +1087,7 @@ var Preview = GObject.registerClass({
}
_getPreviewDimensions() {
let size = Me.settings.get_int('window-preview-size') * scaleFactor;
let size = SETTINGS.get_int('window-preview-size') * scaleFactor;
let w, h;
if (this._previewMenu.isVertical) {
@@ -1105,7 +1102,7 @@ var Preview = GObject.registerClass({
}
});
var WindowCloneLayout = GObject.registerClass({
export const WindowCloneLayout = GObject.registerClass({
}, class WindowCloneLayout extends Clutter.BinLayout {
_init(frameRect, bufferRect) {
@@ -1133,11 +1130,11 @@ var WindowCloneLayout = GObject.registerClass({
}
});
function setStyle(actor, style) {
export function setStyle(actor, style) {
actor.set_style(style);
}
function getTweenOpts(opts) {
export function getTweenOpts(opts) {
let defaults = {
time: animationTime,
transition: 'easeInOutQuad'