From 56a74abb8af8e7ac8767c8552eef82063d2d6e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 19 Mar 2024 13:16:50 +0100 Subject: [PATCH 01/57] window-list: Use more appropriate fallback icon 'icon-missing' is not an actual icon name. It somewhat works because an invalid icon name will fallback to the correct 'image-missing', however for apps the generic app icon is a better fallback. Part-of: --- extensions/window-list/extension.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 90bf34cd..c3ffe92f 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -165,7 +165,7 @@ class WindowTitle extends St.BoxLayout { this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE); } else { this._icon.child = new St.Icon({ - icon_name: 'icon-missing', + icon_name: 'application-x-executable', icon_size: ICON_TEXTURE_SIZE, }); } From 19877302a627afde5f221b3f83df0ab5d4d11bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 12:38:33 +0100 Subject: [PATCH 02/57] workspace-indicator: Move indicator code into separate file Shortly after the window-list extension was added, it gained a workspace switcher based on the workspace indicator extension. Duplicating the code wasn't a big issue while the switcher was a simple menu, but since it gained previews with a fair bit of custom styling, syncing changes between the two extensions has become tedious, in particular as the two copies have slightly diverged over time. In order to allow the two copies to converge again, the indicator code needs to be separate from the extension boilerplate, so split out the code into a separate module. Part-of: --- extensions/workspace-indicator/extension.js | 432 +---------------- extensions/workspace-indicator/meson.build | 2 +- .../workspace-indicator/workspaceIndicator.js | 438 ++++++++++++++++++ po/POTFILES.in | 2 +- 4 files changed, 442 insertions(+), 432 deletions(-) create mode 100644 extensions/workspace-indicator/workspaceIndicator.js diff --git a/extensions/workspace-indicator/extension.js b/extensions/workspace-indicator/extension.js index f9c7dd9a..b383c919 100644 --- a/extensions/workspace-indicator/extension.js +++ b/extensions/workspace-indicator/extension.js @@ -4,439 +4,11 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -import Clutter from 'gi://Clutter'; -import Gio from 'gi://Gio'; -import GObject from 'gi://GObject'; -import Meta from 'gi://Meta'; -import St from 'gi://St'; +import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; -import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.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 PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; -import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; -const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; -const WORKSPACE_KEY = 'workspace-names'; - -const TOOLTIP_OFFSET = 6; -const TOOLTIP_ANIMATION_TIME = 150; - -const MAX_THUMBNAILS = 6; - -class WindowPreview extends St.Button { - static { - GObject.registerClass(this); - } - - constructor(window) { - super({ - style_class: 'workspace-indicator-window-preview', - }); - - this._delegate = this; - DND.makeDraggable(this, {restoreOnSuccess: true}); - - this._window = window; - - this._window.connectObject( - 'size-changed', () => this._checkRelayout(), - 'position-changed', () => this._checkRelayout(), - 'notify::minimized', this._updateVisible.bind(this), - 'notify::window-type', this._updateVisible.bind(this), - this); - this._updateVisible(); - - global.display.connectObject('notify::focus-window', - this._onFocusChanged.bind(this), this); - this._onFocusChanged(); - } - - // needed for DND - get metaWindow() { - return this._window; - } - - _onFocusChanged() { - if (global.display.focus_window === this._window) - this.add_style_class_name('active'); - else - this.remove_style_class_name('active'); - } - - _checkRelayout() { - const monitor = Main.layoutManager.findIndexForActor(this); - const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor); - if (this._window.get_frame_rect().overlap(workArea)) - this.queue_relayout(); - } - - _updateVisible() { - this.visible = this._window.window_type !== Meta.WindowType.DESKTOP && - this._window.showing_on_its_workspace(); - } -} - -class WorkspaceLayout extends Clutter.LayoutManager { - static { - GObject.registerClass(this); - } - - vfunc_get_preferred_width() { - return [0, 0]; - } - - vfunc_get_preferred_height() { - return [0, 0]; - } - - vfunc_allocate(container, box) { - const monitor = Main.layoutManager.findIndexForActor(container); - const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor); - const hscale = box.get_width() / workArea.width; - const vscale = box.get_height() / workArea.height; - - for (const child of container) { - const childBox = new Clutter.ActorBox(); - const frameRect = child.metaWindow.get_frame_rect(); - childBox.set_size( - Math.round(Math.min(frameRect.width, workArea.width) * hscale), - Math.round(Math.min(frameRect.height, workArea.height) * vscale)); - childBox.set_origin( - Math.round((frameRect.x - workArea.x) * hscale), - Math.round((frameRect.y - workArea.y) * vscale)); - child.allocate(childBox); - } - } -} - -class WorkspaceThumbnail extends St.Button { - static { - GObject.registerClass(this); - } - - constructor(index) { - super({ - style_class: 'workspace', - child: new Clutter.Actor({ - layout_manager: new WorkspaceLayout(), - clip_to_allocation: true, - x_expand: true, - y_expand: true, - }), - }); - - this._tooltip = new St.Label({ - style_class: 'dash-label', - visible: false, - }); - Main.uiGroup.add_child(this._tooltip); - - this.connect('destroy', this._onDestroy.bind(this)); - this.connect('notify::hover', this._syncTooltip.bind(this)); - - this._index = index; - this._delegate = this; // needed for DND - - this._windowPreviews = new Map(); - - let workspaceManager = global.workspace_manager; - this._workspace = workspaceManager.get_workspace_by_index(index); - - this._workspace.connectObject( - 'window-added', (ws, window) => this._addWindow(window), - 'window-removed', (ws, window) => this._removeWindow(window), - this); - - global.display.connectObject('restacked', - this._onRestacked.bind(this), this); - - this._workspace.list_windows().forEach(w => this._addWindow(w)); - this._onRestacked(); - } - - acceptDrop(source) { - if (!source.metaWindow) - return false; - - this._moveWindow(source.metaWindow); - return true; - } - - handleDragOver(source) { - if (source.metaWindow) - return DND.DragMotionResult.MOVE_DROP; - else - return DND.DragMotionResult.CONTINUE; - } - - _addWindow(window) { - if (this._windowPreviews.has(window)) - return; - - let preview = new WindowPreview(window); - preview.connect('clicked', (a, btn) => this.emit('clicked', btn)); - this._windowPreviews.set(window, preview); - this.child.add_child(preview); - } - - _removeWindow(window) { - let preview = this._windowPreviews.get(window); - if (!preview) - return; - - this._windowPreviews.delete(window); - preview.destroy(); - } - - _onRestacked() { - let lastPreview = null; - let windows = global.get_window_actors().map(a => a.meta_window); - for (let i = 0; i < windows.length; i++) { - let preview = this._windowPreviews.get(windows[i]); - if (!preview) - continue; - - this.child.set_child_above_sibling(preview, lastPreview); - lastPreview = preview; - } - } - - _moveWindow(window) { - let monitorIndex = Main.layoutManager.findIndexForActor(this); - if (monitorIndex !== window.get_monitor()) - window.move_to_monitor(monitorIndex); - window.change_workspace_by_index(this._index, false); - } - - on_clicked() { - let ws = global.workspace_manager.get_workspace_by_index(this._index); - if (ws) - ws.activate(global.get_current_time()); - } - - _syncTooltip() { - if (this.hover) { - this._tooltip.set({ - text: Meta.prefs_get_workspace_name(this._index), - visible: true, - opacity: 0, - }); - - const [stageX, stageY] = this.get_transformed_position(); - const thumbWidth = this.allocation.get_width(); - const thumbHeight = this.allocation.get_height(); - const tipWidth = this._tooltip.width; - const xOffset = Math.floor((thumbWidth - tipWidth) / 2); - const monitor = Main.layoutManager.findMonitorForActor(this); - const x = Math.clamp( - stageX + xOffset, - monitor.x, - monitor.x + monitor.width - tipWidth); - const y = stageY + thumbHeight + TOOLTIP_OFFSET; - this._tooltip.set_position(x, y); - } - - this._tooltip.ease({ - opacity: this.hover ? 255 : 0, - duration: TOOLTIP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this._tooltip.visible = this.hover), - }); - } - - _onDestroy() { - this._tooltip.destroy(); - } -} - -class WorkspaceIndicator extends PanelMenu.Button { - static { - GObject.registerClass(this); - } - - constructor() { - super(0.5, _('Workspace Indicator')); - - let container = new St.Widget({ - layout_manager: new Clutter.BinLayout(), - x_expand: true, - y_expand: true, - }); - this.add_child(container); - - let workspaceManager = global.workspace_manager; - - this._currentWorkspace = workspaceManager.get_active_workspace_index(); - this._statusLabel = new St.Label({ - style_class: 'panel-workspace-indicator', - y_align: Clutter.ActorAlign.CENTER, - text: this._labelText(), - }); - - container.add_child(this._statusLabel); - - this._thumbnailsBox = new St.BoxLayout({ - style_class: 'panel-workspace-indicator-box', - y_expand: true, - reactive: true, - }); - - container.add_child(this._thumbnailsBox); - - this._workspacesItems = []; - this._workspaceSection = new PopupMenu.PopupMenuSection(); - this.menu.addMenuItem(this._workspaceSection); - - workspaceManager.connectObject( - 'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER, - 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, - 'notify::layout-rows', this._updateThumbnailVisibility.bind(this), - this); - - this.connect('scroll-event', this._onScrollEvent.bind(this)); - this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this)); - this._createWorkspacesSection(); - this._updateThumbnails(); - this._updateThumbnailVisibility(); - - this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA}); - this._settings.connectObject(`changed::${WORKSPACE_KEY}`, - this._updateMenuLabels.bind(this), this); - } - - _onDestroy() { - Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); - - super._onDestroy(); - } - - _updateThumbnailVisibility() { - const {workspaceManager} = global; - const vertical = workspaceManager.layout_rows === -1; - const useMenu = - vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS; - this.reactive = useMenu; - - this._statusLabel.visible = useMenu; - this._thumbnailsBox.visible = !useMenu; - - // Disable offscreen-redirect when showing the workspace switcher - // so that clip-to-allocation works - Main.panel.set_offscreen_redirect(useMenu - ? Clutter.OffscreenRedirect.ALWAYS - : Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY); - } - - _onWorkspaceSwitched() { - this._currentWorkspace = global.workspace_manager.get_active_workspace_index(); - - this._updateMenuOrnament(); - this._updateActiveThumbnail(); - - this._statusLabel.set_text(this._labelText()); - } - - _nWorkspacesChanged() { - this._createWorkspacesSection(); - this._updateThumbnails(); - this._updateThumbnailVisibility(); - } - - _updateMenuOrnament() { - for (let i = 0; i < this._workspacesItems.length; i++) { - this._workspacesItems[i].setOrnament(i === this._currentWorkspace - ? PopupMenu.Ornament.DOT - : PopupMenu.Ornament.NO_DOT); - } - } - - _updateActiveThumbnail() { - let thumbs = this._thumbnailsBox.get_children(); - for (let i = 0; i < thumbs.length; i++) { - if (i === this._currentWorkspace) - thumbs[i].add_style_class_name('active'); - else - thumbs[i].remove_style_class_name('active'); - } - } - - _labelText(workspaceIndex) { - if (workspaceIndex === undefined) { - workspaceIndex = this._currentWorkspace; - return (workspaceIndex + 1).toString(); - } - return Meta.prefs_get_workspace_name(workspaceIndex); - } - - _updateMenuLabels() { - for (let i = 0; i < this._workspacesItems.length; i++) - this._workspacesItems[i].label.text = this._labelText(i); - } - - _createWorkspacesSection() { - let workspaceManager = global.workspace_manager; - - this._workspaceSection.removeAll(); - this._workspacesItems = []; - this._currentWorkspace = workspaceManager.get_active_workspace_index(); - - let i = 0; - for (; i < workspaceManager.n_workspaces; i++) { - this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i)); - this._workspaceSection.addMenuItem(this._workspacesItems[i]); - this._workspacesItems[i].workspaceId = i; - this._workspacesItems[i].label_actor = this._statusLabel; - this._workspacesItems[i].connect('activate', (actor, _event) => { - this._activate(actor.workspaceId); - }); - - this._workspacesItems[i].setOrnament(i === this._currentWorkspace - ? PopupMenu.Ornament.DOT - : PopupMenu.Ornament.NO_DOT); - } - - this._statusLabel.set_text(this._labelText()); - } - - _updateThumbnails() { - let workspaceManager = global.workspace_manager; - - this._thumbnailsBox.destroy_all_children(); - - for (let i = 0; i < workspaceManager.n_workspaces; i++) { - let thumb = new WorkspaceThumbnail(i); - this._thumbnailsBox.add_child(thumb); - } - this._updateActiveThumbnail(); - } - - _activate(index) { - let workspaceManager = global.workspace_manager; - - if (index >= 0 && index < workspaceManager.n_workspaces) { - let metaWorkspace = workspaceManager.get_workspace_by_index(index); - metaWorkspace.activate(global.get_current_time()); - } - } - - _onScrollEvent(actor, event) { - let direction = event.get_scroll_direction(); - let diff = 0; - if (direction === Clutter.ScrollDirection.DOWN) - diff = 1; - else if (direction === Clutter.ScrollDirection.UP) - diff = -1; - else - return; - - - let newIndex = global.workspace_manager.get_active_workspace_index() + diff; - this._activate(newIndex); - } -} +import {WorkspaceIndicator} from './workspaceIndicator.js'; export default class WorkspaceIndicatorExtension extends Extension { enable() { diff --git a/extensions/workspace-indicator/meson.build b/extensions/workspace-indicator/meson.build index 36daa535..6dd08dae 100644 --- a/extensions/workspace-indicator/meson.build +++ b/extensions/workspace-indicator/meson.build @@ -9,4 +9,4 @@ extension_data += configure_file( ) extension_data += files('stylesheet.css') -extension_sources += files('prefs.js') +extension_sources += files('prefs.js', 'workspaceIndicator.js') diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js new file mode 100644 index 00000000..6b0903d5 --- /dev/null +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -0,0 +1,438 @@ +// SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos +// SPDX-FileCopyrightText: 2011 Giovanni Campagna +// SPDX-FileCopyrightText: 2017 Florian Müllner +// +// SPDX-License-Identifier: GPL-2.0-or-later + +import Clutter from 'gi://Clutter'; +import Gio from 'gi://Gio'; +import GObject from 'gi://GObject'; +import Meta from 'gi://Meta'; +import St from 'gi://St'; + +import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.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 PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; +import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; + +const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; +const WORKSPACE_KEY = 'workspace-names'; + +const TOOLTIP_OFFSET = 6; +const TOOLTIP_ANIMATION_TIME = 150; + +const MAX_THUMBNAILS = 6; + +class WindowPreview extends St.Button { + static { + GObject.registerClass(this); + } + + constructor(window) { + super({ + style_class: 'workspace-indicator-window-preview', + }); + + this._delegate = this; + DND.makeDraggable(this, {restoreOnSuccess: true}); + + this._window = window; + + this._window.connectObject( + 'size-changed', () => this._checkRelayout(), + 'position-changed', () => this._checkRelayout(), + 'notify::minimized', this._updateVisible.bind(this), + 'notify::window-type', this._updateVisible.bind(this), + this); + this._updateVisible(); + + global.display.connectObject('notify::focus-window', + this._onFocusChanged.bind(this), this); + this._onFocusChanged(); + } + + // needed for DND + get metaWindow() { + return this._window; + } + + _onFocusChanged() { + if (global.display.focus_window === this._window) + this.add_style_class_name('active'); + else + this.remove_style_class_name('active'); + } + + _checkRelayout() { + const monitor = Main.layoutManager.findIndexForActor(this); + const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor); + if (this._window.get_frame_rect().overlap(workArea)) + this.queue_relayout(); + } + + _updateVisible() { + this.visible = this._window.window_type !== Meta.WindowType.DESKTOP && + this._window.showing_on_its_workspace(); + } +} + +class WorkspaceLayout extends Clutter.LayoutManager { + static { + GObject.registerClass(this); + } + + vfunc_get_preferred_width() { + return [0, 0]; + } + + vfunc_get_preferred_height() { + return [0, 0]; + } + + vfunc_allocate(container, box) { + const monitor = Main.layoutManager.findIndexForActor(container); + const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor); + const hscale = box.get_width() / workArea.width; + const vscale = box.get_height() / workArea.height; + + for (const child of container) { + const childBox = new Clutter.ActorBox(); + const frameRect = child.metaWindow.get_frame_rect(); + childBox.set_size( + Math.round(Math.min(frameRect.width, workArea.width) * hscale), + Math.round(Math.min(frameRect.height, workArea.height) * vscale)); + childBox.set_origin( + Math.round((frameRect.x - workArea.x) * hscale), + Math.round((frameRect.y - workArea.y) * vscale)); + child.allocate(childBox); + } + } +} + +class WorkspaceThumbnail extends St.Button { + static { + GObject.registerClass(this); + } + + constructor(index) { + super({ + style_class: 'workspace', + child: new Clutter.Actor({ + layout_manager: new WorkspaceLayout(), + clip_to_allocation: true, + x_expand: true, + y_expand: true, + }), + }); + + this._tooltip = new St.Label({ + style_class: 'dash-label', + visible: false, + }); + Main.uiGroup.add_child(this._tooltip); + + this.connect('destroy', this._onDestroy.bind(this)); + this.connect('notify::hover', this._syncTooltip.bind(this)); + + this._index = index; + this._delegate = this; // needed for DND + + this._windowPreviews = new Map(); + + let workspaceManager = global.workspace_manager; + this._workspace = workspaceManager.get_workspace_by_index(index); + + this._workspace.connectObject( + 'window-added', (ws, window) => this._addWindow(window), + 'window-removed', (ws, window) => this._removeWindow(window), + this); + + global.display.connectObject('restacked', + this._onRestacked.bind(this), this); + + this._workspace.list_windows().forEach(w => this._addWindow(w)); + this._onRestacked(); + } + + acceptDrop(source) { + if (!source.metaWindow) + return false; + + this._moveWindow(source.metaWindow); + return true; + } + + handleDragOver(source) { + if (source.metaWindow) + return DND.DragMotionResult.MOVE_DROP; + else + return DND.DragMotionResult.CONTINUE; + } + + _addWindow(window) { + if (this._windowPreviews.has(window)) + return; + + let preview = new WindowPreview(window); + preview.connect('clicked', (a, btn) => this.emit('clicked', btn)); + this._windowPreviews.set(window, preview); + this.child.add_child(preview); + } + + _removeWindow(window) { + let preview = this._windowPreviews.get(window); + if (!preview) + return; + + this._windowPreviews.delete(window); + preview.destroy(); + } + + _onRestacked() { + let lastPreview = null; + let windows = global.get_window_actors().map(a => a.meta_window); + for (let i = 0; i < windows.length; i++) { + let preview = this._windowPreviews.get(windows[i]); + if (!preview) + continue; + + this.child.set_child_above_sibling(preview, lastPreview); + lastPreview = preview; + } + } + + _moveWindow(window) { + let monitorIndex = Main.layoutManager.findIndexForActor(this); + if (monitorIndex !== window.get_monitor()) + window.move_to_monitor(monitorIndex); + window.change_workspace_by_index(this._index, false); + } + + on_clicked() { + let ws = global.workspace_manager.get_workspace_by_index(this._index); + if (ws) + ws.activate(global.get_current_time()); + } + + _syncTooltip() { + if (this.hover) { + this._tooltip.set({ + text: Meta.prefs_get_workspace_name(this._index), + visible: true, + opacity: 0, + }); + + const [stageX, stageY] = this.get_transformed_position(); + const thumbWidth = this.allocation.get_width(); + const thumbHeight = this.allocation.get_height(); + const tipWidth = this._tooltip.width; + const xOffset = Math.floor((thumbWidth - tipWidth) / 2); + const monitor = Main.layoutManager.findMonitorForActor(this); + const x = Math.clamp( + stageX + xOffset, + monitor.x, + monitor.x + monitor.width - tipWidth); + const y = stageY + thumbHeight + TOOLTIP_OFFSET; + this._tooltip.set_position(x, y); + } + + this._tooltip.ease({ + opacity: this.hover ? 255 : 0, + duration: TOOLTIP_ANIMATION_TIME, + mode: Clutter.AnimationMode.EASE_OUT_QUAD, + onComplete: () => (this._tooltip.visible = this.hover), + }); + } + + _onDestroy() { + this._tooltip.destroy(); + } +} + +export class WorkspaceIndicator extends PanelMenu.Button { + static { + GObject.registerClass(this); + } + + constructor() { + super(0.5, _('Workspace Indicator')); + + let container = new St.Widget({ + layout_manager: new Clutter.BinLayout(), + x_expand: true, + y_expand: true, + }); + this.add_child(container); + + let workspaceManager = global.workspace_manager; + + this._currentWorkspace = workspaceManager.get_active_workspace_index(); + this._statusLabel = new St.Label({ + style_class: 'panel-workspace-indicator', + y_align: Clutter.ActorAlign.CENTER, + text: this._labelText(), + }); + + container.add_child(this._statusLabel); + + this._thumbnailsBox = new St.BoxLayout({ + style_class: 'panel-workspace-indicator-box', + y_expand: true, + reactive: true, + }); + + container.add_child(this._thumbnailsBox); + + this._workspacesItems = []; + this._workspaceSection = new PopupMenu.PopupMenuSection(); + this.menu.addMenuItem(this._workspaceSection); + + workspaceManager.connectObject( + 'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER, + 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, + 'notify::layout-rows', this._updateThumbnailVisibility.bind(this), + this); + + this.connect('scroll-event', this._onScrollEvent.bind(this)); + this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this)); + this._createWorkspacesSection(); + this._updateThumbnails(); + this._updateThumbnailVisibility(); + + this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA}); + this._settings.connectObject(`changed::${WORKSPACE_KEY}`, + this._updateMenuLabels.bind(this), this); + } + + _onDestroy() { + Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); + + super._onDestroy(); + } + + _updateThumbnailVisibility() { + const {workspaceManager} = global; + const vertical = workspaceManager.layout_rows === -1; + const useMenu = + vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS; + this.reactive = useMenu; + + this._statusLabel.visible = useMenu; + this._thumbnailsBox.visible = !useMenu; + + // Disable offscreen-redirect when showing the workspace switcher + // so that clip-to-allocation works + Main.panel.set_offscreen_redirect(useMenu + ? Clutter.OffscreenRedirect.ALWAYS + : Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY); + } + + _onWorkspaceSwitched() { + this._currentWorkspace = global.workspace_manager.get_active_workspace_index(); + + this._updateMenuOrnament(); + this._updateActiveThumbnail(); + + this._statusLabel.set_text(this._labelText()); + } + + _nWorkspacesChanged() { + this._createWorkspacesSection(); + this._updateThumbnails(); + this._updateThumbnailVisibility(); + } + + _updateMenuOrnament() { + for (let i = 0; i < this._workspacesItems.length; i++) { + this._workspacesItems[i].setOrnament(i === this._currentWorkspace + ? PopupMenu.Ornament.DOT + : PopupMenu.Ornament.NO_DOT); + } + } + + _updateActiveThumbnail() { + let thumbs = this._thumbnailsBox.get_children(); + for (let i = 0; i < thumbs.length; i++) { + if (i === this._currentWorkspace) + thumbs[i].add_style_class_name('active'); + else + thumbs[i].remove_style_class_name('active'); + } + } + + _labelText(workspaceIndex) { + if (workspaceIndex === undefined) { + workspaceIndex = this._currentWorkspace; + return (workspaceIndex + 1).toString(); + } + return Meta.prefs_get_workspace_name(workspaceIndex); + } + + _updateMenuLabels() { + for (let i = 0; i < this._workspacesItems.length; i++) + this._workspacesItems[i].label.text = this._labelText(i); + } + + _createWorkspacesSection() { + let workspaceManager = global.workspace_manager; + + this._workspaceSection.removeAll(); + this._workspacesItems = []; + this._currentWorkspace = workspaceManager.get_active_workspace_index(); + + let i = 0; + for (; i < workspaceManager.n_workspaces; i++) { + this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i)); + this._workspaceSection.addMenuItem(this._workspacesItems[i]); + this._workspacesItems[i].workspaceId = i; + this._workspacesItems[i].label_actor = this._statusLabel; + this._workspacesItems[i].connect('activate', (actor, _event) => { + this._activate(actor.workspaceId); + }); + + this._workspacesItems[i].setOrnament(i === this._currentWorkspace + ? PopupMenu.Ornament.DOT + : PopupMenu.Ornament.NO_DOT); + } + + this._statusLabel.set_text(this._labelText()); + } + + _updateThumbnails() { + let workspaceManager = global.workspace_manager; + + this._thumbnailsBox.destroy_all_children(); + + for (let i = 0; i < workspaceManager.n_workspaces; i++) { + let thumb = new WorkspaceThumbnail(i); + this._thumbnailsBox.add_child(thumb); + } + this._updateActiveThumbnail(); + } + + _activate(index) { + let workspaceManager = global.workspace_manager; + + if (index >= 0 && index < workspaceManager.n_workspaces) { + let metaWorkspace = workspaceManager.get_workspace_by_index(index); + metaWorkspace.activate(global.get_current_time()); + } + } + + _onScrollEvent(actor, event) { + let direction = event.get_scroll_direction(); + let diff = 0; + if (direction === Clutter.ScrollDirection.DOWN) + diff = 1; + else if (direction === Clutter.ScrollDirection.UP) + diff = -1; + else + return; + + + let newIndex = global.workspace_manager.get_active_workspace_index() + diff; + this._activate(newIndex); + } +} diff --git a/po/POTFILES.in b/po/POTFILES.in index 4abfcfca..4ddf88bc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -19,5 +19,5 @@ extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml extensions/window-list/prefs.js extensions/window-list/workspaceIndicator.js extensions/windowsNavigator/extension.js -extensions/workspace-indicator/extension.js extensions/workspace-indicator/prefs.js +extensions/workspace-indicator/workspaceIndicator.js From 00045b7396508f547bf83ca8fb02d37f82be2b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 19:09:38 +0100 Subject: [PATCH 03/57] workspace-indicator: Use descendant style selectors Add a style class to the indicator itself, and only select descendant elements. This allows using the briefer class names from the window-list extension without too much risk of conflicts. Part-of: --- extensions/workspace-indicator/stylesheet.css | 8 ++++---- extensions/workspace-indicator/workspaceIndicator.js | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/extensions/workspace-indicator/stylesheet.css b/extensions/workspace-indicator/stylesheet.css index 7b53a46f..749878c1 100644 --- a/extensions/workspace-indicator/stylesheet.css +++ b/extensions/workspace-indicator/stylesheet.css @@ -5,23 +5,23 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ -.panel-workspace-indicator { +.workspace-indicator .status-label { padding: 0 8px; } -.panel-workspace-indicator-box { +.workspace-indicator .workspaces-box { padding: 4px 0; spacing: 4px; } -.panel-workspace-indicator-box .workspace { +.workspace-indicator .workspace { width: 40px; border: 2px solid #000; border-radius: 2px; background-color: #595959; } -.panel-workspace-indicator-box .workspace.active { +.workspace-indicator .workspace.active { border-color: #fff; } diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 6b0903d5..4bf9c0a2 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -259,6 +259,8 @@ export class WorkspaceIndicator extends PanelMenu.Button { constructor() { super(0.5, _('Workspace Indicator')); + this.add_style_class_name('workspace-indicator'); + let container = new St.Widget({ layout_manager: new Clutter.BinLayout(), x_expand: true, @@ -270,7 +272,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._currentWorkspace = workspaceManager.get_active_workspace_index(); this._statusLabel = new St.Label({ - style_class: 'panel-workspace-indicator', + style_class: 'status-label', y_align: Clutter.ActorAlign.CENTER, text: this._labelText(), }); @@ -278,7 +280,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { container.add_child(this._statusLabel); this._thumbnailsBox = new St.BoxLayout({ - style_class: 'panel-workspace-indicator-box', + style_class: 'workspaces-box', y_expand: true, reactive: true, }); From d3debab713769ba29f1d4cf4dae5dfe93d664a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 12:48:43 +0100 Subject: [PATCH 04/57] window-list: Use consistent style class prefix This will eventually allow us to re-use the workspace-indicator extension without changing anything but the used prefix. Part-of: --- extensions/window-list/stylesheet-dark.css | 4 ++-- extensions/window-list/stylesheet-light.css | 4 ++-- extensions/window-list/workspaceIndicator.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index b4c0a3b4..fbadf4d0 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -102,12 +102,12 @@ background-color: #3f3f3f; } -.window-list-window-preview { +.window-list-workspace-indicator-window-preview { background-color: #bebebe; border-radius: 1px; } -.window-list-window-preview.active { +.window-list-workspace-indicator-window-preview.active { background-color: #d4d4d4; } diff --git a/extensions/window-list/stylesheet-light.css b/extensions/window-list/stylesheet-light.css index e4d3a36c..e9352362 100644 --- a/extensions/window-list/stylesheet-light.css +++ b/extensions/window-list/stylesheet-light.css @@ -61,11 +61,11 @@ border-color: #888; } -.window-list-window-preview { +.window-list-workspace-indicator-window-preview { background-color: #ededed; border: 1px solid #ccc; } -.window-list-window-preview.active { +.window-list-workspace-indicator-window-preview.active { background-color: #f6f5f4; } diff --git a/extensions/window-list/workspaceIndicator.js b/extensions/window-list/workspaceIndicator.js index 62ebffbd..5b11fe88 100644 --- a/extensions/window-list/workspaceIndicator.js +++ b/extensions/window-list/workspaceIndicator.js @@ -27,7 +27,7 @@ class WindowPreview extends St.Button { constructor(window) { super({ - style_class: 'window-list-window-preview', + style_class: 'window-list-workspace-indicator-window-preview', }); this._delegate = this; From e96015b9ea34403b3586a4d403d53804b6cb1bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 23 Feb 2024 01:59:15 +0100 Subject: [PATCH 05/57] workspace-indicator: Allow overriding base style class This will allow reusing the code from the window-list extension without limiting the ability to specify styling that only applies to one of the extensions. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 4bf9c0a2..cdcc67fe 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -25,6 +25,8 @@ const TOOLTIP_ANIMATION_TIME = 150; const MAX_THUMBNAILS = 6; +let baseStyleClassName = ''; + class WindowPreview extends St.Button { static { GObject.registerClass(this); @@ -32,7 +34,7 @@ class WindowPreview extends St.Button { constructor(window) { super({ - style_class: 'workspace-indicator-window-preview', + style_class: `${baseStyleClassName}-window-preview`, }); this._delegate = this; @@ -256,10 +258,15 @@ export class WorkspaceIndicator extends PanelMenu.Button { GObject.registerClass(this); } - constructor() { + constructor(params = {}) { super(0.5, _('Workspace Indicator')); - this.add_style_class_name('workspace-indicator'); + const { + baseStyleClass = 'workspace-indicator', + } = params; + + baseStyleClassName = baseStyleClass; + this.add_style_class_name(baseStyleClassName); let container = new St.Widget({ layout_manager: new Clutter.BinLayout(), From 47c12c62796088461a29cfc21c80b08484fff20a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 23 Feb 2024 01:58:50 +0100 Subject: [PATCH 06/57] window-list: Override base style class Apply the changes from the last commit to the workspace-indicator copy, and override the base style class from the extension. This will eventually allow us to share the exact same code between the two extensions, but still use individual styling if necessary. Part-of: --- extensions/window-list/extension.js | 5 ++++- extensions/window-list/workspaceIndicator.js | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index c3ffe92f..8681bae0 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -750,7 +750,10 @@ class WindowList extends St.Widget { let indicatorsBox = new St.BoxLayout({x_align: Clutter.ActorAlign.END}); box.add_child(indicatorsBox); - this._workspaceIndicator = new WorkspaceIndicator(); + this._workspaceIndicator = new WorkspaceIndicator({ + baseStyleClass: 'window-list-workspace-indicator', + }); + indicatorsBox.add_child(this._workspaceIndicator.container); this._mutterSettings = new Gio.Settings({schema_id: 'org.gnome.mutter'}); diff --git a/extensions/window-list/workspaceIndicator.js b/extensions/window-list/workspaceIndicator.js index 5b11fe88..2c557e5b 100644 --- a/extensions/window-list/workspaceIndicator.js +++ b/extensions/window-list/workspaceIndicator.js @@ -20,6 +20,8 @@ const TOOLTIP_ANIMATION_TIME = 150; const MAX_THUMBNAILS = 6; +let baseStyleClassName = ''; + class WindowPreview extends St.Button { static { GObject.registerClass(this); @@ -27,7 +29,7 @@ class WindowPreview extends St.Button { constructor(window) { super({ - style_class: 'window-list-workspace-indicator-window-preview', + style_class: `${baseStyleClassName}-window-preview`, }); this._delegate = this; @@ -251,10 +253,17 @@ export class WorkspaceIndicator extends PanelMenu.Button { GObject.registerClass(this); } - constructor() { + constructor(params = {}) { super(0.5, _('Workspace Indicator'), true); + + const { + baseStyleClass = 'workspace-indicator', + } = params; + + baseStyleClassName = baseStyleClass; + this.add_style_class_name(baseStyleClassName); + this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM)); - this.add_style_class_name('window-list-workspace-indicator'); this.remove_style_class_name('panel-button'); this.menu.actor.remove_style_class_name('panel-menu'); From 8693a8a74cce8c0066dd68a83795f426c0b330a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 12:48:43 +0100 Subject: [PATCH 07/57] window-list: Externally adjust workspace menu In order to use a PanelMenu.Button in the bottom bar, we have to tweak its menu a bit. We currently handle this inside the indicator, but that means the code diverges from the original code in the workspace-indicator extension. Avoid this by using a small subclass that handles the adjustments. Part-of: --- extensions/window-list/extension.js | 25 ++++++++++++++++++-- extensions/window-list/workspaceIndicator.js | 6 +---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 8681bae0..cc22e9fe 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -750,10 +750,9 @@ class WindowList extends St.Widget { let indicatorsBox = new St.BoxLayout({x_align: Clutter.ActorAlign.END}); box.add_child(indicatorsBox); - this._workspaceIndicator = new WorkspaceIndicator({ + this._workspaceIndicator = new BottomWorkspaceIndicator({ baseStyleClass: 'window-list-workspace-indicator', }); - indicatorsBox.add_child(this._workspaceIndicator.container); this._mutterSettings = new Gio.Settings({schema_id: 'org.gnome.mutter'}); @@ -1083,6 +1082,28 @@ class WindowList extends St.Widget { } } +class BottomWorkspaceIndicator extends WorkspaceIndicator { + static { + GObject.registerClass(this); + } + + constructor(params) { + super(params); + + this.remove_style_class_name('panel-button'); + } + + setMenu(menu) { + super.setMenu(menu); + + if (!menu) + return; + + this.menu.actor.updateArrowSide(St.Side.BOTTOM); + this.menu.actor.remove_style_class_name('panel-menu'); + } +} + export default class WindowListExtension extends Extension { constructor(metadata) { super(metadata); diff --git a/extensions/window-list/workspaceIndicator.js b/extensions/window-list/workspaceIndicator.js index 2c557e5b..69167eb6 100644 --- a/extensions/window-list/workspaceIndicator.js +++ b/extensions/window-list/workspaceIndicator.js @@ -254,7 +254,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { } constructor(params = {}) { - super(0.5, _('Workspace Indicator'), true); + super(0.5, _('Workspace Indicator')); const { baseStyleClass = 'workspace-indicator', @@ -263,10 +263,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { baseStyleClassName = baseStyleClass; this.add_style_class_name(baseStyleClassName); - this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM)); - this.remove_style_class_name('panel-button'); - this.menu.actor.remove_style_class_name('panel-menu'); - let container = new St.Widget({ layout_manager: new Clutter.BinLayout(), x_expand: true, From 9c97f01bc23cd7513d309ffd7ead0e130b7b5849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 21 Mar 2024 16:49:35 +0100 Subject: [PATCH 08/57] window-list: Handle changes to workspace menu For now the menu is always set at construction time, however this will change in the future. Prepare for that by handling the `menu-set` signal, similar to the top bar. Part-of: --- extensions/window-list/extension.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index cc22e9fe..715ae249 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -765,7 +765,9 @@ class WindowList extends St.Widget { this._updateWorkspaceIndicatorVisibility(); this._menuManager = new PopupMenu.PopupMenuManager(this); - this._menuManager.addMenu(this._workspaceIndicator.menu); + this._workspaceIndicator.connectObject('menu-set', + () => this._onWorkspaceMenuSet(), this); + this._onWorkspaceMenuSet(); Main.layoutManager.addChrome(this, { affectsStruts: true, @@ -862,6 +864,11 @@ class WindowList extends St.Widget { children[newActive].activate(); } + _onWorkspaceMenuSet() { + if (this._workspaceIndicator.menu) + this._menuManager.addMenu(this._workspaceIndicator.menu); + } + _updatePosition() { this.set_position( this._monitor.x, From 64060ef4c5dc302479115532a980e461577c8698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 15:58:39 +0100 Subject: [PATCH 09/57] workspace-indicator: Don't use SCHEMA/KEY constants Each constant is only used once, so all they do is disconnect the actual value from the code that uses it. The copy in the window-list extension just uses the strings directly, do the same here. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index cdcc67fe..fe54b95c 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -17,9 +17,6 @@ import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; -const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; -const WORKSPACE_KEY = 'workspace-names'; - const TOOLTIP_OFFSET = 6; const TOOLTIP_ANIMATION_TIME = 150; @@ -310,9 +307,10 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._updateThumbnails(); this._updateThumbnailVisibility(); - this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA}); - this._settings.connectObject(`changed::${WORKSPACE_KEY}`, - this._updateMenuLabels.bind(this), this); + const desktopSettings = + new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'}); + desktopSettings.connectObject('changed::workspace-names', + () => this._updateMenuLabels(), this); } _onDestroy() { From 25e854dde87b2b73d34d0164afef18bfdc8719c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 18:59:23 +0100 Subject: [PATCH 10/57] workspace-indicator: Use existing property We already track the current workspace index, use that instead of getting it from the workspace manager again. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index fe54b95c..26c9d7ee 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -439,7 +439,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { return; - let newIndex = global.workspace_manager.get_active_workspace_index() + diff; + const newIndex = this._currentWorkspace + diff; this._activate(newIndex); } } From 9c8c3495b6fd37e79a5051cd492b7260de4bc2be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 16:14:24 +0100 Subject: [PATCH 11/57] workspace-indicator: Don't use menu section We never added anything else to the menu, so we can just operate on the entire menu instead of an intermediate section. This removes another difference with the window-list copy. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 26c9d7ee..117c7a65 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -292,8 +292,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { container.add_child(this._thumbnailsBox); this._workspacesItems = []; - this._workspaceSection = new PopupMenu.PopupMenuSection(); - this.menu.addMenuItem(this._workspaceSection); workspaceManager.connectObject( 'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER, @@ -303,7 +301,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this.connect('scroll-event', this._onScrollEvent.bind(this)); this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this)); - this._createWorkspacesSection(); + this._updateMenu(); this._updateThumbnails(); this._updateThumbnailVisibility(); @@ -346,7 +344,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { } _nWorkspacesChanged() { - this._createWorkspacesSection(); + this._updateMenu(); this._updateThumbnails(); this._updateThumbnailVisibility(); } @@ -382,17 +380,17 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._workspacesItems[i].label.text = this._labelText(i); } - _createWorkspacesSection() { + _updateMenu() { let workspaceManager = global.workspace_manager; - this._workspaceSection.removeAll(); + this.menu.removeAll(); this._workspacesItems = []; this._currentWorkspace = workspaceManager.get_active_workspace_index(); let i = 0; for (; i < workspaceManager.n_workspaces; i++) { this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i)); - this._workspaceSection.addMenuItem(this._workspacesItems[i]); + this.menu.addMenuItem(this._workspacesItems[i]); this._workspacesItems[i].workspaceId = i; this._workspacesItems[i].label_actor = this._statusLabel; this._workspacesItems[i].connect('activate', (actor, _event) => { From 078a5a01ae5f34999f719947028d47b220b6a8b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 13:05:15 +0100 Subject: [PATCH 12/57] workspace-indicator: Support showing tooltips above The indicator is located in the top bar, so tooltips are always shown below the previews. However supporting showing tooltips above previews when space permits allows the same code to be used in the copy that is included with the window-list extension. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 117c7a65..9a1055aa 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -224,16 +224,17 @@ class WorkspaceThumbnail extends St.Button { }); const [stageX, stageY] = this.get_transformed_position(); - const thumbWidth = this.allocation.get_width(); - const thumbHeight = this.allocation.get_height(); - const tipWidth = this._tooltip.width; + const [thumbWidth, thumbHeight] = this.allocation.get_size(); + const [tipWidth, tipHeight] = this._tooltip.get_size(); const xOffset = Math.floor((thumbWidth - tipWidth) / 2); const monitor = Main.layoutManager.findMonitorForActor(this); const x = Math.clamp( stageX + xOffset, monitor.x, monitor.x + monitor.width - tipWidth); - const y = stageY + thumbHeight + TOOLTIP_OFFSET; + const y = stageY - monitor.y > thumbHeight + TOOLTIP_OFFSET + ? stageY - tipHeight - TOOLTIP_OFFSET // show above + : stageY + thumbHeight + TOOLTIP_OFFSET; // show below this._tooltip.set_position(x, y); } From 89a3daf9febdc46e423aa74d9bf07fdadcc35472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 17:37:16 +0100 Subject: [PATCH 13/57] workspace-indicator: Only change top bar redirect when in top bar While this is always the case for the workspace indicator, adding the check will allow to use the same code in the window list. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 9a1055aa..f118654e 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -302,6 +302,16 @@ export class WorkspaceIndicator extends PanelMenu.Button { this.connect('scroll-event', this._onScrollEvent.bind(this)); this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this)); + + this._inTopBar = false; + this.connect('notify::realized', () => { + if (!this.realized) + return; + + this._inTopBar = Main.panel.contains(this); + this._updateTopBarRedirect(); + }); + this._updateMenu(); this._updateThumbnails(); this._updateThumbnailVisibility(); @@ -313,7 +323,9 @@ export class WorkspaceIndicator extends PanelMenu.Button { } _onDestroy() { - Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); + if (this._inTopBar) + Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS); + this._inTopBar = false; super._onDestroy(); } @@ -328,9 +340,16 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._statusLabel.visible = useMenu; this._thumbnailsBox.visible = !useMenu; + this._updateTopBarRedirect(); + } + + _updateTopBarRedirect() { + if (!this._inTopBar) + return; + // Disable offscreen-redirect when showing the workspace switcher // so that clip-to-allocation works - Main.panel.set_offscreen_redirect(useMenu + Main.panel.set_offscreen_redirect(this._thumbnailsBox.visible ? Clutter.OffscreenRedirect.ALWAYS : Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY); } From a9fff9861be8c4e2155500db6217646874084ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 16:13:00 +0100 Subject: [PATCH 14/57] workspace-indicator: Small cleanup The code to update the menu labels is a bit cleaner in the window-list extension, so use that. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index f118654e..e04e93a4 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -407,19 +407,18 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._workspacesItems = []; this._currentWorkspace = workspaceManager.get_active_workspace_index(); - let i = 0; - for (; i < workspaceManager.n_workspaces; i++) { - this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i)); - this.menu.addMenuItem(this._workspacesItems[i]); - this._workspacesItems[i].workspaceId = i; - this._workspacesItems[i].label_actor = this._statusLabel; - this._workspacesItems[i].connect('activate', (actor, _event) => { - this._activate(actor.workspaceId); - }); + for (let i = 0; i < workspaceManager.n_workspaces; i++) { + const item = new PopupMenu.PopupMenuItem(this._labelText(i)); - this._workspacesItems[i].setOrnament(i === this._currentWorkspace + item.connect('activate', + () => this._activate(i)); + + item.setOrnament(i === this._currentWorkspace ? PopupMenu.Ornament.DOT : PopupMenu.Ornament.NO_DOT); + + this.menu.addMenuItem(item); + this._workspacesItems[i] = item; } this._statusLabel.set_text(this._labelText()); From 63ff5b2ac13bec56ee140597810cf6444b66cb28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 16:13:00 +0100 Subject: [PATCH 15/57] workspace-indicator: Simplify getting status text Currently the same method is used to get the label text for the indicator itself and for the menu items. A method that behaves significantly different depending on whether a parameter is passed is confusing, so only deal with the indicator label and directly use the mutter API to get the workspace names for menu items. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index e04e93a4..0538e6b2 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -279,7 +279,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._statusLabel = new St.Label({ style_class: 'status-label', y_align: Clutter.ActorAlign.CENTER, - text: this._labelText(), + text: this._getStatusText(), }); container.add_child(this._statusLabel); @@ -360,7 +360,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._updateMenuOrnament(); this._updateActiveThumbnail(); - this._statusLabel.set_text(this._labelText()); + this._statusLabel.set_text(this._getStatusText()); } _nWorkspacesChanged() { @@ -387,17 +387,16 @@ export class WorkspaceIndicator extends PanelMenu.Button { } } - _labelText(workspaceIndex) { - if (workspaceIndex === undefined) { - workspaceIndex = this._currentWorkspace; - return (workspaceIndex + 1).toString(); - } - return Meta.prefs_get_workspace_name(workspaceIndex); + _getStatusText() { + const current = this._currentWorkspace + 1; + return `${current}`; } _updateMenuLabels() { - for (let i = 0; i < this._workspacesItems.length; i++) - this._workspacesItems[i].label.text = this._labelText(i); + for (let i = 0; i < this._workspacesItems.length; i++) { + const item = this._workspacesItems[i]; + item.label.text = Meta.prefs_get_workspace_name(i); + } } _updateMenu() { @@ -408,7 +407,8 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._currentWorkspace = workspaceManager.get_active_workspace_index(); for (let i = 0; i < workspaceManager.n_workspaces; i++) { - const item = new PopupMenu.PopupMenuItem(this._labelText(i)); + const name = Meta.prefs_get_workspace_name(i); + const item = new PopupMenu.PopupMenuItem(name); item.connect('activate', () => this._activate(i)); @@ -421,7 +421,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._workspacesItems[i] = item; } - this._statusLabel.set_text(this._labelText()); + this._statusLabel.set_text(this._getStatusText()); } _updateThumbnails() { From 32a454f917a8cac8fd381312dcb516bc14aba2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 16:35:09 +0100 Subject: [PATCH 16/57] workspace-indicator: Include n-workspaces in status label The two extensions currently use a slightly different label in menu mode: The workspace indicator uses the plain workspace number ("2"), while the window list includes the number of workspaces ("2 / 4"). The additional information seem useful, as well as the slightly bigger click/touch target, so copy the window-list behavior. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 0538e6b2..594a9e51 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -388,8 +388,9 @@ export class WorkspaceIndicator extends PanelMenu.Button { } _getStatusText() { + const {nWorkspaces} = global.workspace_manager; const current = this._currentWorkspace + 1; - return `${current}`; + return `${current} / ${nWorkspaces}`; } _updateMenuLabels() { From af23a8491ce030dca333708b7bc666c8ac4062ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 22 Feb 2024 04:45:23 +0100 Subject: [PATCH 17/57] workspace-indicator: Tweak preview style Sync sizes and padding with the window-list previews. Tone down the colors a bit, but less then the current window-list style where workspaces blend too much into the background and the selection is unclear. Part-of: --- extensions/workspace-indicator/stylesheet.css | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/extensions/workspace-indicator/stylesheet.css b/extensions/workspace-indicator/stylesheet.css index 749878c1..3e2ba67f 100644 --- a/extensions/workspace-indicator/stylesheet.css +++ b/extensions/workspace-indicator/stylesheet.css @@ -10,24 +10,25 @@ } .workspace-indicator .workspaces-box { - padding: 4px 0; - spacing: 4px; + padding: 5px; + spacing: 3px; } .workspace-indicator .workspace { - width: 40px; - border: 2px solid #000; - border-radius: 2px; - background-color: #595959; + width: 52px; + border: 2px solid transparent; + border-radius: 4px; + background-color: #3f3f3f; } .workspace-indicator .workspace.active { - border-color: #fff; + border-color: #9f9f9f; } .workspace-indicator-window-preview { background-color: #bebebe; border: 1px solid #828282; + border-radius: 1px; } .workspace-indicator-window-preview.active { From 5e88c7d89197f39890e4b064f4b070f501c911da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 23:22:58 +0100 Subject: [PATCH 18/57] workspace-indicator: Support light style The window-list extension already includes light styling for its copy of the workspace indicator. Just copy that over to support the light variant here as well. Part-of: --- extensions/workspace-indicator/meson.build | 5 +++- .../{stylesheet.css => stylesheet-dark.css} | 0 .../workspace-indicator/stylesheet-light.css | 25 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) rename extensions/workspace-indicator/{stylesheet.css => stylesheet-dark.css} (100%) create mode 100644 extensions/workspace-indicator/stylesheet-light.css diff --git a/extensions/workspace-indicator/meson.build b/extensions/workspace-indicator/meson.build index 6dd08dae..dada5408 100644 --- a/extensions/workspace-indicator/meson.build +++ b/extensions/workspace-indicator/meson.build @@ -7,6 +7,9 @@ extension_data += configure_file( output: metadata_name, configuration: metadata_conf ) -extension_data += files('stylesheet.css') +extension_data += files( + 'stylesheet-dark.css', + 'stylesheet-light.css', +) extension_sources += files('prefs.js', 'workspaceIndicator.js') diff --git a/extensions/workspace-indicator/stylesheet.css b/extensions/workspace-indicator/stylesheet-dark.css similarity index 100% rename from extensions/workspace-indicator/stylesheet.css rename to extensions/workspace-indicator/stylesheet-dark.css diff --git a/extensions/workspace-indicator/stylesheet-light.css b/extensions/workspace-indicator/stylesheet-light.css new file mode 100644 index 00000000..049b6a38 --- /dev/null +++ b/extensions/workspace-indicator/stylesheet-light.css @@ -0,0 +1,25 @@ +/* + * SPDX-FileCopyrightText: 2013 Florian Müllner + * SPDX-FileCopyrightText: 2015 Jakub Steiner + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +@import url("stylesheet-dark.css"); + +.workspace-indicator .workspace { + background-color: #ccc; +} + +.workspace-indicator .workspace.active { + border-color: #888; +} + +.workspace-indicator-window-preview { + background-color: #ededed; + border: 1px solid #ccc; +} + +.workspace-indicator-window-preview.active { + background-color: #f6f5f4; +} From 01a37c8f265ae2e4b852613156c924544e40ad64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 15 Apr 2024 20:18:34 +0200 Subject: [PATCH 19/57] export-zips: Pick up non-default stylesheets The window-list extension is about to import the workspace-indicator stylesheet. Explicitly pack css files, so the stylesheet is included in the bundle. Part-of: --- export-zips.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/export-zips.sh b/export-zips.sh index 57c62860..2d7383c3 100755 --- a/export-zips.sh +++ b/export-zips.sh @@ -39,7 +39,7 @@ for f in $extensiondir/*; do fi cp $srcdir/NEWS $srcdir/COPYING $f - sources=(NEWS COPYING $(cd $f; ls *.js)) + sources=(NEWS COPYING $(cd $f; ls *.js *.css 2>/dev/null)) [ -d $f/icons ] && sources+=(icons) From 0c42f162d3d81aa55b777129a700f2033809856a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Feb 2024 13:08:52 +0100 Subject: [PATCH 20/57] window-list: Use actual copy of workspace-indicator We are now at a point where the code from the workspace-indicator extension is usable from the window-list. However instead of updating the copy, go one step further and remove it altogether, and copy the required files at build time. This ensures that future changes are picked up by both extensions without duplicating any work. Part-of: --- extensions/window-list/meson.build | 29 +- extensions/window-list/stylesheet-dark.css | 31 +- extensions/window-list/stylesheet-light.css | 20 +- extensions/window-list/workspaceIndicator.js | 435 ------------------- 4 files changed, 30 insertions(+), 485 deletions(-) delete mode 100644 extensions/window-list/workspaceIndicator.js diff --git a/extensions/window-list/meson.build b/extensions/window-list/meson.build index 718cdf7a..6fd17007 100644 --- a/extensions/window-list/meson.build +++ b/extensions/window-list/meson.build @@ -12,5 +12,32 @@ extension_data += files( 'stylesheet-light.css' ) -extension_sources += files('prefs.js', 'workspaceIndicator.js') +transform_stylesheet = [ + 'sed', '-E', + '-e', 's:^\.(workspace-indicator):.window-list-\\1:', + '-e', '/^@import/d', + '@INPUT@', + ] + +workspaceIndicatorSources = [ + configure_file( + input: '../workspace-indicator/workspaceIndicator.js', + output: '@PLAINNAME@', + copy: true, + ), + configure_file( + input: '../workspace-indicator/stylesheet-dark.css', + output: 'stylesheet-workspace-switcher-dark.css', + command: transform_stylesheet, + capture: true, + ), + configure_file( + input: '../workspace-indicator/stylesheet-light.css', + output: 'stylesheet-workspace-switcher-light.css', + command: transform_stylesheet, + capture: true, + ), +] + +extension_sources += files('prefs.js') + workspaceIndicatorSources extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index fbadf4d0..9e024f2c 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -4,6 +4,7 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +@import url("stylesheet-workspace-switcher-dark.css"); .window-list { spacing: 2px; @@ -81,36 +82,6 @@ height: 24px; } -.window-list-workspace-indicator .status-label-bin { - background-color: rgba(200, 200, 200, 0.3); - padding: 5px; - margin: 3px; -} - -.window-list-workspace-indicator .workspaces-box { - spacing: 3px; - padding: 5px; -} - -.window-list-workspace-indicator .workspace { - width: 52px; - border-radius: 4px; - background-color: #1e1e1e; -} - -.window-list-workspace-indicator .workspace.active { - background-color: #3f3f3f; -} - -.window-list-workspace-indicator-window-preview { - background-color: #bebebe; - border-radius: 1px; -} - -.window-list-workspace-indicator-window-preview.active { - background-color: #d4d4d4; -} - .notification { font-weight: normal; } diff --git a/extensions/window-list/stylesheet-light.css b/extensions/window-list/stylesheet-light.css index e9352362..93a96581 100644 --- a/extensions/window-list/stylesheet-light.css +++ b/extensions/window-list/stylesheet-light.css @@ -6,6 +6,7 @@ */ @import url("stylesheet-dark.css"); +@import url("stylesheet-workspace-switcher-light.css"); #panel.bottom-panel { border-top-width: 1px; @@ -50,22 +51,3 @@ color: #888; box-shadow: none; } - -/* workspace switcher */ -.window-list-workspace-indicator .workspace { - border: 2px solid #f6f5f4; - background-color: #ccc; -} - -.window-list-workspace-indicator .workspace.active { - border-color: #888; -} - -.window-list-workspace-indicator-window-preview { - background-color: #ededed; - border: 1px solid #ccc; -} - -.window-list-workspace-indicator-window-preview.active { - background-color: #f6f5f4; -} diff --git a/extensions/window-list/workspaceIndicator.js b/extensions/window-list/workspaceIndicator.js deleted file mode 100644 index 69167eb6..00000000 --- a/extensions/window-list/workspaceIndicator.js +++ /dev/null @@ -1,435 +0,0 @@ -// SPDX-FileCopyrightText: 2019 Florian Müllner -// -// SPDX-License-Identifier: GPL-2.0-or-later - -import Clutter from 'gi://Clutter'; -import Gio from 'gi://Gio'; -import GObject from 'gi://GObject'; -import Meta from 'gi://Meta'; -import St from 'gi://St'; - -import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.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 PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js'; -import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; - -const TOOLTIP_OFFSET = 6; -const TOOLTIP_ANIMATION_TIME = 150; - -const MAX_THUMBNAILS = 6; - -let baseStyleClassName = ''; - -class WindowPreview extends St.Button { - static { - GObject.registerClass(this); - } - - constructor(window) { - super({ - style_class: `${baseStyleClassName}-window-preview`, - }); - - this._delegate = this; - DND.makeDraggable(this, {restoreOnSuccess: true}); - - this._window = window; - - this._window.connectObject( - 'size-changed', () => this._checkRelayout(), - 'position-changed', () => this._checkRelayout(), - 'notify::minimized', this._updateVisible.bind(this), - 'notify::window-type', this._updateVisible.bind(this), - this); - this._updateVisible(); - - global.display.connectObject('notify::focus-window', - this._onFocusChanged.bind(this), this); - this._onFocusChanged(); - } - - // needed for DND - get metaWindow() { - return this._window; - } - - _onFocusChanged() { - if (global.display.focus_window === this._window) - this.add_style_class_name('active'); - else - this.remove_style_class_name('active'); - } - - _checkRelayout() { - const monitor = Main.layoutManager.findIndexForActor(this); - const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor); - if (this._window.get_frame_rect().overlap(workArea)) - this.queue_relayout(); - } - - _updateVisible() { - this.visible = this._window.window_type !== Meta.WindowType.DESKTOP && - this._window.showing_on_its_workspace(); - } -} - -class WorkspaceLayout extends Clutter.LayoutManager { - static { - GObject.registerClass(this); - } - - vfunc_get_preferred_width() { - return [0, 0]; - } - - vfunc_get_preferred_height() { - return [0, 0]; - } - - vfunc_allocate(container, box) { - const monitor = Main.layoutManager.findIndexForActor(container); - const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor); - const hscale = box.get_width() / workArea.width; - const vscale = box.get_height() / workArea.height; - - for (const child of container) { - const childBox = new Clutter.ActorBox(); - const frameRect = child.metaWindow.get_frame_rect(); - childBox.set_size( - Math.round(Math.min(frameRect.width, workArea.width) * hscale), - Math.round(Math.min(frameRect.height, workArea.height) * vscale)); - childBox.set_origin( - Math.round((frameRect.x - workArea.x) * hscale), - Math.round((frameRect.y - workArea.y) * vscale)); - child.allocate(childBox); - } - } -} - -class WorkspaceThumbnail extends St.Button { - static { - GObject.registerClass(this); - } - - constructor(index) { - super({ - style_class: 'workspace', - child: new Clutter.Actor({ - layout_manager: new WorkspaceLayout(), - clip_to_allocation: true, - x_expand: true, - y_expand: true, - }), - }); - - this._tooltip = new St.Label({ - style_class: 'dash-label', - visible: false, - }); - Main.uiGroup.add_child(this._tooltip); - - this.connect('destroy', this._onDestroy.bind(this)); - this.connect('notify::hover', this._syncTooltip.bind(this)); - - this._index = index; - this._delegate = this; // needed for DND - - this._windowPreviews = new Map(); - - let workspaceManager = global.workspace_manager; - this._workspace = workspaceManager.get_workspace_by_index(index); - - this._workspace.connectObject( - 'window-added', (ws, window) => this._addWindow(window), - 'window-removed', (ws, window) => this._removeWindow(window), - this); - - global.display.connectObject('restacked', - this._onRestacked.bind(this), this); - - this._workspace.list_windows().forEach(w => this._addWindow(w)); - this._onRestacked(); - } - - acceptDrop(source) { - if (!source.metaWindow) - return false; - - this._moveWindow(source.metaWindow); - return true; - } - - handleDragOver(source) { - if (source.metaWindow) - return DND.DragMotionResult.MOVE_DROP; - else - return DND.DragMotionResult.CONTINUE; - } - - _addWindow(window) { - if (this._windowPreviews.has(window)) - return; - - let preview = new WindowPreview(window); - preview.connect('clicked', (a, btn) => this.emit('clicked', btn)); - this._windowPreviews.set(window, preview); - this.child.add_child(preview); - } - - _removeWindow(window) { - let preview = this._windowPreviews.get(window); - if (!preview) - return; - - this._windowPreviews.delete(window); - preview.destroy(); - } - - _onRestacked() { - let lastPreview = null; - let windows = global.get_window_actors().map(a => a.meta_window); - for (let i = 0; i < windows.length; i++) { - let preview = this._windowPreviews.get(windows[i]); - if (!preview) - continue; - - this.child.set_child_above_sibling(preview, lastPreview); - lastPreview = preview; - } - } - - _moveWindow(window) { - let monitorIndex = Main.layoutManager.findIndexForActor(this); - if (monitorIndex !== window.get_monitor()) - window.move_to_monitor(monitorIndex); - window.change_workspace_by_index(this._index, false); - } - - on_clicked() { - let ws = global.workspace_manager.get_workspace_by_index(this._index); - if (ws) - ws.activate(global.get_current_time()); - } - - _syncTooltip() { - if (this.hover) { - this._tooltip.set({ - text: Meta.prefs_get_workspace_name(this._index), - visible: true, - opacity: 0, - }); - - const [stageX, stageY] = this.get_transformed_position(); - const thumbWidth = this.allocation.get_width(); - const tipWidth = this._tooltip.width; - const tipHeight = this._tooltip.height; - const xOffset = Math.floor((thumbWidth - tipWidth) / 2); - const monitor = Main.layoutManager.findMonitorForActor(this); - const x = Math.clamp( - stageX + xOffset, - monitor.x, - monitor.x + monitor.width - tipWidth); - const y = stageY - tipHeight - TOOLTIP_OFFSET; - this._tooltip.set_position(x, y); - } - - this._tooltip.ease({ - opacity: this.hover ? 255 : 0, - duration: TOOLTIP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this._tooltip.visible = this.hover), - }); - } - - _onDestroy() { - this._tooltip.destroy(); - } -} - -export class WorkspaceIndicator extends PanelMenu.Button { - static { - GObject.registerClass(this); - } - - constructor(params = {}) { - super(0.5, _('Workspace Indicator')); - - const { - baseStyleClass = 'workspace-indicator', - } = params; - - baseStyleClassName = baseStyleClass; - this.add_style_class_name(baseStyleClassName); - - let container = new St.Widget({ - layout_manager: new Clutter.BinLayout(), - x_expand: true, - y_expand: true, - }); - this.add_child(container); - - let workspaceManager = global.workspace_manager; - - this._currentWorkspace = workspaceManager.get_active_workspace_index(); - this._statusLabel = new St.Label({text: this._getStatusText()}); - - this._statusBin = new St.Bin({ - style_class: 'status-label-bin', - x_expand: true, - y_expand: true, - child: this._statusLabel, - }); - container.add_child(this._statusBin); - - this._thumbnailsBox = new St.BoxLayout({ - style_class: 'workspaces-box', - y_expand: true, - reactive: true, - }); - this._thumbnailsBox.connect('scroll-event', - this._onScrollEvent.bind(this)); - container.add_child(this._thumbnailsBox); - - this._workspacesItems = []; - - workspaceManager.connectObject( - 'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER, - 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, - 'notify::layout-rows', this._updateThumbnailVisibility.bind(this), - this); - - this.connect('scroll-event', this._onScrollEvent.bind(this)); - this._updateMenu(); - this._updateThumbnails(); - this._updateThumbnailVisibility(); - - this._settings = new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'}); - this._settings.connectObject('changed::workspace-names', - () => this._updateMenuLabels(), this); - } - - _updateThumbnailVisibility() { - const {workspaceManager} = global; - const vertical = workspaceManager.layout_rows === -1; - const useMenu = - vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS; - this.reactive = useMenu; - - this._statusBin.visible = useMenu; - this._thumbnailsBox.visible = !useMenu; - } - - _onWorkspaceSwitched() { - let workspaceManager = global.workspace_manager; - this._currentWorkspace = workspaceManager.get_active_workspace_index(); - - this._updateMenuOrnament(); - this._updateActiveThumbnail(); - - this._statusLabel.set_text(this._getStatusText()); - } - - _nWorkspacesChanged() { - this._updateMenu(); - this._updateThumbnails(); - this._updateThumbnailVisibility(); - } - - _updateMenuOrnament() { - for (let i = 0; i < this._workspacesItems.length; i++) { - this._workspacesItems[i].setOrnament(i === this._currentWorkspace - ? PopupMenu.Ornament.DOT - : PopupMenu.Ornament.NO_DOT); - } - } - - _updateActiveThumbnail() { - let thumbs = this._thumbnailsBox.get_children(); - for (let i = 0; i < thumbs.length; i++) { - if (i === this._currentWorkspace) - thumbs[i].add_style_class_name('active'); - else - thumbs[i].remove_style_class_name('active'); - } - } - - _getStatusText() { - let workspaceManager = global.workspace_manager; - let current = workspaceManager.get_active_workspace_index(); - let total = workspaceManager.n_workspaces; - - return '%d / %d'.format(current + 1, total); - } - - _updateMenuLabels() { - for (let i = 0; i < this._workspacesItems.length; i++) { - let item = this._workspacesItems[i]; - let name = Meta.prefs_get_workspace_name(i); - item.label.text = name; - } - } - - _updateMenu() { - let workspaceManager = global.workspace_manager; - - this.menu.removeAll(); - this._workspacesItems = []; - this._currentWorkspace = workspaceManager.get_active_workspace_index(); - - for (let i = 0; i < workspaceManager.n_workspaces; i++) { - let name = Meta.prefs_get_workspace_name(i); - let item = new PopupMenu.PopupMenuItem(name); - item.workspaceId = i; - - item.connect('activate', () => { - this._activate(item.workspaceId); - }); - - item.setOrnament(i === this._currentWorkspace - ? PopupMenu.Ornament.DOT - : PopupMenu.Ornament.NO_DOT); - - this.menu.addMenuItem(item); - this._workspacesItems[i] = item; - } - - this._statusLabel.set_text(this._getStatusText()); - } - - _updateThumbnails() { - let workspaceManager = global.workspace_manager; - - this._thumbnailsBox.destroy_all_children(); - - for (let i = 0; i < workspaceManager.n_workspaces; i++) { - let thumb = new WorkspaceThumbnail(i); - this._thumbnailsBox.add_child(thumb); - } - this._updateActiveThumbnail(); - } - - _activate(index) { - let workspaceManager = global.workspace_manager; - - if (index >= 0 && index < workspaceManager.n_workspaces) { - let metaWorkspace = workspaceManager.get_workspace_by_index(index); - metaWorkspace.activate(global.get_current_time()); - } - } - - _onScrollEvent(actor, event) { - let direction = event.get_scroll_direction(); - let diff = 0; - if (direction === Clutter.ScrollDirection.DOWN) - diff = 1; - else if (direction === Clutter.ScrollDirection.UP) - diff = -1; - else - return; - - let newIndex = this._currentWorkspace + diff; - this._activate(newIndex); - } -} From b55e7a4dc824fce3e76cab90edf508a20e5e4e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 20 Feb 2024 17:39:49 +0100 Subject: [PATCH 21/57] workspace-indicator: Simplify scroll handling gnome-shell already includes a method for switching workspaces via scroll events. Use that instead of implementing our own. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 594a9e51..14dd81d0 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -300,8 +300,10 @@ export class WorkspaceIndicator extends PanelMenu.Button { 'notify::layout-rows', this._updateThumbnailVisibility.bind(this), this); - this.connect('scroll-event', this._onScrollEvent.bind(this)); - this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this)); + this.connect('scroll-event', + (a, event) => Main.wm.handleWorkspaceScroll(event)); + this._thumbnailsBox.connect('scroll-event', + (a, event) => Main.wm.handleWorkspaceScroll(event)); this._inTopBar = false; this.connect('notify::realized', () => { @@ -445,19 +447,4 @@ export class WorkspaceIndicator extends PanelMenu.Button { metaWorkspace.activate(global.get_current_time()); } } - - _onScrollEvent(actor, event) { - let direction = event.get_scroll_direction(); - let diff = 0; - if (direction === Clutter.ScrollDirection.DOWN) - diff = 1; - else if (direction === Clutter.ScrollDirection.UP) - diff = -1; - else - return; - - - const newIndex = this._currentWorkspace + diff; - this._activate(newIndex); - } } From a2ffb1238f8cfb370a609590125d1f14587df8db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 27 Feb 2024 21:20:45 +0100 Subject: [PATCH 22/57] workspace-indicator: Handle active indication in thumbnail Meta.Workspace has had an `active` property for a while now, so we can use a property binding instead of tracking the active workspace ourselves. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 14dd81d0..bf6511a0 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -111,6 +111,13 @@ class WorkspaceLayout extends Clutter.LayoutManager { } class WorkspaceThumbnail extends St.Button { + static [GObject.properties] = { + 'active': GObject.ParamSpec.boolean( + 'active', '', '', + GObject.ParamFlags.READWRITE, + false), + }; + static { GObject.registerClass(this); } @@ -143,6 +150,10 @@ class WorkspaceThumbnail extends St.Button { let workspaceManager = global.workspace_manager; this._workspace = workspaceManager.get_workspace_by_index(index); + this._workspace.bind_property('active', + this, 'active', + GObject.BindingFlags.SYNC_CREATE); + this._workspace.connectObject( 'window-added', (ws, window) => this._addWindow(window), 'window-removed', (ws, window) => this._removeWindow(window), @@ -155,6 +166,18 @@ class WorkspaceThumbnail extends St.Button { this._onRestacked(); } + get active() { + return this.has_style_class_name('active'); + } + + set active(active) { + if (active) + this.add_style_class_name('active'); + else + this.remove_style_class_name('active'); + this.notify('active'); + } + acceptDrop(source) { if (!source.metaWindow) return false; @@ -360,7 +383,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._currentWorkspace = global.workspace_manager.get_active_workspace_index(); this._updateMenuOrnament(); - this._updateActiveThumbnail(); this._statusLabel.set_text(this._getStatusText()); } @@ -379,16 +401,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { } } - _updateActiveThumbnail() { - let thumbs = this._thumbnailsBox.get_children(); - for (let i = 0; i < thumbs.length; i++) { - if (i === this._currentWorkspace) - thumbs[i].add_style_class_name('active'); - else - thumbs[i].remove_style_class_name('active'); - } - } - _getStatusText() { const {nWorkspaces} = global.workspace_manager; const current = this._currentWorkspace + 1; @@ -436,7 +448,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { let thumb = new WorkspaceThumbnail(i); this._thumbnailsBox.add_child(thumb); } - this._updateActiveThumbnail(); } _activate(index) { From 6ed1b56526dc5236968708945f15ef2792541170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 20 Feb 2024 17:27:57 +0100 Subject: [PATCH 23/57] workspace-indicator: Split out WorkspacePreviews The previews will become a bit more complex soon, so spit them out into a dedicated class. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 72 ++++++++++++------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index bf6511a0..73ebca6f 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -274,6 +274,49 @@ class WorkspaceThumbnail extends St.Button { } } +class WorkspacePreviews extends Clutter.Actor { + static { + GObject.registerClass(this); + } + + constructor(params) { + super({ + ...params, + layout_manager: new Clutter.BinLayout(), + reactive: true, + y_expand: true, + }); + + this.connect('scroll-event', + (a, event) => Main.wm.handleWorkspaceScroll(event)); + + const {workspaceManager} = global; + + workspaceManager.connectObject( + 'notify::n-workspaces', () => this._updateThumbnails(), GObject.ConnectFlags.AFTER, + this); + + this._thumbnailsBox = new St.BoxLayout({ + style_class: 'workspaces-box', + y_expand: true, + }); + this.add_child(this._thumbnailsBox); + + this._updateThumbnails(); + } + + _updateThumbnails() { + const {nWorkspaces} = global.workspace_manager; + + this._thumbnailsBox.destroy_all_children(); + + for (let i = 0; i < nWorkspaces; i++) { + const thumb = new WorkspaceThumbnail(i); + this._thumbnailsBox.add_child(thumb); + } + } +} + export class WorkspaceIndicator extends PanelMenu.Button { static { GObject.registerClass(this); @@ -304,16 +347,10 @@ export class WorkspaceIndicator extends PanelMenu.Button { y_align: Clutter.ActorAlign.CENTER, text: this._getStatusText(), }); - container.add_child(this._statusLabel); - this._thumbnailsBox = new St.BoxLayout({ - style_class: 'workspaces-box', - y_expand: true, - reactive: true, - }); - - container.add_child(this._thumbnailsBox); + this._thumbnails = new WorkspacePreviews(); + container.add_child(this._thumbnails); this._workspacesItems = []; @@ -325,8 +362,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { this.connect('scroll-event', (a, event) => Main.wm.handleWorkspaceScroll(event)); - this._thumbnailsBox.connect('scroll-event', - (a, event) => Main.wm.handleWorkspaceScroll(event)); this._inTopBar = false; this.connect('notify::realized', () => { @@ -338,7 +373,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { }); this._updateMenu(); - this._updateThumbnails(); this._updateThumbnailVisibility(); const desktopSettings = @@ -363,7 +397,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this.reactive = useMenu; this._statusLabel.visible = useMenu; - this._thumbnailsBox.visible = !useMenu; + this._thumbnails.visible = !useMenu; this._updateTopBarRedirect(); } @@ -374,7 +408,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { // Disable offscreen-redirect when showing the workspace switcher // so that clip-to-allocation works - Main.panel.set_offscreen_redirect(this._thumbnailsBox.visible + Main.panel.set_offscreen_redirect(this._thumbnails.visible ? Clutter.OffscreenRedirect.ALWAYS : Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY); } @@ -389,7 +423,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { _nWorkspacesChanged() { this._updateMenu(); - this._updateThumbnails(); this._updateThumbnailVisibility(); } @@ -439,17 +472,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._statusLabel.set_text(this._getStatusText()); } - _updateThumbnails() { - let workspaceManager = global.workspace_manager; - - this._thumbnailsBox.destroy_all_children(); - - for (let i = 0; i < workspaceManager.n_workspaces; i++) { - let thumb = new WorkspaceThumbnail(i); - this._thumbnailsBox.add_child(thumb); - } - } - _activate(index) { let workspaceManager = global.workspace_manager; From fac7fedfd3f63c59c6d6e5445ac661a56d711521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 19 Feb 2024 14:42:04 +0100 Subject: [PATCH 24/57] workspace-indicator: Handle preview overflow We currently avoid previews from overflowing in most setups by artificially limiting them to a maximum of six workspaces. Add some proper handling to also cover cases where space is more limited, and to allow removing the restriction in the future. For that, wrap the previews in an auto-scrolling scroll view and add overflow indicators on each side. Part-of: --- .../workspace-indicator/stylesheet-dark.css | 4 ++ .../workspace-indicator/workspaceIndicator.js | 64 ++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/stylesheet-dark.css b/extensions/workspace-indicator/stylesheet-dark.css index 3e2ba67f..22d13370 100644 --- a/extensions/workspace-indicator/stylesheet-dark.css +++ b/extensions/workspace-indicator/stylesheet-dark.css @@ -9,6 +9,10 @@ padding: 0 8px; } +.workspace-indicator .workspaces-view.hfade { + -st-hfade-offset: 20px; +} + .workspace-indicator .workspaces-box { padding: 5px; spacing: 3px; diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 73ebca6f..314b9f45 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -20,6 +20,8 @@ import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js'; const TOOLTIP_OFFSET = 6; const TOOLTIP_ANIMATION_TIME = 150; +const SCROLL_TIME = 100; + const MAX_THUMBNAILS = 6; let baseStyleClassName = ''; @@ -294,13 +296,29 @@ class WorkspacePreviews extends Clutter.Actor { workspaceManager.connectObject( 'notify::n-workspaces', () => this._updateThumbnails(), GObject.ConnectFlags.AFTER, + 'workspace-switched', () => this._updateScrollPosition(), this); + this.connect('notify::mapped', () => { + if (this.mapped) + this._updateScrollPosition(); + }); + this._thumbnailsBox = new St.BoxLayout({ style_class: 'workspaces-box', y_expand: true, }); - this.add_child(this._thumbnailsBox); + + this._scrollView = new St.ScrollView({ + style_class: 'workspaces-view hfade', + enable_mouse_scrolling: false, + hscrollbar_policy: St.PolicyType.EXTERNAL, + vscrollbar_policy: St.PolicyType.NEVER, + y_expand: true, + child: this._thumbnailsBox, + }); + + this.add_child(this._scrollView); this._updateThumbnails(); } @@ -314,6 +332,50 @@ class WorkspacePreviews extends Clutter.Actor { const thumb = new WorkspaceThumbnail(i); this._thumbnailsBox.add_child(thumb); } + + if (this.mapped) + this._updateScrollPosition(); + } + + _updateScrollPosition() { + const adjustment = this._scrollView.hadjustment; + const {upper, pageSize} = adjustment; + let {value} = adjustment; + + const activeWorkspace = + [...this._thumbnailsBox].find(a => a.active); + + if (!activeWorkspace) + return; + + let offset = 0; + const hfade = this._scrollView.get_effect('fade'); + if (hfade) + offset = hfade.fade_margins.left; + + let {x1, x2} = activeWorkspace.get_allocation_box(); + let parent = activeWorkspace.get_parent(); + while (parent !== this._scrollView) { + if (!parent) + throw new Error('actor not in scroll view'); + + const box = parent.get_allocation_box(); + x1 += box.x1; + x2 += box.x1; + parent = parent.get_parent(); + } + + if (x1 < value + offset) + value = Math.max(0, x1 - offset); + else if (x2 > value + pageSize - offset) + value = Math.min(upper, x2 + offset - pageSize); + else + return; + + adjustment.ease(value, { + mode: Clutter.AnimationMode.EASE_OUT_QUAD, + duration: SCROLL_TIME, + }); } } From 099cff0b959786dfe1fce14c301c34a7f5ff77d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 3 Mar 2024 15:05:23 +0100 Subject: [PATCH 25/57] workspace-indicator: Support labels in previews The space in the top bar is too limited to include the workspace names. However we'll soon replace the textual menu with a preview popover. We can use bigger previews there, so we can include the names to not lose functionality with regards to the current menu. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 56 +++++++++++++++++-- 1 file changed, 50 insertions(+), 6 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 314b9f45..e6aa68bf 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -118,6 +118,10 @@ class WorkspaceThumbnail extends St.Button { 'active', '', '', GObject.ParamFlags.READWRITE, false), + 'show-label': GObject.ParamSpec.boolean( + 'show-label', '', '', + GObject.ParamFlags.READWRITE, + false), }; static { @@ -125,7 +129,16 @@ class WorkspaceThumbnail extends St.Button { } constructor(index) { - super({ + super(); + + const box = new St.BoxLayout({ + style_class: 'workspace-box', + y_expand: true, + vertical: true, + }); + this.set_child(box); + + this._preview = new St.Bin({ style_class: 'workspace', child: new Clutter.Actor({ layout_manager: new WorkspaceLayout(), @@ -133,7 +146,15 @@ class WorkspaceThumbnail extends St.Button { x_expand: true, y_expand: true, }), + y_expand: true, }); + box.add_child(this._preview); + + this._label = new St.Label({ + x_align: Clutter.ActorAlign.CENTER, + text: Meta.prefs_get_workspace_name(index), + }); + box.add_child(this._label); this._tooltip = new St.Label({ style_class: 'dash-label', @@ -141,9 +162,19 @@ class WorkspaceThumbnail extends St.Button { }); Main.uiGroup.add_child(this._tooltip); + this.bind_property('show-label', + this._label, 'visible', + GObject.BindingFlags.SYNC_CREATE); + this.connect('destroy', this._onDestroy.bind(this)); this.connect('notify::hover', this._syncTooltip.bind(this)); + const desktopSettings = + new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'}); + desktopSettings.connectObject('changed::workspace-names', () => { + this._label.text = Meta.prefs_get_workspace_name(index); + }, this); + this._index = index; this._delegate = this; // needed for DND @@ -169,14 +200,14 @@ class WorkspaceThumbnail extends St.Button { } get active() { - return this.has_style_class_name('active'); + return this._preview.has_style_class_name('active'); } set active(active) { if (active) - this.add_style_class_name('active'); + this._preview.add_style_class_name('active'); else - this.remove_style_class_name('active'); + this._preview.remove_style_class_name('active'); this.notify('active'); } @@ -202,7 +233,7 @@ class WorkspaceThumbnail extends St.Button { let preview = new WindowPreview(window); preview.connect('clicked', (a, btn) => this.emit('clicked', btn)); this._windowPreviews.set(window, preview); - this.child.add_child(preview); + this._preview.child.add_child(preview); } _removeWindow(window) { @@ -222,7 +253,7 @@ class WorkspaceThumbnail extends St.Button { if (!preview) continue; - this.child.set_child_above_sibling(preview, lastPreview); + this._preview.child.set_child_above_sibling(preview, lastPreview); lastPreview = preview; } } @@ -241,6 +272,9 @@ class WorkspaceThumbnail extends St.Button { } _syncTooltip() { + if (this.showLabel) + return; + if (this.hover) { this._tooltip.set({ text: Meta.prefs_get_workspace_name(this._index), @@ -277,6 +311,13 @@ class WorkspaceThumbnail extends St.Button { } class WorkspacePreviews extends Clutter.Actor { + static [GObject.properties] = { + 'show-labels': GObject.ParamSpec.boolean( + 'show-labels', '', '', + GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, + false), + }; + static { GObject.registerClass(this); } @@ -330,6 +371,9 @@ class WorkspacePreviews extends Clutter.Actor { for (let i = 0; i < nWorkspaces; i++) { const thumb = new WorkspaceThumbnail(i); + this.bind_property('show-labels', + thumb, 'show-label', + GObject.BindingFlags.SYNC_CREATE); this._thumbnailsBox.add_child(thumb); } From 6b3990457e5c1c64bc50da3ea572900ab33ae305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 20 Feb 2024 21:43:55 +0100 Subject: [PATCH 26/57] workspace-indicator: Stop handling vertical layouts Both the regular session and GNOME classic use a horizontal layout nowadays, so it doesn't seem worth to specifically handle vertical layouts anymore. The extension will still work when the layout is changed (by some other extension), there will simply be a mismatch between horizontal previews and the actual layout. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index e6aa68bf..087d2d89 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -463,7 +463,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { workspaceManager.connectObject( 'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER, 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, - 'notify::layout-rows', this._updateThumbnailVisibility.bind(this), this); this.connect('scroll-event', @@ -497,9 +496,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { _updateThumbnailVisibility() { const {workspaceManager} = global; - const vertical = workspaceManager.layout_rows === -1; - const useMenu = - vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS; + const useMenu = workspaceManager.n_workspaces > MAX_THUMBNAILS; this.reactive = useMenu; this._statusLabel.visible = useMenu; From d495a2eed8233f04e183b6908a4691d2be5fd590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 3 Mar 2024 15:05:23 +0100 Subject: [PATCH 27/57] workspace-indicator: Also show previews in menu Since the regular session also switched to horizontal workspaces, using a vertical menu has been a bit awkward. Now that our previews have become more flexible, we can use them in the collapsed state as well as when embedded into the top bar. Part-of: --- .../workspace-indicator/stylesheet-dark.css | 25 ++++++- .../workspace-indicator/workspaceIndicator.js | 74 +++---------------- 2 files changed, 36 insertions(+), 63 deletions(-) diff --git a/extensions/workspace-indicator/stylesheet-dark.css b/extensions/workspace-indicator/stylesheet-dark.css index 22d13370..b4a716b8 100644 --- a/extensions/workspace-indicator/stylesheet-dark.css +++ b/extensions/workspace-indicator/stylesheet-dark.css @@ -13,18 +13,41 @@ -st-hfade-offset: 20px; } +.workspace-indicator-menu .workspaces-view { + max-width: 480px; +} + .workspace-indicator .workspaces-box { padding: 5px; spacing: 3px; } +.workspace-indicator-menu .workspaces-box { + padding: 5px; + spacing: 6px; +} + +.workspace-indicator-menu .workspace-box { + spacing: 6px; +} + +.workspace-indicator-menu .workspace, .workspace-indicator .workspace { - width: 52px; border: 2px solid transparent; border-radius: 4px; background-color: #3f3f3f; } +.workspace-indicator .workspace { + width: 52px; +} + +.workspace-indicator-menu .workspace { + height: 80px; + width: 160px; +} + +.workspace-indicator-menu .workspace.active, .workspace-indicator .workspace.active { border-color: #9f9f9f; } diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 087d2d89..a4d3bbee 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -429,7 +429,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { } constructor(params = {}) { - super(0.5, _('Workspace Indicator')); + super(0.5, _('Workspace Indicator'), true); const { baseStyleClass = 'workspace-indicator', @@ -461,7 +461,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._workspacesItems = []; workspaceManager.connectObject( - 'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER, + 'notify::n-workspaces', this._updateThumbnailVisibility.bind(this), GObject.ConnectFlags.AFTER, 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, this); @@ -477,13 +477,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._updateTopBarRedirect(); }); - this._updateMenu(); this._updateThumbnailVisibility(); - - const desktopSettings = - new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'}); - desktopSettings.connectObject('changed::workspace-names', - () => this._updateMenuLabels(), this); } _onDestroy() { @@ -502,6 +496,10 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._statusLabel.visible = useMenu; this._thumbnails.visible = !useMenu; + this.setMenu(useMenu + ? this._createPreviewMenu() + : null); + this._updateTopBarRedirect(); } @@ -518,69 +516,21 @@ export class WorkspaceIndicator extends PanelMenu.Button { _onWorkspaceSwitched() { this._currentWorkspace = global.workspace_manager.get_active_workspace_index(); - - this._updateMenuOrnament(); - this._statusLabel.set_text(this._getStatusText()); } - _nWorkspacesChanged() { - this._updateMenu(); - this._updateThumbnailVisibility(); - } - - _updateMenuOrnament() { - for (let i = 0; i < this._workspacesItems.length; i++) { - this._workspacesItems[i].setOrnament(i === this._currentWorkspace - ? PopupMenu.Ornament.DOT - : PopupMenu.Ornament.NO_DOT); - } - } - _getStatusText() { const {nWorkspaces} = global.workspace_manager; const current = this._currentWorkspace + 1; return `${current} / ${nWorkspaces}`; } - _updateMenuLabels() { - for (let i = 0; i < this._workspacesItems.length; i++) { - const item = this._workspacesItems[i]; - item.label.text = Meta.prefs_get_workspace_name(i); - } - } + _createPreviewMenu() { + const menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.TOP); - _updateMenu() { - let workspaceManager = global.workspace_manager; - - this.menu.removeAll(); - this._workspacesItems = []; - this._currentWorkspace = workspaceManager.get_active_workspace_index(); - - for (let i = 0; i < workspaceManager.n_workspaces; i++) { - const name = Meta.prefs_get_workspace_name(i); - const item = new PopupMenu.PopupMenuItem(name); - - item.connect('activate', - () => this._activate(i)); - - item.setOrnament(i === this._currentWorkspace - ? PopupMenu.Ornament.DOT - : PopupMenu.Ornament.NO_DOT); - - this.menu.addMenuItem(item); - this._workspacesItems[i] = item; - } - - this._statusLabel.set_text(this._getStatusText()); - } - - _activate(index) { - let workspaceManager = global.workspace_manager; - - if (index >= 0 && index < workspaceManager.n_workspaces) { - let metaWorkspace = workspaceManager.get_workspace_by_index(index); - metaWorkspace.activate(global.get_current_time()); - } + const previews = new WorkspacePreviews({show_labels: true}); + menu.box.add_child(previews); + menu.actor.add_style_class_name(`${baseStyleClassName}-menu`); + return menu; } } From 69d8d1a3358d0c9990d5853090acb5b7877109df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 20 Feb 2024 22:00:57 +0100 Subject: [PATCH 28/57] workspace-indicator: Make previews configurable Now that previews scroll when there are too many workspaces, there is no longer a reason for the 6-workspace limit. However some users do prefer the menu, so rather than drop it, turn it into a proper preference. Closes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/336 Part-of: --- extensions/window-list/extension.js | 1 + ...e.shell.extensions.window-list.gschema.xml | 4 +++ extensions/workspace-indicator/extension.js | 4 ++- extensions/workspace-indicator/meson.build | 1 + extensions/workspace-indicator/prefs.js | 26 +++++++++++++++++-- ...extensions.workspace-indicator.gschema.xml | 15 +++++++++++ .../workspace-indicator/workspaceIndicator.js | 11 ++++---- po/POTFILES.in | 1 + 8 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 715ae249..362a008f 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -752,6 +752,7 @@ class WindowList extends St.Widget { this._workspaceIndicator = new BottomWorkspaceIndicator({ baseStyleClass: 'window-list-workspace-indicator', + settings, }); indicatorsBox.add_child(this._workspaceIndicator.container); diff --git a/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml b/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml index 2ed680a5..46ff25cb 100644 --- a/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml +++ b/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml @@ -36,5 +36,9 @@ SPDX-License-Identifier: GPL-2.0-or-later only on the primary one. + + true + Show workspace previews in window list + diff --git a/extensions/workspace-indicator/extension.js b/extensions/workspace-indicator/extension.js index b383c919..ef24a750 100644 --- a/extensions/workspace-indicator/extension.js +++ b/extensions/workspace-indicator/extension.js @@ -12,7 +12,9 @@ import {WorkspaceIndicator} from './workspaceIndicator.js'; export default class WorkspaceIndicatorExtension extends Extension { enable() { - this._indicator = new WorkspaceIndicator(); + this._indicator = new WorkspaceIndicator({ + settings: this.getSettings(), + }); Main.panel.addToStatusArea('workspace-indicator', this._indicator); } diff --git a/extensions/workspace-indicator/meson.build b/extensions/workspace-indicator/meson.build index dada5408..9388085c 100644 --- a/extensions/workspace-indicator/meson.build +++ b/extensions/workspace-indicator/meson.build @@ -11,5 +11,6 @@ extension_data += files( 'stylesheet-dark.css', 'stylesheet-light.css', ) +extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml') extension_sources += files('prefs.js', 'workspaceIndicator.js') diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js index ea0546bf..b828ab8f 100644 --- a/extensions/workspace-indicator/prefs.js +++ b/extensions/workspace-indicator/prefs.js @@ -18,6 +18,25 @@ const N_ = e => e; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_KEY = 'workspace-names'; +class GeneralGroup extends Adw.PreferencesGroup { + static { + GObject.registerClass(this); + } + + constructor(settings) { + super(); + + const row = new Adw.SwitchRow({ + title: _('Show Previews In Top Bar'), + }); + this.add(row); + + settings.bind('embed-previews', + row, 'active', + Gio.SettingsBindFlags.DEFAULT); + } +} + class NewItem extends GObject.Object {} GObject.registerClass(NewItem); @@ -119,7 +138,7 @@ class WorkspacesList extends GObject.Object { } } -class WorkspaceSettingsWidget extends Adw.PreferencesGroup { +class WorkspacesGroup extends Adw.PreferencesGroup { static { GObject.registerClass(this); @@ -265,6 +284,9 @@ class NewWorkspaceRow extends Adw.PreferencesRow { export default class WorkspaceIndicatorPrefs extends ExtensionPreferences { getPreferencesWidget() { - return new WorkspaceSettingsWidget(); + const page = new Adw.PreferencesPage(); + page.add(new GeneralGroup(this.getSettings())); + page.add(new WorkspacesGroup()); + return page; } } diff --git a/extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml b/extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml new file mode 100644 index 00000000..c7c634ca --- /dev/null +++ b/extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml @@ -0,0 +1,15 @@ + + + + + + true + Show workspace previews in top bar + + + diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index a4d3bbee..20d4caa2 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -22,8 +22,6 @@ const TOOLTIP_ANIMATION_TIME = 150; const SCROLL_TIME = 100; -const MAX_THUMBNAILS = 6; - let baseStyleClassName = ''; class WindowPreview extends St.Button { @@ -433,8 +431,11 @@ export class WorkspaceIndicator extends PanelMenu.Button { const { baseStyleClass = 'workspace-indicator', + settings, } = params; + this._settings = settings; + baseStyleClassName = baseStyleClass; this.add_style_class_name(baseStyleClassName); @@ -461,7 +462,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._workspacesItems = []; workspaceManager.connectObject( - 'notify::n-workspaces', this._updateThumbnailVisibility.bind(this), GObject.ConnectFlags.AFTER, 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, this); @@ -477,6 +477,8 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._updateTopBarRedirect(); }); + this._settings.connect('changed::embed-previews', + () => this._updateThumbnailVisibility()); this._updateThumbnailVisibility(); } @@ -489,8 +491,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { } _updateThumbnailVisibility() { - const {workspaceManager} = global; - const useMenu = workspaceManager.n_workspaces > MAX_THUMBNAILS; + const useMenu = !this._settings.get_boolean('embed-previews'); this.reactive = useMenu; this._statusLabel.visible = useMenu; diff --git a/po/POTFILES.in b/po/POTFILES.in index 4ddf88bc..aeb5c190 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -20,4 +20,5 @@ extensions/window-list/prefs.js extensions/window-list/workspaceIndicator.js extensions/windowsNavigator/extension.js extensions/workspace-indicator/prefs.js +extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml extensions/workspace-indicator/workspaceIndicator.js From 24ba03fe964eec7715c095d5a8fd86e35aa0a97d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 21 Mar 2024 17:27:09 +0100 Subject: [PATCH 29/57] window-list: Expose workspace preview option Now that we have the option, the window-list should expose it in its preference window like the workspace-indicator. Part-of: --- extensions/window-list/prefs.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 6b2d5958..194d1f9d 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -81,6 +81,19 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { }); row.add_suffix(toggle); miscGroup.add(row); + + toggle = new Gtk.Switch({ + action_name: 'window-list.embed-previews', + valign: Gtk.Align.CENTER, + }); + this._settings.bind('embed-previews', + toggle, 'active', Gio.SettingsBindFlags.DEFAULT); + row = new Adw.ActionRow({ + title: _('Show workspace previews'), + activatable_widget: toggle, + }); + row.add_suffix(toggle); + miscGroup.add(row); } } From 9c7a0868703cd013358bd39064a9d13c2e412600 Mon Sep 17 00:00:00 2001 From: Jordi Mas i Hernandez Date: Thu, 25 Apr 2024 11:53:01 +0000 Subject: [PATCH 30/57] Update Catalan translation --- po/ca.po | 175 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 116 insertions(+), 59 deletions(-) diff --git a/po/ca.po b/po/ca.po index fab7eb3b..e967d608 100644 --- a/po/ca.po +++ b/po/ca.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2021-11-06 14:08+0000\n" -"PO-Revision-Date: 2017-07-08 13:29+0100\n" +"POT-Creation-Date: 2024-02-06 18:43+0000\n" +"PO-Revision-Date: 2024-04-24 22:52+0200\n" "Last-Translator: Jordi Mas \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -18,6 +18,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-DamnedLies-Scope: partial\n" +"X-Generator: Poedit 2.4.2\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -36,19 +38,19 @@ msgstr "GNOME clàssic amb Wayland" msgid "GNOME Classic on Xorg" msgstr "GNOME clàssic amb Xorg" -#: extensions/apps-menu/extension.js:112 +#: extensions/apps-menu/extension.js:126 msgid "Favorites" msgstr "Preferides" -#: extensions/apps-menu/extension.js:366 -msgid "Applications" +#: extensions/apps-menu/extension.js:397 +msgid "Apps" msgstr "Aplicacions" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12 msgid "Application and workspace list" msgstr "Aplicació i llista d'espais de treball" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13 msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" @@ -57,34 +59,34 @@ msgstr "" "d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el " "número de l'espai de treball" -#: extensions/auto-move-windows/prefs.js:34 +#: extensions/auto-move-windows/prefs.js:159 msgid "Workspace Rules" msgstr "Regles dels espais de treball" -#: extensions/auto-move-windows/prefs.js:236 +#: extensions/auto-move-windows/prefs.js:314 msgid "Add Rule" msgstr "Afegeix una regla" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:133 -#: extensions/places-menu/placeDisplay.js:233 +#: extensions/drive-menu/extension.js:123 +#: extensions/places-menu/placeDisplay.js:218 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Ha fallat l'expulsió de la unitat «%s»:" -#: extensions/drive-menu/extension.js:149 +#: extensions/drive-menu/extension.js:142 msgid "Removable devices" msgstr "Dispositius extraïbles" -#: extensions/drive-menu/extension.js:171 +#: extensions/drive-menu/extension.js:164 msgid "Open Files" msgstr "Obre els fitxers" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 msgid "Use more screen for windows" msgstr "Utilitza més pantalla per les finestres" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 msgid "" "Try to use more screen for placing window thumbnails by adapting to screen " "aspect ratio, and consolidating them further to reduce the bounding box. " @@ -96,11 +98,11 @@ msgstr "" "de configuració només s'aplica a l'estratègia de posicionament de finestres " "natural." -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 msgid "Place window captions on top" msgstr "Posiciona els títols de les finestres al damunt" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18 msgid "" "If true, place window captions on top the respective thumbnail, overriding " "shell default of placing it at the bottom. Changing this setting requires " @@ -111,99 +113,151 @@ msgstr "" "posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui " "efecte." -#: extensions/places-menu/extension.js:88 #: extensions/places-menu/extension.js:91 +#: extensions/places-menu/extension.js:94 msgid "Places" msgstr "Llocs" -#: extensions/places-menu/placeDisplay.js:46 +#: extensions/places-menu/placeDisplay.js:60 #, javascript-format msgid "Failed to launch “%s”" msgstr "No s'ha pogut iniciar «%s»" -#: extensions/places-menu/placeDisplay.js:61 +#: extensions/places-menu/placeDisplay.js:75 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "No s'ha pogut muntar el volum «%s»" -#: extensions/places-menu/placeDisplay.js:148 -#: extensions/places-menu/placeDisplay.js:171 +#: extensions/places-menu/placeDisplay.js:135 +#: extensions/places-menu/placeDisplay.js:158 msgid "Computer" msgstr "Ordinador" -#: extensions/places-menu/placeDisplay.js:359 +#: extensions/places-menu/placeDisplay.js:333 msgid "Home" msgstr "Inici" -#: extensions/places-menu/placeDisplay.js:404 +#: extensions/places-menu/placeDisplay.js:378 msgid "Browse Network" msgstr "Navega per la xarxa" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" msgstr "Mostra cíclicament mides de captura de pantalla" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18 msgid "Cycle Screenshot Sizes Backward" msgstr "Mostra cíclicament cap enrere mides de captura de pantalla" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 +#: extensions/system-monitor/extension.js:135 +msgid "CPU stats" +msgstr "Estadístiques de processador" + +#: extensions/system-monitor/extension.js:159 +msgid "Memory stats" +msgstr "Estadístiques de memòria" + +#: extensions/system-monitor/extension.js:177 +msgid "Swap stats" +msgstr "Estadístiques del «swap»" + +#: extensions/system-monitor/extension.js:327 +msgid "Upload stats" +msgstr "Estadístiques de pujada" + +#: extensions/system-monitor/extension.js:341 +msgid "Download stats" +msgstr "Estadístiques de descàrrega" + +#: extensions/system-monitor/extension.js:355 +msgid "System stats" +msgstr "Estadístiques del sistema" + +#: extensions/system-monitor/extension.js:403 +msgid "Show" +msgstr "Mostra" + +#: extensions/system-monitor/extension.js:405 +msgid "CPU" +msgstr "Processador" + +#: extensions/system-monitor/extension.js:407 +msgid "Memory" +msgstr "Memòria" + +#: extensions/system-monitor/extension.js:409 +msgid "Swap" +msgstr "" + +#: extensions/system-monitor/extension.js:411 +msgid "Upload" +msgstr "Pujades" + +#: extensions/system-monitor/extension.js:413 +msgid "Download" +msgstr "Descàrregues" + +#: extensions/system-monitor/extension.js:418 +msgid "Open System Monitor" +msgstr "" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11 msgid "Theme name" msgstr "Nom del tema" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6 +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:71 msgid "Close" msgstr "Tanca" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:98 msgid "Unminimize" msgstr "Desminimitza" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:98 msgid "Minimize" msgstr "Minimitza" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:105 msgid "Unmaximize" msgstr "Desmaximitza" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:105 msgid "Maximize" msgstr "Maximitza" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:470 msgid "Minimize all" msgstr "Minimitza-ho tot" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:476 msgid "Unminimize all" msgstr "Desminimitza-ho tot" -#: extensions/window-list/extension.js:446 +#: extensions/window-list/extension.js:482 msgid "Maximize all" msgstr "Maximitza-ho tot" -#: extensions/window-list/extension.js:454 +#: extensions/window-list/extension.js:490 msgid "Unmaximize all" msgstr "Desmaximitza-ho tot" -#: extensions/window-list/extension.js:462 +#: extensions/window-list/extension.js:498 msgid "Close all" msgstr "Tanca-ho tot" -#: extensions/window-list/extension.js:741 +#: extensions/window-list/extension.js:772 msgid "Window List" msgstr "Llista de finestres" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18 msgid "When to group windows" msgstr "Quan s'han d'agrupar les finestres" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19 msgid "" "Decides when to group windows from the same application on the window list. " "Possible values are “never”, “auto” and “always”." @@ -212,22 +266,22 @@ msgstr "" "llista de finestres. Els valors possibles són: «never» (mai), " "«auto» (automàticament) i «always» (sempre)." -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:86 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 +#: extensions/window-list/prefs.js:79 msgid "Show windows from all workspaces" msgstr "Mostra les finestres de tots els espais de treball" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 msgid "Whether to show windows from all workspaces or only the current one." msgstr "" "Si es mostren les finestres de tots els espais de treballs o només de " "l'actual." -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33 msgid "Show the window list on all monitors" msgstr "Mostra la llista de finestres a tots els monitors" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34 msgid "" "Whether to show the window list on all connected monitors or only on the " "primary one." @@ -235,40 +289,43 @@ msgstr "" "Si es mostra la llista de finestres en tots els monitors connectats o només " "al primari." -#: extensions/window-list/prefs.js:39 +#: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Agrupació de finestres" -#: extensions/window-list/prefs.js:63 +#: extensions/window-list/prefs.js:40 msgid "Never group windows" msgstr "Mai agrupis les finestres" -#: extensions/window-list/prefs.js:64 +#: extensions/window-list/prefs.js:41 msgid "Group windows when space is limited" msgstr "Agrupa les finestres quan l'espai estigui limitat" -#: extensions/window-list/prefs.js:65 +#: extensions/window-list/prefs.js:42 msgid "Always group windows" msgstr "Agrupa les finestres sempre" -#: extensions/window-list/prefs.js:81 +#: extensions/window-list/prefs.js:66 msgid "Show on all monitors" msgstr "Mostra a tots els monitors" -#: extensions/window-list/workspaceIndicator.js:249 -#: extensions/workspace-indicator/extension.js:254 +#: extensions/window-list/workspaceIndicator.js:253 +#: extensions/workspace-indicator/extension.js:259 msgid "Workspace Indicator" msgstr "Indicador de l'espai de treball" -#: extensions/workspace-indicator/prefs.js:33 -msgid "Workspace Names" -msgstr "Noms dels espais de treball" - -#: extensions/workspace-indicator/prefs.js:66 +#: extensions/workspace-indicator/prefs.js:69 #, javascript-format msgid "Workspace %d" msgstr "Espai de treball %d" -#: extensions/workspace-indicator/prefs.js:207 +#: extensions/workspace-indicator/prefs.js:136 +msgid "Workspace Names" +msgstr "Noms dels espais de treball" + +#: extensions/workspace-indicator/prefs.js:262 msgid "Add Workspace" msgstr "Afegeix un espai de treball" + +#~ msgid "Applications" +#~ msgstr "Aplicacions" From 02ff72b2f0daf846683fe0a13538a8990e6347fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 17 Mar 2016 17:15:38 +0100 Subject: [PATCH 31/57] apps-menu: Set label_actor of Category items Category items are based on BaseMenuItem rather than MenuItem, so the accessible relationship isn't set up automatically for us. Part-of: --- extensions/apps-menu/extension.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js index c32b61aa..17bcf3b5 100644 --- a/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js @@ -125,7 +125,10 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { else name = _('Favorites'); - this.add_child(new St.Label({text: name})); + const label = new St.Label({text: name}); + this.add_child(label); + this.actor.label_actor = label; + this.connect('motion-event', this._onMotionEvent.bind(this)); this.connect('notify::active', this._onActiveChanged.bind(this)); } From da90d365ec67ac5d87f47a717d170554ca95d1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 26 Apr 2024 15:22:16 +0200 Subject: [PATCH 32/57] window-list: Use getter methods for events The underlying structs were made opaque a while ago, so direct access to the struct fields is no longer possible. Part-of: --- extensions/window-list/extension.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 362a008f..fc60a4de 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -266,24 +266,24 @@ class BaseButton extends St.Button { delete this._longPressTimeoutId; } - vfunc_button_press_event(buttonEvent) { - if (buttonEvent.button === 1) + vfunc_button_press_event(event) { + if (event.get_button() === 1) this._setLongPressTimeout(); - return super.vfunc_button_press_event(buttonEvent); + return super.vfunc_button_press_event(event); } - vfunc_button_release_event(buttonEvent) { + vfunc_button_release_event(event) { this._removeLongPressTimeout(); - return super.vfunc_button_release_event(buttonEvent); + return super.vfunc_button_release_event(event); } - vfunc_touch_event(touchEvent) { - if (touchEvent.type === Clutter.EventType.TOUCH_BEGIN) + vfunc_touch_event(event) { + if (event.type() === Clutter.EventType.TOUCH_BEGIN) this._setLongPressTimeout(); - else if (touchEvent.type === Clutter.EventType.TOUCH_END) + else if (event.type() === Clutter.EventType.TOUCH_END) this._removeLongPressTimeout(); - return super.vfunc_touch_event(touchEvent); + return super.vfunc_touch_event(event); } activate() { From bb5bb70ac53d2397455bd59d9189049f24c68cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 29 Apr 2024 16:49:30 +0200 Subject: [PATCH 33/57] Update POTFILES.in The file is now copied at build time from the workspace-indicator extension. Fixes: 0c42f162 ("window-list: Use actual copy of workspace-indicator") Part-of: --- po/POTFILES.in | 1 - 1 file changed, 1 deletion(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index aeb5c190..447465a1 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -17,7 +17,6 @@ extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml extensions/window-list/extension.js extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml extensions/window-list/prefs.js -extensions/window-list/workspaceIndicator.js extensions/windowsNavigator/extension.js extensions/workspace-indicator/prefs.js extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml From 8b6835c3d6e58df2db46b951bc53164d1cd538df Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 1 May 2024 22:12:17 +0000 Subject: [PATCH 34/57] Update Slovenian translation --- po/sl.po | 350 ++++++++----------------------------------------------- 1 file changed, 48 insertions(+), 302 deletions(-) diff --git a/po/sl.po b/po/sl.po index 718a0791..43097073 100644 --- a/po/sl.po +++ b/po/sl.po @@ -9,18 +9,18 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-02-15 05:28+0000\n" -"PO-Revision-Date: 2024-02-19 11:07+0100\n" -"Last-Translator: Matej Urbančič \n" +"POT-Creation-Date: 2024-04-29 15:27+0000\n" +"PO-Revision-Date: 2024-05-02 00:11+0200\n" +"Last-Translator: Martin Srebotnjak \n" "Language-Team: Slovenian GNOME Translation Team \n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " -"n%100==4 ? 3 : 0);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 2.2.1\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -43,7 +43,7 @@ msgstr "Klasično namizje GNOME na sistemu Xorg" msgid "Favorites" msgstr "Priljubljeno" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Programi" @@ -158,43 +158,43 @@ msgstr "Delovanje pomnilnika" msgid "Swap stats" msgstr "Podatki izmenjevalnega prostora" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "Podatki pošiljanja" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "Podatki prejema" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "Podrobnosti sistema" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "Pokaži" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "CPE" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "Pomnilnik" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "Izmenjevalni razdelek" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "Poslano" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "Prejeto" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "_Odpri nadzornika sistema" @@ -226,47 +226,47 @@ msgstr "Ime teme" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Ime teme, ki bo naložena iz ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Zapri" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Povečaj" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Skrči" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Pomanjšaj" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "Razpni" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Skrči vse" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Pomanjšaj vse" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Razpni vse" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Pomanjšaj vse" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Zapri vse" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "Seznam oken" @@ -303,6 +303,10 @@ msgid "" msgstr "" "Ali naj bo prikazan seznam oken na vseh povezanih zasloni ali le na osnovnem." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Pokaži predoglede delovne površine na seznamu oken" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Združevanje oken" @@ -323,289 +327,31 @@ msgstr "Okna vedno združuj" msgid "Show on all monitors" msgstr "Pokaži na vseh zaslonih" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "Kazalnik delovnih površin" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "Pokaži predoglede delovne površine" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Pokaži predoglede v zgornji vrstici" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "Delovna površina %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Imena delovnih površin" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Dodaj delovno površino" -#~ msgid "Applications" -#~ msgstr "Programi" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Pokaži predoglede delovne površine v zgornji vrstici" -#~ msgid "Username or email" -#~ msgstr "Uporabniško ime ali elektronski naslov" - -#~ msgid "Username" -#~ msgstr "Uporabniško ime" - -#~ msgid "" -#~ "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." -#~ msgstr "" -#~ "Zahtevan je vpis do 30 znakov, uporabiti pa je mogoče le črke, številke " -#~ "in znake @/./+/-/_." - -#~ msgid "" -#~ "This value may contain only letters, numbers and @/./+/-/_ characters." -#~ msgstr "Vrednost lahko vsebuje le črke, številke, vezaj in znake @/./+/-/_." - -#~ msgid "Email" -#~ msgstr "Elektronski naslov" - -#~ msgid "You should not use email as username" -#~ msgstr "Za uporabniško ime ni priporočljivo uporabiti elektronskega naslova" - -#~ msgid "Forgot your password?" -#~ msgstr "Ali ste pozabili geslo?" - -#~ msgid "Log in" -#~ msgstr "Prijava" - -#~ msgid "Don't have an account?" -#~ msgstr "Še nimate računa za dostop?" - -#~ msgid "Register" -#~ msgstr "Vpisnik" - -#~ msgid "User Login" -#~ msgstr "Prijava uporabnika" - -#~ msgid "Reset your password" -#~ msgstr "Ponastavi geslo" - -#~ msgid "" -#~ "The token for the password reset is incorrect. Please check your link and " -#~ "try again." -#~ msgstr "" -#~ "Žeton za ponastavitev gesla ni pravi. Preverite povezavo in poskusite " -#~ "znova." - -#~ msgid "Password reset" -#~ msgstr "Ponovna nastavitev gesla" - -#~ msgid "" -#~ "Forgot your password? Enter your e-mail address below, and we’ll e-mail " -#~ "instructions for setting a new one." -#~ msgstr "" -#~ "Ali ste pozabili geslo? Vpišite elektronski naslov in poslali vam bomo " -#~ "navodila za nastavitev novega." - -#~ msgid "Installed extensions" -#~ msgstr "Nameščene razširitve" - -#~ msgid "About" -#~ msgstr "O programu" - -#~ msgid "Extensions" -#~ msgstr "Razširitve" - -#, python-format -#~ msgid "" -#~ "Unfortunately, to help prevent spam, we require that you log in to GNOME Shell Extensions in order to " -#~ "post a comment or report an error. You understand, right?" -#~ msgstr "" -#~ "Za preprečevanje neželenih objav se je treba najprej prijaviti na spletno stran. Prijava omogoča " -#~ "poročanje o napakah in objavljanje ocen in mnenj." - -#~ msgid "User Reviews" -#~ msgstr "Mnenja uporabnikov" - -#~ msgid "Loading reviews…" -#~ msgstr "Poteka nalaganje mnenj uporabnikov …" - -#~ msgid "Your opinion" -#~ msgstr "Vaše mnenje" - -#~ msgid "Leave a…" -#~ msgstr "Objavite …" - -#~ msgid "Comment" -#~ msgstr "Opombo" - -#~ msgid "Rating" -#~ msgstr "Oceno" - -#~ msgid "Bug report" -#~ msgstr "Poročilo o hrošču" - -#~ msgid "Upgrade this extension" -#~ msgstr "Posodobi razširitev" - -#~ msgid "Configure this extension" -#~ msgstr "Nastavi razširitev" - -#~ msgid "Uninstall this extension" -#~ msgstr "Odstrani razširitev" - -#~ msgid "Extension Homepage" -#~ msgstr "Spletna stran razširitev" - -#~ msgid "Shell version…" -#~ msgstr "različica lupine …" - -#~ msgid "Extension version…" -#~ msgstr "Različica razširitve …" - -#~ msgid "" -#~ "A reviewer will review the extension you submitted to make sure there's " -#~ "nothing too dangerous. You'll be emailed the result of the review." -#~ msgstr "" -#~ "Pregledovalec bo preveril objavljeno razširitev za morebitno neželeno " -#~ "delovanje. Odziv boste prejeli na elektronski naslov." - -#~ msgid "Search for extensions…" -#~ msgstr "Poišči razširitve …" - -#~ msgid "Installed Extensions" -#~ msgstr "Nameščene razširitve" - -#~ msgid "Shell settings" -#~ msgstr "Nastavitve lupine" - -#~ msgid "Content" -#~ msgstr "Vsebina" - -#~ msgid "Metadata" -#~ msgstr "Metapodatki" - -#~ msgid "Post" -#~ msgstr "Po" - -#~ msgid "Preview" -#~ msgstr "Predogled" - -#~ msgid "What do you think about this GNOME extension?" -#~ msgstr "Kakšno je vaše mnenje o tej razširitvi GNOME?" - -#~ msgid "Please correct the error below" -#~ msgid_plural "Please correct the errors below" -#~ msgstr[0] "Razrešiti je treba spodnje napake" -#~ msgstr[1] "Razrešiti je treba spodnjo napako" -#~ msgstr[2] "Razrešiti je treba spodnji napaki" -#~ msgstr[3] "Razrešiti je treba spodnje napake" - -#~ msgid "Preview your comment" -#~ msgstr "Predogled opombe" - -#~ msgid "Post Comment" -#~ msgstr "Objavi mnenje" - -#~ msgid "Edit your comment" -#~ msgstr "Uredi mnenje" - -#~ msgid "Latest extensions in GNOME Shell Extensions" -#~ msgstr "Najnovejše razširitve Lupine GNOME" - -#~ msgid "GNOME Shell Extensions" -#~ msgstr "Razširitve Lupine Gnome" - -#~ msgid "User Profile" -#~ msgstr "Uporabniški profil" - -#~ msgid "User Settings" -#~ msgstr "Uporabniške nastavitve" - -#~ msgid "Log out" -#~ msgstr "Odjava" - -#~ msgid "" -#~ "To control GNOME Shell extensions using this site you must install GNOME " -#~ "Shell integration that consists of two parts: browser extension and " -#~ "native host messaging application" -#~ msgstr "" -#~ "Za nadzor razširitev Lupine GNOME prek te spletne strani je treba " -#~ "namestiti program, ki vključuje dva dela: razširitev za brskalnik in " -#~ "gostiteljski program za sporočanje." - -#~ msgid "Install GNOME Shell integration browser extension" -#~ msgstr "Namesti razširitev Lupine GNOM za spletni brskalnik" - -#~ msgid "Click here to install browser extension" -#~ msgstr "Kliknite za namestitev razširitve za brskalnik" - -#, javascript-format -#~ msgid "" -#~ "See %swiki page%s for native host connector installation instructions" -#~ msgstr "" -#~ "Oglejte si %sstrani Wiki%s za nastavitev povezovalnega gostiteljskega " -#~ "namiznega programa." - -#~ msgid "" -#~ "We cannot detect a running copy of GNOME on this system, so some parts of " -#~ "the interface may be disabled. See our " -#~ "troubleshooting entry for more information." -#~ msgstr "" -#~ "Ni mogoče zaznati zagnane različice namizja GNOME na tem sistemu, zato so " -#~ "nekateri deli vmesnika morda onemogočeni. Za več podrobnosti si oglejte " -#~ "možnosti odpravljanja napak." - -#~ msgid "GNOME Shell Extensions cannot list your installed extensions." -#~ msgstr "Ni mogoče izpisati nameščenih razširitev Lupine GNOME." - -#~ msgid "Compatible with" -#~ msgstr "Skladno z" - -#~ msgid "Name" -#~ msgstr "Ime" - -#~ msgid "Recent" -#~ msgstr "Nedavno" - -#~ msgid "Popularity" -#~ msgstr "Priljubljenost" - -#~ msgid "Sort by" -#~ msgstr "Razvrsti po" - -#~ msgid "Show more reviews" -#~ msgstr "Pokaži več ocen" - -#~ msgid "There are no comments. Be the first!" -#~ msgstr "Ni še vpisane nobene opombe. Bodite prvi!" - -#~ msgid "Author" -#~ msgstr "Avtor" - -#~ msgid "What's wrong?" -#~ msgstr "Kaj ne narobe?" - -#~ msgid "" -#~ "GNOME Shell Extensions did not detect any errors with this extension." -#~ msgstr "Ni zaznanih napak pri tej razširitvi Lupine GNOME." - -#~ msgid "Version information" -#~ msgstr "Podrobnosti različice" - -#~ msgid "Shell version" -#~ msgstr "Različica lupine" - -#~ msgid "Extension version" -#~ msgstr "Različica razširitve" - -#~ msgid "Unknown" -#~ msgstr "Neznano" - -#~ msgid "What have you tried?" -#~ msgstr "Kaj ste že poskusili?" - -#~ msgid "Automatically detected errors" -#~ msgstr "Samodejno zaznaj napake" - -#~ msgid "You uninstalled" -#~ msgstr "Odstranili ste" - -#~ msgid "Password" -#~ msgstr "Geslo" +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Kazalnik delovnih površin" From 59ab3f834db154bd4733ba30197b0ea59216ee59 Mon Sep 17 00:00:00 2001 From: Hugo Carvalho Date: Sat, 4 May 2024 23:22:24 +0000 Subject: [PATCH 35/57] Update Portuguese translation (cherry picked from commit dd1655653011105f4bd134420442a74fc1a913e5) --- po/pt.po | 204 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 137 insertions(+), 67 deletions(-) diff --git a/po/pt.po b/po/pt.po index 7e2868ca..e2b39e7c 100644 --- a/po/pt.po +++ b/po/pt.po @@ -1,5 +1,5 @@ # gnome-shell-extensions' Portuguese translation. -# Copyright © 2011 gnome-shell-extensions +# Copyright © 2011 - 2024 gnome-shell-extensions # This file is distributed under the same license as the gnome-shell-extensions package. # Duarte Loreto , 2011, 2014. # Fernando Carvalho , 2013. @@ -7,16 +7,17 @@ # Pedro Albuquerque , 2014. # Bruno Ramalhete , 2015. # José Vieira , 2020-2021. -# Hugo Carvalho , 2021. +# Hugo Carvalho , 2021, 2022, 2023, 2024. # Juliano de Souza Camargo , 2021. +# João Carvalhinho , 2024. # msgid "" msgstr "" "Project-Id-Version: 3.14\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2021-11-06 14:08+0000\n" -"PO-Revision-Date: 2021-11-07 22:32+0000\n" +"POT-Creation-Date: 2024-04-29 14:28+0000\n" +"PO-Revision-Date: 2024-05-05 00:20+0100\n" "Last-Translator: Hugo Carvalho \n" "Language-Team: Portuguese (https://l10n.gnome.org/teams/pt/)\n" "Language: pt\n" @@ -24,7 +25,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.0\n" +"X-Generator: Poedit 3.4.2\n" "X-Project-Style: gnome\n" "X-DL-Team: pt\n" "X-DL-Module: gnome-shell-extensions\n" @@ -49,19 +50,19 @@ msgstr "GNOME clássico em Wayland" msgid "GNOME Classic on Xorg" msgstr "GNOME clássico em Xorg" -#: extensions/apps-menu/extension.js:112 +#: extensions/apps-menu/extension.js:126 msgid "Favorites" msgstr "Favoritos" -#: extensions/apps-menu/extension.js:366 -msgid "Applications" +#: extensions/apps-menu/extension.js:397 +msgid "Apps" msgstr "Aplicações" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12 msgid "Application and workspace list" msgstr "Lista de aplicações e áreas de trabalho" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13 msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" @@ -69,34 +70,34 @@ msgstr "" "Uma lista de cadeias, cada uma contendo uma id de aplicação (nome do " "ficheiro desktop), seguido de dois pontos e o número da área de trabalho" -#: extensions/auto-move-windows/prefs.js:34 +#: extensions/auto-move-windows/prefs.js:159 msgid "Workspace Rules" msgstr "Regras das áreas de trabalho" -#: extensions/auto-move-windows/prefs.js:236 +#: extensions/auto-move-windows/prefs.js:314 msgid "Add Rule" msgstr "Adicionar regra" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:133 -#: extensions/places-menu/placeDisplay.js:233 +#: extensions/drive-menu/extension.js:123 +#: extensions/places-menu/placeDisplay.js:218 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Falha ao ejetar a unidade '%s':" -#: extensions/drive-menu/extension.js:149 +#: extensions/drive-menu/extension.js:142 msgid "Removable devices" msgstr "Dispositivos removíveis" -#: extensions/drive-menu/extension.js:171 +#: extensions/drive-menu/extension.js:164 msgid "Open Files" msgstr "Abrir ficheiros" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 msgid "Use more screen for windows" msgstr "Utilizar mais ecrã para as janelas" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 msgid "" "Try to use more screen for placing window thumbnails by adapting to screen " "aspect ratio, and consolidating them further to reduce the bounding box. " @@ -107,11 +108,11 @@ msgstr "" "delimitadora. Esta definição só se aplica com a estratégia de posicionamento " "natural." -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 msgid "Place window captions on top" msgstr "Colocar título de janela em cima" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18 msgid "" "If true, place window captions on top the respective thumbnail, overriding " "shell default of placing it at the bottom. Changing this setting requires " @@ -121,47 +122,119 @@ msgstr "" "substituindo a predefinição, que as coloca no fundo. Alterar esta " "configuração requer reinicializar a interface para ter efeito." -#: extensions/places-menu/extension.js:88 #: extensions/places-menu/extension.js:91 +#: extensions/places-menu/extension.js:94 msgid "Places" msgstr "Locais" -#: extensions/places-menu/placeDisplay.js:46 +#: extensions/places-menu/placeDisplay.js:60 #, javascript-format msgid "Failed to launch “%s”" msgstr "Falha ao iniciar \"%s\"" -#: extensions/places-menu/placeDisplay.js:61 +#: extensions/places-menu/placeDisplay.js:75 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Falha ao montar unidade para “%s”" -#: extensions/places-menu/placeDisplay.js:148 -#: extensions/places-menu/placeDisplay.js:171 +#: extensions/places-menu/placeDisplay.js:135 +#: extensions/places-menu/placeDisplay.js:158 msgid "Computer" msgstr "Computador" -#: extensions/places-menu/placeDisplay.js:359 +#: extensions/places-menu/placeDisplay.js:333 msgid "Home" msgstr "Pasta pessoal" -#: extensions/places-menu/placeDisplay.js:404 +#: extensions/places-menu/placeDisplay.js:378 msgid "Browse Network" msgstr "Explorar a rede" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" msgstr "Percorrer os tamanhos de captura de ecrã" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18 msgid "Cycle Screenshot Sizes Backward" msgstr "Percorrer para trás os tamanhos de captura de ecrã" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 +#: extensions/system-monitor/extension.js:135 +msgid "CPU stats" +msgstr "Estatísticas da CPU" + +#: extensions/system-monitor/extension.js:159 +msgid "Memory stats" +msgstr "Estatísticas da memória" + +#: extensions/system-monitor/extension.js:177 +msgid "Swap stats" +msgstr "Estatísticas da swap" + +#: extensions/system-monitor/extension.js:336 +msgid "Upload stats" +msgstr "Estatísticas de envio" + +#: extensions/system-monitor/extension.js:350 +msgid "Download stats" +msgstr "Estatísticas de transferência" + +#: extensions/system-monitor/extension.js:364 +msgid "System stats" +msgstr "Estatísticas do sistema" + +#: extensions/system-monitor/extension.js:412 +msgid "Show" +msgstr "Mostrar" + +#: extensions/system-monitor/extension.js:414 +msgid "CPU" +msgstr "CPU" + +#: extensions/system-monitor/extension.js:416 +msgid "Memory" +msgstr "Memória" + +#: extensions/system-monitor/extension.js:418 +msgid "Swap" +msgstr "Swap" + +#: extensions/system-monitor/extension.js:420 +msgid "Upload" +msgstr "Envio" + +#: extensions/system-monitor/extension.js:422 +msgid "Download" +msgstr "Transferência" + +#: extensions/system-monitor/extension.js:427 +msgid "Open System Monitor" +msgstr "Abrir monitor do sistema" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12 +msgid "Show CPU usage" +msgstr "Mostrar utilização da CPU" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16 +msgid "Show memory usage" +msgstr "Mostrar utilização da memória" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20 +msgid "Show swap usage" +msgstr "Mostrar utilização da swap" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24 +msgid "Show upload" +msgstr "Mostrar envio" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28 +msgid "Show download" +msgstr "Mostrar transferência" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11 msgid "Theme name" msgstr "Nome do tema" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6 +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "O nome do tema, a ser carregado de ~/.themes/name/gnome-shell" @@ -169,51 +242,51 @@ msgstr "O nome do tema, a ser carregado de ~/.themes/name/gnome-shell" msgid "Close" msgstr "Fechar" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Desminimizar" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Minimizar" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Desmaximizar" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "Maximizar" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Minimizar todas" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Desminimizar todas" -#: extensions/window-list/extension.js:446 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Maximizar todas" -#: extensions/window-list/extension.js:454 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Desmaximizar todas" -#: extensions/window-list/extension.js:462 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Fechar todas" -#: extensions/window-list/extension.js:741 +#: extensions/window-list/extension.js:773 msgid "Window List" msgstr "Lista de janelas" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18 msgid "When to group windows" msgstr "Quando agrupar janelas" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19 msgid "" "Decides when to group windows from the same application on the window list. " "Possible values are “never”, “auto” and “always”." @@ -221,21 +294,21 @@ msgstr "" "Decide quando agrupar janelas da mesma aplicação na lista de janelas. Os " "valores válidos são \"nunca\", \"auto\" e \"sempre\"." -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:86 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 +#: extensions/window-list/prefs.js:79 msgid "Show windows from all workspaces" msgstr "Mostrar janelas de todas as área de trabalho" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 msgid "Whether to show windows from all workspaces or only the current one." msgstr "" "Se deve mostrar janelas de todas as áreas de trabalho ou apenas da atual." -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33 msgid "Show the window list on all monitors" msgstr "Mostrar a lista de janelas em todos os monitores" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34 msgid "" "Whether to show the window list on all connected monitors or only on the " "primary one." @@ -243,44 +316,47 @@ msgstr "" "Se deve mostrar a lista de janelas em todos os monitores ligados ou só no " "principal." -#: extensions/window-list/prefs.js:39 +#: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Agrupar janelas" -#: extensions/window-list/prefs.js:63 +#: extensions/window-list/prefs.js:40 msgid "Never group windows" msgstr "Nunca agrupar janelas" -#: extensions/window-list/prefs.js:64 +#: extensions/window-list/prefs.js:41 msgid "Group windows when space is limited" msgstr "Agrupar janelas quando o espaço é limitado" -#: extensions/window-list/prefs.js:65 +#: extensions/window-list/prefs.js:42 msgid "Always group windows" msgstr "Agrupar sempre as janelas" -#: extensions/window-list/prefs.js:81 +#: extensions/window-list/prefs.js:66 msgid "Show on all monitors" msgstr "Mostrar em todos os monitores" -#: extensions/window-list/workspaceIndicator.js:249 -#: extensions/workspace-indicator/extension.js:254 +#: extensions/window-list/workspaceIndicator.js:255 +#: extensions/workspace-indicator/extension.js:261 msgid "Workspace Indicator" msgstr "Indicador de área de trabalho" -#: extensions/workspace-indicator/prefs.js:33 -msgid "Workspace Names" -msgstr "Nomes das áreas de trabalho" - -#: extensions/workspace-indicator/prefs.js:66 +#: extensions/workspace-indicator/prefs.js:69 #, javascript-format msgid "Workspace %d" msgstr "Área de trabalho %d" -#: extensions/workspace-indicator/prefs.js:207 +#: extensions/workspace-indicator/prefs.js:136 +msgid "Workspace Names" +msgstr "Nomes das áreas de trabalho" + +#: extensions/workspace-indicator/prefs.js:262 msgid "Add Workspace" msgstr "Adicionar área de trabalho" +#~ msgid "Applications" +#~ msgstr "Aplicações" + #~ msgid "Attach modal dialog to the parent window" #~ msgstr "Anexar diálogo modal à janela mãe" @@ -370,12 +446,6 @@ msgstr "Adicionar área de trabalho" #~ msgid "Window management and application launching" #~ msgstr "Gestão de janelas e iniciação de aplicações" -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "Memory" -#~ msgstr "Memória" - #~ msgid "Suspend" #~ msgstr "Suspender" From 8185b43d54d68adaad4b0c5e9aa7a8f0d64deb83 Mon Sep 17 00:00:00 2001 From: Jose Riha Date: Sat, 11 May 2024 22:19:15 +0000 Subject: [PATCH 36/57] Update Slovak translation (cherry picked from commit 1219dfc144161e172623c588df2550815c7979a5) --- po/sk.po | 3008 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 2643 insertions(+), 365 deletions(-) diff --git a/po/sk.po b/po/sk.po index 9e8d20eb..18bd834b 100644 --- a/po/sk.po +++ b/po/sk.po @@ -1,417 +1,2695 @@ -# Slovak translation for gnome-shell-extensions. -# Copyright (C) 2012-2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the gnome-shell-extensions package. -# Pavol Klačanský , 2012. -# Dušan Kazik , 2012, 2013. +# Slovak translation for gnome-maps. +# Copyright (C) 2013 gnome-maps's COPYRIGHT HOLDER +# This file is distributed under the same license as the gnome-maps package. +# Dušan Kazik , 2013-2021. +# Jose Riha , 2024. # msgid "" msgstr "" -"Project-Id-Version: gnome-shell-extensions\n" -"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" -"issues\n" -"POT-Creation-Date: 2021-11-06 14:08+0000\n" -"PO-Revision-Date: 2022-02-25 08:14+0100\n" -"Last-Translator: Dušan Kazik \n" +"Project-Id-Version: gnome-maps master\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-maps/issues\n" +"POT-Creation-Date: 2024-04-08 13:03+0000\n" +"PO-Revision-Date: 2024-05-12 00:18+0200\n" +"Last-Translator: Jose Riha \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" -"X-Generator: Poedit 3.0\n" +"X-Generator: Poedit 3.3.1\n" -#: data/gnome-classic.desktop.in:3 -msgid "GNOME Classic" -msgstr "Klasické prostredie GNOME" +# desktop entry name +#. Translators: This is the program name. +#. for some reason, setting the title of the window through the .ui +#. * template does not work anymore (maybe has something to do with +#. * setting a custom title on the headerbar). Setting it programmatically +#. * here works though. And yields a proper label in the gnome-shell +#. * overview. +#. +#. Translators: This is the program name. +#: data/org.gnome.Maps.appdata.xml.in.in:6 data/org.gnome.Maps.desktop.in.in:4 +#: data/ui/main-window.ui:27 src/application.js:64 src/mainWindow.js:147 +#: src/mainWindow.js:647 +msgid "Maps" +msgstr "Mapy" -#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 -#: data/gnome-classic-xorg.desktop.in:4 -msgid "This session logs you into GNOME Classic" -msgstr "Táto relácia vás prihlási do klasického prostredia GNOME" +#: data/org.gnome.Maps.appdata.xml.in.in:7 +msgid "Find places around the world" +msgstr "Vyhľadáva miesta po celom svete" -#: data/gnome-classic-wayland.desktop.in:3 -msgid "GNOME Classic on Wayland" -msgstr "Klasické prostredie GNOME so systémom Wayland" +#: data/org.gnome.Maps.appdata.xml.in.in:9 +msgid "" +"Maps gives you quick access to maps all across the world. It allows you to " +"quickly find the place you’re looking for by searching for a city or street, " +"or locate a place to meet a friend." +msgstr "" +"Aplikácia Mapy vám poskytuje rýchly prístup k mapám celého sveta. Umožňuje " +"vám rýchlo nájsť miesto, ktoré hľadáte zadaním vyhľadávanej obce alebo " +"ulice, prípadne zistiť polohu, kde sa máte stretnúť s priateľom." -#: data/gnome-classic-xorg.desktop.in:3 -msgid "GNOME Classic on Xorg" -msgstr "Klasické prostredie GNOME so systémom Xorg" +#: data/org.gnome.Maps.appdata.xml.in.in:14 +msgid "" +"Maps uses the collaborative OpenStreetMap database, made by hundreds of " +"thousands of people across the globe." +msgstr "" +"Aplikácia Mapy používa databázu projektu OpenStreetMap, na ktorej " +"spolupracujú stovky tisícov ľudí z celého sveta." -#: extensions/apps-menu/extension.js:112 +#. developer_name tag deprecated with Appstream 1.0 +#: data/org.gnome.Maps.appdata.xml.in.in:468 src/mainWindow.js:644 +msgid "The GNOME Project" +msgstr "Projekt GNOME" + +# desktop entry comment +#: data/org.gnome.Maps.desktop.in.in:5 +msgid "A simple maps application" +msgstr "Jednoduchá aplikácia na prezeranie máp" + +# desktop enty keywords +#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +#: data/org.gnome.Maps.desktop.in.in:14 +msgid "Maps;" +msgstr "mapa;mapy;" + +#: data/org.gnome.Maps.desktop.in.in:17 +msgid "Allows your location to be shown on the map." +msgstr "Umožní zobrazenie vášho umiestnenia na mape." + +#: data/org.gnome.Maps.gschema.xml:11 +msgid "last viewed location" +msgstr "Naposledy zobrazené miesto" + +# summary +#: data/org.gnome.Maps.gschema.xml:12 +msgid "Coordinates of last viewed location." +msgstr "Súradnice naposledy zobrazeného miesta." + +#: data/org.gnome.Maps.gschema.xml:16 +msgid "zoom" +msgstr "Priblíženie" + +#: data/org.gnome.Maps.gschema.xml:17 +msgid "Zoom level" +msgstr "Úroveň priblíženia" + +#: data/org.gnome.Maps.gschema.xml:21 +#| msgid "Population" +msgid "rotation" +msgstr "Otočenie" + +#: data/org.gnome.Maps.gschema.xml:22 +msgid "Map rotation in radians" +msgstr "Otočenie mapy v radiánoch" + +#: data/org.gnome.Maps.gschema.xml:26 +msgid "Map type" +msgstr "Typ mapy" + +#: data/org.gnome.Maps.gschema.xml:27 +msgid "The type of map to display (street, aerial, etc.)" +msgstr "Typ mapy, ktorý sa má zobraziť (bežná, letecký pohľad, atď.)" + +# summary +#: data/org.gnome.Maps.gschema.xml:31 +msgid "Window size" +msgstr "Veľkosť okna" + +# description +#: data/org.gnome.Maps.gschema.xml:32 +msgid "Window size (width and height)." +msgstr "Veľkosť okna (šírka a výška)" + +# summary +#: data/org.gnome.Maps.gschema.xml:36 +msgid "Window position" +msgstr "Pozícia okna" + +# description +#: data/org.gnome.Maps.gschema.xml:37 +msgid "Window position (X and Y)." +msgstr "Pozícia okna (X a Y)." + +# summary +#: data/org.gnome.Maps.gschema.xml:41 +msgid "Window maximized" +msgstr "Maximalizované okno" + +# description +#: data/org.gnome.Maps.gschema.xml:42 +msgid "Window maximization state" +msgstr "Maximalizovaný stav okna" + +# summary +#: data/org.gnome.Maps.gschema.xml:46 +msgid "Maximum number of search results" +msgstr "Maximálny počet výsledkov hľadania" + +# description +#: data/org.gnome.Maps.gschema.xml:47 +msgid "Maximum number of search results from geocode search." +msgstr "Maximálny počet výsledkov hľadania z vyhľadávača geokódov." + +#: data/org.gnome.Maps.gschema.xml:51 +msgid "Number of recent places to store" +msgstr "Počet nedávnych miest na uloženie" + +#: data/org.gnome.Maps.gschema.xml:52 +msgid "Number of recently visited places to store." +msgstr "Počet nedávno navštívených miest, ktoré sa majú uložiť." + +#: data/org.gnome.Maps.gschema.xml:56 +msgid "Number of recent routes to store" +msgstr "Počet nedávnych trás na uloženie" + +#: data/org.gnome.Maps.gschema.xml:57 +msgid "Number of recently visited routes to store." +msgstr "Počet nedávno navštívených trás, ktoré sa majú uložiť." + +#: data/org.gnome.Maps.gschema.xml:61 +#| msgid "OpenStreetMap username or e-mail address" +msgid "OpenStreetMap username or email address" +msgstr "Používateľské meno alebo e-mailová adresa projektu OpenStreetMap" + +#: data/org.gnome.Maps.gschema.xml:62 +msgid "Indicates if the user has signed in to edit OpenStreetMap data." +msgstr "" +"Označuje, či sa používateľ prihlásil na úpravu údajov projektu OpenStreetMap." + +#: data/org.gnome.Maps.gschema.xml:66 +msgid "Last used transportation type for routing" +msgstr "Naposledy použitý typ dopravy pre plánovanie trasy" + +#: data/org.gnome.Maps.gschema.xml:70 +msgid "Show scale" +msgstr "Zobraziť mierku" + +#: data/org.gnome.Maps.gschema.xml:71 +msgid "Whether to show the scale." +msgstr "Určuje, či sa má zobraziť mierka." + +#: data/ui/context-menu.ui:6 +msgid "Route from Here" +msgstr "Trasa odtiaľto" + +#: data/ui/context-menu.ui:10 +msgid "Add Intermediate Destination" +msgstr "Pridať prechodný cieľ" + +#: data/ui/context-menu.ui:14 +msgid "Route to Here" +msgstr "Trasa sem" + +#: data/ui/context-menu.ui:20 +msgid "What's Here?" +msgstr "Čo sa nachádza tu?" + +#: data/ui/context-menu.ui:24 +msgid "Copy Location" +msgstr "Skopírovať umiestnenie" + +# DK:https://bugzilla.gnome.org/show_bug.cgi?id=761995 +#: data/ui/context-menu.ui:28 +msgid "Add to OpenStreetMap…" +msgstr "Pridať do projektu OpenStreetMap…" + +# dialog title +#: data/ui/export-view-dialog.ui:7 +msgid "Export view" +msgstr "Export zobrazenia" + +#: data/ui/export-view-dialog.ui:16 data/ui/send-to-dialog.ui:10 +#: data/ui/shape-layer-file-chooser.ui:22 +msgid "_Cancel" +msgstr "_Zrušiť" + +# button label +#: data/ui/export-view-dialog.ui:26 +msgid "_Export" +msgstr "_Exportovať" + +#. Translators: This is a tooltip +#: data/ui/favorite-list-row.ui:72 +#| msgid "Favorites" +msgid "Remove Favorite" +msgstr "Odstrániť z obľúbených" + +#: data/ui/favorites-popover.ui:11 +#| msgid "Favorites" +msgid "No Favorites" +msgstr "Žiadne obľúbené" + +#: data/ui/favorites-popover.ui:12 +msgid "Add places to your favorites to get them listed here" +msgstr "Pridajte miesta do obľúbených a zobrazia sa tu" + +#. Translators: This is a tooltip +#: data/ui/headerbar-left.ui:11 src/geoclue.js:106 src/placeBar.js:91 +msgid "Current Location" +msgstr "Aktuálne umiestnenie" + +#. Translators: This is a tooltip +#: data/ui/headerbar-left.ui:19 +msgid "Layers" +msgstr "Vrstvy" + +# tooltip +#. Translators: This is a tooltip +#: data/ui/headerbar-right.ui:11 +msgid "Print Route" +msgstr "Vytlačí trasu" + +#. Translators: This is a tooltip +#: data/ui/headerbar-right.ui:21 msgid "Favorites" msgstr "Obľúbené" -# TreeViewColumn -#: extensions/apps-menu/extension.js:366 -msgid "Applications" -msgstr "Aplikácie" +#. Translators: This is a tooltip +#: data/ui/headerbar-right.ui:30 +msgid "Route Planner" +msgstr "Plánovač trasy" -# summary -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 -msgid "Application and workspace list" -msgstr "Zoznam aplikácií a pracovných plôch" +#: data/ui/help-overlay.ui:12 +msgctxt "shortcut window" +msgid "General" +msgstr "Všeobecné" -# description -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7 -msgid "" -"A list of strings, each containing an application id (desktop file name), " -"followed by a colon and the workspace number" +#: data/ui/help-overlay.ui:15 +msgctxt "shortcut window" +msgid "Show Shortcuts" +msgstr "Zobraziť klávesové skratky" + +#: data/ui/help-overlay.ui:21 +msgctxt "shortcut window" +msgid "Search" +msgstr "Hľadať" + +#: data/ui/help-overlay.ui:27 +msgctxt "shortcut window" +msgid "Explore points-of-interest" +msgstr "Preskúmať zaujímavé miesta" + +#: data/ui/help-overlay.ui:33 +#| msgid "Show more results" +msgctxt "shortcut window" +msgid "Show last search results" +msgstr "Zobraziť výsledky posledného hľadania" + +# DK:tooltip +#: data/ui/help-overlay.ui:39 +msgctxt "shortcut window" +msgid "Toggle route planner" +msgstr "Prepnúť plánovač trasy" + +#: data/ui/help-overlay.ui:45 +msgctxt "shortcut window" +msgid "Print route" +msgstr "Tlačiť trasu" + +#: data/ui/help-overlay.ui:51 +msgctxt "shortcut window" +msgid "Quit" +msgstr "Ukončiť" + +#: data/ui/help-overlay.ui:57 +msgctxt "shortcut window" +msgid "Open main menu" +msgstr "Otvoriť hlavnú ponuku" + +#: data/ui/help-overlay.ui:65 +msgctxt "shortcut window" +msgid "Map View" +msgstr "Zobraziť mapu" + +#: data/ui/help-overlay.ui:68 +msgctxt "shortcut window" +msgid "Zoom in" +msgstr "Priblížiť" + +#: data/ui/help-overlay.ui:74 +msgctxt "shortcut window" +msgid "Zoom out" +msgstr "Oddialiť" + +#: data/ui/help-overlay.ui:80 +msgctxt "shortcut window" +msgid "Rotate clockwise" +msgstr "Otočiť v smere hodín" + +#: data/ui/help-overlay.ui:86 +msgctxt "shortcut window" +msgid "Rotate counter-clockwise" +msgstr "Otočiť proti smeru hodín" + +#: data/ui/help-overlay.ui:92 +#| msgid "Remove via location" +msgctxt "shortcut window" +msgid "Reset rotation" +msgstr "Vynulovať rotáciu" + +# tooltip +#: data/ui/help-overlay.ui:98 +msgctxt "shortcut window" +msgid "Toggle scale" +msgstr "Prepnúť mierku" + +# DK:tooltip +#: data/ui/help-overlay.ui:104 +msgctxt "shortcut window" +msgid "Go to current location" +msgstr "Prejsť na aktuálne umiestnenie" + +#: data/ui/help-overlay.ui:114 +msgctxt "shortcut window" +msgid "Switch to street view" +msgstr "Prepnúť na bežnú mapu" + +#: data/ui/help-overlay.ui:121 +msgctxt "shortcut window" +msgid "Switch to aerial view" +msgstr "Prepnúť na letecký pohľad" + +#: data/ui/help-overlay.ui:127 +msgctxt "shortcut window" +msgid "Open shape layer" +msgstr "Otvoriť vlastnú vrstvu" + +#: data/ui/layers-popover.ui:7 +msgid "Show Scale" +msgstr "Zobraziť mierku" + +#: data/ui/layers-popover.ui:16 +msgid "Enable Experimental Map" +msgstr "Povoliť experimentálnu mapu" + +# dialo title +#. Translators: This string uses ellipsis character +#: data/ui/layers-popover.ui:21 +msgid "Open Shape Layer…" +msgstr "Otvoriť vlastnú vrstvu…" + +#: data/ui/main-window.ui:8 +msgid "Set up OpenStreetMap Account…" +msgstr "Nastaviť účet projektu OpenStreetMap…" + +# menu item +#: data/ui/main-window.ui:12 +msgid "Export as Image…" +msgstr "Exportovať ako obrázok…" + +#: data/ui/main-window.ui:17 +msgid "_Keyboard Shortcuts" +msgstr "_Klávesové skratky" + +#: data/ui/main-window.ui:22 +msgid "About Maps" +msgstr "O aplikácii Mapy" + +#: data/ui/main-window.ui:48 +msgid "Main Menu" +msgstr "Hlavná ponuka" + +#: data/ui/osm-account-dialog.ui:5 +msgid "OpenStreetMap Account" +msgstr "Účet projektu OpenStreetMap" + +#: data/ui/osm-account-dialog.ui:31 +msgid "Sign In To Edit Maps" +msgstr "Pre úpravu máp sa prihláste" + +#: data/ui/osm-account-dialog.ui:32 +#| msgid "" +#| "Help to improve the map, using an\n" +#| "OpenStreetMap account." +msgid "Help to improve the map, using an OpenStreetMap account." msgstr "" -"Zoznam reťazcov, z ktorých každý obsahuje identifikátor aplikácie (názov " -"súboru .desktop), nasledovaný čiarkou a číslom pracovného priestoru" +"Pomôžte zlepšiť mapu vytvorením " +"účtu v projekte OpenStreetMap." -# Label -#: extensions/auto-move-windows/prefs.js:34 -msgid "Workspace Rules" -msgstr "Pravidlá pracovného priestoru" +#: data/ui/osm-account-dialog.ui:36 +msgid "Sign In" +msgstr "Prihlásiť sa" -# ToolButton label -#: extensions/auto-move-windows/prefs.js:236 -msgid "Add Rule" -msgstr "Pridať pravidlo" +#: data/ui/osm-account-dialog.ui:59 +#| msgid "Verification code" +msgid "Verification" +msgstr "Overenie" -# https://bugzilla.gnome.org/show_bug.cgi?id=687590 -#. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:133 -#: extensions/places-menu/placeDisplay.js:233 +#: data/ui/osm-account-dialog.ui:60 +#| msgid "Copy verification code shown when authorizing access in the browser" +msgid "" +"Copy the verification code shown when authorizing access in the browser." +msgstr "" +"Skopírujte overovací kód zobrazený počas overovania prístupu v prehliadači." + +#: data/ui/osm-account-dialog.ui:69 +#| msgid "Verification code" +msgid "Verification Code" +msgstr "Overovací kód" + +#: data/ui/osm-account-dialog.ui:75 +msgid "Verify" +msgstr "Overiť" + +#: data/ui/osm-account-dialog.ui:110 +#| msgid "Sign In" +msgid "Signed In" +msgstr "Prihlásené" + +#: data/ui/osm-account-dialog.ui:111 +msgid "Your OpenStreetMap account is active." +msgstr "Váš účet projektu OpenStreetMap je aktívny." + +#: data/ui/osm-account-dialog.ui:129 +msgid "Sign Out" +msgstr "Odhlásiť sa" + +#: data/ui/osm-edit-address.ui:11 +msgid "Street" +msgstr "Ulica" + +#: data/ui/osm-edit-address.ui:22 +msgid "House number" +msgstr "Číslo domu" + +#: data/ui/osm-edit-address.ui:33 +msgid "Postal code" +msgstr "Smerovacie číslo" + +#. This is the place name as it would be written in a postal address (typically coming after the postal code) +#: data/ui/osm-edit-address.ui:44 +msgid "City" +msgstr "Obec" + +#: data/ui/osm-edit-dialog.ui:8 +msgctxt "dialog title" +msgid "Edit on OpenStreetMap" +msgstr "Úprava v projekte OpenStreetMap" + +#: data/ui/osm-edit-dialog.ui:57 +msgid "Type" +msgstr "Typ" + +#: data/ui/osm-edit-dialog.ui:79 +msgid "None" +msgstr "Nič" + +#: data/ui/osm-edit-dialog.ui:108 +msgid "Add Field" +msgstr "Pridanie poľa" + +#: data/ui/osm-edit-dialog.ui:130 +msgid "Comment" +msgstr "Komentár" + +#: data/ui/osm-edit-dialog.ui:158 +msgid "" +"Map changes will be visible on all maps that use\n" +"OpenStreetMap data." +msgstr "" +"Zmeny mapy budú viditeľné na všetkých mapách, ktoré\n" +"využívajú údaje z projektu OpenStreetMap." + +#: data/ui/osm-edit-dialog.ui:186 +msgid "Recently Used" +msgstr "Nedávno použité" + +#: data/ui/osm-edit-dialog.ui:225 src/mapView.js:671 +msgid "Cancel" +msgstr "Zrušiť" + +#: data/ui/osm-edit-dialog.ui:238 src/osmEditDialog.js:531 +msgid "Next" +msgstr "Ďalej" + +#: data/ui/osm-edit-wikipedia.ui:8 +msgid "Article" +msgstr "Článok" + +#: data/ui/osm-edit-wikipedia.ui:21 +msgid "Wikidata tag" +msgstr "Značka údajov Wikidata" + +#: data/ui/osm-edit-wikipedia.ui:32 +#| msgid "Couldn't find Wikidata tag for article" +msgid "Load Wikidata tag for article" +msgstr "Načítať Wikidata značku pre článok" + +#: data/ui/place-popover.ui:23 src/searchBar.js:55 +msgid "Explore Nearby Places" +msgstr "Preskúmať miesta v okolí" + +#: data/ui/place-popover.ui:82 src/application.js:277 +msgid "No results found" +msgstr "Nenašli sa žiadne výsledky" + +#: data/ui/place-popover.ui:92 src/application.js:255 +msgid "An error has occurred" +msgstr "Vyskytla sa chyba" + +#. Translators: This is a tooltip +#: data/ui/route-entry.ui:12 +msgid "Change Route Order" +msgstr "Zmení poradie trasy" + +# dialog title +#: data/ui/send-to-dialog.ui:7 +msgid "Open Location" +msgstr "Otvorenie umiestnenia" + +# gtkbutton +#: data/ui/send-to-dialog.ui:64 +msgid "Copy" +msgstr "Kopírovať" + +#: data/ui/send-to-dialog.ui:70 +msgid "Send To…" +msgstr "Odoslať do…" + +# dialo title +#: data/ui/shape-layer-file-chooser.ui:4 src/mainWindow.js:62 +msgid "Open Shape Layer" +msgstr "Otvorenie vlastnej vrstvy" + +#: data/ui/shape-layer-file-chooser.ui:12 +msgid "_Open" +msgstr "_Otvoriť" + +# tooltip +#. Translators: This is a tooltip +#: data/ui/shape-layer-row.ui:32 +msgid "Toggle visible" +msgstr "Prepne viditeľné" + +# dialo title +#. Translators: This is a tooltip +#: data/ui/shape-layer-row.ui:44 +msgid "Remove Shape Layer" +msgstr "Odstráni vlastnú vrstvu" + +#: data/ui/sidebar.ui:207 +msgid "Route search by GraphHopper" +msgstr "Trasa poskytovaná službou GraphHopper" + +#: data/ui/sidebar.ui:272 +msgid "" +"Routing itineraries for public transit is provided by third-party\n" +"services.\n" +"GNOME can not guarantee correctness of the itineraries and schedules shown.\n" +"Note that some providers might not include all available modes of " +"transportation,\n" +"e.g. a national provider might not include airlines, and a local provider " +"could\n" +"miss regional trains.\n" +"Names and brands shown are to be considered as registered trademarks when " +"applicable." +msgstr "" +"Itinerár trasy verejnej dopravy je poskytovaný službami tretích strán\n" +"Projekt GNOME nemôže zaručiť správnosť zobrazeného itineráru a plánu.\n" +"Berte na vedomie, že niektorí poskytovatelia nemusia zahŕňať všetky spôsoby " +"prepravy,\n" +"napr. národný poskytovateľ nemusí zahrnúť letecké linky a miestnemu " +"poskytovateľovi\n" +"môžu chýbať regionálne vlaky.\n" +"Zobrazené názvy a značky sú považované za registrované obchodné známky, ak " +"je to nevyhnutné." + +# tooltip +#. Translators: This is a tooltip +#: data/ui/transit-leg-row.ui:98 +msgid "Hide intermediate stops and information" +msgstr "Skryje prechodné zastávky a informácie" + +# tooltip +#. Translators: This is a tooltip +#: data/ui/transit-leg-row.ui:156 +msgid "Show intermediate stops and information" +msgstr "Zobrazí prechodné zastávky a informácie" + +#. Indicates searching for the next available itineraries +#: data/ui/transit-options-panel.ui:16 +msgid "Leave Now" +msgstr "Odchod teraz" + +#. Indicates searching for itineraries leaving at the specified time at the earliest +#: data/ui/transit-options-panel.ui:17 +msgid "Leave By" +msgstr "Odchod o" + +#. Indicates searching for itineraries arriving no later than the specified time +#: data/ui/transit-options-panel.ui:18 +msgid "Arrive By" +msgstr "Príchod o" + +#. Header indicating selected modes of transit +#: data/ui/transit-options-panel.ui:85 +msgid "Show" +msgstr "Zobraziť" + +#: data/ui/transit-options-panel.ui:95 +msgid "Buses" +msgstr "Autobusy" + +#: data/ui/transit-options-panel.ui:101 +msgid "Trams" +msgstr "Električky" + +#: data/ui/transit-options-panel.ui:107 +msgid "Trains" +msgstr "Vlaky" + +#: data/ui/transit-options-panel.ui:113 +msgid "Subway" +msgstr "Metro" + +#: data/ui/transit-options-panel.ui:119 +msgid "Ferries" +msgstr "Trajekty" + +#: data/ui/transit-options-panel.ui:125 +msgid "Airplanes" +msgstr "Lietadlá" + +#. Translators: This is a tooltip +#: data/ui/place-bar.ui:33 data/ui/place-buttons.ui:27 +msgid "Share Location" +msgstr "Sprístupní umiestnenie" + +# tooltip +#. Translators: This is a tooltip +#: data/ui/place-buttons.ui:11 +msgid "Add to new route" +msgstr "Pridá do novej trasy" + +#. Translators: This is the button to find a route to a place +#: data/ui/place-buttons.ui:15 +msgid "Directions" +msgstr "Pokyny" + +#. Translators: This is a tooltip +#: data/ui/place-buttons.ui:36 +msgid "Mark as Favorite" +msgstr "Označí ako obľúbené" + +#. Translators: This is a tooltip +#: data/ui/place-buttons.ui:44 +msgid "Edit on OpenStreetMap" +msgstr "Úprava v projekte OpenStreetMap" + +# tooltip +#. Translators: This is a tooltip +#: data/ui/place-view.ui:52 +msgid "Share location" +msgstr "Sprístupní umiestnenie" + +#: data/ui/poi-category-goback-row.ui:22 +msgid "Back to Main Categories" +msgstr "Späť na hlavné kategórie" + +#. Translators: This is a tooltip +#: data/ui/zoom-and-rotate-controls.ui:19 +#| msgid "Remove via location" +msgid "Reset Rotation" +msgstr "Vynulovať otočenie" + +#. Translators: This is a tooltip +#: data/ui/zoom-and-rotate-controls.ui:32 +msgid "Zoom Out" +msgstr "Oddialiť" + +#. Translators: This is a tooltip +#: data/ui/zoom-and-rotate-controls.ui:43 src/mapView.js:1246 +msgid "Zoom In" +msgstr "Priblížiť" + +#: lib/maps-file-data-source.c:262 lib/maps-file-data-source.c:338 +#: lib/maps-file-data-source.c:418 +msgid "Failed to find tile structure in directory" +msgstr "Zlyhalo nájdenie štruktúry dlaždíc v adresári" + +#: lib/maps-osm.c:56 +msgid "Failed to parse XML document" +msgstr "Zlyhala analýza dokumentu XML" + +#: lib/maps-osm.c:250 lib/maps-osm.c:403 +msgid "Missing required attributes" +msgstr "Chýbajú potrebné atribúty" + +#: lib/maps-osm.c:451 lib/maps-osm.c:494 +msgid "Could not find OSM element" +msgstr "Nepodarilo sa nájsť prvok služby OSM" + +#: lib/maps-osm.c:508 +msgid "Could not find user element" +msgstr "Nepodarilo sa nájsť prvok používateľa" + +#: src/application.js:78 +msgid "A path to a local tiles directory structure" +msgstr "Cesta k štruktúre adresárov miestnych dlaždíc" + +#: src/application.js:84 +msgid "Tile size for local tiles directory" +msgstr "Veľkosť dlaždice pre adresár miestnych dlaždíc" + +#: src/application.js:88 +msgid "Show the version of the program" +msgstr "Zobrazí verziu programu" + +#: src/application.js:94 +msgid "Search for places" +msgstr "Vyhľadá miesta" + +#: src/application.js:105 src/application.js:106 +msgid "[FILE…|URI]" +msgstr "[SÚBOR…|URI]" + +#: src/application.js:284 #, javascript-format -msgid "Ejecting drive “%s” failed:" -msgstr "Zlyhalo vysúvanie jednotky „%s“:" +msgid "Invalid maps: URI: %s" +msgstr "Neplatné mapy: URI: %s" -#  Menu -#: extensions/drive-menu/extension.js:149 -msgid "Removable devices" -msgstr "Vymeniteľné zariadenia" - -# Menu Action -#: extensions/drive-menu/extension.js:171 -msgid "Open Files" -msgstr "Otvoriť aplikáciu Súbory" - -# summary -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 -msgid "Use more screen for windows" -msgstr "Použiť viac obrazovky pre okná" - -# description -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 -msgid "" -"Try to use more screen for placing window thumbnails by adapting to screen " -"aspect ratio, and consolidating them further to reduce the bounding box. " -"This setting applies only with the natural placement strategy." -msgstr "" -"Pokúsi sa využiť viac obrazovky tým, že umiestnenie miniatúr okien sa " -"prispôsobí pomeru strán, a tiež sa zváži zmenšenie okrajov. Toto nastavenie " -"sa aplikuje len pri bežnom spôsobe umiestnenia." - -# summary -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 -msgid "Place window captions on top" -msgstr "Umiestniť titulok okna navrch" - -# description -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 -msgid "" -"If true, place window captions on top the respective thumbnail, overriding " -"shell default of placing it at the bottom. Changing this setting requires " -"restarting the shell to have any effect." -msgstr "" -"Pri nastavení na true, bude titulok okna umiestnený navrchu zodpovedajúcej " -"miniatúry. Prepíše sa tým predvolené nastavenie shellu, ktorý ho umiestňuje " -"nadol. Aby sa prejavila zmena, je potrebné reštartovať shell." - -#  menu item -#: extensions/places-menu/extension.js:88 -#: extensions/places-menu/extension.js:91 -msgid "Places" -msgstr "Miesta" - -#: extensions/places-menu/placeDisplay.js:46 +#. Translators: This is a format string for a PNG filename for an +#. * exported image with coordinates. The .png extension should be kept +#. * intact in the translated string. +#. +#: src/exportViewDialog.js:75 #, javascript-format -msgid "Failed to launch “%s”" -msgstr "Zlyhalo spustenie „%s“" +msgid "Maps at %f, %f.png" +msgstr "Mapy na mieste %f, %f.png" -#: extensions/places-menu/placeDisplay.js:61 +#: src/exportViewDialog.js:174 +msgid "Unable to export view" +msgstr "Nie je možné exportovať zobrazenie" + +#: src/favoriteListRow.js:42 +#| msgid "Favorites" +msgid "Favorite removed" +msgstr "Obľúbená položka bola odstránená" + +#: src/favoriteListRow.js:43 +msgid "Undo" +msgstr "Späť" + +#: src/geoJSONSource.js:73 +msgid "invalid coordinate" +msgstr "neplatná súradnica" + +#: src/geoJSONSource.js:126 src/geoJSONSource.js:166 src/geoJSONSource.js:181 +msgid "parse error" +msgstr "chyba analýzy" + +#: src/geoJSONSource.js:160 +msgid "unknown geometry" +msgstr "neznáma geometria" + +#: src/graphHopper.js:101 src/transitPlan.js:175 +msgid "Route request failed." +msgstr "Požiadavka na trasu zlyhala." + +#: src/graphHopper.js:108 src/transitPlan.js:167 +msgid "No route found." +msgstr "Nenašla sa žiadna trasa." + +#: src/graphHopper.js:195 src/transitplugins/openTripPlanner.js:1163 +msgid "Start!" +msgstr "Začiatok!" + +#: src/mainWindow.js:59 +msgid "All Layer Files" +msgstr "Všetky súbory vrstiev" + +#: src/mainWindow.js:522 +msgid "Failed to connect to location service" +msgstr "Zlyhalo pripojenie k lokalizačnej službe" + +#: src/mainWindow.js:527 +#| msgid "Turn on location services to find your location" +msgid "Turn on location services" +msgstr "Zapnite lokalizačné služby" + +#: src/mainWindow.js:528 +msgid "Location Settings" +msgstr "Nastavenia umiestnenia" + +#: src/mainWindow.js:645 +msgid "translator-credits" +msgstr "Dušan Kazik , Jose Riha " + +#: src/mainWindow.js:649 +msgid "Copyright © 2011 – 2023 Red Hat, Inc. and The GNOME Maps authors" +msgstr "" +"Autorské práva © 2011 – 2023 Red Hat, Inc. a autori aplikácie Mapy " +"prostredia GNOME" + +#: src/mainWindow.js:665 #, javascript-format -msgid "Failed to mount volume for “%s”" -msgstr "Zlyhalo pripojenie zväzku pre „%s“" +msgid "Map data by %s and contributors" +msgstr "Údaje mapy zo služby %s a jej prispievateľov" -#: extensions/places-menu/placeDisplay.js:148 -#: extensions/places-menu/placeDisplay.js:171 -msgid "Computer" -msgstr "Počítač" +#: src/mainWindow.js:666 +msgid "Map Data Provider" +msgstr "Poskytovateľ mapových údajov" -# Places -#: extensions/places-menu/placeDisplay.js:359 -msgid "Home" -msgstr "Domov" +#: src/mainWindow.js:678 +msgid "Map Tile Provider" +msgstr "Poskytovateľ dlaždíc mapy" -#: extensions/places-menu/placeDisplay.js:404 -msgid "Browse Network" -msgstr "Prehliadať sieť" - -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 -msgid "Cycle Screenshot Sizes" -msgstr "Meniť veľkosti snímkov obrazovky" - -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 -msgid "Cycle Screenshot Sizes Backward" -msgstr "Meniť veľkosti snímkov obrazovky spätne" - -# summary -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 -msgid "Theme name" -msgstr "Názov témy" - -# description -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6 -msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -msgstr "Názov témy, ktorá sa načíta z ~/.themes/nazov/gnome-shell" - -# PopupMenuItem -#: extensions/window-list/extension.js:72 -msgid "Close" -msgstr "Zavrieť" - -# label -#: extensions/window-list/extension.js:92 -msgid "Unminimize" -msgstr "Odminimalizovať" - -# label -#: extensions/window-list/extension.js:92 -msgid "Minimize" -msgstr "Minimalizovať" - -# label -#: extensions/window-list/extension.js:99 -msgid "Unmaximize" -msgstr "Odmaximalizovať" - -# label -#: extensions/window-list/extension.js:99 -msgid "Maximize" -msgstr "Maximalizovať" - -# PopupMenuItem -#: extensions/window-list/extension.js:434 -msgid "Minimize all" -msgstr "Minimalizovať všetko" - -# PopupMenuItem -#: extensions/window-list/extension.js:440 -msgid "Unminimize all" -msgstr "Odminimalizovať všetko" - -# PopupMenuItem -#: extensions/window-list/extension.js:446 -msgid "Maximize all" -msgstr "Maximalizovať všetko" - -# PopupMenuItem -#: extensions/window-list/extension.js:454 -msgid "Unmaximize all" -msgstr "Odmaximalizovať všetko" - -# PopupMenuItem -#: extensions/window-list/extension.js:462 -msgid "Close all" -msgstr "Zavrieť všetko" - -#: extensions/window-list/extension.js:741 -msgid "Window List" -msgstr "Zoznam okien" - -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 -msgid "When to group windows" -msgstr "Kedy zoskupiť okná" - -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 -msgid "" -"Decides when to group windows from the same application on the window list. " -"Possible values are “never”, “auto” and “always”." -msgstr "" -"Rozhoduje kedy sa majú v zozname okien zoskupiť okná tej istej aplikácie." -"Možné hodnoty sú „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)." - -# CheckButton -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:86 -msgid "Show windows from all workspaces" -msgstr "Zobraziť okná zo všetkých pracovných priestorov" - -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 -msgid "Whether to show windows from all workspaces or only the current one." -msgstr "" -"Určuje, či sa majú zobraziť okná zo všetkých pracovných priestorov, alebo " -"iba z aktuálneho." - -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 -msgid "Show the window list on all monitors" -msgstr "Zobraziť zoznam okien na všetkých monitoroch" - -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28 -msgid "" -"Whether to show the window list on all connected monitors or only on the " -"primary one." -msgstr "" -"Určuje, či sa má zobraziť zoznam okien na všetkých pripojených monitoroch, " -"alebo iba na hlavnom." - -#: extensions/window-list/prefs.js:39 -msgid "Window Grouping" -msgstr "Zoskupenie okien" - -#: extensions/window-list/prefs.js:63 -msgid "Never group windows" -msgstr "Nikdy nezoskupovať okná" - -#: extensions/window-list/prefs.js:64 -msgid "Group windows when space is limited" -msgstr "Zoskupovať okna ak je obmedzený priestor" - -#: extensions/window-list/prefs.js:65 -msgid "Always group windows" -msgstr "Vždy zoskupovať okná" - -#: extensions/window-list/prefs.js:81 -msgid "Show on all monitors" -msgstr "Zobraziť na všetkých monitoroch" - -# Label -#: extensions/window-list/workspaceIndicator.js:249 -#: extensions/workspace-indicator/extension.js:254 -msgid "Workspace Indicator" -msgstr "Indikátor pracovného priestoru" - -# Label -#: extensions/workspace-indicator/prefs.js:33 -msgid "Workspace Names" -msgstr "Názvy pracovných priestorov" - -# store label -#: extensions/workspace-indicator/prefs.js:66 +#. Translators: this is an attribution string giving credit to the +#. * tile provider where the %s placeholder is replaced by either +#. * the bare name of the tile provider, or a linkified URL if one +#. * is available +#. +#: src/mainWindow.js:686 #, javascript-format -msgid "Workspace %d" -msgstr "Pracovný priestor č. %d" +msgid "Map tiles provided by %s" +msgstr "Dlaždice mapy poskytnuté zo služby %s" -# TreeViewColumn; Label -#: extensions/workspace-indicator/prefs.js:207 -msgid "Add Workspace" -msgstr "Pridať pracovný priestor" +#: src/mainWindow.js:716 +msgid "Search Provider" +msgstr "Poskytovateľ vyhľadávania" -# TreeViewColumn -#~ msgid "Application" -#~ msgstr "Aplikácia" +#: src/mainWindow.js:719 +#, javascript-format +msgid "Search provided by %s using %s" +msgstr "Vyhľadávanie poskytnuté službou %s použitím %s" -# Dialog title -#~ msgid "Create new matching rule" -#~ msgstr "Vytvorenie nového odpovedajúceho pravidla" +#: src/mapView.js:645 src/mapView.js:710 +msgid "Failed to open layer" +msgstr "Zlyhalo otvorenie vrstvy" + +#: src/mapView.js:664 +msgid "Do you want to continue?" +msgstr "Chcete pokračovať?" + +#: src/mapView.js:665 +#, javascript-format +msgid "" +"You are about to open files with a total size of %s MB. This could take some " +"time to load" +msgstr "" +"Chystáte sa otvoriť súbory s celkovou veľkosťou %s MB. Načítanie môže trvať " +"dlhšiu dobu" + +#: src/mapView.js:672 src/transitplugins/openTripPlanner.js:1239 +#: src/transitplugins/openTripPlanner2.js:267 +msgid "Continue" +msgstr "Pokračujte" + +#: src/mapView.js:704 +msgid "File type is not supported" +msgstr "Typ súboru nie je podporovaný" + +#: src/mapView.js:741 +msgid "Failed to open GeoURI" +msgstr "Zlyhalo otvorenie GeoURI" + +#: src/mapView.js:1205 +msgid "Nothing found here!" +msgstr "Tu sa nič nenašlo!" + +#: src/mapView.js:1245 +#| msgid "Zoom in to add location!" +msgid "Zoom in to add location" +msgstr "Priblížením pridajte umiestnenie" + +#: src/mapView.js:1266 +#| msgid "Place not found in OpenStreetMap" +msgid "Location was added in OpenStreetMap" +msgstr "Miesto bolo pridané do projektu OpenStreetMap" + +#. switch back to the sign-in view, and show a toast indicating +#. that verification failed +#: src/osmAccountDialog.js:134 +msgid "The verification code didn’t match, please try again." +msgstr "Overovací kód sa nezhoduje. Prosím, skúste to znovu." + +#. setting the status in session.cancel_message still seems +#. to always give status IO_ERROR +#: src/osmConnection.js:335 +msgid "Incorrect user name or password" +msgstr "Nesprávne používateľské meno alebo heslo" + +#: src/osmConnection.js:337 +msgid "Success" +msgstr "Úspech" + +#: src/osmConnection.js:339 +msgid "Bad request" +msgstr "Nesprávna požiadavka" + +#: src/osmConnection.js:341 +msgid "Object not found" +msgstr "Objekt sa nenašiel" + +#: src/osmConnection.js:343 +msgid "Conflict, someone else has just modified the object" +msgstr "Nastal konflikt. Niekto iný práve upravil objekt" + +#: src/osmConnection.js:345 +msgid "Object has been deleted" +msgstr "Objekt bol odstránený" + +#: src/osmConnection.js:347 +msgid "Way or relation refers to non-existing children" +msgstr "Cesta alebo relácia odkazuje na neexistujúceho potomka" + +#: src/osmEditDialog.js:106 +msgid "Name" +msgstr "Názov" + +#: src/osmEditDialog.js:109 +msgid "The official name. This is typically what appears on signs." +msgstr "Oficiálny názov. Toto obvykle býva napísané na tabuliach." + +#: src/osmEditDialog.js:112 +msgid "Address" +msgstr "Adresa" + +#: src/osmEditDialog.js:120 src/placeView.js:275 +msgid "Website" +msgstr "Webová stránka" + +#: src/osmEditDialog.js:124 +msgid "This is not a valid URL. Make sure to include http:// or https://." +msgstr "" +"Toto nie je platná URL adresa. Uistite sa, že je zahrnutá predpona http:// alebo " +"https://." + +#: src/osmEditDialog.js:125 +msgid "" +"The official website. Try to use the most basic form of a URL i.e. http://" +"example.com instead of http://example.com/index.html." +msgstr "" +"Oficiálna webová stránka. Skúste použiť čo najjednoduchší tvar URL adresy napr. " +"http://priklad.sk namiesto http://priklad.sk/index.html." + +#: src/osmEditDialog.js:130 +msgid "Phone" +msgstr "Telefón" + +#: src/osmEditDialog.js:134 +msgid "" +"Phone number. Use the international format, starting with a + sign. Beware " +"of local privacy laws, especially for private phone numbers." +msgstr "" +"Telefónne číslo. Použite medzinárodný formát, začínajúci so znakom +. Dbajte " +"na miestne zákony o ochrane súkromia, obzvlášť pri súkromných telefónnych " +"číslach." + +#: src/osmEditDialog.js:139 src/placeView.js:308 +msgid "Email" +msgstr "E-mail" + +#: src/osmEditDialog.js:144 +#| msgid "" +#| "This is not a valid e-mail address. Make sure to not include the mailto: " +#| "protocol prefix." +msgid "" +"This is not a valid email address. Make sure to not include the mailto: " +"protocol prefix." +msgstr "" +"Toto nie je platná e-mailová adresa. Uistite sa, že nie je zahrnutá predpona " +"protokolu mailto:." + +#: src/osmEditDialog.js:145 +#| msgid "" +#| "Contact e-mail address for inquiries. Add only email addresses that are " +#| "intended to be publicly used." +msgid "" +"Contact email address for inquiries. Add only email addresses that are " +"intended to be publicly used." +msgstr "" +"Kontaktná e-mailová adresa pre otázky. Pridávajte iba také e-mailové adresy, " +"ktoré sú určené na verejné použitie." + +#. Translators: This is the text for the "Wikipedia" link at the end +#. of summaries +#: src/osmEditDialog.js:149 src/placeView.js:727 +msgid "Wikipedia" +msgstr "Wikipedia" + +#: src/osmEditDialog.js:156 src/placeView.js:399 +msgid "Opening hours" +msgstr "Otváracia doba" + +#: src/osmEditDialog.js:161 +msgid "See the link in the label for help on format." +msgstr "Pre pomoc k formátu si prezrite odkaz v menovke." + +#. TODO: this is a bit of a work-around to re-interpret the population, +#. * stored as a string into an integer to convert back to a locale- +#. * formatted string. Ideally it should be kept as an integer value +#. * in the Place class. But this will also need to be handled by the +#. * PlaceStore, possible in a backwards-compatible way +#. +#: src/osmEditDialog.js:164 src/placeView.js:509 +msgid "Population" +msgstr "Obyvateľstvo" + +#: src/osmEditDialog.js:169 src/placeView.js:538 +msgid "Altitude" +msgstr "Nadmorská výška" + +#: src/osmEditDialog.js:172 +#| msgid "Elevation (height above sea level) of a point in metres." +msgid "Elevation (height above sea level) of a point in meters." +msgstr "Nadmorská výška bodu v metroch." + +#: src/osmEditDialog.js:175 +msgid "Wheelchair access" +msgstr "Bezbariérový prístup" + +#: src/osmEditDialog.js:178 src/osmEditDialog.js:187 src/osmEditDialog.js:198 +#: src/osmEditDialog.js:233 +msgid "Yes" +msgstr "Áno" + +#: src/osmEditDialog.js:179 src/osmEditDialog.js:188 src/osmEditDialog.js:199 +#: src/osmEditDialog.js:234 +msgid "No" +msgstr "Nie" + +#: src/osmEditDialog.js:180 +msgid "Limited" +msgstr "Obmedzený" + +#: src/osmEditDialog.js:181 +msgid "Designated" +msgstr "Vyhradený" + +#: src/osmEditDialog.js:184 +msgid "Internet access" +msgstr "Prístup na internet" + +#: src/osmEditDialog.js:189 +msgid "Wi-Fi" +msgstr "Wi-Fi" + +#: src/osmEditDialog.js:190 +msgid "Wired" +msgstr "Drôtový" + +#: src/osmEditDialog.js:191 +msgid "Terminal" +msgstr "Terminál" + +#: src/osmEditDialog.js:192 +msgid "Service" +msgstr "Obsluha" + +#: src/osmEditDialog.js:195 +msgid "Takeout" +msgstr "Jedlo so sebou" + +#: src/osmEditDialog.js:200 +msgid "Only" +msgstr "Iba" + +#: src/osmEditDialog.js:203 +msgid "Religion" +msgstr "Náboženstvo" + +#: src/osmEditDialog.js:206 src/translations.js:286 +msgid "Animism" +msgstr "Animizmus" + +#: src/osmEditDialog.js:207 +msgid "Bahá’í" +msgstr "Baháizmus" + +#: src/osmEditDialog.js:208 src/translations.js:288 +msgid "Buddhism" +msgstr "Budhizmus" + +#: src/osmEditDialog.js:209 src/translations.js:289 +msgid "Caodaism" +msgstr "Kaodaizmus" + +#: src/osmEditDialog.js:210 src/translations.js:290 +msgid "Christianity" +msgstr "Kresťanstvo" + +#: src/osmEditDialog.js:211 src/translations.js:291 +msgid "Confucianism" +msgstr "Konfucianizmus" + +#: src/osmEditDialog.js:212 src/translations.js:292 +msgid "Hinduism" +msgstr "Hinduizmus" + +#: src/osmEditDialog.js:213 src/translations.js:293 +msgid "Jainism" +msgstr "Jainizmus" + +#: src/osmEditDialog.js:214 src/translations.js:294 +msgid "Judaism" +msgstr "Judaizmus" + +#: src/osmEditDialog.js:215 src/translations.js:295 +msgid "Islam" +msgstr "Islam" + +#: src/osmEditDialog.js:216 src/translations.js:296 +msgid "Multiple Religions" +msgstr "Viacero náboženstiev" + +#: src/osmEditDialog.js:217 src/translations.js:297 +msgid "Paganism" +msgstr "Paganizmus" + +#: src/osmEditDialog.js:218 src/translations.js:298 +msgid "Pastafarianism" +msgstr "Pastafarianizmus" + +#: src/osmEditDialog.js:219 src/translations.js:299 +msgid "Scientology" +msgstr "Scientológia" + +#: src/osmEditDialog.js:220 src/translations.js:300 +msgid "Shinto" +msgstr "Šintoizmus" + +#: src/osmEditDialog.js:221 src/translations.js:301 +msgid "Sikhism" +msgstr "Sikhizmus" + +#: src/osmEditDialog.js:222 src/translations.js:302 +msgid "Spiritualism" +msgstr "Spiritualizmus" + +#: src/osmEditDialog.js:223 src/translations.js:303 +msgid "Taoism" +msgstr "Taoizmus" + +#: src/osmEditDialog.js:224 src/translations.js:304 +msgid "Unitarian Universalism" +msgstr "Centralistický univerzalizmus" + +#: src/osmEditDialog.js:225 src/translations.js:305 +msgid "Voodoo" +msgstr "Vúdú" + +#: src/osmEditDialog.js:226 src/translations.js:306 +msgid "Yazidism" +msgstr "Yazidizmus" + +#: src/osmEditDialog.js:227 src/translations.js:307 +msgid "Zoroastrianism" +msgstr "Zoroastrianizmus" + +#: src/osmEditDialog.js:230 src/poiCategories.js:176 +msgid "Toilets" +msgstr "Toalety" + +#: src/osmEditDialog.js:237 +msgid "Note" +msgstr "Poznámka" + +#: src/osmEditDialog.js:240 +msgid "" +"Information used to inform other mappers about non-obvious information about " +"an element, the author’s intent when creating it, or hints for further " +"improvement." +msgstr "" +"Informácie slúžiace ostatným mapovačom na informovanie o neobvyklých " +"informáciách o prvku, zámeroch autora pri jeho vytváraní alebo tipoch na " +"neskoršie vylepšenia." + +# DK:https://bugzilla.gnome.org/show_bug.cgi?id=761995 +#: src/osmEditDialog.js:339 +msgctxt "dialog title" +msgid "Add to OpenStreetMap" +msgstr "Pridať do projektu OpenStreetMap" + +#: src/osmEditDialog.js:393 +msgid "Select Type" +msgstr "Výber typu" + +#: src/osmEditDialog.js:515 +msgid "Done" +msgstr "Hotovo" + +#: src/osmEditDialog.js:818 +msgid "" +"The format used should include the language code and the article title like " +"“en:Article title”." +msgstr "" +"Použitý formát by mal zahŕňať kód jazyka a názov článku ako „sk:Názov " +"článku“." + +#: src/osmEditDialog.js:824 +msgid "Use the reload button to load the Wikidata tag for the selected article" +msgstr "" +"Kliknutím na tlačidlo opätovného načítania, načítate značku údajov Wikidata " +"pre vybraný článok" + +#: src/osmEditDialog.js:832 +msgid "Couldn't find Wikidata tag for article" +msgstr "Nepodarilo sa nájsť značku údajov Wikidata pre tento článok" + +#: src/photonUtils.js:118 +msgid "Unnamed place" +msgstr "Nepomenované miesto" + +#: src/placeEntry.js:274 +msgid "Failed to parse Geo URI" +msgstr "Zlyhala analýza URI geografickej polohy" + +#: src/placeEntry.js:286 +msgid "Failed to parse Maps URI" +msgstr "Zlyhala analýza URI máp" + +#. 300 ft (300 * 12 * 0.0254 m) +#. +#. * Translators: This a format string for showing a distance to a place +#. * is lower than a "quite short" distance. +#. * The "less than" symbol can be substituded with an appropriate one, if +#. * needed (e.g. using the correct direction, or alternative symbol). +#. * The %s should be kept, and is substituted with a label representing the +#. * short distance. The \u2009 (thin space) could also be adjusted if needed +#: src/placeListRow.js:46 +#, javascript-format +msgctxt "short distance format string" +msgid "< %s" +msgstr "< %s" + +#: src/placeView.js:263 +msgid "Coordinates" +msgstr "Súradnice" + +#: src/placeView.js:267 +msgid "Accuracy" +msgstr "Presnosť" + +#. Translators: %s can be "Unknown", "Exact" or "%f km" (or ft/mi/m) +#: src/placeView.js:270 +#, javascript-format +msgid "Accuracy: %s" +msgstr "Presnosť: %s" + +#. since the phone numbers are typically always rendered +#. * left-to-right, insert an explicit LRM char to avoid issues +#. * with phone numbers in international format starting with a + +#. * which is considered a "weak" character to determine Unicode +#. * text direction +#. +#: src/placeView.js:289 +msgid "Phone number" +msgstr "Telefónne číslo" + +#. If a reference to a named floor (named or symbolic) exists +#. * refer to it directly. +#. +#. Translators: +#. * This is a reference to named building floor, using a label +#. * or a code, as "displayed in the elevator" +#. +#: src/placeView.js:323 src/placeView.js:362 +msgid "Floor" +msgstr "Poschodie" + +#: src/placeView.js:325 +#, javascript-format +msgid "Floor %s" +msgstr "%s. poschodie" + +#: src/placeView.js:337 +#| msgid "At sea level" +msgid "At ground level" +msgstr "Na úrovni terénu" + +#. Translators: +#. * This is a reference to a number of floors above +#. * ground level. +#. * The %s placeholder is the integer relative number of floors +#. +#: src/placeView.js:346 +#, javascript-format +msgid "%s floor above ground level" +msgid_plural "%s floors above ground level" +msgstr[0] "%s poschodie nad úrovňou terénu" +msgstr[1] "%s poschodia nad úrovňou terénu" +msgstr[2] "%s poschodí nad úrovňou terénu" + +#. Translators: +#. * This is a reference to a number of floors below +#. * ground level. +#. * The %s placeholder is the integer relative number of floors +#. +#: src/placeView.js:357 +#, javascript-format +#| msgid "%s below sea level" +msgid "%s floor below ground level" +msgid_plural "%s floors below ground level" +msgstr[0] "%s poschodie pod úrovňou terénu" +msgstr[1] "%s poschodia pod úrovňou terénu" +msgstr[2] "%s poschodí pod úrovňou terénu" + +#. Translators: +#. * The establishment offers customers to purchase meals +#. * (or similar) to be consumed elsewhere +#. +#: src/placeView.js:375 +#| msgid "Offers takeaway" +msgid "Offers takeout" +msgstr "Ponúka jedlo so sebou" + +#. Translators: +#. * The establishment only offers customers to purchase +#. * meals (or similar) to be consumed on-premise. +#. +#: src/placeView.js:383 +#| msgid "Does not offer takeaway" +msgid "Does not offer takeout" +msgstr "Neponúka jedlo so sebou" + +#. Translators: +#. * The establishment only offers customers to purchase +#. * meals (or similar) to be consumed elsewhere. E.g. +#. * there is no seating on-premise for eating/drinking +#. +#: src/placeView.js:392 +#| msgid "Only offers takeaway" +msgid "Only offers takeout" +msgstr "Ponúka iba jedlo so sebou" + +#. Translators: +#. * There is public internet access but the particular kind is unknown. +#. +#: src/placeView.js:409 +msgid "Public internet access" +msgstr "Verejný prístup na internet" + +#. Translators: +#. * no internet access is offered in a place where +#. * someone might expect it. +#. +#: src/placeView.js:418 +msgid "No internet access" +msgstr "Bez prístupu na internet" + +#. Translators: +#. * This means a WLAN Hotspot, also known as wireless, wifi or Wi-Fi. +#. +#: src/placeView.js:426 +msgid "Public Wi-Fi" +msgstr "Verejná Wi-Fi" + +#. Translators: +#. * This means a a place where you can plug in your laptop with ethernet. +#. +#: src/placeView.js:434 +msgid "Wired internet access" +msgstr "Drôtový prístup na internet" + +#. Translators: +#. * Like internet cafe or library where the computer is given. +#. +#: src/placeView.js:442 +msgid "Computers available for use" +msgstr "Dostupné počítače na použitie" + +#. Translators: +#. * This means there is personnel which helps you in case of problems. +#. +#: src/placeView.js:450 +msgid "Internet assistance available" +msgstr "Dostupná pomoc s internetom" + +#: src/placeView.js:456 +msgid "No toilets available" +msgstr "Nedostupné toalety" + +#: src/placeView.js:459 +msgid "Toilets available" +msgstr "Dostupné toalety" + +#. Translators: +#. * This means wheelchairs have full unrestricted access. +#. +#: src/placeView.js:468 +msgid "Wheelchair accessible" +msgstr "Bezbariérový prístup" + +#. Translators: +#. * This means wheelchairs have partial access (e.g some areas +#. * can be accessed and others not, areas requiring assistance +#. * by someone pushing up a steep gradient). +#. +#: src/placeView.js:478 +msgid "Limited wheelchair accessibility" +msgstr "Obmedzený bezbariérový prístup" + +#. Translators: +#. * This means wheelchairs have no unrestricted access +#. * (e.g. stair only access). +#. +#: src/placeView.js:487 +msgid "Not wheelchair accessible" +msgstr "Bez bezbariérového prístupu" + +#. Translators: +#. * This means that the way or area is designated or purpose built +#. * for wheelchairs (e.g. elevators designed for wheelchair access +#. * only). This is rarely used. +#. +#: src/placeView.js:497 +msgid "Designated for wheelchair users" +msgstr "Výslovne určené pre vozíčkarov" + +#. * +#. * Translators: this is a label indicating an altitude below +#. * sea level, where the %s placeholder is the altitude relative +#. * to mean sea level in the "negative direction" +#. +#: src/placeView.js:528 +#, javascript-format +msgid "%s below sea level" +msgstr "%s pod hladinou mora" + +#. * +#. * Translators: this indicates a place is located at (or very +#. * close to) mean sea level +#. +#: src/placeView.js:535 +msgid "At sea level" +msgstr "Na úrovni hladiny mora" + +#: src/placeView.js:544 +msgid "Religion:" +msgstr "Náboženstvo:" + +#: src/place.js:576 +msgid "Place not found in OpenStreetMap" +msgstr "Miesto sa nenašlo v projekte OpenStreetMap" + +#: src/place.js:583 +msgid "Coordinates in URL are not valid" +msgstr "Súradnice v URL adrese nie sú platné" + +#: src/place.js:592 +msgid "URL is not supported" +msgstr "URL adresa nie je podporovaná" + +#: src/poiCategories.js:132 +msgid "Amenities" +msgstr "Vybavenie" + +#: src/poiCategories.js:135 +msgid "ATMs" +msgstr "Bankomaty" + +#: src/poiCategories.js:141 +#| msgid "Postal code" +msgid "Post Boxes" +msgstr "Poštové schránky" + +#: src/poiCategories.js:147 +#| msgid "Postal code" +msgid "Post Offices" +msgstr "Pošty" + +#: src/poiCategories.js:153 +msgid "Police" +msgstr "Polícia" + +#: src/poiCategories.js:159 +#| msgid "Ferries" +msgid "Libraries" +msgstr "Knižnice" + +#: src/poiCategories.js:165 +msgid "Pharmacies" +msgstr "Lekárne" + +#: src/poiCategories.js:171 +msgid "Recycling" +msgstr "Recyklácia" + +#: src/poiCategories.js:182 +#| msgid "Wheelchair accessible" +msgid "Wheelchair-accessible Toilets" +msgstr "Bezbariérové toalety" + +#: src/poiCategories.js:188 +msgid "Baggage Lockers" +msgstr "Schránky na batožinu" + +#: src/poiCategories.js:196 +msgid "Eating & Drinking" +msgstr "Jedlo a pitie" + +#: src/poiCategories.js:200 +msgid "Restaurants" +msgstr "Reštaurácie" + +#: src/poiCategories.js:205 +msgid "Fast Food" +msgstr "Rýchle občerstvenie" + +#: src/poiCategories.js:210 +msgid "Food Courts" +msgstr "Jedálne" + +#: src/poiCategories.js:215 +msgid "Pubs" +msgstr "Pohostinstvá" + +#: src/poiCategories.js:221 +msgid "Bars" +msgstr "Bary" + +#: src/poiCategories.js:226 +msgid "Cafes" +msgstr "Kaviarne" + +#: src/poiCategories.js:231 +msgid "Ice Cream" +msgstr "Zmrzlina" + +#: src/poiCategories.js:236 +msgid "Food, Snacks, and Beverage Machines" +msgstr "Automaty na jedlo, občerstvenie a nápoje" + +#: src/poiCategories.js:244 +msgid "Shopping" +msgstr "Nakupovanie" + +#: src/poiCategories.js:248 +msgid "Supermarkets" +msgstr "Supermarkety" + +#: src/poiCategories.js:254 +msgid "Convenience Stores" +msgstr "Večierky" + +#: src/poiCategories.js:259 +msgid "Shopping Malls" +msgstr "Obchodné centrá" + +#: src/poiCategories.js:265 +msgid "Clothes" +msgstr "Odevy" + +#: src/poiCategories.js:271 +msgid "Shoes" +msgstr "Topánky" + +#: src/poiCategories.js:276 +msgid "Electronics" +msgstr "Elektronika" + +#: src/poiCategories.js:282 +msgid "Alcohol" +msgstr "Alkohol" + +#: src/poiCategories.js:288 +#| msgid "Ferries" +msgid "Bakeries" +msgstr "Pekárne" + +#: src/poiCategories.js:294 +#| msgid "Followers" +msgid "Flowers" +msgstr "Kvetiny" + +#: src/poiCategories.js:301 +msgid "Transportation" +msgstr "Doprava" + +#: src/poiCategories.js:305 +msgid "Bus & Tram Stops" +msgstr "Zastávky autobusov a električiek" + +#: src/poiCategories.js:313 +msgid "Train & Subway Stations" +msgstr "Vlakové stanice a stanice metra" + +#: src/poiCategories.js:321 +msgid "Tickets" +msgstr "Lístky" + +#: src/poiCategories.js:329 +msgid "Parking" +msgstr "Parkovanie" + +#: src/poiCategories.js:334 +msgid "Bicycle Parking" +msgstr "Parkovanie bicyklov" + +#: src/poiCategories.js:339 +msgid "Bicycle Rental" +msgstr "Požičovňa bicyklov" + +#: src/poiCategories.js:344 +msgid "Car Rental" +msgstr "Autopožičovne" + +#: src/poiCategories.js:349 +msgid "Fuel" +msgstr "Pohonné hmoty" + +#: src/poiCategories.js:354 +msgid "EV Charging" +msgstr "Nabíjanie elektromobilov" + +#: src/poiCategories.js:362 +msgid "Healthcare" +msgstr "Zdravotná starostlivosť" + +#: src/poiCategories.js:366 +msgid "Clinics" +msgstr "Kliniky" + +#: src/poiCategories.js:372 +msgid "Hospitals" +msgstr "Nemocnice" + +#: src/poiCategories.js:378 +msgid "Dentists" +msgstr "Zubári" + +#: src/poiCategories.js:386 +msgid "Accommodation" +msgstr "Ubytovanie" + +#: src/poiCategories.js:390 +msgid "Hotels" +msgstr "Hotely" + +#: src/poiCategories.js:395 +msgid "Hostels" +msgstr "Hostely" + +#: src/poiCategories.js:400 +msgid "Bed & Breakfast" +msgstr "Nocľah s raňajkami" + +#: src/poiCategories.js:405 +msgid "Campings" +msgstr "Kempy" + +# dialog title +#: src/poiCategories.js:412 +#| msgid "Open Location" +msgid "Recreation" +msgstr "Rekreácia" + +#: src/poiCategories.js:416 +msgid "Parks" +msgstr "Parky" + +#: src/poiCategories.js:421 +msgid "Playgrounds" +msgstr "Ihriská" + +#: src/poiCategories.js:425 +msgid "Beaches" +msgstr "Pláže" + +#: src/poiCategories.js:430 +msgid "Nature Reserves" +msgstr "Prírodné rezervácie" + +#: src/poiCategories.js:436 +msgid "Theme Parks" +msgstr "Zábavné parky" + +#: src/poiCategories.js:441 +msgid "Theaters" +msgstr "Divadlá" + +#: src/poiCategories.js:447 +msgid "Movie Theaters" +msgstr "Kiná" + +#: src/poiCategories.js:453 +msgid "Night Clubs" +msgstr "Nočné kluby" + +#: src/poiCategories.js:460 +msgid "Tourism" +msgstr "Turistika" + +#: src/poiCategories.js:464 +msgid "Museums" +msgstr "Múzeá" + +#: src/poiCategories.js:470 +#| msgid "Directions" +msgid "Attractions" +msgstr "Atrakcie" + +#: src/poiCategories.js:475 +msgid "Artworks" +msgstr "Umelecké diela" + +# tooltip +#: src/poiCategories.js:480 +#| msgid "Show more information" +msgid "Tourist Information" +msgstr "Informácie pre turistov" # button label -#~ msgid "Add" -#~ msgstr "Pridať" +#: src/poiCategories.js:487 +#| msgid "_Export" +msgid "Sports" +msgstr "Športy" -# TreeViewColumn -#~ msgid "Name" -#~ msgstr "Názov" +#: src/poiCategories.js:491 +msgid "Gyms" +msgstr "Posilňovne" + +#: src/poiCategories.js:497 +msgid "Outdoor Gyms" +msgstr "Vonkajšie posilňovne" + +#: src/poiCategories.js:503 +msgid "Golf Courses" +msgstr "Golfové ihriská" + +#: src/printLayout.js:350 +#, javascript-format +msgid "From %s to %s" +msgstr "Od %s po %s" + +#: src/printOperation.js:49 +msgid "Loading map tiles for printing" +msgstr "Načítavajú sa dlaždice mapy na vytlačenie" + +#: src/printOperation.js:50 +msgid "You can abort printing if this takes too long" +msgstr "Tlač môžete prerušiť, ak toto trvá príliš dlho" + +#: src/printOperation.js:52 +msgid "Abort printing" +msgstr "Prerušiť tlač" + +#. Translators: this is add via location tooltip +#: src/routeEntry.js:60 +msgid "Add via location" +msgstr "Pridá cez umiestnenie" + +#. Translators: this is remove via location tooltip +#: src/routeEntry.js:70 +msgid "Remove via location" +msgstr "Odstráni cez umiestnenie" + +#. Translators: this is reverse route tooltip +#: src/routeEntry.js:76 +msgid "Reverse route" +msgstr "Obráti trasu" + +#: src/searchBar.js:45 +#| msgctxt "shortcut window" +#| msgid "Search" +msgid "Search" +msgstr "Hľadať" + +#. Translators: The first string is the name of the city, the +#. second string is the name of the app to add it to +#: src/sendToDialog.js:84 +#, javascript-format +msgid "Add %s to %s" +msgstr "Pridať obec %s do aplikácie %s" + +#: src/sendToDialog.js:181 +msgid "Failed to open URI" +msgstr "Zlyhalo otvorenie URI" + +#: src/sendToDialog.js:246 +#, javascript-format +msgid "Open with %s" +msgstr "Otvoriť pomocou %s" + +#: src/shapeLayer.js:109 +msgid "failed to load file" +msgstr "zlyhalo načítanie súboru" + +#. Translators: %s is a time expression with the format "%f h" or "%f min" +#: src/sidebar.js:328 +#, javascript-format +msgid "Estimated time: %s" +msgstr "Odhadovaný čas: %s" + +#: src/sidebar.js:398 +#, javascript-format +msgid "Itineraries provided by %s" +msgstr "Itinerár poskytnutý zo služby %s" + +#. Translators: this is a format string indicating instructions +#. * starting a journey at the address given as the parameter +#. +#: src/transit.js:39 +#, javascript-format +msgid "Start at %s" +msgstr "Začiatok z adresy %s" + +#. Translators: this indicates starting a journey at a location +#. * with no set name (such as when the user started routing from +#. * an arbitrary point on the map) +#. +#: src/transit.js:45 src/transitplugins/openTripPlanner2.js:236 +msgid "Start" +msgstr "Začiatok" + +#. Translators: this is a format string indicating walking a certain +#. * distance, with the distance expression being the %s placeholder +#. +#: src/transit.js:63 +#, javascript-format +msgid "Walk %s" +msgstr "Chôdza %s" + +#. Translators: this a format string indicating arriving at the +#. * destination of journey with the arrival address and transit +#. * stop as the format parameter +#: src/transit.js:77 +#, javascript-format +msgid "Arrive at %s" +msgstr "Príchod na adresu %s" + +#: src/transit.js:79 src/transitplugins/openTripPlanner.js:1176 +#: src/transitplugins/openTripPlanner2.js:255 +msgid "Arrive" +msgstr "Príchod" + +# tooltip +#: src/transitLegRow.js:69 +msgid "Show walking instructions" +msgstr "Zobrazí pokyny pre chôdzu" + +# tooltip +#: src/transitLegRow.js:70 +msgid "Hide walking instructions" +msgstr "Skryje pokyny pre chôdzu" + +#: src/transitMoreRow.js:37 +msgid "Load earlier alternatives" +msgstr "Načítať skoršie alternatívy" + +#: src/transitMoreRow.js:39 +msgid "Load later alternatives" +msgstr "Načítať neskoršie alternatívy" + +#: src/transitMoreRow.js:52 +msgid "No earlier alternatives found." +msgstr "Nenašli sa žiadne skoršie alternatívy." + +#: src/transitMoreRow.js:54 +msgid "No later alternatives found." +msgstr "Nenašli sa žiadne neskoršie alternatívy." + +#. +#. * Translators: this is a format string giving the equivalent to +#. * "may 29" according to the current locale's convensions. +#. +#: src/transitOptionsPanel.js:138 +msgctxt "month-day-date" +msgid "%b %e" +msgstr "%e. %b" + +#: src/transitPlan.js:171 +msgid "No timetable data found for this route." +msgstr "Pre túto trasu sa nenašli žiadne údaje cestovného poriadku." + +#: src/transitPlan.js:179 +msgid "No provider found for this route." +msgstr "Pre túto trasu sa nenašiel žiadny poskytovateľ." + +#. Translators: this is a format string for showing a departure and +#. * arrival time, like: +#. * "12:00 – 13:03" where the placeholder %s are the actual times, +#. * these could be rearranged if needed. +#. +#: src/transitPlan.js:300 +#, javascript-format +msgid "%s – %s" +msgstr "%s – %s" + +#. translators: this is an indication for a trip duration of +#. * less than an hour, with only the minutes part, using plural forms +#. * as appropriate +#. +#: src/transitPlan.js:331 +#, javascript-format +msgid "%s minute" +msgid_plural "%s minutes" +msgstr[0] "%s minút" +msgstr[1] "%s minúta" +msgstr[2] "%s minúty" + +#. translators: this is an indication for a trip duration, +#. * where the duration is an exact number of hours (i.e. no +#. * minutes part), using plural forms as appropriate +#. +#: src/transitPlan.js:343 +#, javascript-format +msgid "%s hour" +msgid_plural "%s hours" +msgstr[0] "%s hodín" +msgstr[1] "%s hodina" +msgstr[2] "%s hodiny" + +#. translators: this is an indication for a trip duration +#. * where the duration contains an hour and minute part, it's +#. * pluralized on the hours part +#. +#: src/transitPlan.js:351 +#, javascript-format +msgid "%s:%s hour" +msgid_plural "%s:%s hours" +msgstr[0] "%s:%s hodín" +msgstr[1] "%s:%s hodina" +msgstr[2] "%s:%s hodiny" + +#. Translators: this is a format string for showing a departure and +#. * arrival time in a more compact manner to show in the instruction +#. * list for an itinerary, like: +#. * "12:00–13:03" where the placeholder %s are the actual times, +#. * these could be rearranged if needed. +#. +#: src/transitPlan.js:744 +#, javascript-format +msgid "%s–%s" +msgstr "%s–%s" + +#: src/translations.js:55 +msgid "Around the clock" +msgstr "Nonstop" + +#: src/translations.js:57 +msgid "From sunrise to sunset" +msgstr "Od východu slnka po západ slnka" + +#. Translators: +#. * This represents a format string consisting of two day interval +#. * specifications. +#. * For example: +#. * Mo-Fr,Sa +#. * where the "Mo-Fr" and "Sa" parts are replaced by the %s +#. * place holder. +#. * The separator (,) could be replaced with a translated variant or +#. * a phrase if appropriate. +#: src/translations.js:123 +#, javascript-format +msgctxt "day interval list" +msgid "%s,%s" +msgstr "%s,%s" + +#. Translators: +#. * This represents a format string consisting of three day interval +#. * specifications. +#. * For example: +#. * Mo-We,Fr,Su +#. * where the "Mo-We", "Fr", and "Su" parts are replaced by the +#. * %s place holder. +#. * The separator (,) could be replaced with a translated variant or +#. * a phrase if appropriate. +#: src/translations.js:137 +#, javascript-format +msgctxt "day interval list" +msgid "%s,%s,%s" +msgstr "%s,%s,%s" + +#: src/translations.js:156 +msgid "Every day" +msgstr "Každý deň" + +#. Translators: +#. * This represents a range of days with a starting and ending day. +#. +#: src/translations.js:168 +#, javascript-format +msgctxt "day range" +msgid "%s-%s" +msgstr "%s-%s" + +#: src/translations.js:179 +msgid "Public holidays" +msgstr "Štátne sviatky" + +#: src/translations.js:181 +msgid "School holidays" +msgstr "Školské prázdniny" + +#. Translators: +#. * This is a list with two time intervals, such as: +#. * 09:00-12:00, 13:00-14:00 +#. * The intervals are represented by the %s place holders and +#. * appropriate white space or connected phrase could be modified by +#. * the translation. The order of the arguments can be rearranged +#. * using the %n$s syntax. +#. +#: src/translations.js:221 +#, javascript-format +msgctxt "time interval list" +msgid "%s, %s" +msgstr "%s, %s" + +#: src/translations.js:235 +msgid "not open" +msgstr "zatvorené" + +#. Translators: +#. * This is a time interval with a starting and an ending time. +#. * The time values are represented by the %s place holders and +#. * appropriate white spacing or connecting phrases can be set by the +#. * translation as needed. The order of the arguments can be rearranged +#. * using the %n$s syntax. +#. +#: src/translations.js:250 +#, javascript-format +msgctxt "time interval" +msgid "%s-%s" +msgstr "%s-%s" + +#: src/translations.js:287 +msgid "Bahá'í" +msgstr "Baháizmus" + +#. Translators: Accuracy of user location information +#: src/utils.js:248 +msgid "Unknown" +msgstr "Neznáma" + +#. Translators: Accuracy of user location information +#: src/utils.js:251 +msgid "Exact" +msgstr "Presná" + +#. Translators: this is a duration with only hours, using +#. * an abbreviation for hours, corresponding to 'h' in English +#. +#: src/utils.js:307 +#, javascript-format +msgid "%s h" +msgstr "%s h" + +#. Translators: this is a duration with hours and minutes parts +#. * using abbreviations for hours and minutes, corresponding to 'h' +#. * and 'min' in English. The minutes has appropriate plural variations +#. +#: src/utils.js:313 +#, javascript-format +msgid "%s h %s min" +msgid_plural "%s h %s min" +msgstr[0] "%s h %s min" +msgstr[1] "%s h %s min" +msgstr[2] "%s h %s min" + +#. Translators: this is a duration with minutes part +#. * using abbreviation for minutes, corresponding to 'min' in English +#. * with appropriate plural variations +#. +#: src/utils.js:320 +#, javascript-format +msgid "%s min" +msgid_plural "%s min" +msgstr[0] "%s minút" +msgstr[1] "%s minúta" +msgstr[2] "%s minúty" + +#. Translators: this is a duration of less than one minute +#. * with seconds using an abbreviation for seconds, corresponding to +#. * 's' in English with appropriate plural forms +#. +#: src/utils.js:326 +#, javascript-format +msgid "%s s" +msgid_plural "%s s" +msgstr[0] "%s s" +msgstr[1] "%s s" +msgstr[2] "%s s" + +#. Translators: This is a distance measured in kilometers +#: src/utils.js:337 +#, javascript-format +msgid "%s km" +msgstr "%s km" + +#. Translators: This is a distance measured in meters +#: src/utils.js:340 +#, javascript-format +msgid "%s m" +msgstr "%s m" + +#. Translators: This is a distance measured in miles +#: src/utils.js:348 +#, javascript-format +msgid "%s mi" +msgstr "%s mi" + +#. Translators: This is a distance measured in feet +#: src/utils.js:351 +#, javascript-format +msgid "%s ft" +msgstr "%s ft" + +#: src/transitplugins/goMetro.js:61 +msgid "This plugin doesn't support latest arrival" +msgstr "Tento zásuvný modul nepodporuje posledný príchod" + +#: src/transitplugins/openTripPlanner.js:1237 +#: src/transitplugins/openTripPlanner2.js:266 +#, javascript-format +msgid "Continue on %s" +msgstr "Pokračujte na %s" + +#: src/transitplugins/openTripPlanner.js:1242 +#: src/transitplugins/openTripPlanner2.js:270 +#, javascript-format +msgid "Turn left on %s" +msgstr "Odbočte doľava na %s" + +#: src/transitplugins/openTripPlanner.js:1244 +#: src/transitplugins/openTripPlanner2.js:271 +msgid "Turn left" +msgstr "Odbočte doľava" + +#: src/transitplugins/openTripPlanner.js:1247 +#: src/transitplugins/openTripPlanner2.js:275 +#, javascript-format +msgid "Turn slightly left on %s" +msgstr "Odbočte mierne doľava na %s" + +#: src/transitplugins/openTripPlanner.js:1249 +#: src/transitplugins/openTripPlanner2.js:276 +msgid "Turn slightly left" +msgstr "Odbočte mierne doľava" + +#: src/transitplugins/openTripPlanner.js:1252 +#: src/transitplugins/openTripPlanner2.js:280 +#, javascript-format +msgid "Turn sharp left on %s" +msgstr "Odbočte ostro doľava na %s" + +#: src/transitplugins/openTripPlanner.js:1254 +#: src/transitplugins/openTripPlanner2.js:281 +msgid "Turn sharp left" +msgstr "Odbočte ostro doľava" + +#: src/transitplugins/openTripPlanner.js:1257 +#: src/transitplugins/openTripPlanner2.js:284 +#, javascript-format +msgid "Turn right on %s" +msgstr "Odbočte doprava na %s" + +#: src/transitplugins/openTripPlanner.js:1259 +#: src/transitplugins/openTripPlanner2.js:285 +msgid "Turn right" +msgstr "Odbočte doprava" + +#: src/transitplugins/openTripPlanner.js:1262 +#: src/transitplugins/openTripPlanner2.js:289 +#, javascript-format +msgid "Turn slightly right on %s" +msgstr "Odbočte mierne doprava na %s" + +#: src/transitplugins/openTripPlanner.js:1264 +#: src/transitplugins/openTripPlanner2.js:290 +msgid "Turn slightly right" +msgstr "Odbočte mierne doprava" + +#: src/transitplugins/openTripPlanner.js:1267 +#: src/transitplugins/openTripPlanner2.js:294 +#, javascript-format +msgid "Turn sharp right on %s" +msgstr "Odbočte ostro doprava na %s" + +#: src/transitplugins/openTripPlanner.js:1269 +#: src/transitplugins/openTripPlanner2.js:295 +msgid "Turn sharp right" +msgstr "Odbočte ostro doprava" + +#: src/transitplugins/openTripPlanner.js:1275 +#: src/transitplugins/openTripPlanner2.js:302 +#, javascript-format +msgid "At the roundabout, take exit %s" +msgstr "Na kruhovom objazde, použite %s. výjazd" + +#: src/transitplugins/openTripPlanner.js:1277 +#: src/transitplugins/openTripPlanner2.js:305 +#, javascript-format +msgid "At the roundabout, take exit to %s" +msgstr "Na kruhovom objazde, použite výjazd na %s" + +#: src/transitplugins/openTripPlanner.js:1279 +#: src/transitplugins/openTripPlanner2.js:307 +msgid "Take the roundabout" +msgstr "Vojdite do kruhového objazdu" + +#: src/transitplugins/openTripPlanner.js:1283 +#: src/transitplugins/openTripPlanner2.js:315 +#, javascript-format +msgid "Take the elevator and get off at %s" +msgstr "Použite výťah a vstúpte na %s" + +#: src/transitplugins/openTripPlanner.js:1285 +#: src/transitplugins/openTripPlanner2.js:316 +msgid "Take the elevator" +msgstr "Použite výťah" + +#: src/transitplugins/openTripPlanner.js:1289 +#: src/transitplugins/openTripPlanner2.js:320 +#, javascript-format +msgid "Make a left u-turn onto %s" +msgstr "Otočte sa doľava na %s" + +#: src/transitplugins/openTripPlanner.js:1291 +#: src/transitplugins/openTripPlanner2.js:321 +msgid "Make a left u-turn" +msgstr "Otočte sa doľava" + +#: src/transitplugins/openTripPlanner.js:1294 +#: src/transitplugins/openTripPlanner2.js:325 +#, javascript-format +msgid "Make a right u-turn onto %s" +msgstr "Otočte sa doprava na %s" + +#: src/transitplugins/openTripPlanner.js:1296 +#: src/transitplugins/openTripPlanner2.js:326 +msgid "Make a right u-turn" +msgstr "Otočte sa doprava" + +#~ msgid "Sign in to edit maps" +#~ msgstr "" +#~ "Prihláste sa na úpravu máp" + +#~ msgid "" +#~ "Sign in to authorize access in a web browser.\n" +#~ "Then fill in the obtained verification code here in the next step." +#~ msgstr "" +#~ "Prihlásením overíte prístup vo webovom prehliadači.\n" +#~ "Potom sem v ďalšom kroku vyplňte získaný overovací kód." + +# button label +#~ msgid "Sign up" +#~ msgstr "Zaregistrovať sa" + +#~ msgid "Signed In" +#~ msgstr "Prihlásený" + +#~ msgid "Filesystem is read only" +#~ msgstr "Systém súborov je iba na čítanie" + +#~ msgid "You do not have permission to save there" +#~ msgstr "Do tohto umiestnenia nemáte oprávnenia na zápis" + +#~ msgid "The directory does not exist" +#~ msgstr "Adresár neexistuje" + +#~ msgid "No filename specified" +#~ msgstr "Nie je určený názov súboru" + +#~ msgid "" +#~ "Location was added to the map, note that it may take a while before it " +#~ "shows on the map and in search results." +#~ msgstr "" +#~ "Umiestnenie bolo pridané do mapy. Berte na vedomie, že jeho zobrazenie na " +#~ "mape a vo výsledkoch vyhľadávania môže trvať nejakú dobu." + +#~ msgid "E-mail" +#~ msgstr "E-mail" + +#~ msgid "Takeaway" +#~ msgstr "Jedlo so sebou" + +# DK:tooltip +#~ msgid "Go to current location" +#~ msgstr "Prejde na aktuálne umiestnenie" + +# DK:tooltip +#~ msgid "Choose map type" +#~ msgstr "Vyberie typ mapy" + +#~ msgid "Zoom in" +#~ msgstr "Priblíži" + +#~ msgid "Drag to change order of the route" +#~ msgstr "Potiahnutím zmeníte poradie trasy" + +#~ msgid "Foursquare check-in privacy setting" +#~ msgstr "Nastavenie súkromia pre oznámenie polohy v službe Foursquare" + +#~ msgid "" +#~ "Latest used Foursquare check-in privacy setting. Possible values are: " +#~ "public, followers or private." +#~ msgstr "" +#~ "Naposledy použité nastavenie súkromia pre oznámenie polohy v službe " +#~ "Foursquare. Možné hodnoty sú: public(verejné), followers(nasledovatelia) " +#~ "alebo private(súkromné)." + +#~ msgid "Foursquare check-in Facebook broadcasting" +#~ msgstr "Vysielanie oznámenia polohy zo služby Foursquare v sieti Facebook" + +#~ msgid "" +#~ "Indicates if Foursquare should broadcast the check-in as a post in the " +#~ "Facebook account associated with the Foursquare account." +#~ msgstr "" +#~ "Indikuje, či sa má vysielať oznámenie polohy zo služby Foursquare ako " +#~ "príspevok v účte siete Facebook priradenom k účtu Foursquare." + +#~ msgid "Foursquare check-in Twitter broadcasting" +#~ msgstr "Vysielanie oznámenia polohy zo služby Foursquare v sieti Twitter" + +#~ msgid "" +#~ "Indicates if Foursquare should broadcast the check-in as a tweet in the " +#~ "Twitter account associated with the Foursquare account." +#~ msgstr "" +#~ "Indikuje, či sa má vysielať oznámenie polohy zo služby Foursquare ako " +#~ "príspevok v účte siete Twitter priradenom k účtu Foursquare." + +#~ msgid "Use hybrid aerial tiles" +#~ msgstr "Použiť hybridné dlaždice leteckého pohľadu" + +#~ msgid "Whether aerial tiles should use hybrid style (with labels)." +#~ msgstr "" +#~ "Či majú použiť dlaždice s leteckým pohľadom hybridný štýl (s menovkami)" + +#~ msgid "Visibility" +#~ msgstr "Viditeľnosť" + +#~ msgid "Post on Facebook" +#~ msgstr "Uverejniť na Facebook" + +#~ msgid "Post on Twitter" +#~ msgstr "Uverejniť na Twitter" + +#~ msgid "C_heck in" +#~ msgstr "Oznámiť _polohu" + +#~ msgid "Public" +#~ msgstr "Verejné" + +#~ msgid "Private" +#~ msgstr "Súkromné" + +#~ msgid "Include route and markers" +#~ msgstr "Zahrnúť trasy a značky" + +#~ msgid "Show Labels" +#~ msgstr "Zobraziť menovky" + +#~ msgid "Maps is offline!" +#~ msgstr "Aplikácia Mapy je bez pripojenia!" + +#~ msgid "" +#~ "Maps need an active internet connection to function properly, but one " +#~ "can’t be found." +#~ msgstr "" +#~ "Aby mohla aplikácia Mapy pracovať správne, vyžaduje sa aktívne " +#~ "internetové pripojenie, ale žiadne nie je dostupné." + +#~ msgid "Check your connection and proxy settings." +#~ msgstr "Skontrolujte vaše nastavenia pripojenia a sprostredkovateľa proxy." + +#~ msgid "Password" +#~ msgstr "Heslo" + +#~ msgid "" +#~ "Sorry, that didn’t work. Please try again, or visit\n" +#~ "OpenStreetMap to reset your password." +#~ msgstr "" +#~ "Prepáčte, ale toto nefungovalo. Prosím, skúste to znovu, alebo navštívte " +#~ "webovú adresu\n" +#~ "OpenStreetMap na obnovenie vášho hesla." + +#~ msgid "Check In…" +#~ msgstr "Oznámiť polohu…" + +#~ msgid "Ignore network availability" +#~ msgstr "Ignoruje dostupnosť siete" + +#~ msgid "Select an account" +#~ msgstr "Výber účtu" + +#~ msgid "Loading" +#~ msgstr "Načítavanie" + +#~ msgid "Select a place" +#~ msgstr "Výber miesta" + +#~ msgid "" +#~ "Maps cannot find the place to check in to with Foursquare. Please select " +#~ "one from this list." +#~ msgstr "" +#~ "Aplikácia Mapy nemôže nájsť miesto na oznámenie v službe Foursquare. " +#~ "Prosím, vyberte nejaké zo zoznamu." + +#, javascript-format +#~ msgid "Check in to %s" +#~ msgstr "Oznámiť polohu %s" + +#, javascript-format +#~ msgid "Write an optional message to check in to %s." +#~ msgstr "Napíšte voliteľnú správu k oznámeniu polohy %s." + +#, javascript-format +#~ msgid "Cannot find “%s” in the social service" +#~ msgstr "Nedá sa nájsť miesto „%s“ v sociálnej službe" + +#~ msgid "Cannot find a suitable place to check-in in this location" +#~ msgstr "V tejto lokalite sa nedá nájsť vhodné miesto na oznámenie" + +#~ msgid "" +#~ "Credentials have expired, please open Online Accounts to sign in and " +#~ "enable this account" +#~ msgstr "" +#~ "Platnosť poverení vypršala. Prosím, otvorte Účty služieb na prihlásenie a " +#~ "povolenie tohto účtu" + +#~ msgid "A map application for GNOME" +#~ msgstr "Aplikácia na prezeranie máp pre GNOME" + +#~ msgid "GNOME Maps" +#~ msgstr "Mapy prostredia GNOME" + +#~ msgid "Night mode" +#~ msgstr "Nočný režim" + +#~ msgid "Whether the application is in night mode." +#~ msgstr "Či je aplikácia v nočnom režime." + +#~ msgid "Night Mode" +#~ msgstr "Nočný režim" + +#~ msgid "" +#~ "You can even search for specific types of locations, such as “Pubs near " +#~ "Main Street, Boston” or “Hotels near Alexanderplatz, Berlin”." +#~ msgstr "" +#~ "Môžete vyhľadať špecifické typy umiestnení, napríklad „Hostince neďaleko " +#~ "Hlavnej ulice, Boston“ alebo „Ubytovňa neďaleko Alexanderplatzu, Berlin“." + +#~ msgid "Facebook check-in privacy setting" +#~ msgstr "Nastavenie súkromia pre oznámenie polohy v sieti Facebook" + +#~ msgid "" +#~ "Latest used Facebook check-in privacy setting. Possible values are: " +#~ "EVERYONE, FRIENDS_OF_FRIENDS, ALL_FRIENDS or SELF." +#~ msgstr "" +#~ "Naposledy použité nastavenie súkromia pre oznámenie polohy v sieti " +#~ "Facebook. Možné hodnoty sú: EVERYONE(ktokoľvek), " +#~ "FRIENDS_OF_FRIENDS(priatelia mojich priateľov), ALL_FRIENDS(iba moji " +#~ "priatelia) or SELF(iba ja)." + +#~ msgid "Everyone" +#~ msgstr "Ktokoľvek" + +#~ msgid "Friends of friends" +#~ msgstr "Priatelia mojich priateľov" + +#~ msgid "Just friends" +#~ msgstr "Iba moji priatelia" + +#~ msgid "Just me" +#~ msgstr "Iba ja" + +#~ msgid "" +#~ "Maps cannot find the place to check in to with Facebook. Please select " +#~ "one from this list." +#~ msgstr "" +#~ "Aplikácia Mapy nemôže nájsť miesto na oznámenie v sieti Facebook. Prosím, " +#~ "vyberte nejaké zo zoznamu." + +# tooltip +#~ msgid "Check in here" +#~ msgstr "Oznámi túto polohu" + +#~ msgid "Population:" +#~ msgstr "Obyvateľstvo:" + +#~ msgid "Altitude:" +#~ msgstr "Nadmorská výška:" + +#~ msgid "Opening hours:" +#~ msgstr "Otváracia doba:" + +#~ msgid "Internet access:" +#~ msgstr "Prístup na internet:" + +#~ msgid "Toilets:" +#~ msgstr "Toalety:" + +#~ msgid "Wheelchair access:" +#~ msgstr "Bezbariérový prístup:" + +#~ msgid "Phone:" +#~ msgstr "Telefón:" + +#~ msgid "yes" +#~ msgstr "áno" + +#~ msgid "limited" +#~ msgstr "obmedzený" + +#~ msgid "no" +#~ msgstr "nie" + +#~ msgid "designated" +#~ msgstr "vyhradený" + +#~ msgid "OpenStreetMap URL is not valid" +#~ msgstr "URL projektu OpenStreetMap nie je platná" + +#~ msgctxt "time range list" +#~ msgid "%s %s" +#~ msgstr "%s %s" + +#~ msgctxt "time range list" +#~ msgid "%s %s %s" +#~ msgstr "%s %s %s" + +#~ msgctxt "time range component" +#~ msgid "%s %s" +#~ msgstr "%s %s" + +#~ msgid "wired" +#~ msgstr "drôtový" + +#~ msgid "terminal" +#~ msgstr "terminál" + +#~ msgid "service" +#~ msgstr "obsluha" + +# tooltip +#~ msgid "Find a Route" +#~ msgstr "Nájsť trasu" + +#~ msgid "Don’t have an account?" +#~ msgstr "Nemáte účet?" + +#~ msgid "Add destination" +#~ msgstr "Pridať cieľ" + +#~ msgid "%f h" +#~ msgstr "%f h" + +#~ msgid "%f min" +#~ msgstr "%f min" + +#~ msgid "%f s" +#~ msgstr "%f s" + +#~ msgid "Route search by OpenTripPlanner" +#~ msgstr "Trasa poskytovaná službou OpenTripPlanner" + +#~ msgid "org.gnome.Maps" +#~ msgstr "org.gnome.Maps" + +#~ msgid "Quit" +#~ msgstr "Ukončiť" + +# tooltip +#~ msgid "Open with another application" +#~ msgstr "Otvorí pomocou inej aplikácie" + +#~ msgid "Press enter to search" +#~ msgstr "Stlačte enter na vyhľadanie" + +#~| msgctxt "shortcut window" +#~| msgid "Open shape layer" +#~ msgid "Open Shape Layer…" +#~ msgstr "Otvoriť vrstvu s tvarmi…" + +#~ msgid "OK" +#~ msgstr "OK" + +#~ msgid "Load Map Layer" +#~ msgstr "Načítať mapovú vrstvu" + +#~ msgid "%f km" +#~ msgstr "%f km" + +#~ msgid "%f m" +#~ msgstr "%f m" + +#~ msgid "%f mi" +#~ msgstr "%f mi" + +#~ msgid "%f ft" +#~ msgstr "%f ft" + +#~ msgid "Position not found" +#~ msgstr "Pozícia sa nenašla" + +#~ msgid "Wlan" +#~ msgstr "WiFi" + +#~ msgid "wlan" +#~ msgstr "wifi" + +#~ msgid "Country code: %s" +#~ msgstr "Kód krajiny: %s" + +#~ msgid "Population: %s" +#~ msgstr "Obyvateľstvo: %s" + +#~ msgid "Wheelchair access: %s" +#~ msgstr "Bezbariérový prístup: %s" + +#~ msgid "Failed to parse GeoJSON file" +#~ msgstr "Zlyhala analýza súboru GeoJSON" + +#~ msgid "Copy Geo URI" +#~ msgstr "Skopírovať URI geografickej polohy" + +#~ msgid "_Share" +#~ msgstr "_Sprístupniť" # summary -#~ msgid "Attach modal dialog to the parent window" -#~ msgstr "Pripojiť modálne dialógové okno k rodičovskému oknu" +#~ msgid "Last known location and accuracy" +#~ msgstr "Posledná známa poloha a presnosť" # description #~ msgid "" -#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell." +#~ "Last known location (latitude and longitude in degrees) and accuracy (in " +#~ "meters)." #~ msgstr "" -#~ "Tento kľúč preváži kľúč v org.gnome.mutter, keď je spustené prostredie " -#~ "GNOME Shell." - -#~ msgid "Arrangement of buttons on the titlebar" -#~ msgstr "Usporiadanie tlačidiel v záhlaví okna" +#~ "Posledné známa poloha (zemepisná šírka a zemepisná dĺžka v stupňoch) a " +#~ "presnosť (v metroch)." # description -#~ msgid "" -#~ "This key overrides the key in org.gnome.desktop.wm.preferences when " -#~ "running GNOME Shell." -#~ msgstr "" -#~ "Tento kľúč preváži kľúč v org.gnome.desktop.wm.preferences, keď je " -#~ "spustené prostredie GNOME Shell." +#~ msgid "Description of last known location of user." +#~ msgstr "Popis poslednej známej polohy používateľa." # summary -#~ msgid "Enable edge tiling when dropping windows on screen edges" -#~ msgstr "" -#~ "Povoliť usporiadanie okien do dlaždíc pri ich pustení na okrajoch " -#~ "obrazovky" +#~ msgid "User set last known location" +#~ msgstr "Používateľ nastavil poslednú známu polohu" -# Label -#~ msgid "Workspaces only on primary monitor" -#~ msgstr "Pracovné priestory iba na hlavnom monitore" +# description +#~ msgid "Whether the last known location was set manually by the user." +#~ msgstr "Určuje, či bola posledná známa poloha ručne nastavená používateľom." -# summary -#~ msgid "Delay focus changes in mouse mode until the pointer stops moving" -#~ msgstr "" -#~ "Oneskoriť pohyb zamerania v režime myši, až kým sa ukazovateľ nezastaví" +#~ msgid "I’m here!" +#~ msgstr "Tu sa nachádzam!" -# RadioButton label -#~ msgid "Thumbnail only" -#~ msgstr "Len miniatúra" +#~| msgid " km²" +#~ msgid "%f km²" +#~ msgstr "%f km²" -# RadioButton label -#~ msgid "Application icon only" -#~ msgstr "Len ikona aplikácie" - -# RadioButton label -#~ msgid "Thumbnail and application icon" -#~ msgstr "Miniatúra a ikona aplikácie" - -#  Label -#~ msgid "Present windows as" -#~ msgstr "Uvádzať okná ako" - -#~ msgid "Activities Overview" -#~ msgstr "Prehľad aktivít" - -# PŠ: a toto by som teda neprekladal, tento text musia poznať všetci ;-) -# PK: ja by som to prelozil ;) -# DK: ja by som ho prelozil tiez -#~ msgid "Hello, world!" -#~ msgstr "Ahoj, Svet!" - -# gsetting summary -#~ msgid "Alternative greeting text." -#~ msgstr "Alternatívny text privítania." - -# gsetting desription -#~ msgid "" -#~ "If not empty, it contains the text that will be shown when clicking on " -#~ "the panel." -#~ msgstr "Obsahuje text, ktorý bude zobrazený po kliknutí na panel." - -#~ msgid "Message" -#~ msgstr "Správa" - -# PM: podľa mňa chýba preklad druhej časti prvej vety -#~ msgid "" -#~ "Example aims to show how to build well behaved extensions for the Shell " -#~ "and as such it has little functionality on its own.\n" -#~ "Nevertheless it’s possible to customize the greeting message." -#~ msgstr "" -#~ "Rozšírenie Example vám má ukázať, ako sa dajú zostaviť dobre vyzerajúce a " -#~ "jednoduché rozšírenia pre Shell a demonštrovať tak funkčnosť.\n" -#~ "Napriek tomu je možné prispôsobiť správu privítania." - -# Label -#~ msgid "CPU" -#~ msgstr "Procesor" - -# Label -#~ msgid "Memory" -#~ msgstr "Pamäť" - -#~ msgid "GNOME Shell Classic" -#~ msgstr "Klasický shell prostredia GNOME" - -# RadioButton label -#~ msgid "Window management and application launching" -#~ msgstr "Správca okien a spúšťanie aplikácií" +#~ msgid " km2" +#~ msgstr " km2" From 2fe844f41264e707a2187c0174d6d8091c31239c Mon Sep 17 00:00:00 2001 From: Scrambled 777 Date: Sun, 12 May 2024 13:44:51 +0000 Subject: [PATCH 37/57] Update Hindi translation --- po/hi.po | 483 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 285 insertions(+), 198 deletions(-) diff --git a/po/hi.po b/po/hi.po index 855f1bf6..eef7c576 100644 --- a/po/hi.po +++ b/po/hi.po @@ -3,338 +3,425 @@ # This file is distributed under the same license as the gnome-shell-extensions package. # # Rajesh Ranjan , 2014. +# Scrambled777 , 2024. +# msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" -"shell&keywords=I18N+L10N&component=extensions\n" -"POT-Creation-Date: 2014-09-19 19:42+0000\n" -"PO-Revision-Date: 2014-09-21 10:59+0630\n" -"Last-Translator: rajesh \n" -"Language-Team: Hindi \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" +"issues\n" +"POT-Creation-Date: 2024-02-06 18:43+0000\n" +"PO-Revision-Date: 2024-04-24 15:01+0530\n" +"Last-Translator: Scrambled777 \n" +"Language-Team: Hindi\n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Gtranslator 46.1\n" -#: ../data/gnome-classic.desktop.in.h:1 -#: ../data/gnome-classic.session.desktop.in.in.h:1 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "GNOME क्लासिक" -#: ../data/gnome-classic.desktop.in.h:2 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "यह सत्र गनोम क्लासिक में आपको लॉगइन करेगा" -#: ../data/gnome-shell-classic.desktop.in.in.h:1 -msgid "GNOME Shell Classic" -msgstr "गनोम शैल क्लासिक" +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "Wayland पर GNOME क्लासिक" -#: ../data/gnome-shell-classic.desktop.in.in.h:2 -msgid "Window management and application launching" -msgstr "विंडो प्रबंधन और अनुप्रयोग लॉन्चिंग" +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "Xorg पर GNOME क्लासिक" -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 -msgid "Attach modal dialog to the parent window" -msgstr "जनक विंडो में मोडल संवाद संलग्न करें" - -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 -msgid "" -"This key overrides the key in org.gnome.mutter when running GNOME Shell." -msgstr "" -"यह कुँजी org.gnome.mutter में कुँजी को अधिरोहित करता है जब गनोम शेल को चला " -"रहा हो." - -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 -msgid "Arrangement of buttons on the titlebar" -msgstr "शीर्षक-पट्टी में बटनों का विन्यास" - -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 -msgid "" -"This key overrides the key in org.gnome.desktop.wm.preferences when running " -"GNOME Shell." -msgstr "" -"यह कुँजी org.gnome.desktop.wm.preferences में कुँजी को अधिरोहित करता है जब " -"गनोम शेल को चला रहा हो." - -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:5 -msgid "Enable edge tiling when dropping windows on screen edges" -msgstr "जब स्क्रीन किनारे पर विंडोज़ को छोड़ने बढ़त टाइलिंग सक्षम करें" - -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:6 -msgid "Workspaces only on primary monitor" -msgstr "केवल प्राथमिक मॉनिटर पर कार्यस्थान" - -#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:7 -msgid "Delay focus changes in mouse mode until the pointer stops moving" -msgstr "" -"माउस अवस्था में पॉइंटर के चलने के रूकने तक फोकस परिवर्तन को विलंबित करें" - -#: ../extensions/alternate-tab/prefs.js:20 -msgid "Thumbnail only" -msgstr "केवल लघुचित्र" - -#: ../extensions/alternate-tab/prefs.js:21 -msgid "Application icon only" -msgstr "केवल अनुप्रयोग चिह्न" - -#: ../extensions/alternate-tab/prefs.js:22 -msgid "Thumbnail and application icon" -msgstr "लघुचित्र और अनुप्रयोग चिह्न" - -#: ../extensions/alternate-tab/prefs.js:38 -msgid "Present windows as" -msgstr "विंडोज बतौर ऐसे प्रस्तुत करता है" - -#: ../extensions/alternate-tab/prefs.js:69 -msgid "Show only windows in the current workspace" -msgstr "मौजूदा कार्यस्थान में केवल विंडोज दिखाता है" - -#: ../extensions/apps-menu/extension.js:39 -msgid "Activities Overview" -msgstr "गतिविधि सारांश" - -#: ../extensions/apps-menu/extension.js:113 +#: extensions/apps-menu/extension.js:126 msgid "Favorites" msgstr "पसंदीदा" -#: ../extensions/apps-menu/extension.js:282 -msgid "Applications" -msgstr "अनुप्रयोग" +#: extensions/apps-menu/extension.js:397 +msgid "Apps" +msgstr "ऐप्स" -#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12 msgid "Application and workspace list" msgstr "अनुप्रयोग और कार्यस्थान सूची" -#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13 msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" msgstr "" -"स्ट्रिंग की सूची जिसमें से हर कोई किसी अनुप्रयोग आईडी (desktop file name) को " -"समाहित करता है, कॉलन और कार्यस्थान संख्या के द्वारा अनुसरित" +"स्ट्रिंग की सूची जिसमें से हर कोई किसी अनुप्रयोग ID (desktop file name) को समाहित " +"करता है, अपूर्ण विराम और कार्यस्थान संख्या के द्वारा अनुसरित" -#: ../extensions/auto-move-windows/prefs.js:60 -msgid "Application" -msgstr "अनुप्रयोग" +#: extensions/auto-move-windows/prefs.js:159 +msgid "Workspace Rules" +msgstr "कार्यस्थान नियम" -#: ../extensions/auto-move-windows/prefs.js:69 -#: ../extensions/auto-move-windows/prefs.js:127 -msgid "Workspace" -msgstr "कार्यस्थान" - -#: ../extensions/auto-move-windows/prefs.js:85 +#: extensions/auto-move-windows/prefs.js:314 msgid "Add Rule" msgstr "नियम जोड़ें" -#: ../extensions/auto-move-windows/prefs.js:106 -msgid "Create new matching rule" -msgstr "नया मिलानयुक्त नियम बनाएं" - -#: ../extensions/auto-move-windows/prefs.js:111 -msgid "Add" -msgstr "जोड़ें" - -#: ../extensions/drive-menu/extension.js:106 +#. TRANSLATORS: %s is the filesystem name +#: extensions/drive-menu/extension.js:123 +#: extensions/places-menu/placeDisplay.js:218 #, javascript-format -msgid "Ejecting drive '%s' failed:" -msgstr "'%s' को निकालना विफल:" +msgid "Ejecting drive “%s” failed:" +msgstr "ड्राइव “%s” को बाहर निकालना विफल रहा:" -#: ../extensions/drive-menu/extension.js:123 +#: extensions/drive-menu/extension.js:142 msgid "Removable devices" -msgstr "हटाने योग्य युक्तियाँ" +msgstr "हटाने-योग्य उपकरण" -#: ../extensions/drive-menu/extension.js:150 -msgid "Open File" -msgstr "फ़ाइल खोलें" +#: extensions/drive-menu/extension.js:164 +msgid "Open Files" +msgstr "फाइल खोलें" -#: ../extensions/example/extension.js:17 -msgid "Hello, world!" -msgstr "हेलो, दुनिया!" - -#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 -msgid "Alternative greeting text." -msgstr "वैकल्पिक आरंभिक पाठ." - -#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 -msgid "" -"If not empty, it contains the text that will be shown when clicking on the " -"panel." -msgstr "" -"यदि रिक्त नहीं है, यह उस पाठ को समाहित करता है जो पटल पर क्लिक किए जाने के " -"कारण दिखाया जाएगा." - -#: ../extensions/example/prefs.js:30 -msgid "Message" -msgstr "संदेश" - -#: ../extensions/example/prefs.js:43 -msgid "" -"Example aims to show how to build well behaved extensions for the Shell and " -"as such it has little functionality on its own.\n" -"Nevertheless it's possible to customize the greeting message." -msgstr "" -"उदाहरण दिखाने के लिए लक्षित है शेल के लिए सुविचारित विस्तार निर्मित करने के " -"लिए और इसका काफी कम काम है स्वयं के लिए.\n" -"हालाँकि, शुभकामना संदेश को पसंदीदा बनाना संभव है." - -#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 msgid "Use more screen for windows" msgstr "विंडोज के लिए अधिक स्क्रीन का उपयोग करें" -#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 msgid "" "Try to use more screen for placing window thumbnails by adapting to screen " "aspect ratio, and consolidating them further to reduce the bounding box. " "This setting applies only with the natural placement strategy." msgstr "" -"विंडोज लघुचित्र रखने के लिए अधिक स्क्रीन के उपयोग की कोशिश करें स्क्रीन पहलू " -"अनुपात से अनुकूलित करते हुए, और उन्हें बाउंडिंग बॉक्स में आगे कम करते हुए " -"एकत्रित करते हुए. यह सेटिंग स्वभावित प्लेसमेंट रणनीति के साथ केवल लागू होता " -"है." +"विंडोज लघुचित्र रखने के लिए अधिक स्क्रीन के उपयोग की कोशिश करें स्क्रीन पहलू अनुपात से " +"अनुकूलित करते हुए, और उन्हें बाउंडिंग बॉक्स में आगे कम करते हुए एकत्रित करते हुए। यह सेटिंग " +"स्वभावित प्लेसमेंट रणनीति के साथ केवल लागू होता है।" -#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 msgid "Place window captions on top" msgstr "शीर्ष पर विंडो अनुशीर्षक रखें" -#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18 msgid "" "If true, place window captions on top the respective thumbnail, overriding " "shell default of placing it at the bottom. Changing this setting requires " "restarting the shell to have any effect." msgstr "" -"यदि सही है, संबंधित लघुचित्रों पर विंडो अनुशीर्षक रखें, शेल तयशुदा को इसके " -"तल पर रखते हुए. इस सेटिंग को बदलने के लिए किसी प्रभाव के लिए शेल को फिर से " -"आरंभ करना जरूरी है." +"यदि सही है, संबंधित लघुचित्रों पर विंडो अनुशीर्षक रखें, शेल तयशुदा को इसके तल पर रखते हुए। " +"इस सेटिंग को बदलने के लिए किसी प्रभाव के लिए शेल को फिर से आरंभ करना जरूरी है।" -#: ../extensions/places-menu/extension.js:78 -#: ../extensions/places-menu/extension.js:81 +#: extensions/places-menu/extension.js:91 +#: extensions/places-menu/extension.js:94 msgid "Places" msgstr "स्थान" -#: ../extensions/places-menu/placeDisplay.js:57 +#: extensions/places-menu/placeDisplay.js:60 #, javascript-format -msgid "Failed to launch \"%s\"" -msgstr "\"%s\" लॉन्च करने में विफल" +msgid "Failed to launch “%s”" +msgstr "“%s” लॉन्च करने में विफल" -#: ../extensions/places-menu/placeDisplay.js:99 -#: ../extensions/places-menu/placeDisplay.js:122 +#: extensions/places-menu/placeDisplay.js:75 +#, javascript-format +msgid "Failed to mount volume for “%s”" +msgstr "“%s” के लिए वॉल्यूम आरोह करने में विफल" + +#: extensions/places-menu/placeDisplay.js:135 +#: extensions/places-menu/placeDisplay.js:158 msgid "Computer" msgstr "कम्प्यूटर" -#: ../extensions/places-menu/placeDisplay.js:200 +#: extensions/places-menu/placeDisplay.js:333 msgid "Home" msgstr "घर" -#: ../extensions/places-menu/placeDisplay.js:287 +#: extensions/places-menu/placeDisplay.js:378 msgid "Browse Network" msgstr "संजाल ब्राउज़ करें" -#: ../extensions/systemMonitor/extension.js:214 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 +msgid "Cycle Screenshot Sizes" +msgstr "स्क्रीनशॉट आकारों को चक्रित करें" + +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18 +msgid "Cycle Screenshot Sizes Backward" +msgstr "स्क्रीनशॉट आकारों को पीछे की ओर चक्रित करें" + +#: extensions/system-monitor/extension.js:135 +msgid "CPU stats" +msgstr "CPU आंकड़े" + +#: extensions/system-monitor/extension.js:159 +msgid "Memory stats" +msgstr "मेमोरी आंकड़े" + +#: extensions/system-monitor/extension.js:177 +msgid "Swap stats" +msgstr "स्वैप आंकड़े" + +#: extensions/system-monitor/extension.js:327 +msgid "Upload stats" +msgstr "अपलोड आंकड़े" + +#: extensions/system-monitor/extension.js:341 +msgid "Download stats" +msgstr "डाउनलोड आंकड़े" + +#: extensions/system-monitor/extension.js:355 +msgid "System stats" +msgstr "सिस्टम आंकड़े" + +#: extensions/system-monitor/extension.js:403 +msgid "Show" +msgstr "दिखाएं" + +#: extensions/system-monitor/extension.js:405 msgid "CPU" msgstr "CPU" -#: ../extensions/systemMonitor/extension.js:267 +#: extensions/system-monitor/extension.js:407 msgid "Memory" msgstr "मेमोरी" -#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 +#: extensions/system-monitor/extension.js:409 +msgid "Swap" +msgstr "स्वैप" + +#: extensions/system-monitor/extension.js:411 +msgid "Upload" +msgstr "अपलोड" + +#: extensions/system-monitor/extension.js:413 +msgid "Download" +msgstr "डाउनलोड" + +#: extensions/system-monitor/extension.js:418 +msgid "Open System Monitor" +msgstr "सिस्टम मॉनिटर खोलें" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12 +msgid "Show CPU usage" +msgstr "CPU उपयोग दिखाएं" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16 +msgid "Show memory usage" +msgstr "मेमोरी उपयोग दिखाएं" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20 +msgid "Show swap usage" +msgstr "स्वैप उपयोग दिखाएं" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24 +msgid "Show upload" +msgstr "अपलोड दिखाएं" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28 +msgid "Show download" +msgstr "डाउनलोड दिखाएं" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11 msgid "Theme name" msgstr "प्रसंग नाम" -#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -msgstr "प्रसंग का नाम, ~/.themes/name/gnome-shell से लोड किया गया" +msgstr "प्रसंग का नाम, ~/.themes/name/gnome-shell से लोड किया जायेगा" -#: ../extensions/window-list/extension.js:110 +#: extensions/window-list/extension.js:71 msgid "Close" msgstr "बंद करें" -#: ../extensions/window-list/extension.js:120 +#: extensions/window-list/extension.js:98 msgid "Unminimize" -msgstr "गैर न्यूनतम करें" +msgstr "बड़ा करें" -#: ../extensions/window-list/extension.js:121 +#: extensions/window-list/extension.js:98 msgid "Minimize" msgstr "न्यूनतम करें" -#: ../extensions/window-list/extension.js:127 +#: extensions/window-list/extension.js:105 msgid "Unmaximize" msgstr "गैर अधिकतम करें" -#: ../extensions/window-list/extension.js:128 +#: extensions/window-list/extension.js:105 msgid "Maximize" msgstr "अधिकतम" -#: ../extensions/window-list/extension.js:300 +#: extensions/window-list/extension.js:470 msgid "Minimize all" msgstr "सभी छोटा करें" -#: ../extensions/window-list/extension.js:308 +#: extensions/window-list/extension.js:476 msgid "Unminimize all" msgstr "गैर न्यूनतम करें" -#: ../extensions/window-list/extension.js:316 +#: extensions/window-list/extension.js:482 msgid "Maximize all" msgstr "सभी अधिकतम करें" -#: ../extensions/window-list/extension.js:325 +#: extensions/window-list/extension.js:490 msgid "Unmaximize all" msgstr "अधिकतम खत्म करें" -#: ../extensions/window-list/extension.js:334 +#: extensions/window-list/extension.js:498 msgid "Close all" msgstr "सभी बंद करें" -#: ../extensions/window-list/extension.js:644 -#: ../extensions/workspace-indicator/extension.js:30 -msgid "Workspace Indicator" -msgstr "कार्यस्थान सूचक" - -#: ../extensions/window-list/extension.js:808 +#: extensions/window-list/extension.js:772 msgid "Window List" msgstr "विंडो सूची" -#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18 msgid "When to group windows" msgstr "विंडोज़ को कब समूहबद्ध करें" -#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19 msgid "" "Decides when to group windows from the same application on the window list. " -"Possible values are \"never\", \"auto\" and \"always\"." +"Possible values are “never”, “auto” and “always”." msgstr "" -"तय करता है कि विंडो को कब समूह बद्ध करें विंडो सूची के एक ही प्रकार के " -"अनुप्रयोगों में से. सही मूल्य हैं \"कभी नहीं\", \"स्वचालित\" तथा \"हमेशा\"." +"यह तय करता है कि विंडो सूची में एक ही अनुप्रयोग से विंडोज़ को कब समूहित करना है। संभावित " +"मान “कभी नहीं”, “स्वचालित” और “हमेशा” हैं।" -#: ../extensions/window-list/prefs.js:30 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 +#: extensions/window-list/prefs.js:79 +msgid "Show windows from all workspaces" +msgstr "सभी कार्यस्थानों से विंडो दिखाएं" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 +msgid "Whether to show windows from all workspaces or only the current one." +msgstr "क्या सभी कार्यस्थानों से विंडो दिखानी है या केवल वर्तमान पर।" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33 +msgid "Show the window list on all monitors" +msgstr "सभी मॉनिटरों पर विंडो सूची दिखाएं" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34 +msgid "" +"Whether to show the window list on all connected monitors or only on the " +"primary one." +msgstr "" +"क्या विंडो सूची को सभी जुड़े हुए मॉनिटरों पर दिखाना है या केवल प्राथमिक मॉनिटर पर।" + +#: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "विंडो समूहबद्धता" -#: ../extensions/window-list/prefs.js:49 +#: extensions/window-list/prefs.js:40 msgid "Never group windows" msgstr "विंडोज को कभी समूहित मत करें" -#: ../extensions/window-list/prefs.js:50 +#: extensions/window-list/prefs.js:41 msgid "Group windows when space is limited" msgstr "विंडोज समूहित करें जब स्थान सीमित है" -#: ../extensions/window-list/prefs.js:51 +#: extensions/window-list/prefs.js:42 msgid "Always group windows" msgstr "हमेशा विंडोज समूहित करें" -#: ../extensions/workspace-indicator/prefs.js:141 -msgid "Workspace Names" -msgstr "कार्यस्थान नाम" +#: extensions/window-list/prefs.js:66 +msgid "Show on all monitors" +msgstr "सभी मॉनिटरों पर दिखाएं" -#: ../extensions/workspace-indicator/prefs.js:157 -msgid "Name" -msgstr "नाम" +#: extensions/window-list/workspaceIndicator.js:253 +#: extensions/workspace-indicator/extension.js:259 +msgid "Workspace Indicator" +msgstr "कार्यस्थान सूचक" -#: ../extensions/workspace-indicator/prefs.js:198 +#: extensions/workspace-indicator/prefs.js:69 #, javascript-format msgid "Workspace %d" msgstr "कार्यस्थान %d" +#: extensions/workspace-indicator/prefs.js:136 +msgid "Workspace Names" +msgstr "कार्यस्थान नाम" + +#: extensions/workspace-indicator/prefs.js:262 +msgid "Add Workspace" +msgstr "कार्यस्थान जोड़ें" + +#~ msgid "GNOME Shell Classic" +#~ msgstr "गनोम शैल क्लासिक" + +#~ msgid "Window management and application launching" +#~ msgstr "विंडो प्रबंधन और अनुप्रयोग लॉन्चिंग" + +#~ msgid "Attach modal dialog to the parent window" +#~ msgstr "जनक विंडो में मोडल संवाद संलग्न करें" + +#~ msgid "" +#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell." +#~ msgstr "" +#~ "यह कुँजी org.gnome.mutter में कुँजी को अधिरोहित करता है जब गनोम शेल को चला रहा हो." + +#~ msgid "Arrangement of buttons on the titlebar" +#~ msgstr "शीर्षक-पट्टी में बटनों का विन्यास" + +#~ msgid "" +#~ "This key overrides the key in org.gnome.desktop.wm.preferences when " +#~ "running GNOME Shell." +#~ msgstr "" +#~ "यह कुँजी org.gnome.desktop.wm.preferences में कुँजी को अधिरोहित करता है जब गनोम " +#~ "शेल को चला रहा हो." + +#~ msgid "Enable edge tiling when dropping windows on screen edges" +#~ msgstr "जब स्क्रीन किनारे पर विंडोज़ को छोड़ने बढ़त टाइलिंग सक्षम करें" + +#~ msgid "Workspaces only on primary monitor" +#~ msgstr "केवल प्राथमिक मॉनिटर पर कार्यस्थान" + +#~ msgid "Delay focus changes in mouse mode until the pointer stops moving" +#~ msgstr "माउस अवस्था में पॉइंटर के चलने के रूकने तक फोकस परिवर्तन को विलंबित करें" + +#~ msgid "Thumbnail only" +#~ msgstr "केवल लघुचित्र" + +#~ msgid "Application icon only" +#~ msgstr "केवल अनुप्रयोग चिह्न" + +#~ msgid "Thumbnail and application icon" +#~ msgstr "लघुचित्र और अनुप्रयोग चिह्न" + +#~ msgid "Present windows as" +#~ msgstr "विंडोज बतौर ऐसे प्रस्तुत करता है" + +#~ msgid "Activities Overview" +#~ msgstr "गतिविधि सारांश" + +#~ msgid "Applications" +#~ msgstr "अनुप्रयोग" + +#~ msgid "Application" +#~ msgstr "अनुप्रयोग" + +#~ msgid "Create new matching rule" +#~ msgstr "नया मिलानयुक्त नियम बनाएं" + +#~ msgid "Add" +#~ msgstr "जोड़ें" + +#~ msgid "Hello, world!" +#~ msgstr "हेलो, दुनिया!" + +#~ msgid "Alternative greeting text." +#~ msgstr "वैकल्पिक आरंभिक पाठ." + +#~ msgid "" +#~ "If not empty, it contains the text that will be shown when clicking on " +#~ "the panel." +#~ msgstr "" +#~ "यदि रिक्त नहीं है, यह उस पाठ को समाहित करता है जो पटल पर क्लिक किए जाने के कारण " +#~ "दिखाया जाएगा." + +#~ msgid "Message" +#~ msgstr "संदेश" + +#~ msgid "" +#~ "Example aims to show how to build well behaved extensions for the Shell " +#~ "and as such it has little functionality on its own.\n" +#~ "Nevertheless it's possible to customize the greeting message." +#~ msgstr "" +#~ "उदाहरण दिखाने के लिए लक्षित है शेल के लिए सुविचारित विस्तार निर्मित करने के लिए और " +#~ "इसका काफी कम काम है स्वयं के लिए.\n" +#~ "हालाँकि, शुभकामना संदेश को पसंदीदा बनाना संभव है." + +#~ msgid "Name" +#~ msgstr "नाम" From 8c014a6b1da26fd72001064ba7fdfd3b41103e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 24 May 2024 00:07:11 +0200 Subject: [PATCH 38/57] ci: Use `meson introspect` to generate artifact path We currently assume that the `CI_COMMIT_TAG` variable matches the version component of the generated dist tarball. That is usually correct, but sometimes errors happen and a wrong tag is pushed, and the real release uses something like "46.0-real". Account for that by building the artifact path from `meson introspect` and exporting it as environment variable. Part-of: --- .gitlab-ci.yml | 21 ++++++++++++++++++++- .gitlab-ci/export-artifact-path | 21 +++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100755 .gitlab-ci/export-artifact-path diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b5076386..8aca09f5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -147,6 +147,21 @@ fedora-build: paths: - build +fedora-distinfo: + stage: deploy + needs: + - fedora-build + script: + - .gitlab-ci/export-artifact-path build > dist.env + artifacts: + reports: + dotenv: dist.env + paths: + - build + - dist.env + rules: + - if: '$CI_COMMIT_TAG' + fedora-dist: stage: deploy needs: @@ -163,9 +178,13 @@ fedora-dist: fedora-dist-tarball: extends: fedora-dist + needs: + - fedora-distinfo artifacts: expose_as: 'Get tarball here' paths: - - build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz + - $TARBALL_ARTIFACT_PATH + reports: + dotenv: dist.env rules: - if: '$CI_COMMIT_TAG' diff --git a/.gitlab-ci/export-artifact-path b/.gitlab-ci/export-artifact-path new file mode 100755 index 00000000..f9a7534f --- /dev/null +++ b/.gitlab-ci/export-artifact-path @@ -0,0 +1,21 @@ +#!/usr/bin/gjs -m +// SPDX-FileCopyrightText: 2024 Florian Müllner +// +// SPDX-License-Identifier: GPL-2.0-or-later + +import Gio from 'gi://Gio'; +import {programArgs, programInvocationName, exit} from 'system'; + +const [buildDir] = programArgs; +if (!buildDir) { + printerr(`usage: ${programInvocationName} `); + exit(1); +} + +const subprocess = Gio.Subprocess.new( + ['meson', 'introspect', '--projectinfo', buildDir], + Gio.SubprocessFlags.STDOUT_PIPE); +const [, out] = subprocess.communicate_utf8(null, null); + +const {descriptive_name, version} = JSON.parse(out); +print(`TARBALL_ARTIFACT_PATH=${buildDir}/meson-dist/${descriptive_name}-${version}.tar.xz`); From 6ac76140a59ee0ac3e097680e5eeb349ec17314e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 23 May 2024 19:11:42 +0200 Subject: [PATCH 39/57] ci: Hook up release-module In the future, the module will automate uploading the release tarball. We already use the CI pipeline to generate the tarball, so it's easy to hook up the module and provide some testing before the module goes into production. Part-of: --- .gitlab-ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8aca09f5..df97d556 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,8 @@ include: - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml" + - project: 'Infrastructure/openshift-images/gnome-release-service' + file: '/ci-templates/release-module.yml' stages: - pre_review @@ -188,3 +190,11 @@ fedora-dist-tarball: dotenv: dist.env rules: - if: '$CI_COMMIT_TAG' + +release-module: + stage: deploy + needs: + - fedora-dist-tarball + extends: .release-module + rules: + - if: '$CI_COMMIT_TAG' From 9e61aaf08cffc6828b920ccf9331703edeb7d4de Mon Sep 17 00:00:00 2001 From: Scrambled 777 Date: Sat, 25 May 2024 17:17:19 +0000 Subject: [PATCH 40/57] Update Hindi translation --- po/hi.po | 169 ++++++++++++++++--------------------------------------- 1 file changed, 48 insertions(+), 121 deletions(-) diff --git a/po/hi.po b/po/hi.po index eef7c576..bfc62330 100644 --- a/po/hi.po +++ b/po/hi.po @@ -10,15 +10,15 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-02-06 18:43+0000\n" -"PO-Revision-Date: 2024-04-24 15:01+0530\n" +"POT-Creation-Date: 2024-05-12 13:45+0000\n" +"PO-Revision-Date: 2024-05-14 15:33+0530\n" "Last-Translator: Scrambled777 \n" -"Language-Team: Hindi\n" +"Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 46.1\n" #: data/gnome-classic.desktop.in:3 @@ -42,7 +42,7 @@ msgstr "Xorg पर GNOME क्लासिक" msgid "Favorites" msgstr "पसंदीदा" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "ऐप्स" @@ -55,8 +55,8 @@ msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" msgstr "" -"स्ट्रिंग की सूची जिसमें से हर कोई किसी अनुप्रयोग ID (desktop file name) को समाहित " -"करता है, अपूर्ण विराम और कार्यस्थान संख्या के द्वारा अनुसरित" +"स्ट्रिंग की सूची जिसमें से हर कोई किसी अनुप्रयोग ID (डेस्कटॉप फाइल नाम) को समाहित करता " +"है, अपूर्ण विराम और कार्यस्थान संख्या के द्वारा अनुसरित" #: extensions/auto-move-windows/prefs.js:159 msgid "Workspace Rules" @@ -156,43 +156,43 @@ msgstr "मेमोरी आंकड़े" msgid "Swap stats" msgstr "स्वैप आंकड़े" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "अपलोड आंकड़े" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "डाउनलोड आंकड़े" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "सिस्टम आंकड़े" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "दिखाएं" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "CPU" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "मेमोरी" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "स्वैप" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "अपलोड" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "डाउनलोड" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "सिस्टम मॉनिटर खोलें" @@ -224,47 +224,47 @@ msgstr "प्रसंग नाम" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "प्रसंग का नाम, ~/.themes/name/gnome-shell से लोड किया जायेगा" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "बंद करें" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "बड़ा करें" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "न्यूनतम करें" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "गैर अधिकतम करें" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "अधिकतम" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "सभी छोटा करें" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "गैर न्यूनतम करें" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "सभी अधिकतम करें" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "अधिकतम खत्म करें" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "सभी बंद करें" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "विंडो सूची" @@ -300,6 +300,10 @@ msgid "" msgstr "" "क्या विंडो सूची को सभी जुड़े हुए मॉनिटरों पर दिखाना है या केवल प्राथमिक मॉनिटर पर।" +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "विंडो सूची में कार्यस्थान पूर्वावलोकन दिखाएं" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "विंडो समूहबद्धता" @@ -320,108 +324,31 @@ msgstr "हमेशा विंडोज समूहित करें" msgid "Show on all monitors" msgstr "सभी मॉनिटरों पर दिखाएं" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "कार्यस्थान सूचक" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "कार्यस्थान पूर्वावलोकन दिखाएं" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "शीर्षपट्टी में पूर्वावलोकन दिखाएं" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "कार्यस्थान %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "कार्यस्थान नाम" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "कार्यस्थान जोड़ें" -#~ msgid "GNOME Shell Classic" -#~ msgstr "गनोम शैल क्लासिक" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "शीर्षपट्टी में कार्यस्थान पूर्वावलोकन दिखाएं" -#~ msgid "Window management and application launching" -#~ msgstr "विंडो प्रबंधन और अनुप्रयोग लॉन्चिंग" - -#~ msgid "Attach modal dialog to the parent window" -#~ msgstr "जनक विंडो में मोडल संवाद संलग्न करें" - -#~ msgid "" -#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell." -#~ msgstr "" -#~ "यह कुँजी org.gnome.mutter में कुँजी को अधिरोहित करता है जब गनोम शेल को चला रहा हो." - -#~ msgid "Arrangement of buttons on the titlebar" -#~ msgstr "शीर्षक-पट्टी में बटनों का विन्यास" - -#~ msgid "" -#~ "This key overrides the key in org.gnome.desktop.wm.preferences when " -#~ "running GNOME Shell." -#~ msgstr "" -#~ "यह कुँजी org.gnome.desktop.wm.preferences में कुँजी को अधिरोहित करता है जब गनोम " -#~ "शेल को चला रहा हो." - -#~ msgid "Enable edge tiling when dropping windows on screen edges" -#~ msgstr "जब स्क्रीन किनारे पर विंडोज़ को छोड़ने बढ़त टाइलिंग सक्षम करें" - -#~ msgid "Workspaces only on primary monitor" -#~ msgstr "केवल प्राथमिक मॉनिटर पर कार्यस्थान" - -#~ msgid "Delay focus changes in mouse mode until the pointer stops moving" -#~ msgstr "माउस अवस्था में पॉइंटर के चलने के रूकने तक फोकस परिवर्तन को विलंबित करें" - -#~ msgid "Thumbnail only" -#~ msgstr "केवल लघुचित्र" - -#~ msgid "Application icon only" -#~ msgstr "केवल अनुप्रयोग चिह्न" - -#~ msgid "Thumbnail and application icon" -#~ msgstr "लघुचित्र और अनुप्रयोग चिह्न" - -#~ msgid "Present windows as" -#~ msgstr "विंडोज बतौर ऐसे प्रस्तुत करता है" - -#~ msgid "Activities Overview" -#~ msgstr "गतिविधि सारांश" - -#~ msgid "Applications" -#~ msgstr "अनुप्रयोग" - -#~ msgid "Application" -#~ msgstr "अनुप्रयोग" - -#~ msgid "Create new matching rule" -#~ msgstr "नया मिलानयुक्त नियम बनाएं" - -#~ msgid "Add" -#~ msgstr "जोड़ें" - -#~ msgid "Hello, world!" -#~ msgstr "हेलो, दुनिया!" - -#~ msgid "Alternative greeting text." -#~ msgstr "वैकल्पिक आरंभिक पाठ." - -#~ msgid "" -#~ "If not empty, it contains the text that will be shown when clicking on " -#~ "the panel." -#~ msgstr "" -#~ "यदि रिक्त नहीं है, यह उस पाठ को समाहित करता है जो पटल पर क्लिक किए जाने के कारण " -#~ "दिखाया जाएगा." - -#~ msgid "Message" -#~ msgstr "संदेश" - -#~ msgid "" -#~ "Example aims to show how to build well behaved extensions for the Shell " -#~ "and as such it has little functionality on its own.\n" -#~ "Nevertheless it's possible to customize the greeting message." -#~ msgstr "" -#~ "उदाहरण दिखाने के लिए लक्षित है शेल के लिए सुविचारित विस्तार निर्मित करने के लिए और " -#~ "इसका काफी कम काम है स्वयं के लिए.\n" -#~ "हालाँकि, शुभकामना संदेश को पसंदीदा बनाना संभव है." - -#~ msgid "Name" -#~ msgstr "नाम" +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "कार्यस्थान सूचक" From 1394e82bd071f3727f138da5f7334cd9f6daf251 Mon Sep 17 00:00:00 2001 From: Artur S0 Date: Mon, 27 May 2024 10:19:22 +0000 Subject: [PATCH 41/57] Update Russian translation --- po/ru.po | 81 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/po/ru.po b/po/ru.po index 1e933d09..b676367e 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-02-06 18:43+0000\n" -"PO-Revision-Date: 2024-02-11 18:21+0300\n" +"POT-Creation-Date: 2024-04-29 15:27+0000\n" +"PO-Revision-Date: 2024-05-25 14:46+0300\n" "Last-Translator: Artur So \n" "Language-Team: Русский \n" "Language: ru\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -42,7 +42,7 @@ msgstr "Классический GNOME на Xorg" msgid "Favorites" msgstr "Избранное" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Приложения" @@ -158,43 +158,43 @@ msgstr "Статистика памяти" msgid "Swap stats" msgstr "Статистика подкачки" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "Статистика отдачи" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "Статистика загрузки" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "Статистика системы" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "Показать" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "ЦП" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "Память" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "Подкачка" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "Отдача" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "Загрузка" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "Открыть системный монитор" @@ -226,49 +226,49 @@ msgstr "Название темы" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Название темы, загружаемой из ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Закрыть" # ну или "восстановить", правда тогда появляется неоднозначный повтор (unmaximize) -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Вернуть" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Свернуть" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Восстановить" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "Развернуть" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Свернуть все" # ну или "восстановить", правда тогда появляется неоднозначный повтор (unmaximize) -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Вернуть все" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Развернуть все" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Восстановить все" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Закрыть все" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "Список окон" @@ -288,7 +288,7 @@ msgstr "" #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 #: extensions/window-list/prefs.js:79 msgid "Show windows from all workspaces" -msgstr "Отображать окна со всех рабочих столов" +msgstr "Показывать окна со всех рабочих столов" #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 msgid "Whether to show windows from all workspaces or only the current one." @@ -307,6 +307,10 @@ msgstr "" "Показывать ли список окон на всех подключенных мониторах или только на " "основном." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Показывать предпросмотры рабочих столов в списке окон" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Группировка окон" @@ -327,23 +331,34 @@ msgstr "Всегда группировать окна" msgid "Show on all monitors" msgstr "Показывать на всех мониторах" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "Индикатор рабочих столов" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "Показывать предпросмотры рабочих столов" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Показывать предпросмотры в верхней панели" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "Рабочий стол %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Названия рабочих столов" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Добавить рабочий стол" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Показывать предпросмотры рабочих столов в верхней панели" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Индикатор рабочих столов" + #~ msgid "Applications" #~ msgstr "Приложения" From ef729f2d66c020ecfc99534257dfce9391094cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D0=BB=D0=BE=D1=88=20=D0=9F=D0=BE=D0=BF=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D1=9B?= Date: Thu, 20 Jun 2024 15:00:07 +0000 Subject: [PATCH 42/57] Update Serbian translation --- po/sr.po | 207 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 138 insertions(+), 69 deletions(-) diff --git a/po/sr.po b/po/sr.po index f38d14d8..cc7007cb 100644 --- a/po/sr.po +++ b/po/sr.po @@ -3,25 +3,25 @@ # This file is distributed under the same license as the gnome-shell-extensions package. # Милош Поповић , 2012. # Мирослав Николић , 2012—2017. -# Марко М. Костић , 2020. +# Марко М. Костић , 2020-2024. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2021-11-06 14:08+0000\n" -"PO-Revision-Date: 2022-03-11 07:10+0100\n" +"POT-Creation-Date: 2024-04-29 14:28+0000\n" +"PO-Revision-Date: 2024-06-20 01:27+0200\n" "Last-Translator: Марко М. Костић \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" -"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " +"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Project-Style: gnome\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Gtranslator 45.3\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -40,19 +40,19 @@ msgstr "Класичан Гном на Вејленду" msgid "GNOME Classic on Xorg" msgstr "Класичан Гном на Икс серверу" -#: extensions/apps-menu/extension.js:112 +#: extensions/apps-menu/extension.js:126 msgid "Favorites" msgstr "Омиљено" -#: extensions/apps-menu/extension.js:366 -msgid "Applications" -msgstr "Програми" +#: extensions/apps-menu/extension.js:397 +msgid "Apps" +msgstr "Апликације" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12 msgid "Application and workspace list" msgstr "Програм и списак радних простора" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13 msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" @@ -60,34 +60,34 @@ msgstr "" "Списак ниски од којих свака садржи иб програма (назив датотеке „.desktop“), " "зарез и број радног простора" -#: extensions/auto-move-windows/prefs.js:34 +#: extensions/auto-move-windows/prefs.js:159 msgid "Workspace Rules" msgstr "Правила радних простора" -#: extensions/auto-move-windows/prefs.js:236 +#: extensions/auto-move-windows/prefs.js:314 msgid "Add Rule" msgstr "Додај правило" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:133 -#: extensions/places-menu/placeDisplay.js:233 +#: extensions/drive-menu/extension.js:123 +#: extensions/places-menu/placeDisplay.js:218 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Нисам успео да избацим уређај „%s“:" -#: extensions/drive-menu/extension.js:149 +#: extensions/drive-menu/extension.js:142 msgid "Removable devices" msgstr "Уклоњиви уређаји" -#: extensions/drive-menu/extension.js:171 +#: extensions/drive-menu/extension.js:164 msgid "Open Files" msgstr "Отвори датотеке" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 msgid "Use more screen for windows" msgstr "Користи више простора за прозор" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 msgid "" "Try to use more screen for placing window thumbnails by adapting to screen " "aspect ratio, and consolidating them further to reduce the bounding box. " @@ -97,11 +97,11 @@ msgstr "" "величине екрана. Ово подешавање важи само уколико је стратегија размештања " "постављена на природно." -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 msgid "Place window captions on top" msgstr "Поставља натписе прозора изнад приказа" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18 msgid "" "If true, place window captions on top the respective thumbnail, overriding " "shell default of placing it at the bottom. Changing this setting requires " @@ -111,47 +111,119 @@ msgstr "" "умањених приказа уместо испод приказа. Промена ових подешавања захтева да " "поново покренете Гномову шкољку." -#: extensions/places-menu/extension.js:88 #: extensions/places-menu/extension.js:91 +#: extensions/places-menu/extension.js:94 msgid "Places" msgstr "Места" -#: extensions/places-menu/placeDisplay.js:46 +#: extensions/places-menu/placeDisplay.js:60 #, javascript-format msgid "Failed to launch “%s”" msgstr "Нисам успео да покренем „%s“" -#: extensions/places-menu/placeDisplay.js:61 +#: extensions/places-menu/placeDisplay.js:75 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Нисам успео да прикачим волумен за „%s“" -#: extensions/places-menu/placeDisplay.js:148 -#: extensions/places-menu/placeDisplay.js:171 +#: extensions/places-menu/placeDisplay.js:135 +#: extensions/places-menu/placeDisplay.js:158 msgid "Computer" msgstr "Рачунар" -#: extensions/places-menu/placeDisplay.js:359 +#: extensions/places-menu/placeDisplay.js:333 msgid "Home" msgstr "Личнo" -#: extensions/places-menu/placeDisplay.js:404 +#: extensions/places-menu/placeDisplay.js:378 msgid "Browse Network" msgstr "Разгледајте мрежу" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" msgstr "Кружи кроз величине снимака екрана" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18 msgid "Cycle Screenshot Sizes Backward" msgstr "Кружи уназад кроз величине снимака екрана" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 +#: extensions/system-monitor/extension.js:135 +msgid "CPU stats" +msgstr "Статистика процесора" + +#: extensions/system-monitor/extension.js:159 +msgid "Memory stats" +msgstr "Статистика меморије" + +#: extensions/system-monitor/extension.js:177 +msgid "Swap stats" +msgstr "Статистика свап меморије" + +#: extensions/system-monitor/extension.js:336 +msgid "Upload stats" +msgstr "Статистика слања датотека" + +#: extensions/system-monitor/extension.js:350 +msgid "Download stats" +msgstr "Статистика преузимања датотека" + +#: extensions/system-monitor/extension.js:364 +msgid "System stats" +msgstr "Статистика система" + +#: extensions/system-monitor/extension.js:412 +msgid "Show" +msgstr "Прикажи" + +#: extensions/system-monitor/extension.js:414 +msgid "CPU" +msgstr "Процесор" + +#: extensions/system-monitor/extension.js:416 +msgid "Memory" +msgstr "Меморија" + +#: extensions/system-monitor/extension.js:418 +msgid "Swap" +msgstr "Свап" + +#: extensions/system-monitor/extension.js:420 +msgid "Upload" +msgstr "Слање" + +#: extensions/system-monitor/extension.js:422 +msgid "Download" +msgstr "Преузимање" + +#: extensions/system-monitor/extension.js:427 +msgid "Open System Monitor" +msgstr "Отвори монитор система" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12 +msgid "Show CPU usage" +msgstr "Прикажи коришћење процесора" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16 +msgid "Show memory usage" +msgstr "Прикажи коришћење меморије" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20 +msgid "Show swap usage" +msgstr "Прикажи коришћење свап меморије" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24 +msgid "Show upload" +msgstr "Прикажи слање" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28 +msgid "Show download" +msgstr "Прикажи преузимање" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11 msgid "Theme name" msgstr "Назив теме" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6 +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Назив теме који се учитава из датотеке „~/.themes/name/gnome-shell“" @@ -159,51 +231,51 @@ msgstr "Назив теме који се учитава из датотеке msgid "Close" msgstr "Затвори" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Поништи умањење" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Умањи" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Поништи увећање" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "Увећај" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Умањи све" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Поништи умањење свега" -#: extensions/window-list/extension.js:446 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Увећај све" -#: extensions/window-list/extension.js:454 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Поништи увећање свега" -#: extensions/window-list/extension.js:462 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Затвори све" -#: extensions/window-list/extension.js:741 +#: extensions/window-list/extension.js:773 msgid "Window List" msgstr "Списак прозора" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18 msgid "When to group windows" msgstr "Када груписати прозоре" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19 msgid "" "Decides when to group windows from the same application on the window list. " "Possible values are “never”, “auto” and “always”." @@ -212,20 +284,20 @@ msgstr "" "Дозвољене вредности су „never“ (никад), „auto“ (аутоматски) и " "„always“ (увек)." -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:86 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 +#: extensions/window-list/prefs.js:79 msgid "Show windows from all workspaces" msgstr "Прикажи прозоре свих радних простора" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 msgid "Whether to show windows from all workspaces or only the current one." msgstr "Да ли да прикаже прозоре са свих радних прозора или само са тренутног." -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33 msgid "Show the window list on all monitors" msgstr "Приказује списак прозора на свим мониторима" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34 msgid "" "Whether to show the window list on all connected monitors or only on the " "primary one." @@ -233,44 +305,47 @@ msgstr "" "Да ли да прикаже списак прозора на свим прикљученим мониторима или само на " "главном." -#: extensions/window-list/prefs.js:39 +#: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Груписање прозора" -#: extensions/window-list/prefs.js:63 +#: extensions/window-list/prefs.js:40 msgid "Never group windows" msgstr "Никад не групиши прозоре" -#: extensions/window-list/prefs.js:64 +#: extensions/window-list/prefs.js:41 msgid "Group windows when space is limited" msgstr "Групиши прозоре када је простор ограничен" -#: extensions/window-list/prefs.js:65 +#: extensions/window-list/prefs.js:42 msgid "Always group windows" msgstr "Увек групиши прозоре" -#: extensions/window-list/prefs.js:81 +#: extensions/window-list/prefs.js:66 msgid "Show on all monitors" msgstr "Прикажи на свим мониторима" -#: extensions/window-list/workspaceIndicator.js:249 -#: extensions/workspace-indicator/extension.js:254 +#: extensions/window-list/workspaceIndicator.js:255 +#: extensions/workspace-indicator/extension.js:261 msgid "Workspace Indicator" msgstr "Показатељ радних простора" -#: extensions/workspace-indicator/prefs.js:33 -msgid "Workspace Names" -msgstr "Називи радних простора" - -#: extensions/workspace-indicator/prefs.js:66 +#: extensions/workspace-indicator/prefs.js:69 #, javascript-format msgid "Workspace %d" msgstr "%d. радни простор" -#: extensions/workspace-indicator/prefs.js:207 +#: extensions/workspace-indicator/prefs.js:136 +msgid "Workspace Names" +msgstr "Називи радних простора" + +#: extensions/workspace-indicator/prefs.js:262 msgid "Add Workspace" msgstr "Додај радни простор" +#~ msgid "Applications" +#~ msgstr "Програми" + #~ msgid "Application" #~ msgstr "Програм" @@ -352,12 +427,6 @@ msgstr "Додај радни простор" #~ "тако да вам не значи пуно.\n" #~ "Ипак, можете изменити поздравну поруку помоћу овог проширења." -#~ msgid "CPU" -#~ msgstr "Процесор" - -#~ msgid "Memory" -#~ msgstr "Меморија" - #~ msgid "GNOME Shell Classic" #~ msgstr "Класична Гномова шкољка" From 5d45a697cef52e5ba0cc2f98c0196316eeb7eafe Mon Sep 17 00:00:00 2001 From: Yosef Or Boczko Date: Fri, 28 Jun 2024 07:34:33 +0000 Subject: [PATCH 43/57] Update Hebrew translation --- po/he.po | 83 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/po/he.po b/po/he.po index 721e1917..007d74a1 100644 --- a/po/he.po +++ b/po/he.po @@ -9,17 +9,17 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-02-06 18:43+0000\n" -"PO-Revision-Date: 2024-02-17 00:11+0200\n" -"Last-Translator: Yaron Shahrabani \n" +"POT-Creation-Date: 2024-04-29 15:27+0000\n" +"PO-Revision-Date: 2024-06-28 10:34+0300\n" +"Last-Translator: Yosef Or Boczko \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n>2||n==0) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n>2||n==0) ? 1 : 2\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Gtranslator 46.1\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -42,7 +42,7 @@ msgstr "‏GNOME קלסי על גבי Xorg" msgid "Favorites" msgstr "מועדפים" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "יישומים" @@ -157,43 +157,43 @@ msgstr "סטטיסטיקת זיכרון" msgid "Swap stats" msgstr "סטטיסטיקת תחלופה" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "סטטיסטיקת העלאה" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "סטטיסטיקת הורדה" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "סטטיסטיקת מערכת" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "הצגה" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "מעבד" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "זיכרון" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "תחלופה" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "העלאה" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "הורדה" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "פתיחת צג המערכת" @@ -225,47 +225,47 @@ msgstr "Theme name" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "סגירה" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "ביטול המזעור" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "מזעור" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "ביטול ההגדלה" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "הגדלה" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "מזעור הכל" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "ביטול מזעור הכל" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "הגדלת הכל" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "ביטול הגדלת הכל" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "סגירת הכל" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "רשימת חלונות" @@ -302,6 +302,10 @@ msgstr "" "Whether to show the window list on all connected monitors or only on the " "primary one." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "הצגת תצוגה מקדימה של מרחבי העבודה ברשימת החלונות" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "קיבוץ חלונות" @@ -322,24 +326,35 @@ msgstr "תמיד לקבץ חלונות" msgid "Show on all monitors" msgstr "הצגה בכל הצגים" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "מחוון מרחבי עבודה" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "הצגת תצוגה מקדימה של מרחבי העבודה" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "הצגת תצוגה מקדימה בלוח העליון" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "מרחב עבודה %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "שם מרחב העבודה" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "הוספת מרחב עבודה" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "הצגת תצוגה מקדימה של מרחבי העבודה בלוח העליון" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "מחוון מרחבי עבודה" + #~ msgid "Applications" #~ msgstr "יישומים" From 17c963b63f60c34b071cff829aa34b5acb2b2b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20=C3=9Ar?= Date: Fri, 28 Jun 2024 14:25:44 +0000 Subject: [PATCH 44/57] Update Hungarian translation --- po/hu.po | 78 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/po/hu.po b/po/hu.po index fb49bd81..3d1ae726 100644 --- a/po/hu.po +++ b/po/hu.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/is" "sues\n" -"POT-Creation-Date: 2024-02-06 18:43+0000\n" -"PO-Revision-Date: 2024-03-04 12:30+0100\n" +"POT-Creation-Date: 2024-04-29 15:27+0000\n" +"PO-Revision-Date: 2024-06-28 16:24+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -43,7 +43,7 @@ msgstr "Klasszikus GNOME Xorgon" msgid "Favorites" msgstr "Kedvencek" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Alkalmazások" @@ -159,43 +159,43 @@ msgstr "Memóriastatisztikák" msgid "Swap stats" msgstr "Cserehely-statisztikák" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "Feltöltési statisztikák" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "Letöltési statisztikák" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "Rendszerstatisztikák" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "Megjelenítés" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "Processzor" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "Memória" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "Cserehely" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "Feltöltés" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "Letöltés" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "Rendszerfigyelő megnyitása" @@ -227,47 +227,47 @@ msgstr "Témanév" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "A ~/.themes/név/gnome-shell alól betöltendő téma neve" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Bezárás" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Minimalizálás megszüntetése" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Minimalizálás" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Maximalizálás megszüntetése" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "Maximalizálás" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Minden minimalizálása" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Minden minimalizálásának megszüntetése" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Minden maximalizálása" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Minden maximalizálásának megszüntetése" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Minden bezárása" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "Ablaklista" @@ -307,6 +307,10 @@ msgstr "" "Megjelenjen-e az ablaklista minden csatlakoztatott monitoron vagy csak az " "elsődlegesen." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Munkaterület-előnézetek megjelenítése az ablaklistában" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Ablakcsoportosítás" @@ -327,20 +331,32 @@ msgstr "Mindig csoportosítsa az ablakokat" msgid "Show on all monitors" msgstr "Megjelenítés minden monitoron" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "Munkaterület-indikátor" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "Munkaterület-előnézetek megjelenítése" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Előnézetek megjelenítése a felső sávon" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "%d. munkaterület" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Munkaterületnevek" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Munkaterület hozzáadása" + +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Munkaterület-előnézetek megjelenítése a felső sávon" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Munkaterület-indikátor" + From f76f9e82205fb087643ac86014166509fca6fcfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 25 Jun 2024 19:24:35 +0200 Subject: [PATCH 45/57] window-list: Don't use homogeneous layout We want all buttons in the window list to have the same size, but that's already achieved via max/natural-width in the CSS. Not enforcing the equal size via the layout manager will allow buttons to temporarily have a different size when we start animating additions and removals. Part-of: --- extensions/window-list/extension.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index fc60a4de..7d005f0f 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -729,22 +729,15 @@ class WindowList extends St.Widget { let box = new St.BoxLayout({x_expand: true, y_expand: true}); this.add_child(box); - let layout = new Clutter.BoxLayout({homogeneous: true}); - this._windowList = new St.Widget({ + this._windowList = new St.BoxLayout({ style_class: 'window-list', reactive: true, - layout_manager: layout, x_align: Clutter.ActorAlign.START, x_expand: true, y_expand: true, }); box.add_child(this._windowList); - this._windowList.connect('style-changed', () => { - let node = this._windowList.get_theme_node(); - let spacing = node.get_length('spacing'); - this._windowList.layout_manager.spacing = spacing; - }); this._windowList.connect('scroll-event', this._onScrollEvent.bind(this)); let indicatorsBox = new St.BoxLayout({x_align: Clutter.ActorAlign.END}); From 7eb00e350ecd30c2693c4ba2ba4aa2580a52ed1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 18 Jun 2024 18:55:05 +0200 Subject: [PATCH 46/57] window-list: Don't hide window button while unmanaging This will allow to animate the transition. Part-of: --- extensions/window-list/extension.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 7d005f0f..c2fee283 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -395,9 +395,11 @@ class WindowButton extends BaseButton { super(perMonitor, monitorIndex); this.metaWindow = metaWindow; + this._unmanaging = false; metaWindow.connectObject( 'notify::skip-taskbar', () => this._updateVisibility(), 'workspace-changed', () => this._updateVisibility(), + 'unmanaging', () => (this._unmanaging = true), this); this._updateVisibility(); @@ -449,6 +451,9 @@ class WindowButton extends BaseButton { } _updateVisibility() { + if (this._unmanaging) + return; + this.visible = this._isWindowVisible(this.metaWindow); } From 039c66e7b7c1283549fa1eed3004fabed1a20711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 18 Jun 2024 18:59:38 +0200 Subject: [PATCH 47/57] window-list: Animate buttons in and out Buttons are currently added and removed from the list without any transitions, which gives the list a "jumpy" feel. Instead, do what we do elsewhere and smoothly animate additions and removals by re-using the dash's ItemContainer class. Part-of: --- extensions/window-list/extension.js | 34 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index c2fee283..0fd65f5c 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -19,6 +19,7 @@ import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/ex 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 {DashItemContainer} from 'resource:///org/gnome/shell/ui/dash.js'; import {WorkspaceIndicator} from './workspaceIndicator.js'; @@ -172,7 +173,7 @@ class WindowTitle extends St.BoxLayout { } } -class BaseButton extends St.Button { +class BaseButton extends DashItemContainer { static { GObject.registerClass({ GTypeFlags: GObject.TypeFlags.ABSTRACT, @@ -186,12 +187,15 @@ class BaseButton extends St.Button { } constructor(perMonitor, monitorIndex) { - super({ + super(); + + this._button = new St.Button({ style_class: 'window-button', can_focus: true, x_expand: true, button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, }); + this.setChild(this._button); this._perMonitor = perMonitor; this._monitorIndex = monitorIndex; @@ -199,7 +203,7 @@ class BaseButton extends St.Button { this.connect('notify::allocation', this._updateIconGeometry.bind(this)); - this.connect('clicked', this._onClicked.bind(this)); + this._button.connect('clicked', this._onClicked.bind(this)); this.connect('destroy', this._onDestroy.bind(this)); this.connect('popup-menu', this._onPopupMenu.bind(this)); @@ -405,7 +409,7 @@ class WindowButton extends BaseButton { this._updateVisibility(); this._windowTitle = new WindowTitle(this.metaWindow); - this.set_child(this._windowTitle); + this._button.set_child(this._windowTitle); this.label_actor = this._windowTitle.label_actor; this._contextMenu = new WindowContextMenu(this, this.metaWindow); @@ -537,7 +541,7 @@ class AppButton extends BaseButton { this._updateVisibility(); let stack = new St.Widget({layout_manager: new Clutter.BinLayout()}); - this.set_child(stack); + this._button.set_child(stack); this._singleWindowTitle = new St.Bin({ x_expand: true, @@ -825,7 +829,7 @@ class WindowList extends St.Widget { this._windowSignals = new Map(); global.display.connectObject( - 'window-created', (dsp, win) => this._addWindow(win), this); + 'window-created', (dsp, win) => this._addWindow(win, true), this); Main.xdndHandler.connectObject( 'drag-begin', () => this._monitorDrag(), @@ -942,14 +946,14 @@ class WindowList extends St.Widget { w2.metaWindow.get_stable_sequence(); }); for (let i = 0; i < windows.length; i++) - this._addWindow(windows[i].metaWindow); + this._addWindow(windows[i].metaWindow, false); } else { let apps = this._appSystem.get_running().sort((a1, a2) => { return _getAppStableSequence(a1) - _getAppStableSequence(a2); }); for (let i = 0; i < apps.length; i++) - this._addApp(apps[i]); + this._addApp(apps[i], false); } } @@ -963,26 +967,26 @@ class WindowList extends St.Widget { return; if (app.state === Shell.AppState.RUNNING) - this._addApp(app); + this._addApp(app, true); else if (app.state === Shell.AppState.STOPPED) this._removeApp(app); } - _addApp(app) { + _addApp(app, animate) { let button = new AppButton(app, this._perMonitor, this._monitor.index); this._settings.bind('display-all-workspaces', button, 'ignore-workspace', Gio.SettingsBindFlags.GET); this._windowList.add_child(button); + button.show(animate); } _removeApp(app) { let children = this._windowList.get_children(); let child = children.find(c => c.app === app); - if (child) - child.destroy(); + child?.animateOutAndDestroy(); } - _addWindow(win) { + _addWindow(win, animate) { if (!this._grouped) this._checkGrouping(); @@ -1000,6 +1004,7 @@ class WindowList extends St.Widget { this._settings.bind('display-all-workspaces', button, 'ignore-workspace', Gio.SettingsBindFlags.GET); this._windowList.add_child(button); + button.show(animate); } _removeWindow(win) { @@ -1016,8 +1021,7 @@ class WindowList extends St.Widget { let children = this._windowList.get_children(); let child = children.find(c => c.metaWindow === win); - if (child) - child.destroy(); + child?.animateOutAndDestroy(); } _monitorDrag() { From 0554a8e97d0607ef2a7ed61463b18347e3018927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 18 Jun 2024 20:08:56 +0200 Subject: [PATCH 48/57] window-list: Replace custom tooltip implementation DashItemContainer already has support for showing a tooltip-like label, so now that we use that for animating items, we can use it for tooltips as well. Part-of: --- extensions/window-list/extension.js | 93 ++++++----------------------- 1 file changed, 19 insertions(+), 74 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 0fd65f5c..bea14b05 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -26,9 +26,6 @@ import {WorkspaceIndicator} from './workspaceIndicator.js'; const ICON_TEXTURE_SIZE = 24; const DND_ACTIVATE_TIMEOUT = 500; -const TOOLTIP_OFFSET = 6; -const TOOLTIP_ANIMATION_TIME = 150; - const GroupingMode = { NEVER: 0, AUTO: 1, @@ -197,6 +194,13 @@ class BaseButton extends DashItemContainer { }); this.setChild(this._button); + this._button.connect('notify::hover', () => { + if (this._button.hover) + this.showLabel(); + else + this.hideLabel(); + }); + this._perMonitor = perMonitor; this._monitorIndex = monitorIndex; this._ignoreWorkspace = false; @@ -220,12 +224,6 @@ class BaseButton extends DashItemContainer { this._windowEnteredOrLeftMonitor.bind(this), this); } - - this._tooltip = new Tooltip(this, { - style_class: 'dash-label', - visible: false, - }); - Main.uiGroup.add_child(this._tooltip); } get active() { @@ -248,6 +246,18 @@ class BaseButton extends DashItemContainer { this._updateVisibility(); } + showLabel() { + const [, , preferredTitleWidth] = this.label_actor.get_preferred_size(); + const maxTitleWidth = this.label_actor.allocation.get_width(); + const isTitleFullyShown = preferredTitleWidth <= maxTitleWidth; + + const labelText = isTitleFullyShown + ? '' : this.label_actor.text; + + this.setLabelText(labelText); + super.showLabel(); + } + _setLongPressTimeout() { if (this._longPressTimeoutId) return; @@ -386,7 +396,6 @@ class BaseButton extends DashItemContainer { } _onDestroy() { - this._tooltip.destroy(); } } @@ -1165,67 +1174,3 @@ export default class WindowListExtension extends Extension { return this._windowLists.some(list => list.contains(actor)); } } - -class Tooltip extends St.Label { - static { - GObject.registerClass(this); - } - - constructor(widget, params) { - super(params); - - this._widget = widget; - - this._widget.connect('notify::hover', () => { - if (this._widget.hover) - this.open(); - else - this.close(); - }); - } - - open() { - const buttonTitleWidget = this._widget.label_actor; - const [, , preferredTitleWidth] = buttonTitleWidget.get_preferred_size(); - const maxTitleWidth = buttonTitleWidget.allocation.get_width(); - const isTitleFullyShown = preferredTitleWidth <= maxTitleWidth; - - if (isTitleFullyShown) - return; - - this.set({ - text: this._widget.label_actor.get_text(), - visible: true, - opacity: 0, - }); - - const [stageX, stageY] = this._widget.get_transformed_position(); - const thumbWidth = this._widget.allocation.get_width(); - const tipWidth = this.width; - const tipHeight = this.height; - const xOffset = Math.floor((thumbWidth - tipWidth) / 2); - const monitor = Main.layoutManager.findMonitorForActor(this); - const x = Math.clamp( - stageX + xOffset, - monitor.x, - monitor.x + monitor.width - tipWidth); - const y = stageY - tipHeight - TOOLTIP_OFFSET; - this.set_position(x, y); - - this.ease({ - opacity: 255, - duration: TOOLTIP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this.visible = this._widget.hover), - }); - } - - close() { - this.ease({ - opacity: 0, - duration: TOOLTIP_ANIMATION_TIME, - mode: Clutter.AnimationMode.EASE_OUT_QUAD, - onComplete: () => (this.visible = this._widget.hover), - }); - } -} From c302db754541aebcbe411adf5e5dca55b8ab1a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 29 Jun 2024 14:11:12 +0200 Subject: [PATCH 49/57] Bump version to 47.alpha Update NEWS. --- NEWS | 17 +++++++++++++++++ meson.build | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 5a7c58f9..9f361b3d 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,20 @@ +47.alpha +======== +* Improve workspace previews in window-list and workspace-indicator + [Florian; !307, !316] +* apps-menu: Fix a11y of category labels [Florian; !319] +* window-list: Fix long-press support [Florian; !320] +* window-list: Animate transitions [Florian; !325] +* Misc. bug fixes and cleanups [Florian; !315, !321, !324] + +Contributors: + Florian Müllner + +Translators: + Jordi Mas i Hernandez [ca], Martin [sl], Hugo Carvalho [pt], Jose Riha [sk], + Scrambled 777 [hi], Artur S0 [ru], Милош Поповић [sr], Yosef Or Boczko [he], + Balázs Úr [hu] + 46.1 ==== * screenshot-window-sizer: Add flathub-recommended size [Florian; !317] diff --git a/meson.build b/meson.build index 6d403512..536efe49 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later project('gnome-shell-extensions', - version: '46.1', + version: '47.alpha', meson_version: '>= 0.58.0', license: 'GPL2+' ) From c72b8b2122b088d3bdec4a2f7705fd3ce1797618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 13 Jul 2024 00:11:19 +0200 Subject: [PATCH 50/57] window-list: Fix .focused styling Commit 039c66e7b7c wrapped the button in a container to animate transitions, but didn't adjust the `.focused` styling to still apply to the button (where it is expected) rather than the wrapper. Fix that. Part-of: --- extensions/window-list/extension.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index bea14b05..3edbf8bf 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -358,9 +358,9 @@ class BaseButton extends DashItemContainer { _updateStyle() { if (this._isFocused()) - this.add_style_class_name('focused'); + this._button.add_style_class_name('focused'); else - this.remove_style_class_name('focused'); + this._button.remove_style_class_name('focused'); } _windowEnteredOrLeftMonitor(_metaDisplay, _monitorIndex, _metaWindow) { From cbbb2d2869d64537b6e64cee18ce282872e34eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sabri=20=C3=9Cnal?= Date: Fri, 19 Jul 2024 15:12:16 +0000 Subject: [PATCH 51/57] Update Turkish translation --- po/tr.po | 79 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 32 deletions(-) diff --git a/po/tr.po b/po/tr.po index d0a3acff..d53bf452 100644 --- a/po/tr.po +++ b/po/tr.po @@ -14,9 +14,9 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-02-13 13:35+0000\n" -"PO-Revision-Date: 2024-02-12 18:45+0300\n" -"Last-Translator: Sabri Ünal \n" +"POT-Creation-Date: 2024-04-29 15:27+0000\n" +"PO-Revision-Date: 2024-05-06 05:17+0300\n" +"Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" @@ -46,7 +46,7 @@ msgstr "Xorg üstünde GNOME Klasik" msgid "Favorites" msgstr "Gözdeler" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Uygulamalar" @@ -163,43 +163,43 @@ msgstr "Bellek istatistikleri" msgid "Swap stats" msgstr "Takas istatistikleri" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "Yükleme istatistikleri" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "İndirme istatistikleri" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "Sistem istatistikleri" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "Göster" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "İşlemci" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "Bellek" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "Takas" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "Yükle" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "İndir" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "Sistem Gözlemcisini Aç" @@ -231,47 +231,47 @@ msgstr "Tema adı" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "~/.themes/name/gnome-shell konumundan edinilen tema adı" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Kapat" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Önceki duruma getir" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Simge durumuna küçült" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Önceki duruma getir" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "En büyük duruma getir" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Tümünü simge durumuna küçült" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Tümünü önceki duruma getir" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Tümünü en büyük duruma getir" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Tümünü önceki duruma getir" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Tümünü kapat" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "Pencere Listesi" @@ -311,6 +311,10 @@ msgstr "" "Pencere listesinin tüm bağlı monitörlerde mi yoksa yalnızca birincil " "monitörde mi gösterileceğini belirtir." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Pencere listesinde çalışma alanı ön izlemelerini göster" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Pencere Kümeleme" @@ -331,20 +335,31 @@ msgstr "Pencereleri her zaman kümele" msgid "Show on all monitors" msgstr "Tüm monitörlerde göster" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "Çalışma Alanı Belirteci" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "Çalışma alanı ön izlemelerini göster" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Ön İzlemeleri Üst Çubukta Göster" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "Çalışma Alanı %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Çalışma Alanı Adları" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Çalışma Alanı Ekle" + +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Çalışma alanı ön izlemelerini üst çubukta göster" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Çalışma Alanı Belirteci" From 9e475cb2797b0ded40f32bca4a9cfdbfd7517f43 Mon Sep 17 00:00:00 2001 From: Chao-Hsiung Liao Date: Wed, 24 Jul 2024 10:26:12 +0000 Subject: [PATCH 52/57] Update Chinese (Taiwan) translation (cherry picked from commit b89a93a4fc38262addb88ec4470740b7f5c1cec3) --- po/zh_TW.po | 188 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 129 insertions(+), 59 deletions(-) diff --git a/po/zh_TW.po b/po/zh_TW.po index f5f0d58a..a91c8bc5 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -9,16 +9,17 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2022-05-06 11:44+0000\n" -"PO-Revision-Date: 2022-05-12 00:01+0800\n" -"Last-Translator: Cheng-Chia Tseng \n" -"Language-Team: Chinese \n" +"POT-Creation-Date: 2024-04-29 14:28+0000\n" +"PO-Revision-Date: 2024-07-24 10:25+0000\n" +"Last-Translator: Chao-Hsiung Liao \n" +"Language-Team: Chinese (Traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Weblate 5.6.2\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -37,19 +38,19 @@ msgstr "GNOME Classic 採行 Wayland" msgid "GNOME Classic on Xorg" msgstr "GNOME Classic 採行 Xorg" -#: extensions/apps-menu/extension.js:118 +#: extensions/apps-menu/extension.js:126 msgid "Favorites" msgstr "喜愛" -#: extensions/apps-menu/extension.js:379 -msgid "Applications" -msgstr "應用程式" +#: extensions/apps-menu/extension.js:397 +msgid "Apps" +msgstr "程式" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12 msgid "Application and workspace list" msgstr "應用程式與工作區列表" -#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7 +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13 msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" @@ -57,34 +58,34 @@ msgstr "" "字串的列表,每個都包含一個應用程式 id (桌面檔名稱),後面接著半形分號 \";\" 與" "工作區號碼" -#: extensions/auto-move-windows/prefs.js:152 +#: extensions/auto-move-windows/prefs.js:159 msgid "Workspace Rules" msgstr "工作區規則" -#: extensions/auto-move-windows/prefs.js:306 +#: extensions/auto-move-windows/prefs.js:314 msgid "Add Rule" msgstr "加入規則" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:126 -#: extensions/places-menu/placeDisplay.js:210 +#: extensions/drive-menu/extension.js:123 +#: extensions/places-menu/placeDisplay.js:218 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "裝置「%s」退出失敗:" -#: extensions/drive-menu/extension.js:145 +#: extensions/drive-menu/extension.js:142 msgid "Removable devices" msgstr "可移除式裝置" -#: extensions/drive-menu/extension.js:167 +#: extensions/drive-menu/extension.js:164 msgid "Open Files" msgstr "開啟檔案" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 msgid "Use more screen for windows" msgstr "視窗使用更多螢幕空間" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 msgid "" "Try to use more screen for placing window thumbnails by adapting to screen " "aspect ratio, and consolidating them further to reduce the bounding box. " @@ -93,11 +94,11 @@ msgstr "" "藉由適應螢幕長寬比來試著使用更多螢幕空間放置視窗縮圖,進一步聯合它們來減少邊" "界盒。這個設定僅適用於自然放置策略。" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 msgid "Place window captions on top" msgstr "在頂端放置視窗說明標題" -#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18 msgid "" "If true, place window captions on top the respective thumbnail, overriding " "shell default of placing it at the bottom. Changing this setting requires " @@ -106,47 +107,119 @@ msgstr "" "如果為真,在對映的縮圖頂端放置視窗說明標題,凌駕 Shell 將它放置在底部的預設" "值。變更這個設定值需要重新啟動 Shell 來套用效果。" +#: extensions/places-menu/extension.js:91 #: extensions/places-menu/extension.js:94 -#: extensions/places-menu/extension.js:97 msgid "Places" msgstr "位置" -#: extensions/places-menu/placeDisplay.js:49 +#: extensions/places-menu/placeDisplay.js:60 #, javascript-format msgid "Failed to launch “%s”" msgstr "無法啟動「%s」" -#: extensions/places-menu/placeDisplay.js:64 +#: extensions/places-menu/placeDisplay.js:75 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "無法掛載儲存區「%s」" -#: extensions/places-menu/placeDisplay.js:125 -#: extensions/places-menu/placeDisplay.js:148 +#: extensions/places-menu/placeDisplay.js:135 +#: extensions/places-menu/placeDisplay.js:158 msgid "Computer" msgstr "電腦" -#: extensions/places-menu/placeDisplay.js:336 +#: extensions/places-menu/placeDisplay.js:333 msgid "Home" msgstr "家目錄" -#: extensions/places-menu/placeDisplay.js:381 +#: extensions/places-menu/placeDisplay.js:378 msgid "Browse Network" msgstr "瀏覽網路" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" msgstr "循環螢幕擷圖大小" -#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18 msgid "Cycle Screenshot Sizes Backward" msgstr "往回循環螢幕擷圖大小" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 +#: extensions/system-monitor/extension.js:135 +msgid "CPU stats" +msgstr "CPU 狀態" + +#: extensions/system-monitor/extension.js:159 +msgid "Memory stats" +msgstr "記憶體狀態" + +#: extensions/system-monitor/extension.js:177 +msgid "Swap stats" +msgstr "置換區狀態" + +#: extensions/system-monitor/extension.js:336 +msgid "Upload stats" +msgstr "上傳狀態" + +#: extensions/system-monitor/extension.js:350 +msgid "Download stats" +msgstr "下載狀態" + +#: extensions/system-monitor/extension.js:364 +msgid "System stats" +msgstr "系統狀態" + +#: extensions/system-monitor/extension.js:412 +msgid "Show" +msgstr "顯示" + +#: extensions/system-monitor/extension.js:414 +msgid "CPU" +msgstr "CPU" + +#: extensions/system-monitor/extension.js:416 +msgid "Memory" +msgstr "記憶體" + +#: extensions/system-monitor/extension.js:418 +msgid "Swap" +msgstr "置換區" + +#: extensions/system-monitor/extension.js:420 +msgid "Upload" +msgstr "上傳" + +#: extensions/system-monitor/extension.js:422 +msgid "Download" +msgstr "下載" + +#: extensions/system-monitor/extension.js:427 +msgid "Open System Monitor" +msgstr "開啟系統監視器" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12 +msgid "Show CPU usage" +msgstr "顯示 CPU 使用率" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16 +msgid "Show memory usage" +msgstr "顯示記憶體使用率" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20 +msgid "Show swap usage" +msgstr "顯示置換區使用率" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24 +msgid "Show upload" +msgstr "顯示上傳" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28 +msgid "Show download" +msgstr "顯示下載" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11 msgid "Theme name" msgstr "主題名稱" -#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6 +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "主題的名稱,要從 ~/.themes/name/gnome-shell 載入" @@ -154,71 +227,71 @@ msgstr "主題的名稱,要從 ~/.themes/name/gnome-shell 載入" msgid "Close" msgstr "關閉" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "取消最小化" -#: extensions/window-list/extension.js:92 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "最小化" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "取消最大化" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "最大化" -#: extensions/window-list/extension.js:441 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "全部最小化" -#: extensions/window-list/extension.js:447 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "全部取消最小化" -#: extensions/window-list/extension.js:453 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "全部最大化" -#: extensions/window-list/extension.js:461 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "全部取消最大化" -#: extensions/window-list/extension.js:469 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "全部關閉" -#: extensions/window-list/extension.js:753 +#: extensions/window-list/extension.js:773 msgid "Window List" msgstr "視窗列表" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18 msgid "When to group windows" msgstr "何時群組視窗" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19 msgid "" "Decides when to group windows from the same application on the window list. " "Possible values are “never”, “auto” and “always”." msgstr "" "決定在視窗列表中何時群組視窗。可能的數值有「never」、「auto」、「always」。" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 #: extensions/window-list/prefs.js:79 msgid "Show windows from all workspaces" msgstr "顯示所有工作區的視窗" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 msgid "Whether to show windows from all workspaces or only the current one." msgstr "是否顯示所有工作區,還是僅顯示目前工作區的視窗。" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33 msgid "Show the window list on all monitors" msgstr "在所有螢幕顯示視窗列表" -#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34 msgid "" "Whether to show the window list on all connected monitors or only on the " "primary one." @@ -244,24 +317,27 @@ msgstr "永遠群組視窗" msgid "Show on all monitors" msgstr "顯示於所有螢幕" -#: extensions/window-list/workspaceIndicator.js:261 -#: extensions/workspace-indicator/extension.js:266 +#: extensions/window-list/workspaceIndicator.js:255 +#: extensions/workspace-indicator/extension.js:261 msgid "Workspace Indicator" msgstr "工作區指示器" -#: extensions/workspace-indicator/prefs.js:62 +#: extensions/workspace-indicator/prefs.js:69 #, javascript-format msgid "Workspace %d" msgstr "工作區 %d" -#: extensions/workspace-indicator/prefs.js:129 +#: extensions/workspace-indicator/prefs.js:136 msgid "Workspace Names" msgstr "工作區名稱" -#: extensions/workspace-indicator/prefs.js:255 +#: extensions/workspace-indicator/prefs.js:262 msgid "Add Workspace" msgstr "新增工作區" +#~ msgid "Applications" +#~ msgstr "應用程式" + #~ msgid "Application" #~ msgstr "應用程式" @@ -342,12 +418,6 @@ msgstr "新增工作區" #~ "功能。\n" #~ "不過,它可以讓您自訂歡迎訊息。" -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "Memory" -#~ msgstr "記憶體" - #~ msgid "GNOME Shell Classic" #~ msgstr "GNOME Shell Classic" From 8d06bc8b645aaebee5feb38236cb8d295ffe950e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 31 Jul 2024 15:47:20 +0200 Subject: [PATCH 53/57] ci: Bump image node occasionally fails with an "Illegal instruction" error, which hopefully has been fixed by a package update. Part-of: --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index df97d556..96d30812 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,7 +16,7 @@ stages: - deploy default: - image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/40:2024-02-23.0 + image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/40:2024-07-11.0 # Cancel jobs if newer commits are pushed to the branch interruptible: true # Auto-retry jobs in case of infra failures From e28215f38fef2320dd801f1d64eb408be664f462 Mon Sep 17 00:00:00 2001 From: Jakub Steiner Date: Tue, 16 Jul 2024 09:40:53 +0200 Subject: [PATCH 54/57] window-list: Update styling - Contemporary look. Fewer borders, thinner outlines for workspace indicators - Lacks the designed unfocused window separators. - Relies on https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/328 Fixes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/421 Part-of: --- extensions/window-list/stylesheet-dark.css | 22 ++++---- extensions/window-list/stylesheet-light.css | 55 ++++++++++++------- .../workspace-indicator/stylesheet-dark.css | 4 +- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index 9e024f2c..b9087971 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -34,8 +34,8 @@ } .window-button > StWidget { - color: #bbb; - background-color: #1d1d1d; + color: #fff; + background-color: transparent; border-radius: 4px; padding: 3px 6px 1px; transition: 100ms ease; @@ -47,25 +47,25 @@ } .window-button:hover > StWidget { - color: #fff; background-color: #303030; } .window-button:active > StWidget, .window-button:focus > StWidget { - color: #fff; - background-color: #3f3f3f; + background-color: st-lighten(#303030, 5%); } .window-button.focused > StWidget { - color: #fff; - background-color: #3f3f3f; + background-color: #5b5b5b; } -.window-button.focused:active > StWidget { - color: #fff; - background-color: #3f3f3f; -} + .window-button.focused:hover > StWidget { + background-color: st-lighten(#5b5b5b, 5%); + } + + .window-button.focused:active > StWidget { + background-color: st-lighten(#5b5b5b, 10%); + } .window-button.minimized > StWidget { color: #666; diff --git a/extensions/window-list/stylesheet-light.css b/extensions/window-list/stylesheet-light.css index 93a96581..375fd1bf 100644 --- a/extensions/window-list/stylesheet-light.css +++ b/extensions/window-list/stylesheet-light.css @@ -15,13 +15,10 @@ } .bottom-panel .window-button > StWidget { - color: #2e3436; - background-color: #eee; border-radius: 3px; padding: 3px 6px 1px; box-shadow: none; text-shadow: none; - border: 1px solid rgba(0,0,0,0.2); } .bottom-panel .window-button > StWidget { @@ -29,25 +26,43 @@ max-width: 18.75em; } - .bottom-panel .window-button:hover > StWidget { - background-color: #f9f9f9; + .window-button > StWidget { + color: #000; + background-color: transparent; +} + +.window-button > StWidget { + -st-natural-width: 18.75em; + max-width: 18.75em; +} + +.window-button:hover > StWidget { + background-color: st-darken(#eee,5%); +} + +.window-button:active > StWidget, +.window-button:focus > StWidget { + background-color: st-darken(#eee, 10%); +} + +.window-button.focused > StWidget { + background-color: st-darken(#eee,15%); +} + + .window-button.focused:hover > StWidget { + background-color: st-darken(#eee, 20%); } - .bottom-panel .window-button:active > StWidget, - .bottom-panel .window-button:focus > StWidget { - box-shadow: inset 0 1px 3px rgba(0,0,0,0.1); + .window-button.focused:active > StWidget { + background-color: st-darken(#eee, 25%); } - .bottom-panel .window-button.focused > StWidget { - background-color: #ccc; - box-shadow: inset 0 1px 3px rgba(0,0,0,0.1); - } +.window-button.minimized > StWidget { + color: #aaa; + background-color: #f9f9f9; +} - .bottom-panel .window-button.focused:hover > StWidget { - background-color: #e9e9e9; - } - - .bottom-panel .window-button.minimized > StWidget { - color: #888; - box-shadow: none; - } +.window-button.minimized:active > StWidget { + color: #aaa; + background-color: #f9f9f9; +} diff --git a/extensions/workspace-indicator/stylesheet-dark.css b/extensions/workspace-indicator/stylesheet-dark.css index b4a716b8..f87770da 100644 --- a/extensions/workspace-indicator/stylesheet-dark.css +++ b/extensions/workspace-indicator/stylesheet-dark.css @@ -33,7 +33,7 @@ .workspace-indicator-menu .workspace, .workspace-indicator .workspace { - border: 2px solid transparent; + border: 1px solid transparent; border-radius: 4px; background-color: #3f3f3f; } @@ -49,7 +49,7 @@ .workspace-indicator-menu .workspace.active, .workspace-indicator .workspace.active { - border-color: #9f9f9f; + border-color: #fff; } .workspace-indicator-window-preview { From 1e25fc1b5a6481b77e2c236df7ed152959488ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 16 Nov 2018 22:48:56 +0100 Subject: [PATCH 55/57] status-icons: Add new extension Based on an original "top-icons" extension by Adel Gadllah that is no longer maintained. The code has been heavily simplified and modernised, and adapted to integrate into the top bar more seemlessly. Part-of: --- extensions/status-icons/extension.js | 91 ++++++++++++++++++++++++ extensions/status-icons/meson.build | 9 +++ extensions/status-icons/metadata.json.in | 10 +++ meson.build | 1 + 4 files changed, 111 insertions(+) create mode 100644 extensions/status-icons/extension.js create mode 100644 extensions/status-icons/meson.build create mode 100644 extensions/status-icons/metadata.json.in diff --git a/extensions/status-icons/extension.js b/extensions/status-icons/extension.js new file mode 100644 index 00000000..c28f1386 --- /dev/null +++ b/extensions/status-icons/extension.js @@ -0,0 +1,91 @@ +// SPDX-FileCopyrightText: 2018 Adel Gadllah +// SPDX-FileCopyrightText: 2018 Florian Müllner +// +// SPDX-License-Identifier: GPL-2.0-or-later + +import Clutter from 'gi://Clutter'; +import Shell from 'gi://Shell'; +import St from 'gi://St'; + +import * as Main from 'resource:///org/gnome/shell/ui/main.js'; +import {Button as PanelButton} from 'resource:///org/gnome/shell/ui/panelMenu.js'; + +const PANEL_ICON_SIZE = 16; + +const STANDARD_TRAY_ICON_IMPLEMENTATIONS = [ + 'bluetooth-applet', + 'gnome-sound-applet', + 'nm-applet', + 'gnome-power-manager', + 'keyboard', + 'a11y-keyboard', + 'kbd-scrolllock', + 'kbd-numlock', + 'kbd-capslock', + 'ibus-ui-gtk', +]; + +export default class SysTray { + constructor() { + this._icons = new Map(); + this._tray = null; + } + + _onTrayIconAdded(o, icon) { + let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : ''; + if (STANDARD_TRAY_ICON_IMPLEMENTATIONS.includes(wmClass)) + return; + + let button = new PanelButton(0.5, null, true); + + let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; + let iconSize = PANEL_ICON_SIZE * scaleFactor; + + icon.set({ + width: iconSize, + height: iconSize, + x_align: Clutter.ActorAlign.CENTER, + y_align: Clutter.ActorAlign.CENTER, + }); + + let iconBin = new St.Widget({ + layout_manager: new Clutter.BinLayout(), + style_class: 'system-status-icon', + }); + iconBin.add_child(icon); + button.add_child(iconBin); + + this._icons.set(icon, button); + + button.connect('button-release-event', + (actor, event) => icon.click(event)); + button.connect('key-press-event', + (actor, event) => icon.click(event)); + + const role = `${icon}`; + Main.panel.addToStatusArea(role, button); + } + + _onTrayIconRemoved(o, icon) { + const button = this._icons.get(icon); + button?.destroy(); + this._icons.delete(icon); + } + + enable() { + this._tray = new Shell.TrayManager(); + this._tray.connect('tray-icon-added', + this._onTrayIconAdded.bind(this)); + this._tray.connect('tray-icon-removed', + this._onTrayIconRemoved.bind(this)); + this._tray.manage_screen(Main.panel); + } + + disable() { + this._icons.forEach(button => button.destroy()); + this._icons.clear(); + + this._tray.unmanage_screen(); + this._tray = null; + } +} diff --git a/extensions/status-icons/meson.build b/extensions/status-icons/meson.build new file mode 100644 index 00000000..b30272ad --- /dev/null +++ b/extensions/status-icons/meson.build @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: 2018 Florian Müllner +# +# SPDX-License-Identifier: GPL-2.0-or-later + +extension_data += configure_file( + input: metadata_name + '.in', + output: metadata_name, + configuration: metadata_conf +) diff --git a/extensions/status-icons/metadata.json.in b/extensions/status-icons/metadata.json.in new file mode 100644 index 00000000..57c77e4c --- /dev/null +++ b/extensions/status-icons/metadata.json.in @@ -0,0 +1,10 @@ +{ +"extension-id": "@extension_id@", +"uuid": "@uuid@", +"settings-schema": "@gschemaname@", +"gettext-domain": "@gettext_domain@", +"name": "Status Icons", +"description": "Show status icons in the top bar", +"shell-version": [ "@shell_current@" ], +"url": "@url@" +} diff --git a/meson.build b/meson.build index 536efe49..ced996c7 100644 --- a/meson.build +++ b/meson.build @@ -42,6 +42,7 @@ default_extensions += [ 'drive-menu', 'light-style', 'screenshot-window-sizer', + 'status-icons', 'system-monitor', 'windowsNavigator', 'workspace-indicator' From 017c6470b9a6618a1a95454a651e0ab1bd85d306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 2 Jul 2024 19:04:10 +0200 Subject: [PATCH 56/57] workspace-indicator: Re-fittsify workspace previews For the window-list extension, it is important that the workspace previews extend to the bottom edge for easier click targets. That broke while merging the code with the workspace-indicator, fix it again by moving the padding from the parent box into the thumbnail children. Part-of: --- .../workspace-indicator/stylesheet-dark.css | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/stylesheet-dark.css b/extensions/workspace-indicator/stylesheet-dark.css index f87770da..e70352f8 100644 --- a/extensions/workspace-indicator/stylesheet-dark.css +++ b/extensions/workspace-indicator/stylesheet-dark.css @@ -18,7 +18,6 @@ } .workspace-indicator .workspaces-box { - padding: 5px; spacing: 3px; } @@ -27,6 +26,20 @@ spacing: 6px; } +.workspace-indicator .workspace-box { + padding-top: 5px; + padding-bottom: 5px; +} + +.workspace-indicator StButton:first-child:ltr > .workspace-box, +.workspace-indicator StButton:last-child:rtl > .workspace-box { + padding-left: 5px; +} +.workspace-indicator StButton:last-child:ltr > .workspace-box, +.workspace-indicator StButton:first-child:rtl > .workspace-box { + padding-right: 5px; +} + .workspace-indicator-menu .workspace-box { spacing: 6px; } From 8a9aa6a818e4f3070403b908dfb9fc2f21fec3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 3 Aug 2024 19:51:04 +0200 Subject: [PATCH 57/57] Bump version to 47.beta Update NEWS. --- NEWS | 12 ++++++++++++ meson.build | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 9f361b3d..33162594 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +47.beta +======= +* window-list: Modernize styling [Jakub; !330] +* Include "status-icons" extension [Florian; !194] +* Misc. bug fixes and cleanups [Florian; !328, !331, !327] + +Contributors: + Florian Müllner, Jakub Steiner + +Translators: + Sabri Ünal [tr], Chao-Hsiung Liao [zh_TW] + 47.alpha ======== * Improve workspace previews in window-list and workspace-indicator diff --git a/meson.build b/meson.build index ced996c7..9574fd3b 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later project('gnome-shell-extensions', - version: '47.alpha', + version: '47.beta', meson_version: '>= 0.58.0', license: 'GPL2+' )