diff --git a/NEWS b/NEWS index 829f2b3d..34d13c1d 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,22 @@ +3.31.92 +======= +* Misc. bug fixes and cleanups [Florian; !57, !58, !59, !60] + +Contributors: + Florian Müllner + +3.31.91 +======= +* apps-menu: Remove outdated legacy-tray handling [Florian; !53] +* user-theme: Allow using XDG user data dir [Tomasz; !55] +* Misc. bug fixes and cleanups [Florian; !52, !54, !56] + +Contributors: + Tomasz Gąsior, Florian Müllner + +Translators: + Matej Urbančič [sl], Gun Chleoc [gd] + 3.31.90 ======= * Misc. bug fixes and cleanups [Florian; !49, !50, !51] diff --git a/data/gnome-shell-sass/_colors.scss b/data/gnome-shell-sass/_colors.scss index d1fa4b6f..447ad70b 100644 --- a/data/gnome-shell-sass/_colors.scss +++ b/data/gnome-shell-sass/_colors.scss @@ -2,26 +2,23 @@ // it gets @if ed depending on $variant -$base_color: if($variant =='light', #ffffff, #292929); -$bg_color: if($variant =='light', #ededed, #393f3f); -$fg_color: if($variant =='light', #2e3436, #eeeeec); +$base_color: if($variant == 'light', #ffffff, lighten(desaturate(#241f31, 20%), 2%)); +$bg_color: if($variant == 'light', #f6f5f4, desaturate(#3d3846, 10%)); +$fg_color: if($variant == 'light', #2e3436, #eeeeec); $selected_fg_color: #ffffff; -$selected_bg_color: if($variant == 'light', #4a90d9, darken(#4a90d9,20%)); -$selected_borders_color: if($variant=='light', darken($selected_bg_color, 30%), - darken($selected_bg_color, 20%)); -$borders_color: if($variant =='light', darken($bg_color,30%), darken($bg_color,12%)); -$borders_edge: if($variant =='light', white, transparentize($fg_color, 0.9)); -$link_color: if($variant == 'light', darken($selected_bg_color,10%), - lighten($selected_bg_color,20%)); -$link_visited_color: if($variant == 'light', darken($selected_bg_color,20%), - lighten($selected_bg_color,10%)); +$selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%)); +$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%)); +$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%)); +$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93)); +$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%)); +$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%)); $top_hilight: $borders_edge; $warning_color: #f57900; $error_color: #cc0000; -$success_color: if($variant =='light', #73d216, darken(#73d216,10%)); -$destructive_color: if($variant =='light', #ef2929, darken(#ef2929,10%)); +$success_color: if($variant == 'light', #33d17a, darken(#33d17a, 10%)); +$destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%)); $osd_fg_color: #eeeeec; $osd_bg_color: #2e3436; diff --git a/data/gnome-shell-sass/_common.scss b/data/gnome-shell-sass/_common.scss index 06c50d1d..9dedbdcd 100644 --- a/data/gnome-shell-sass/_common.scss +++ b/data/gnome-shell-sass/_common.scss @@ -267,8 +267,7 @@ StScrollBar { } .end-session-dialog-logout-icon { - //border: 2px solid #8b8b8b; - border-radius: 5px; + border-radius: 99px; width: 48px; height: 48px; background-size: contain; @@ -428,7 +427,7 @@ StScrollBar { } .polkit-dialog-user-icon { - border-radius: 5px; + border-radius: 99px; background-size: contain; width: 48px; height: 48px; @@ -508,6 +507,7 @@ StScrollBar { .popup-menu-arrow { } //defined globally in the TOP BAR .popup-sub-menu { + padding-bottom: 1px; background-color: darken($bg_color,2%); box-shadow: inset 0 -1px 0px lighten($borders_color,5%); } @@ -729,9 +729,7 @@ StScrollBar { /* TOP BAR */ #panel { - background-color: rgba(0, 0, 0, 0.35); - /* transition from solid to transparent */ - transition-duration: 500ms; + background-color: black; font-weight: bold; height: 1.86em; font-feature-settings: "tnum"; @@ -748,7 +746,7 @@ StScrollBar { .panel-corner { -panel-corner-radius: $panel-corner-radius; - -panel-corner-background-color: rgba(0, 0, 0, 0.35); + -panel-corner-background-color: black; -panel-corner-border-width: 2px; -panel-corner-border-color: transparent; @@ -767,9 +765,7 @@ StScrollBar { -natural-hpadding: 12px; -minimum-hpadding: 6px; font-weight: bold; - color: #eee; - text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); - transition-duration: 100ms; + color: #ccc; .app-menu-icon { -st-icon-style: symbolic; @@ -778,21 +774,8 @@ StScrollBar { //dimensions of the icon are hardcoded } - .system-status-icon, - .app-menu-icon > StIcon, - .popup-menu-arrow { - icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); - } - &:hover { color: lighten($fg_color, 10%); - text-shadow: 0px 1px 6px rgba(0, 0, 0, 1); - - .system-status-icon, - .app-menu-icon > StIcon, - .popup-menu-arrow { - icon-shadow: 0px 1px 6px rgba(0, 0, 0, 1); - } } &:active, &:overview, &:focus, &:checked { @@ -801,8 +784,6 @@ StScrollBar { background-color: rgba(0, 0, 0, 0.01); box-shadow: inset 0 -2px 0px lighten($selected_bg_color,5%); color: lighten($fg_color,10%); - - & > .system-status-icon { icon-shadow: black 0 2px 2px; } } .system-status-icon { icon-size: 1.09em; padding: 0 5px; } @@ -827,31 +808,6 @@ StScrollBar { .screencast-indicator { color: $warning_color; } .remote-access-indicator { color: $warning_color; } - - &.solid { - background-color: black; - /* transition from transparent to solid */ - transition-duration: 300ms; - - .panel-corner { - -panel-corner-background-color: black; - } - - .panel-button { - color: #ccc; - text-shadow: none; - - &:hover, &:active, &:overview, &:focus, &:checked { - color: lighten($fg_color, 10%); - } - } - - .system-status-icon, - .app-menu-icon > StIcon, - .popup-menu-arrow { - icon-shadow: none; - } - } } // calendar popover @@ -922,14 +878,47 @@ StScrollBar { font-weight: bold; } - .world-clocks-grid { + .weather-header.location { + font-weight: normal; + font-size: 0.9em; + } + + .world-clocks-grid, + .weather-grid { spacing-rows: 0.4em; + spacing-columns: 0.8em; } .weather-box { spacing: 0.4em; } + .world-clocks-city { + font-weight: bold; + font-size: 0.9em; + } + + .world-clocks-time { + color: darken($fg_color,20%); + font-feature-settings: "tnum"; + font-size: 1.2em; + } + + .world-clocks-timezone { + color: darken($fg_color,40%); + font-feature-settings: "tnum"; + font-size: 0.9em; + } + + .weather-forecast-icon { + icon-size: 2.18em; + } + + .weather-forecast-time { + color: darken($fg_color,40%); + font-size: 0.8em; + } + .calendar-month-label { color: darken($fg_color,5%); font-weight: bold; @@ -938,7 +927,6 @@ StScrollBar { } .pager-button { - color: white; background-color: transparent; width: 32px; border-radius: 4px; @@ -946,13 +934,8 @@ StScrollBar { &:active { background-color: transparentize($bg_color,0.95); } } - .calendar-change-month-back { //arrow back - background-image: url("resource:///org/gnome/shell/theme/calendar-arrow-left.svg"); - &:rtl { background-image: url("resource:///org/gnome/shell/theme/calendar-arrow-right.svg"); } - } - .calendar-change-month-forward { //arrow foreward - background-image: url("resource:///org/gnome/shell/theme/calendar-arrow-right.svg"); - &:rtl { background-image: url("resource:///org/gnome/shell/theme/calendar-arrow-left.svg"); } + .calendar-change-month-back StIcon, .calendar-change-month-forward StIcon { // arrows + icon-size: 1.09em; } .calendar-day-base { @@ -1090,18 +1073,14 @@ StScrollBar { background-color: $bg_color; border: 2px solid $bg_color; border-radius: 2px; - icon-size: 16px; - padding: 8px; } + icon-size: 32px !important; + padding: 6px; } } // a little unstructured mess: - .system-switch-user-submenu-icon.user-icon { - icon-size: 20px; - padding: 0 2px; - } - .system-switch-user-submenu-icon.default-icon { + .system-switch-user-submenu-icon { icon-size: 16px; padding: 0 4px; } @@ -1113,6 +1092,11 @@ StScrollBar { .label-shadow { color: transparent; } } + .app-menu, + .app-well-menu { + max-width: 27.25em; + } + .aggregate-menu { min-width: 21em; .popup-menu-icon { padding: 0 4px; } @@ -1142,17 +1126,16 @@ StScrollBar { & > StIcon { icon-size: 16px; } } -//Activities Ripples +// Activities Ripples .ripple-box { width: 52px; height: 52px; - background-image: url("resource:///org/gnome/shell/theme/corner-ripple-ltr.png"); - background-size: contain; + border-radius: 0 0 52px 0; // radius the size of the box give us the curve + background-color: lighten(transparentize($selected_bg_color, 0.7), 40%); + box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%); } -.ripple-box:rtl { - background-image: url("resource:///org/gnome/shell/theme/corner-ripple-rtl.png"); -} +.ripple-box:rtl { border-radius: 0 0 0 52px; } // just a simple change to the border radius position // not really top bar only .popup-menu-arrow { width: 16px; height: 16px; } @@ -1161,14 +1144,26 @@ StScrollBar { //close buttons .window-close { - background-image: url("resource:///org/gnome/shell/theme/close-window.svg"); - background-size: 32px; - height: 32px; - width: 32px; - -shell-close-overlap: 16px; + background-color: white; + border-radius: 24px; + border: 4px solid $selected_bg_color; + box-shadow: inset 0 -4px 0 0 transparentize($selected_bg_color, 0.5); + color: $selected_bg_color; + height: 24px; + width: 24px; + -shell-close-overlap: 14px; - &:hover { background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); } - &:active { background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); } + &:hover { + background-color: $selected_bg_color; + border-color: white; + color: white; + } + + &:active { + background-color: mix(white, $selected_bg_color, 75%); + border-color: $selected_bg_color; + color: $selected_bg_color; + } } /* NETWORK DIALOGS */ @@ -1289,6 +1284,8 @@ StScrollBar { .search-section-separator { height: 2px; background-color: rgba(255, 255, 255, 0.2); } + .search-section:last-child .search-section-separator { background-color: transparent; } + .list-search-result-content { spacing: 30px; } .list-search-result-title { color: darken($osd_fg_color,5%); spacing: 12px; } .list-search-result-description { color: transparentize(darken($osd_fg_color,15%), 0.5); } @@ -1447,15 +1444,17 @@ StScrollBar { padding: 15px 20px; .page-indicator-icon { - width: 18px; - height: 18px; - background-image: url(resource:///org/gnome/shell/theme/page-indicator-inactive.svg); + width: 12px; + height: 12px; + background-color: transparent; + border: 2px solid rgba(255, 255, 255, 0.4); + border-radius:12px; } - &:hover .page-indicator-icon { background-image: url(resource:///org/gnome/shell/theme/page-indicator-hover.svg); } - &:active .page-indicator-icon { background-image: url(resource:///org/gnome/shell/theme/page-indicator-active.svg); } + &:hover .page-indicator-icon { border-color: white; } + &:active .page-indicator-icon { border: none; margin: 2px; background-color:#fff; } &:checked .page-indicator-icon, - &:checked:active { background-image: url(resource:///org/gnome/shell/theme/page-indicator-checked.svg); } + &:checked:active { background-color: #fff;} } .no-frequent-applications-label { @extend %status_text; } @@ -1639,6 +1638,15 @@ StScrollBar { #keyboard { background-color: transparentize($osd_bg_color, 0.3); + + .page-indicator { + padding: 4px 4px; + + .page-indicator-icon { + width: 6px; + height: 6px + } + } } .key-container { @@ -1648,8 +1656,8 @@ StScrollBar { .keyboard-key { background-color: #393f3f; - min-height: 2em; - min-width: 2em; + min-height: 1.2em; + min-width: 1.2em; font-size: 16pt; border-radius: 3px; border: 1px solid #464d4d; @@ -1700,6 +1708,20 @@ StScrollBar { -boxpointer-gap: 5px; } +.emoji-page { + .keyboard-key { + background-color: transparent; + border: none; + } +} + +.emoji-panel { + .keyboard-key:latched { + border-color: #005684; + background-color: #006098; + } +} + // IBus Candidate Popup .candidate-popup-content { @@ -1734,13 +1756,11 @@ StScrollBar { /* Auth Dialogs & Screen Shield */ -.framed-user-icon { +.user-icon { background-size: contain; - border: 2px solid $osd_fg_color; color: $osd_fg_color; - border-radius: 3px; + border-radius: 99px; &:hover { - border-color: lighten($osd_fg_color,30%); color: lighten($osd_fg_color,30%); } } diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js index 845149af..d7ba570a 100644 --- a/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js @@ -1,20 +1,13 @@ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* exported init enable disable */ -const Atk = imports.gi.Atk; +const { + Atk, Clutter, Gio, GLib, GMenu, GObject, Gtk, Meta, Shell, St +} = imports.gi; const DND = imports.ui.dnd; -const GMenu = imports.gi.GMenu; -const GObject = imports.gi.GObject; -const Shell = imports.gi.Shell; -const St = imports.gi.St; -const Clutter = imports.gi.Clutter; const Main = imports.ui.main; -const Meta = imports.gi.Meta; const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; -const Gtk = imports.gi.Gtk; -const GLib = imports.gi.GLib; -const Gio = imports.gi.Gio; const Signals = imports.signals; const Gettext = imports.gettext.domain('gnome-shell-extensions'); @@ -29,11 +22,14 @@ const HORIZ_FACTOR = 5; const MENU_HEIGHT_OFFSET = 132; const NAVIGATION_REGION_OVERSHOOT = 50; +Gio._promisify(Gio._LocalFilePrototype, 'query_info_async', 'query_info_finish'); +Gio._promisify(Gio._LocalFilePrototype, 'set_attributes_async', 'set_attributes_finish'); + class ActivitiesMenuItem extends PopupMenu.PopupBaseMenuItem { constructor(button) { super(); this._button = button; - this.actor.add_child(new St.Label({ text: _("Activities Overview") })); + this.actor.add_child(new St.Label({ text: _('Activities Overview') })); } activate(event) { @@ -52,8 +48,11 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem { this._iconBin = new St.Bin(); this.actor.add_child(this._iconBin); - let appLabel = new St.Label({ text: app.get_name(), y_expand: true, - y_align: Clutter.ActorAlign.CENTER }); + let appLabel = new St.Label({ + text: app.get_name(), + y_expand: true, + y_align: Clutter.ActorAlign.CENTER + }); this.actor.add_child(appLabel); this.actor.label_actor = appLabel; @@ -74,13 +73,6 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem { return maybeStartDrag.call(draggable, event); return false; }; - - draggable.connect('drag-begin', () => { - Shell.util_set_hidden_from_pick(Main.legacyTray.actor, true); - }); - draggable.connect('drag-end', () => { - Shell.util_set_hidden_from_pick(Main.legacyTray.actor, false); - }); } activate(event) { @@ -126,7 +118,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { if (this._category) name = this._category.get_name(); else - name = _("Favorites"); + name = _('Favorites'); this.actor.add_child(new St.Label({ text: name })); this.actor.connect('motion-event', this._onMotionEvent.bind(this)); @@ -314,48 +306,32 @@ class DesktopTarget { return source._app.app_info; } - _touchFile(file) { - let queryFlags = Gio.FileQueryInfoFlags.NONE; - let ioPriority = GLib.PRIORITY_DEFAULT; - - let info = new Gio.FileInfo(); - info.set_attribute_uint64(Gio.FILE_ATTRIBUTE_TIME_ACCESS, - GLib.get_real_time()); - file.set_attributes_async (info, queryFlags, ioPriority, null, - (o, res) => { - try { - o.set_attributes_finish(res); - } catch (e) { - log(`Failed to update access time: ${e.message}`); - } - }); - } - - _markTrusted(file) { + async _markTrusted(file) { let modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE; let trustedAttr = 'metadata::trusted'; let queryFlags = Gio.FileQueryInfoFlags.NONE; let ioPriority = GLib.PRIORITY_DEFAULT; - file.query_info_async(modeAttr, queryFlags, ioPriority, null, - (o, res) => { - try { - let info = o.query_info_finish(res); - let mode = info.get_attribute_uint32(modeAttr) | 0o100; + try { + let info = await file.query_info_async(modeAttr, queryFlags, ioPriority, null); - info.set_attribute_uint32(modeAttr, mode); - info.set_attribute_string(trustedAttr, 'yes'); - file.set_attributes_async (info, queryFlags, ioPriority, null, - (o, res) => { - o.set_attributes_finish(res); + let mode = info.get_attribute_uint32(modeAttr) | 0o100; + info.set_attribute_uint32(modeAttr, mode); + info.set_attribute_string(trustedAttr, 'yes'); + await file.set_attributes_async(info, queryFlags, ioPriority, null); - // Hack: force nautilus to reload file info - this._touchFile(file); - }); - } catch (e) { - log(`Failed to mark file as trusted: ${e.message}`); - } - }); + // Hack: force nautilus to reload file info + info = new Gio.FileInfo(); + info.set_attribute_uint64(Gio.FILE_ATTRIBUTE_TIME_ACCESS, + GLib.get_real_time()); + try { + await file.set_attributes_async(info, queryFlags, ioPriority, null); + } catch (e) { + log(`Failed to update access time: ${e.message}`); + } + } catch (e) { + log(`Failed to mark file as trusted: ${e.message}`); + } } destroy() { @@ -414,9 +390,11 @@ class ApplicationsButton extends PanelMenu.Button { let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); - this._label = new St.Label({ text: _("Applications"), - y_expand: true, - y_align: Clutter.ActorAlign.CENTER }); + this._label = new St.Label({ + text: _('Applications'), + y_expand: true, + y_align: Clutter.ActorAlign.CENTER + }); hbox.add_child(this._label); hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); @@ -472,8 +450,10 @@ class ApplicationsButton extends PanelMenu.Button { } _createVertSeparator() { - let separator = new St.DrawingArea({ style_class: 'calendar-vertical-separator', - pseudo_class: 'highlighted' }); + let separator = new St.DrawingArea({ + style_class: 'calendar-vertical-separator', + pseudo_class: 'highlighted' + }); separator.connect('repaint', this._onVertSepRepaint.bind(this)); return separator; } @@ -485,12 +465,12 @@ class ApplicationsButton extends PanelMenu.Button { this._tree.disconnect(this._treeChangedId); this._tree = null; + let handler = Main.sessionMode.hasOverview ? + Main.overview.toggle.bind(Main.overview) : null; Main.wm.setCustomKeybindingHandler('panel-main-menu', Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, - Main.sessionMode.hasOverview ? - Main.overview.toggle.bind(Main.overview) : - null); + handler); this._desktopTarget.destroy(); } @@ -506,8 +486,8 @@ class ApplicationsButton extends PanelMenu.Button { _onMenuKeyPress(actor, event) { let symbol = event.get_key_symbol(); if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) { - let direction = symbol == Clutter.KEY_Left ? Gtk.DirectionType.LEFT - : Gtk.DirectionType.RIGHT; + let direction = symbol == Clutter.KEY_Left ? + Gtk.DirectionType.LEFT : Gtk.DirectionType.RIGHT; if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false)) return true; } @@ -544,7 +524,7 @@ class ApplicationsButton extends PanelMenu.Button { Main.wm.setCustomKeybindingHandler('panel-main-menu', Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW, - () => { this.menu.toggle(); }); + () => this.menu.toggle()); } _redisplay() { @@ -615,9 +595,12 @@ class ApplicationsButton extends PanelMenu.Button { this.menu.addMenuItem(section); this.mainBox = new St.BoxLayout({ vertical: false }); this.leftBox = new St.BoxLayout({ vertical: true }); - this.applicationsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false, - y_align: St.Align.START, - style_class: 'apps-menu vfade' }); + this.applicationsScrollBox = new St.ScrollView({ + x_fill: true, + y_fill: false, + y_align: St.Align.START, + style_class: 'apps-menu vfade' + }); this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); let vscroll = this.applicationsScrollBox.get_vscroll_bar(); vscroll.connect('scroll-start', () => { @@ -626,21 +609,30 @@ class ApplicationsButton extends PanelMenu.Button { vscroll.connect('scroll-stop', () => { this.menu.passEvents = false; }); - this.categoriesScrollBox = new St.ScrollView({ x_fill: true, y_fill: false, - y_align: St.Align.START, - style_class: 'vfade' }); + this.categoriesScrollBox = new St.ScrollView({ + x_fill: true, + y_fill: false, + y_align: St.Align.START, + style_class: 'vfade' + }); this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); vscroll = this.categoriesScrollBox.get_vscroll_bar(); - vscroll.connect('scroll-start', () => { this.menu.passEvents = true; }); - vscroll.connect('scroll-stop', () => { this.menu.passEvents = false; }); - this.leftBox.add(this.categoriesScrollBox, { expand: true, - x_fill: true, y_fill: true, - y_align: St.Align.START }); + vscroll.connect('scroll-start', () => this.menu.passEvents = true); + vscroll.connect('scroll-stop', () => this.menu.passEvents = false); + this.leftBox.add(this.categoriesScrollBox, { + expand: true, + x_fill: true, + y_fill: true, + y_align: St.Align.START + }); let activities = new ActivitiesMenuItem(this); - this.leftBox.add(activities.actor, { expand: false, - x_fill: true, y_fill: false, - y_align: St.Align.START }); + this.leftBox.add(activities.actor, { + expand: false, + x_fill: true, + y_fill: false, + y_align: St.Align.START + }); this.applicationsBox = new St.BoxLayout({ vertical: true }); this.applicationsScrollBox.add_actor(this.applicationsBox); @@ -648,8 +640,16 @@ class ApplicationsButton extends PanelMenu.Button { this.categoriesScrollBox.add_actor(this.categoriesBox); this.mainBox.add(this.leftBox); - this.mainBox.add(this._createVertSeparator(), { expand: false, x_fill: false, y_fill: true }); - this.mainBox.add(this.applicationsScrollBox, { expand: true, x_fill: true, y_fill: true }); + this.mainBox.add(this._createVertSeparator(), { + expand: false, + x_fill: false, + y_fill: true + }); + this.mainBox.add(this.applicationsScrollBox, { + expand: true, + x_fill: true, + y_fill: true + }); section.actor.add_actor(this.mainBox); } @@ -667,17 +667,19 @@ class ApplicationsButton extends PanelMenu.Button { let iter = root.iter(); let nextType; while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) { - if (nextType == GMenu.TreeItemType.DIRECTORY) { - let dir = iter.get_directory(); - if (!dir.get_is_nodisplay()) { - let categoryId = dir.get_menu_id(); - this.applicationsByCategory[categoryId] = []; - this._loadCategory(categoryId, dir); - if (this.applicationsByCategory[categoryId].length > 0) { - let categoryMenuItem = new CategoryMenuItem(this, dir); - this.categoriesBox.add_actor(categoryMenuItem.actor); - } - } + if (nextType != GMenu.TreeItemType.DIRECTORY) + continue; + + let dir = iter.get_directory(); + if (dir.get_is_nodisplay()) + continue; + + let categoryId = dir.get_menu_id(); + this.applicationsByCategory[categoryId] = []; + this._loadCategory(categoryId, dir); + if (this.applicationsByCategory[categoryId].length > 0) { + let categoryMenuItem = new CategoryMenuItem(this, dir); + this.categoriesBox.add_actor(categoryMenuItem.actor); } } @@ -706,22 +708,20 @@ class ApplicationsButton extends PanelMenu.Button { } _displayButtons(apps) { - if (apps) { - for (let i = 0; i < apps.length; i++) { - let app = apps[i]; - let item; - if (app instanceof Shell.App) - item = this._applicationsButtons.get(app); - else - item = new PopupMenu.PopupSeparatorMenuItem(); - if (!item) { - item = new ApplicationMenuItem(this, app); - item.setDragEnabled(this._desktopTarget.hasDesktop); - this._applicationsButtons.set(app, item); - } - if (!item.actor.get_parent()) - this.applicationsBox.add_actor(item.actor); + for (let i = 0; i < apps.length; i++) { + let app = apps[i]; + let item; + if (app instanceof Shell.App) + item = this._applicationsButtons.get(app); + else + item = new PopupMenu.PopupSeparatorMenuItem(); + if (!item) { + item = new ApplicationMenuItem(this, app); + item.setDragEnabled(this._desktopTarget.hasDesktop); + this._applicationsButtons.set(app, item); } + if (!item.actor.get_parent()) + this.applicationsBox.add_actor(item.actor); } } diff --git a/extensions/auto-move-windows/extension.js b/extensions/auto-move-windows/extension.js index 35979971..646156aa 100644 --- a/extensions/auto-move-windows/extension.js +++ b/extensions/auto-move-windows/extension.js @@ -125,9 +125,9 @@ function myCheckWorkspaces() { } // make sure the original method only removes empty workspaces at the end - keepAliveWorkspaces.forEach(ws => { ws._keepAliveId = 1; }); + keepAliveWorkspaces.forEach(ws => ws._keepAliveId = 1); prevCheckWorkspaces.call(this); - keepAliveWorkspaces.forEach(ws => { delete ws._keepAliveId; }); + keepAliveWorkspaces.forEach(ws => delete ws._keepAliveId); return false; } diff --git a/extensions/auto-move-windows/prefs.js b/extensions/auto-move-windows/prefs.js index e0aa3b37..f9c4699e 100644 --- a/extensions/auto-move-windows/prefs.js +++ b/extensions/auto-move-windows/prefs.js @@ -2,9 +2,7 @@ // Start apps on custom workspaces /* exported init buildPrefsWidget */ -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const Gtk = imports.gi.Gtk; +const { Gio, GObject, Gtk } = imports.gi; const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = Gettext.gettext; @@ -36,35 +34,48 @@ const Widget = GObject.registerClass({ this._changedPermitted = false; this._store = new Gtk.ListStore(); - this._store.set_column_types([Gio.AppInfo, GObject.TYPE_STRING, Gio.Icon, GObject.TYPE_INT, - Gtk.Adjustment]); + this._store.set_column_types([ + Gio.AppInfo, + GObject.TYPE_STRING, + Gio.Icon, + GObject.TYPE_INT, + Gtk.Adjustment + ]); let scrolled = new Gtk.ScrolledWindow({ shadow_type: Gtk.ShadowType.IN }); scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.add(scrolled); - this._treeView = new Gtk.TreeView({ model: this._store, - hexpand: true, vexpand: true }); + this._treeView = new Gtk.TreeView({ + model: this._store, + hexpand: true, + vexpand: true + }); this._treeView.get_selection().set_mode(Gtk.SelectionMode.SINGLE); - let appColumn = new Gtk.TreeViewColumn({ expand: true, sort_column_id: Columns.DISPLAY_NAME, - title: _("Application") }); + let appColumn = new Gtk.TreeViewColumn({ + expand: true, + sort_column_id: Columns.DISPLAY_NAME, + title: _('Application') + }); let iconRenderer = new Gtk.CellRendererPixbuf; appColumn.pack_start(iconRenderer, false); - appColumn.add_attribute(iconRenderer, "gicon", Columns.ICON); + appColumn.add_attribute(iconRenderer, 'gicon', Columns.ICON); let nameRenderer = new Gtk.CellRendererText; appColumn.pack_start(nameRenderer, true); - appColumn.add_attribute(nameRenderer, "text", Columns.DISPLAY_NAME); + appColumn.add_attribute(nameRenderer, 'text', Columns.DISPLAY_NAME); this._treeView.append_column(appColumn); - let workspaceColumn = new Gtk.TreeViewColumn({ title: _("Workspace"), - sort_column_id: Columns.WORKSPACE }); + let workspaceColumn = new Gtk.TreeViewColumn({ + title: _('Workspace'), + sort_column_id: Columns.WORKSPACE + }); let workspaceRenderer = new Gtk.CellRendererSpin({ editable: true }); workspaceRenderer.connect('edited', this._workspaceEdited.bind(this)); workspaceColumn.pack_start(workspaceRenderer, true); - workspaceColumn.add_attribute(workspaceRenderer, "adjustment", Columns.ADJUSTMENT); - workspaceColumn.add_attribute(workspaceRenderer, "text", Columns.WORKSPACE); + workspaceColumn.add_attribute(workspaceRenderer, 'adjustment', Columns.ADJUSTMENT); + workspaceColumn.add_attribute(workspaceRenderer, 'text', Columns.WORKSPACE); this._treeView.append_column(workspaceColumn); scrolled.add(this._treeView); @@ -73,13 +84,15 @@ const Widget = GObject.registerClass({ toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR); this.add(toolbar); - let newButton = new Gtk.ToolButton({ icon_name: 'bookmark-new-symbolic', - label: _("Add Rule"), - is_important: true }); + let newButton = new Gtk.ToolButton({ + icon_name: 'bookmark-new-symbolic', + label: _('Add Rule'), + is_important: true + }); newButton.connect('clicked', this._createNew.bind(this)); toolbar.add(newButton); - let delButton = new Gtk.ToolButton({ icon_name: 'edit-delete-symbolic' }); + let delButton = new Gtk.ToolButton({ icon_name: 'edit-delete-symbolic' }); delButton.connect('clicked', this._deleteSelected.bind(this)); toolbar.add(delButton); @@ -94,17 +107,21 @@ const Widget = GObject.registerClass({ } _createNew() { - let dialog = new Gtk.Dialog({ title: _("Create new matching rule"), - transient_for: this.get_toplevel(), - use_header_bar: true, - modal: true }); + let dialog = new Gtk.Dialog({ + title: _('Create new matching rule'), + transient_for: this.get_toplevel(), + use_header_bar: true, + modal: true + }); dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL); - let addButton = dialog.add_button(_("Add"), Gtk.ResponseType.OK); + let addButton = dialog.add_button(_('Add'), Gtk.ResponseType.OK); dialog.set_default_response(Gtk.ResponseType.OK); - let grid = new Gtk.Grid({ column_spacing: 10, - row_spacing: 15, - margin: 10 }); + let grid = new Gtk.Grid({ + column_spacing: 10, + row_spacing: 15, + margin: 10 + }); dialog._appChooser = new Gtk.AppChooserWidget({ show_all: true }); dialog._appChooser.connect('application-selected', (w, appInfo) => { addButton.sensitive = appInfo && this._checkId(appInfo.get_id()); @@ -113,13 +130,19 @@ const Widget = GObject.registerClass({ addButton.sensitive = appInfo && this._checkId(appInfo.get_id()); grid.attach(dialog._appChooser, 0, 0, 2, 1); - grid.attach(new Gtk.Label({ label: _("Workspace"), - halign: Gtk.Align.END }), 0, 1, 1, 1); - let adjustment = new Gtk.Adjustment({ lower: 1, - upper: WORKSPACE_MAX, - step_increment: 1 }); - dialog._spin = new Gtk.SpinButton({ adjustment: adjustment, - snap_to_ticks: true }); + grid.attach(new Gtk.Label({ + label: _('Workspace'), + halign: Gtk.Align.END + }), 0, 1, 1, 1); + let adjustment = new Gtk.Adjustment({ + lower: 1, + upper: WORKSPACE_MAX, + step_increment: 1 + }); + dialog._spin = new Gtk.SpinButton({ + adjustment: adjustment, + snap_to_ticks: true + }); dialog._spin.set_value(1); grid.attach(dialog._spin, 1, 1, 1, 1); dialog.get_content_area().add(grid); @@ -141,14 +164,7 @@ const Widget = GObject.registerClass({ this._appendItem(appInfo.get_id(), index); this._changedPermitted = true; - let iter = this._store.append(); - let adj = new Gtk.Adjustment({ lower: 1, - upper: WORKSPACE_MAX, - step_increment: 1, - value: index }); - this._store.set(iter, - [Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT], - [appInfo, appInfo.get_icon(), appInfo.get_display_name(), index, adj]); + this._appendRow(appInfo, index); dialog.destroy(); }); @@ -198,20 +214,29 @@ const Widget = GObject.registerClass({ continue; validItems.push(currentItems[i]); - let iter = this._store.append(); - let adj = new Gtk.Adjustment({ lower: 1, - upper: WORKSPACE_MAX, - step_increment: 1, - value: index }); - this._store.set(iter, - [Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT], - [appInfo, appInfo.get_icon(), appInfo.get_display_name(), parseInt(index), adj]); + this._appendRow(appInfo, parseInt(index)); } if (validItems.length != currentItems.length) // some items were filtered out this._settings.set_strv(SETTINGS_KEY, validItems); } + _appendRow(appInfo, workspace) { + let iter = this._store.append(); + let icon = appInfo.get_icon(); + let displayName = appInfo.get_display_name(); + let adj = new Gtk.Adjustment({ + lower: 1, + upper: WORKSPACE_MAX, + step_increment: 1, + value: workspace + }); + let { APPINFO, ICON, DISPLAY_NAME, WORKSPACE, ADJUSTMENT } = Columns; + this._store.set(iter, + [APPINFO, ICON, DISPLAY_NAME, WORKSPACE, ADJUSTMENT], + [appInfo, icon, displayName, workspace, adj]); + } + _checkId(id) { let items = this._settings.get_strv(SETTINGS_KEY); return !items.some(i => i.startsWith(`${id}:`)); diff --git a/extensions/drive-menu/extension.js b/extensions/drive-menu/extension.js index 89747ec9..7c8e36cf 100644 --- a/extensions/drive-menu/extension.js +++ b/extensions/drive-menu/extension.js @@ -1,9 +1,6 @@ /* exported init enable disable */ // Drive menu extension -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const St = imports.gi.St; -const Shell = imports.gi.Shell; +const { Gio, GObject, Shell, St } = imports.gi; const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = Gettext.gettext; @@ -25,8 +22,10 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem { this.mount = mount; - let ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic', - style_class: 'popup-menu-icon ' }); + let ejectIcon = new St.Icon({ + icon_name: 'media-eject-symbolic', + style_class: 'popup-menu-icon' + }); let ejectButton = new St.Button({ child: ejectIcon }); ejectButton.connect('clicked', this._eject.bind(this)); this.actor.add(ejectButton); @@ -66,17 +65,17 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem { } _eject() { - let mountOp = new ShellMountOperation.ShellMountOperation(this.mount); + let unmountArgs = [ + Gio.MountUnmountFlags.NONE, + (new ShellMountOperation.ShellMountOperation(this.mount)).mountOp, + null // Gio.Cancellable + ]; if (this.mount.can_eject()) - this.mount.eject_with_operation(Gio.MountUnmountFlags.NONE, - mountOp.mountOp, - null, // Gio.Cancellable + this.mount.eject_with_operation(...unmountArgs, this._ejectFinish.bind(this)); else - this.mount.unmount_with_operation(Gio.MountUnmountFlags.NONE, - mountOp.mountOp, - null, // Gio.Cancellable + this.mount.unmount_with_operation(...unmountArgs, this._unmountFinish.bind(this)); } @@ -98,7 +97,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem { _reportFailure(exception) { // TRANSLATORS: %s is the filesystem name - let msg = _("Ejecting drive “%s” failed:").format(this.mount.get_name()); + let msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name()); Main.notifyError(msg, exception.message); } @@ -114,11 +113,13 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem { let DriveMenu = GObject.registerClass( class DriveMenu extends PanelMenu.Button { _init() { - super._init(0.0, _("Removable devices")); + super._init(0.0, _('Removable devices')); let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); - let icon = new St.Icon({ icon_name: 'media-eject-symbolic', - style_class: 'system-status-icon' }); + let icon = new St.Icon({ + icon_name: 'media-eject-symbolic', + style_class: 'system-status-icon' + }); hbox.add_child(icon); hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); @@ -139,7 +140,7 @@ class DriveMenu extends PanelMenu.Button { this._monitor.get_mounts().forEach(this._addMount.bind(this)); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); - this.menu.addAction(_("Open Files"), event => { + this.menu.addAction(_('Open Files'), event => { let appSystem = Shell.AppSystem.get_default(); let app = appSystem.lookup_app('org.gnome.Nautilus.desktop'); app.activate_full(-1, event.get_time()); diff --git a/extensions/native-window-placement/extension.js b/extensions/native-window-placement/extension.js index faf7fab5..8a8b0937 100644 --- a/extensions/native-window-placement/extension.js +++ b/extensions/native-window-placement/extension.js @@ -112,10 +112,11 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy { overlap = false; for (let i = 0; i < rects.length; i++) { for (let j = 0; j < rects.length; j++) { - if (i != j && rects[i].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS, - WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS) - .overlap(rects[j].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS, - WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS))) { + let adjustments = [-1, -1, 1, 1] + .map(v => v *= WINDOW_PLACEMENT_NATURAL_GAPS); + let iAdjusted = rects[i].adjusted(...adjustments); + let jAdjusted = rects[j].adjusted(...adjustments); + if (i != j && iAdjusted.overlap(jAdjusted)) { loopCounter++; overlap = true; diff --git a/extensions/places-menu/extension.js b/extensions/places-menu/extension.js index 9fced354..c477a4ac 100644 --- a/extensions/places-menu/extension.js +++ b/extensions/places-menu/extension.js @@ -1,9 +1,7 @@ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* exported init enable disable */ -const Clutter = imports.gi.Clutter; -const GObject = imports.gi.GObject; -const St = imports.gi.St; +const { Clutter, GObject, St } = imports.gi; const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; @@ -24,16 +22,20 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem { super(); this._info = info; - this._icon = new St.Icon({ gicon: info.icon, - icon_size: PLACE_ICON_SIZE }); + this._icon = new St.Icon({ + gicon: info.icon, + icon_size: PLACE_ICON_SIZE + }); this.actor.add_child(this._icon); this._label = new St.Label({ text: info.name, x_expand: true }); this.actor.add_child(this._label); if (info.isRemovable()) { - this._ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic', - style_class: 'popup-menu-icon ' }); + this._ejectIcon = new St.Icon({ + icon_name: 'media-eject-symbolic', + style_class: 'popup-menu-icon' + }); this._ejectButton = new St.Button({ child: this._ejectIcon }); this._ejectButton.connect('clicked', info.eject.bind(info)); this.actor.add_child(this._ejectButton); @@ -74,12 +76,14 @@ const SECTIONS = [ let PlacesMenu = GObject.registerClass( class PlacesMenu extends PanelMenu.Button { _init() { - super._init(0.0, _("Places")); + super._init(0.0, _('Places')); let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); - let label = new St.Label({ text: _("Places"), - y_expand: true, - y_align: Clutter.ActorAlign.CENTER }); + let label = new St.Label({ + text: _('Places'), + y_expand: true, + y_align: Clutter.ActorAlign.CENTER + }); hbox.add_child(label); hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); this.add_actor(hbox); diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 133e7784..e97cef4f 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -1,9 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const GLib = imports.gi.GLib; -const Gio = imports.gi.Gio; -const Shell = imports.gi.Shell; -const Mainloop = imports.mainloop; +const { Gio, GLib, Shell } = imports.gi; const Signals = imports.signals; const Main = imports.ui.main; @@ -41,50 +38,36 @@ class PlaceInfo { return false; } - _createLaunchCallback(launchContext, tryMount) { - return (_ignored, result) => { - try { - Gio.AppInfo.launch_default_for_uri_finish(result); - } catch (e) { - if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) { - let source = { - get_icon: () => { return this.icon; } - }; - let op = new ShellMountOperation.ShellMountOperation(source); - this.file.mount_enclosing_volume(0, op.mountOp, null, (file, result) => { - try { - op.close(); - file.mount_enclosing_volume_finish(result); - } catch (e) { - if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED)) - // e.g. user canceled the password dialog - return; - Main.notifyError(_("Failed to mount volume for “%s”").format(this.name), e.message); - return; - } - - if (tryMount) { - let callback = this._createLaunchCallback(launchContext, false); - Gio.AppInfo.launch_default_for_uri_async(file.get_uri(), - launchContext, - null, - callback); - } - }); - } else { - Main.notifyError(_("Failed to launch “%s”").format(this.name), e.message); - } + async _ensureMountAndLaunch(context, tryMount) { + try { + await this._launchDefaultForUri(this.file.get_uri(), context, null); + } catch (e) { + if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) { + Main.notifyError(_('Failed to launch “%s”').format(this.name), e.message); + return; } - }; + + let source = { + get_icon: () => this.icon + }; + let op = new ShellMountOperation.ShellMountOperation(source); + try { + await this._mountEnclosingVolume(0, op.mountOp, null); + + if (tryMount) + this._ensureMountAndLaunch(context, false); + } catch (e) { + if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED)) + Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message); + } finally { + op.close(); + } + } } launch(timestamp) { let launchContext = global.create_app_launch_context(timestamp, -1); - let callback = this._createLaunchCallback(launchContext, true); - Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(), - launchContext, - null, - callback); + this._ensureMountAndLaunch(launchContext, true); } getIcon() { @@ -128,12 +111,38 @@ class PlaceInfo { throw e; } } + + _launchDefaultForUri(uri, context, cancel) { + return new Promise((resolve, reject) => { + Gio.AppInfo.launch_default_for_uri_async(uri, context, cancel, (o, res) => { + try { + Gio.AppInfo.launch_default_for_uri_finish(res); + resolve(); + } catch (e) { + reject(e); + } + }); + }); + } + + _mountEnclosingVolume(flags, mountOp, cancel) { + return new Promise((resolve, reject) => { + this.file.mount_enclosing_volume(flags, mountOp, cancel, (o, res) => { + try { + this.file.mount_enclosing_volume_finish(res); + resolve(); + } catch (e) { + reject(e); + } + }); + }); + } } Signals.addSignalMethods(PlaceInfo.prototype); class RootInfo extends PlaceInfo { _init() { - super._init('devices', Gio.File.new_for_path('/'), _("Computer")); + super._init('devices', Gio.File.new_for_path('/'), _('Computer')); let busName = 'org.freedesktop.hostname1'; let objPath = '/org/freedesktop/hostname1'; @@ -156,7 +165,7 @@ class RootInfo extends PlaceInfo { // GDBusProxy will emit a g-properties-changed when hostname1 goes down // ignore it if (proxy.g_name_owner) { - this.name = proxy.PrettyHostname || _("Computer"); + this.name = proxy.PrettyHostname || _('Computer'); this.emit('changed'); } } @@ -186,17 +195,17 @@ class PlaceDeviceInfo extends PlaceInfo { } eject() { - let mountOp = new ShellMountOperation.ShellMountOperation(this._mount); + let unmountArgs = [ + Gio.MountUnmountFlags.NONE, + (new ShellMountOperation.ShellMountOperation(this._mount)).mountOp, + null // Gio.Cancellable + ]; if (this._mount.can_eject()) - this._mount.eject_with_operation(Gio.MountUnmountFlags.NONE, - mountOp.mountOp, - null, // Gio.Cancellable + this._mount.eject_with_operation(...unmountArgs, this._ejectFinish.bind(this)); else - this._mount.unmount_with_operation(Gio.MountUnmountFlags.NONE, - mountOp.mountOp, - null, // Gio.Cancellable + this._mount.unmount_with_operation(...unmountArgs, this._unmountFinish.bind(this)); } @@ -217,7 +226,7 @@ class PlaceDeviceInfo extends PlaceInfo { } _reportFailure(exception) { - let msg = _("Ejecting drive “%s” failed:").format(this._mount.get_name()); + let msg = _('Ejecting drive “%s” failed:').format(this._mount.get_name()); Main.notifyError(msg, exception.message); } } @@ -288,11 +297,12 @@ var PlacesManager = class { if (this._bookmarkTimeoutId > 0) return; /* Defensive event compression */ - this._bookmarkTimeoutId = Mainloop.timeout_add(100, () => { - this._bookmarkTimeoutId = 0; - this._reloadBookmarks(); - return false; - }); + this._bookmarkTimeoutId = GLib.timeout_add( + GLib.PRIORITY_DEFAULT, 100, () => { + this._bookmarkTimeoutId = 0; + this._reloadBookmarks(); + return false; + }); }); this._reloadBookmarks(); @@ -300,9 +310,17 @@ var PlacesManager = class { } _connectVolumeMonitorSignals() { - const signals = ['volume-added', 'volume-removed', 'volume-changed', - 'mount-added', 'mount-removed', 'mount-changed', - 'drive-connected', 'drive-disconnected', 'drive-changed']; + const signals = [ + 'volume-added', + 'volume-removed', + 'volume-changed', + 'mount-added', + 'mount-removed', + 'mount-changed', + 'drive-connected', + 'drive-disconnected', + 'drive-changed' + ]; this._volumeMonitorSignals = []; let func = this._updateMounts.bind(this); @@ -323,18 +341,18 @@ var PlacesManager = class { if (this._monitor) this._monitor.cancel(); if (this._bookmarkTimeoutId) - Mainloop.source_remove(this._bookmarkTimeoutId); + GLib.source_remove(this._bookmarkTimeoutId); } _updateSpecials() { - this._places.special.forEach(p => { p.destroy(); }); + this._places.special.forEach(p => p.destroy()); this._places.special = []; let homePath = GLib.get_home_dir(); this._places.special.push(new PlaceInfo('special', Gio.File.new_for_path(homePath), - _("Home"))); + _('Home'))); let specials = []; let dirs = DEFAULT_DIRECTORIES.slice(); @@ -369,16 +387,16 @@ var PlacesManager = class { let networkMounts = []; let networkVolumes = []; - this._places.devices.forEach(p => { p.destroy(); }); + this._places.devices.forEach(p => p.destroy()); this._places.devices = []; - this._places.network.forEach(p => { p.destroy(); }); + this._places.network.forEach(p => p.destroy()); this._places.network = []; /* Add standard places */ this._places.devices.push(new RootInfo()); this._places.network.push(new PlaceInfo('network', Gio.File.new_for_uri('network:///'), - _("Browse Network"), + _('Browse Network'), 'network-workgroup-symbolic')); /* first go through all connected drives */ diff --git a/extensions/screenshot-window-sizer/extension.js b/extensions/screenshot-window-sizer/extension.js index c00fb994..41c4c853 100644 --- a/extensions/screenshot-window-sizer/extension.js +++ b/extensions/screenshot-window-sizer/extension.js @@ -19,9 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -const Meta = imports.gi.Meta; -const Shell = imports.gi.Shell; -const St = imports.gi.St; +const { Meta, Shell, St } = imports.gi; const Main = imports.ui.main; const Tweener = imports.ui.tweener; @@ -52,11 +50,12 @@ function flashMessage(message) { text.set_position(monitor.x + Math.floor(monitor.width / 2 - text.width / 2), monitor.y + Math.floor(monitor.height / 2 - text.height / 2)); - Tweener.addTween(text, - { opacity: 0, - time: MESSAGE_FADE_TIME, - transition: 'easeOutQuad', - onComplete: hideMessage }); + Tweener.addTween(text, { + opacity: 0, + time: MESSAGE_FADE_TIME, + transition: 'easeOutQuad', + onComplete: hideMessage + }); } let SIZES = [ @@ -74,8 +73,8 @@ function cycleScreenshotSizes(display, window, binding) { let backwards = (modifiers & Meta.VirtualModifier.SHIFT_MASK) != 0; // Unmaximize first - if (window.maximized_horizontally || window.maximizedVertically) - window.unmaximize(Meta.MaximizeFlags.HORIZONTAL | Meta.MaximizeFlags.VERTICAL); + if (window.get_maximized() != 0) + window.unmaximize(Meta.MaximizeFlags.BOTH); let workArea = window.get_work_area_current_monitor(); let outerRect = window.get_frame_rect(); diff --git a/extensions/user-theme/extension.js b/extensions/user-theme/extension.js index 9ffaf6fa..d00c0774 100644 --- a/extensions/user-theme/extension.js +++ b/extensions/user-theme/extension.js @@ -1,9 +1,8 @@ // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -// Load shell theme from ~/.themes/name/gnome-shell +// Load shell theme from ~/.local/share/themes/name/gnome-shell /* exported init */ -const GLib = imports.gi.GLib; -const Gio = imports.gi.Gio; +const { Gio, GLib } = imports.gi; const Main = imports.ui.main; const SETTINGS_KEY = 'name'; @@ -31,37 +30,29 @@ class ThemeManager { } _changeTheme() { - let _stylesheet = null; - let _themeName = this._settings.get_string(SETTINGS_KEY); + let stylesheet = null; + let themeName = this._settings.get_string(SETTINGS_KEY); - if (_themeName) { - let _userCssStylesheet = GLib.build_filenamev([ - GLib.get_home_dir(), '.themes', _themeName, 'gnome-shell', 'gnome-shell.css' - ]); - let file = Gio.file_new_for_path(_userCssStylesheet); - if (file.query_exists(null)) - _stylesheet = _userCssStylesheet; - else { - let sysdirs = GLib.get_system_data_dirs(); - sysdirs.unshift(GLib.get_user_data_dir()); - for (let i = 0; i < sysdirs.length; i++) { - _userCssStylesheet = GLib.build_filenamev([ - sysdirs[i], 'themes', _themeName, 'gnome-shell', 'gnome-shell.css' - ]); - let file = Gio.file_new_for_path(_userCssStylesheet); - if (file.query_exists(null)) { - _stylesheet = _userCssStylesheet; - break; - } - } - } + if (themeName) { + let stylesheetPaths = [ + [GLib.get_home_dir(), '.themes'], + [GLib.get_user_data_dir(), 'themes'], + ...GLib.get_system_data_dirs().map(dir => [dir, 'themes']) + ].map(themeDir => GLib.build_filenamev([ + ...themeDir, themeName, 'gnome-shell', 'gnome-shell.css' + ])); + + stylesheet = stylesheetPaths.find(path => { + let file = Gio.file_new_for_path(path); + return file.query_exists(null); + }); } - if (_stylesheet) - global.log(`loading user theme: ${_stylesheet}`); + if (stylesheet) + global.log(`loading user theme: ${stylesheet}`); else global.log('loading default theme (Adwaita)'); - Main.setThemeStylesheet(_stylesheet); + Main.setThemeStylesheet(stylesheet); Main.loadTheme(); } } diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index e4633e21..e1ea742e 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -1,12 +1,5 @@ /* exported init */ -const Clutter = imports.gi.Clutter; -const GLib = imports.gi.GLib; -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const Gtk = imports.gi.Gtk; -const Meta = imports.gi.Meta; -const Shell = imports.gi.Shell; -const St = imports.gi.St; +const { Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St } = imports.gi; const DND = imports.ui.dnd; const Main = imports.ui.main; @@ -86,13 +79,10 @@ class WindowContextMenu extends PopupMenu.PopupMenu { this._maximizeItem = new PopupMenu.PopupMenuItem(''); this._maximizeItem.connect('activate', () => { - if (this._metaWindow.maximized_vertically && - this._metaWindow.maximized_horizontally) - this._metaWindow.unmaximize(Meta.MaximizeFlags.HORIZONTAL | - Meta.MaximizeFlags.VERTICAL); + if (this._metaWindow.get_maximized() == Meta.MaximizeFlags.BOTH) + this._metaWindow.unmaximize(Meta.MaximizeFlags.BOTH); else - this._metaWindow.maximize(Meta.MaximizeFlags.HORIZONTAL | - Meta.MaximizeFlags.VERTICAL); + this._metaWindow.maximize(Meta.MaximizeFlags.BOTH); }); this.addMenuItem(this._maximizeItem); @@ -104,7 +94,7 @@ class WindowContextMenu extends PopupMenu.PopupMenu { this._updateMaximizeItem.bind(this)); this._updateMaximizeItem(); - this._closeItem = new PopupMenu.PopupMenuItem(_("Close")); + this._closeItem = new PopupMenu.PopupMenuItem(_('Close')); this._closeItem.connect('activate', () => { this._metaWindow.delete(global.get_current_time()); }); @@ -123,15 +113,15 @@ class WindowContextMenu extends PopupMenu.PopupMenu { } _updateMinimizeItem() { - this._minimizeItem.label.text = this._metaWindow.minimized ? _("Unminimize") - : _("Minimize"); + this._minimizeItem.label.text = this._metaWindow.minimized ? + _('Unminimize') : _('Minimize'); } _updateMaximizeItem() { let maximized = this._metaWindow.maximized_vertically && this._metaWindow.maximized_horizontally; - this._maximizeItem.label.text = maximized ? _("Unmaximize") - : _("Maximize"); + this._maximizeItem.label.text = maximized ? + _('Unmaximize') : _('Maximize'); } _onDestroy() { @@ -144,8 +134,11 @@ class WindowContextMenu extends PopupMenu.PopupMenu { class WindowTitle { constructor(metaWindow) { this._metaWindow = metaWindow; - this.actor = new St.BoxLayout({ style_class: 'window-button-box', - x_expand: true, y_expand: true }); + this.actor = new St.BoxLayout({ + style_class: 'window-button-box', + x_expand: true, + y_expand: true + }); this._icon = new St.Bin({ style_class: 'window-button-icon' }); this.actor.add(this._icon); @@ -195,8 +188,10 @@ class WindowTitle { if (app) this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE); else - this._icon.child = new St.Icon({ icon_name: 'icon-missing', - icon_size: ICON_TEXTURE_SIZE }); + this._icon.child = new St.Icon({ + icon_name: 'icon-missing', + icon_size: ICON_TEXTURE_SIZE + }); } _onDestroy() { @@ -217,12 +212,13 @@ class BaseButton { this._perMonitor = perMonitor; this._monitorIndex = monitorIndex; - this.actor = new St.Button({ style_class: 'window-button', - x_fill: true, - y_fill: true, - can_focus: true, - button_mask: St.ButtonMask.ONE | - St.ButtonMask.THREE }); + this.actor = new St.Button({ + style_class: 'window-button', + x_fill: true, + y_fill: true, + can_focus: true, + button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE + }); this.actor._delegate = this; this.actor.connect('allocation-changed', @@ -406,37 +402,35 @@ class AppContextMenu extends PopupMenu.PopupMenu { this._appButton = appButton; - this._minimizeItem = new PopupMenu.PopupMenuItem(_("Minimize all")); + this._minimizeItem = new PopupMenu.PopupMenuItem(_('Minimize all')); this._minimizeItem.connect('activate', () => { - this._appButton.getWindowList().forEach(w => { w.minimize(); }); + this._appButton.getWindowList().forEach(w => w.minimize()); }); this.addMenuItem(this._minimizeItem); - this._unminimizeItem = new PopupMenu.PopupMenuItem(_("Unminimize all")); + this._unminimizeItem = new PopupMenu.PopupMenuItem(_('Unminimize all')); this._unminimizeItem.connect('activate', () => { - this._appButton.getWindowList().forEach(w => { w.unminimize(); }); + this._appButton.getWindowList().forEach(w => w.unminimize()); }); this.addMenuItem(this._unminimizeItem); - this._maximizeItem = new PopupMenu.PopupMenuItem(_("Maximize all")); + this._maximizeItem = new PopupMenu.PopupMenuItem(_('Maximize all')); this._maximizeItem.connect('activate', () => { this._appButton.getWindowList().forEach(w => { - w.maximize(Meta.MaximizeFlags.HORIZONTAL | - Meta.MaximizeFlags.VERTICAL); + w.maximize(Meta.MaximizeFlags.BOTH); }); }); this.addMenuItem(this._maximizeItem); - this._unmaximizeItem = new PopupMenu.PopupMenuItem(_("Unmaximize all")); + this._unmaximizeItem = new PopupMenu.PopupMenuItem(_('Unmaximize all')); this._unmaximizeItem.connect('activate', () => { this._appButton.getWindowList().forEach(w => { - w.unmaximize(Meta.MaximizeFlags.HORIZONTAL | - Meta.MaximizeFlags.VERTICAL); + w.unmaximize(Meta.MaximizeFlags.BOTH); }); }); this.addMenuItem(this._unmaximizeItem); - let item = new PopupMenu.PopupMenuItem(_("Close all")); + let item = new PopupMenu.PopupMenuItem(_('Close all')); item.connect('activate', () => { this._appButton.getWindowList().forEach(w => { w.delete(global.get_current_time()); @@ -450,10 +444,10 @@ class AppContextMenu extends PopupMenu.PopupMenu { this._minimizeItem.actor.visible = windows.some(w => !w.minimized); this._unminimizeItem.actor.visible = windows.some(w => w.minimized); this._maximizeItem.actor.visible = windows.some(w => { - return !(w.maximized_horizontally && w.maximized_vertically); + return w.get_maximized() != Meta.MaximizeFlags.BOTH; }); this._unmaximizeItem.actor.visible = windows.some(w => { - return w.maximized_horizontally && w.maximized_vertically; + return w.get_maximized() == Meta.MaximizeFlags.BOTH; }); super.open(animate); @@ -470,21 +464,29 @@ class AppButton extends BaseButton { let stack = new St.Widget({ layout_manager: new Clutter.BinLayout() }); this.actor.set_child(stack); - this._singleWindowTitle = new St.Bin({ x_expand: true, - y_fill: true, - x_align: St.Align.START }); + this._singleWindowTitle = new St.Bin({ + x_expand: true, + y_fill: true, + x_align: St.Align.START + }); stack.add_actor(this._singleWindowTitle); - this._multiWindowTitle = new St.BoxLayout({ style_class: 'window-button-box', - x_expand: true }); + this._multiWindowTitle = new St.BoxLayout({ + style_class: 'window-button-box', + x_expand: true + }); stack.add_actor(this._multiWindowTitle); - this._icon = new St.Bin({ style_class: 'window-button-icon', - child: app.create_icon_texture(ICON_TEXTURE_SIZE) }); + this._icon = new St.Bin({ + style_class: 'window-button-icon', + child: app.create_icon_texture(ICON_TEXTURE_SIZE) + }); this._multiWindowTitle.add(this._icon); - let label = new St.Label({ text: app.get_name(), - y_align: Clutter.ActorAlign.CENTER }); + let label = new St.Label({ + text: app.get_name(), + y_align: Clutter.ActorAlign.CENTER + }); this._multiWindowTitle.add(label); this._multiWindowTitle.label_actor = label; @@ -545,7 +547,7 @@ class AppButton extends BaseButton { let rect = this._getIconGeometry(); let windows = this.app.get_windows(); - windows.forEach(w => { w.set_icon_geometry(rect); }); + windows.forEach(w => w.set_icon_geometry(rect)); } getWindowList() { @@ -645,21 +647,26 @@ class AppButton extends BaseButton { let WorkspaceIndicator = GObject.registerClass( class WorkspaceIndicator extends PanelMenu.Button { _init() { - super._init(0.0, _("Workspace Indicator"), true); + super._init(0.0, _('Workspace Indicator'), true); this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM)); this.add_style_class_name('window-list-workspace-indicator'); this.menu.actor.remove_style_class_name('panel-menu'); - let container = new St.Widget({ layout_manager: new Clutter.BinLayout(), - x_expand: true, y_expand: true }); + let container = new St.Widget({ + layout_manager: new Clutter.BinLayout(), + x_expand: true, + y_expand: true + }); this.add_actor(container); let workspaceManager = global.workspace_manager; this._currentWorkspace = workspaceManager.get_active_workspace().index(); - this.statusLabel = new St.Label({ text: this._getStatusText(), - x_align: Clutter.ActorAlign.CENTER, - y_align: Clutter.ActorAlign.CENTER }); + this.statusLabel = new St.Label({ + text: this._getStatusText(), + x_align: Clutter.ActorAlign.CENTER, + y_align: Clutter.ActorAlign.CENTER + }); container.add_actor(this.statusLabel); this.workspacesItems = []; @@ -768,23 +775,27 @@ class WindowList { this._perMonitor = perMonitor; this._monitor = monitor; - this.actor = new St.Widget({ name: 'panel', - style_class: 'bottom-panel solid', - reactive: true, - track_hover: true, - layout_manager: new Clutter.BinLayout() }); + this.actor = new St.Widget({ + name: 'panel', + style_class: 'bottom-panel solid', + reactive: true, + track_hover: true, + layout_manager: new Clutter.BinLayout() + }); this.actor.connect('destroy', this._onDestroy.bind(this)); let box = new St.BoxLayout({ x_expand: true, y_expand: true }); this.actor.add_actor(box); let layout = new Clutter.BoxLayout({ homogeneous: true }); - this._windowList = new St.Widget({ style_class: 'window-list', - reactive: true, - layout_manager: layout, - x_align: Clutter.ActorAlign.START, - x_expand: true, - y_expand: true }); + this._windowList = new St.Widget({ + style_class: 'window-list', + reactive: true, + layout_manager: layout, + x_align: Clutter.ActorAlign.START, + x_expand: true, + y_expand: true + }); box.add(this._windowList, { expand: true }); this._windowList.connect('style-changed', () => { @@ -812,10 +823,12 @@ class WindowList { this._menuManager = new PopupMenu.PopupMenuManager(this); this._menuManager.addMenu(this._workspaceIndicator.menu); - Main.layoutManager.addChrome(this.actor, { affectsStruts: true, - trackFullscreen: true }); + Main.layoutManager.addChrome(this.actor, { + affectsStruts: true, + trackFullscreen: true + }); Main.uiGroup.set_child_above_sibling(this.actor, Main.layoutManager.panelBox); - Main.ctrlAltTabManager.addGroup(this.actor, _("Window List"), 'start-here-symbolic'); + Main.ctrlAltTabManager.addGroup(this.actor, _('Window List'), 'start-here-symbolic'); this.actor.width = this._monitor.width; this.actor.connect('notify::height', this._updatePosition.bind(this)); @@ -1212,7 +1225,7 @@ class Extension { } _buildWindowLists() { - this._windowLists.forEach(list => { list.actor.destroy(); }); + this._windowLists.forEach(list => list.actor.destroy()); this._windowLists = []; let showOnAllMonitors = this._settings.get_boolean('show-on-all-monitors'); diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 639ec56b..78792b5a 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -1,9 +1,7 @@ // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- /* exported init buildPrefsWidget */ -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const Gtk = imports.gi.Gtk; +const { Gio, GObject, Gtk } = imports.gi; const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = Gettext.gettext; @@ -24,16 +22,20 @@ class WindowListPrefsWidget extends Gtk.Grid { this.row_spacing = 6; this.orientation = Gtk.Orientation.VERTICAL; - let groupingLabel = '%s'.format(_("Window Grouping")); - this.add(new Gtk.Label({ label: groupingLabel, use_markup: true, - halign: Gtk.Align.START })); + let groupingLabel = '%s'.format(_('Window Grouping')); + this.add(new Gtk.Label({ + label: groupingLabel, use_markup: true, + halign: Gtk.Align.START + })); let align = new Gtk.Alignment({ left_padding: 12 }); this.add(align); - let grid = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL, - row_spacing: 6, - column_spacing: 6 }); + let grid = new Gtk.Grid({ + orientation: Gtk.Orientation.VERTICAL, + row_spacing: 6, + column_spacing: 6 + }); align.add(grid); this._settings = ExtensionUtils.getSettings(); @@ -42,9 +44,9 @@ class WindowListPrefsWidget extends Gtk.Grid { let modes = range.deep_unpack()[1].deep_unpack(); let modeLabels = { - 'never': _("Never group windows"), - 'auto': _("Group windows when space is limited"), - 'always': _("Always group windows") + 'never': _('Never group windows'), + 'auto': _('Group windows when space is limited'), + 'always': _('Always group windows') }; let radio = null; @@ -56,9 +58,11 @@ class WindowListPrefsWidget extends Gtk.Grid { continue; } - radio = new Gtk.RadioButton({ active: currentMode == mode, - label: label, - group: radio }); + radio = new Gtk.RadioButton({ + active: currentMode == mode, + label: label, + group: radio + }); grid.add(radio); radio.connect('toggled', button => { @@ -67,8 +71,10 @@ class WindowListPrefsWidget extends Gtk.Grid { }); } - let check = new Gtk.CheckButton({ label: _("Show on all monitors"), - margin_top: 6 }); + let check = new Gtk.CheckButton({ + label: _('Show on all monitors'), + margin_top: 6 + }); this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT); this.add(check); } diff --git a/extensions/windowsNavigator/extension.js b/extensions/windowsNavigator/extension.js index a4d74740..7d58ebe2 100644 --- a/extensions/windowsNavigator/extension.js +++ b/extensions/windowsNavigator/extension.js @@ -1,7 +1,6 @@ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* exported enable disable */ -const Clutter = imports.gi.Clutter; -const St = imports.gi.St; +const { Clutter, St } = imports.gi; const Main = imports.ui.main; const Workspace = imports.ui.workspace; @@ -230,8 +229,10 @@ function enable() { workspaceInjections['_init'] = injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) { if (metaWorkspace && metaWorkspace.index() < 9) { - createdActors.push(this._tip = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip', - visible: false })); + createdActors.push(this._tip = new St.Label({ + style_class: 'extension-windowsNavigator-window-tooltip', + visible: false + })); this.actor.add_actor(this._tip); let signalId = this.actor.connect('notify::scale-x', () => { diff --git a/extensions/workspace-indicator/extension.js b/extensions/workspace-indicator/extension.js index ea891e07..3be12686 100644 --- a/extensions/workspace-indicator/extension.js +++ b/extensions/workspace-indicator/extension.js @@ -1,11 +1,7 @@ // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- /* exported init enable disable */ -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const Meta = imports.gi.Meta; -const Clutter = imports.gi.Clutter; -const St = imports.gi.St; +const { Clutter, Gio, GObject, Meta, St } = imports.gi; const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; @@ -22,13 +18,15 @@ const WORKSPACE_KEY = 'workspace-names'; let WorkspaceIndicator = GObject.registerClass( class WorkspaceIndicator extends PanelMenu.Button { _init() { - super._init(0.0, _("Workspace Indicator")); + super._init(0.0, _('Workspace Indicator')); let workspaceManager = global.workspace_manager; this._currentWorkspace = workspaceManager.get_active_workspace().index(); - this.statusLabel = new St.Label({ y_align: Clutter.ActorAlign.CENTER, - text: this._labelText() }); + this.statusLabel = new St.Label({ + y_align: Clutter.ActorAlign.CENTER, + text: this._labelText() + }); this.add_actor(this.statusLabel); diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js index dae2e957..d8640559 100644 --- a/extensions/workspace-indicator/prefs.js +++ b/extensions/workspace-indicator/prefs.js @@ -1,9 +1,7 @@ // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- /* exported init buildPrefsWidget */ -const Gio = imports.gi.Gio; -const GObject = imports.gi.GObject; -const Gtk = imports.gi.Gtk; +const { Gio, GObject, Gtk } = imports.gi; const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = Gettext.gettext; @@ -129,22 +127,28 @@ class WorkspaceSettingsWidget extends Gtk.Grid { this.margin = 12; this.orientation = Gtk.Orientation.VERTICAL; - this.add(new Gtk.Label({ label: '%s'.format(_("Workspace Names")), - use_markup: true, margin_bottom: 6, - hexpand: true, halign: Gtk.Align.START })); + this.add(new Gtk.Label({ + label: '%s'.format(_('Workspace Names')), + use_markup: true, + margin_bottom: 6, + hexpand: true, + halign: Gtk.Align.START + })); let scrolled = new Gtk.ScrolledWindow({ shadow_type: Gtk.ShadowType.IN }); scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.add(scrolled); this._store = new WorkspaceNameModel(); - this._treeView = new Gtk.TreeView({ model: this._store, - headers_visible: false, - reorderable: true, - hexpand: true, - vexpand: true }); + this._treeView = new Gtk.TreeView({ + model: this._store, + headers_visible: false, + reorderable: true, + hexpand: true, + vexpand: true + }); - let column = new Gtk.TreeViewColumn({ title: _("Name") }); + let column = new Gtk.TreeViewColumn({ title: _('Name') }); let renderer = new Gtk.CellRendererText({ editable: true }); renderer.connect('edited', this._cellEdited.bind(this)); column.pack_start(renderer, true); @@ -184,7 +188,7 @@ class WorkspaceSettingsWidget extends Gtk.Grid { let iter = this._store.append(); let index = this._store.get_path(iter).get_indices()[0]; - let label = _("Workspace %d").format(index + 1); + let label = _('Workspace %d').format(index + 1); this._store.set(iter, [this._store.Columns.LABEL], [label]); } diff --git a/lint/eslintrc-gjs.json b/lint/eslintrc-gjs.json index b4672991..74cadf26 100644 --- a/lint/eslintrc-gjs.json +++ b/lint/eslintrc-gjs.json @@ -12,6 +12,7 @@ "error", "never" ], + "arrow-spacing": "error", "brace-style": "error", "comma-spacing": [ "error", @@ -24,6 +25,9 @@ "error", 4, { + "ignoredNodes": [ + "CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child" + ], "MemberExpression": "off" } ], @@ -57,6 +61,19 @@ "allow": ["!!"] } ], + "no-restricted-properties": [ + "error", + { + "object": "Lang", + "property": "bind", + "message": "Use arrow notation or Function.prototype.bind()" + }, + { + "object": "Lang", + "property": "Class", + "message": "Use ES6 classes" + } + ], "nonblock-statement-body-position": [ "error", "below" diff --git a/lint/eslintrc-legacy.json b/lint/eslintrc-legacy.json index 0bbbff18..aca79adf 100644 --- a/lint/eslintrc-legacy.json +++ b/lint/eslintrc-legacy.json @@ -5,16 +5,12 @@ 4, { "ignoredNodes": [ - "ConditionalExpression", "CallExpression > ArrowFunctionExpression", "CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child" ], "CallExpression": { "arguments": "first" }, - "ArrayExpression": "first", - "ObjectExpression": "first", "MemberExpression": "off" } - ], - "quotes": "off" + ] } } diff --git a/lint/eslintrc-shell.json b/lint/eslintrc-shell.json index 198a7509..fc6f5819 100644 --- a/lint/eslintrc-shell.json +++ b/lint/eslintrc-shell.json @@ -1,13 +1,5 @@ { "rules": { - "arrow-spacing": "error", - "brace-style": [ - "error", - "1tbs", - { - "allowSingleLine": true - } - ], "camelcase": [ "error", { @@ -15,26 +7,6 @@ "allow": ["^vfunc_"] } ], - "indent": [ - "error", - 4, - { - "ignoredNodes": [ - "ArrayExpression > ObjectExpression", - "CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child", - "ConditionalExpression" - ], - "MemberExpression": "off" - } - ], - "key-spacing": [ - "error", - { - "mode": "minimum", - "beforeColon": false, - "afterColon": true - } - ], "no-unused-vars": [ "error", { diff --git a/meson.build b/meson.build index 0115562f..ed228fe9 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gnome-shell-extensions', - version: '3.31.90', + version: '3.31.92', meson_version: '>= 0.44.0', license: 'GPL2+' ) diff --git a/po/gd.po b/po/gd.po index de073009..c5497507 100644 --- a/po/gd.po +++ b/po/gd.po @@ -5,9 +5,9 @@ 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: 2017-12-18 18:40+0000\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" +"issues\n" +"POT-Creation-Date: 2018-11-13 00:23+0000\n" "PO-Revision-Date: 2018-02-26 12:52+0100\n" "Last-Translator: GunChleoc \n" "Language-Team: Fòram na Gàidhlig\n" @@ -29,126 +29,81 @@ msgstr "GNOME clasaigeach" msgid "This session logs you into GNOME Classic" msgstr "Clàraidh an seisean seo a-steach gu GNOME clasaigeach thu" -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 -msgid "Attach modal dialog to the parent window" -msgstr "Ceangail còmhradh mòdach ris an uinneag-pàraint" - -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41 -msgid "" -"This key overrides the key in org.gnome.mutter when running GNOME Shell." -msgstr "" -"Tar-àithnidh an iuchair seo an iuchair ann an org.gnome.mutter nuair a thèid " -"Slige GNOME a ruith." - -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 -msgid "Arrangement of buttons on the titlebar" -msgstr "Seòrsachadh nam putanan air a’ bhàr-tiotail" - -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17 -msgid "" -"This key overrides the key in org.gnome.desktop.wm.preferences when running " -"GNOME Shell." -msgstr "" -"Tar-àithnidh an iuchair seo an iuchair ann an org.gnome.desktop.wm." -"preferences nuair a thèid Slige GNOME a ruith." - -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24 -msgid "Enable edge tiling when dropping windows on screen edges" -msgstr "" -"Cuir leacadh nan oirean an comas nuair a thèid uinneagan a leigeil às aig " -"oir na sgrìn" - -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32 -msgid "Workspaces only on primary monitor" -msgstr "Rumannan-obrach air a’ phrìomh-sgrìn a-mhàin" - -#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40 -msgid "Delay focus changes in mouse mode until the pointer stops moving" -msgstr "" -"Cuir dàil air atharraichean an fòcais ann am modh luchaige gus an sguir an " -"tomhaire air gluasad" +#: extensions/alternate-tab/prefs.js:19 +msgid "Thumbnail only" +msgstr "Dealbhag a-mhàin" #: extensions/alternate-tab/prefs.js:20 -msgid "Thumbnail only" -msgstr "Dealbhagan a-mhàin" - -#: extensions/alternate-tab/prefs.js:21 msgid "Application icon only" msgstr "Ìomhaigheag na h-aplacaid a-mhàin" -#: extensions/alternate-tab/prefs.js:22 +#: extensions/alternate-tab/prefs.js:21 msgid "Thumbnail and application icon" msgstr "Dealbhag is ìomhaigheag na h-aplacaid" -#: extensions/alternate-tab/prefs.js:38 +#: extensions/alternate-tab/prefs.js:34 msgid "Present windows as" msgstr "Seall uinneagan mar" -#: extensions/alternate-tab/prefs.js:69 +#: extensions/alternate-tab/prefs.js:65 msgid "Show only windows in the current workspace" -msgstr "Na seall ach na h-uinneagan san rum-obrach làithreach" +msgstr "Na seall ach na h-uinneagan san rùm-obrach làithreach" -#: extensions/apps-menu/extension.js:41 +#: extensions/apps-menu/extension.js:37 msgid "Activities Overview" msgstr "Foir-shealladh nan gnìomhachdan" -#: extensions/apps-menu/extension.js:141 +#: extensions/apps-menu/extension.js:130 msgid "Favorites" msgstr "Annsachdan" -#: extensions/apps-menu/extension.js:436 +#: extensions/apps-menu/extension.js:417 msgid "Applications" msgstr "Aplacaidean" #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 msgid "Application and workspace list" -msgstr "Ìomhaigheag na h-aplacaid is liosta nan rumannan-obrach" +msgstr "Liosta nan aplacaidean is rumannan-obrach" #: 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" -msgstr "" -"Liosta dhe shreangan le id aplacaid (ainm faidhle desktop) aig gach tè air a " -"leantainn le còilean is àireamh an ruim-obrach" +msgstr "Liosta dhe shreangan le id aplacaid (ainm faidhle desktop) aig gach tè ’ga leantainn le còilean is àireamh an ruim-obrach" -#: extensions/auto-move-windows/prefs.js:56 +#: extensions/auto-move-windows/prefs.js:53 msgid "Application" msgstr "Aplacaid" -#: extensions/auto-move-windows/prefs.js:65 -#: extensions/auto-move-windows/prefs.js:123 +#: extensions/auto-move-windows/prefs.js:62 +#: extensions/auto-move-windows/prefs.js:117 msgid "Workspace" -msgstr "Rum-obrach" +msgstr "Rùm-obrach" -#: extensions/auto-move-windows/prefs.js:81 +#: extensions/auto-move-windows/prefs.js:78 msgid "Add Rule" msgstr "Cuir riaghailt ris" -#: extensions/auto-move-windows/prefs.js:102 +#: extensions/auto-move-windows/prefs.js:98 msgid "Create new matching rule" msgstr "Cruthaich riaghailt maidsidh ùr" -#: extensions/auto-move-windows/prefs.js:107 +#: extensions/auto-move-windows/prefs.js:103 msgid "Add" msgstr "Cuir ris" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:107 +#: extensions/drive-menu/extension.js:103 +#: extensions/places-menu/placeDisplay.js:225 #, javascript-format -#| msgid "Ejecting drive '%s' failed:" msgid "Ejecting drive “%s” failed:" msgstr "Cha deach leinn draibh “%s” a ghluasad a-mach:" -#: extensions/drive-menu/extension.js:125 +#: extensions/drive-menu/extension.js:118 msgid "Removable devices" -msgstr "Draibhean so-ghiùlain" +msgstr "Uidheaman so-ghiùlain" -#: extensions/drive-menu/extension.js:150 -#| msgid "Open File" +#: extensions/drive-menu/extension.js:143 msgid "Open Files" msgstr "Fosgail faidhlichean" @@ -164,86 +119,68 @@ msgstr "Teacsa fàilteachaidh eile." msgid "" "If not empty, it contains the text that will be shown when clicking on the " "panel." -msgstr "" -"Mur eil seo falamh, tha an teacsa ’na bhroinn a thèid a shealltainn le " -"briogadh air a’ phanail." +msgstr "Mur eil seo falamh, tha an teacsa ’na bhroinn a thèid a shealltainn le briogadh air a’ phanail." -#: extensions/example/prefs.js:30 +#: extensions/example/prefs.js:27 msgid "Message" msgstr "Teachdaireachd" #. TRANSLATORS: Example is the name of the extension, should not be #. translated -#: 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." +#: extensions/example/prefs.js:40 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 "" -"Tha am ball-eisimpleir airson sealltainn dhut mar a thogas tu leudachain le " -"deagh-ghiùlan airson na Slige agus mar sin cha dèan e fhèin mòran.\n" -"’S urrainn dhut an teachdaireachd fàilteachaidh a ghnàthachadh co-dhiù." +msgstr "Tha am ball-eisimpleir airson sealltainn dhut mar a thogas tu leudachain le deagh-ghiùlan airson na Slige agus mar sin cha dèan e fhèin mòran.\n’S urrainn dhut an teachdaireachd fàilteachaidh a ghnàthachadh co-dhiù." #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 msgid "Use more screen for windows" -msgstr "Cleachd cuid nas motha dhen sgrìn airson uinneagan" +msgstr "Cleachd barrachd dhen sgrìn airson uinneagan" #: 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 "" -"Feuch barrachd rum air an sgrìn a chleachdadh nuair a thèid dealbhagan nan " -"uinneagan a chur ann le gleusadh a-rèir co-mheas deilbh na sgrìn agus le " -"barrachd co-dhaingneachaidh ach am bi am bogsa-iadhaidh nas lugha. Cha bhi " -"an roghainn seo an sàs ach leis an ro-innleachd suidheachaidh nàdarra." +msgstr "Feuch barrachd rùm air an sgrìn a chleachdadh nuair a thèid dealbhagan nan uinneagan a chur ann le gleusadh a-rèir co-mheas deilbh na sgrìn agus le barrachd co-dhaingneachaidh ach am bi am bogsa-iadhaidh nas lugha. Cha bhi an roghainn seo an sàs ach leis an ro-innleachd suidheachaidh nàdarra." #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 msgid "Place window captions on top" -msgstr "Cuir caipseanan nan uinneagan air a’ bharr" +msgstr "Cuir caipseanan nan uinneagan air a’ bhàrr" #: 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 "" -"Mas e true a th’ ann, thèid caipseanan nan uinneagan a chur ri barr nan " -"dealbhagan, a’ tar-àithneadh bun-roghainn na slige a chuireas aig a’ bhonn " -"iad. Ma dh’atharraicheas tu an roghainn seo, feumaidh tu an t-slige a " -"thòiseachadh às ùr gus an dèid a cur an sàs." +msgstr "Mas e true a th’ ann, thèid caipseanan nan uinneagan a chur ri bàrr nan dealbhagan, a’ tar-àithneadh bun-roghainn na slige a chuireas aig a’ bhonn iad. Ma dh’atharraicheas tu an roghainn seo, feumaidh tu an t-slige ath-thòiseachadh gus an dèid a cur an sàs." -#: extensions/places-menu/extension.js:78 -#: extensions/places-menu/extension.js:81 +#: extensions/places-menu/extension.js:79 +#: extensions/places-menu/extension.js:82 msgid "Places" msgstr "Ionadan" -#: extensions/places-menu/placeDisplay.js:65 +#: extensions/places-menu/placeDisplay.js:67 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Cha b’ urrainn dhuinn an t-iom-dhraibh airson “%s” a mhunntachadh" -#: extensions/places-menu/placeDisplay.js:78 +#: extensions/places-menu/placeDisplay.js:80 #, javascript-format -#| msgid "Failed to launch \"%s\"" msgid "Failed to launch “%s”" msgstr "Cha b’ urrainn dhuinn “%s” a chur gu dol" -#: extensions/places-menu/placeDisplay.js:137 -#: extensions/places-menu/placeDisplay.js:160 +#: extensions/places-menu/placeDisplay.js:141 +#: extensions/places-menu/placeDisplay.js:164 msgid "Computer" msgstr "Coimpiutair" -#: extensions/places-menu/placeDisplay.js:303 +#: extensions/places-menu/placeDisplay.js:342 msgid "Home" msgstr "Dachaigh" -#: extensions/places-menu/placeDisplay.js:347 +#: extensions/places-menu/placeDisplay.js:386 msgid "Browse Network" msgstr "Brabhsaich an lìonra" @@ -252,7 +189,6 @@ msgid "Cycle Screenshot Sizes" msgstr "Cuartaich meudan nan glacaidhean-sgrìn" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 -#| msgid "Cycle Screenshot Sizes" msgid "Cycle Screenshot Sizes Backward" msgstr "Cuartaich meudan nan glacaidhean-sgrìn gu contrarra" @@ -264,115 +200,143 @@ msgstr "Ainm an ùrlair" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Ainm an ùrlair a thèid a luchdadh o ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:110 +#: extensions/window-list/extension.js:106 msgid "Close" msgstr "Dùin" -#: extensions/window-list/extension.js:129 +#: extensions/window-list/extension.js:125 msgid "Unminimize" msgstr "Neo-fhìor-lùghdaich" -#: extensions/window-list/extension.js:130 +#: extensions/window-list/extension.js:126 msgid "Minimize" msgstr "Fìor-lùghdaich" -#: extensions/window-list/extension.js:136 +#: extensions/window-list/extension.js:132 msgid "Unmaximize" msgstr "Neo-làn-mheudaich" -#: extensions/window-list/extension.js:137 +#: extensions/window-list/extension.js:133 msgid "Maximize" msgstr "Làn-mheudaich" -#: extensions/window-list/extension.js:420 +#: extensions/window-list/extension.js:408 msgid "Minimize all" msgstr "Fìor-lùghdaich na h-uile" -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:414 msgid "Unminimize all" msgstr "Neo-fhìor-lùghdaich na h-uile" -#: extensions/window-list/extension.js:436 +#: extensions/window-list/extension.js:420 msgid "Maximize all" msgstr "Làn-mheudaich na h-uile" -#: extensions/window-list/extension.js:445 +#: extensions/window-list/extension.js:429 msgid "Unmaximize all" msgstr "Neo-làn-mheudaich na h-uile" -#: extensions/window-list/extension.js:454 +#: extensions/window-list/extension.js:438 msgid "Close all" msgstr "Dùin na h-uile" -#: extensions/window-list/extension.js:678 -#: extensions/workspace-indicator/extension.js:30 +#: extensions/window-list/extension.js:646 +#: extensions/workspace-indicator/extension.js:26 msgid "Workspace Indicator" -msgstr "Taisbeanair ruim-obrach" +msgstr "Taisbeanair rùim-obrach" -#: extensions/window-list/extension.js:842 +#: extensions/window-list/extension.js:816 msgid "Window List" msgstr "Liosta nan uinneagan" #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 msgid "When to group windows" -msgstr "Cuin a thèid na h-uinneagan a bhuidhneachadh" +msgstr "Cuin a thèid uinneagan a bhuidhneachadh" #: 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\"." msgid "" "Decides when to group windows from the same application on the window list. " "Possible values are “never”, “auto” and “always”." -msgstr "" -"Mìnichidh seo cuin a thèid uinneagan aig an aon aplacaid a bhuidhneachadh " -"air liosta nan uinneagan. ’S e “never”, “auto” agus “always” a tha sna " -"roghainnean dligheach." +msgstr "Taghaidh seo cuin a thèid na h-uinneagan aig aplacaid a bhuidhneachadh air liosta nan uinneagan. ’S e “never”, “auto” agus “always” a tha sna roghainnean dligheach." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 msgid "Show the window list on all monitors" -msgstr "Seall liosta nan uinneagan air a h-uile sgrìn" +msgstr "Seall liosta nan uinneagan air a h-uile monatair" #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 msgid "" "Whether to show the window list on all connected monitors or only on the " "primary one." -msgstr "" -"Co-dhiù an dèid liosta nan uinneagan a shealltainn air gach sgrìn " -"cheangailte no air a’ phrìomh-thè a-mhàin." +msgstr "Co-dhiù an dèid liosta nan uinneagan a shealltainn air gach monatair ceangailte no air a’ phrìomh-fhear a-mhàin." -#: extensions/window-list/prefs.js:32 +#: extensions/window-list/prefs.js:28 msgid "Window Grouping" msgstr "Buidhneachadh nan uinneagan" -#: extensions/window-list/prefs.js:50 +#: extensions/window-list/prefs.js:46 msgid "Never group windows" msgstr "Na buidhnich na h-uinneagan idir" -#: extensions/window-list/prefs.js:51 +#: extensions/window-list/prefs.js:47 msgid "Group windows when space is limited" -msgstr "Buidhnich na h-uinneagan nuair a bhios an rum gann" +msgstr "Buidhnich na h-uinneagan nuair a bhios an rùm gann" -#: extensions/window-list/prefs.js:52 +#: extensions/window-list/prefs.js:48 msgid "Always group windows" msgstr "Buidhnich na h-uinneagan an-còmhnaidh" -#: extensions/window-list/prefs.js:75 +#: extensions/window-list/prefs.js:71 msgid "Show on all monitors" -msgstr "Seall air a h-uile sgrìn" +msgstr "Seall air a h-uile monatair" -#: extensions/workspace-indicator/prefs.js:141 +#: extensions/workspace-indicator/prefs.js:134 msgid "Workspace Names" msgstr "Ainmean nan rumannan-obrach" -#: extensions/workspace-indicator/prefs.js:157 +#: extensions/workspace-indicator/prefs.js:150 msgid "Name" msgstr "Ainm" -#: extensions/workspace-indicator/prefs.js:198 +#: extensions/workspace-indicator/prefs.js:190 #, javascript-format msgid "Workspace %d" -msgstr "Rum-obrach %d" +msgstr "Rùm-obrach %d" + +#~ msgid "Attach modal dialog to the parent window" +#~ msgstr "Ceangail còmhradh mòdach ris an uinneag-pàraint" + +#~ msgid "" +#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell." +#~ msgstr "" + +#~ "Tar-àithnidh an iuchair seo an iuchair ann an org.gnome.mutter nuair a " +#~ "thèid Slige GNOME a ruith." + +#~ msgid "Arrangement of buttons on the titlebar" +#~ msgstr "Seòrsachadh nam putanan air a’ bhàr-tiotail" + +#~ msgid "" +#~ "This key overrides the key in org.gnome.desktop.wm.preferences when " +#~ "running GNOME Shell." +#~ msgstr "" + +#~ "Tar-àithnidh an iuchair seo an iuchair ann an org.gnome.desktop.wm." +#~ "preferences nuair a thèid Slige GNOME a ruith." + +#~ msgid "Enable edge tiling when dropping windows on screen edges" +#~ msgstr "" + +#~ "Cuir leacadh nan oirean an comas nuair a thèid uinneagan a leigeil às aig " +#~ "oir na sgrìn" + +#~ msgid "Workspaces only on primary monitor" +#~ msgstr "Rumannan-obrach air a’ phrìomh-sgrìn a-mhàin" + +#~ msgid "Delay focus changes in mouse mode until the pointer stops moving" +#~ msgstr "" + +#~ "Cuir dàil air atharraichean an fòcais ann am modh luchaige gus an sguir " +#~ "an tomhaire air gluasad" #~ msgid "Notifications" #~ msgstr "Brathan" @@ -427,6 +391,7 @@ msgstr "Rum-obrach %d" #~ "Clicking \n" #~ " native switches the Alternate Tab extension off. \n" #~ msgstr "" + #~ "Seo a' chiad turas a chì thu leudachan Alt Taba chaochlaidich. \n" #~ "Tagh an giùlan as fhearr leat:\n" #~ "\n" diff --git a/po/sl.po b/po/sl.po index 91f0cc86..c751dac1 100644 --- a/po/sl.po +++ b/po/sl.po @@ -2,7 +2,7 @@ # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER # This file is distributed under the same license as the gnome-shell-extensions package. # -# Matej Urbančič , + 2011–2017. +# Matej Urbančič , + 2011–2019. # msgid "" msgstr "" @@ -10,7 +10,7 @@ msgstr "" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "shell&keywords=I18N+L10N&component=extensions\n" "POT-Creation-Date: 2017-07-07 10:35+0200\n" -"PO-Revision-Date: 2017-07-07 10:36+0200\n" +"PO-Revision-Date: 2019-02-12 20:43+0100\n" "Last-Translator: Matej Urbančič \n" "Language-Team: Slovenian GNOME Translation Team \n" "Language: sl_SI\n" @@ -20,7 +20,7 @@ msgstr "" "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 2.0.1\n" +"X-Generator: Poedit 2.1.1\n" #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 msgid "GNOME Classic" @@ -32,7 +32,7 @@ msgstr "Seja omogoča prijavo v običajno namizje GNOME." #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 msgid "Attach modal dialog to the parent window" -msgstr "Priponi modalno pogovorno okno nadrejenemu oknu" +msgstr "Pripni modalno pogovorno okno nadrejenemu oknu" #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 @@ -41,8 +41,8 @@ msgstr "Priponi modalno pogovorno okno nadrejenemu oknu" msgid "" "This key overrides the key in org.gnome.mutter when running GNOME Shell." msgstr "" -"Možnost prepiše ključ med nastavitvami org.gnome.mutter med zagonom lupine " -"GNOME." +"Možnost med zagonom lupine GNOME prepiše ključ med nastavitvami org.gnome." +"mutter." #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 msgid "Arrangement of buttons on the titlebar" @@ -53,8 +53,8 @@ msgid "" "This key overrides the key in org.gnome.desktop.wm.preferences when running " "GNOME Shell." msgstr "" -"Možnost prepiše ključ med nastavitvami org.gnome.desktop.wm med zagonom " -"lupine GNOME." +"Možnost med zagonom lupine GNOME prepiše ključ med nastavitvami org.gnome." +"desktop.wm." #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24 msgid "Enable edge tiling when dropping windows on screen edges" @@ -111,8 +111,8 @@ msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" msgstr "" -"Seznam nizov z določilom ID programa (ime programa), ki mu sledi " -"dvopičje in nato številka delovne površine." +"Seznam nizov z določilom ID programa (ime programa), ki mu sledi dvopičje in " +"nato številka delovne površine." #: extensions/auto-move-windows/prefs.js:60 msgid "Application" @@ -174,8 +174,8 @@ msgid "" "as such it has little functionality on its own.\n" "Nevertheless it’s possible to customize the greeting message." msgstr "" -"Primer je oblikovan kot predloga za izgradnjo kakovostnih razširitev " -"za lupino, zato je delovanje deloma prilagojeno.\n" +"Primer je oblikovan kot predloga za izgradnjo kakovostnih razširitev za " +"lupino, zato je delovanje deloma prilagojeno.\n" "Kljub vsemu je mogoče prilagajati pozdravno sporočilo." #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 @@ -202,9 +202,9 @@ msgid "" "shell default of placing it at the bottom. Changing this setting requires " "restarting the shell to have any effect." msgstr "" -"Izbrana možnost določi postavitev nazivov oken na vrh posamezne sličice" -"in s tem prepiše privzeti izpis pod sličico. Za uveljavitev sprememb je " -"treba lupino ponovno zagnati." +"Izbrana možnost določi postavitev nazivov oken na vrh posamezne sličice in s " +"tem prepiše privzeti izpis pod sličico. Za uveljavitev sprememb je treba " +"lupino ponovno zagnati." #: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:81