Compare commits

..

3 Commits

Author SHA1 Message Date
Georges Basile Stavracas Neto
d6345a5c8b altTab: Switch to MetaWindowContent 2019-10-17 08:42:37 +02:00
Georges Basile Stavracas Neto
628b34e96f overview: Switch to MetaWindowContent 2019-10-16 18:17:47 +02:00
Georges Basile Stavracas Neto
5743b52ec8 workspace: Replace ClutterClone by MetaWindowContent 2019-10-16 18:16:12 +02:00
22 changed files with 896 additions and 1034 deletions

View File

@@ -16,14 +16,8 @@ run_eslint() {
ARGS_LEGACY='--config lint/eslintrc-legacy.json'
local extra_args=ARGS_$1
local output_var=OUTPUT_$1
local output=${!output_var}
# ensure output exists even if eslint doesn't report any errors
mkdir -p $(dirname $output)
touch $output
eslint -f unix ${!extra_args} -o $output js
local output=OUTPUT_$1
eslint -f unix ${!extra_args} -o ${!output} js
}
list_commit_range_additions() {
@@ -76,13 +70,10 @@ create_common() {
# non-legacy style just yet ...
unset CI_MERGE_REQUEST_TARGET_BRANCH_NAME
REMOTE=${1:-$CI_MERGE_REQUEST_PROJECT_URL.git}
BRANCH_NAME=${2:-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
if [ "$BRANCH_NAME" ]; then
git fetch $REMOTE $BRANCH_NAME
if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
git fetch $CI_MERGE_REQUEST_PROJECT_URL.git $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
branch_point=$(git merge-base HEAD FETCH_HEAD)
commit_range=$branch_point...HEAD
commit_range=$branch_point...$CI_COMMIT_SHA
list_commit_range_additions $commit_range > $LINE_CHANGES
@@ -105,7 +96,7 @@ if ! is_empty $OUTPUT_FINAL; then
fi
# Just show the report and succeed when not testing a MR
if [ -z "$BRANCH_NAME" ]; then
if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
exit 0
fi

View File

@@ -50,7 +50,7 @@
</description>
</key>
<key name="favorite-apps" type="as">
<default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'org.gnome.Shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
<default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
<summary>List of desktop file IDs for favorite applications</summary>
<description>
The applications corresponding to these identifiers

View File

@@ -6,7 +6,6 @@ const { Clutter, GObject, Pango, Shell, St } = imports.gi;
const Animation = imports.ui.animation;
const Batch = imports.gdm.batch;
const GdmUtil = imports.gdm.util;
const Util = imports.misc.util;
const Params = imports.misc.params;
const ShellEntry = imports.ui.shellEntry;
const UserWidget = imports.ui.userWidget;
@@ -17,10 +16,6 @@ var DEFAULT_BUTTON_WELL_ANIMATION_TIME = 300;
var MESSAGE_FADE_OUT_ANIMATION_TIME = 500;
const WIGGLE_OFFSET = 6;
const WIGGLE_DURATION = 65;
const N_WIGGLES = 3;
var AuthPromptMode = {
UNLOCK_ONLY: 0,
UNLOCK_OR_LOG_IN: 1
@@ -261,12 +256,6 @@ var AuthPrompt = GObject.registerClass({
this.updateSensitivity(canRetry);
this.setActorInDefaultButtonWell(null);
this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
Util.wiggle(this._entry, {
offset: WIGGLE_OFFSET,
duration: WIGGLE_DURATION,
wiggleCount: N_WIGGLES,
});
}
_onVerificationComplete() {

View File

@@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnCommandLine,
formatTime, formatTimeSpan, createTimeLabel, insertSorted,
makeCloseButton, ensureActorVisibleInScrollView, wiggle */
makeCloseButton, ensureActorVisibleInScrollView */
const { Clutter, Gio, GLib, GObject, Shell, St } = imports.gi;
const Gettext = imports.gettext;
@@ -429,37 +429,3 @@ function ensureActorVisibleInScrollView(scrollView, actor) {
duration: SCROLL_TIME
});
}
function wiggle(actor, params) {
params = Params.parse(params, {
offset: 0,
duration: 0,
wiggleCount: 0,
});
actor.translation_x = 0;
// Accelerate before wiggling
actor.ease({
translation_x: -params.offset,
duration: params.duration,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
// Wiggle
actor.ease({
translation_x: params.offset,
duration: params.duration,
mode: Clutter.AnimationMode.LINEAR,
repeatCount: params.wiggleCount,
autoReverse: true,
onComplete: () => {
// Decelerate and return to the original position
actor.ease({
translation_x: 0,
duration: params.duration,
mode: Clutter.AnimationMode.EASE_IN_QUAD,
});
}
});
}
});
}

View File

@@ -28,14 +28,20 @@ var AppIconMode = {
function _createWindowClone(window, size) {
let [width, height] = window.get_size();
let scale = Math.min(1.0, size / width, size / height);
return new Clutter.Clone({ source: window,
width: width * scale,
height: height * scale,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
// usual hack for the usual bug in ClutterBinLayout...
x_expand: true,
y_expand: true });
let cloneWidth = size;
let cloneHeight = size;
if (width > height)
cloneHeight = size * (height / width);
else
cloneWidth = size * (width / height);
return new Clutter.Actor({
content: window.content,
width: cloneWidth,
height: cloneHeight,
});
}
function getWindows(workspace) {
@@ -411,7 +417,7 @@ class CyclerHighlight extends St.Widget {
super._init({ layout_manager: new Clutter.BinLayout() });
this._window = null;
this._clone = new Clutter.Clone();
this._clone = new Clutter.Actor();
this.add_actor(this._clone);
this._highlight = new St.Widget({ style_class: 'cycler-highlight' });
@@ -433,8 +439,8 @@ class CyclerHighlight extends St.Widget {
this._window = w;
if (this._clone.source)
this._clone.source.sync_visibility();
if (this._clone.content)
this._clone.content.window_actor.sync_visibility();
let windowActor = this._window
? this._window.get_compositor_private() : null;
@@ -442,7 +448,7 @@ class CyclerHighlight extends St.Widget {
if (windowActor)
windowActor.hide();
this._clone.source = windowActor;
this._clone.content = windowActor.content;
}
_onAllocationChanged() {

View File

@@ -2045,6 +2045,7 @@ var AppFolderPopup = GObject.registerClass({
var AppIcon = GObject.registerClass({
GTypeName: 'AppDisplay_AppIcon',
Implements: [Search.SearchResultInterface],
Signals: {
'menu-state-changed': { param_types: [GObject.TYPE_BOOLEAN] },
'sync-tooltip': {},
@@ -2513,15 +2514,13 @@ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu {
this._appendSeparator();
}
let wantsDiscreteGpu = appInfo.get_boolean("PreferRunOnDiscreteGPU") ||
appInfo.get_boolean("X-KDE-RunOnDiscreteGpu");
if (discreteGpuAvailable &&
!wantsDiscreteGpu &&
this._source.app.state == Shell.AppState.STOPPED) {
this._source.app.state == Shell.AppState.STOPPED &&
!actions.includes('activate-discrete-gpu')) {
this._onDiscreteGpuMenuItem = this._appendMenuItem(_("Launch using Dedicated Graphics Card"));
this._onDiscreteGpuMenuItem.connect('activate', () => {
this._source.animateLaunch();
this._source.app.launch(0, -1, Shell.AppGpuSelection.DISCRETE);
this._source.app.launch(0, -1, true);
this.emit('activate-window', null);
});
}
@@ -2530,7 +2529,8 @@ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu {
let action = actions[i];
let item = this._appendMenuItem(appInfo.get_action_name(action));
item.connect('activate', (emitter, event) => {
if (action == 'new-window')
if (action == 'new-window' ||
action == 'activate-discrete-gpu')
this._source.animateLaunch();
this._source.app.launch_action(action, event.get_time(), -1);

View File

@@ -55,7 +55,6 @@ const RENAMED_DESKTOP_IDS = {
'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop',
'org.gnome.Weather.Application.desktop': 'org.gnome.Weather.desktop',
'polari.desktop': 'org.gnome.Polari.desktop',
'shotwell.desktop': 'org.gnome.Shotwell.desktop',
'tali.desktop': 'org.gnome.Tali.desktop',
'totem.desktop': 'org.gnome.Totem.desktop',
'evince.desktop': 'org.gnome.Evince.desktop',

View File

@@ -573,15 +573,11 @@ var _Draggable = class _Draggable {
while (target) {
if (target._delegate && target._delegate.acceptDrop) {
let [r_, targX, targY] = target.transform_stage_point(dropX, dropY);
let accepted = false;
try {
accepted = target._delegate.acceptDrop(this.actor._delegate,
this._dragActor, targX, targY, event.get_time());
} catch (e) {
// On error, skip this target
logError(e, "Skipping drag target");
}
if (accepted) {
if (target._delegate.acceptDrop(this.actor._delegate,
this._dragActor,
targX,
targY,
event.get_time())) {
// If it accepted the drop without taking the actor,
// handle it ourselves.
if (this._dragActor && this._dragActor.get_parent() == Main.uiGroup) {

View File

@@ -105,16 +105,6 @@ function _easeActor(actor, params) {
actor.set_easing_delay(params.delay);
delete params.delay;
let repeatCount = 0;
if (params.repeatCount != undefined)
repeatCount = params.repeatCount;
delete params.repeatCount;
let autoReverse = false;
if (params.autoReverse != undefined)
autoReverse = params.autoReverse;
delete params.autoReverse;
if (params.mode != undefined)
actor.set_easing_mode(params.mode);
delete params.mode;
@@ -137,12 +127,10 @@ function _easeActor(actor, params) {
else
Meta.disable_unredirect_for_display(global.display);
if (transition) {
transition.set({ repeatCount, autoReverse });
if (transition)
transition.connect('stopped', (t, finished) => callback(finished));
} else {
else
callback(true);
}
}
function _easeActorProperty(actor, propName, target, params) {
@@ -155,16 +143,6 @@ function _easeActorProperty(actor, propName, target, params) {
params.duration = adjustAnimationTime(params.duration);
let duration = Math.floor(params.duration || 0);
let repeatCount = 0;
if (params.repeatCount != undefined)
repeatCount = params.repeatCount;
delete params.repeatCount;
let autoReverse = false;
if (params.autoReverse != undefined)
autoReverse = params.autoReverse;
delete params.autoReverse;
// Copy Clutter's behavior for implicit animations, see
// should_skip_implicit_transition()
if (actor instanceof Clutter.Actor && !actor.mapped)
@@ -190,9 +168,7 @@ function _easeActorProperty(actor, propName, target, params) {
let transition = new Clutter.PropertyTransition(Object.assign({
property_name: propName,
interval: new Clutter.Interval({ value_type: pspec.value_type }),
remove_on_complete: true,
repeat_count: repeatCount,
auto_reverse: autoReverse,
remove_on_complete: true
}, params));
actor.add_transition(propName, transition);

View File

@@ -477,16 +477,16 @@ class RedBorderEffect extends Clutter.Effect {
color.init_from_4ub(0xff, 0, 0, 0xc4);
Cogl.set_source_color(color);
let alloc = actor.get_allocation_box();
let geom = actor.get_allocation_geometry();
let width = 2;
// clockwise order
Cogl.rectangle(0, 0, alloc.get_width(), width);
Cogl.rectangle(alloc.get_width() - width, width,
alloc.get_width(), alloc.get_height());
Cogl.rectangle(0, alloc.get_height(),
alloc.get_width() - width, alloc.get_height() - width);
Cogl.rectangle(0, alloc.get_height() - width,
Cogl.rectangle(0, 0, geom.width, width);
Cogl.rectangle(geom.width - width, width,
geom.width, geom.height);
Cogl.rectangle(0, geom.height,
geom.width - width, geom.height - width);
Cogl.rectangle(0, geom.height - width,
width, width);
}
});

View File

@@ -400,8 +400,12 @@ var Overview = class {
return null;
let window = windows[0];
let clone = new Clutter.Clone({ source: window,
x: window.x, y: window.y });
let clone = new Clutter.Actor({
source: window.content,
request_mode: Clutter.RequestMode.CONTENT_SIZE,
x: window.x,
y: window.y,
});
clone.source.connect('destroy', () => {
clone.destroy();
});

View File

@@ -1,5 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported SearchResultsView */
/* exported SearchResultsView, SearchResultInterface */
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
@@ -32,8 +32,17 @@ class MaxWidthBox extends St.BoxLayout {
}
});
var SearchResult = GObject.registerClass(
class SearchResult extends St.Button {
var SearchResultInterface = GObject.registerClass({
Requires: [Clutter.Actor],
}, class SearchResultInterface extends GObject.Interface {
activate() {
throw new GObject.NotImplementedError('activate in %s'.format(this.constructor.name));
}
});
var SearchResult = GObject.registerClass({
Implements: [SearchResultInterface]
}, class SearchResult extends St.Button {
_init(provider, metaInfo, resultsView) {
this.provider = provider;
this.metaInfo = metaInfo;
@@ -244,6 +253,8 @@ var SearchResultsBase = GObject.registerClass({
metasNeeded.forEach((resultId, i) => {
let meta = metas[i];
let display = this._createResultDisplay(meta);
if (!(display instanceof SearchResultInterface))
throw new Error(`${display} is not a valid search result`);
display.connect('key-focus-in', this._keyFocusIn.bind(this));
this._resultDisplays[resultId] = display;
});

View File

@@ -1,8 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported Workspace */
const { Atk, Clutter, GLib, GObject,
Graphene, Meta, Pango, Shell, St } = imports.gi;
const { Atk, Clutter, GLib, GObject, Meta, Pango, Shell, St } = imports.gi;
const Signals = imports.signals;
const DND = imports.ui.dnd;
@@ -85,7 +84,7 @@ class WindowCloneLayout extends Clutter.LayoutManager {
if (child == container._windowClone)
realWindow = container.realWindow;
else
realWindow = child.source;
realWindow = child.content.window_actor;
child.allocate(this._makeBoxForWindow(realWindow.meta_window),
flags);
@@ -111,7 +110,7 @@ var WindowClone = GObject.registerClass({
this.metaWindow._delegate = this;
this._workspace = workspace;
this._windowClone = new Clutter.Clone({ source: realWindow });
this._windowClone = new Clutter.Actor({ content: realWindow.content });
// We expect this to be used for all interaction rather than
// this._windowClone; as the former is reactive and the latter
// is not, this just works for most cases. However, for DND all
@@ -159,8 +158,6 @@ var WindowClone = GObject.registerClass({
this.x = this._boundingBox.x;
this.y = this._boundingBox.y;
this._computeWindowCenter();
let clickAction = new Clutter.ClickAction();
clickAction.connect('clicked', this._onClicked.bind(this));
clickAction.connect('long-press', this._onLongPress.bind(this));
@@ -200,7 +197,7 @@ var WindowClone = GObject.registerClass({
// Delete all windows, starting from the bottom-most (most-modal) one
let windows = this.get_children();
for (let i = windows.length - 1; i >= 1; i--) {
let realWindow = windows[i].source;
let realWindow = windows[i].content.window_actor;
let metaWindow = realWindow.meta_window;
metaWindow.delete(global.get_current_time());
@@ -232,7 +229,7 @@ var WindowClone = GObject.registerClass({
}
_doAddAttachedDialog(metaWin, realWin) {
let clone = new Clutter.Clone({ source: realWin });
let clone = new Clutter.Actor({ content: realWin.content });
clone._sizeChangedId = metaWin.connect('size-changed',
this._onMetaWindowSizeChanged.bind(this));
clone._posChangedId = metaWin.connect('position-changed',
@@ -285,7 +282,7 @@ var WindowClone = GObject.registerClass({
if (child == this._windowClone)
realWindow = this.realWindow;
else
realWindow = child.source;
realWindow = child.content.window_actor;
let metaWindow = realWindow.meta_window;
rect = rect.union(metaWindow.get_frame_rect());
@@ -296,18 +293,6 @@ var WindowClone = GObject.registerClass({
this.layout_manager.boundingBox = rect;
}
get windowCenter() {
return this._windowCenter;
}
_computeWindowCenter() {
let box = this.realWindow.get_allocation_box();
this._windowCenter = new Graphene.Point({
x: box.get_x() + box.get_width() / 2,
y: box.get_y() + box.get_height() / 2,
});
}
// Find the actor just below us, respecting reparenting done by DND code
getActualStackAbove() {
if (this._stackAbove == null)
@@ -342,7 +327,7 @@ var WindowClone = GObject.registerClass({
if (child == this._windowClone)
realWindow = this.realWindow;
else
realWindow = child.source;
realWindow = child.content.window_actor;
realWindow.meta_window.disconnect(child._sizeChangedId);
realWindow.meta_window.disconnect(child._posChangedId);
@@ -1032,7 +1017,11 @@ var UnalignedLayoutStrategy = class extends LayoutStrategy {
_sortRow(row) {
// Sort windows horizontally to minimize travel distance.
// This affects in what order the windows end up in a row.
row.windows.sort((a, b) => a.windowCenter.x - b.windowCenter.x);
row.windows.sort((a, b) => {
let aCenter = a.realWindow.x + a.realWindow.width / 2;
let bCenter = b.realWindow.x + b.realWindow.width / 2;
return aCenter - bCenter;
});
}
computeLayout(windows, layout) {
@@ -1051,7 +1040,11 @@ var UnalignedLayoutStrategy = class extends LayoutStrategy {
// Sort windows vertically to minimize travel distance.
// This affects what rows the windows get placed in.
let sortedWindows = windows.slice();
sortedWindows.sort((a, b) => a.windowCenter.y - b.windowCenter.y);
sortedWindows.sort((a, b) => {
let aCenter = a.realWindow.y + a.realWindow.height / 2;
let bCenter = b.realWindow.y + b.realWindow.height / 2;
return aCenter - bCenter;
});
let windowIdx = 0;
for (let i = 0; i < numRows; i++) {

View File

@@ -53,7 +53,8 @@ var WindowClone = GObject.registerClass({
}
}, class WindowClone extends Clutter.Actor {
_init(realWindow) {
let clone = new Clutter.Clone({ source: realWindow });
let clone = new Clutter.Actor({ content: realWindow.content,
request_mode: Clutter.RequestMode.CONTENT_SIZE });
super._init({
layout_manager: new PrimaryActorLayout(clone),
reactive: true
@@ -137,7 +138,8 @@ var WindowClone = GObject.registerClass({
}
_doAddAttachedDialog(metaDialog, realDialog) {
let clone = new Clutter.Clone({ source: realDialog });
let clone = new Clutter.Actor({ content: realDialog.content,
request_mode: Clutter.RequestMode.CONTENT_SIZE });
this._updateDialogPosition(realDialog, clone);
clone._updateId = realDialog.connect('notify::position', dialog => {
@@ -163,7 +165,7 @@ var WindowClone = GObject.registerClass({
_disconnectSignals() {
this.get_children().forEach(child => {
let realWindow = child.source;
let realWindow = child.content.window_actor;
realWindow.disconnect(child._updateId);
realWindow.disconnect(child._destroyId);

980
po/fa.po

File diff suppressed because it is too large Load Diff

100
po/fur.po
View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: video-subtitles master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-10-12 20:48+0000\n"
"PO-Revision-Date: 2019-10-17 15:53+0200\n"
"POT-Creation-Date: 2019-09-17 11:44+0000\n"
"PO-Revision-Date: 2019-09-26 16:19+0200\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian <fur@li.org>\n"
"Language: fur\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.4\n"
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/50-gnome-shell-system.xml:6
@@ -467,7 +467,7 @@ msgid "Next"
msgstr "Indenant"
#: js/gdm/authPrompt.js:197 js/ui/shellMountOperation.js:396
#: js/ui/unlockDialog.js:45
#: js/ui/unlockDialog.js:42
msgid "Unlock"
msgstr "Sbloche"
@@ -497,8 +497,8 @@ msgstr "(p.e., utent o %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js:884 js/ui/components/networkAgent.js:248
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
#: js/gdm/loginDialog.js:884 js/ui/components/networkAgent.js:247
#: js/ui/components/networkAgent.js:267 js/ui/components/networkAgent.js:285
msgid "Username: "
msgstr "Non utent: "
@@ -760,32 +760,32 @@ msgstr "Dispès"
msgid "All"
msgstr "Dutis"
#: js/ui/appDisplay.js:1745
#: js/ui/appDisplay.js:1749
msgid "Rename"
msgstr "Cambie non"
#. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2418 js/ui/panel.js:76
#: js/ui/appDisplay.js:2397 js/ui/panel.js:76
msgid "Open Windows"
msgstr "Barcons vierts"
#: js/ui/appDisplay.js:2437 js/ui/panel.js:83
#: js/ui/appDisplay.js:2416 js/ui/panel.js:83
msgid "New Window"
msgstr "Gnûf barcon"
#: js/ui/appDisplay.js:2449
#: js/ui/appDisplay.js:2428
msgid "Launch using Dedicated Graphics Card"
msgstr "Invie doprant une schede grafiche dedicade"
#: js/ui/appDisplay.js:2478 js/ui/dash.js:239
#: js/ui/appDisplay.js:2457 js/ui/dash.js:239
msgid "Remove from Favorites"
msgstr "Gjave dai preferîts"
#: js/ui/appDisplay.js:2484
#: js/ui/appDisplay.js:2463
msgid "Add to Favorites"
msgstr "Zonte tai preferîts"
#: js/ui/appDisplay.js:2494 js/ui/panel.js:94
#: js/ui/appDisplay.js:2473 js/ui/panel.js:94
msgid "Show Details"
msgstr "Mostre Detais"
@@ -1017,34 +1017,34 @@ msgid "Connect"
msgstr "Conet"
#. Cisco LEAP
#: js/ui/components/networkAgent.js:217 js/ui/components/networkAgent.js:229
#: js/ui/components/networkAgent.js:251 js/ui/components/networkAgent.js:270
#: js/ui/components/networkAgent.js:290 js/ui/components/networkAgent.js:300
#: js/ui/components/networkAgent.js:216 js/ui/components/networkAgent.js:228
#: js/ui/components/networkAgent.js:250 js/ui/components/networkAgent.js:269
#: js/ui/components/networkAgent.js:289 js/ui/components/networkAgent.js:299
msgid "Password: "
msgstr "Password: "
#. static WEP
#: js/ui/components/networkAgent.js:222
#: js/ui/components/networkAgent.js:221
msgid "Key: "
msgstr "Clâf: "
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:276
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:275
msgid "Private key password: "
msgstr "Password di clâf privade: "
#: js/ui/components/networkAgent.js:274
#: js/ui/components/networkAgent.js:273
msgid "Identity: "
msgstr "Identitât: "
#: js/ui/components/networkAgent.js:288
#: js/ui/components/networkAgent.js:287
msgid "Service: "
msgstr "Servizi: "
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:692
#: js/ui/components/networkAgent.js:316 js/ui/components/networkAgent.js:691
msgid "Authentication required by wireless network"
msgstr "La rêt cence fîl e domande autenticazion"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:692
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -1053,41 +1053,41 @@ msgstr ""
"Si scugne meti une password o une clâf di cifradure par jentrâ te rêt cence "
"fîl \"%s\"."
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:697
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:696
msgid "Wired 802.1X authentication"
msgstr "Autenticazion vie fîl 802.1X"
#: js/ui/components/networkAgent.js:324
#: js/ui/components/networkAgent.js:323
msgid "Network name: "
msgstr "Non rêt: "
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:328 js/ui/components/networkAgent.js:700
msgid "DSL authentication"
msgstr "Autenticazion DSL"
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:706
#: js/ui/components/networkAgent.js:335 js/ui/components/networkAgent.js:705
msgid "PIN code required"
msgstr "Si pretint un codiç PIN"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:706
msgid "PIN code is needed for the mobile broadband device"
msgstr "Si scugne meti un codiç PIN pal dispositîf a bande largje mobil"
#: js/ui/components/networkAgent.js:338
#: js/ui/components/networkAgent.js:337
msgid "PIN: "
msgstr "PIN: "
#: js/ui/components/networkAgent.js:345 js/ui/components/networkAgent.js:713
#: js/ui/components/networkAgent.js:344 js/ui/components/networkAgent.js:712
msgid "Mobile broadband network password"
msgstr "Passowrd rêt mobil a bande largje"
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:698
#: js/ui/components/networkAgent.js:702 js/ui/components/networkAgent.js:714
#: js/ui/components/networkAgent.js:345 js/ui/components/networkAgent.js:697
#: js/ui/components/networkAgent.js:701 js/ui/components/networkAgent.js:713
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "A covente une password par tacâsi a '%s'."
#: js/ui/components/networkAgent.js:681 js/ui/status/network.js:1675
#: js/ui/components/networkAgent.js:680 js/ui/status/network.js:1675
msgid "Network Manager"
msgstr "Ministradôr di rêt"
@@ -1475,26 +1475,6 @@ msgstr "Viôt sorzint"
msgid "Web Page"
msgstr "Pagjine Web"
#: js/ui/main.js:267
msgid "Logged in as a privileged user"
msgstr "Jentre come utent privilegjât"
#: js/ui/main.js:268
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
msgstr ""
"Si varès di evitâ di eseguî une session come utent privilegjât par resons di "
"sigurece. Se pussibil, tu varessis di jentrâ come utent normâl."
#: js/ui/main.js:274
msgid "Screen Lock disabled"
msgstr "Bloc dal schermi disabilitât"
#: js/ui/main.js:275
msgid "Screen Locking requires the GNOME display manager."
msgstr "Il bloc dal schermi al à bisugne dal gjestôr dai visôrs di GNOME."
#: js/ui/messageTray.js:1465
msgid "System Information"
msgstr "Informazion di sisteme"
@@ -2239,11 +2219,11 @@ msgstr "Dome esterni"
msgid "Built-in Only"
msgstr "Dome incorporât"
#: js/ui/unlockDialog.js:53
#: js/ui/unlockDialog.js:50
msgid "Log in as another user"
msgstr "Jentre come altri utent"
#: js/ui/unlockDialog.js:70
#: js/ui/unlockDialog.js:67
msgid "Unlock Window"
msgstr "Sbloche barcon"
@@ -2286,7 +2266,7 @@ msgstr[1] ""
#. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height.
#: js/ui/windowManager.js:686
#: js/ui/windowManager.js:683
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2370,7 +2350,7 @@ msgstr ""
#: src/extensions-tool/command-create.c:192 src/extensions-tool/main.c:169
msgid "Name"
msgstr "Non"
msgstr "Non "
#: src/extensions-tool/command-create.c:203
#, c-format
@@ -2624,7 +2604,7 @@ msgstr "Comants:"
msgid "Print help"
msgstr "Stampe jutori"
#: src/extensions-tool/main.c:248 src/main.c:460
#: src/extensions-tool/main.c:248 src/main.c:468
msgid "Print version"
msgstr "Stampe version"
@@ -2673,15 +2653,15 @@ msgstr "Instale complès di estensions"
msgid "Use “%s” to get detailed help.\n"
msgstr "Dopre “%s” par vê un jutori detaiât.\n"
#: src/main.c:466
#: src/main.c:474
msgid "Mode used by GDM for login screen"
msgstr "Modalitât doprade da GDM pe videade di acès"
#: src/main.c:472
#: src/main.c:480
msgid "Use a specific mode, e.g. “gdm” for login screen"
msgstr "Dopre une modalitât specifiche, par esempli “gdm” pe videade di acès"
#: src/main.c:478
#: src/main.c:486
msgid "List possible modes"
msgstr "Liste modalitâts pussibilis"

524
po/hr.po

File diff suppressed because it is too large Load Diff

View File

@@ -509,7 +509,7 @@ shell_app_activate_full (ShellApp *app,
case SHELL_APP_STATE_STOPPED:
{
GError *error = NULL;
if (!shell_app_launch (app, timestamp, workspace, SHELL_APP_GPU_SELECTION_AUTO, &error))
if (!shell_app_launch (app, timestamp, workspace, FALSE, &error))
{
char *msg;
msg = g_strdup_printf (_("Failed to launch “%s”"), shell_app_get_name (app));
@@ -584,7 +584,7 @@ shell_app_open_new_window (ShellApp *app,
* instance (Firefox). There are a few less-sensical cases such
* as say Pidgin.
*/
shell_app_launch (app, 0, workspace, SHELL_APP_GPU_SELECTION_AUTO, NULL);
shell_app_launch (app, 0, workspace, FALSE, NULL);
}
/**
@@ -1255,37 +1255,19 @@ wait_pid (GDesktopAppInfo *appinfo,
g_child_watch_add (pid, (GChildWatchFunc) g_spawn_close_pid, NULL);
}
static gboolean
get_with_discrete_gpu (ShellApp *app,
ShellAppGpuSelection discrete_gpu)
{
switch (discrete_gpu)
{
case SHELL_APP_GPU_SELECTION_INTEGRATED:
return FALSE;
case SHELL_APP_GPU_SELECTION_DISCRETE:
return TRUE;
case SHELL_APP_GPU_SELECTION_AUTO:
return g_desktop_app_info_get_boolean (app->info, "PreferRunOnDiscreteGPU") ||
g_desktop_app_info_get_boolean (app->info, "X-KDE-RunOnDiscreteGpu");
default:
g_assert_not_reached();
}
}
/**
* shell_app_launch:
* @timestamp: Event timestamp, or 0 for current event timestamp
* @workspace: Start on this workspace, or -1 for default
* @discrete_gpu: the preferred GPU to launch the application on.
* @discrete_gpu: Whether to start on the discrete GPU
* @error: A #GError
*/
gboolean
shell_app_launch (ShellApp *app,
guint timestamp,
int workspace,
ShellAppGpuSelection discrete_gpu,
GError **error)
shell_app_launch (ShellApp *app,
guint timestamp,
int workspace,
gboolean discrete_gpu,
GError **error)
{
ShellGlobal *global;
GAppLaunchContext *context;
@@ -1307,13 +1289,8 @@ shell_app_launch (ShellApp *app,
global = shell_global_get ();
context = shell_global_create_app_launch_context (global, timestamp, workspace);
/* FIXME: this should probably check whether we're on a dual-GPU system */
if (get_with_discrete_gpu (app, discrete_gpu))
{
g_app_launch_context_setenv (context, "DRI_PRIME", "1");
g_app_launch_context_setenv (context, "__NV_PRIME_RENDER_OFFLOAD", "1");
g_app_launch_context_setenv (context, "__GLX_VENDOR_LIBRARY_NAME", "nvidia");
}
if (discrete_gpu)
g_app_launch_context_setenv (context, "DRI_PRIME", "1");
/* Set LEAVE_DESCRIPTORS_OPEN in order to use an optimized gspawn
* codepath. The shell's open file descriptors should be marked CLOEXEC

View File

@@ -18,12 +18,6 @@ typedef enum {
SHELL_APP_STATE_RUNNING
} ShellAppState;
typedef enum {
SHELL_APP_GPU_SELECTION_AUTO = -1,
SHELL_APP_GPU_SELECTION_INTEGRATED = 0,
SHELL_APP_GPU_SELECTION_DISCRETE = 1
} ShellAppGpuSelection;
const char *shell_app_get_id (ShellApp *app);
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
@@ -57,11 +51,11 @@ GSList *shell_app_get_pids (ShellApp *app);
gboolean shell_app_is_on_workspace (ShellApp *app, MetaWorkspace *workspace);
gboolean shell_app_launch (ShellApp *app,
guint timestamp,
int workspace,
ShellAppGpuSelection discrete_gpu,
GError **error);
gboolean shell_app_launch (ShellApp *app,
guint timestamp,
int workspace,
gboolean discrete_gpu,
GError **error);
void shell_app_launch_action (ShellApp *app,
const char *action_name,

View File

@@ -489,7 +489,7 @@ st_box_layout_pick (ClutterActor *actor)
for (child = clutter_actor_get_first_child (actor);
child != NULL;
child = clutter_actor_get_next_sibling (child))
clutter_actor_pick (child);
clutter_actor_paint (child);
if (priv->hadjustment || priv->vadjustment)
cogl_framebuffer_pop_clip (fb);

View File

@@ -302,11 +302,11 @@ st_scroll_view_pick (ClutterActor *actor)
CLUTTER_ACTOR_CLASS (st_scroll_view_parent_class)->pick (actor);
if (priv->child)
clutter_actor_pick (priv->child);
clutter_actor_paint (priv->child);
if (priv->hscrollbar_visible)
clutter_actor_pick (priv->hscroll);
clutter_actor_paint (priv->hscroll);
if (priv->vscrollbar_visible)
clutter_actor_pick (priv->vscroll);
clutter_actor_paint (priv->vscroll);
}
static gboolean

View File

@@ -36,16 +36,16 @@ function test() {
obin.connect_after('paint', actor => {
Cogl.set_source_color4f(0, 1, 0, 1);
let alloc = actor.get_allocation_box();
let geom = actor.get_allocation_geometry();
let width = 3;
// clockwise order
Cogl.rectangle(0, 0, alloc.get_width(), width);
Cogl.rectangle(alloc.get_width() - width, width,
alloc.get_width(), alloc.get_height());
Cogl.rectangle(0, alloc.get_height(),
alloc.get_width() - width, alloc.get_height() - width);
Cogl.rectangle(0, alloc.get_height() - width,
Cogl.rectangle(0, 0, geom.width, width);
Cogl.rectangle(geom.width - width, width,
geom.width, geom.height);
Cogl.rectangle(0, geom.height,
geom.width - width, geom.height - width);
Cogl.rectangle(0, geom.height - width,
width, width);
});
tbox.add(obin);