Compare commits

...

23 Commits

Author SHA1 Message Date
4a9ffb5e2f Bump version to 3.10.4
Update NEWS.
2014-02-19 20:09:53 +01:00
4d72af73c8 window-tracker: Be more cautious when setting focus app
Since we started tracking non-interesting windows, we can no longer
assume that if we manage to find an app associated with the focus window,
it should appear focused - we now can find apps for docks, the DESKTOP
window etc.
To restore the old behavior, make sure that the focus window or one of
its parents is "interesting".

https://bugzilla.gnome.org/show_bug.cgi?id=722928
2014-02-19 02:15:39 +01:00
cd40011e36 shell_global: Use correct agruments for in update_scale_factor
Otherwise we crash ...

https://bugzilla.gnome.org/show_bug.cgi?id=705410
2014-02-18 23:39:33 +01:00
9e05e87b5c hdpi: Revert hacks
Revert the hacks that where added in response to a bug caused by
commit ba459f4d20

https://bugzilla.gnome.org/show_bug.cgi?id=705410
2014-02-18 23:39:33 +01:00
03b46a5510 layout: Don't query the monitor size twice 2014-02-17 13:43:25 +01:00
e5c982351f layout: Protect against broken monitor size reports
VNC / XRDP reports nonsensial (i.e 0) monitor dimensions causing us to
end up with a dpi of "Infinity" and thus scale even though we shouldn't.

https://bugzilla.redhat.com/show_bug.cgi?id=1065788
2014-02-17 13:43:13 +01:00
470889f1c3 layout: Set high dpi scaling factor
Set the scaling factor when the dpi is above the hidpi threshold.

https://bugzilla.gnome.org/show_bug.cgi?id=705410
2014-02-15 13:17:40 +01:00
a6fb49b1e2 st: Add high dpi support
Add a scale_factor property to StThemeContext that can
be used to enable (integer) scaling of pixel values.

https://bugzilla.gnome.org/show_bug.cgi?id=705410
2014-02-15 13:17:23 +01:00
1e40de3779 Don't send all debug messages to Telepathy
The log handler can be invoked at bad times, and in particular
it can be invoked from gsignal with the signal lock taken.
At that time, calling into arbitrary high-level APIs can
cause a dead-lock.
Instead, only send to telepathy the tp-glib debug messages.
Everything else is in the journal anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=724256
2014-02-13 13:06:17 +01:00
a5370ce3bd shell-app: Don't crash when trying to dispose
If we dispose a ShellApp that has windows left, then we'll crash
when we remove the last window, as that frees and NULLs out
app->running_state.

https://bugzilla.gnome.org/show_bug.cgi?id=723197
2014-02-06 17:41:50 +01:00
312a749920 update translation for 3.10 branch 2014-02-01 17:13:27 -06:00
ae62bfa12d update Punjabi Translation for Branch 2014-02-01 16:56:19 -06:00
c5c3dd0997 shell-app: Track changes to MetaWindow:skip-taskbar
So far we have assumed that whether or not a window is interesting
is static. In general this is the case, but as it is legal for the
underlying properties to change at any time, there are of course
offenders that actually do this (flash I'm looking at ya).
While we used the property to determine whether a window should be
tracked or not, the worst case was showing windows that should be
hidden or missing windows that should be shown.
However as we nowadays base an app's running state on the number of
interesting windows, we need to be more careful in order to avoid
ending up with running apps with no windows.

https://bugzilla.gnome.org/show_bug.cgi?id=723308
2014-01-31 14:00:10 +01:00
64b31e9770 window-tracker: Use MetaWindow:skip-taskbar
The code from shell_window_tracker_is_window_interesting() is equivalent
of MetaWindow's skip-taskbar property, so use it to avoid code duplication.

https://bugzilla.gnome.org/show_bug.cgi?id=723308
2014-01-31 10:16:00 +01:00
75a5f1accb Fixed Russian translation 2014-01-28 22:15:47 +04:00
a6d0e89ecb shell-app: Unref running state when window count drops to zero
With the lastest ShellApp changes, an app is considered stopped
when the last "interesting" window is closed. However the app
may still track non-interesting windows, so if we unref the
running state on the state transition, we hit an assertion later-on
when trying to remove the non-interesting window.
Fix this by keeping the running state around until the last window
is closed.

https://bugzilla.gnome.org/show_bug.cgi?id=722840
2014-01-23 12:46:29 -05:00
a9d6cc921e Assamese translation updated 2014-01-23 19:08:39 +05:30
b84822b725 shell-app: Base running state on "interesting" windows
An app should be considered running if it has at least one "interesting"
window, however the code considers an app running if it has at least
one tracked window. This was fine while we were only tracking interesting
windows, but since commit d21aa0d85f this is no longer the case.
So keep track of the number of interesting windows as well and use that
to determine the running state.

https://bugzilla.gnome.org/show_bug.cgi?id=722690
2014-01-22 22:17:44 +01:00
b28ea8ac92 altTab: Always filter out items with no windows
When restricting the switcher popup to the current workspace, we
filter out running apps with an empty window list (namely: no open
windows on the current workspace). However we may end up with an
empty window list even when not restricting items to the current
workspace when all windows of a running app are associated with a
different application via the transient_for hint.
To fix this, just filter out items with an empty window list
unconditionally.

https://bugzilla.gnome.org/show_bug.cgi?id=722434
2014-01-22 13:59:25 -05:00
6b34937ead window-tracker: Always enable transient_for redirection
It is possible to associate an application's window with a different
application using the transient_for hint. However we currently only
consider the hint in get_window_app() and not when making the original
association, which opens the door to some confusing inconsistencies;
for instance, get_window_app() will not necessarily return the same
value for all windows retrieved via shell_app_get_windows().
Fix this by looking at the transient_for hint when making the original
association, not just in get_window_app().

https://bugzilla.gnome.org/show_bug.cgi?id=722434
2014-01-22 13:59:25 -05:00
1118cf1810 switcherPopup: Fix spacing calculation for empty lists
Without special-casing, our current spacing calculation results in
negative size requests for empty lists, which will trigger a Clutter
assert later.
While the list is never supposed to be empty, bugs happen; crashing
users' systems is the least graceful way of handling this, so don't
do it.

https://bugzilla.gnome.org/show_bug.cgi?id=722434
2014-01-22 13:59:25 -05:00
d981515b08 Notification: don't expand the content on a destroyed notification
If the notification is destroyed between an allocate and the redraw,
the meta_later is invoked on a destroyed object, and fails because
the clutter calls are invalid at that point.

https://bugzilla.gnome.org/show_bug.cgi?id=722547
2014-01-19 16:01:00 +01:00
e78c59a4a8 ShellTrayIcon: forward key presses too
StWidget::popup-menu is emitted when Menu/<Shift>F10 is pressed,
not released (for consistency with Gtk+), so we need to forward
that. Note that for key press we don't emit the matching key
release, because the app will take a grab and get the event directly
from X when the key is physicall released.

https://bugzilla.gnome.org/show_bug.cgi?id=721267
2014-01-19 15:52:38 +01:00
15 changed files with 449 additions and 278 deletions

14
NEWS
View File

@ -1,3 +1,17 @@
3.10.4
======
* Fix keyboard activation of legacy tray icons [Giovanni; #721267]
* Fix regressions from window-tracking changes in 3.10.3 [Florian; #722434,
#722690, #722840, #723308, #722928]
* Scale UI on high-resolution displays [Adel; #705410]
* Misc. bug fixes [Giovanni, Jasper; #722547, #723197, #724256]
Contributors:
Giovanni Campagna, Adel Gadllah, Florian Müllner, Jasper St. Pierre
Translations:
Nilamdyuti Goswami [as], Stas Solovey [ru], A S Alam [pa]
3.10.3
======
* Fix reentrancy issue in message tray [Jasper; #711694]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.10.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.10.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -60,7 +60,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.13.4
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.38.1
MUTTER_MIN_VERSION=3.10.1
MUTTER_MIN_VERSION=3.10.4
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3

View File

@ -454,9 +454,10 @@ const AppSwitcher = new Lang.Class({
appIcon.cachedWindows = allWindows.filter(function(w) {
return windowTracker.get_window_app (w) == appIcon.app;
});
if (workspace == null || appIcon.cachedWindows.length > 0) {
if (appIcon.cachedWindows.length > 0)
this._addIcon(appIcon);
}
else if (workspace == null)
throw new Error('%s appears to be running, but doesn\'t have any windows'.format(appIcon.app.get_name()));
}
this._curApp = -1;

View File

@ -1026,6 +1026,9 @@ const Notification = new Lang.Class({
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
Lang.bind(this,
function() {
if (this._destroyed)
return false;
if (this._canExpandContent()) {
this._addBannerBody();
this._table.add_style_class_name('multi-line-notification');

View File

@ -509,7 +509,7 @@ const SwitcherList = new Lang.Class({
_getPreferredWidth: function (actor, forHeight, alloc) {
let [maxChildMin, maxChildNat] = this._maxChildWidth(forHeight);
let totalSpacing = this._list.spacing * (this._items.length - 1);
let totalSpacing = Math.max(this._list.spacing * (this._items.length - 1), 0);
alloc.min_size = this._items.length * maxChildMin + totalSpacing;
alloc.natural_size = alloc.min_size;
this._minSize = alloc.min_size;
@ -539,7 +539,7 @@ const SwitcherList = new Lang.Class({
let childHeight = box.y2 - box.y1;
let [maxChildMin, maxChildNat] = this._maxChildWidth(childHeight);
let totalSpacing = this._list.spacing * (this._items.length - 1);
let totalSpacing = Math.max(this._list.spacing * (this._items.length - 1), 0);
let childWidth = Math.floor(Math.max(0, box.x2 - box.x1 - totalSpacing) / this._items.length);

350
po/as.po
View File

@ -3,14 +3,14 @@
# This file is distributed under the same license as the gnome-shell package.
#
# ngoswami <ngoswami@redhat.com>, 2011.
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2011, 2012, 2013.
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-28 19:49+0000\n"
"PO-Revision-Date: 2013-09-30 13:31+0530\n"
"POT-Creation-Date: 2014-01-19 14:53+0000\n"
"PO-Revision-Date: 2014-01-23 19:08+0630\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n"
@ -279,23 +279,23 @@ msgstr ""
msgid "Select an extension to configure using the combobox above."
msgstr "উপৰত দিয়া কম্বোবাকচ ব্যৱহাৰ কৰি সংৰূপণ কৰিবলে এটা সম্প্ৰসাৰন বাছক।"
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:136
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:692
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:739
msgid "Cancel"
msgstr "বাতিল কৰক"
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
msgid "Next"
msgstr "পৰৱৰ্তী"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "আনলক কৰক"
#: ../js/gdm/authPrompt.js:213
#: ../js/gdm/authPrompt.js:214
msgctxt "button"
msgid "Sign In"
msgstr "ছাইন ইন কৰক"
@ -322,23 +322,23 @@ msgstr "ব্যৱহাৰকাৰীৰ নাম: "
msgid "Login Window"
msgstr "লগিন উইন্ডো"
#: ../js/gdm/util.js:306
#: ../js/gdm/util.js:321
msgid "Authentication error"
msgstr "প্ৰমাণীকৰণ ত্ৰুটি"
#: ../js/gdm/util.js:436
#: ../js/gdm/util.js:451
msgid "(or swipe finger)"
msgstr "(অথবা আঙুলি স্বাইপ কৰক)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:115
msgid "Command not found"
msgstr "কমান্ড পোৱা নগল"
#: ../js/misc/util.js:131
#: ../js/misc/util.js:148
msgid "Could not parse command:"
msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰি:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:156
#, javascript-format
msgid "Execution of '%s' failed:"
msgstr "'%s' ৰ প্ৰেৰণ ব্যৰ্থ হল:"
@ -355,15 +355,15 @@ msgstr "সঘন"
msgid "All"
msgstr "সকলো"
#: ../js/ui/appDisplay.js:1514
#: ../js/ui/appDisplay.js:1525
msgid "New Window"
msgstr "নতুন উইন্ডো"
#: ../js/ui/appDisplay.js:1517 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1528 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "পছন্দৰ পৰা আতৰাওক"
#: ../js/ui/appDisplay.js:1518
#: ../js/ui/appDisplay.js:1529
msgid "Add to Favorites"
msgstr "পছন্দলে যোগ কৰক"
@ -377,8 +377,8 @@ msgstr "%s ক আপোনাৰ পছন্দলে যোগ কৰা হ
msgid "%s has been removed from your favorites."
msgstr "%s ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।"
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:808
#: ../js/ui/status/system.js:325
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:806
#: ../js/ui/status/system.js:334
msgid "Settings"
msgstr "সংহতিসমূহ"
@ -568,16 +568,16 @@ msgstr "%s ৰ সৈতে খোলক"
msgid "Eject"
msgstr "উলিৱাওক"
#: ../js/ui/components/keyring.js:91 ../js/ui/components/polkitAgent.js:280
#: ../js/ui/components/keyring.js:89 ../js/ui/components/polkitAgent.js:280
msgid "Password:"
msgstr "পাছৱাৰ্ড:"
#: ../js/ui/components/keyring.js:110
#: ../js/ui/components/keyring.js:108
msgid "Type again:"
msgstr "আকৌ টাইপ কৰক:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:695
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:295 ../js/ui/status/network.js:742
msgid "Connect"
msgstr "সংযোগ কৰক"
@ -671,60 +671,60 @@ msgstr "প্ৰমাণীত কৰক"
msgid "Sorry, that didn't work. Please try again."
msgstr "ক্ষমা কৰিব, সেয়া কাম নকৰিলে। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক।"
#: ../js/ui/components/telepathyClient.js:238
#: ../js/ui/components/telepathyClient.js:237
msgid "Invitation"
msgstr "নিমন্ত্ৰণ"
#: ../js/ui/components/telepathyClient.js:298
#: ../js/ui/components/telepathyClient.js:297
msgid "Call"
msgstr "কল"
#: ../js/ui/components/telepathyClient.js:314
#: ../js/ui/components/telepathyClient.js:313
msgid "File Transfer"
msgstr "ফাইল স্থানান্তৰ"
#: ../js/ui/components/telepathyClient.js:418
#: ../js/ui/components/telepathyClient.js:417
msgid "Chat"
msgstr "চেট"
#: ../js/ui/components/telepathyClient.js:480
#: ../js/ui/components/telepathyClient.js:479
msgid "Unmute"
msgstr "অমৌন কৰক"
#: ../js/ui/components/telepathyClient.js:480
#: ../js/ui/components/telepathyClient.js:479
msgid "Mute"
msgstr "মোন কৰক"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:942
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>যোৱাকালী</b>, <b>%H:%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:948
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:953
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:957
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:986
#: ../js/ui/components/telepathyClient.js:985
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s এতিয়া %s হিচাপে জনাজাত"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1089
#: ../js/ui/components/telepathyClient.js:1088
#, javascript-format
msgid "Invitation to %s"
msgstr "%s লে নিমন্ত্ৰণ"
@ -732,38 +732,38 @@ msgstr "%s লে নিমন্ত্ৰণ"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1097
#: ../js/ui/components/telepathyClient.js:1096
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে"
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1140
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
msgid "Decline"
msgstr "নাকচ কৰক"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1181
#: ../js/ui/components/telepathyClient.js:1244
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
msgid "Accept"
msgstr "গ্ৰহন কৰক"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1130
#: ../js/ui/components/telepathyClient.js:1129
#, javascript-format
msgid "Video call from %s"
msgstr "%s ৰ পৰা ভিডিঅ' কল"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1132
#, javascript-format
msgid "Call from %s"
msgstr "%s ৰ পৰা কল"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1142
#: ../js/ui/components/telepathyClient.js:1141
msgid "Answer"
msgstr "উত্তৰ দিয়ক"
@ -772,110 +772,110 @@ msgstr "উত্তৰ দিয়ক"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1173
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s এ আপোনাক %s পঠাই আছে"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1209
#: ../js/ui/components/telepathyClient.js:1208
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব"
#: ../js/ui/components/telepathyClient.js:1301
#: ../js/ui/components/telepathyClient.js:1300
msgid "Network error"
msgstr "নেটৱাৰ্ক ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1303
#: ../js/ui/components/telepathyClient.js:1302
msgid "Authentication failed"
msgstr "প্ৰমাণীকৰণ ব্যৰ্থ"
#: ../js/ui/components/telepathyClient.js:1305
#: ../js/ui/components/telepathyClient.js:1304
msgid "Encryption error"
msgstr "ইনক্ৰিপষণ ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1307
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate not provided"
msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1309
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate untrusted"
msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1311
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate expired"
msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে"
#: ../js/ui/components/telepathyClient.js:1313
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate not activated"
msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1315
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate hostname mismatch"
msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল"
#: ../js/ui/components/telepathyClient.js:1317
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate fingerprint mismatch"
msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰিন্ট অমিল"
#: ../js/ui/components/telepathyClient.js:1319
#: ../js/ui/components/telepathyClient.js:1318
msgid "Certificate self-signed"
msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত"
#: ../js/ui/components/telepathyClient.js:1321
#: ../js/ui/components/telepathyClient.js:1320
msgid "Status is set to offline"
msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1323
#: ../js/ui/components/telepathyClient.js:1322
msgid "Encryption is not available"
msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়"
#: ../js/ui/components/telepathyClient.js:1325
#: ../js/ui/components/telepathyClient.js:1324
msgid "Certificate is invalid"
msgstr "প্ৰমাণপত্ৰ অবৈধ"
#: ../js/ui/components/telepathyClient.js:1327
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection has been refused"
msgstr "সংযোগ নাকচ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1329
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection can't be established"
msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1331
#: ../js/ui/components/telepathyClient.js:1330
msgid "Connection has been lost"
msgstr "সংযোগ হেৰাইছে"
#: ../js/ui/components/telepathyClient.js:1333
#: ../js/ui/components/telepathyClient.js:1332
msgid "This account is already connected to the server"
msgstr "এই একাওন্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত"
#: ../js/ui/components/telepathyClient.js:1335
#: ../js/ui/components/telepathyClient.js:1334
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1337
#: ../js/ui/components/telepathyClient.js:1336
msgid "The account already exists on the server"
msgstr "একাওন্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত"
#: ../js/ui/components/telepathyClient.js:1339
#: ../js/ui/components/telepathyClient.js:1338
msgid "Server is currently too busy to handle the connection"
msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1340
msgid "Certificate has been revoked"
msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে "
"দুৰ্বল"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1344
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -884,22 +884,22 @@ msgstr ""
"ক্ৰিপ্টোগ্ৰাফী "
"লাইব্ৰেৰীয়ে প্ৰণয়ন কৰা সীমাসমূহত অতিক্ৰম কৰে"
#: ../js/ui/components/telepathyClient.js:1347
#: ../js/ui/components/telepathyClient.js:1346
msgid "Internal error"
msgstr "অভ্যন্তৰীক ত্ৰুটি"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1357
#: ../js/ui/components/telepathyClient.js:1356
#, javascript-format
msgid "Unable to connect to %s"
msgstr "%s ৰ সৈতে সংযোগ কৰিবলে অক্ষম"
#: ../js/ui/components/telepathyClient.js:1362
#: ../js/ui/components/telepathyClient.js:1361
msgid "View account"
msgstr "একাওন্ট দৰ্শন কৰক"
#: ../js/ui/components/telepathyClient.js:1401
#: ../js/ui/components/telepathyClient.js:1400
msgid "Unknown reason"
msgstr "অজ্ঞাত কাৰণ"
@ -1075,9 +1075,12 @@ msgstr "ত্ৰুটিসমূহ দেখুৱাওক"
msgid "Enabled"
msgstr "সামৰ্থবান কৰা আছে"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:765 ../src/gvc/gvc-mixer-control.c:1830
#: ../js/ui/lookingGlass.js:765 ../js/ui/status/network.js:472
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "অসামৰ্থবান কৰা আছে"
@ -1101,44 +1104,48 @@ msgstr "উৎস দৰ্শন কৰক"
msgid "Web Page"
msgstr "ৱেব পৃষ্ঠা"
#: ../js/ui/messageTray.js:1222
#: ../js/ui/messageTray.js:1347
msgid "Open"
msgstr "খোলক"
#: ../js/ui/messageTray.js:1229
#: ../js/ui/messageTray.js:1354
msgid "Remove"
msgstr "আতৰাওক"
#: ../js/ui/messageTray.js:1513
#: ../js/ui/messageTray.js:1657
msgid "Notifications"
msgstr "অধিসূচনাসমূহ"
#: ../js/ui/messageTray.js:1664
msgid "Clear Messages"
msgstr "বাৰ্তাসমূহ পৰিষ্কাৰ কৰক"
#: ../js/ui/messageTray.js:1540
#: ../js/ui/messageTray.js:1683
msgid "Notification Settings"
msgstr "অধিসূচনা সংহতিসমূহ"
#: ../js/ui/messageTray.js:1559
#: ../js/ui/messageTray.js:1736
msgid "Tray Menu"
msgstr "ট্ৰে মেনু"
#: ../js/ui/messageTray.js:1775
#: ../js/ui/messageTray.js:1952
msgid "No Messages"
msgstr "কোনো বাৰ্তা নাই"
#: ../js/ui/messageTray.js:1813
#: ../js/ui/messageTray.js:1990
msgid "Message Tray"
msgstr "বাৰ্তা ট্ৰে"
#: ../js/ui/messageTray.js:2788
#: ../js/ui/messageTray.js:2974
msgid "System Information"
msgstr "চিস্টেম তথ্য"
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:396
#: ../js/ui/notificationDaemon.js:510 ../src/shell-app.c:396
msgctxt "program"
msgid "Unknown"
msgstr "অজ্ঞাত"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1161,21 +1168,21 @@ msgstr "অভাৰভিউ"
msgid "Type to search…"
msgstr "সন্ধান কৰিবলে টাইপ কৰক…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "প্ৰস্থান কৰক"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "কাৰ্য্যসমূহ"
#: ../js/ui/panel.js:904
#: ../js/ui/panel.js:900
msgid "Top Bar"
msgstr "উপৰৰ বাৰ"
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:260
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@ -1189,30 +1196,30 @@ msgstr "বন্ধ কৰক"
#. Translators: This is a time format for a date in
#. long format */
#: ../js/ui/screenShield.js:88
#: ../js/ui/screenShield.js:89
msgid "%A, %B %d"
msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:154
#: ../js/ui/screenShield.js:155
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d নতুন অধিসূচনা"
msgstr[1] "%d নতুন অধিসূচনাসমূহ"
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
#: ../js/ui/screenShield.js:478 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "লক কৰক"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:712
msgid "GNOME needs to lock the screen"
msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব"
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:839 ../js/ui/screenShield.js:1305
msgid "Unable to lock"
msgstr "লক কৰিবলে অক্ষম"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:840 ../js/ui/screenShield.js:1306
msgid "Lock was blocked by an application"
msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল"
@ -1252,135 +1259,135 @@ msgstr "পাছৱাৰ্ড মনত ৰাখক"
msgid "Accessibility"
msgstr "অভিগম্যতা"
#: ../js/ui/status/accessibility.js:58
#: ../js/ui/status/accessibility.js:56
msgid "Zoom"
msgstr "জুম কৰক"
#: ../js/ui/status/accessibility.js:65
#: ../js/ui/status/accessibility.js:63
msgid "Screen Reader"
msgstr "পৰ্দা ৰিডাৰ"
#: ../js/ui/status/accessibility.js:69
#: ../js/ui/status/accessibility.js:67
msgid "Screen Keyboard"
msgstr "পৰ্দা কিবৰ্ড"
#: ../js/ui/status/accessibility.js:73
#: ../js/ui/status/accessibility.js:71
msgid "Visual Alerts"
msgstr "চক্ষ সতৰ্কবাৰ্তাসমূহ"
#: ../js/ui/status/accessibility.js:76
#: ../js/ui/status/accessibility.js:74
msgid "Sticky Keys"
msgstr "স্টিকি কি'সমূহ"
#: ../js/ui/status/accessibility.js:79
#: ../js/ui/status/accessibility.js:77
msgid "Slow Keys"
msgstr "মন্থৰ কি'সমূহ"
#: ../js/ui/status/accessibility.js:82
#: ../js/ui/status/accessibility.js:80
msgid "Bounce Keys"
msgstr "বাউঞ্চ কি'সমূহ"
#: ../js/ui/status/accessibility.js:85
#: ../js/ui/status/accessibility.js:83
msgid "Mouse Keys"
msgstr "মাউছ কি'সমূহ"
#: ../js/ui/status/accessibility.js:144
#: ../js/ui/status/accessibility.js:142
msgid "High Contrast"
msgstr "উচ্চ কন্ট্ৰাস্ট"
#: ../js/ui/status/accessibility.js:193
#: ../js/ui/status/accessibility.js:191
msgid "Large Text"
msgstr "ডাঙৰ লিখনী"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:63
#: ../js/ui/status/bluetooth.js:100 ../js/ui/status/bluetooth.js:128
#: ../js/ui/status/bluetooth.js:164 ../js/ui/status/bluetooth.js:195
#: ../js/ui/status/bluetooth.js:27 ../js/ui/status/bluetooth.js:62
#: ../js/ui/status/bluetooth.js:99 ../js/ui/status/bluetooth.js:127
#: ../js/ui/status/bluetooth.js:163 ../js/ui/status/bluetooth.js:194
msgid "Bluetooth"
msgstr "ব্লুটুথ"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1040 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/bluetooth.js:29 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:1099 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "বন্ধ কৰক"
#: ../js/ui/status/bluetooth.js:33
#: ../js/ui/status/bluetooth.js:32
msgid "Bluetooth Settings"
msgstr "ব্লুটুথ সংহতিসমূহ"
#: ../js/ui/status/bluetooth.js:58
#: ../js/ui/status/bluetooth.js:57
#, javascript-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d সংযুক্ত ডিভাইচ"
msgstr[1] "%d সংযুক্ত ডিভাইচসমূহ"
#: ../js/ui/status/bluetooth.js:101 ../js/ui/status/bluetooth.js:129
#: ../js/ui/status/bluetooth.js:100 ../js/ui/status/bluetooth.js:128
#, javascript-format
msgid "Authorization request from %s"
msgstr "%s ৰ পৰা প্ৰমাণীকৰণ অনুৰোধ"
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/bluetooth.js:172
#: ../js/ui/status/bluetooth.js:203
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/bluetooth.js:171
#: ../js/ui/status/bluetooth.js:202
#, javascript-format
msgid "Device %s wants to pair with this computer"
msgstr "ডিভাইচ %s এ এই কমপিউটাৰৰ লগত সংযোগ কৰিব বিচাৰে"
#: ../js/ui/status/bluetooth.js:109
#: ../js/ui/status/bluetooth.js:108
msgid "Allow"
msgstr "অনুমতি দিয়ক"
#: ../js/ui/status/bluetooth.js:110
#: ../js/ui/status/bluetooth.js:109
msgid "Deny"
msgstr "নাকচ কৰক"
#: ../js/ui/status/bluetooth.js:135
#: ../js/ui/status/bluetooth.js:134
#, javascript-format
msgid "Device %s wants access to the service '%s'"
msgstr "ডিভাইচ %s এ সেৱা '%s' লে অভিগম বিচাৰে"
#: ../js/ui/status/bluetooth.js:137
#: ../js/ui/status/bluetooth.js:136
msgid "Always grant access"
msgstr "সদায় অভিগম প্ৰদান কৰক"
#: ../js/ui/status/bluetooth.js:138
#: ../js/ui/status/bluetooth.js:137
msgid "Grant this time only"
msgstr "কেৱল এইবাৰৰ কাৰণে প্ৰদান কৰক"
#: ../js/ui/status/bluetooth.js:139
#: ../js/ui/status/bluetooth.js:138
msgid "Reject"
msgstr "নাকচ কৰক"
#. Translators: argument is the device short name */
#: ../js/ui/status/bluetooth.js:166
#: ../js/ui/status/bluetooth.js:165
#, javascript-format
msgid "Pairing confirmation for %s"
msgstr "%s ৰ কাৰণে যোৰ প্ৰতিশ্ৰুতি"
#: ../js/ui/status/bluetooth.js:173
#: ../js/ui/status/bluetooth.js:172
#, javascript-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr "অনুগ্ৰহ কৰি সুনিশ্চিত কৰক যে পাছকি '%06d' ডিভাইচত থকাটোৰ সৈতে মিল খায়।"
#. Translators: this is the verb, not the noun */
#: ../js/ui/status/bluetooth.js:176
#: ../js/ui/status/bluetooth.js:175
msgid "Matches"
msgstr "মিলসমূহ"
#: ../js/ui/status/bluetooth.js:177
#: ../js/ui/status/bluetooth.js:176
msgid "Does not match"
msgstr "মিল নাখায়"
#: ../js/ui/status/bluetooth.js:196
#: ../js/ui/status/bluetooth.js:195
#, javascript-format
msgid "Pairing request for %s"
msgstr "%s ৰ কাৰণে যোৰ অনুৰোধ"
#: ../js/ui/status/bluetooth.js:204
#: ../js/ui/status/bluetooth.js:203
msgid "Please enter the PIN mentioned on the device."
msgstr "অনুগ্ৰহ কৰি ডিভাইচত উল্লেখ কৰা PIN সুমুৱাওক।"
#: ../js/ui/status/bluetooth.js:221
#: ../js/ui/status/bluetooth.js:220
msgid "OK"
msgstr "ঠিক আছে"
@ -1388,87 +1395,103 @@ msgstr "ঠিক আছে"
msgid "Brightness"
msgstr "উজ্জ্বলতা"
#: ../js/ui/status/network.js:72
#: ../js/ui/status/network.js:71
msgid "<unknown>"
msgstr "<unknown>"
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1055
#: ../js/ui/status/network.js:222 ../js/ui/status/network.js:379
#: ../js/ui/status/network.js:1120
msgid "Off"
msgstr "অফ"
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:961
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "নেটৱাৰ্ক সংহতিসমূহ"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:364
#: ../js/ui/status/network.js:385
msgid "unmanaged"
msgstr "অব্যৱস্থাপিত"
#: ../js/ui/status/network.js:366
#: ../js/ui/status/network.js:387
msgid "disconnecting..."
msgstr "বিচ্ছিনিত কৰা হৈছে..."
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1106
#: ../js/ui/status/network.js:393 ../js/ui/status/network.js:1174
msgid "connecting..."
msgstr "সংযোগ কৰা হৈছে..."
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1109
#: ../js/ui/status/network.js:396 ../js/ui/status/network.js:1177
msgid "authentication required"
msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:383
#: ../js/ui/status/network.js:404
msgid "firmware missing"
msgstr "ফাৰ্মৱেৰ সন্ধানহীন"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:387
#: ../js/ui/status/network.js:408
msgid "unavailable"
msgstr "উপলব্ধ নাই"
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1111
#: ../js/ui/status/network.js:410 ../js/ui/status/network.js:1179
msgid "connection failed"
msgstr "সংযোগ ব্যৰ্থ"
#: ../js/ui/status/network.js:660
#: ../js/ui/status/network.js:426 ../js/ui/status/network.js:512
#| msgid "Mobile broadband"
msgid "Mobile Broadband Settings"
msgstr "মবাইল ব্ৰডবেণ্ড সংহতিসমূহ"
#: ../js/ui/status/network.js:468 ../js/ui/status/network.js:1118
#| msgid "hardware disabled"
msgid "Hardware Disabled"
msgstr "হাৰ্ডৱেৰ অসামৰ্থবান কৰা আছে"
#: ../js/ui/status/network.js:707
msgid "Wi-Fi Networks"
msgstr "Wi-Fi নেটৱাৰ্কসমূহ"
#: ../js/ui/status/network.js:662
#: ../js/ui/status/network.js:709
msgid "Select a network"
msgstr "এটা নেটৱাৰ্ক বাছক"
#: ../js/ui/status/network.js:686
#: ../js/ui/status/network.js:733
msgid "No Networks"
msgstr "কোনো নেটৱাৰ্ক নাই"
#: ../js/ui/status/network.js:955
#: ../js/ui/status/network.js:1005
msgid "Select Network"
msgstr "নেটৱাৰ্ক বাছক"
#: ../js/ui/status/network.js:1040
#: ../js/ui/status/network.js:1011
#| msgid "Settings"
msgid "Wi-Fi Settings"
msgstr "Wi-Fi সংহতিসমূহ"
#: ../js/ui/status/network.js:1099
msgid "Turn On"
msgstr "অন কৰক"
#: ../js/ui/status/network.js:1173
#: ../js/ui/status/network.js:1122
#| msgid "Connect"
msgid "Not Connected"
msgstr "সংযুক্ত নহয়"
#: ../js/ui/status/network.js:1242
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1313
#: ../js/ui/status/network.js:1382
msgid "Network Manager"
msgstr "নেটৱাৰ্ক ব্যৱস্থাপক"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1421
msgid "Connection failed"
msgstr "সংযোগ ব্যৰ্থ"
#: ../js/ui/status/network.js:1353
#: ../js/ui/status/network.js:1422
msgid "Activation of network connection failed"
msgstr "নেটৱাৰ্ক সংযোগ সক্ৰিয়কৰণ ব্যৰ্থ হল"
@ -1490,13 +1513,11 @@ msgstr "অনুমান কৰা হৈছে…"
#: ../js/ui/status/power.js:77
#, javascript-format
#| msgid "%d\\u2236%02d Remaining (%d%%)"
msgid "%d%02d Remaining (%d%%)"
msgstr "%d%02d অৱশিষ্ট (%d%%)"
#: ../js/ui/status/power.js:82
#, javascript-format
#| msgid "%d\\u2236%02d Until Full (%d%%)"
msgid "%d%02d Until Full (%d%%)"
msgstr "%d%02d সম্পূৰ্ণ হোৱালৈ (%d%%)"
@ -1508,23 +1529,27 @@ msgstr "বিমান অৱস্থা"
msgid "On"
msgstr "অন"
#: ../js/ui/status/system.js:305
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "নেটৱাৰ্ক সংহতিসমূহ"
#: ../js/ui/status/system.js:314
msgid "Switch User"
msgstr "ব্যৱহাৰকাৰী পৰিবৰ্তন কৰক"
#: ../js/ui/status/system.js:310
#: ../js/ui/status/system.js:319
msgid "Log Out"
msgstr "লগ আউট কৰক"
#: ../js/ui/status/system.js:329
#: ../js/ui/status/system.js:338
msgid "Orientation Lock"
msgstr "দিশনিৰ্ণয় লক"
#: ../js/ui/status/system.js:337
#: ../js/ui/status/system.js:346
msgid "Suspend"
msgstr "বাতিল কৰক"
#: ../js/ui/status/system.js:340
#: ../js/ui/status/system.js:349
msgid "Power Off"
msgstr "বন্ধ কৰক"
@ -1810,9 +1835,6 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgid "Set Up a New Device…"
#~ msgstr "এটা নতুন ডিভাইচ সংহতি কৰক…"
#~ msgid "hardware disabled"
#~ msgstr "হাৰ্ডৱেৰ অসামৰ্থবান কৰা আছে"
#~ msgid "Connection"
#~ msgstr "সংযোগ"
@ -1851,9 +1873,6 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgid "Auto Ethernet"
#~ msgstr "স্বচালিত ইথাৰনেট"
#~ msgid "Mobile broadband"
#~ msgstr "মবাইল ব্ৰডবেণ্ড"
#~ msgid "Auto broadband"
#~ msgstr "স্বচালিত ব্ৰডবেণ্ড"
@ -1955,9 +1974,6 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgid "Idle"
#~ msgstr "অলস"
#~ msgid "Notifications"
#~ msgstr "অধিসূচনাসমূহ"
#~ msgid "Your chat status will be set to busy"
#~ msgstr "আপোনাৰ চেট অৱস্থা ব্যস্থলে সংহতি কৰা হব"

View File

@ -1,15 +1,15 @@
# Punjabi translation for gnome-shell.
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
# A S Alam <aalam@users.sf.net>, 2009, 2010, 2011, 2012, 2013.
# A S Alam <aalam@users.sf.net>, 2009, 2010, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-12-07 09:13+0000\n"
"PO-Revision-Date: 2013-12-07 19:03-0600\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
"POT-Creation-Date: 2014-02-01 22:56+0000\n"
"PO-Revision-Date: 2014-02-01 17:12-0600\n"
"Last-Translator: Aman Alam <aalam@users.sf.net>\n"
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"Language: pa\n"
"MIME-Version: 1.0\n"
@ -1094,43 +1094,43 @@ msgstr "ਸਰੋਤ ਵੇਖੋ"
msgid "Web Page"
msgstr "ਵੈੱਬ ਪੇਜ਼"
#: ../js/ui/messageTray.js:1347
#: ../js/ui/messageTray.js:1350
msgid "Open"
msgstr "ਖੋਲ੍ਹੋ"
#: ../js/ui/messageTray.js:1354
#: ../js/ui/messageTray.js:1357
msgid "Remove"
msgstr "ਹਟਾਓ"
#: ../js/ui/messageTray.js:1657
#: ../js/ui/messageTray.js:1660
msgid "Notifications"
msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ"
#: ../js/ui/messageTray.js:1664
#: ../js/ui/messageTray.js:1667
msgid "Clear Messages"
msgstr "ਸੁਨੇਹੇ ਸਾਫ਼ ਕਰੋ"
#: ../js/ui/messageTray.js:1683
#: ../js/ui/messageTray.js:1686
msgid "Notification Settings"
msgstr "ਸੂਚਨਾ ਸੈਟਿੰਗ"
#: ../js/ui/messageTray.js:1736
#: ../js/ui/messageTray.js:1739
msgid "Tray Menu"
msgstr "ਟਰੇ ਮੇਨੂ"
#: ../js/ui/messageTray.js:1952
#: ../js/ui/messageTray.js:1955
msgid "No Messages"
msgstr "ਕੋਈ ਸੁਨੇਹਾ ਨਹੀਂ"
#: ../js/ui/messageTray.js:1990
#: ../js/ui/messageTray.js:1993
msgid "Message Tray"
msgstr "ਸੁਨੇਹਾ ਟਰੇ"
#: ../js/ui/messageTray.js:2974
#: ../js/ui/messageTray.js:2977
msgid "System Information"
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
#: ../js/ui/notificationDaemon.js:510 ../src/shell-app.c:396
#: ../js/ui/notificationDaemon.js:510 ../src/shell-app.c:398
msgctxt "program"
msgid "Unknown"
msgstr "ਅਣਜਾਣ"
@ -1430,12 +1430,10 @@ msgid "connection failed"
msgstr "ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ ਹੈ"
#: ../js/ui/status/network.js:426 ../js/ui/status/network.js:512
#| msgid "Mobile broadband"
msgid "Mobile Broadband Settings"
msgstr "ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਸੈਟਿੰਗ"
#: ../js/ui/status/network.js:468 ../js/ui/status/network.js:1118
#| msgid "hardware disabled"
msgid "Hardware Disabled"
msgstr "ਹਾਰਡਵੇਅਰ ਬੰਦ ਹੈ"
@ -1456,7 +1454,6 @@ msgid "Select Network"
msgstr "ਨੈੱਟਵਰਕ ਚੁਣੋ"
#: ../js/ui/status/network.js:1011
#| msgid "Settings"
msgid "Wi-Fi Settings"
msgstr "ਵਾਈ-ਫਾਈ ਸੈਟਿੰਗ"
@ -1465,9 +1462,8 @@ msgid "Turn On"
msgstr "ਚਾਲੂ ਕਰੋ"
#: ../js/ui/status/network.js:1122
#| msgid "Connect"
msgid "Not Connected"
msgstr "ਕੁਨੈਕਟ ਨਹੀਂ ਹੈ"
msgstr "ਕੁਨੈਕਟ ਨਹੀਂ"
#: ../js/ui/status/network.js:1242
msgid "VPN"
@ -1654,7 +1650,7 @@ msgstr "ਲਾਗਇਨ ਸਕਰੀਨ ਉੱਤੇ ਖਾਸ ਮੋਡ ਜਿ
msgid "List possible modes"
msgstr "ਸੰਭਵ ਮੋਡ ਵੇਖਾਓ"
#: ../src/shell-app.c:644
#: ../src/shell-app.c:646
#, c-format
msgid "Failed to launch '%s'"
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ"

View File

@ -9,24 +9,25 @@
# Sergey Davidoff <shnatsel@gmail.com>, 2010.
# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012.
# Yuri Myasoedov <omerta13@yandex.ru>, 2012, 2013.
# Stas Solovey <whats_up@tut.by>, 2011, 2013.
# JDronova <juliette.tux@gmail.com>, 2013.
# Stas Solovey <whats_up@tut.by>, 2011, 2013, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-11-01 12:09+0000\n"
"PO-Revision-Date: 2013-11-01 23:30+0400\n"
"Last-Translator: Yuri Myasoedov <ymyasoedov@yandex.ru>\n"
"Language-Team: Russian <gnome-cyr@gnome.org>\n"
"POT-Creation-Date: 2014-01-23 17:46+0000\n"
"PO-Revision-Date: 2014-01-28 19:19+0300\n"
"Last-Translator: Stas Solovey <whats_up@tut.by>\n"
"Language-Team: Русский <gnome-cyr@gnome.org>\n"
"Language: ru\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.5.7\n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System"
@ -356,15 +357,15 @@ msgstr "Популярные"
msgid "All"
msgstr "Все"
#: ../js/ui/appDisplay.js:1523
#: ../js/ui/appDisplay.js:1525
msgid "New Window"
msgstr "Новое окно"
#: ../js/ui/appDisplay.js:1526 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1528 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Удалить из избранного"
#: ../js/ui/appDisplay.js:1527
#: ../js/ui/appDisplay.js:1529
msgid "Add to Favorites"
msgstr "Добавить в избранное"
@ -520,17 +521,19 @@ msgstr "Следующий месяц"
msgid "Nothing Scheduled"
msgstr "Нет событий"
# fix для даты в календаре и на экране блокировки, за разъяснением обращаться к Stas Solovey <whats_up@tut.by>
#. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %B %d"
msgstr "%A, %d %b., %Y"
# fix для даты в календаре и на экране блокировки
#. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y"
msgstr "%A, %d %b., %Y"
#: ../js/ui/calendar.js:785
msgid "Today"
@ -705,15 +708,17 @@ msgstr "<b>Вчера</b>, <b>%H:%M</b>"
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
# fix для даты в календаре и на экране блокировки
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%d</b> <b>%B</b>, <b>%H:%M</b>"
msgstr "<b>%d</b> <b>%b</b>., <b>%H:%M</b>"
# fix для даты в календаре и на экране блокировки
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> <b>%b</b>., <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
@ -927,12 +932,13 @@ msgstr "Открыть часы"
msgid "Date & Time Settings"
msgstr "Настроить дату и время"
# fix для даты в календаре и на экране блокировки
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */
#: ../js/ui/dateMenu.js:202
msgid "%A %B %e, %Y"
msgstr "%A, %e %B, %Y"
msgstr "%A, %e %b., %Y"
#: ../js/ui/endSessionDialog.js:62
#, javascript-format
@ -1110,43 +1116,43 @@ msgstr "Показать код"
msgid "Web Page"
msgstr "Веб-страница"
#: ../js/ui/messageTray.js:1347
#: ../js/ui/messageTray.js:1350
msgid "Open"
msgstr "Открыть"
#: ../js/ui/messageTray.js:1354
#: ../js/ui/messageTray.js:1357
msgid "Remove"
msgstr "Удалить"
#: ../js/ui/messageTray.js:1657
#: ../js/ui/messageTray.js:1660
msgid "Notifications"
msgstr "Уведомления"
#: ../js/ui/messageTray.js:1664
#: ../js/ui/messageTray.js:1667
msgid "Clear Messages"
msgstr "Очистить список сообщений"
#: ../js/ui/messageTray.js:1683
#: ../js/ui/messageTray.js:1686
msgid "Notification Settings"
msgstr "Параметры уведомлений"
#: ../js/ui/messageTray.js:1736
#: ../js/ui/messageTray.js:1739
msgid "Tray Menu"
msgstr "Меню панели"
#: ../js/ui/messageTray.js:1952
#: ../js/ui/messageTray.js:1955
msgid "No Messages"
msgstr "Нет сообщений"
#: ../js/ui/messageTray.js:1990
#: ../js/ui/messageTray.js:1993
msgid "Message Tray"
msgstr "Панель сообщений"
#: ../js/ui/messageTray.js:2965
#: ../js/ui/messageTray.js:2977
msgid "System Information"
msgstr "Системная информация"
#: ../js/ui/notificationDaemon.js:510 ../src/shell-app.c:396
#: ../js/ui/notificationDaemon.js:510 ../src/shell-app.c:398
msgctxt "program"
msgid "Unknown"
msgstr "Неизвестно"
@ -1201,11 +1207,12 @@ msgstr "Введите команду"
msgid "Close"
msgstr "Закрыть"
# fix для даты в календаре и на экране блокировки
#. Translators: This is a time format for a date in
#. long format */
#: ../js/ui/screenShield.js:89
msgid "%A, %B %d"
msgstr "%d %B, %A"
msgstr "%A, %d %b., %Y"
#: ../js/ui/screenShield.js:155
#, javascript-format
@ -1673,7 +1680,7 @@ msgstr ""
msgid "List possible modes"
msgstr "Список возможных режимов"
#: ../src/shell-app.c:644
#: ../src/shell-app.c:646
#, c-format
msgid "Failed to launch '%s'"
msgstr "Не удалось запустить «%s»"

View File

@ -277,7 +277,9 @@ default_log_handler (const char *log_domain,
g_get_current_time (&now);
tp_debug_sender_add_message (sender, &now, log_domain, log_level, message);
/* Send telepathy debug through DBus */
if (log_domain != NULL && g_str_has_prefix (log_domain, "tp-glib"))
tp_debug_sender_add_message (sender, &now, log_domain, log_level, message);
/* Filter out telepathy-glib logs, we don't want to flood Shell's output
* with those. */

View File

@ -36,6 +36,8 @@ typedef struct {
GSList *windows;
guint interesting_windows;
/* Whether or not we need to resort the windows; this is done on demand */
gboolean window_sort_stale : 1;
@ -899,12 +901,6 @@ shell_app_state_transition (ShellApp *app,
state == SHELL_APP_STATE_STARTING));
app->state = state;
if (app->state == SHELL_APP_STATE_STOPPED && app->running_state)
{
unref_running_state (app->running_state);
app->running_state = NULL;
}
_shell_app_system_notify_app_state_changed (shell_app_system_get_default (), app);
g_object_notify (G_OBJECT (app), "state");
@ -934,6 +930,37 @@ shell_app_on_user_time_changed (MetaWindow *window,
}
}
static void
shell_app_sync_running_state (ShellApp *app)
{
g_return_if_fail (app->running_state != NULL);
if (app->running_state->interesting_windows == 0)
shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
else if (app->state != SHELL_APP_STATE_STARTING)
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
}
static void
shell_app_on_skip_taskbar_changed (MetaWindow *window,
GParamSpec *pspec,
ShellApp *app)
{
g_assert (app->running_state != NULL);
/* we rely on MetaWindow:skip-taskbar only being notified
* when it actually changes; when that assumption breaks,
* we'll have to track the "interesting" windows themselves
*/
if (meta_window_is_skip_taskbar (window))
app->running_state->interesting_windows--;
else
app->running_state->interesting_windows++;
shell_app_sync_running_state (app);
}
static void
shell_app_on_ws_switch (MetaScreen *screen,
int from,
@ -1030,12 +1057,14 @@ _shell_app_add_window (ShellApp *app,
app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window));
g_signal_connect (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app);
g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
g_signal_connect (window, "notify::skip-taskbar", G_CALLBACK(shell_app_on_skip_taskbar_changed), app);
shell_app_update_app_menu (app, window);
shell_app_ensure_busy_watch (app);
if (app->state != SHELL_APP_STATE_STARTING)
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
if (shell_window_tracker_is_window_interesting (window))
app->running_state->interesting_windows++;
shell_app_sync_running_state (app);
g_object_thaw_notify (G_OBJECT (app));
@ -1053,11 +1082,16 @@ _shell_app_remove_window (ShellApp *app,
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_unmanaged), app);
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_user_time_changed), app);
g_signal_handlers_disconnect_by_func (window, G_CALLBACK(shell_app_on_skip_taskbar_changed), app);
g_object_unref (window);
app->running_state->windows = g_slist_remove (app->running_state->windows, window);
if (app->running_state->windows == NULL)
shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
if (shell_window_tracker_is_window_interesting (window))
app->running_state->interesting_windows--;
shell_app_sync_running_state (app);
if (app->running_state && app->running_state->windows == NULL)
g_clear_pointer (&app->running_state, unref_running_state);
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
}
@ -1556,11 +1590,9 @@ shell_app_dispose (GObject *object)
app->entry = NULL;
}
if (app->running_state)
{
while (app->running_state->windows)
_shell_app_remove_window (app, app->running_state->windows->data);
}
while (app->running_state)
_shell_app_remove_window (app, app->running_state->windows->data);
/* We should have been transitioned when we removed all of our windows */
g_assert (app->state == SHELL_APP_STATE_STOPPED);
g_assert (app->running_state == NULL);

View File

@ -739,6 +739,20 @@ global_stage_after_paint (gpointer data)
return TRUE;
}
static void
update_scale_factor (GdkScreen *screen, gpointer data)
{
ShellGlobal *global = SHELL_GLOBAL (data);
ClutterStage *stage = CLUTTER_STAGE (global->stage);
StThemeContext *context = st_theme_context_get_for_stage (stage);
GValue value = G_VALUE_INIT;
g_value_init (&value, G_TYPE_INT);
gdk_screen_get_setting (global->gdk_screen, "gdk-window-scaling-factor", &value);
g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
}
/* This is an IBus workaround. The flow of events with IBus is that every time
* it gets gets a key event, it:
*
@ -917,9 +931,19 @@ _shell_global_set_plugin (ShellGlobal *global,
g_signal_connect (global->meta_display, "notify::focus-window",
G_CALLBACK (focus_window_changed), global);
/*
* We connect to GdkScreen's monitors-changed here to avoid
* a race condition. GdkScreen's monitors-changed signal is
* emitted *after* the xsetting has been updated.
*/
g_signal_connect (global->gdk_screen, "monitors-changed",
G_CALLBACK (update_scale_factor), global);
gdk_event_handler_set (gnome_shell_gdk_event_handler, global, NULL);
global->focus_manager = st_focus_manager_get_for_stage (global->stage);
update_scale_factor (global->gdk_screen, global);
}
GjsContext *

View File

@ -172,8 +172,9 @@ shell_tray_icon_new (ShellEmbeddedWindow *window)
* @event: the #ClutterEvent triggering the fake click
*
* Fakes a press and release on @icon. @event must be a
* %CLUTTER_BUTTON_RELEASE event. Its relevant details will be passed
* on to the icon, but its coordinates will be ignored; the click is
* %CLUTTER_BUTTON_RELEASE, %CLUTTER_KEY_PRESS or %CLUTTER_KEY_RELEASE event.
* Its relevant details will be passed on to the icon, but its
* coordinates will be ignored; the click is
* always made on the center of @icon.
*/
void
@ -191,6 +192,7 @@ shell_tray_icon_click (ShellTrayIcon *icon,
ClutterEventType event_type = clutter_event_type (event);
g_return_if_fail (event_type == CLUTTER_BUTTON_RELEASE ||
event_type == CLUTTER_KEY_PRESS ||
event_type == CLUTTER_KEY_RELEASE);
gdk_error_trap_push ();
@ -249,12 +251,24 @@ shell_tray_icon_click (ShellTrayIcon *icon,
xkevent.y_root = xcevent.y_root;
xkevent.state = clutter_event_get_state (event);
xkevent.same_screen = True;
xkevent.type = KeyPress;
xkevent.keycode = clutter_event_get_key_code (event);
xkevent.type = KeyPress;
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xkevent);
xkevent.type = KeyRelease;
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xkevent);
if (event_type == CLUTTER_KEY_RELEASE)
{
/* If the application takes a grab on KeyPress, we don't
* want to send it a KeyRelease. There's no good way of
* knowing whether a tray icon will take a grab, so just
* assume it does, and don't send the KeyRelease. That might
* make the tracking for key events messed up if it doesn't take
* a grab, but the tray icon won't get key focus in normal cases,
* so let's hope this isn't too damaging...
*/
xkevent.type = KeyRelease;
XSendEvent (xdisplay, xwindow, False, 0, (XEvent *)&xkevent);
}
}
/* And move the pointer back out */

View File

@ -144,37 +144,7 @@ shell_window_tracker_class_init (ShellWindowTrackerClass *klass)
gboolean
shell_window_tracker_is_window_interesting (MetaWindow *window)
{
if (meta_window_is_override_redirect (window)
|| meta_window_is_skip_taskbar (window))
return FALSE;
switch (meta_window_get_window_type (window))
{
/* Definitely ignore these. */
case META_WINDOW_DESKTOP:
case META_WINDOW_DOCK:
case META_WINDOW_SPLASHSCREEN:
/* Should have already been handled by override_redirect above,
* but explicitly list here so we get the "unhandled enum"
* warning if in the future anything is added.*/
case META_WINDOW_DROPDOWN_MENU:
case META_WINDOW_POPUP_MENU:
case META_WINDOW_TOOLTIP:
case META_WINDOW_NOTIFICATION:
case META_WINDOW_COMBO:
case META_WINDOW_DND:
case META_WINDOW_OVERRIDE_OTHER:
return FALSE;
case META_WINDOW_NORMAL:
case META_WINDOW_DIALOG:
case META_WINDOW_MODAL_DIALOG:
case META_WINDOW_MENU:
case META_WINDOW_TOOLBAR:
case META_WINDOW_UTILITY:
break;
}
return TRUE;
return !meta_window_is_skip_taskbar (window);
}
/*
@ -384,8 +354,13 @@ get_app_for_window (ShellWindowTracker *tracker,
MetaWindow *window)
{
ShellApp *result = NULL;
MetaWindow *transient_for;
const char *startup_id;
transient_for = meta_window_get_transient_for (window);
if (transient_for != NULL)
return get_app_for_window (tracker, transient_for);
/* First, we check whether we already know about this window,
* if so, just return that.
*/
@ -470,6 +445,16 @@ update_focus_app (ShellWindowTracker *self)
ShellApp *new_focus_app;
new_focus_win = meta_display_get_focus_window (shell_global_get_display (shell_global_get ()));
/* we only consider an app focused if the focus window can be clearly
* associated with a running app; this is the case if the focus window
* or one of its parents is visible in the taskbar, e.g.
* - 'nautilus' should appear focused when its about dialog has focus
* - 'nautilus' should not appear focused when the DESKTOP has focus
*/
while (new_focus_win && meta_window_is_skip_taskbar (new_focus_win))
new_focus_win = meta_window_get_transient_for (new_focus_win);
new_focus_app = new_focus_win ? shell_window_tracker_get_window_app (self, new_focus_win) : NULL;
if (new_focus_app)
@ -681,13 +666,8 @@ ShellApp *
shell_window_tracker_get_window_app (ShellWindowTracker *tracker,
MetaWindow *metawin)
{
MetaWindow *transient_for;
ShellApp *app;
transient_for = meta_window_get_transient_for (metawin);
if (transient_for != NULL)
metawin = transient_for;
app = g_hash_table_lookup (tracker->window_to_app, metawin);
if (app)
g_object_ref (app);

View File

@ -34,6 +34,8 @@ struct _StThemeContext {
/* set of StThemeNode */
GHashTable *nodes;
int scale_factor;
};
struct _StThemeContextClass {
@ -42,6 +44,12 @@ struct _StThemeContextClass {
#define DEFAULT_FONT "sans-serif 10"
enum
{
PROP_0,
PROP_SCALE_FACTOR
};
enum
{
CHANGED,
@ -57,6 +65,15 @@ static void on_icon_theme_changed (StTextureCache *cache,
StThemeContext *context);
static void st_theme_context_changed (StThemeContext *context);
static void st_theme_context_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void st_theme_context_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static void
st_theme_context_finalize (GObject *object)
{
@ -86,8 +103,23 @@ st_theme_context_class_init (StThemeContextClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->set_property = st_theme_context_set_property;
object_class->get_property = st_theme_context_get_property;
object_class->finalize = st_theme_context_finalize;
/**
* StThemeContext:scale-factor:
*
* The scaling factor used or high dpi scaling.
*/
g_object_class_install_property (object_class,
PROP_SCALE_FACTOR,
g_param_spec_int ("scale-factor",
"Scale factor",
"Integer scale factor used for high dpi scaling",
0, G_MAXINT, 1,
G_PARAM_READABLE | G_PARAM_WRITABLE));
signals[CHANGED] =
g_signal_new ("changed",
G_TYPE_FROM_CLASS (klass),
@ -114,6 +146,53 @@ st_theme_context_init (StThemeContext *context)
context->nodes = g_hash_table_new_full ((GHashFunc) st_theme_node_hash,
(GEqualFunc) st_theme_node_equal,
g_object_unref, NULL);
context->scale_factor = 1;
}
static void
st_theme_context_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
StThemeContext *context = ST_THEME_CONTEXT (object);
switch (prop_id)
{
case PROP_SCALE_FACTOR:
{
int scale_factor = g_value_get_int (value);
if (scale_factor != context->scale_factor)
{
context->scale_factor = scale_factor;
st_theme_context_changed (context);
}
break;
}
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
st_theme_context_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
StThemeContext *context = ST_THEME_CONTEXT (object);
switch (prop_id)
{
case PROP_SCALE_FACTOR:
g_value_set_int (value, context->scale_factor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/**

View File

@ -1015,6 +1015,9 @@ get_length_from_term (StThemeNode *node,
} type = ABSOLUTE;
double multiplier = 1.0;
int scale_factor;
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
if (term->type != TERM_NUMBER)
{
@ -1028,7 +1031,7 @@ get_length_from_term (StThemeNode *node,
{
case NUM_LENGTH_PX:
type = ABSOLUTE;
multiplier = 1;
multiplier = 1 * scale_factor;
break;
case NUM_LENGTH_PT:
type = POINTS;