summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-11-06 09:43:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-11-06 09:43:51 +0000
commit7df011e3c0bd09500ed23bff2e4dd253f131883b (patch)
treec8f7f7a6c2f5faa2942d27cefc6fd46cca492656
parentAdding upstream version 43.6. (diff)
downloadgnome-shell-upstream.tar.xz
gnome-shell-upstream.zip
Adding upstream version 43.9.upstream/43.9upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rwxr-xr-x.gitlab-ci/check-potfiles.sh4
-rwxr-xr-x.gitlab-ci/checkout-mutter.sh3
-rw-r--r--NEWS37
-rw-r--r--js/misc/ibusManager.js14
-rw-r--r--js/misc/inputMethod.js16
-rw-r--r--js/misc/parentalControlsManager.js38
-rw-r--r--js/misc/weather.js9
-rw-r--r--js/ui/barLevel.js56
-rw-r--r--js/ui/keyboard.js9
-rw-r--r--js/ui/lookingGlass.js5
-rw-r--r--js/ui/magnifier.js7
-rw-r--r--js/ui/messageList.js5
-rw-r--r--js/ui/quickSettings.js5
-rw-r--r--js/ui/screenshot.js22
-rw-r--r--js/ui/slider.js14
-rw-r--r--js/ui/workspace.js5
-rw-r--r--meson.build2
-rw-r--r--po/POTFILES.in1
-rw-r--r--po/POTFILES.skip1
-rw-r--r--po/cs.po388
-rw-r--r--po/fa.po228
-rw-r--r--src/main.c2
-rw-r--r--src/st/st-viewport.c49
-rw-r--r--subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in3
-rw-r--r--subprojects/extensions-app/meson.build2
-rw-r--r--subprojects/extensions-tool/meson.build2
-rw-r--r--subprojects/gvc/.gitlab-ci.yml5
-rw-r--r--subprojects/gvc/gvc-channel-map.c3
-rw-r--r--subprojects/gvc/gvc-mixer-card.c92
-rw-r--r--subprojects/gvc/gvc-mixer-control.c118
-rw-r--r--subprojects/gvc/gvc-mixer-event-role.c19
-rw-r--r--subprojects/gvc/gvc-mixer-stream.c261
-rw-r--r--subprojects/gvc/gvc-mixer-ui-device.c57
-rw-r--r--subprojects/shew/meson.build2
34 files changed, 796 insertions, 688 deletions
diff --git a/.gitlab-ci/check-potfiles.sh b/.gitlab-ci/check-potfiles.sh
index 82f101c..0969da1 100755
--- a/.gitlab-ci/check-potfiles.sh
+++ b/.gitlab-ci/check-potfiles.sh
@@ -2,6 +2,7 @@
srcdirs="src subprojects/extensions-tool"
uidirs="js subprojects/extensions-app"
+desktopdirs="data subprojects/extensions-app/ subprojects/extensions-tool"
# find source files that contain gettext keywords
files=$(grep -lR --include='*.c' '\(gettext\|[^I_)]_\)(' $srcdirs)
@@ -9,6 +10,9 @@ files=$(grep -lR --include='*.c' '\(gettext\|[^I_)]_\)(' $srcdirs)
# find ui files that contain translatable string
files="$files "$(grep -lRi --include='*.ui' 'translatable="[ty1]' $uidirs)
+# find .desktop files
+files="$files "$(find $desktopdirs -name '*.desktop*')
+
# filter out excluded files
if [ -f po/POTFILES.skip ]; then
files=$(for f in $files; do ! grep -q ^$f po/POTFILES.skip && echo $f; done)
diff --git a/.gitlab-ci/checkout-mutter.sh b/.gitlab-ci/checkout-mutter.sh
index 765e39d..76375fd 100755
--- a/.gitlab-ci/checkout-mutter.sh
+++ b/.gitlab-ci/checkout-mutter.sh
@@ -41,8 +41,9 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
fi
if [ -z "$mutter_target" ]; then
+ ref_remote=${CI_PROJECT_URL//gnome-shell/mutter}
echo -n Looking for $CI_COMMIT_REF_NAME on remote ...
- if fetch origin $CI_COMMIT_REF_NAME; then
+ if fetch $ref_remote $CI_COMMIT_REF_NAME; then
echo \ found
mutter_target=FETCH_HEAD
else
diff --git a/NEWS b/NEWS
index 87adbee..a38286f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,40 @@
+43.9
+====
+* Fix exposing window previews on lock screen via keyboard shortcuts
+ [Florian; !2944]
+* Improve handling of latched vs. locked modes in OSK [Carlos; !2945]
+* Reverse slider direction in RTL locales [Khalid; !2943]
+* Misc. bug fixes and cleanups [xiaofan; !2947]
+
+Contributors:
+ Carlos Garnacho, Florian Müllner, Khalid Abu Shawarib, xiaofan
+
+Translators:
+ Daniel Rusek [cs]
+
+43.8
+====
+* Fix accessibility of quick settings sliders [Lukáš; !2762]
+* Allow notification dismissal with backspace [Chris; !2435]
+* Misc. bug fixes and cleanups [Florian, Takao, Carlos, Brendan, Daniel, Jonas;
+ !2814, !2842, !2849, !2668, !2666, !2876, !2729, !2828, !2904]
+
+Contributors:
+ Takao Fujiwara, Carlos Garnacho, Chris Heywood, Florian Müllner,
+ Lukáš Tyrychtr, Daniel van Vugt, Brendan William, Jonas Ådahl
+
+Translators:
+ Danial Behzadi [fa]
+
+43.7
+====
+* Fix cursor offset when using magnifier [Андрей; !2780]
+* Fix missing workspace borders after wallpaper changes [Florian; !2801]
+* Misc. bug fixes and cleanups [Florian; !2796]
+
+Contributors:
+ Florian Müllner, Андрей Гриценко
+
43.6
====
* Fix stuck authentication dialog in remote sessions [Joan; !2761]
diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
index 969556d..214db55 100644
--- a/js/misc/ibusManager.js
+++ b/js/misc/ibusManager.js
@@ -108,17 +108,9 @@ var IBusManager = class extends Signals.EventEmitter {
_spawn(extraArgs = []) {
try {
- let cmdLine = ['ibus-daemon', '--panel', 'disable', ...extraArgs];
- let env = [];
-
- this._tryAppendEnv(env, 'DBUS_SESSION_BUS_ADDRESS');
- this._tryAppendEnv(env, 'WAYLAND_DISPLAY');
- this._tryAppendEnv(env, 'HOME');
- this._tryAppendEnv(env, 'LANG');
- this._tryAppendEnv(env, 'LC_CTYPE');
- this._tryAppendEnv(env, 'COMPOSE_FILE');
- this._tryAppendEnv(env, 'DISPLAY');
-
+ const cmdLine = ['ibus-daemon', '--panel', 'disable', ...extraArgs];
+ const launchContext = global.create_app_launch_context(0, -1);
+ const env = launchContext.get_environment();
// Use DO_NOT_REAP_CHILD to avoid adouble-fork internally
// since ibus-daemon refuses to start with init as its parent.
const [success_, pid] = GLib.spawn_async(
diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js
index e008e64..e01eac8 100644
--- a/js/misc/inputMethod.js
+++ b/js/misc/inputMethod.js
@@ -12,6 +12,8 @@ Gio._promisify(IBus.InputContext.prototype,
var HIDE_PANEL_TIME = 50;
+const HAVE_REQUIRE_SURROUNDING_TEXT = GObject.signal_lookup('require-surrounding-text', IBus.InputContext);
+
var InputMethod = GObject.registerClass({
Signals: {
'surrounding-text-set': {},
@@ -76,7 +78,6 @@ var InputMethod = GObject.registerClass({
this._context.set_client_commit_preedit(true);
this._context.connect('commit-text', this._onCommitText.bind(this));
- this._context.connect('require-surrounding-text', this._onRequireSurroundingText.bind(this));
this._context.connect('delete-surrounding-text', this._onDeleteSurroundingText.bind(this));
this._context.connect('update-preedit-text-with-mode', this._onUpdatePreeditText.bind(this));
this._context.connect('show-preedit-text', this._onShowPreeditText.bind(this));
@@ -84,6 +85,9 @@ var InputMethod = GObject.registerClass({
this._context.connect('forward-key-event', this._onForwardKeyEvent.bind(this));
this._context.connect('destroy', this._clear.bind(this));
+ if (HAVE_REQUIRE_SURROUNDING_TEXT)
+ this._context.connect('require-surrounding-text', this._onRequireSurroundingText.bind(this));
+
Main.keyboard.connectObject('visibility-changed', () => this._updateCapabilities());
this._updateCapabilities();
@@ -180,6 +184,7 @@ var InputMethod = GObject.registerClass({
vfunc_focus_in(focus) {
this._currentFocus = focus;
if (this._context) {
+ this.update();
this._context.focus_in();
this._emitRequestSurrounding();
}
@@ -363,7 +368,6 @@ var InputMethod = GObject.registerClass({
_fullReset() {
this._context.set_content_type(0, 0);
this._context.set_cursor_location(0, 0, 0, 0);
- this._context.set_capabilities(0);
this._context.reset();
}
@@ -372,9 +376,11 @@ var InputMethod = GObject.registerClass({
return;
this._updateCapabilities();
this._context.set_content_type(this._purpose, this._hints);
- this._context.set_cursor_location(
- this._cursorRect.x, this._cursorRect.y,
- this._cursorRect.width, this._cursorRect.height);
+ if (this._cursorRect) {
+ this._context.set_cursor_location(
+ this._cursorRect.x, this._cursorRect.y,
+ this._cursorRect.width, this._cursorRect.height);
+ }
this._emitRequestSurrounding();
}
});
diff --git a/js/misc/parentalControlsManager.js b/js/misc/parentalControlsManager.js
index e2192ca..48f0ca2 100644
--- a/js/misc/parentalControlsManager.js
+++ b/js/misc/parentalControlsManager.js
@@ -74,18 +74,10 @@ var ParentalControlsManager = GObject.registerClass({
try {
const connection = await Gio.DBus.get(Gio.BusType.SYSTEM, null);
this._manager = new Malcontent.Manager({ connection });
- this._appFilter = await this._manager.get_app_filter_async(
- Shell.util_get_uid(),
- Malcontent.ManagerGetValueFlags.NONE,
- null);
+ this._appFilter = await this._getAppFilter();
} catch (e) {
- if (e.matches(Malcontent.ManagerError, Malcontent.ManagerError.DISABLED)) {
- console.debug('Parental controls globally disabled');
- this._disabled = true;
- } else {
- logError(e, 'Failed to get parental controls settings');
- return;
- }
+ logError(e, 'Failed to get parental controls settings');
+ return;
}
this._manager.connect('app-filter-changed', this._onAppFilterChanged.bind(this));
@@ -95,6 +87,25 @@ var ParentalControlsManager = GObject.registerClass({
this.emit('app-filter-changed');
}
+ async _getAppFilter() {
+ let appFilter = null;
+
+ try {
+ appFilter = await this._manager.get_app_filter_async(
+ Shell.util_get_uid(),
+ Malcontent.ManagerGetValueFlags.NONE,
+ null);
+ } catch (e) {
+ if (!e.matches(Malcontent.ManagerError, Malcontent.ManagerError.DISABLED))
+ throw e;
+
+ console.debug('Parental controls globally disabled');
+ this._disabled = true;
+ }
+
+ return appFilter;
+ }
+
async _onAppFilterChanged(manager, uid) {
// Emit 'changed' signal only if app-filter is changed for currently logged-in user.
let currentUid = Shell.util_get_uid();
@@ -102,10 +113,7 @@ var ParentalControlsManager = GObject.registerClass({
return;
try {
- this._appFilter = await this._manager.get_app_filter_async(
- currentUid,
- Malcontent.ManagerGetValueFlags.NONE,
- null);
+ this._appFilter = await this._getAppFilter();
this.emit('app-filter-changed');
} catch (e) {
// Log an error and keep the old app filter.
diff --git a/js/misc/weather.js b/js/misc/weather.js
index a01b832..2aa340a 100644
--- a/js/misc/weather.js
+++ b/js/misc/weather.js
@@ -267,10 +267,11 @@ var WeatherClient = class extends Signals.EventEmitter {
_onGClueLocationChanged() {
let geoLocation = this._gclueService.location;
- let location = GWeather.Location.new_detached(geoLocation.description,
- null,
- geoLocation.latitude,
- geoLocation.longitude);
+ // Provide empty name so GWeather sets location name
+ const location = GWeather.Location.new_detached('',
+ null,
+ geoLocation.latitude,
+ geoLocation.longitude);
this._setLocation(location);
}
diff --git a/js/ui/barLevel.js b/js/ui/barLevel.js
index 25d4835..da5b34a 100644
--- a/js/ui/barLevel.js
+++ b/js/ui/barLevel.js
@@ -98,6 +98,7 @@ var BarLevel = GObject.registerClass({
let cr = this.get_context();
let themeNode = this.get_theme_node();
let [width, height] = this.get_surface_size();
+ const rtl = this.get_text_direction() === Clutter.TextDirection.RTL;
let barLevelHeight = themeNode.get_length('-barlevel-height');
let barLevelBorderRadius = Math.min(width, barLevelHeight) / 2;
@@ -124,20 +125,36 @@ var BarLevel = GObject.registerClass({
const TAU = Math.PI * 2;
let endX = 0;
- if (this._maxValue > 0)
- endX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * this._value / this._maxValue;
+ if (this._maxValue > 0) {
+ let progress = this._value / this._maxValue;
+ if (rtl)
+ progress = 1 - progress;
+ endX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * progress;
+ }
+
+ let overdriveRatio = this._overdriveStart / this._maxValue;
+ if (rtl)
+ overdriveRatio = 1 - overdriveRatio;
+ let overdriveSeparatorX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * overdriveRatio;
- let overdriveSeparatorX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * this._overdriveStart / this._maxValue;
let overdriveActive = this._overdriveStart !== this._maxValue;
let overdriveSeparatorWidth = 0;
if (overdriveActive)
overdriveSeparatorWidth = themeNode.get_length('-barlevel-overdrive-separator-width');
+ let xcArcStart = barLevelBorderRadius + barLevelBorderWidth;
+ let xcArcEnd = width - xcArcStart;
+ if (rtl)
+ [xcArcStart, xcArcEnd] = [xcArcEnd, xcArcStart];
+
/* background bar */
- cr.arc(width - barLevelBorderRadius - barLevelBorderWidth, height / 2, barLevelBorderRadius, TAU * (3 / 4), TAU * (1 / 4));
+ if (!rtl)
+ cr.arc(xcArcEnd, height / 2, barLevelBorderRadius, TAU * (3 / 4), TAU * (1 / 4));
+ else
+ cr.arcNegative(xcArcEnd, height / 2, barLevelBorderRadius, TAU * (3 / 4), TAU * (1 / 4));
cr.lineTo(endX, (height + barLevelHeight) / 2);
cr.lineTo(endX, (height - barLevelHeight) / 2);
- cr.lineTo(width - barLevelBorderRadius - barLevelBorderWidth, (height - barLevelHeight) / 2);
+ cr.lineTo(xcArcEnd, (height - barLevelHeight) / 2);
Clutter.cairo_set_source_color(cr, barLevelColor);
cr.fillPreserve();
Clutter.cairo_set_source_color(cr, barLevelBorderColor);
@@ -145,11 +162,17 @@ var BarLevel = GObject.registerClass({
cr.stroke();
/* normal progress bar */
- let x = Math.min(endX, overdriveSeparatorX - overdriveSeparatorWidth / 2);
- cr.arc(barLevelBorderRadius + barLevelBorderWidth, height / 2, barLevelBorderRadius, TAU * (1 / 4), TAU * (3 / 4));
+ let x = 0;
+ if (!rtl) {
+ x = Math.min(endX, overdriveSeparatorX - overdriveSeparatorWidth / 2);
+ cr.arc(xcArcStart, height / 2, barLevelBorderRadius, TAU * (1 / 4), TAU * (3 / 4));
+ } else {
+ x = Math.max(endX, overdriveSeparatorX + overdriveSeparatorWidth / 2);
+ cr.arcNegative(xcArcStart, height / 2, barLevelBorderRadius, TAU * (1 / 4), TAU * (3 / 4));
+ }
cr.lineTo(x, (height - barLevelHeight) / 2);
cr.lineTo(x, (height + barLevelHeight) / 2);
- cr.lineTo(barLevelBorderRadius + barLevelBorderWidth, (height + barLevelHeight) / 2);
+ cr.lineTo(xcArcStart, (height + barLevelHeight) / 2);
if (this._value > 0)
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
cr.fillPreserve();
@@ -158,7 +181,10 @@ var BarLevel = GObject.registerClass({
cr.stroke();
/* overdrive progress barLevel */
- x = Math.min(endX, overdriveSeparatorX) + overdriveSeparatorWidth / 2;
+ if (!rtl)
+ x = Math.min(endX, overdriveSeparatorX) + overdriveSeparatorWidth / 2;
+ else
+ x = Math.max(endX, overdriveSeparatorX) - overdriveSeparatorWidth / 2;
if (this._value > this._overdriveStart) {
cr.moveTo(x, (height - barLevelHeight) / 2);
cr.lineTo(endX, (height - barLevelHeight) / 2);
@@ -178,9 +204,15 @@ var BarLevel = GObject.registerClass({
Clutter.cairo_set_source_color(cr, barLevelActiveColor);
else
Clutter.cairo_set_source_color(cr, barLevelOverdriveColor);
- cr.arc(endX, height / 2, barLevelBorderRadius, TAU * (3 / 4), TAU * (1 / 4));
- cr.lineTo(Math.floor(endX), (height + barLevelHeight) / 2);
- cr.lineTo(Math.floor(endX), (height - barLevelHeight) / 2);
+ if (!rtl) {
+ cr.arc(endX, height / 2, barLevelBorderRadius, TAU * (3 / 4), TAU * (1 / 4));
+ cr.lineTo(Math.floor(endX), (height + barLevelHeight) / 2);
+ cr.lineTo(Math.floor(endX), (height - barLevelHeight) / 2);
+ } else {
+ cr.arcNegative(endX, height / 2, barLevelBorderRadius, TAU * (3 / 4), TAU * (1 / 4));
+ cr.lineTo(Math.ceil(endX), (height + barLevelHeight) / 2);
+ cr.lineTo(Math.ceil(endX), (height - barLevelHeight) / 2);
+ }
cr.lineTo(endX, (height - barLevelHeight) / 2);
cr.fillPreserve();
cr.setLineWidth(barLevelBorderWidth);
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index b3c4cbe..be128d3 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1492,6 +1492,7 @@ var Keyboard = GObject.registerClass({
let layout = new KeyContainer();
layout.shiftKeys = [];
+ layout.mode = currentLevel.mode;
this._loadRows(currentLevel, level, levels.length, layout);
layers[level] = layout;
@@ -1527,7 +1528,10 @@ var Keyboard = GObject.registerClass({
if (key.action !== 'modifier') {
button.connect('commit', (_actor, keyval, str) => {
- this._commitAction(keyval, str);
+ this._commitAction(keyval, str).then(() => {
+ if (layout.mode === 'latched' && !this._latched)
+ this._setActiveLayer(0);
+ });
});
}
@@ -1607,9 +1611,6 @@ var Keyboard = GObject.registerClass({
});
}
}
-
- if (!this._latched)
- this._setActiveLayer(0);
}
_previousWordPosition(text, cursor) {
diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js
index f3af563..6b6b65f 100644
--- a/js/ui/lookingGlass.js
+++ b/js/ui/lookingGlass.js
@@ -261,6 +261,11 @@ function objectToString(o) {
if (typeof o == typeof objectToString) {
// special case this since the default is way, way too verbose
return '<js function>';
+ } else if (o && o.toString === undefined) {
+ // eeks, something unprintable. we'll have to guess, probably a module
+ return typeof o === 'object' && !(o instanceof Object)
+ ? '<module>'
+ : '<unknown>';
} else {
return `${o}`;
}
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
index f4012de..bd69047 100644
--- a/js/ui/magnifier.js
+++ b/js/ui/magnifier.js
@@ -103,12 +103,15 @@ var Magnifier = class Magnifier extends Signals.EventEmitter {
this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE });
this._mouseSprite.content = new MouseSpriteContent();
+ this._cursorRoot = new Clutter.Actor();
+ this._cursorRoot.add_actor(this._mouseSprite);
+
// Create the first ZoomRegion and initialize it according to the
// magnification settings.
[this.xMouse, this.yMouse] = global.get_pointer();
- let aZoomRegion = new ZoomRegion(this, this._mouseSprite);
+ let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
this._zoomRegions.push(aZoomRegion);
this._settingsInit(aZoomRegion);
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
@@ -283,7 +286,7 @@ var Magnifier = class Magnifier extends Signals.EventEmitter {
* @returns {ZoomRegion} the newly created ZoomRegion.
*/
createZoomRegion(xMagFactor, yMagFactor, roi, viewPort) {
- let zoomRegion = new ZoomRegion(this, this._mouseSprite);
+ let zoomRegion = new ZoomRegion(this, this._cursorRoot);
zoomRegion.setViewPort(viewPort);
// We ignore the redundant width/height on the ROI
diff --git a/js/ui/messageList.js b/js/ui/messageList.js
index 29e7675..c910ca7 100644
--- a/js/ui/messageList.js
+++ b/js/ui/messageList.js
@@ -533,8 +533,9 @@ var Message = GObject.registerClass({
vfunc_key_press_event(keyEvent) {
let keysym = keyEvent.keyval;
- if (keysym == Clutter.KEY_Delete ||
- keysym == Clutter.KEY_KP_Delete) {
+ if (keysym === Clutter.KEY_Delete ||
+ keysym === Clutter.KEY_KP_Delete ||
+ keysym === Clutter.KEY_BackSpace) {
if (this.canClose()) {
this.close();
return Clutter.EVENT_STOP;
diff --git a/js/ui/quickSettings.js b/js/ui/quickSettings.js
index f35a15c..7cfd4f4 100644
--- a/js/ui/quickSettings.js
+++ b/js/ui/quickSettings.js
@@ -193,7 +193,10 @@ var QuickSlider = GObject.registerClass({
});
box.add_child(sliderBin);
- sliderBin.set_accessible(this.slider.get_accessible());
+ // Make the slider bin transparent for a11y
+ const sliderAccessible = this.slider.get_accessible();
+ sliderAccessible.set_parent(sliderBin.get_parent().get_accessible());
+ sliderBin.set_accessible(sliderAccessible);
sliderBin.connect('event', (bin, event) => this.slider.event(event, false));
this._menuButton = new St.Button({
diff --git a/js/ui/screenshot.js b/js/ui/screenshot.js
index 4d9e42e..5139052 100644
--- a/js/ui/screenshot.js
+++ b/js/ui/screenshot.js
@@ -1370,6 +1370,16 @@ var ScreenshotUI = GObject.registerClass({
this._castButton.reactive = Main.sessionMode.allowScreencast;
}
+ _syncWindowButtonSensitivity() {
+ const windows =
+ this._windowSelectors.flatMap(selector => selector.windows());
+
+ this._windowButton.reactive =
+ Main.sessionMode.hasWindows &&
+ windows.length > 0 &&
+ !this._castButton.checked;
+ }
+
_refreshButtonLayout() {
const buttonLayout = Meta.prefs_get_button_layout();
@@ -1486,10 +1496,7 @@ var ScreenshotUI = GObject.registerClass({
});
}
- this._windowButton.reactive =
- Main.sessionMode.hasWindows &&
- windows.length > 0 &&
- !this._castButton.checked;
+ this._syncWindowButtonSensitivity();
if (!this._windowButton.reactive)
this._selectionButton.checked = true;
@@ -1732,9 +1739,7 @@ var ScreenshotUI = GObject.registerClass({
this._captureButton.remove_style_pseudo_class('cast');
- const windows =
- this._windowSelectors.flatMap(selector => selector.windows());
- this._windowButton.reactive = windows.length > 0;
+ this._syncWindowButtonSensitivity();
}
}
@@ -1996,7 +2001,8 @@ var ScreenshotUI = GObject.registerClass({
return Clutter.EVENT_STOP;
}
- if (symbol === Clutter.KEY_v || symbol === Clutter.KEY_V) {
+ if (this._castButton.reactive &&
+ (symbol === Clutter.KEY_v || symbol === Clutter.KEY_V)) {
this._castButton.checked = !this._castButton.checked;
return Clutter.EVENT_STOP;
}
diff --git a/js/ui/slider.js b/js/ui/slider.js
index 6ca76fe..849599d 100644
--- a/js/ui/slider.js
+++ b/js/ui/slider.js
@@ -36,6 +36,7 @@ var Slider = GObject.registerClass({
let cr = this.get_context();
let themeNode = this.get_theme_node();
let [width, height] = this.get_surface_size();
+ const rtl = this.get_text_direction() === Clutter.TextDirection.RTL;
let handleRadius = themeNode.get_length('-slider-handle-radius');
@@ -44,10 +45,13 @@ var Slider = GObject.registerClass({
themeNode.lookup_color('-slider-handle-border-color', false);
const ceiledHandleRadius = Math.ceil(handleRadius + handleBorderWidth);
- const handleX = ceiledHandleRadius +
- (width - 2 * ceiledHandleRadius) * this._value / this._maxValue;
const handleY = height / 2;
+ let handleX = ceiledHandleRadius +
+ (width - 2 * ceiledHandleRadius) * this._value / this._maxValue;
+ if (rtl)
+ handleX = width - handleX;
+
let color = themeNode.get_foreground_color();
Clutter.cairo_set_source_color(cr, color);
cr.arc(handleX, handleY, handleRadius, 0, 2 * Math.PI);
@@ -189,9 +193,13 @@ var Slider = GObject.registerClass({
_moveHandle(absX, _absY) {
let relX, sliderX;
[sliderX] = this.get_transformed_position();
+ const rtl = this.get_text_direction() === Clutter.TextDirection.RTL;
+ let width = this._barLevelWidth;
+
relX = absX - sliderX;
+ if (rtl)
+ relX = width - relX;
- let width = this._barLevelWidth;
let handleRadius = this.get_theme_node().get_length('-slider-handle-radius');
let newvalue;
diff --git a/js/ui/workspace.js b/js/ui/workspace.js
index 0069cdd..bf631a5 100644
--- a/js/ui/workspace.js
+++ b/js/ui/workspace.js
@@ -981,6 +981,11 @@ class WorkspaceBackground extends Shell.WorkspaceBackground {
useContentSize: false,
});
+ this._bgManager.connect('changed', () => {
+ this._updateRoundedClipBounds();
+ this._updateBorderRadius();
+ });
+
global.display.connectObject('workareas-changed', () => {
this._workarea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
this._updateRoundedClipBounds();
diff --git a/meson.build b/meson.build
index 4ed1a9b..1fa4311 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('gnome-shell', 'c',
- version: '43.6',
+ version: '43.9',
meson_version: '>= 0.58.0',
license: 'GPLv2+'
)
diff --git a/po/POTFILES.in b/po/POTFILES.in
index b647698..0ba8752 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -5,6 +5,7 @@ data/50-gnome-shell-screenshots.xml
data/50-gnome-shell-system.xml
data/org.gnome.Shell.desktop.in.in
data/org.gnome.shell.gschema.xml.in
+data/org.gnome.Shell.Extensions.desktop.in.in
data/org.gnome.Shell.PortalHelper.desktop.in.in
js/dbusServices/extensions/ui/extension-error-page.ui
js/gdm/authPrompt.js
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 0c8451d..dd694f7 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,3 +1,4 @@
+data/gnome-shell-overrides-migration.desktop.in
data/org.gnome.Shell@wayland.service.in
data/org.gnome.Shell@x11.service.in
js/ui/init.js
diff --git a/po/cs.po b/po/cs.po
index a40e359..a036f8a 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -12,16 +12,16 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
-"POT-Creation-Date: 2022-09-14 22:12+0000\n"
-"PO-Revision-Date: 2022-09-15 07:45+0200\n"
-"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"POT-Creation-Date: 2023-08-23 12:52+0000\n"
+"PO-Revision-Date: 2023-09-08 16:52+0200\n"
+"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-"X-Generator: Gtranslator 42.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Poedit 3.3.2\n"
"X-Project-Style: gnome\n"
#: data/50-gnome-shell-launchers.xml:6
@@ -65,27 +65,27 @@ msgid "Activate favorite application 9"
msgstr "Aktivovat oblíbenou aplikaci č. 9"
#. Translators: name of the folder under ~/Pictures for screenshots.
-#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2079
+#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2076
msgid "Screenshots"
msgstr "Snímky obrazovky"
#: data/50-gnome-shell-screenshots.xml:9
-#: data/org.gnome.shell.gschema.xml.in:244
+#: data/org.gnome.shell.gschema.xml.in:234
msgid "Take a screenshot interactively"
msgstr "Pořídit snímek obrazovky interaktivně"
#: data/50-gnome-shell-screenshots.xml:12
-#: data/org.gnome.shell.gschema.xml.in:256
+#: data/org.gnome.shell.gschema.xml.in:246
msgid "Take a screenshot"
msgstr "Pořídit snímek obrazovky"
#: data/50-gnome-shell-screenshots.xml:15
-#: data/org.gnome.shell.gschema.xml.in:252
+#: data/org.gnome.shell.gschema.xml.in:242
msgid "Take a screenshot of a window"
msgstr "Pořídit snímek okna"
#: data/50-gnome-shell-screenshots.xml:18
-#: data/org.gnome.shell.gschema.xml.in:248
+#: data/org.gnome.shell.gschema.xml.in:238
msgid "Record a screencast interactively"
msgstr "Zaznamenat dění na obrazovce interaktivně"
@@ -246,27 +246,10 @@ msgstr ""
"volby."
#: data/org.gnome.shell.gschema.xml.in:89
-msgid ""
-"Whether the default Bluetooth adapter had set up devices associated to it"
-msgstr "Zda měl adaptér Bluetooth nastavená zařízení pro spolupráci s ním"
-
-#: data/org.gnome.shell.gschema.xml.in:90
-msgid ""
-"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
-"powered, or if there were devices set up associated with the default "
-"adapter. This will be reset if the default adapter is ever seen not to have "
-"devices associated to it."
-msgstr ""
-"Shell zobrazuje nabídku Bluetooth jen v případě, že je adaptér Bluetooth "
-"zapnutý, nebo když existují nějaká zařízení nastavená pro spolupráci s "
-"výchozím adaptérem. Nabídka zmizí, když se zjistí, že výchozí adaptér nemá "
-"přiřazená žádná zařízení."
-
-#: data/org.gnome.shell.gschema.xml.in:99
msgid "The last selected non-default power profile"
msgstr "Poslední vybraný profil napájení, jiný než výchozí"
-#: data/org.gnome.shell.gschema.xml.in:100
+#: data/org.gnome.shell.gschema.xml.in:90
msgid ""
"Some systems support more than two power profiles. In order to still support "
"toggling between two profiles, this key records the last selected non-"
@@ -276,11 +259,11 @@ msgstr ""
"nadále podporovat přepínání mezi dvěma profily, uchovává tento klíč poslední "
"vybraný profil, jiný než výchozí."
-#: data/org.gnome.shell.gschema.xml.in:108
+#: data/org.gnome.shell.gschema.xml.in:98
msgid "The last version the “Welcome to GNOME” dialog was shown for"
msgstr "Poslední verze „Vítá vás GNOME“ nabídnutá v dialogovém okně"
-#: data/org.gnome.shell.gschema.xml.in:109
+#: data/org.gnome.shell.gschema.xml.in:99
msgid ""
"This key determines for which version the “Welcome to GNOME” dialog was last "
"shown. An empty string represents the oldest possible version, and a huge "
@@ -292,11 +275,11 @@ msgstr ""
"vysoké číslo představuje verzi, které doposud neexistuje. Takovýmto číslem "
"se dá dialogové okno jednoduše zakázat."
-#: data/org.gnome.shell.gschema.xml.in:142
+#: data/org.gnome.shell.gschema.xml.in:132
msgid "Layout of the app picker"
msgstr "Rozvržení výběru aplikace"
-#: data/org.gnome.shell.gschema.xml.in:143
+#: data/org.gnome.shell.gschema.xml.in:133
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@@ -308,105 +291,105 @@ msgstr ""
"obsahuje pár „id aplikace“ → „data“. V současnosti se jako „data“ ukládají "
"následující hodnoty: • „pozice“: pozice ikony aplikace na stránce."
-#: data/org.gnome.shell.gschema.xml.in:158
+#: data/org.gnome.shell.gschema.xml.in:148
msgid "Keybinding to open the application menu"
msgstr "Klávesová zkratka otevírající nabidku aplikací"
-#: data/org.gnome.shell.gschema.xml.in:159
+#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu."
msgstr "Klávesová zkratka sloužící k otevření nabídky aplikací."
-#: data/org.gnome.shell.gschema.xml.in:165
-#: data/org.gnome.shell.gschema.xml.in:172
+#: data/org.gnome.shell.gschema.xml.in:155
+#: data/org.gnome.shell.gschema.xml.in:162
msgid "Keybinding to shift between overview states"
msgstr "Klávesová zkratka přesouvající mezi stavy přehledu"
-#: data/org.gnome.shell.gschema.xml.in:166
+#: data/org.gnome.shell.gschema.xml.in:156
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Klávesová zkratka přesouvající mezi sezením, výběrem oken a mřížkou aplikací"
-#: data/org.gnome.shell.gschema.xml.in:173
+#: data/org.gnome.shell.gschema.xml.in:163
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Klávesová zkratka přesouvající mezi mřížkou aplikací, výběrem oken a sezením"
-#: data/org.gnome.shell.gschema.xml.in:179
+#: data/org.gnome.shell.gschema.xml.in:169
msgid "Keybinding to open the “Show Applications” view"
msgstr "Klávesová zkratka otevírající zobrazení aplikací"
-#: data/org.gnome.shell.gschema.xml.in:180
+#: data/org.gnome.shell.gschema.xml.in:170
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Klávesová zkratka sloužící k otevření seznamu aplikací v Přehledu činností."
-#: data/org.gnome.shell.gschema.xml.in:187
+#: data/org.gnome.shell.gschema.xml.in:177
msgid "Keybinding to open the overview"
msgstr "Klávesová zkratka otevírající přehled"
-#: data/org.gnome.shell.gschema.xml.in:188
+#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the Activities Overview."
msgstr "Klávesová zkratka sloužící k otevření přehledu činností."
-#: data/org.gnome.shell.gschema.xml.in:194
+#: data/org.gnome.shell.gschema.xml.in:184
msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Klávesová zkratka přepínající viditelnost seznamu upozornění"
-#: data/org.gnome.shell.gschema.xml.in:195
+#: data/org.gnome.shell.gschema.xml.in:185
msgid "Keybinding to toggle the visibility of the notification list."
msgstr "Klávesová zkratka sloužící k přepnutí viditelnosti seznamu upozornění."
-#: data/org.gnome.shell.gschema.xml.in:201
+#: data/org.gnome.shell.gschema.xml.in:191
msgid "Keybinding to focus the active notification"
msgstr "Klávesová zkratka zaměřující aktivního upozornění"
-#: data/org.gnome.shell.gschema.xml.in:202
+#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification."
msgstr "Klávesová zkratka sloužící k zaměření aktivního upozornění."
-#: data/org.gnome.shell.gschema.xml.in:208
+#: data/org.gnome.shell.gschema.xml.in:198
msgid "Switch to application 1"
msgstr "Přepnout do aplikace 1"
-#: data/org.gnome.shell.gschema.xml.in:212
+#: data/org.gnome.shell.gschema.xml.in:202
msgid "Switch to application 2"
msgstr "Přepnout do aplikace 2"
-#: data/org.gnome.shell.gschema.xml.in:216
+#: data/org.gnome.shell.gschema.xml.in:206
msgid "Switch to application 3"
msgstr "Přepnout do aplikace 3"
-#: data/org.gnome.shell.gschema.xml.in:220
+#: data/org.gnome.shell.gschema.xml.in:210
msgid "Switch to application 4"
msgstr "Přepnout do aplikace 4"
-#: data/org.gnome.shell.gschema.xml.in:224
+#: data/org.gnome.shell.gschema.xml.in:214
msgid "Switch to application 5"
msgstr "Přepnout do aplikace 5"
-#: data/org.gnome.shell.gschema.xml.in:228
+#: data/org.gnome.shell.gschema.xml.in:218
msgid "Switch to application 6"
msgstr "Přepnout do aplikace 6"
-#: data/org.gnome.shell.gschema.xml.in:232
+#: data/org.gnome.shell.gschema.xml.in:222
msgid "Switch to application 7"
msgstr "Přepnout do aplikace 7"
-#: data/org.gnome.shell.gschema.xml.in:236
+#: data/org.gnome.shell.gschema.xml.in:226
msgid "Switch to application 8"
msgstr "Přepnout do aplikace 8"
-#: data/org.gnome.shell.gschema.xml.in:240
+#: data/org.gnome.shell.gschema.xml.in:230
msgid "Switch to application 9"
msgstr "Přepnout do aplikace 9"
-#: data/org.gnome.shell.gschema.xml.in:265
-#: data/org.gnome.shell.gschema.xml.in:292
+#: data/org.gnome.shell.gschema.xml.in:255
+#: data/org.gnome.shell.gschema.xml.in:282
msgid "Limit switcher to current workspace."
msgstr "Omezit přepínání jen na aktuální plochu."
-#: data/org.gnome.shell.gschema.xml.in:266
+#: data/org.gnome.shell.gschema.xml.in:256
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@@ -414,11 +397,11 @@ msgstr ""
"Je-li zapnuto, objeví se v přepínači aplikací jen ty, co jsou na aktuální "
"pracovní ploše. V opačném případě jsou zahrnuty všechny aplikace."
-#: data/org.gnome.shell.gschema.xml.in:283
+#: data/org.gnome.shell.gschema.xml.in:273
msgid "The application icon mode."
msgstr "Režim ikon aplikací."
-#: data/org.gnome.shell.gschema.xml.in:284
+#: data/org.gnome.shell.gschema.xml.in:274
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@@ -428,7 +411,7 @@ msgstr ""
"only“ (zobrazí náhled okna), „app-icon-only“ (zobrazí pouze ikonu aplikace) "
"a „both“ (zobrazí náhled i ikonu)."
-#: data/org.gnome.shell.gschema.xml.in:293
+#: data/org.gnome.shell.gschema.xml.in:283
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@@ -436,59 +419,69 @@ msgstr ""
"Je-li zapnuto, objeví se v přepínači oken jen ty, co jsou na aktuální "
"pracovní ploše. V opačném případě jsou zahrnuta všechna okna."
-#: data/org.gnome.shell.gschema.xml.in:303
+#: data/org.gnome.shell.gschema.xml.in:293
msgid "Locations"
msgstr "Místa"
-#: data/org.gnome.shell.gschema.xml.in:304
+#: data/org.gnome.shell.gschema.xml.in:294
msgid "The locations to show in world clocks"
msgstr "Místa, která se mají zobrazovat ve světových časech"
-#: data/org.gnome.shell.gschema.xml.in:314
+#: data/org.gnome.shell.gschema.xml.in:304
msgid "Automatic location"
msgstr "Automatické místo"
-#: data/org.gnome.shell.gschema.xml.in:315
+#: data/org.gnome.shell.gschema.xml.in:305
msgid "Whether to fetch the current location or not"
msgstr "Zda si zjistit, či ne, aktuální místo"
-#: data/org.gnome.shell.gschema.xml.in:322
+#: data/org.gnome.shell.gschema.xml.in:312
msgid "Location"
msgstr "Místo"
-#: data/org.gnome.shell.gschema.xml.in:323
+#: data/org.gnome.shell.gschema.xml.in:313
msgid "The location for which to show a forecast"
msgstr "Místo, pro které se má zobrazovat předpověď počasí"
-#: data/org.gnome.shell.gschema.xml.in:335
+#: data/org.gnome.shell.gschema.xml.in:325
msgid "Attach modal dialog to the parent window"
msgstr "Modální dialogová okna připojovat k rodičovskému oknu"
-#: data/org.gnome.shell.gschema.xml.in:336
-#: data/org.gnome.shell.gschema.xml.in:345
-#: data/org.gnome.shell.gschema.xml.in:353
-#: data/org.gnome.shell.gschema.xml.in:361
-#: data/org.gnome.shell.gschema.xml.in:369
+#: data/org.gnome.shell.gschema.xml.in:326
+#: data/org.gnome.shell.gschema.xml.in:335
+#: data/org.gnome.shell.gschema.xml.in:343
+#: data/org.gnome.shell.gschema.xml.in:351
+#: data/org.gnome.shell.gschema.xml.in:359
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.mutter."
-#: data/org.gnome.shell.gschema.xml.in:344
+#: data/org.gnome.shell.gschema.xml.in:334
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Okna upuštěná u okraje obrazovky nechat řadit jako dlaždice"
-#: data/org.gnome.shell.gschema.xml.in:352
+#: data/org.gnome.shell.gschema.xml.in:342
msgid "Workspaces are managed dynamically"
msgstr "Pracovní plochy jsou spravovány dynamicky"
-#: data/org.gnome.shell.gschema.xml.in:360
+#: data/org.gnome.shell.gschema.xml.in:350
msgid "Workspaces only on primary monitor"
msgstr "Pracovní plochy jen na hlavním monitoru"
-#: data/org.gnome.shell.gschema.xml.in:368
+#: data/org.gnome.shell.gschema.xml.in:358
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukazatele"
+#. Keep in sync with subprojects/extensions-app
+#: data/org.gnome.Shell.Extensions.desktop.in.in:5
+#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
+#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:4
+#: subprojects/extensions-app/js/main.js:212
+#: subprojects/extensions-app/data/ui/extensions-window.ui:18
+#: subprojects/extensions-app/data/ui/extensions-window.ui:83
+msgid "Extensions"
+msgstr "Rozšíření"
+
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:3
msgid "Network Login"
msgstr "Přihlášení do sítě"
@@ -519,7 +512,7 @@ msgstr "Domovská stránka"
msgid "Visit extension homepage"
msgstr "Navštívit domovskou stránku rozšíření"
-#: js/gdm/authPrompt.js:144 js/ui/audioDeviceSelection.js:61
+#: js/gdm/authPrompt.js:146 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:109 js/ui/components/polkitAgent.js:141
#: js/ui/endSessionDialog.js:440 js/ui/extensionDownloader.js:223
#: js/ui/shellMountOperation.js:377 js/ui/shellMountOperation.js:387
@@ -527,7 +520,7 @@ msgstr "Navštívit domovskou stránku rozšíření"
msgid "Cancel"
msgstr "Zrušit"
-#: js/gdm/authPrompt.js:307 js/ui/components/networkAgent.js:209
+#: js/gdm/authPrompt.js:312 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:229 js/ui/components/networkAgent.js:261
#: js/ui/components/networkAgent.js:294 js/ui/components/networkAgent.js:333
#: js/ui/components/networkAgent.js:346 js/ui/components/polkitAgent.js:283
@@ -565,13 +558,13 @@ msgstr "Chyba ověření"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger on the fingerprint reader
-#: js/gdm/util.js:603
+#: js/gdm/util.js:604
msgid "(or swipe finger across reader)"
msgstr "(nebo přejeďte prstem přes čtečku)"
#. Translators: this message is shown below the password entry field
#. to indicate the user can place their finger on the fingerprint reader instead
-#: js/gdm/util.js:608
+#: js/gdm/util.js:609
msgid "(or place finger on reader)"
msgstr "(nebo přiložte prst na čtečku)"
@@ -847,7 +840,7 @@ msgstr "Zamítnout přístup"
msgid "Grant Access"
msgstr "Schválit přístup"
-#: js/ui/appDisplay.js:1728
+#: js/ui/appDisplay.js:1732
msgid "Unnamed Folder"
msgstr "Nepojmenovaná složka"
@@ -878,7 +871,7 @@ msgstr "Zobrazit podrobnosti"
msgid "Quit"
msgstr "Ukončit"
-#: js/ui/appMenu.js:157 js/ui/dash.js:249
+#: js/ui/appMenu.js:157 js/ui/dash.js:250
msgid "Unpin"
msgstr "Odebrat z oblíbených"
@@ -910,7 +903,7 @@ msgstr "Sluchátka"
msgid "Headset"
msgstr "Sluchátka s mikrofonem"
-#: js/ui/audioDeviceSelection.js:73 js/ui/status/volume.js:319
+#: js/ui/audioDeviceSelection.js:73 js/ui/status/volume.js:322
msgid "Microphone"
msgstr "Mikrofon"
@@ -1145,7 +1138,7 @@ msgstr "PIN"
msgid "A password is required to connect to “%s”."
msgstr "Pro připojení k „%s“ je vyžadováno heslo."
-#: js/ui/components/networkAgent.js:736
+#: js/ui/components/networkAgent.js:736 js/ui/status/network.js:1960
msgid "Network Manager"
msgstr "Network Manager"
@@ -1178,17 +1171,17 @@ msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
msgid "%s is now known as %s"
msgstr "%s je teď znám jako %s"
-#: js/ui/ctrlAltTab.js:22 js/ui/overviewControls.js:414
+#: js/ui/ctrlAltTab.js:22 js/ui/overviewControls.js:417
msgid "Windows"
msgstr "Okna"
-#: js/ui/dash.js:205 js/ui/dash.js:251
+#: js/ui/dash.js:206 js/ui/dash.js:252
msgid "Show Applications"
msgstr "Zobrazit aplikace"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
-#: js/ui/dash.js:398
+#: js/ui/dash.js:399
msgid "Dash"
msgstr "Oblíbené"
@@ -1466,31 +1459,31 @@ msgstr "Jsou dostupné aktualizace rozšíření"
msgid "Extension updates are ready to be installed."
msgstr "Aktualizace rozšíření jsou připravené k instalaci."
-#: js/ui/inhibitShortcutsDialog.js:79
+#: js/ui/inhibitShortcutsDialog.js:75
msgid "Allow inhibiting shortcuts"
msgstr "Povolení znemožnit klávesové zkratky"
#. Translators: %s is an application name like "Settings"
-#: js/ui/inhibitShortcutsDialog.js:82
+#: js/ui/inhibitShortcutsDialog.js:78
#, javascript-format
msgid "The application %s wants to inhibit shortcuts"
msgstr "Aplikace %s chce znemožnit klávesové zkratky"
-#: js/ui/inhibitShortcutsDialog.js:83
+#: js/ui/inhibitShortcutsDialog.js:79
msgid "An application wants to inhibit shortcuts"
msgstr "Některá aplikace chce znemožnit klávesové zkratky"
#. Translators: %s is a keyboard shortcut like "Super+x"
-#: js/ui/inhibitShortcutsDialog.js:90
+#: js/ui/inhibitShortcutsDialog.js:86
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "Obnovit klávesové zkratky můžete zmáčknutím %s."
-#: js/ui/inhibitShortcutsDialog.js:101
+#: js/ui/inhibitShortcutsDialog.js:97
msgid "Deny"
msgstr "Zamítnout"
-#: js/ui/inhibitShortcutsDialog.js:110
+#: js/ui/inhibitShortcutsDialog.js:106
msgid "Allow"
msgstr "Povolit"
@@ -1558,51 +1551,51 @@ msgstr "Ponechat vypnuté"
msgid "Region & Language Settings"
msgstr "Nastavení regionu a jazyka"
-#: js/ui/lookingGlass.js:713
+#: js/ui/lookingGlass.js:718
msgid "No extensions installed"
msgstr "Nejsou nainstalována žádná rozšíření"
#. Translators: argument is an extension UUID.
-#: js/ui/lookingGlass.js:774
+#: js/ui/lookingGlass.js:779
#, javascript-format
msgid "%s has not emitted any errors."
msgstr "Rozšíření %s nevyvolalo žádné chyby."
-#: js/ui/lookingGlass.js:780
+#: js/ui/lookingGlass.js:785
msgid "Hide Errors"
msgstr "Skrývat chyby"
-#: js/ui/lookingGlass.js:784 js/ui/lookingGlass.js:857
+#: js/ui/lookingGlass.js:789 js/ui/lookingGlass.js:862
msgid "Show Errors"
msgstr "Zobrazovat chyby"
-#: js/ui/lookingGlass.js:793
+#: js/ui/lookingGlass.js:798
msgid "Enabled"
msgstr "Povoleno"
#. translators:
#. * The device has been disabled
-#: js/ui/lookingGlass.js:796 subprojects/gvc/gvc-mixer-control.c:1900
+#: js/ui/lookingGlass.js:801 subprojects/gvc/gvc-mixer-control.c:1908
msgid "Disabled"
msgstr "Zakázáno"
-#: js/ui/lookingGlass.js:798
+#: js/ui/lookingGlass.js:803
msgid "Error"
msgstr "Chyba"
-#: js/ui/lookingGlass.js:800
+#: js/ui/lookingGlass.js:805
msgid "Out of date"
msgstr "Neaktuální"
-#: js/ui/lookingGlass.js:802
+#: js/ui/lookingGlass.js:807
msgid "Downloading"
msgstr "Stahování"
-#: js/ui/lookingGlass.js:835
+#: js/ui/lookingGlass.js:840
msgid "View Source"
msgstr "Zobrazit zdroj"
-#: js/ui/lookingGlass.js:846
+#: js/ui/lookingGlass.js:851
msgid "Web Page"
msgstr "Webová stránka"
@@ -1639,7 +1632,7 @@ msgstr "Zamykání obrazovky je vypnuto"
msgid "Screen Locking requires the GNOME display manager."
msgstr "Zamykání obrazovky vyžaduje správce displeje GNOME."
-#: js/ui/messageTray.js:1418
+#: js/ui/messageTray.js:1417
msgid "System Information"
msgstr "Informace o systému"
@@ -1655,11 +1648,11 @@ msgstr "Neznámý název"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
-#: js/ui/overviewControls.js:324
+#: js/ui/overviewControls.js:327
msgid "Type to search"
msgstr "vyhledávejte psaním"
-#: js/ui/overviewControls.js:402
+#: js/ui/overviewControls.js:405
msgid "Applications"
msgstr "Aplikace"
@@ -1761,103 +1754,103 @@ msgstr "Nelze uzamknout obrazovku"
msgid "Lock was blocked by an application"
msgstr "Zamknutí bylo zablokováno některou z aplikací"
-#: js/ui/screenshot.js:1147
+#: js/ui/screenshot.js:1165
msgid "Selection"
msgstr "Výběr"
-#: js/ui/screenshot.js:1157
+#: js/ui/screenshot.js:1175
msgid "Area Selection"
msgstr "Výběr oblasti"
-#: js/ui/screenshot.js:1162
+#: js/ui/screenshot.js:1180
msgid "Screen"
msgstr "Obrazovka"
-#: js/ui/screenshot.js:1172
+#: js/ui/screenshot.js:1190
msgid "Screen Selection"
msgstr "Výběr obrazovky"
-#: js/ui/screenshot.js:1177
+#: js/ui/screenshot.js:1195
msgid "Window"
msgstr "Okno"
-#: js/ui/screenshot.js:1187
+#: js/ui/screenshot.js:1205
msgid "Window Selection"
msgstr "Výběr okna"
-#: js/ui/screenshot.js:1225
+#: js/ui/screenshot.js:1243
msgid "Screenshot / Screencast"
msgstr "Snímek/záznam obrazovky"
-#: js/ui/screenshot.js:1261
+#: js/ui/screenshot.js:1279
msgid "Show Pointer"
msgstr "Zobrazit ukazatel"
#. Translators: this is the folder where recorded
#. screencasts are stored.
-#: js/ui/screenshot.js:1849
+#: js/ui/screenshot.js:1870
msgid "Screencasts"
msgstr "Záznamy obrazovky"
#. Translators: this is a filename used for screencast
#. * recording, where "%d" and "%t" date and time, e.g.
#. * "Screencast from 07-17-2013 10:00:46 PM.webm"
-#: js/ui/screenshot.js:1854
+#: js/ui/screenshot.js:1875
#, no-c-format
msgid "Screencast from %d %t.webm"
msgstr "Záznam obrazovky z %d %t.webm"
#. Translators: notification source name.
-#: js/ui/screenshot.js:1920 js/ui/screenshot.js:2132
+#: js/ui/screenshot.js:1917 js/ui/screenshot.js:2129
msgid "Screenshot"
msgstr "Snímek obrazovky"
#. Translators: notification title.
-#: js/ui/screenshot.js:1926
+#: js/ui/screenshot.js:1923
msgid "Screencast recorded"
msgstr "Bylo zaznamenáno dění na obrazovce"
#. Translators: notification body when a screencast was recorded.
-#: js/ui/screenshot.js:1928
+#: js/ui/screenshot.js:1925
msgid "Click here to view the video."
msgstr "Kliknutím zde video zobrazíte."
#. Translators: button on the screencast notification.
#. Translators: button on the screenshot notification.
-#: js/ui/screenshot.js:1931 js/ui/screenshot.js:2146
+#: js/ui/screenshot.js:1928 js/ui/screenshot.js:2143
msgid "Show in Files"
msgstr "Zobrazit v Souborech"
#. Translators: this is the name of the file that the screenshot is
#. saved to. The placeholder is a timestamp, e.g. "2017-05-21 12-24-03".
-#: js/ui/screenshot.js:2092
+#: js/ui/screenshot.js:2089
#, javascript-format
msgid "Screenshot from %s"
msgstr "Snímek obrazovky z %s"
#. Translators: notification title.
-#: js/ui/screenshot.js:2138
+#: js/ui/screenshot.js:2135
msgid "Screenshot captured"
msgstr "Byl pořízen snímek obrazovky"
#. Translators: notification body when a screenshot was captured.
-#: js/ui/screenshot.js:2140
+#: js/ui/screenshot.js:2137
msgid "You can paste the image from the clipboard."
msgstr "Obrázek můžete vložit ze schránky."
-#: js/ui/screenshot.js:2193 js/ui/screenshot.js:2358
+#: js/ui/screenshot.js:2190 js/ui/screenshot.js:2355
msgid "Screenshot taken"
msgstr "Byl pořízen snímek obrazovky"
-#: js/ui/search.js:804
+#: js/ui/search.js:809
msgid "Searching…"
msgstr "Hledá se…"
-#: js/ui/search.js:806
+#: js/ui/search.js:811
msgid "No results."
msgstr "Žádné výsledky."
-#: js/ui/search.js:937
+#: js/ui/search.js:942
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
@@ -1992,7 +1985,7 @@ msgstr "Styl velkého textu"
msgid "Auto Rotate"
msgstr "Automaticky otáčet"
-#: js/ui/status/bluetooth.js:171
+#: js/ui/status/bluetooth.js:151
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -2024,11 +2017,11 @@ msgstr "Druhé kliknutí"
msgid "Dwell Click"
msgstr "Kliknutí posečkáním"
-#: js/ui/status/keyboard.js:830
+#: js/ui/status/keyboard.js:842
msgid "Keyboard"
msgstr "Klávesnice"
-#: js/ui/status/keyboard.js:847
+#: js/ui/status/keyboard.js:859
msgid "Show Keyboard Layout"
msgstr "Zobrazit rozložení klávesnice"
@@ -2065,11 +2058,59 @@ msgid "Connect to %s"
msgstr "Připojit %s"
#. Translators: %s is a network identifier
-#: js/ui/status/network.js:1107
+#: js/ui/status/network.js:1113
#, javascript-format
msgid "%s Hotspot"
msgstr "Přístupový bod %s"
+#: js/ui/status/network.js:1472 js/ui/status/network.js:1488
+msgid "VPN"
+msgstr "VPN"
+
+#: js/ui/status/network.js:1473
+msgid "VPN Settings"
+msgstr "Nastavení VPN"
+
+#: js/ui/status/network.js:1722
+msgid "Wi–Fi"
+msgstr "Wi-Fi"
+
+#: js/ui/status/network.js:1724
+msgid "All Networks"
+msgstr "Všechny sítě"
+
+#: js/ui/status/network.js:1821
+msgid "Wired Connections"
+msgstr "Drátová připojení"
+
+#: js/ui/status/network.js:1822
+msgid "Wired Settings"
+msgstr "Nastavení drátových připojení"
+
+#: js/ui/status/network.js:1836
+msgid "Bluetooth Tethers"
+msgstr "Sdílená připojení přes Bluetooth"
+
+#: js/ui/status/network.js:1837
+msgid "Bluetooth Settings"
+msgstr "Nastavení Bluetooth"
+
+#: js/ui/status/network.js:1851
+msgid "Mobile Connections"
+msgstr "Mobilní připojení"
+
+#: js/ui/status/network.js:1853
+msgid "Mobile Broadband Settings"
+msgstr "Nastavení mobilního připojení"
+
+#: js/ui/status/network.js:1965
+msgid "Connection failed"
+msgstr "Připojení selhalo"
+
+#: js/ui/status/network.js:1966
+msgid "Activation of network connection failed"
+msgstr "Aktivace síťového připojení selhala"
+
#: js/ui/status/nightLight.js:20
msgid "Night Light"
msgstr "Noční osvětlení"
@@ -2089,15 +2130,15 @@ msgctxt "Power profile"
msgid "Power Saver"
msgstr "Šetření energií"
-#: js/ui/status/powerProfiles.js:68
+#: js/ui/status/powerProfiles.js:70
msgid "Power Profiles"
msgstr "Profily napájení"
-#: js/ui/status/remoteAccess.js:74
+#: js/ui/status/remoteAccess.js:72
msgid "Stop Screencast"
msgstr "Zastavit záznam obrazovky"
-#: js/ui/status/remoteAccess.js:144
+#: js/ui/status/remoteAccess.js:142
msgid "Stop Screen Sharing"
msgstr "Zastavit sdílení obrazovky"
@@ -2179,19 +2220,19 @@ msgstr "Chyba ověření Thunderbolt"
msgid "Could not authorize the Thunderbolt device: %s"
msgstr "Nezdařilo se provést ověření zařízení Thunderbolt: %s"
-#: js/ui/status/volume.js:191
+#: js/ui/status/volume.js:194
msgid "Volume changed"
msgstr "Hlasitost změněna"
-#: js/ui/status/volume.js:253
+#: js/ui/status/volume.js:256
msgid "Volume"
msgstr "Hlasitost"
-#: js/ui/status/volume.js:269
+#: js/ui/status/volume.js:272
msgid "Sound Output"
msgstr "Zvukový výstup"
-#: js/ui/status/volume.js:337
+#: js/ui/status/volume.js:340
msgid "Sound Input"
msgstr "Zvukový vstup"
@@ -2406,14 +2447,6 @@ msgstr "Heslo nemůže být prázdné."
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialogové okno ověření bylo uživatelem zrušeno"
-#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
-#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:4
-#: subprojects/extensions-app/js/main.js:212
-#: subprojects/extensions-app/data/ui/extensions-window.ui:18
-#: subprojects/extensions-app/data/ui/extensions-window.ui:83
-msgid "Extensions"
-msgstr "Rozšíření"
-
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
msgid "Manage your GNOME Extensions"
msgstr "Správa vašich rozšíření GNOME"
@@ -2513,11 +2546,11 @@ msgstr "Ručně nainstalované"
#: subprojects/extensions-app/data/ui/extensions-window.ui:99
#: subprojects/extensions-app/data/ui/extensions-window.ui:134
msgid ""
-"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
-"\">extensions.gnome.org</a>."
+"To find and add extensions, visit <a href=\"https://extensions.gnome."
+"org\">extensions.gnome.org</a>."
msgstr ""
-"Jestli chcete vyhledat a nainstalovat rozšíření, navštivte stránku <a href="
-"\"https://extensions.gnome.org\">extensions.gnome.org</a>."
+"Jestli chcete vyhledat a nainstalovat rozšíření, navštivte stránku <a "
+"href=\"https://extensions.gnome.org\">extensions.gnome.org</a>."
#: subprojects/extensions-app/data/ui/extensions-window.ui:112
msgid "Built-In"
@@ -2635,26 +2668,18 @@ msgstr "Neznámý argument"
msgid "UUID, name and description are required"
msgstr "Jsou vyžadovány UUID, název a popis"
-#: subprojects/extensions-tool/src/command-disable.c:46
-#: subprojects/extensions-tool/src/command-enable.c:46
-#: subprojects/extensions-tool/src/command-info.c:50
-#: subprojects/extensions-tool/src/command-list.c:64
-#: subprojects/extensions-tool/src/main.c:146
-msgid "Failed to connect to GNOME Shell\n"
-msgstr "Selhalo připojení ke GNOME Shellu\n"
-
-#: subprojects/extensions-tool/src/command-disable.c:53
-#: subprojects/extensions-tool/src/command-enable.c:53
+#: subprojects/extensions-tool/src/command-disable.c:62
+#: subprojects/extensions-tool/src/command-enable.c:62
#, c-format
msgid "Extension “%s” does not exist\n"
msgstr "Rozšíření „%s“ neexistuje\n"
-#: subprojects/extensions-tool/src/command-disable.c:101
+#: subprojects/extensions-tool/src/command-disable.c:98
msgid "Disable an extension"
msgstr "Zakázat rozšíření"
-#: subprojects/extensions-tool/src/command-disable.c:119
-#: subprojects/extensions-tool/src/command-enable.c:119
+#: subprojects/extensions-tool/src/command-disable.c:116
+#: subprojects/extensions-tool/src/command-enable.c:116
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-reset.c:76
@@ -2662,8 +2687,8 @@ msgstr "Zakázat rozšíření"
msgid "No UUID given"
msgstr "Nebylo zadáno žádné UUID"
-#: subprojects/extensions-tool/src/command-disable.c:124
-#: subprojects/extensions-tool/src/command-enable.c:124
+#: subprojects/extensions-tool/src/command-disable.c:121
+#: subprojects/extensions-tool/src/command-enable.c:121
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-reset.c:81
@@ -2671,10 +2696,16 @@ msgstr "Nebylo zadáno žádné UUID"
msgid "More than one UUID given"
msgstr "Bylo zadáno více než jedno UUID"
-#: subprojects/extensions-tool/src/command-enable.c:101
+#: subprojects/extensions-tool/src/command-enable.c:98
msgid "Enable an extension"
msgstr "Povolit rozšíření"
+#: subprojects/extensions-tool/src/command-info.c:50
+#: subprojects/extensions-tool/src/command-list.c:64
+#: subprojects/extensions-tool/src/main.c:146
+msgid "Failed to connect to GNOME Shell\n"
+msgstr "Selhalo připojení ke GNOME Shellu\n"
+
#: subprojects/extensions-tool/src/command-info.c:59
#: subprojects/extensions-tool/src/main.c:155
#, c-format
@@ -2939,7 +2970,7 @@ msgstr "Přidá ikonu na horní lištu"
#. translators:
#. * The number of sound outputs on a particular device
-#: subprojects/gvc/gvc-mixer-control.c:1907
+#: subprojects/gvc/gvc-mixer-control.c:1915
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@@ -2949,7 +2980,7 @@ msgstr[2] "%u výstupů"
#. translators:
#. * The number of sound inputs on a particular device
-#: subprojects/gvc/gvc-mixer-control.c:1917
+#: subprojects/gvc/gvc-mixer-control.c:1925
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
@@ -2957,6 +2988,21 @@ msgstr[0] "%u vstup"
msgstr[1] "%u vstupy"
msgstr[2] "%u vstupů"
-#: subprojects/gvc/gvc-mixer-control.c:2867
+#: subprojects/gvc/gvc-mixer-control.c:2876
msgid "System Sounds"
msgstr "Systémové zvuky"
+
+#~ msgid ""
+#~ "Whether the default Bluetooth adapter had set up devices associated to it"
+#~ msgstr "Zda měl adaptér Bluetooth nastavená zařízení pro spolupráci s ním"
+
+#~ msgid ""
+#~ "The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
+#~ "powered, or if there were devices set up associated with the default "
+#~ "adapter. This will be reset if the default adapter is ever seen not to "
+#~ "have devices associated to it."
+#~ msgstr ""
+#~ "Shell zobrazuje nabídku Bluetooth jen v případě, že je adaptér Bluetooth "
+#~ "zapnutý, nebo když existují nějaká zařízení nastavená pro spolupráci s "
+#~ "výchozím adaptérem. Nabídka zmizí, když se zjistí, že výchozí adaptér "
+#~ "nemá přiřazená žádná zařízení."
diff --git a/po/fa.po b/po/fa.po
index 46f859b..26d01d8 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the gnome-shell package.
# Mahyar Moghimi <mahyar.moqimi@gmail.com>, 2010.
# Arash Mousavi <mousavi.arash@gmail.com>, 2010-2017.
-# Danial behzadi <dani.behzi@ubuntu.com>, 2018-2022.
+# Danial behzadi <dani.behzi@ubuntu.com>, 2018-2023.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
-"POT-Creation-Date: 2022-09-20 09:42+0000\n"
-"PO-Revision-Date: 2022-09-20 14:34+0430\n"
+"POT-Creation-Date: 2023-07-06 18:09+0000\n"
+"PO-Revision-Date: 2023-08-07 13:04+0330\n"
"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
"Language-Team: Persian <>\n"
"Language: fa\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-DamnedLies-Scope: partial\n"
-"X-Generator: Poedit 3.1.1\n"
+"X-Generator: Poedit 3.2.2\n"
"X-Poedit-SourceCharset: utf-8\n"
#: data/50-gnome-shell-launchers.xml:6
@@ -63,7 +63,7 @@ msgid "Activate favorite application 9"
msgstr "فعّال‌سازی برنامهٔ مورد علاقهٔ ۹"
#. Translators: name of the folder under ~/Pictures for screenshots.
-#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2079
+#: data/50-gnome-shell-screenshots.xml:6 js/ui/screenshot.js:2076
msgid "Screenshots"
msgstr "نماگرفت‌ها"
@@ -475,7 +475,7 @@ msgstr "صفحهٔ خانگی"
msgid "Visit extension homepage"
msgstr "مشاهدهٔ صفحهٔ خانگی افزونه"
-#: js/gdm/authPrompt.js:144 js/ui/audioDeviceSelection.js:61
+#: js/gdm/authPrompt.js:146 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:109 js/ui/components/polkitAgent.js:141
#: js/ui/endSessionDialog.js:440 js/ui/extensionDownloader.js:223
#: js/ui/shellMountOperation.js:377 js/ui/shellMountOperation.js:387
@@ -483,7 +483,7 @@ msgstr "مشاهدهٔ صفحهٔ خانگی افزونه"
msgid "Cancel"
msgstr "لغو"
-#: js/gdm/authPrompt.js:307 js/ui/components/networkAgent.js:209
+#: js/gdm/authPrompt.js:312 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:229 js/ui/components/networkAgent.js:261
#: js/ui/components/networkAgent.js:294 js/ui/components/networkAgent.js:333
#: js/ui/components/networkAgent.js:346 js/ui/components/polkitAgent.js:283
@@ -521,13 +521,13 @@ msgstr "خطا تأیید هویت"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger on the fingerprint reader
-#: js/gdm/util.js:603
+#: js/gdm/util.js:604
msgid "(or swipe finger across reader)"
msgstr "(یا انگشتتان را روی خواننده بکشید)"
#. Translators: this message is shown below the password entry field
#. to indicate the user can place their finger on the fingerprint reader instead
-#: js/gdm/util.js:608
+#: js/gdm/util.js:609
msgid "(or place finger on reader)"
msgstr "(یا انگشتتان را روی خواننده بگذارید)"
@@ -793,7 +793,7 @@ msgstr "رد دسترسی"
msgid "Grant Access"
msgstr "پذیرفتن دسترسی"
-#: js/ui/appDisplay.js:1728
+#: js/ui/appDisplay.js:1732
msgid "Unnamed Folder"
msgstr "پوشهٔ بی‌نام"
@@ -824,7 +824,7 @@ msgstr "نمایش جزییات"
msgid "Quit"
msgstr "خروج"
-#: js/ui/appMenu.js:157 js/ui/dash.js:249
+#: js/ui/appMenu.js:157 js/ui/dash.js:250
msgid "Unpin"
msgstr "سنجاق نکردن"
@@ -856,7 +856,7 @@ msgstr "هدفون‌ها"
msgid "Headset"
msgstr "هدست"
-#: js/ui/audioDeviceSelection.js:73 js/ui/status/volume.js:319
+#: js/ui/audioDeviceSelection.js:73 js/ui/status/volume.js:322
msgid "Microphone"
msgstr "میکروفون"
@@ -1085,7 +1085,7 @@ msgstr "پین"
msgid "A password is required to connect to “%s”."
msgstr "برای اتّصال به «%s» گذرواژه لازم است."
-#: js/ui/components/networkAgent.js:736
+#: js/ui/components/networkAgent.js:736 js/ui/status/network.js:1960
msgid "Network Manager"
msgstr "مدیر شبکه"
@@ -1123,13 +1123,13 @@ msgstr "‏%s با عنوان %s شناخته می‌شود"
msgid "Windows"
msgstr "پنجره‌‌ها"
-#: js/ui/dash.js:205 js/ui/dash.js:251
+#: js/ui/dash.js:206 js/ui/dash.js:252
msgid "Show Applications"
msgstr "نمایش برنامه‌ها"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
-#: js/ui/dash.js:398
+#: js/ui/dash.js:399
msgid "Dash"
msgstr "دَش"
@@ -1395,31 +1395,31 @@ msgstr "به‌روز رسانی‌های افزونه موجودند"
msgid "Extension updates are ready to be installed."
msgstr "به‌روز رسانی‌های افزونه‌ها آمادهٔ نصبند."
-#: js/ui/inhibitShortcutsDialog.js:79
+#: js/ui/inhibitShortcutsDialog.js:75
msgid "Allow inhibiting shortcuts"
msgstr "اجازه به جلوگیری از میان‌بر ها"
#. Translators: %s is an application name like "Settings"
-#: js/ui/inhibitShortcutsDialog.js:82
+#: js/ui/inhibitShortcutsDialog.js:78
#, javascript-format
msgid "The application %s wants to inhibit shortcuts"
msgstr "برنامهٔ %s می‌خواهد جلوی میان‌برها را بگیرد"
-#: js/ui/inhibitShortcutsDialog.js:83
+#: js/ui/inhibitShortcutsDialog.js:79
msgid "An application wants to inhibit shortcuts"
msgstr "برنامه‌ای می‌خواهد جلوی میان‌برها را بگیرد"
#. Translators: %s is a keyboard shortcut like "Super+x"
-#: js/ui/inhibitShortcutsDialog.js:90
+#: js/ui/inhibitShortcutsDialog.js:86
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "می‌توانید با فشردن %s میان‌برها را برگردانید."
-#: js/ui/inhibitShortcutsDialog.js:101
+#: js/ui/inhibitShortcutsDialog.js:97
msgid "Deny"
msgstr "رد کردن"
-#: js/ui/inhibitShortcutsDialog.js:110
+#: js/ui/inhibitShortcutsDialog.js:106
msgid "Allow"
msgstr "اجازه دادن"
@@ -1507,7 +1507,7 @@ msgstr "به کار افتاده"
#. translators:
#. * The device has been disabled
-#: js/ui/lookingGlass.js:796 subprojects/gvc/gvc-mixer-control.c:1900
+#: js/ui/lookingGlass.js:796 subprojects/gvc/gvc-mixer-control.c:1908
msgid "Disabled"
msgstr "از کار افتاده"
@@ -1563,7 +1563,7 @@ msgstr "قفل صفحه از کار افتاده"
msgid "Screen Locking requires the GNOME display manager."
msgstr "قفل صفحه نیاز به مدیر نمایش گنوم دارد."
-#: js/ui/messageTray.js:1418
+#: js/ui/messageTray.js:1417
msgid "System Information"
msgstr "اطّلاعات سامانه"
@@ -1685,103 +1685,103 @@ msgstr "نمی‌توان قفل کرد"
msgid "Lock was blocked by an application"
msgstr "قفل توسط یک برنامه مسدود شده بود"
-#: js/ui/screenshot.js:1147
+#: js/ui/screenshot.js:1165
msgid "Selection"
msgstr "گزینش"
-#: js/ui/screenshot.js:1157
+#: js/ui/screenshot.js:1175
msgid "Area Selection"
msgstr "گزینش ناحیه"
-#: js/ui/screenshot.js:1162
+#: js/ui/screenshot.js:1180
msgid "Screen"
msgstr "صفحه"
-#: js/ui/screenshot.js:1172
+#: js/ui/screenshot.js:1190
msgid "Screen Selection"
msgstr "گزینش صفحه"
-#: js/ui/screenshot.js:1177
+#: js/ui/screenshot.js:1195
msgid "Window"
msgstr "پنجره‌"
-#: js/ui/screenshot.js:1187
+#: js/ui/screenshot.js:1205
msgid "Window Selection"
msgstr "گزینش پنجره"
-#: js/ui/screenshot.js:1225
+#: js/ui/screenshot.js:1243
msgid "Screenshot / Screencast"
msgstr "نماگرفت / ضبط صفحه"
-#: js/ui/screenshot.js:1261
+#: js/ui/screenshot.js:1279
msgid "Show Pointer"
msgstr "نمایش اشاره‌گر"
#. Translators: this is the folder where recorded
#. screencasts are stored.
-#: js/ui/screenshot.js:1849
+#: js/ui/screenshot.js:1870
msgid "Screencasts"
msgstr "ضبط‌های صفحه"
#. Translators: this is a filename used for screencast
#. * recording, where "%d" and "%t" date and time, e.g.
#. * "Screencast from 07-17-2013 10:00:46 PM.webm"
-#: js/ui/screenshot.js:1854
+#: js/ui/screenshot.js:1875
#, no-c-format
msgid "Screencast from %d %t.webm"
msgstr "ضبط صفحه از %t %d.webm"
#. Translators: notification source name.
-#: js/ui/screenshot.js:1920 js/ui/screenshot.js:2132
+#: js/ui/screenshot.js:1917 js/ui/screenshot.js:2129
msgid "Screenshot"
msgstr "نماگرفت"
#. Translators: notification title.
-#: js/ui/screenshot.js:1926
+#: js/ui/screenshot.js:1923
msgid "Screencast recorded"
msgstr "صفحه ضبط شد"
#. Translators: notification body when a screencast was recorded.
-#: js/ui/screenshot.js:1928
+#: js/ui/screenshot.js:1925
msgid "Click here to view the video."
msgstr "برای دیدن ویدیو این‌جا بزنید."
#. Translators: button on the screencast notification.
#. Translators: button on the screenshot notification.
-#: js/ui/screenshot.js:1931 js/ui/screenshot.js:2146
+#: js/ui/screenshot.js:1928 js/ui/screenshot.js:2143
msgid "Show in Files"
msgstr "نمایش در پرونده‌ها"
#. Translators: this is the name of the file that the screenshot is
#. saved to. The placeholder is a timestamp, e.g. "2017-05-21 12-24-03".
-#: js/ui/screenshot.js:2092
+#: js/ui/screenshot.js:2089
#, javascript-format
msgid "Screenshot from %s"
msgstr "نماگرفت از %s"
#. Translators: notification title.
-#: js/ui/screenshot.js:2138
+#: js/ui/screenshot.js:2135
msgid "Screenshot captured"
msgstr "نماگرفت ضبط شد"
#. Translators: notification body when a screenshot was captured.
-#: js/ui/screenshot.js:2140
+#: js/ui/screenshot.js:2137
msgid "You can paste the image from the clipboard."
msgstr "می‌توانید تصویر را از تخته‌گیره بچسبانید."
-#: js/ui/screenshot.js:2193 js/ui/screenshot.js:2358
+#: js/ui/screenshot.js:2190 js/ui/screenshot.js:2355
msgid "Screenshot taken"
msgstr "نماگرفت انجام شد"
-#: js/ui/search.js:804
+#: js/ui/search.js:809
msgid "Searching…"
msgstr "درحال جست‌وجو…"
-#: js/ui/search.js:806
+#: js/ui/search.js:811
msgid "No results."
msgstr "بدون نتیجه."
-#: js/ui/search.js:937
+#: js/ui/search.js:942
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
@@ -1946,11 +1946,11 @@ msgstr "کلیک دوم"
msgid "Dwell Click"
msgstr "کلیک طولانی"
-#: js/ui/status/keyboard.js:830
+#: js/ui/status/keyboard.js:842
msgid "Keyboard"
msgstr "صفحه‌کلید"
-#: js/ui/status/keyboard.js:847
+#: js/ui/status/keyboard.js:859
msgid "Show Keyboard Layout"
msgstr "نمایش چیدمان صفحه‌کلید"
@@ -1985,11 +1985,59 @@ msgid "Connect to %s"
msgstr "وصل شدن به %s"
#. Translators: %s is a network identifier
-#: js/ui/status/network.js:1107
+#: js/ui/status/network.js:1113
#, javascript-format
msgid "%s Hotspot"
msgstr "نقطهٔ داغ %s"
+#: js/ui/status/network.js:1472 js/ui/status/network.js:1488
+msgid "VPN"
+msgstr "وی‌پی‌ان"
+
+#: js/ui/status/network.js:1473
+msgid "VPN Settings"
+msgstr "تنظیمات وی‌پی‌ان"
+
+#: js/ui/status/network.js:1722
+msgid "Wi–Fi"
+msgstr "وای‌فای"
+
+#: js/ui/status/network.js:1724
+msgid "All Networks"
+msgstr "همهٔ شبکه‌ها"
+
+#: js/ui/status/network.js:1821
+msgid "Wired Connections"
+msgstr "اتّصال‌های سیمی"
+
+#: js/ui/status/network.js:1822
+msgid "Wired Settings"
+msgstr "تنظیمات اتّصال سیمی"
+
+#: js/ui/status/network.js:1836
+msgid "Bluetooth Tethers"
+msgstr "چترهای بلوتوث"
+
+#: js/ui/status/network.js:1837
+msgid "Bluetooth Settings"
+msgstr "تنظیمات بلوتوث"
+
+#: js/ui/status/network.js:1851
+msgid "Mobile Connections"
+msgstr "اتّصال‌های همراه"
+
+#: js/ui/status/network.js:1853
+msgid "Mobile Broadband Settings"
+msgstr "تنظیمات پهن‌باند همراه"
+
+#: js/ui/status/network.js:1965
+msgid "Connection failed"
+msgstr "اتّصال شکست خورد"
+
+#: js/ui/status/network.js:1966
+msgid "Activation of network connection failed"
+msgstr "فعّال‌سازی اتّصال شبکه شکست خورد"
+
#: js/ui/status/nightLight.js:20
msgid "Night Light"
msgstr "نور شب"
@@ -2009,15 +2057,15 @@ msgctxt "Power profile"
msgid "Power Saver"
msgstr "ذخیرهٔ نیرو"
-#: js/ui/status/powerProfiles.js:68
+#: js/ui/status/powerProfiles.js:70
msgid "Power Profiles"
msgstr "نمایه‌های نیرو"
-#: js/ui/status/remoteAccess.js:74
+#: js/ui/status/remoteAccess.js:72
msgid "Stop Screencast"
msgstr "توقّف ضبط صفحه"
-#: js/ui/status/remoteAccess.js:144
+#: js/ui/status/remoteAccess.js:142
msgid "Stop Screen Sharing"
msgstr "توقّف هم‌رسانی صفحه"
@@ -2099,19 +2147,19 @@ msgstr "خطای تأیید هویت تاندربولت"
msgid "Could not authorize the Thunderbolt device: %s"
msgstr "نمی‌توان افزارهٔ تاندربولت را تأیید هویت کرد: %s"
-#: js/ui/status/volume.js:191
+#: js/ui/status/volume.js:194
msgid "Volume changed"
msgstr "حجم صدا تغییر کرد"
-#: js/ui/status/volume.js:253
+#: js/ui/status/volume.js:256
msgid "Volume"
msgstr "حجم صدا"
-#: js/ui/status/volume.js:269
+#: js/ui/status/volume.js:272
msgid "Sound Output"
msgstr "خروجی صدا"
-#: js/ui/status/volume.js:337
+#: js/ui/status/volume.js:340
msgid "Sound Input"
msgstr "ورودی صدا"
@@ -2551,26 +2599,18 @@ msgstr "آرگومان ناشناخته"
msgid "UUID, name and description are required"
msgstr "شناسهٔ یکتا، نام و شرح مورد نیازند"
-#: subprojects/extensions-tool/src/command-disable.c:46
-#: subprojects/extensions-tool/src/command-enable.c:46
-#: subprojects/extensions-tool/src/command-info.c:50
-#: subprojects/extensions-tool/src/command-list.c:64
-#: subprojects/extensions-tool/src/main.c:146
-msgid "Failed to connect to GNOME Shell\n"
-msgstr "شکست در وصل شدن به پوستهٔ گنوم\n"
-
-#: subprojects/extensions-tool/src/command-disable.c:53
-#: subprojects/extensions-tool/src/command-enable.c:53
+#: subprojects/extensions-tool/src/command-disable.c:62
+#: subprojects/extensions-tool/src/command-enable.c:62
#, c-format
msgid "Extension “%s” does not exist\n"
msgstr "افزونهٔ «%s» وجود ندارد\n"
-#: subprojects/extensions-tool/src/command-disable.c:101
+#: subprojects/extensions-tool/src/command-disable.c:98
msgid "Disable an extension"
msgstr "از کار انداختن یک افزونه"
-#: subprojects/extensions-tool/src/command-disable.c:119
-#: subprojects/extensions-tool/src/command-enable.c:119
+#: subprojects/extensions-tool/src/command-disable.c:116
+#: subprojects/extensions-tool/src/command-enable.c:116
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-reset.c:76
@@ -2578,8 +2618,8 @@ msgstr "از کار انداختن یک افزونه"
msgid "No UUID given"
msgstr "هیچ شناسهٔ یکتایی داده نشده"
-#: subprojects/extensions-tool/src/command-disable.c:124
-#: subprojects/extensions-tool/src/command-enable.c:124
+#: subprojects/extensions-tool/src/command-disable.c:121
+#: subprojects/extensions-tool/src/command-enable.c:121
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-reset.c:81
@@ -2587,10 +2627,16 @@ msgstr "هیچ شناسهٔ یکتایی داده نشده"
msgid "More than one UUID given"
msgstr "بیش از یک شناسهٔ یکتا داده شده"
-#: subprojects/extensions-tool/src/command-enable.c:101
+#: subprojects/extensions-tool/src/command-enable.c:98
msgid "Enable an extension"
msgstr "به کار انداختن یک افزونه"
+#: subprojects/extensions-tool/src/command-info.c:50
+#: subprojects/extensions-tool/src/command-list.c:64
+#: subprojects/extensions-tool/src/main.c:146
+msgid "Failed to connect to GNOME Shell\n"
+msgstr "شکست در وصل شدن به پوستهٔ گنوم\n"
+
#: subprojects/extensions-tool/src/command-info.c:59
#: subprojects/extensions-tool/src/main.c:155
#, c-format
@@ -2855,7 +2901,7 @@ msgstr "افزودن نقشکی به نوار بالا"
#. translators:
#. * The number of sound outputs on a particular device
-#: subprojects/gvc/gvc-mixer-control.c:1907
+#: subprojects/gvc/gvc-mixer-control.c:1915
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@@ -2864,14 +2910,14 @@ msgstr[1] "%Iu خروجی"
#. translators:
#. * The number of sound inputs on a particular device
-#: subprojects/gvc/gvc-mixer-control.c:1917
+#: subprojects/gvc/gvc-mixer-control.c:1925
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%Iu ورودی"
msgstr[1] "%Iu ورودی"
-#: subprojects/gvc/gvc-mixer-control.c:2867
+#: subprojects/gvc/gvc-mixer-control.c:2876
msgid "System Sounds"
msgstr "صداهای سامانه"
@@ -2890,15 +2936,6 @@ msgstr "صداهای سامانه"
#~ msgid "Log Out"
#~ msgstr "خروج"
-#~ msgid "Wired Settings"
-#~ msgstr "تنظیمات اتّصال سیمی"
-
-#~ msgid "Mobile Broadband Settings"
-#~ msgstr "تنظیمات پهن‌باند همراه"
-
-#~ msgid "Bluetooth Settings"
-#~ msgstr "تنظیمات بلوتوث"
-
#~ msgid "Connect to Internet"
#~ msgstr "وصل شدن به اینترنت"
@@ -2926,9 +2963,6 @@ msgstr "صداهای سامانه"
#~ msgid "Select a network"
#~ msgstr "شبکه‌ای برگزینید"
-#~ msgid "No Networks"
-#~ msgstr "هیچ شبکه‌ای نیست"
-
#~ msgid "Use hardware switch to turn off"
#~ msgstr "برای خاموش کردن از کلید سخت‌افزاری استفاده کنید"
@@ -2938,12 +2972,6 @@ msgstr "صداهای سامانه"
#~ msgid "Wi-Fi Settings"
#~ msgstr "تنظیمات وای‌فای"
-#~ msgid "VPN Settings"
-#~ msgstr "تنظیمات وی‌پی‌ان"
-
-#~ msgid "VPN"
-#~ msgstr "وی‌پی‌ان"
-
#~ msgid "VPN Off"
#~ msgstr "وی‌پی‌ان خاموش است"
@@ -2957,30 +2985,12 @@ msgstr "صداهای سامانه"
#~ msgstr[1] "اتّصال وای‌فای %s"
#, javascript-format
-#~ msgid "%s Wired Connection"
-#~ msgid_plural "%s Wired Connections"
-#~ msgstr[0] "اتّصال سیمی %s"
-#~ msgstr[1] "اتّصال سیمی %s"
-
-#, javascript-format
#~ msgid "%s Bluetooth Connection"
#~ msgid_plural "%s Bluetooth Connections"
#~ msgstr[0] "اتّصال بلوتوثی %s"
#~ msgstr[1] "اتّصال‌های بلوتوثی %s"
#, javascript-format
-#~ msgid "%s Modem Connection"
-#~ msgid_plural "%s Modem Connections"
-#~ msgstr[0] "اتّصال مودم %s"
-#~ msgstr[1] "اتّصال مودم %s"
-
-#~ msgid "Connection failed"
-#~ msgstr "اتّصال شکست خورد"
-
-#~ msgid "Activation of network connection failed"
-#~ msgstr "فعّال‌سازی اتّصال شبکه شکست خورد"
-
-#, javascript-format
#~ msgid "%s Off"
#~ msgstr "%s خاموش است"
diff --git a/src/main.c b/src/main.c
index 29275cd..2311a74 100644
--- a/src/main.c
+++ b/src/main.c
@@ -589,9 +589,11 @@ main (int argc, char **argv)
shell_profiler_shutdown ();
+#if 0
g_debug ("Doing final cleanup");
_shell_global_destroy_gjs_context (shell_global_get ());
g_object_unref (shell_global_get ());
+#endif
return ecode;
}
diff --git a/src/st/st-viewport.c b/src/st/st-viewport.c
index 3f0cdbb..e6b9127 100644
--- a/src/st/st-viewport.c
+++ b/src/st/st-viewport.c
@@ -370,10 +370,10 @@ st_viewport_apply_transform (ClutterActor *actor,
graphene_point3d_t p = GRAPHENE_POINT3D_INIT_ZERO;
if (priv->hadjustment)
- p.x = -get_hadjustment_value (viewport);
+ p.x = -(int)get_hadjustment_value (viewport);
if (priv->vadjustment)
- p.y = -st_adjustment_get_value (priv->vadjustment);
+ p.y = -(int)st_adjustment_get_value (priv->vadjustment);
graphene_matrix_translate (matrix, &p);
@@ -384,8 +384,8 @@ st_viewport_apply_transform (ClutterActor *actor,
* up or the background and borders will be drawn in the wrong place */
static void
get_border_paint_offsets (StViewport *viewport,
- double *x,
- double *y)
+ int *x,
+ int *y)
{
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
@@ -408,7 +408,7 @@ st_viewport_paint (ClutterActor *actor,
StViewport *viewport = ST_VIEWPORT (actor);
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
- double x, y;
+ int x, y;
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
@@ -418,7 +418,7 @@ st_viewport_paint (ClutterActor *actor,
if (x != 0 || y != 0)
{
cogl_framebuffer_push_matrix (fb);
- cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
+ cogl_framebuffer_translate (fb, x, y, 0);
}
st_widget_paint_background (ST_WIDGET (actor), paint_context);
@@ -465,7 +465,7 @@ st_viewport_pick (ClutterActor *actor,
StViewport *viewport = ST_VIEWPORT (actor);
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
- double x, y;
+ int x, y;
g_autoptr (ClutterActorBox) allocation_box = NULL;
ClutterActorBox content_box;
ClutterActor *child;
@@ -506,8 +506,7 @@ st_viewport_get_paint_volume (ClutterActor *actor,
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
ClutterActorBox allocation_box;
ClutterActorBox content_box;
- graphene_point3d_t origin;
- double x, y, lower, upper;
+ int x, y;
/* Setting the paint volume does not make sense when we don't have any allocation */
if (!clutter_actor_has_allocation (actor))
@@ -524,35 +523,9 @@ st_viewport_get_paint_volume (ClutterActor *actor,
clutter_actor_get_allocation_box (actor, &allocation_box);
st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
- origin.x = content_box.x1 - allocation_box.x1;
- origin.y = content_box.y1 - allocation_box.y2;
- origin.z = 0.f;
- if (priv->hadjustment)
- {
- g_object_get (priv->hadjustment,
- "lower", &lower,
- "upper", &upper,
- NULL);
- width = upper - lower;
- }
- else
- {
- width = content_box.x2 - content_box.x1;
- }
-
- if (priv->vadjustment)
- {
- g_object_get (priv->vadjustment,
- "lower", &lower,
- "upper", &upper,
- NULL);
- height = upper - lower;
- }
- else
- {
- height = content_box.y2 - content_box.y1;
- }
+ width = content_box.x2 - content_box.x1;
+ height = content_box.y2 - content_box.y1;
clutter_paint_volume_set_width (volume, width);
clutter_paint_volume_set_height (volume, height);
@@ -570,6 +543,8 @@ st_viewport_get_paint_volume (ClutterActor *actor,
get_border_paint_offsets (viewport, &x, &y);
if (x != 0 || y != 0)
{
+ graphene_point3d_t origin;
+
clutter_paint_volume_get_origin (volume, &origin);
origin.x += x;
origin.y += y;
diff --git a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in
index eebbc8d..8ce6332 100644
--- a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in
+++ b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in
@@ -39,6 +39,9 @@
</description>
<releases>
+ <release version="43.9" date="2023-09-16"/>
+ <release version="43.8" date="2023-08-22"/>
+ <release version="43.7" date="2023-07-04"/>
<release version="43.6" date="2023-06-03"/>
<release version="43.5" date="2023-04-24"/>
<release version="43.4" date="2023-03-19"/>
diff --git a/subprojects/extensions-app/meson.build b/subprojects/extensions-app/meson.build
index 77af7a5..dfb28dc 100644
--- a/subprojects/extensions-app/meson.build
+++ b/subprojects/extensions-app/meson.build
@@ -1,5 +1,5 @@
project('gnome-extensions-app',
- version: '43.6',
+ version: '43.9',
meson_version: '>= 0.58.0',
license: 'GPLv2+'
)
diff --git a/subprojects/extensions-tool/meson.build b/subprojects/extensions-tool/meson.build
index 17e3bbe..11e48d9 100644
--- a/subprojects/extensions-tool/meson.build
+++ b/subprojects/extensions-tool/meson.build
@@ -1,5 +1,5 @@
project('gnome-extensions-tool', 'c',
- version: '43.6',
+ version: '43.9',
meson_version: '>= 0.58.0',
license: 'GPLv2+'
)
diff --git a/subprojects/gvc/.gitlab-ci.yml b/subprojects/gvc/.gitlab-ci.yml
index ad894f0..447a655 100644
--- a/subprojects/gvc/.gitlab-ci.yml
+++ b/subprojects/gvc/.gitlab-ci.yml
@@ -5,9 +5,12 @@ build-fedora:
image: fedora:latest
stage: test
before_script:
- - dnf install -y redhat-rpm-config gcc meson pulseaudio-libs-devel alsa-lib-devel gtk3-devel
+ - dnf install -y redhat-rpm-config gcc clang meson pulseaudio-libs-devel alsa-lib-devel gtk3-devel
script:
- cd .gitlab-ci
- meson _build
- ninja -C _build
+ - rm -rf _build
+ - CC=clang meson _build
+ - ninja -C _build
diff --git a/subprojects/gvc/gvc-channel-map.c b/subprojects/gvc/gvc-channel-map.c
index bf4d737..688a451 100644
--- a/subprojects/gvc/gvc-channel-map.c
+++ b/subprojects/gvc/gvc-channel-map.c
@@ -166,8 +166,7 @@ gvc_channel_map_class_init (GvcChannelMapClass *klass)
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcChannelMapClass, volume_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
}
diff --git a/subprojects/gvc/gvc-mixer-card.c b/subprojects/gvc/gvc-mixer-card.c
index 93be4da..39f59ca 100644
--- a/subprojects/gvc/gvc-mixer-card.c
+++ b/subprojects/gvc/gvc-mixer-card.c
@@ -61,7 +61,9 @@ enum
PROP_ICON_NAME,
PROP_PROFILE,
PROP_HUMAN_PROFILE,
+ N_PROPS
};
+static GParamSpec *obj_props[N_PROPS] = { NULL, };
static void gvc_mixer_card_finalize (GObject *object);
@@ -117,7 +119,7 @@ gvc_mixer_card_set_name (GvcMixerCard *card,
g_free (card->priv->name);
card->priv->name = g_strdup (name);
- g_object_notify (G_OBJECT (card), "name");
+ g_object_notify_by_pspec (G_OBJECT (card), obj_props[PROP_NAME]);
return TRUE;
}
@@ -137,7 +139,7 @@ gvc_mixer_card_set_icon_name (GvcMixerCard *card,
g_free (card->priv->icon_name);
card->priv->icon_name = g_strdup (icon_name);
- g_object_notify (G_OBJECT (card), "icon-name");
+ g_object_notify_by_pspec (G_OBJECT (card), obj_props[PROP_ICON_NAME]);
return TRUE;
}
@@ -191,7 +193,7 @@ gvc_mixer_card_set_profile (GvcMixerCard *card,
}
}
- g_object_notify (G_OBJECT (card), "profile");
+ g_object_notify_by_pspec (G_OBJECT (card), obj_props[PROP_PROFILE]);
return TRUE;
}
@@ -468,54 +470,42 @@ gvc_mixer_card_class_init (GvcMixerCardClass *klass)
gobject_class->set_property = gvc_mixer_card_set_property;
gobject_class->get_property = gvc_mixer_card_get_property;
- g_object_class_install_property (gobject_class,
- PROP_INDEX,
- g_param_spec_ulong ("index",
- "Index",
- "The index for this card",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_ID,
- g_param_spec_ulong ("id",
- "id",
- "The id for this card",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_PA_CONTEXT,
- g_param_spec_pointer ("pa-context",
- "PulseAudio context",
- "The PulseAudio context for this card",
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name to display for this card",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_ICON_NAME,
- g_param_spec_string ("icon-name",
- "Icon Name",
- "Name of icon to display for this card",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_PROFILE,
- g_param_spec_string ("profile",
- "Profile",
- "Name of current profile for this card",
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_HUMAN_PROFILE,
- g_param_spec_string ("human-profile",
- "Profile (Human readable)",
- "Name of current profile for this card in human readable form",
- NULL,
- G_PARAM_READABLE));
+ obj_props[PROP_INDEX] = g_param_spec_ulong ("index",
+ "Index",
+ "The index for this card",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_ID] = g_param_spec_ulong ("id",
+ "id",
+ "The id for this card",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_PA_CONTEXT] = g_param_spec_pointer ("pa-context",
+ "PulseAudio context",
+ "The PulseAudio context for this card",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_NAME] = g_param_spec_string ("name",
+ "Name",
+ "Name to display for this card",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_ICON_NAME] = g_param_spec_string ("icon-name",
+ "Icon Name",
+ "Name of icon to display for this card",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_PROFILE] = g_param_spec_string ("profile",
+ "Profile",
+ "Name of current profile for this card",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_HUMAN_PROFILE] = g_param_spec_string ("human-profile",
+ "Profile (Human readable)",
+ "Name of current profile for this card in human readable form",
+ NULL,
+ G_PARAM_READABLE|G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
}
static void
diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c
index 6218a1b..b603b77 100644
--- a/subprojects/gvc/gvc-mixer-control.c
+++ b/subprojects/gvc/gvc-mixer-control.c
@@ -54,8 +54,10 @@
enum {
PROP_0,
- PROP_NAME
+ PROP_NAME,
+ N_PROPS
};
+static GParamSpec *obj_props[N_PROPS] = { NULL, };
struct GvcMixerControlPrivate
{
@@ -1234,7 +1236,7 @@ match_stream_with_devices (GvcMixerControl *control,
for (d = devices; d != NULL; d = d->next) {
GvcMixerUIDevice *device;
- gint device_stream_id;
+ guint device_stream_id;
gchar *device_port_name;
gchar *origin;
gchar *description;
@@ -1276,7 +1278,7 @@ match_stream_with_devices (GvcMixerControl *control,
stream_id);
g_object_set (G_OBJECT (device),
- "stream-id", (gint)stream_id,
+ "stream-id", stream_id,
NULL);
in_possession = TRUE;
}
@@ -1322,7 +1324,6 @@ sync_devices (GvcMixerControl *control,
const GList *stream_ports;
const GList *n = NULL;
gboolean is_output = !GVC_IS_MIXER_SOURCE (stream);
- gint stream_port_count = 0;
stream_ports = gvc_mixer_stream_get_ports (stream);
@@ -1366,7 +1367,7 @@ sync_devices (GvcMixerControl *control,
}
g_object_set (G_OBJECT (device),
- "stream-id", (gint)gvc_mixer_stream_get_id (stream),
+ "stream-id", gvc_mixer_stream_get_id (stream),
"description", gvc_mixer_stream_get_description (stream),
"origin", "", /*Leave it empty for these special cases*/
"port-name", NULL,
@@ -1376,7 +1377,7 @@ sync_devices (GvcMixerControl *control,
GObject *object;
object = g_object_new (GVC_TYPE_MIXER_UI_DEVICE,
- "stream-id", (gint)gvc_mixer_stream_get_id (stream),
+ "stream-id", gvc_mixer_stream_get_id (stream),
"description", gvc_mixer_stream_get_description (stream),
"origin", "", /* Leave it empty for these special cases */
"port-name", NULL,
@@ -1402,7 +1403,6 @@ sync_devices (GvcMixerControl *control,
GvcMixerStreamPort *stream_port;
stream_port = n->data;
- stream_port_count ++;
if (match_stream_with_devices (control, stream_port, stream))
continue;
@@ -1806,7 +1806,7 @@ update_sink_input (GvcMixerControl *control,
set_application_id_from_proplist (stream, info->proplist);
set_is_event_stream_from_proplist (stream, info->proplist);
- set_icon_name_from_proplist (stream, info->proplist, "applications-multimedia");
+ set_icon_name_from_proplist (stream, info->proplist, "application-x-executable");
gvc_mixer_stream_set_volume (stream, (guint)max_volume);
gvc_mixer_stream_set_is_muted (stream, info->mute);
gvc_mixer_stream_set_is_virtual (stream, info->client == PA_INVALID_INDEX);
@@ -2874,7 +2874,7 @@ update_event_role_stream (GvcMixerControl *control,
max_volume = pa_cvolume_max (&info->volume);
gvc_mixer_stream_set_name (stream, _("System Sounds"));
- gvc_mixer_stream_set_icon_name (stream, "emblem-system-symbolic");
+ gvc_mixer_stream_set_icon_name (stream, "audio-x-generic");
gvc_mixer_stream_set_volume (stream, (guint)max_volume);
gvc_mixer_stream_set_is_muted (stream, info->mute);
@@ -3119,6 +3119,9 @@ remove_card (GvcMixerControl *control,
g_object_get (G_OBJECT (device), "card", &card, NULL);
+ if (card == NULL)
+ continue;
+
if (gvc_mixer_card_get_index (card) == index) {
g_signal_emit (G_OBJECT (control),
signals[gvc_mixer_ui_device_is_output (device) ? OUTPUT_REMOVED : INPUT_REMOVED],
@@ -3434,15 +3437,22 @@ gvc_mixer_new_pa_context (GvcMixerControl *self)
}
static void
-remove_all_streams (GvcMixerControl *control, GHashTable *hash_table)
+remove_all_items (GvcMixerControl *control,
+ GHashTable *hash_table,
+ void (*remove_item)(GvcMixerControl *control, guint index))
{
GHashTableIter iter;
gpointer key, value;
g_hash_table_iter_init (&iter, hash_table);
while (g_hash_table_iter_next (&iter, &key, &value)) {
- remove_stream (control, value);
- g_hash_table_iter_remove (&iter);
+ if (remove_item) {
+ remove_item (control, GPOINTER_TO_UINT (key));
+ g_hash_table_remove (hash_table, key);
+ g_hash_table_iter_init (&iter, hash_table);
+ } else {
+ g_hash_table_iter_remove (&iter);
+ }
}
}
@@ -3450,11 +3460,22 @@ static gboolean
idle_reconnect (gpointer data)
{
GvcMixerControl *control = GVC_MIXER_CONTROL (data);
- GHashTableIter iter;
- gpointer key, value;
g_return_val_if_fail (control, FALSE);
+ g_debug ("Reconnect: clean up all objects");
+
+ remove_all_items (control, control->priv->sinks, remove_sink);
+ remove_all_items (control, control->priv->sources, remove_source);
+ remove_all_items (control, control->priv->sink_inputs, remove_sink_input);
+ remove_all_items (control, control->priv->source_outputs, remove_source_output);
+ remove_all_items (control, control->priv->cards, remove_card);
+ remove_all_items (control, control->priv->ui_inputs, NULL);
+ remove_all_items (control, control->priv->ui_outputs, NULL);
+ remove_all_items (control, control->priv->clients, remove_client);
+
+ g_debug ("Reconnect: make new connection");
+
if (control->priv->pa_context) {
pa_context_unref (control->priv->pa_context);
control->priv->pa_context = NULL;
@@ -3462,15 +3483,6 @@ idle_reconnect (gpointer data)
gvc_mixer_new_pa_context (control);
}
- remove_all_streams (control, control->priv->sinks);
- remove_all_streams (control, control->priv->sources);
- remove_all_streams (control, control->priv->sink_inputs);
- remove_all_streams (control, control->priv->source_outputs);
-
- g_hash_table_iter_init (&iter, control->priv->clients);
- while (g_hash_table_iter_next (&iter, &key, &value))
- g_hash_table_iter_remove (&iter);
-
gvc_mixer_control_open (control); /* cannot fail */
control->priv->reconnect_id = 0;
@@ -3628,7 +3640,7 @@ gvc_mixer_control_set_property (GObject *object,
case PROP_NAME:
g_free (self->priv->name);
self->priv->name = g_value_dup_string (value);
- g_object_notify (G_OBJECT (self), "name");
+ g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_NAME]);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -3684,133 +3696,117 @@ gvc_mixer_control_class_init (GvcMixerControlClass *klass)
object_class->set_property = gvc_mixer_control_set_property;
object_class->get_property = gvc_mixer_control_get_property;
- g_object_class_install_property (object_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name to display for this mixer control",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
+ obj_props[PROP_NAME] = g_param_spec_string ("name",
+ "Name",
+ "Name to display for this mixer control",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ g_object_class_install_properties (object_class, N_PROPS, obj_props);
signals [STATE_CHANGED] =
g_signal_new ("state-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, state_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [STREAM_ADDED] =
g_signal_new ("stream-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, stream_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [STREAM_REMOVED] =
g_signal_new ("stream-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, stream_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [STREAM_CHANGED] =
g_signal_new ("stream-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, stream_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [AUDIO_DEVICE_SELECTION_NEEDED] =
g_signal_new ("audio-device-selection-needed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
- NULL, NULL,
- g_cclosure_marshal_generic,
+ NULL, NULL, NULL,
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_BOOLEAN, G_TYPE_UINT);
signals [CARD_ADDED] =
g_signal_new ("card-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, card_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [CARD_REMOVED] =
g_signal_new ("card-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, card_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [DEFAULT_SINK_CHANGED] =
g_signal_new ("default-sink-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, default_sink_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [DEFAULT_SOURCE_CHANGED] =
g_signal_new ("default-source-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, default_source_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [ACTIVE_OUTPUT_UPDATE] =
g_signal_new ("active-output-update",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, active_output_update),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [ACTIVE_INPUT_UPDATE] =
g_signal_new ("active-input-update",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, active_input_update),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [OUTPUT_ADDED] =
g_signal_new ("output-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, output_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [INPUT_ADDED] =
g_signal_new ("input-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, input_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [OUTPUT_REMOVED] =
g_signal_new ("output-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, output_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
signals [INPUT_REMOVED] =
g_signal_new ("input-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GvcMixerControlClass, input_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_UINT);
}
diff --git a/subprojects/gvc/gvc-mixer-event-role.c b/subprojects/gvc/gvc-mixer-event-role.c
index 9f5e26a..272edb0 100644
--- a/subprojects/gvc/gvc-mixer-event-role.c
+++ b/subprojects/gvc/gvc-mixer-event-role.c
@@ -42,8 +42,10 @@ struct GvcMixerEventRolePrivate
enum
{
PROP_0,
- PROP_DEVICE
+ PROP_DEVICE,
+ N_PROPS
};
+static GParamSpec *obj_props[N_PROPS] = { NULL, };
static void gvc_mixer_event_role_finalize (GObject *object);
@@ -115,7 +117,7 @@ gvc_mixer_event_role_set_device (GvcMixerEventRole *role,
g_free (role->priv->device);
role->priv->device = g_strdup (device);
- g_object_notify (G_OBJECT (role), "device");
+ g_object_notify_by_pspec (G_OBJECT (role), obj_props[PROP_DEVICE]);
return TRUE;
}
@@ -169,13 +171,12 @@ gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass)
stream_class->push_volume = gvc_mixer_event_role_push_volume;
stream_class->change_is_muted = gvc_mixer_event_role_change_is_muted;
- g_object_class_install_property (object_class,
- PROP_DEVICE,
- g_param_spec_string ("device",
- "Device",
- "Device",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ obj_props[PROP_DEVICE] = g_param_spec_string ("device",
+ "Device",
+ "Device",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ g_object_class_install_properties (object_class, N_PROPS, obj_props);
}
static void
diff --git a/subprojects/gvc/gvc-mixer-stream.c b/subprojects/gvc/gvc-mixer-stream.c
index c324900..f9bcc40 100644
--- a/subprojects/gvc/gvc-mixer-stream.c
+++ b/subprojects/gvc/gvc-mixer-stream.c
@@ -83,7 +83,9 @@ enum
PROP_CARD_INDEX,
PROP_PORT,
PROP_STATE,
+ N_PROPS
};
+static GParamSpec *obj_props[N_PROPS] = { NULL, };
static void gvc_mixer_stream_finalize (GObject *object);
@@ -198,7 +200,7 @@ gvc_mixer_stream_set_volume (GvcMixerStream *stream,
if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
- g_object_notify (G_OBJECT (stream), "volume");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_VOLUME]);
return TRUE;
}
@@ -218,7 +220,7 @@ gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
- g_object_notify (G_OBJECT (stream), "volume");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_VOLUME]);
}
return TRUE;
@@ -246,7 +248,7 @@ gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
if (is_muted != stream->priv->is_muted) {
stream->priv->is_muted = is_muted;
- g_object_notify (G_OBJECT (stream), "is-muted");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_IS_MUTED]);
}
return TRUE;
@@ -260,7 +262,7 @@ gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
if (can_decibel != stream->priv->can_decibel) {
stream->priv->can_decibel = can_decibel;
- g_object_notify (G_OBJECT (stream), "can-decibel");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_CAN_DECIBEL]);
}
return TRUE;
@@ -288,7 +290,7 @@ gvc_mixer_stream_set_name (GvcMixerStream *stream,
g_free (stream->priv->name);
stream->priv->name = g_strdup (name);
- g_object_notify (G_OBJECT (stream), "name");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_NAME]);
return TRUE;
}
@@ -301,7 +303,7 @@ gvc_mixer_stream_set_description (GvcMixerStream *stream,
g_free (stream->priv->description);
stream->priv->description = g_strdup (description);
- g_object_notify (G_OBJECT (stream), "description");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_DESCRIPTION]);
return TRUE;
}
@@ -321,7 +323,7 @@ gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
stream->priv->is_event_stream = is_event_stream;
- g_object_notify (G_OBJECT (stream), "is-event-stream");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_IS_EVENT_STREAM]);
return TRUE;
}
@@ -341,7 +343,7 @@ gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
stream->priv->is_virtual = is_virtual;
- g_object_notify (G_OBJECT (stream), "is-virtual");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_IS_VIRTUAL]);
return TRUE;
}
@@ -361,7 +363,7 @@ gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
g_free (stream->priv->application_id);
stream->priv->application_id = g_strdup (application_id);
- g_object_notify (G_OBJECT (stream), "application-id");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_APPLICATION_ID]);
return TRUE;
}
@@ -374,7 +376,7 @@ on_channel_map_volume_changed (GvcChannelMap *channel_map,
if (set == TRUE)
gvc_mixer_stream_push_volume (stream);
- g_object_notify (G_OBJECT (stream), "volume");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_VOLUME]);
}
static gboolean
@@ -402,7 +404,7 @@ gvc_mixer_stream_set_channel_map (GvcMixerStream *stream,
G_CALLBACK (on_channel_map_volume_changed),
stream);
- g_object_notify (G_OBJECT (stream), "channel-map");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_CHANNEL_MAP]);
}
return TRUE;
@@ -452,7 +454,7 @@ gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
g_free (stream->priv->icon_name);
stream->priv->icon_name = g_strdup (icon_name);
- g_object_notify (G_OBJECT (stream), "icon-name");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_ICON_NAME]);
return TRUE;
}
@@ -465,7 +467,7 @@ gvc_mixer_stream_set_form_factor (GvcMixerStream *stream,
g_free (stream->priv->form_factor);
stream->priv->form_factor = g_strdup (form_factor);
- g_object_notify (G_OBJECT (stream), "form-factor");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_FORM_FACTOR]);
return TRUE;
}
@@ -478,7 +480,7 @@ gvc_mixer_stream_set_sysfs_path (GvcMixerStream *stream,
g_free (stream->priv->sysfs_path);
stream->priv->sysfs_path = g_strdup (sysfs_path);
- g_object_notify (G_OBJECT (stream), "sysfs-path");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_SYSFS_PATH]);
return TRUE;
}
@@ -558,7 +560,7 @@ gvc_mixer_stream_set_port (GvcMixerStream *stream,
}
}
- g_object_notify (G_OBJECT (stream), "port");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_PORT]);
return TRUE;
}
@@ -591,7 +593,7 @@ gvc_mixer_stream_set_state (GvcMixerStream *stream,
if (stream->priv->state != state) {
stream->priv->state = state;
- g_object_notify (G_OBJECT (stream), "state");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_STATE]);
}
return TRUE;
@@ -645,7 +647,7 @@ gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
stream->priv->card_index = card_index;
- g_object_notify (G_OBJECT (stream), "card-index");
+ g_object_notify_by_pspec (G_OBJECT (stream), obj_props[PROP_CARD_INDEX]);
return TRUE;
}
@@ -897,140 +899,103 @@ gvc_mixer_stream_class_init (GvcMixerStreamClass *klass)
klass->change_port = gvc_mixer_stream_real_change_port;
klass->change_is_muted = gvc_mixer_stream_real_change_is_muted;
- g_object_class_install_property (gobject_class,
- PROP_INDEX,
- g_param_spec_ulong ("index",
- "Index",
- "The index for this stream",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_ID,
- g_param_spec_ulong ("id",
- "id",
- "The id for this stream",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_CHANNEL_MAP,
- g_param_spec_object ("channel-map",
- "channel map",
- "The channel map for this stream",
- GVC_TYPE_CHANNEL_MAP,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_PA_CONTEXT,
- g_param_spec_pointer ("pa-context",
- "PulseAudio context",
- "The PulseAudio context for this stream",
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (gobject_class,
- PROP_VOLUME,
- g_param_spec_ulong ("volume",
- "Volume",
- "The volume for this stream",
- 0, G_MAXULONG, 0,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_DECIBEL,
- g_param_spec_double ("decibel",
- "Decibel",
- "The decibel level for this stream",
- -G_MAXDOUBLE, G_MAXDOUBLE, 0,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
-
- g_object_class_install_property (gobject_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name to display for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_DESCRIPTION,
- g_param_spec_string ("description",
- "Description",
- "Description to display for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_APPLICATION_ID,
- g_param_spec_string ("application-id",
+ obj_props[PROP_INDEX] = g_param_spec_ulong ("index",
+ "Index",
+ "The index for this stream",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_ID] = g_param_spec_ulong ("id",
+ "id",
+ "The id for this stream",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_CHANNEL_MAP] = g_param_spec_object ("channel-map",
+ "channel map",
+ "The channel map for this stream",
+ GVC_TYPE_CHANNEL_MAP,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_PA_CONTEXT] = g_param_spec_pointer ("pa-context",
+ "PulseAudio context",
+ "The PulseAudio context for this stream",
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_VOLUME] = g_param_spec_ulong ("volume",
+ "Volume",
+ "The volume for this stream",
+ 0, G_MAXULONG, 0,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_DECIBEL] = g_param_spec_double ("decibel",
+ "Decibel",
+ "The decibel level for this stream",
+ -G_MAXDOUBLE, G_MAXDOUBLE, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_NAME] = g_param_spec_string ("name",
+ "Name",
+ "Name to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_DESCRIPTION] = g_param_spec_string ("description",
+ "Description",
+ "Description to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_APPLICATION_ID] = g_param_spec_string ("application-id",
"Application identifier",
"Application identifier for this stream",
NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_ICON_NAME,
- g_param_spec_string ("icon-name",
- "Icon Name",
- "Name of icon to display for this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_FORM_FACTOR,
- g_param_spec_string ("form-factor",
- "Form Factor",
- "Device form factor for this stream, as reported by PulseAudio",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_SYSFS_PATH,
- g_param_spec_string ("sysfs-path",
- "Sysfs path",
- "Sysfs path for the device associated with this stream",
- NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_IS_MUTED,
- g_param_spec_boolean ("is-muted",
- "is muted",
- "Whether stream is muted",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_CAN_DECIBEL,
- g_param_spec_boolean ("can-decibel",
- "can decibel",
- "Whether stream volume can be converted to decibel units",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_IS_EVENT_STREAM,
- g_param_spec_boolean ("is-event-stream",
- "is event stream",
- "Whether stream's role is to play an event",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_IS_VIRTUAL,
- g_param_spec_boolean ("is-virtual",
- "is virtual stream",
- "Whether the stream is virtual",
- FALSE,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
- g_object_class_install_property (gobject_class,
- PROP_PORT,
- g_param_spec_string ("port",
- "Port",
- "The name of the current port for this stream",
- NULL,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_STATE,
- g_param_spec_enum ("state",
- "State",
- "The current state of this stream",
- GVC_TYPE_MIXER_STREAM_STATE,
- GVC_STREAM_STATE_INVALID,
- G_PARAM_READWRITE));
- g_object_class_install_property (gobject_class,
- PROP_CARD_INDEX,
- g_param_spec_long ("card-index",
- "Card index",
- "The index of the card for this stream",
- PA_INVALID_INDEX, G_MAXLONG, PA_INVALID_INDEX,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_ICON_NAME] = g_param_spec_string ("icon-name",
+ "Icon Name",
+ "Name of icon to display for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_FORM_FACTOR] = g_param_spec_string ("form-factor",
+ "Form Factor",
+ "Device form factor for this stream, as reported by PulseAudio",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_SYSFS_PATH] = g_param_spec_string ("sysfs-path",
+ "Sysfs path",
+ "Sysfs path for the device associated with this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_IS_MUTED] = g_param_spec_boolean ("is-muted",
+ "is muted",
+ "Whether stream is muted",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_CAN_DECIBEL] = g_param_spec_boolean ("can-decibel",
+ "can decibel",
+ "Whether stream volume can be converted to decibel units",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_IS_EVENT_STREAM] = g_param_spec_boolean ("is-event-stream",
+ "is event stream",
+ "Whether stream's role is to play an event",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_IS_VIRTUAL] = g_param_spec_boolean ("is-virtual",
+ "is virtual stream",
+ "Whether the stream is virtual",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_PORT] = g_param_spec_string ("port",
+ "Port",
+ "The name of the current port for this stream",
+ NULL,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_STATE] = g_param_spec_enum ("state",
+ "State",
+ "The current state of this stream",
+ GVC_TYPE_MIXER_STREAM_STATE,
+ GVC_STREAM_STATE_INVALID,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
+ obj_props[PROP_CARD_INDEX] = g_param_spec_long ("card-index",
+ "Card index",
+ "The index of the card for this stream",
+ PA_INVALID_INDEX, G_MAXLONG, PA_INVALID_INDEX,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
}
static void
diff --git a/subprojects/gvc/gvc-mixer-ui-device.c b/subprojects/gvc/gvc-mixer-ui-device.c
index f7dd33e..db1a694 100644
--- a/subprojects/gvc/gvc-mixer-ui-device.c
+++ b/subprojects/gvc/gvc-mixer-ui-device.c
@@ -55,7 +55,9 @@ enum
PROP_UI_DEVICE_TYPE,
PROP_PORT_AVAILABLE,
PROP_ICON_NAME,
+ N_PROPS
};
+static GParamSpec *obj_props[N_PROPS] = { NULL, };
static void gvc_mixer_ui_device_finalize (GObject *object);
@@ -224,7 +226,6 @@ static void
gvc_mixer_ui_device_class_init (GvcMixerUIDeviceClass *klass)
{
GObjectClass* object_class = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
object_class->constructor = gvc_mixer_ui_device_constructor;
object_class->dispose = gvc_mixer_ui_device_dispose;
@@ -232,62 +233,64 @@ gvc_mixer_ui_device_class_init (GvcMixerUIDeviceClass *klass)
object_class->set_property = gvc_mixer_ui_device_set_property;
object_class->get_property = gvc_mixer_ui_device_get_property;
- pspec = g_param_spec_string ("description",
+ obj_props[PROP_DESC_LINE_1] =
+ g_param_spec_string ("description",
"Description construct prop",
"Set first line description",
"no-name-set",
- G_PARAM_READWRITE);
- g_object_class_install_property (object_class, PROP_DESC_LINE_1, pspec);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- pspec = g_param_spec_string ("origin",
+ obj_props[PROP_DESC_LINE_2] =
+ g_param_spec_string ("origin",
"origin construct prop",
"Set second line description name",
"no-name-set",
- G_PARAM_READWRITE);
- g_object_class_install_property (object_class, PROP_DESC_LINE_2, pspec);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- pspec = g_param_spec_pointer ("card",
+ obj_props[PROP_CARD] =
+ g_param_spec_pointer ("card",
"Card from pulse",
"Set/Get card",
- G_PARAM_READWRITE);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_CARD, pspec);
-
- pspec = g_param_spec_string ("port-name",
+ obj_props[PROP_PORT_NAME] =
+ g_param_spec_string ("port-name",
"port-name construct prop",
"Set port-name",
NULL,
- G_PARAM_READWRITE);
- g_object_class_install_property (object_class, PROP_PORT_NAME, pspec);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- pspec = g_param_spec_uint ("stream-id",
+ obj_props[PROP_STREAM_ID] =
+ g_param_spec_uint ("stream-id",
"stream id assigned by gvc-stream",
"Set/Get stream id",
0,
G_MAXUINT,
GVC_MIXER_UI_DEVICE_INVALID,
- G_PARAM_READWRITE);
- g_object_class_install_property (object_class, PROP_STREAM_ID, pspec);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- pspec = g_param_spec_uint ("type",
+ obj_props[PROP_UI_DEVICE_TYPE] =
+ g_param_spec_uint ("type",
"ui-device type",
"determine whether its an input and output",
- 0, 1, 0, G_PARAM_READWRITE);
- g_object_class_install_property (object_class, PROP_UI_DEVICE_TYPE, pspec);
+ 0, 1, 0,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- pspec = g_param_spec_boolean ("port-available",
+ obj_props[PROP_PORT_AVAILABLE] =
+ g_param_spec_boolean ("port-available",
"available",
"determine whether this port is available",
FALSE,
- G_PARAM_READWRITE);
- g_object_class_install_property (object_class, PROP_PORT_AVAILABLE, pspec);
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS);
- pspec = g_param_spec_string ("icon-name",
+ obj_props[PROP_ICON_NAME] =
+ g_param_spec_string ("icon-name",
"Icon Name",
"Name of icon to display for this card",
NULL,
- G_PARAM_READWRITE|G_PARAM_CONSTRUCT);
- g_object_class_install_property (object_class, PROP_ICON_NAME, pspec);
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, N_PROPS, obj_props);
}
/* Removes the part of the string that starts with skip_prefix
@@ -650,7 +653,7 @@ gvc_mixer_ui_device_set_icon_name (GvcMixerUIDevice *device,
g_free (device->priv->icon_name);
device->priv->icon_name = g_strdup (icon_name);
- g_object_notify (G_OBJECT (device), "icon-name");
+ g_object_notify_by_pspec (G_OBJECT (device), obj_props[PROP_ICON_NAME]);
}
diff --git a/subprojects/shew/meson.build b/subprojects/shew/meson.build
index ac0f627..58a2499 100644
--- a/subprojects/shew/meson.build
+++ b/subprojects/shew/meson.build
@@ -1,5 +1,5 @@
project('shew', 'c',
- version: '43.6',
+ version: '43.9',
meson_version: '>= 0.58.0',
license: 'LGPLv2+',
)