Compare commits
113 Commits
3.7.90
...
wip/gcampa
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6d4ca1fcc8 | ||
![]() |
93b1af401f | ||
![]() |
3368e49aa7 | ||
![]() |
9e31f05861 | ||
![]() |
b52f4ed25b | ||
![]() |
00eb764880 | ||
![]() |
6d011a3700 | ||
![]() |
f9d9caf417 | ||
![]() |
b50702dd52 | ||
![]() |
e74a82b9d6 | ||
![]() |
12fa983242 | ||
![]() |
1607df835a | ||
![]() |
7b705dd670 | ||
![]() |
323e3028b6 | ||
![]() |
7e1b4692e2 | ||
![]() |
c1dd971ce9 | ||
![]() |
39610e6933 | ||
![]() |
fdb189102d | ||
![]() |
e54d095064 | ||
![]() |
e6634c56d3 | ||
![]() |
deb77a4dde | ||
![]() |
90ea27c423 | ||
![]() |
19533f87e3 | ||
![]() |
e6c5c84133 | ||
![]() |
404aaa5658 | ||
![]() |
2c70df25f5 | ||
![]() |
db959ac2eb | ||
![]() |
bbf0dce390 | ||
![]() |
1cbb8b9851 | ||
![]() |
96387cce47 | ||
![]() |
570fc68cb1 | ||
![]() |
e6ce0057af | ||
![]() |
a3f625fe39 | ||
![]() |
bdfe459d64 | ||
![]() |
95ec8ef5e1 | ||
![]() |
b8198716d9 | ||
![]() |
071a4e5f83 | ||
![]() |
d99cd71408 | ||
![]() |
030e6aa507 | ||
![]() |
f146b01e3e | ||
![]() |
c249ff9046 | ||
![]() |
8b48560c81 | ||
![]() |
bdbea2463b | ||
![]() |
8fb2263471 | ||
![]() |
ea55c36a3a | ||
![]() |
37595ff3e7 | ||
![]() |
cca008b73c | ||
![]() |
b9dcbd9d33 | ||
![]() |
b6bf8d5b2d | ||
![]() |
43ed66cf26 | ||
![]() |
57eae1be43 | ||
![]() |
b394d184cc | ||
![]() |
81e01b6f88 | ||
![]() |
52efe32e0f | ||
![]() |
e7886734c4 | ||
![]() |
083c37a7b2 | ||
![]() |
b24a10aa00 | ||
![]() |
e1ef14d12b | ||
![]() |
1a33de91e2 | ||
![]() |
6e15e2d72a | ||
![]() |
d58b715c52 | ||
![]() |
804ff8b5a5 | ||
![]() |
6e89d2f46a | ||
![]() |
e99d69b7d9 | ||
![]() |
f25416c3f5 | ||
![]() |
a7bb6a2781 | ||
![]() |
41f14e0e89 | ||
![]() |
01bd10f485 | ||
![]() |
476eacd5ca | ||
![]() |
ca2fb74f41 | ||
![]() |
8a2baf5b6e | ||
![]() |
d44fc3aa1b | ||
![]() |
7d78c42dfc | ||
![]() |
a361180745 | ||
![]() |
310dc10c4d | ||
![]() |
96e02c4c2e | ||
![]() |
afb3b9f029 | ||
![]() |
d5e647a191 | ||
![]() |
a1d37617a8 | ||
![]() |
2541f85942 | ||
![]() |
07fd23dc5e | ||
![]() |
946311b2a3 | ||
![]() |
4868032215 | ||
![]() |
fb0cf64536 | ||
![]() |
b37afcdba1 | ||
![]() |
f644bee831 | ||
![]() |
6fcc7e3e23 | ||
![]() |
95602eb85d | ||
![]() |
9f3afdf928 | ||
![]() |
627a2412d2 | ||
![]() |
acffd1e792 | ||
![]() |
62ca4ba624 | ||
![]() |
6ea8f35343 | ||
![]() |
1bd8c67041 | ||
![]() |
7425b382d6 | ||
![]() |
5f61b57d63 | ||
![]() |
9db73767d9 | ||
![]() |
c562245c16 | ||
![]() |
9525216d78 | ||
![]() |
28a71a29e6 | ||
![]() |
7b06d34ba4 | ||
![]() |
656d24e477 | ||
![]() |
df0f03d831 | ||
![]() |
1db6d15677 | ||
![]() |
08a0479c9e | ||
![]() |
6682b7dfa5 | ||
![]() |
aad5d98b43 | ||
![]() |
a8a4a85dac | ||
![]() |
ad71b969b2 | ||
![]() |
8bcb10391e | ||
![]() |
8e7d74bc3b | ||
![]() |
629b6faa22 | ||
![]() |
ef1e27966d |
@@ -69,7 +69,6 @@ GIO_MIN_VERSION=2.35.0
|
|||||||
LIBECAL_MIN_VERSION=3.5.3
|
LIBECAL_MIN_VERSION=3.5.3
|
||||||
LIBEDATASERVER_MIN_VERSION=3.5.3
|
LIBEDATASERVER_MIN_VERSION=3.5.3
|
||||||
TELEPATHY_GLIB_MIN_VERSION=0.17.5
|
TELEPATHY_GLIB_MIN_VERSION=0.17.5
|
||||||
TELEPATHY_LOGGER_MIN_VERSION=0.2.4
|
|
||||||
POLKIT_MIN_VERSION=0.100
|
POLKIT_MIN_VERSION=0.100
|
||||||
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
GCR_MIN_VERSION=3.3.90
|
GCR_MIN_VERSION=3.3.90
|
||||||
@@ -94,7 +93,6 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
|
|||||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||||
libcanberra libcanberra-gtk3
|
libcanberra libcanberra-gtk3
|
||||||
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
|
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
|
||||||
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
|
|
||||||
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
|
||||||
libnm-glib libnm-util >= $NETWORKMANAGER_MIN_VERSION
|
libnm-glib libnm-util >= $NETWORKMANAGER_MIN_VERSION
|
||||||
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
|
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
|
||||||
|
@@ -644,6 +644,9 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
#overview {
|
#overview {
|
||||||
spacing: 24px;
|
spacing: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overview-controls {
|
||||||
padding-bottom: 32px;
|
padding-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -731,13 +734,36 @@ StScrollBar StButton#vhandle:active {
|
|||||||
-vertical-spacing: 32px;
|
-vertical-spacing: 32px;
|
||||||
padding-left: 32px;
|
padding-left: 32px;
|
||||||
padding-right: 32px;
|
padding-right: 32px;
|
||||||
padding-bottom: 32px;
|
padding-bottom: 48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-picker.external-monitor {
|
.window-picker.external-monitor {
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.messages-indicator {
|
||||||
|
color: #999999;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.messages-indicator-contents {
|
||||||
|
spacing: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.messages-indicator-contents:hover {
|
||||||
|
color: white;
|
||||||
|
text-shadow: black 0px 2px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.messages-indicator-highlight {
|
||||||
|
background-gradient-start: transparent;
|
||||||
|
background-gradient-end: #999999;
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
|
||||||
|
height: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Dash */
|
/* Dash */
|
||||||
|
|
||||||
#dash {
|
#dash {
|
||||||
@@ -781,7 +807,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
/* Search Results */
|
/* Search Results */
|
||||||
|
|
||||||
#searchResults {
|
#searchResults {
|
||||||
padding: 20px 10px 10px 10px;
|
padding: 20px 10px 0px 10px;
|
||||||
spacing: 18px;
|
spacing: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -850,15 +876,18 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
.app-view-controls {
|
.app-view-controls {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
|
padding-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-view-control {
|
.app-view-control {
|
||||||
padding: 4px 16px;
|
padding: 4px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
StScrollView.frequent-apps StScrollBar {
|
.search-display > StBoxLayout,
|
||||||
min-width: 0px;
|
.all-apps > StBoxLayout,
|
||||||
width: 0px;
|
.frequent-apps > StBoxLayout {
|
||||||
|
/* horizontal padding to make sure the scrollbar doesn't overlap content */
|
||||||
|
padding: 0px 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-folder-icon {
|
.app-folder-icon {
|
||||||
@@ -881,8 +910,6 @@ StScrollView.frequent-apps StScrollBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.list-search-result-description {
|
.list-search-result-description {
|
||||||
font-weight: bold;
|
|
||||||
font-size: 12pt;
|
|
||||||
color: #eeeeec;
|
color: #eeeeec;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -936,6 +963,10 @@ StScrollView.frequent-apps StScrollBar {
|
|||||||
color:white;
|
color:white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.list-search-result:hover .list-search-result-description {
|
||||||
|
text-shadow: rgba(0,0,0,0.8) 0px 1px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.show-apps {
|
.show-apps {
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
}
|
}
|
||||||
@@ -1577,12 +1608,26 @@ StScrollView.frequent-apps StScrollBar {
|
|||||||
-shell-counter-overlap-y: 13px;
|
-shell-counter-overlap-y: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* OSD */
|
||||||
|
.osd-window {
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
spacing: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.osd-window .level {
|
||||||
|
height: 0.6em;
|
||||||
|
border-radius: 0.3em;
|
||||||
|
background-color: rgba(190,190,190,0.2);
|
||||||
|
}
|
||||||
|
|
||||||
/* App Switcher */
|
/* App Switcher */
|
||||||
.switcher-popup {
|
.switcher-popup {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
spacing: 16px;
|
spacing: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.osd-window,
|
||||||
.switcher-list {
|
.switcher-list {
|
||||||
background: rgba(0,0,0,0.8);
|
background: rgba(0,0,0,0.8);
|
||||||
border: 1px solid rgba(128,128,128,0.40);
|
border: 1px solid rgba(128,128,128,0.40);
|
||||||
@@ -2480,7 +2525,7 @@ StScrollView.frequent-apps StScrollBar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.input-source-switcher-symbol {
|
.input-source-switcher-symbol {
|
||||||
font-size: 42pt;
|
font-size: 34pt;
|
||||||
width: 96px;
|
width: 96px;
|
||||||
height: 96px;
|
height: 96px;
|
||||||
}
|
}
|
||||||
|
@@ -69,6 +69,7 @@ nobase_dist_js_DATA = \
|
|||||||
ui/shellEntry.js \
|
ui/shellEntry.js \
|
||||||
ui/shellMountOperation.js \
|
ui/shellMountOperation.js \
|
||||||
ui/notificationDaemon.js \
|
ui/notificationDaemon.js \
|
||||||
|
ui/osdWindow.js \
|
||||||
ui/overview.js \
|
ui/overview.js \
|
||||||
ui/overviewControls.js \
|
ui/overviewControls.js \
|
||||||
ui/panel.js \
|
ui/panel.js \
|
||||||
|
@@ -45,6 +45,7 @@ const Application = new Lang.Class({
|
|||||||
this._extensionPrefsModules = {};
|
this._extensionPrefsModules = {};
|
||||||
|
|
||||||
this._extensionIters = {};
|
this._extensionIters = {};
|
||||||
|
this._startupUuid = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_buildModel: function() {
|
_buildModel: function() {
|
||||||
@@ -203,6 +204,7 @@ const Application = new Lang.Class({
|
|||||||
_scanExtensions: function() {
|
_scanExtensions: function() {
|
||||||
let finder = new ExtensionUtils.ExtensionFinder();
|
let finder = new ExtensionUtils.ExtensionFinder();
|
||||||
finder.connect('extension-found', Lang.bind(this, this._extensionFound));
|
finder.connect('extension-found', Lang.bind(this, this._extensionFound));
|
||||||
|
finder.connect('extensions-loaded', Lang.bind(this, this._extensionsLoaded));
|
||||||
finder.scanExtensions();
|
finder.scanExtensions();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -212,6 +214,11 @@ const Application = new Lang.Class({
|
|||||||
this._extensionIters[extension.uuid] = iter;
|
this._extensionIters[extension.uuid] = iter;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_extensionsLoaded: function() {
|
||||||
|
if (this._startupUuid && this._extensionAvailable(this._startupUuid))
|
||||||
|
this._selectExtension(this._startupUuid);
|
||||||
|
this._startupUuid = null;
|
||||||
|
},
|
||||||
|
|
||||||
_onActivate: function() {
|
_onActivate: function() {
|
||||||
this._window.present();
|
this._window.present();
|
||||||
@@ -232,10 +239,10 @@ const Application = new Lang.Class({
|
|||||||
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
// Strip off "extension:///" prefix which fakes a URI, if it exists
|
||||||
uuid = stripPrefix(uuid, "extension:///");
|
uuid = stripPrefix(uuid, "extension:///");
|
||||||
|
|
||||||
if (!this._extensionAvailable(uuid))
|
if (this._extensionAvailable(uuid))
|
||||||
return 1;
|
|
||||||
|
|
||||||
this._selectExtension(uuid);
|
this._selectExtension(uuid);
|
||||||
|
else
|
||||||
|
this._startupUuid = uuid;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -753,7 +753,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
time: _FADE_ANIMATION_TIME,
|
time: _FADE_ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad' });
|
transition: 'easeOutQuad' });
|
||||||
|
|
||||||
if (!this._user || (this._user.is_logged_in() && this._verifyingUser))
|
if ((this._user && !this._user.is_logged_in()) || this._verifyingUser)
|
||||||
this._sessionList.actor.show();
|
this._sessionList.actor.show();
|
||||||
|
|
||||||
this._promptEntry.grab_key_focus();
|
this._promptEntry.grab_key_focus();
|
||||||
|
@@ -174,10 +174,15 @@ const ExtensionFinder = new Lang.Class({
|
|||||||
this.emit('extension-found', extension);
|
this.emit('extension-found', extension);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_extensionsLoaded: function() {
|
||||||
|
this.emit('extensions-loaded');
|
||||||
|
},
|
||||||
|
|
||||||
scanExtensions: function() {
|
scanExtensions: function() {
|
||||||
let perUserDir = Gio.File.new_for_path(global.userdatadir);
|
let perUserDir = Gio.File.new_for_path(global.userdatadir);
|
||||||
FileUtils.collectFromDatadirsAsync('extensions',
|
FileUtils.collectFromDatadirsAsync('extensions',
|
||||||
{ processFile: Lang.bind(this, this._loadExtension),
|
{ processFile: Lang.bind(this, this._loadExtension),
|
||||||
|
loadedCallback: Lang.bind(this, this._extensionsLoaded),
|
||||||
includeUserDir: true,
|
includeUserDir: true,
|
||||||
data: perUserDir });
|
data: perUserDir });
|
||||||
}
|
}
|
||||||
|
@@ -98,43 +98,13 @@ const AppSwitcherPopup = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_getAppLists: function() {
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
|
||||||
let appSys = Shell.AppSystem.get_default();
|
|
||||||
let allApps = appSys.get_running ();
|
|
||||||
|
|
||||||
let screen = global.screen;
|
|
||||||
let display = screen.get_display();
|
|
||||||
let windows = display.get_tab_list(Meta.TabList.NORMAL_ALL, screen,
|
|
||||||
screen.get_active_workspace());
|
|
||||||
|
|
||||||
// windows is only the windows on the current workspace. For
|
|
||||||
// each one, if it corresponds to an app we know, move that
|
|
||||||
// app from allApps to apps.
|
|
||||||
let apps = [];
|
|
||||||
for (let i = 0; i < windows.length && allApps.length != 0; i++) {
|
|
||||||
let app = tracker.get_window_app(windows[i]);
|
|
||||||
let index = allApps.indexOf(app);
|
|
||||||
if (index != -1) {
|
|
||||||
apps.push(app);
|
|
||||||
allApps.splice(index, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now @apps is a list of apps on the current workspace, in
|
|
||||||
// standard Alt+Tab order (MRU except for minimized windows),
|
|
||||||
// and allApps is a list of apps that only appear on other
|
|
||||||
// workspaces, sorted by user_time, which is good enough.
|
|
||||||
return [apps, allApps];
|
|
||||||
},
|
|
||||||
|
|
||||||
_createSwitcher: function() {
|
_createSwitcher: function() {
|
||||||
let [localApps, otherApps] = this._getAppLists();
|
let apps = Shell.AppSystem.get_default().get_running ();
|
||||||
|
|
||||||
if (localApps.length == 0 && otherApps.length == 0)
|
if (apps.length == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
this._switcherList = new AppSwitcher(localApps, otherApps, this);
|
this._switcherList = new AppSwitcher(apps, this);
|
||||||
this._items = this._switcherList.icons;
|
this._items = this._switcherList.icons;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -265,12 +235,8 @@ const AppSwitcherPopup = new Lang.Class({
|
|||||||
this.parent();
|
this.parent();
|
||||||
|
|
||||||
let appIcon = this._items[this._selectedIndex];
|
let appIcon = this._items[this._selectedIndex];
|
||||||
let window;
|
let window = this._currentWindow > 0 ? this._currentWindow : 0;
|
||||||
if (this._currentWindow >= 0)
|
appIcon.app.activate_window(appIcon.cachedWindows[window], timestamp);
|
||||||
window = appIcon.cachedWindows[this._currentWindow];
|
|
||||||
else
|
|
||||||
window = null;
|
|
||||||
appIcon.app.activate_window(window, timestamp);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy : function() {
|
_onDestroy : function() {
|
||||||
@@ -461,34 +427,26 @@ const AppSwitcher = new Lang.Class({
|
|||||||
Name: 'AppSwitcher',
|
Name: 'AppSwitcher',
|
||||||
Extends: SwitcherPopup.SwitcherList,
|
Extends: SwitcherPopup.SwitcherList,
|
||||||
|
|
||||||
_init : function(localApps, otherApps, altTabPopup) {
|
_init : function(apps, altTabPopup) {
|
||||||
this.parent(true);
|
this.parent(true);
|
||||||
|
|
||||||
// Construct the AppIcons, add to the popup
|
|
||||||
let activeWorkspace = global.screen.get_active_workspace();
|
|
||||||
let workspaceIcons = [];
|
|
||||||
let otherIcons = [];
|
|
||||||
for (let i = 0; i < localApps.length; i++) {
|
|
||||||
let appIcon = new AppIcon(localApps[i]);
|
|
||||||
// Cache the window list now; we don't handle dynamic changes here,
|
|
||||||
// and we don't want to be continually retrieving it
|
|
||||||
appIcon.cachedWindows = appIcon.app.get_windows();
|
|
||||||
workspaceIcons.push(appIcon);
|
|
||||||
}
|
|
||||||
for (let i = 0; i < otherApps.length; i++) {
|
|
||||||
let appIcon = new AppIcon(otherApps[i]);
|
|
||||||
appIcon.cachedWindows = appIcon.app.get_windows();
|
|
||||||
otherIcons.push(appIcon);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.icons = [];
|
this.icons = [];
|
||||||
this._arrows = [];
|
this._arrows = [];
|
||||||
for (let i = 0; i < workspaceIcons.length; i++)
|
|
||||||
this._addIcon(workspaceIcons[i]);
|
let windowTracker = Shell.WindowTracker.get_default();
|
||||||
if (workspaceIcons.length > 0 && otherIcons.length > 0)
|
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL,
|
||||||
this.addSeparator();
|
global.screen, null);
|
||||||
for (let i = 0; i < otherIcons.length; i++)
|
|
||||||
this._addIcon(otherIcons[i]);
|
// Construct the AppIcons, add to the popup
|
||||||
|
for (let i = 0; i < apps.length; i++) {
|
||||||
|
let appIcon = new AppIcon(apps[i]);
|
||||||
|
// Cache the window list now; we don't handle dynamic changes here,
|
||||||
|
// and we don't want to be continually retrieving it
|
||||||
|
appIcon.cachedWindows = allWindows.filter(function(w) {
|
||||||
|
return windowTracker.get_window_app (w) == appIcon.app;
|
||||||
|
});
|
||||||
|
this._addIcon(appIcon);
|
||||||
|
}
|
||||||
|
|
||||||
this._curApp = -1;
|
this._curApp = -1;
|
||||||
this._iconSize = 0;
|
this._iconSize = 0;
|
||||||
@@ -514,8 +472,6 @@ const AppSwitcher = new Lang.Class({
|
|||||||
let [iconMinHeight, iconNaturalHeight] = this.icons[j].label.get_preferred_height(-1);
|
let [iconMinHeight, iconNaturalHeight] = this.icons[j].label.get_preferred_height(-1);
|
||||||
let iconSpacing = iconNaturalHeight + iconPadding + iconBorder;
|
let iconSpacing = iconNaturalHeight + iconPadding + iconBorder;
|
||||||
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
||||||
if (this._separator)
|
|
||||||
totalSpacing += this._separator.width + this._list.spacing;
|
|
||||||
|
|
||||||
// We just assume the whole screen here due to weirdness happing with the passed width
|
// We just assume the whole screen here due to weirdness happing with the passed width
|
||||||
let primary = Main.layoutManager.primaryMonitor;
|
let primary = Main.layoutManager.primaryMonitor;
|
||||||
@@ -638,24 +594,12 @@ const ThumbnailList = new Lang.Class({
|
|||||||
_init : function(windows) {
|
_init : function(windows) {
|
||||||
this.parent(false);
|
this.parent(false);
|
||||||
|
|
||||||
let activeWorkspace = global.screen.get_active_workspace();
|
|
||||||
|
|
||||||
// We fake the value of 'separatorAdded' when the app has no window
|
|
||||||
// on the current workspace, to avoid displaying a useless separator in
|
|
||||||
// that case.
|
|
||||||
let separatorAdded = windows.length == 0 || windows[0].get_workspace() != activeWorkspace;
|
|
||||||
|
|
||||||
this._labels = new Array();
|
this._labels = new Array();
|
||||||
this._thumbnailBins = new Array();
|
this._thumbnailBins = new Array();
|
||||||
this._clones = new Array();
|
this._clones = new Array();
|
||||||
this._windows = windows;
|
this._windows = windows;
|
||||||
|
|
||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
if (!separatorAdded && windows[i].get_workspace() != activeWorkspace) {
|
|
||||||
this.addSeparator();
|
|
||||||
separatorAdded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let box = new St.BoxLayout({ style_class: 'thumbnail-box',
|
let box = new St.BoxLayout({ style_class: 'thumbnail-box',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
|
|
||||||
|
@@ -175,7 +175,9 @@ const AllView = new Lang.Class({
|
|||||||
y_fill: false,
|
y_fill: false,
|
||||||
y_align: St.Align.START,
|
y_align: St.Align.START,
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
style_class: 'vfade' });
|
y_expand: true,
|
||||||
|
overlay_scrollbars: true,
|
||||||
|
style_class: 'all-apps vfade' });
|
||||||
this.actor.add_actor(box);
|
this.actor.add_actor(box);
|
||||||
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||||
let action = new Clutter.PanAction({ interpolate: true });
|
let action = new Clutter.PanAction({ interpolate: true });
|
||||||
@@ -297,22 +299,11 @@ const FrequentView = new Lang.Class({
|
|||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._grid = new IconGrid.IconGrid({ xAlign: St.Align.MIDDLE,
|
this._grid = new IconGrid.IconGrid({ xAlign: St.Align.MIDDLE,
|
||||||
|
fillParent: true,
|
||||||
columnLimit: MAX_COLUMNS });
|
columnLimit: MAX_COLUMNS });
|
||||||
let box = new St.BoxLayout({ vertical: true });
|
this.actor = new St.Widget({ style_class: 'frequent-apps',
|
||||||
box.add(this._grid.actor);
|
x_expand: true, y_expand: true });
|
||||||
|
this.actor.add_actor(this._grid.actor);
|
||||||
// HACK: IconGrid currently lacks API to only display items that match
|
|
||||||
// the allocation, so rather than clipping away eventual overflow, we
|
|
||||||
// use an unscrollable ScrollView with hidden scrollbars to nicely
|
|
||||||
// fade out cut off items
|
|
||||||
this.actor = new St.ScrollView({ x_fill: true,
|
|
||||||
y_fill: false,
|
|
||||||
y_align: St.Align.START,
|
|
||||||
x_expand: true,
|
|
||||||
reactive: false,
|
|
||||||
style_class: 'frequent-apps vfade' });
|
|
||||||
this.actor.add_actor(box);
|
|
||||||
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
|
||||||
|
|
||||||
this._usage = Shell.AppUsage.get_default();
|
this._usage = Shell.AppUsage.get_default();
|
||||||
},
|
},
|
||||||
@@ -373,10 +364,7 @@ const AppDisplay = new Lang.Class({
|
|||||||
|
|
||||||
this._viewStack = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
this._viewStack = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
||||||
x_expand: true, y_expand: true });
|
x_expand: true, y_expand: true });
|
||||||
let bin = new St.Bin({ child: this._viewStack,
|
this.actor.add(this._viewStack, { expand: true });
|
||||||
clip_to_allocation: true,
|
|
||||||
x_fill: true, y_fill: true });
|
|
||||||
this.actor.add(bin, { expand: true });
|
|
||||||
|
|
||||||
let layout = new Clutter.BoxLayout({ homogeneous: true });
|
let layout = new Clutter.BoxLayout({ homogeneous: true });
|
||||||
this._controls = new St.Widget({ style_class: 'app-view-controls',
|
this._controls = new St.Widget({ style_class: 'app-view-controls',
|
||||||
@@ -579,10 +567,6 @@ const FolderIcon = new Lang.Class({
|
|||||||
|
|
||||||
this._popup = new AppFolderPopup(this, side);
|
this._popup = new AppFolderPopup(this, side);
|
||||||
this._parentView.addFolderPopup(this._popup);
|
this._parentView.addFolderPopup(this._popup);
|
||||||
let constraint = new Clutter.AlignConstraint({ source: this._parentView.actor,
|
|
||||||
align_axis: Clutter.AlignAxis.X_AXIS,
|
|
||||||
factor: 0.5 });
|
|
||||||
this._popup.actor.add_constraint(constraint);
|
|
||||||
|
|
||||||
// Position the popup above or below the source icon
|
// Position the popup above or below the source icon
|
||||||
if (side == St.Side.BOTTOM) {
|
if (side == St.Side.BOTTOM) {
|
||||||
@@ -612,7 +596,17 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
this._isOpen = false;
|
this._isOpen = false;
|
||||||
|
|
||||||
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
||||||
visible: false });
|
visible: false,
|
||||||
|
// We don't want to expand really, but look
|
||||||
|
// at the layout manager of our parent...
|
||||||
|
//
|
||||||
|
// DOUBLE HACK: if you set one, you automatically
|
||||||
|
// get the effect for the other direction too, so
|
||||||
|
// we need to set the y_align
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
|
x_align: Clutter.ActorAlign.CENTER,
|
||||||
|
y_align: Clutter.ActorAlign.START });
|
||||||
this._boxPointer = new BoxPointer.BoxPointer(this._arrowSide,
|
this._boxPointer = new BoxPointer.BoxPointer(this._arrowSide,
|
||||||
{ style_class: 'app-folder-popup-bin',
|
{ style_class: 'app-folder-popup-bin',
|
||||||
x_fill: true,
|
x_fill: true,
|
||||||
|
@@ -14,7 +14,6 @@ const Params = imports.misc.params;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
|
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
|
||||||
const DRAW_BACKGROUND_KEY = 'draw-background';
|
|
||||||
const PRIMARY_COLOR_KEY = 'primary-color';
|
const PRIMARY_COLOR_KEY = 'primary-color';
|
||||||
const SECONDARY_COLOR_KEY = 'secondary-color';
|
const SECONDARY_COLOR_KEY = 'secondary-color';
|
||||||
const COLOR_SHADING_TYPE_KEY = 'color-shading-type';
|
const COLOR_SHADING_TYPE_KEY = 'color-shading-type';
|
||||||
@@ -490,11 +489,6 @@ const Background = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_load: function () {
|
_load: function () {
|
||||||
if (!this._settings.get_boolean(DRAW_BACKGROUND_KEY)) {
|
|
||||||
this._setLoaded();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._cache = getBackgroundCache();
|
this._cache = getBackgroundCache();
|
||||||
|
|
||||||
this._loadPattern(this._cache);
|
this._loadPattern(this._cache);
|
||||||
@@ -565,22 +559,24 @@ const Background = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Background.prototype);
|
Signals.addSignalMethods(Background.prototype);
|
||||||
|
|
||||||
const StillFrame = new Lang.Class({
|
const SystemBackground = new Lang.Class({
|
||||||
Name: 'StillFrame',
|
Name: 'SystemBackground',
|
||||||
|
|
||||||
_init: function(monitorIndex) {
|
_init: function() {
|
||||||
|
this._cache = getBackgroundCache();
|
||||||
this.actor = new Meta.BackgroundActor();
|
this.actor = new Meta.BackgroundActor();
|
||||||
this.actor._delegate = this;
|
|
||||||
|
|
||||||
let content = new Meta.Background({ meta_screen: global.screen,
|
|
||||||
monitor: monitorIndex,
|
|
||||||
effects: Meta.BackgroundEffects.NONE });
|
|
||||||
content.load_still_frame();
|
|
||||||
|
|
||||||
|
this._cache.getImageContent({ style: GDesktopEnums.BackgroundStyle.WALLPAPER,
|
||||||
|
filename: global.datadir + '/theme/noise-texture.png',
|
||||||
|
effects: Meta.BackgroundEffects.NONE,
|
||||||
|
onFinished: Lang.bind(this, function(content) {
|
||||||
this.actor.content = content;
|
this.actor.content = content;
|
||||||
|
this.emit('loaded');
|
||||||
|
})
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(StillFrame.prototype);
|
Signals.addSignalMethods(SystemBackground.prototype);
|
||||||
|
|
||||||
const Animation = new Lang.Class({
|
const Animation = new Lang.Class({
|
||||||
Name: 'Animation',
|
Name: 'Animation',
|
||||||
@@ -641,12 +637,14 @@ const BackgroundManager = new Lang.Class({
|
|||||||
params = Params.parse(params, { container: null,
|
params = Params.parse(params, { container: null,
|
||||||
layoutManager: Main.layoutManager,
|
layoutManager: Main.layoutManager,
|
||||||
monitorIndex: null,
|
monitorIndex: null,
|
||||||
effects: Meta.BackgroundEffects.NONE });
|
effects: Meta.BackgroundEffects.NONE,
|
||||||
|
controlPosition: true });
|
||||||
|
|
||||||
this._container = params.container;
|
this._container = params.container;
|
||||||
this._layoutManager = params.layoutManager;
|
this._layoutManager = params.layoutManager;
|
||||||
this._effects = params.effects;
|
this._effects = params.effects;
|
||||||
this._monitorIndex = params.monitorIndex;
|
this._monitorIndex = params.monitorIndex;
|
||||||
|
this._controlPosition = params.controlPosition;
|
||||||
|
|
||||||
this.background = this._createBackground();
|
this.background = this._createBackground();
|
||||||
this._newBackground = null;
|
this._newBackground = null;
|
||||||
@@ -706,9 +704,12 @@ const BackgroundManager = new Lang.Class({
|
|||||||
this._container.add_child(background.actor);
|
this._container.add_child(background.actor);
|
||||||
|
|
||||||
let monitor = this._layoutManager.monitors[this._monitorIndex];
|
let monitor = this._layoutManager.monitors[this._monitorIndex];
|
||||||
background.actor.set_position(monitor.x, monitor.y);
|
|
||||||
background.actor.set_size(monitor.width, monitor.height);
|
background.actor.set_size(monitor.width, monitor.height);
|
||||||
|
if (this._controlPosition) {
|
||||||
|
background.actor.set_position(monitor.x, monitor.y);
|
||||||
background.actor.lower_bottom();
|
background.actor.lower_bottom();
|
||||||
|
}
|
||||||
|
|
||||||
let signalId = background.connect('changed', Lang.bind(this, function() {
|
let signalId = background.connect('changed', Lang.bind(this, function() {
|
||||||
background.disconnect(signalId);
|
background.disconnect(signalId);
|
||||||
|
@@ -640,6 +640,10 @@ const ChatSource = new Lang.Class({
|
|||||||
return this._pendingMessages.length;
|
return this._pendingMessages.length;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get indicatorCount() {
|
||||||
|
return this.count;
|
||||||
|
},
|
||||||
|
|
||||||
get unseenCount() {
|
get unseenCount() {
|
||||||
return this.count;
|
return this.count;
|
||||||
},
|
},
|
||||||
|
177
js/ui/dash.js
177
js/ui/dash.js
@@ -33,30 +33,26 @@ function getAppFromSource(source) {
|
|||||||
// when requesting a size
|
// when requesting a size
|
||||||
const DashItemContainer = new Lang.Class({
|
const DashItemContainer = new Lang.Class({
|
||||||
Name: 'DashItemContainer',
|
Name: 'DashItemContainer',
|
||||||
|
Extends: St.Widget,
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this.actor = new Shell.GenericContainer({ style_class: 'dash-item-container' });
|
this.parent({ style_class: 'dash-item-container' });
|
||||||
this.actor.connect('get-preferred-width',
|
|
||||||
Lang.bind(this, this._getPreferredWidth));
|
|
||||||
this.actor.connect('get-preferred-height',
|
|
||||||
Lang.bind(this, this._getPreferredHeight));
|
|
||||||
this.actor.connect('allocate',
|
|
||||||
Lang.bind(this, this._allocate));
|
|
||||||
this.actor._delegate = this;
|
|
||||||
|
|
||||||
this._labelText = "";
|
this._labelText = "";
|
||||||
this.label = new St.Label({ style_class: 'dash-label'});
|
this.label = new St.Label({ style_class: 'dash-label'});
|
||||||
this.label.hide();
|
this.label.hide();
|
||||||
Main.layoutManager.addChrome(this.label);
|
Main.layoutManager.addChrome(this.label);
|
||||||
this.actor.label_actor = this.label;
|
this.label_actor = this.label;
|
||||||
|
|
||||||
this.child = null;
|
this.child = null;
|
||||||
this._childScale = 1;
|
this._childScale = 0;
|
||||||
this._childOpacity = 255;
|
this._childOpacity = 0;
|
||||||
this.animatingOut = false;
|
this.animatingOut = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_allocate: function(actor, box, flags) {
|
vfunc_allocate: function(box, flags) {
|
||||||
|
this.set_allocation(box, flags);
|
||||||
|
|
||||||
if (this.child == null)
|
if (this.child == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -78,28 +74,28 @@ const DashItemContainer = new Lang.Class({
|
|||||||
this.child.allocate(childBox, flags);
|
this.child.allocate(childBox, flags);
|
||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
vfunc_get_preferred_height: function(forWidth) {
|
||||||
alloc.min_size = 0;
|
let themeNode = this.get_theme_node();
|
||||||
alloc.natural_size = 0;
|
|
||||||
|
|
||||||
if (this.child == null)
|
if (this.child == null)
|
||||||
return;
|
return [0, 0];
|
||||||
|
|
||||||
|
forWidth = themeNode.adjust_for_width(forWidth);
|
||||||
let [minHeight, natHeight] = this.child.get_preferred_height(forWidth);
|
let [minHeight, natHeight] = this.child.get_preferred_height(forWidth);
|
||||||
alloc.min_size += minHeight * this.child.scale_y;
|
return themeNode.adjust_preferred_height(minHeight * this.child.scale_y,
|
||||||
alloc.natural_size += natHeight * this.child.scale_y;
|
natHeight * this.child.scale_y);
|
||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
vfunc_get_preferred_width: function(forHeight) {
|
||||||
alloc.min_size = 0;
|
let themeNode = this.get_theme_node();
|
||||||
alloc.natural_size = 0;
|
|
||||||
|
|
||||||
if (this.child == null)
|
if (this.child == null)
|
||||||
return;
|
return [0, 0];
|
||||||
|
|
||||||
|
forHeight = themeNode.adjust_for_height(forHeight);
|
||||||
let [minWidth, natWidth] = this.child.get_preferred_width(forHeight);
|
let [minWidth, natWidth] = this.child.get_preferred_width(forHeight);
|
||||||
alloc.min_size = minWidth * this.child.scale_y;
|
return themeNode.adjust_preferred_width(minWidth * this.child.scale_y,
|
||||||
alloc.natural_size = natWidth * this.child.scale_y;
|
natWidth * this.child.scale_y);
|
||||||
},
|
},
|
||||||
|
|
||||||
showLabel: function() {
|
showLabel: function() {
|
||||||
@@ -110,9 +106,9 @@ const DashItemContainer = new Lang.Class({
|
|||||||
this.label.opacity = 0;
|
this.label.opacity = 0;
|
||||||
this.label.show();
|
this.label.show();
|
||||||
|
|
||||||
let [stageX, stageY] = this.actor.get_transformed_position();
|
let [stageX, stageY] = this.get_transformed_position();
|
||||||
|
|
||||||
let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1;
|
let itemHeight = this.allocation.y2 - this.allocation.y1;
|
||||||
|
|
||||||
let labelHeight = this.label.get_height();
|
let labelHeight = this.label.get_height();
|
||||||
let yOffset = Math.floor((itemHeight - labelHeight) / 2)
|
let yOffset = Math.floor((itemHeight - labelHeight) / 2)
|
||||||
@@ -126,7 +122,7 @@ const DashItemContainer = new Lang.Class({
|
|||||||
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
|
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
|
||||||
x = stageX - this.label.get_width() - xOffset;
|
x = stageX - this.label.get_width() - xOffset;
|
||||||
else
|
else
|
||||||
x = stageX + this.actor.get_width() + xOffset;
|
x = stageX + this.get_width() + xOffset;
|
||||||
|
|
||||||
this.label.set_position(x, y);
|
this.label.set_position(x, y);
|
||||||
Tweener.addTween(this.label,
|
Tweener.addTween(this.label,
|
||||||
@@ -156,22 +152,25 @@ const DashItemContainer = new Lang.Class({
|
|||||||
if (this.child == actor)
|
if (this.child == actor)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.actor.destroy_all_children();
|
this.destroy_all_children();
|
||||||
|
|
||||||
this.child = actor;
|
this.child = actor;
|
||||||
this.actor.add_actor(this.child);
|
this.add_actor(this.child);
|
||||||
|
|
||||||
|
this.child.set_scale_with_gravity(this._childScale, this._childScale,
|
||||||
|
Clutter.Gravity.CENTER);
|
||||||
|
this.child.set_opacity(this._childOpacity);
|
||||||
},
|
},
|
||||||
|
|
||||||
animateIn: function() {
|
show: function(animate) {
|
||||||
if (this.child == null)
|
if (this.child == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.childScale = 0;
|
let time = animate ? DASH_ANIMATION_TIME : 0;
|
||||||
this.childOpacity = 0;
|
|
||||||
Tweener.addTween(this,
|
Tweener.addTween(this,
|
||||||
{ childScale: 1.0,
|
{ childScale: 1.0,
|
||||||
childOpacity: 255,
|
childOpacity: 255,
|
||||||
time: DASH_ANIMATION_TIME,
|
time: time,
|
||||||
transition: 'easeOutQuad'
|
transition: 'easeOutQuad'
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -180,7 +179,7 @@ const DashItemContainer = new Lang.Class({
|
|||||||
if (this.label)
|
if (this.label)
|
||||||
this.label.destroy();
|
this.label.destroy();
|
||||||
|
|
||||||
this.actor.destroy();
|
this.parent();
|
||||||
},
|
},
|
||||||
|
|
||||||
animateOutAndDestroy: function() {
|
animateOutAndDestroy: function() {
|
||||||
@@ -188,19 +187,18 @@ const DashItemContainer = new Lang.Class({
|
|||||||
this.label.destroy();
|
this.label.destroy();
|
||||||
|
|
||||||
if (this.child == null) {
|
if (this.child == null) {
|
||||||
this.actor.destroy();
|
this.destroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.animatingOut = true;
|
this.animatingOut = true;
|
||||||
this.childScale = 1.0;
|
|
||||||
Tweener.addTween(this,
|
Tweener.addTween(this,
|
||||||
{ childScale: 0.0,
|
{ childScale: 0.0,
|
||||||
childOpacity: 0,
|
childOpacity: 0,
|
||||||
time: DASH_ANIMATION_TIME,
|
time: DASH_ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: Lang.bind(this, function() {
|
onComplete: Lang.bind(this, function() {
|
||||||
this.actor.destroy();
|
this.destroy();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -213,7 +211,7 @@ const DashItemContainer = new Lang.Class({
|
|||||||
|
|
||||||
this.child.set_scale_with_gravity(scale, scale,
|
this.child.set_scale_with_gravity(scale, scale,
|
||||||
Clutter.Gravity.CENTER);
|
Clutter.Gravity.CENTER);
|
||||||
this.actor.queue_relayout();
|
this.queue_relayout();
|
||||||
},
|
},
|
||||||
|
|
||||||
get childScale() {
|
get childScale() {
|
||||||
@@ -227,7 +225,7 @@ const DashItemContainer = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this.child.set_opacity(opacity);
|
this.child.set_opacity(opacity);
|
||||||
this.actor.queue_redraw();
|
this.queue_redraw();
|
||||||
},
|
},
|
||||||
|
|
||||||
get childOpacity() {
|
get childOpacity() {
|
||||||
@@ -358,6 +356,23 @@ const DashActor = new Lang.Class({
|
|||||||
childBox.y1 = contentBox.y2 - showAppsNatHeight;
|
childBox.y1 = contentBox.y2 - showAppsNatHeight;
|
||||||
childBox.y2 = contentBox.y2;
|
childBox.y2 = contentBox.y2;
|
||||||
showAppsButton.allocate(childBox, flags);
|
showAppsButton.allocate(childBox, flags);
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_height: function(forWidth) {
|
||||||
|
// We want to request the natural height of all our children
|
||||||
|
// as our natural height, so we chain up to StWidget (which
|
||||||
|
// then calls BoxLayout), but we only request the showApps
|
||||||
|
// button as the minimum size
|
||||||
|
|
||||||
|
let [, natHeight] = this.parent(forWidth);
|
||||||
|
|
||||||
|
let themeNode = this.get_theme_node();
|
||||||
|
let adjustedForWidth = themeNode.adjust_for_width(forWidth);
|
||||||
|
let [, showAppsButton] = this.get_children();
|
||||||
|
let [minHeight, ] = showAppsButton.get_preferred_height(adjustedForWidth);
|
||||||
|
[minHeight, ] = themeNode.adjust_preferred_height(minHeight, natHeight);
|
||||||
|
|
||||||
|
return [minHeight, natHeight];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -383,12 +398,14 @@ const Dash = new Lang.Class({
|
|||||||
this._container.add_actor(this._box);
|
this._container.add_actor(this._box);
|
||||||
|
|
||||||
this._showAppsIcon = new ShowAppsIcon();
|
this._showAppsIcon = new ShowAppsIcon();
|
||||||
|
this._showAppsIcon.childScale = 1;
|
||||||
|
this._showAppsIcon.childOpacity = 255;
|
||||||
this._showAppsIcon.icon.setIconSize(this.iconSize);
|
this._showAppsIcon.icon.setIconSize(this.iconSize);
|
||||||
this._hookUpLabel(this._showAppsIcon);
|
this._hookUpLabel(this._showAppsIcon);
|
||||||
|
|
||||||
this.showAppsButton = this._showAppsIcon.toggleButton;
|
this.showAppsButton = this._showAppsIcon.toggleButton;
|
||||||
|
|
||||||
this._container.add_actor(this._showAppsIcon.actor);
|
this._container.add_actor(this._showAppsIcon);
|
||||||
|
|
||||||
this.actor = new St.Bin({ child: this._container });
|
this.actor = new St.Bin({ child: this._container });
|
||||||
this.actor.connect('notify::height', Lang.bind(this,
|
this.actor.connect('notify::height', Lang.bind(this,
|
||||||
@@ -450,7 +467,7 @@ const Dash = new Lang.Class({
|
|||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|
||||||
let showAppsHovered =
|
let showAppsHovered =
|
||||||
this._showAppsIcon.actor.contains(dragEvent.targetActor);
|
this._showAppsIcon.contains(dragEvent.targetActor);
|
||||||
|
|
||||||
if (!this._box.contains(dragEvent.targetActor) || showAppsHovered)
|
if (!this._box.contains(dragEvent.targetActor) || showAppsHovered)
|
||||||
this._clearDragPlaceholder();
|
this._clearDragPlaceholder();
|
||||||
@@ -565,13 +582,13 @@ const Dash = new Lang.Class({
|
|||||||
// animating out (which means they will be destroyed at the end of
|
// animating out (which means they will be destroyed at the end of
|
||||||
// the animation)
|
// the animation)
|
||||||
let iconChildren = this._box.get_children().filter(function(actor) {
|
let iconChildren = this._box.get_children().filter(function(actor) {
|
||||||
return actor._delegate.child &&
|
return actor.child &&
|
||||||
actor._delegate.child._delegate &&
|
actor.child._delegate &&
|
||||||
actor._delegate.child._delegate.icon &&
|
actor.child._delegate.icon &&
|
||||||
!actor._delegate.animatingOut;
|
!actor.animatingOut;
|
||||||
});
|
});
|
||||||
|
|
||||||
iconChildren.push(this._showAppsIcon.actor);
|
iconChildren.push(this._showAppsIcon);
|
||||||
|
|
||||||
if (this._maxHeight == -1)
|
if (this._maxHeight == -1)
|
||||||
return;
|
return;
|
||||||
@@ -584,23 +601,18 @@ const Dash = new Lang.Class({
|
|||||||
let availHeight = maxContent.y2 - maxContent.y1;
|
let availHeight = maxContent.y2 - maxContent.y1;
|
||||||
let spacing = themeNode.get_length('spacing');
|
let spacing = themeNode.get_length('spacing');
|
||||||
|
|
||||||
|
let firstButton = iconChildren[0].child;
|
||||||
let firstIcon = iconChildren[0]._delegate.child._delegate.icon;
|
let firstIcon = firstButton._delegate.icon;
|
||||||
|
|
||||||
let minHeight, natHeight;
|
let minHeight, natHeight;
|
||||||
|
|
||||||
// Enforce the current icon size during the size request if
|
// Enforce the current icon size during the size request
|
||||||
// the icon is animating
|
|
||||||
if (firstIcon._animating) {
|
|
||||||
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
|
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
|
||||||
|
|
||||||
firstIcon.icon.set_size(this.iconSize, this.iconSize);
|
firstIcon.icon.set_size(this.iconSize, this.iconSize);
|
||||||
[minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
|
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
|
||||||
|
|
||||||
firstIcon.icon.set_size(currentWidth, currentHeight);
|
firstIcon.icon.set_size(currentWidth, currentHeight);
|
||||||
} else {
|
|
||||||
[minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subtract icon padding and box spacing from the available height
|
// Subtract icon padding and box spacing from the available height
|
||||||
availHeight -= iconChildren.length * (natHeight - this.iconSize) +
|
availHeight -= iconChildren.length * (natHeight - this.iconSize) +
|
||||||
@@ -625,7 +637,7 @@ const Dash = new Lang.Class({
|
|||||||
|
|
||||||
let scale = oldIconSize / newIconSize;
|
let scale = oldIconSize / newIconSize;
|
||||||
for (let i = 0; i < iconChildren.length; i++) {
|
for (let i = 0; i < iconChildren.length; i++) {
|
||||||
let icon = iconChildren[i]._delegate.child._delegate.icon;
|
let icon = iconChildren[i].child._delegate.icon;
|
||||||
|
|
||||||
// Set the new size immediately, to keep the icons' sizes
|
// Set the new size immediately, to keep the icons' sizes
|
||||||
// in sync with this.iconSize
|
// in sync with this.iconSize
|
||||||
@@ -645,15 +657,11 @@ const Dash = new Lang.Class({
|
|||||||
icon.icon.set_size(icon.icon.width * scale,
|
icon.icon.set_size(icon.icon.width * scale,
|
||||||
icon.icon.height * scale);
|
icon.icon.height * scale);
|
||||||
|
|
||||||
icon._animating = true;
|
|
||||||
Tweener.addTween(icon.icon,
|
Tweener.addTween(icon.icon,
|
||||||
{ width: targetWidth,
|
{ width: targetWidth,
|
||||||
height: targetHeight,
|
height: targetHeight,
|
||||||
time: DASH_ANIMATION_TIME,
|
time: DASH_ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: function() {
|
|
||||||
icon._animating = false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -664,13 +672,13 @@ const Dash = new Lang.Class({
|
|||||||
let running = this._appSystem.get_running();
|
let running = this._appSystem.get_running();
|
||||||
|
|
||||||
let children = this._box.get_children().filter(function(actor) {
|
let children = this._box.get_children().filter(function(actor) {
|
||||||
return actor._delegate.child &&
|
return actor.child &&
|
||||||
actor._delegate.child._delegate &&
|
actor.child._delegate &&
|
||||||
actor._delegate.child._delegate.app;
|
actor.child._delegate.app;
|
||||||
});
|
});
|
||||||
// Apps currently in the dash
|
// Apps currently in the dash
|
||||||
let oldApps = children.map(function(actor) {
|
let oldApps = children.map(function(actor) {
|
||||||
return actor._delegate.child._delegate.app;
|
return actor.child._delegate.app;
|
||||||
});
|
});
|
||||||
// Apps supposed to be in the dash
|
// Apps supposed to be in the dash
|
||||||
let newApps = [];
|
let newApps = [];
|
||||||
@@ -736,7 +744,7 @@ const Dash = new Lang.Class({
|
|||||||
let insertHere = newApps[newIndex + 1] &&
|
let insertHere = newApps[newIndex + 1] &&
|
||||||
newApps[newIndex + 1] == oldApps[oldIndex];
|
newApps[newIndex + 1] == oldApps[oldIndex];
|
||||||
let alreadyRemoved = removedActors.reduce(function(result, actor) {
|
let alreadyRemoved = removedActors.reduce(function(result, actor) {
|
||||||
let removedApp = actor._delegate.child._delegate.app;
|
let removedApp = actor.child._delegate.app;
|
||||||
return result || removedApp == newApps[newIndex];
|
return result || removedApp == newApps[newIndex];
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
@@ -753,11 +761,11 @@ const Dash = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < addedItems.length; i++)
|
for (let i = 0; i < addedItems.length; i++)
|
||||||
this._box.insert_child_at_index(addedItems[i].item.actor,
|
this._box.insert_child_at_index(addedItems[i].item,
|
||||||
addedItems[i].pos);
|
addedItems[i].pos);
|
||||||
|
|
||||||
for (let i = 0; i < removedActors.length; i++) {
|
for (let i = 0; i < removedActors.length; i++) {
|
||||||
let item = removedActors[i]._delegate;
|
let item = removedActors[i];
|
||||||
|
|
||||||
// Don't animate item removal when the overview is transitioning
|
// Don't animate item removal when the overview is transitioning
|
||||||
// or hidden
|
// or hidden
|
||||||
@@ -771,18 +779,20 @@ const Dash = new Lang.Class({
|
|||||||
|
|
||||||
// Skip animations on first run when adding the initial set
|
// Skip animations on first run when adding the initial set
|
||||||
// of items, to avoid all items zooming in at once
|
// of items, to avoid all items zooming in at once
|
||||||
if (!this._shownInitially) {
|
|
||||||
|
let animate = this._shownInitially && Main.overview.visible &&
|
||||||
|
!Main.overview.animationInProgress;
|
||||||
|
|
||||||
|
if (!this._shownInitially)
|
||||||
this._shownInitially = true;
|
this._shownInitially = true;
|
||||||
return;
|
|
||||||
|
for (let i = 0; i < addedItems.length; i++) {
|
||||||
|
addedItems[i].item.show(animate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't animate item addition when the overview is transitioning
|
// Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744
|
||||||
// or hidden
|
// Without it, StBoxLayout may use a stale size cache
|
||||||
if (!Main.overview.visible || Main.overview.animationInProgress)
|
this._box.queue_relayout();
|
||||||
return;
|
|
||||||
|
|
||||||
for (let i = 0; i < addedItems.length; i++)
|
|
||||||
addedItems[i].item.animateIn();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_clearDragPlaceholder: function() {
|
_clearDragPlaceholder: function() {
|
||||||
@@ -813,7 +823,7 @@ const Dash = new Lang.Class({
|
|||||||
// the remove target has the same size as "normal" items, we don't
|
// the remove target has the same size as "normal" items, we don't
|
||||||
// need to do the same adjustment there.
|
// need to do the same adjustment there.
|
||||||
if (this._dragPlaceholder) {
|
if (this._dragPlaceholder) {
|
||||||
boxHeight -= this._dragPlaceholder.actor.height;
|
boxHeight -= this._dragPlaceholder.height;
|
||||||
numChildren--;
|
numChildren--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -827,7 +837,7 @@ const Dash = new Lang.Class({
|
|||||||
if (this._dragPlaceholder) {
|
if (this._dragPlaceholder) {
|
||||||
this._dragPlaceholder.animateOutAndDestroy();
|
this._dragPlaceholder.animateOutAndDestroy();
|
||||||
this._animatingPlaceholdersCount++;
|
this._animatingPlaceholdersCount++;
|
||||||
this._dragPlaceholder.actor.connect('destroy',
|
this._dragPlaceholder.connect('destroy',
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
this._animatingPlaceholdersCount--;
|
this._animatingPlaceholdersCount--;
|
||||||
}));
|
}));
|
||||||
@@ -842,7 +852,7 @@ const Dash = new Lang.Class({
|
|||||||
// an animation
|
// an animation
|
||||||
let fadeIn;
|
let fadeIn;
|
||||||
if (this._dragPlaceholder) {
|
if (this._dragPlaceholder) {
|
||||||
this._dragPlaceholder.actor.destroy();
|
this._dragPlaceholder.destroy();
|
||||||
fadeIn = false;
|
fadeIn = false;
|
||||||
} else {
|
} else {
|
||||||
fadeIn = true;
|
fadeIn = true;
|
||||||
@@ -851,10 +861,9 @@ const Dash = new Lang.Class({
|
|||||||
this._dragPlaceholder = new DragPlaceholderItem();
|
this._dragPlaceholder = new DragPlaceholderItem();
|
||||||
this._dragPlaceholder.child.set_width (this.iconSize);
|
this._dragPlaceholder.child.set_width (this.iconSize);
|
||||||
this._dragPlaceholder.child.set_height (this.iconSize / 2);
|
this._dragPlaceholder.child.set_height (this.iconSize / 2);
|
||||||
this._box.insert_child_at_index(this._dragPlaceholder.actor,
|
this._box.insert_child_at_index(this._dragPlaceholder,
|
||||||
this._dragPlaceholderPos);
|
this._dragPlaceholderPos);
|
||||||
if (fadeIn)
|
this._dragPlaceholder.show(fadeIn);
|
||||||
this._dragPlaceholder.animateIn();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the drag placeholder if we are not in the
|
// Remove the drag placeholder if we are not in the
|
||||||
@@ -892,10 +901,10 @@ const Dash = new Lang.Class({
|
|||||||
let children = this._box.get_children();
|
let children = this._box.get_children();
|
||||||
for (let i = 0; i < this._dragPlaceholderPos; i++) {
|
for (let i = 0; i < this._dragPlaceholderPos; i++) {
|
||||||
if (this._dragPlaceholder &&
|
if (this._dragPlaceholder &&
|
||||||
children[i] == this._dragPlaceholder.actor)
|
children[i] == this._dragPlaceholder)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
let childId = children[i]._delegate.child._delegate.app.get_id();
|
let childId = children[i].child._delegate.app.get_id();
|
||||||
if (childId == id)
|
if (childId == id)
|
||||||
continue;
|
continue;
|
||||||
if (childId in favorites)
|
if (childId in favorites)
|
||||||
|
@@ -176,13 +176,16 @@ const IconGrid = new Lang.Class({
|
|||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
params = Params.parse(params, { rowLimit: null,
|
params = Params.parse(params, { rowLimit: null,
|
||||||
columnLimit: null,
|
columnLimit: null,
|
||||||
|
fillParent: false,
|
||||||
xAlign: St.Align.MIDDLE });
|
xAlign: St.Align.MIDDLE });
|
||||||
this._rowLimit = params.rowLimit;
|
this._rowLimit = params.rowLimit;
|
||||||
this._colLimit = params.columnLimit;
|
this._colLimit = params.columnLimit;
|
||||||
this._xAlign = params.xAlign;
|
this._xAlign = params.xAlign;
|
||||||
|
this._fillParent = params.fillParent;
|
||||||
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
|
|
||||||
// Pulled from CSS, but hardcode some defaults here
|
// Pulled from CSS, but hardcode some defaults here
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
this._hItemSize = this._vItemSize = ICON_SIZE;
|
this._hItemSize = this._vItemSize = ICON_SIZE;
|
||||||
@@ -196,6 +199,11 @@ const IconGrid = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredWidth: function (grid, forHeight, alloc) {
|
_getPreferredWidth: function (grid, forHeight, alloc) {
|
||||||
|
if (this._fillParent)
|
||||||
|
// Ignore all size requests of children and request a size of 0;
|
||||||
|
// later we'll allocate as many children as fit the parent
|
||||||
|
return;
|
||||||
|
|
||||||
let children = this._grid.get_children();
|
let children = this._grid.get_children();
|
||||||
let nColumns = this._colLimit ? Math.min(this._colLimit,
|
let nColumns = this._colLimit ? Math.min(this._colLimit,
|
||||||
children.length)
|
children.length)
|
||||||
@@ -217,12 +225,20 @@ const IconGrid = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredHeight: function (grid, forWidth, alloc) {
|
_getPreferredHeight: function (grid, forWidth, alloc) {
|
||||||
|
if (this._fillParent)
|
||||||
|
// Ignore all size requests of children and request a size of 0;
|
||||||
|
// later we'll allocate as many children as fit the parent
|
||||||
|
return;
|
||||||
|
|
||||||
let children = this._getVisibleChildren();
|
let children = this._getVisibleChildren();
|
||||||
let nColumns;
|
let nColumns, spacing;
|
||||||
if (forWidth < 0)
|
if (forWidth < 0) {
|
||||||
nColumns = children.length;
|
nColumns = children.length;
|
||||||
else
|
spacing = this._spacing;
|
||||||
nColumns = this._computeLayout(forWidth)[0];
|
} else {
|
||||||
|
[nColumns, , spacing] = this._computeLayout(forWidth);
|
||||||
|
}
|
||||||
|
|
||||||
let nRows;
|
let nRows;
|
||||||
if (nColumns > 0)
|
if (nColumns > 0)
|
||||||
nRows = Math.ceil(children.length / nColumns);
|
nRows = Math.ceil(children.length / nColumns);
|
||||||
@@ -230,13 +246,20 @@ const IconGrid = new Lang.Class({
|
|||||||
nRows = 0;
|
nRows = 0;
|
||||||
if (this._rowLimit)
|
if (this._rowLimit)
|
||||||
nRows = Math.min(nRows, this._rowLimit);
|
nRows = Math.min(nRows, this._rowLimit);
|
||||||
let totalSpacing = Math.max(0, nRows - 1) * this._spacing;
|
let totalSpacing = Math.max(0, nRows - 1) * spacing;
|
||||||
let height = nRows * this._vItemSize + totalSpacing;
|
let height = nRows * this._vItemSize + totalSpacing;
|
||||||
alloc.min_size = height;
|
alloc.min_size = height;
|
||||||
alloc.natural_size = height;
|
alloc.natural_size = height;
|
||||||
},
|
},
|
||||||
|
|
||||||
_allocate: function (grid, box, flags) {
|
_allocate: function (grid, box, flags) {
|
||||||
|
if (this._fillParent) {
|
||||||
|
// Reset the passed in box to fill the parent
|
||||||
|
let parentBox = this.actor.get_parent().allocation;
|
||||||
|
let gridBox = this.actor.get_theme_node().get_content_box(parentBox);
|
||||||
|
box = this._grid.get_theme_node().get_content_box(gridBox);
|
||||||
|
}
|
||||||
|
|
||||||
let children = this._getVisibleChildren();
|
let children = this._getVisibleChildren();
|
||||||
let availWidth = box.x2 - box.x1;
|
let availWidth = box.x2 - box.x1;
|
||||||
let availHeight = box.y2 - box.y1;
|
let availHeight = box.y2 - box.y1;
|
||||||
@@ -280,7 +303,8 @@ const IconGrid = new Lang.Class({
|
|||||||
childBox.x2 = childBox.x1 + width;
|
childBox.x2 = childBox.x1 + width;
|
||||||
childBox.y2 = childBox.y1 + height;
|
childBox.y2 = childBox.y1 + height;
|
||||||
|
|
||||||
if (this._rowLimit && rowIndex >= this._rowLimit) {
|
if (this._rowLimit && rowIndex >= this._rowLimit ||
|
||||||
|
this._fillParent && childBox.y2 > availHeight) {
|
||||||
this._grid.set_skip_paint(children[i], true);
|
this._grid.set_skip_paint(children[i], true);
|
||||||
} else {
|
} else {
|
||||||
children[i].allocate(childBox, flags);
|
children[i].allocate(childBox, flags);
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
const GObject = imports.gi.GObject;
|
const GObject = imports.gi.GObject;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
@@ -25,8 +26,8 @@ const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
|
|||||||
|
|
||||||
// The message tray takes this much pressure
|
// The message tray takes this much pressure
|
||||||
// in the pressure barrier at once to release it.
|
// in the pressure barrier at once to release it.
|
||||||
const MESSAGE_TRAY_PRESSURE_THRESHOLD = 200; // pixels
|
const MESSAGE_TRAY_PRESSURE_THRESHOLD = 250; // pixels
|
||||||
const MESSAGE_TRAY_PRESSURE_TIMEOUT = 3000; // ms
|
const MESSAGE_TRAY_PRESSURE_TIMEOUT = 1000; // ms
|
||||||
|
|
||||||
function isPopupMetaWindow(actor) {
|
function isPopupMetaWindow(actor) {
|
||||||
switch(actor.meta_window.get_window_type()) {
|
switch(actor.meta_window.get_window_type()) {
|
||||||
@@ -200,9 +201,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
global.stage.remove_actor(global.top_window_group);
|
global.stage.remove_actor(global.top_window_group);
|
||||||
this.uiGroup.add_actor(global.top_window_group);
|
this.uiGroup.add_actor(global.top_window_group);
|
||||||
|
|
||||||
this._consoleBackgroundGroup = new Meta.BackgroundGroup();
|
|
||||||
global.stage.insert_child_below(this._consoleBackgroundGroup, null);
|
|
||||||
|
|
||||||
this._backgroundGroup = new Meta.BackgroundGroup();
|
this._backgroundGroup = new Meta.BackgroundGroup();
|
||||||
global.window_group.add_child(this._backgroundGroup);
|
global.window_group.add_child(this._backgroundGroup);
|
||||||
this._backgroundGroup.lower_bottom();
|
this._backgroundGroup.lower_bottom();
|
||||||
@@ -541,17 +539,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
// so events don't get delivered to X11 windows (which are distorted by the animation)
|
// so events don't get delivered to X11 windows (which are distorted by the animation)
|
||||||
global.stage_input_mode = Shell.StageInputMode.FULLSCREEN;
|
global.stage_input_mode = Shell.StageInputMode.FULLSCREEN;
|
||||||
|
|
||||||
// build new backgrounds
|
|
||||||
for (let i = 0; i < this.monitors.length; i++) {
|
|
||||||
let monitor = this.monitors[i];
|
|
||||||
|
|
||||||
let stillFrame = new Background.StillFrame(i);
|
|
||||||
this._consoleBackgroundGroup.add_child(stillFrame.actor);
|
|
||||||
|
|
||||||
stillFrame.actor.set_size(this.monitors[i].width, this.monitors[i].height);
|
|
||||||
stillFrame.actor.set_position(this.monitors[i].x, this.monitors[i].y);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Main.sessionMode.isGreeter) {
|
if (Main.sessionMode.isGreeter) {
|
||||||
this.panelBox.translation_y = -this.panelBox.height;
|
this.panelBox.translation_y = -this.panelBox.height;
|
||||||
} else {
|
} else {
|
||||||
@@ -568,11 +555,42 @@ const LayoutManager = new Lang.Class({
|
|||||||
|
|
||||||
this.uiGroup.set_pivot_point(x / global.screen_width,
|
this.uiGroup.set_pivot_point(x / global.screen_width,
|
||||||
y / global.screen_height);
|
y / global.screen_height);
|
||||||
this.uiGroup.scale_x = this.uiGroup.scale_y = 0;
|
this.uiGroup.scale_x = this.uiGroup.scale_y = 0.5;
|
||||||
|
this.uiGroup.opacity = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._systemBackground = new Background.SystemBackground();
|
||||||
|
this._systemBackground.actor.hide();
|
||||||
|
|
||||||
|
global.stage.insert_child_below(this._systemBackground.actor, null);
|
||||||
|
|
||||||
|
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
||||||
|
coordinate: Clutter.BindCoordinate.ALL });
|
||||||
|
this._systemBackground.actor.add_constraint(constraint);
|
||||||
|
|
||||||
|
let signalId = this._systemBackground.connect('loaded',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._systemBackground.disconnect(signalId);
|
||||||
|
this._systemBackground.actor.show();
|
||||||
|
|
||||||
|
// We're mostly prepared for the startup animation
|
||||||
|
// now, but since a lot is going on asynchronously
|
||||||
|
// during startup, let's defer emission of the
|
||||||
|
// startup-prepared signal until the event loop is
|
||||||
|
// uncontended and idle. This helps to prevent us
|
||||||
|
// from running the animation when the system is
|
||||||
|
// bogged down
|
||||||
|
GLib.idle_add(GLib.PRIORITY_LOW,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this.emit('startup-prepared');
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
startupAnimation: function() {
|
startupAnimation: function() {
|
||||||
|
global.stage.show();
|
||||||
if (Main.sessionMode.isGreeter)
|
if (Main.sessionMode.isGreeter)
|
||||||
this._startupAnimationGreeter();
|
this._startupAnimationGreeter();
|
||||||
else
|
else
|
||||||
@@ -593,6 +611,7 @@ const LayoutManager = new Lang.Class({
|
|||||||
Tweener.addTween(this.uiGroup,
|
Tweener.addTween(this.uiGroup,
|
||||||
{ scale_x: 1,
|
{ scale_x: 1,
|
||||||
scale_y: 1,
|
scale_y: 1,
|
||||||
|
opacity: 255,
|
||||||
time: STARTUP_ANIMATION_TIME,
|
time: STARTUP_ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: this._startupAnimationComplete,
|
onComplete: this._startupAnimationComplete,
|
||||||
@@ -606,8 +625,8 @@ const LayoutManager = new Lang.Class({
|
|||||||
|
|
||||||
global.stage_input_mode = Shell.StageInputMode.NORMAL;
|
global.stage_input_mode = Shell.StageInputMode.NORMAL;
|
||||||
|
|
||||||
this._consoleBackgroundGroup.destroy();
|
this._systemBackground.actor.destroy();
|
||||||
this._consoleBackgroundGroup = null;
|
this._systemBackground = null;
|
||||||
|
|
||||||
this._startingUp = false;
|
this._startingUp = false;
|
||||||
|
|
||||||
@@ -885,9 +904,11 @@ const LayoutManager = new Lang.Class({
|
|||||||
for (let i = 0; i < this.monitors.length; i++)
|
for (let i = 0; i < this.monitors.length; i++)
|
||||||
this.monitors[i].inFullscreen = true;
|
this.monitors[i].inFullscreen = true;
|
||||||
} else {
|
} else {
|
||||||
let monitor = this.monitors[metaWindow.get_monitor()];
|
let monitors = metaWindow.get_all_monitors();
|
||||||
if (monitor)
|
for (let i = 0; i < monitors.length; i++) {
|
||||||
monitor.inFullscreen = true;
|
let index = monitors[i];
|
||||||
|
this.monitors[index].inFullscreen = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -920,7 +941,7 @@ const LayoutManager = new Lang.Class({
|
|||||||
|
|
||||||
if (primaryWasInFullscreen != this.primaryMonitor.inFullscreen) {
|
if (primaryWasInFullscreen != this.primaryMonitor.inFullscreen) {
|
||||||
let windows = this._getWindowActorsForWorkspace(global.screen.get_active_workspace());
|
let windows = this._getWindowActorsForWorkspace(global.screen.get_active_workspace());
|
||||||
for (let i = 0; i < windows.length - 1; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
let window = windows[i];
|
let window = windows[i];
|
||||||
let metaWindow = window.meta_window;
|
let metaWindow = window.meta_window;
|
||||||
|
|
||||||
@@ -932,8 +953,9 @@ const LayoutManager = new Lang.Class({
|
|||||||
if (!metaWindow.is_on_primary_monitor())
|
if (!metaWindow.is_on_primary_monitor())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Minimize monitor sized windows
|
// Minimize monitor sized windows that are not focused
|
||||||
if (metaWindow.is_monitor_sized())
|
if (metaWindow.is_monitor_sized() &&
|
||||||
|
!metaWindow.appears_focused)
|
||||||
metaWindow.minimize();
|
metaWindow.minimize();
|
||||||
}
|
}
|
||||||
this.emit('primary-fullscreen-changed', this.primaryMonitor.inFullscreen);
|
this.emit('primary-fullscreen-changed', this.primaryMonitor.inFullscreen);
|
||||||
@@ -1074,7 +1096,7 @@ const HotCorner = new Lang.Class({
|
|||||||
// multiple times due to an accidental jitter.
|
// multiple times due to an accidental jitter.
|
||||||
this._entered = false;
|
this._entered = false;
|
||||||
|
|
||||||
this.actor = new Clutter.Group({ name: 'hot-corner-environs',
|
this.actor = new Clutter.Actor({ name: 'hot-corner-environs',
|
||||||
width: 3,
|
width: 3,
|
||||||
height: 3,
|
height: 3,
|
||||||
reactive: true });
|
reactive: true });
|
||||||
@@ -1086,7 +1108,7 @@ const HotCorner = new Lang.Class({
|
|||||||
reactive: true });
|
reactive: true });
|
||||||
this._corner._delegate = this;
|
this._corner._delegate = this;
|
||||||
|
|
||||||
this.actor.add_actor(this._corner);
|
this.actor.add_child(this._corner);
|
||||||
|
|
||||||
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
|
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
|
||||||
this._corner.set_position(this.actor.width - this._corner.width, 0);
|
this._corner.set_position(this.actor.width - this._corner.width, 0);
|
||||||
@@ -1302,6 +1324,11 @@ const PressureBarrier = new Lang.Class({
|
|||||||
this._reset();
|
this._reset();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_trigger: function() {
|
||||||
|
this.emit('trigger');
|
||||||
|
this._reset();
|
||||||
|
},
|
||||||
|
|
||||||
_onBarrierHit: function(barrier, event) {
|
_onBarrierHit: function(barrier, event) {
|
||||||
// Throw out all events where the pointer was grabbed by another
|
// Throw out all events where the pointer was grabbed by another
|
||||||
// client, as the client that grabbed the pointer expects to have
|
// client, as the client that grabbed the pointer expects to have
|
||||||
@@ -1319,6 +1346,11 @@ const PressureBarrier = new Lang.Class({
|
|||||||
let slide = this._getDistanceAlongBarrier(event);
|
let slide = this._getDistanceAlongBarrier(event);
|
||||||
let distance = this._getDistanceAcrossBarrier(event);
|
let distance = this._getDistanceAcrossBarrier(event);
|
||||||
|
|
||||||
|
if (distance >= this._threshold) {
|
||||||
|
this._trigger();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Throw out events where the cursor is move more
|
// Throw out events where the cursor is move more
|
||||||
// along the axis of the barrier than moving with
|
// along the axis of the barrier than moving with
|
||||||
// the barrier.
|
// the barrier.
|
||||||
@@ -1329,12 +1361,10 @@ const PressureBarrier = new Lang.Class({
|
|||||||
|
|
||||||
this._trimBarrierEvents();
|
this._trimBarrierEvents();
|
||||||
this._barrierEvents.push(event);
|
this._barrierEvents.push(event);
|
||||||
this._currentPressure += distance;
|
this._currentPressure += Math.min(15, distance);
|
||||||
|
|
||||||
if (this._currentPressure >= this._threshold) {
|
if (this._currentPressure >= this._threshold)
|
||||||
this.emit('trigger');
|
this._trigger();
|
||||||
this._reset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(PressureBarrier.prototype);
|
Signals.addSignalMethods(PressureBarrier.prototype);
|
||||||
|
@@ -685,7 +685,8 @@ const Memory = new Lang.Class({
|
|||||||
const Extensions = new Lang.Class({
|
const Extensions = new Lang.Class({
|
||||||
Name: 'Extensions',
|
Name: 'Extensions',
|
||||||
|
|
||||||
_init: function() {
|
_init: function(lookingGlass) {
|
||||||
|
this._lookingGlass = lookingGlass;
|
||||||
this.actor = new St.BoxLayout({ vertical: true,
|
this.actor = new St.BoxLayout({ vertical: true,
|
||||||
name: 'lookingGlassExtensions' });
|
name: 'lookingGlassExtensions' });
|
||||||
this._noExtensions = new St.Label({ style_class: 'lg-extensions-none',
|
this._noExtensions = new St.Label({ style_class: 'lg-extensions-none',
|
||||||
@@ -912,7 +913,7 @@ const LookingGlass = new Lang.Class({
|
|||||||
this._memory = new Memory();
|
this._memory = new Memory();
|
||||||
notebook.appendPage('Memory', this._memory.actor);
|
notebook.appendPage('Memory', this._memory.actor);
|
||||||
|
|
||||||
this._extensions = new Extensions();
|
this._extensions = new Extensions(this);
|
||||||
notebook.appendPage('Extensions', this._extensions.actor);
|
notebook.appendPage('Extensions', this._extensions.actor);
|
||||||
|
|
||||||
this._entry.clutter_text.connect('activate', Lang.bind(this, function (o, e) {
|
this._entry.clutter_text.connect('activate', Lang.bind(this, function (o, e) {
|
||||||
|
@@ -18,6 +18,7 @@ const ExtensionSystem = imports.ui.extensionSystem;
|
|||||||
const ExtensionDownloader = imports.ui.extensionDownloader;
|
const ExtensionDownloader = imports.ui.extensionDownloader;
|
||||||
const Keyboard = imports.ui.keyboard;
|
const Keyboard = imports.ui.keyboard;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
const OsdWindow = imports.ui.osdWindow;
|
||||||
const Overview = imports.ui.overview;
|
const Overview = imports.ui.overview;
|
||||||
const Panel = imports.ui.panel;
|
const Panel = imports.ui.panel;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
@@ -51,6 +52,7 @@ let screenShield = null;
|
|||||||
let notificationDaemon = null;
|
let notificationDaemon = null;
|
||||||
let windowAttentionHandler = null;
|
let windowAttentionHandler = null;
|
||||||
let ctrlAltTabManager = null;
|
let ctrlAltTabManager = null;
|
||||||
|
let osdWindow = null;
|
||||||
let sessionMode = null;
|
let sessionMode = null;
|
||||||
let shellDBusService = null;
|
let shellDBusService = null;
|
||||||
let shellMountOpDBusService = null;
|
let shellMountOpDBusService = null;
|
||||||
@@ -89,6 +91,9 @@ function start() {
|
|||||||
global.logError = window.log;
|
global.logError = window.log;
|
||||||
global.log = window.log;
|
global.log = window.log;
|
||||||
|
|
||||||
|
// Hide the stage until we're ready for it
|
||||||
|
global.stage.hide();
|
||||||
|
|
||||||
// Chain up async errors reported from C
|
// Chain up async errors reported from C
|
||||||
global.connect('notify-error', function (global, msg, detail) { notifyError(msg, detail); });
|
global.connect('notify-error', function (global, msg, detail) { notifyError(msg, detail); });
|
||||||
|
|
||||||
@@ -134,6 +139,7 @@ function startSession() {
|
|||||||
|
|
||||||
xdndHandler = new XdndHandler.XdndHandler();
|
xdndHandler = new XdndHandler.XdndHandler();
|
||||||
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
||||||
|
osdWindow = new OsdWindow.OsdWindow();
|
||||||
overview = new Overview.Overview();
|
overview = new Overview.Overview();
|
||||||
wm = new WindowManager.WindowManager();
|
wm = new WindowManager.WindowManager();
|
||||||
magnifier = new Magnifier.Magnifier();
|
magnifier = new Magnifier.Magnifier();
|
||||||
@@ -165,6 +171,9 @@ function startSession() {
|
|||||||
// initiate logouts.
|
// initiate logouts.
|
||||||
EndSessionDialog.init();
|
EndSessionDialog.init();
|
||||||
|
|
||||||
|
// We're ready for the session manager to move to the next phase
|
||||||
|
Meta.register_with_session();
|
||||||
|
|
||||||
_startDate = new Date();
|
_startDate = new Date();
|
||||||
|
|
||||||
log('GNOME Shell started at ' + _startDate);
|
log('GNOME Shell started at ' + _startDate);
|
||||||
@@ -190,12 +199,8 @@ function startSession() {
|
|||||||
ExtensionDownloader.init();
|
ExtensionDownloader.init();
|
||||||
ExtensionSystem.init();
|
ExtensionSystem.init();
|
||||||
|
|
||||||
// Run the startup animation as soon as the mainloop is idle enough.
|
layoutManager.connect('startup-prepared', function() {
|
||||||
// This is necessary to have it smooth and without interruptions from
|
|
||||||
// completed IO tasks
|
|
||||||
GLib.idle_add(GLib.PRIORITY_LOW, function() {
|
|
||||||
layoutManager.startupAnimation();
|
layoutManager.startupAnimation();
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1153,6 +1153,11 @@ const Source = new Lang.Class({
|
|||||||
return this.notifications.length;
|
return this.notifications.length;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get indicatorCount() {
|
||||||
|
let notifications = this.notifications.filter(function(n) { return !n.isTransient && !n.resident; });
|
||||||
|
return notifications.length;
|
||||||
|
},
|
||||||
|
|
||||||
get unseenCount() {
|
get unseenCount() {
|
||||||
return this.notifications.filter(function(n) { return !n.acknowledged; }).length;
|
return this.notifications.filter(function(n) { return !n.acknowledged; }).length;
|
||||||
},
|
},
|
||||||
@@ -1695,6 +1700,7 @@ const MessageTray = new Lang.Class({
|
|||||||
this._sources = new Hash.Map();
|
this._sources = new Hash.Map();
|
||||||
this._chatSummaryItemsCount = 0;
|
this._chatSummaryItemsCount = 0;
|
||||||
|
|
||||||
|
this._trayDwellTimeoutId = 0;
|
||||||
this._setupTrayDwellIfNeeded();
|
this._setupTrayDwellIfNeeded();
|
||||||
this._sessionUpdated();
|
this._sessionUpdated();
|
||||||
|
|
||||||
@@ -1759,7 +1765,6 @@ const MessageTray = new Lang.Class({
|
|||||||
if (!global.display.supports_extended_barriers()) {
|
if (!global.display.supports_extended_barriers()) {
|
||||||
let pointerWatcher = PointerWatcher.getPointerWatcher();
|
let pointerWatcher = PointerWatcher.getPointerWatcher();
|
||||||
pointerWatcher.addWatch(TRAY_DWELL_CHECK_INTERVAL, Lang.bind(this, this._checkTrayDwell));
|
pointerWatcher.addWatch(TRAY_DWELL_CHECK_INTERVAL, Lang.bind(this, this._checkTrayDwell));
|
||||||
this._trayDwellTimeoutId = 0;
|
|
||||||
this._trayDwelling = false;
|
this._trayDwelling = false;
|
||||||
this._trayDwellUserTime = 0;
|
this._trayDwellUserTime = 0;
|
||||||
}
|
}
|
||||||
@@ -2348,6 +2353,7 @@ const MessageTray = new Lang.Class({
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.emit('showing');
|
||||||
this._tween(this.actor, '_trayState', State.SHOWN,
|
this._tween(this.actor, '_trayState', State.SHOWN,
|
||||||
{ y: -this.actor.height,
|
{ y: -this.actor.height,
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
@@ -2398,6 +2404,7 @@ const MessageTray = new Lang.Class({
|
|||||||
// is distracting, so hide it immediately in case it was visible.
|
// is distracting, so hide it immediately in case it was visible.
|
||||||
this._summaryBoxPointer.actor.hide();
|
this._summaryBoxPointer.actor.hide();
|
||||||
|
|
||||||
|
this.emit('hiding');
|
||||||
this._tween(this.actor, '_trayState', State.HIDDEN,
|
this._tween(this.actor, '_trayState', State.HIDDEN,
|
||||||
{ y: 0,
|
{ y: 0,
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
|
@@ -58,7 +58,9 @@ const ModalDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
|
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
|
||||||
|
|
||||||
|
this._pressedKey = null;
|
||||||
this._buttonKeys = {};
|
this._buttonKeys = {};
|
||||||
|
this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||||
this._group.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent));
|
this._group.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent));
|
||||||
|
|
||||||
this._backgroundBin = new St.Bin();
|
this._backgroundBin = new St.Bin();
|
||||||
@@ -80,7 +82,7 @@ const ModalDialog = new Lang.Class({
|
|||||||
let stack = new Shell.Stack();
|
let stack = new Shell.Stack();
|
||||||
this._backgroundBin.child = stack;
|
this._backgroundBin.child = stack;
|
||||||
|
|
||||||
this._eventBlocker = new Clutter.Group({ reactive: true });
|
this._eventBlocker = new Clutter.Actor({ reactive: true });
|
||||||
stack.add_actor(this._eventBlocker);
|
stack.add_actor(this._eventBlocker);
|
||||||
stack.add_actor(this.dialogLayout);
|
stack.add_actor(this.dialogLayout);
|
||||||
} else {
|
} else {
|
||||||
@@ -179,10 +181,19 @@ const ModalDialog = new Lang.Class({
|
|||||||
return button;
|
return button;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyReleaseEvent: function(object, event) {
|
_onKeyPressEvent: function(object, event) {
|
||||||
let symbol = event.get_key_symbol();
|
this._pressedKey = event.get_key_symbol();
|
||||||
let buttonInfo = this._buttonKeys[symbol];
|
},
|
||||||
|
|
||||||
|
_onKeyReleaseEvent: function(object, event) {
|
||||||
|
let pressedKey = this._pressedKey;
|
||||||
|
this._pressedKey = null;
|
||||||
|
|
||||||
|
let symbol = event.get_key_symbol();
|
||||||
|
if (symbol != pressedKey)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let buttonInfo = this._buttonKeys[symbol];
|
||||||
if (!buttonInfo)
|
if (!buttonInfo)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
179
js/ui/osdWindow.js
Normal file
179
js/ui/osdWindow.js
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Layout = imports.ui.layout;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
const HIDE_TIMEOUT = 1500;
|
||||||
|
const FADE_TIME = 0.1;
|
||||||
|
const LEVEL_ANIMATION_TIME = 0.1;
|
||||||
|
|
||||||
|
const LevelBar = new Lang.Class({
|
||||||
|
Name: 'LevelBar',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._level = 0;
|
||||||
|
|
||||||
|
this.actor = new St.Bin({ style_class: 'level',
|
||||||
|
x_fill: true, y_fill: true });
|
||||||
|
this._bar = new St.DrawingArea();
|
||||||
|
this._bar.connect('repaint', Lang.bind(this, this._repaint));
|
||||||
|
|
||||||
|
this.actor.set_child(this._bar);
|
||||||
|
},
|
||||||
|
|
||||||
|
get level() {
|
||||||
|
return this._level;
|
||||||
|
},
|
||||||
|
|
||||||
|
set level(value) {
|
||||||
|
let newValue = Math.max(0, Math.min(value, 100));
|
||||||
|
if (newValue == this._level)
|
||||||
|
return;
|
||||||
|
this._level = newValue;
|
||||||
|
this._bar.queue_repaint();
|
||||||
|
},
|
||||||
|
|
||||||
|
_repaint: function() {
|
||||||
|
let cr = this._bar.get_context();
|
||||||
|
|
||||||
|
let node = this.actor.get_theme_node();
|
||||||
|
let radius = node.get_border_radius(0); // assume same radius for all corners
|
||||||
|
Clutter.cairo_set_source_color(cr, node.get_foreground_color());
|
||||||
|
|
||||||
|
let [w, h] = this._bar.get_surface_size();
|
||||||
|
w *= (this._level / 100.);
|
||||||
|
|
||||||
|
if (w == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cr.moveTo(radius, 0);
|
||||||
|
if (w >= radius)
|
||||||
|
cr.arc(w - radius, radius, radius, 1.5 * Math.PI, 2. * Math.PI);
|
||||||
|
else
|
||||||
|
cr.lineTo(w, 0);
|
||||||
|
if (w >= radius)
|
||||||
|
cr.arc(w - radius, h - radius, radius, 0, 0.5 * Math.PI);
|
||||||
|
else
|
||||||
|
cr.lineTo(w, h);
|
||||||
|
cr.arc(radius, h - radius, radius, 0.5 * Math.PI, Math.PI);
|
||||||
|
cr.arc(radius, radius, radius, Math.PI, 1.5 * Math.PI);
|
||||||
|
cr.fill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const OsdWindow = new Lang.Class({
|
||||||
|
Name: 'OsdWindow',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.actor = new St.Widget({ x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
|
x_align: Clutter.ActorAlign.CENTER,
|
||||||
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
|
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true }));
|
||||||
|
this._box = new St.BoxLayout({ style_class: 'osd-window',
|
||||||
|
vertical: true });
|
||||||
|
this.actor.add_actor(this._box);
|
||||||
|
|
||||||
|
this._icon = new St.Icon();
|
||||||
|
this._box.add(this._icon, { expand: true });
|
||||||
|
|
||||||
|
this._label = new St.Label();
|
||||||
|
this._box.add(this._label);
|
||||||
|
|
||||||
|
this._level = new LevelBar();
|
||||||
|
this._box.add(this._level.actor);
|
||||||
|
|
||||||
|
this._hideTimeoutId = 0;
|
||||||
|
this._reset();
|
||||||
|
|
||||||
|
Main.layoutManager.connect('monitors-changed',
|
||||||
|
Lang.bind(this, this._monitorsChanged));
|
||||||
|
this._monitorsChanged();
|
||||||
|
|
||||||
|
Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
setIcon: function(icon) {
|
||||||
|
this._icon.gicon = icon;
|
||||||
|
},
|
||||||
|
|
||||||
|
setLabel: function(label) {
|
||||||
|
this._label.visible = (label != undefined);
|
||||||
|
if (label)
|
||||||
|
this._label.text = label;
|
||||||
|
},
|
||||||
|
|
||||||
|
setLevel: function(level) {
|
||||||
|
this._level.actor.visible = (level != undefined);
|
||||||
|
if (this.actor.visible)
|
||||||
|
Tweener.addTween(this._level,
|
||||||
|
{ level: level,
|
||||||
|
time: LEVEL_ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
else
|
||||||
|
this._level.level = level;
|
||||||
|
},
|
||||||
|
|
||||||
|
show: function() {
|
||||||
|
if (!this._icon.gicon)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!this.actor.visible) {
|
||||||
|
this.actor.show();
|
||||||
|
this.actor.opacity = 0;
|
||||||
|
|
||||||
|
Tweener.addTween(this.actor,
|
||||||
|
{ opacity: 255,
|
||||||
|
time: FADE_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._hideTimeoutId)
|
||||||
|
Mainloop.source_remove(this._hideTimeoutId);
|
||||||
|
this._hideTimeoutId = Mainloop.timeout_add(HIDE_TIMEOUT,
|
||||||
|
Lang.bind(this, this._hide));
|
||||||
|
},
|
||||||
|
|
||||||
|
cancel: function() {
|
||||||
|
if (!this._hideTimeoutId)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Mainloop.source_remove(this._hideTimeoutId);
|
||||||
|
this._hideTimeoutId = 0;
|
||||||
|
this._hide();
|
||||||
|
},
|
||||||
|
|
||||||
|
_hide: function() {
|
||||||
|
Tweener.addTween(this.actor,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: FADE_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: Lang.bind(this, this._reset) });
|
||||||
|
},
|
||||||
|
|
||||||
|
_reset: function() {
|
||||||
|
this.actor.hide();
|
||||||
|
this.setLabel(null);
|
||||||
|
this.setLevel(null);
|
||||||
|
},
|
||||||
|
|
||||||
|
_monitorsChanged: function() {
|
||||||
|
/* assume 130x130 on a 640x480 display and scale from there */
|
||||||
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
let scalew = monitor.width / 640.0;
|
||||||
|
let scaleh = monitor.height / 480.0;
|
||||||
|
let scale = Math.min(scalew, scaleh);
|
||||||
|
let size = 130 * Math.max(1, scale);
|
||||||
|
|
||||||
|
this._box.set_size(size, size);
|
||||||
|
this._box.translation_y = monitor.height / 4;
|
||||||
|
|
||||||
|
this._icon.icon_size = size / 2;
|
||||||
|
}
|
||||||
|
});
|
@@ -13,6 +13,7 @@ const Gdk = imports.gi.Gdk;
|
|||||||
const Background = imports.ui.background;
|
const Background = imports.ui.background;
|
||||||
const Dash = imports.ui.dash;
|
const Dash = imports.ui.dash;
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
|
const LayoutManager = imports.ui.layout;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
const OverviewControls = imports.ui.overviewControls;
|
const OverviewControls = imports.ui.overviewControls;
|
||||||
@@ -92,7 +93,9 @@ const Overview = new Lang.Class({
|
|||||||
_init: function() {
|
_init: function() {
|
||||||
this._overviewCreated = false;
|
this._overviewCreated = false;
|
||||||
this._initCalled = false;
|
this._initCalled = false;
|
||||||
|
this._controlPressed = false;
|
||||||
|
|
||||||
|
global.stage.connect('captured-event', Lang.bind(this, this._capturedEvent));
|
||||||
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
||||||
this._sessionUpdated();
|
this._sessionUpdated();
|
||||||
},
|
},
|
||||||
@@ -116,17 +119,27 @@ const Overview = new Lang.Class({
|
|||||||
this._desktopFade = new St.Bin();
|
this._desktopFade = new St.Bin();
|
||||||
global.overlay_group.add_actor(this._desktopFade);
|
global.overlay_group.add_actor(this._desktopFade);
|
||||||
|
|
||||||
|
let layout = new Clutter.BinLayout();
|
||||||
|
this._stack = new Clutter.Actor({ layout_manager: layout });
|
||||||
|
this._stack.add_constraint(new LayoutManager.MonitorConstraint({ primary: true }));
|
||||||
|
|
||||||
/* Translators: This is the main view to select
|
/* Translators: This is the main view to select
|
||||||
activities. See also note for "Activities" string. */
|
activities. See also note for "Activities" string. */
|
||||||
this._overview = new St.BoxLayout({ name: 'overview',
|
this._overview = new St.BoxLayout({ name: 'overview',
|
||||||
accessible_name: _("Overview"),
|
accessible_name: _("Overview"),
|
||||||
reactive: true,
|
reactive: true,
|
||||||
vertical: true });
|
vertical: true,
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true });
|
||||||
this._overview._delegate = this;
|
this._overview._delegate = this;
|
||||||
|
|
||||||
|
this._groupStack = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
||||||
|
x_expand: true, y_expand: true,
|
||||||
|
clip_to_allocation: true });
|
||||||
this._group = new St.BoxLayout({ name: 'overview-group',
|
this._group = new St.BoxLayout({ name: 'overview-group',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
clip_to_allocation: true });
|
x_expand: true, y_expand: true });
|
||||||
|
this._groupStack.add_actor(this._group);
|
||||||
|
|
||||||
this._backgroundGroup = new Meta.BackgroundGroup();
|
this._backgroundGroup = new Meta.BackgroundGroup();
|
||||||
global.overlay_group.add_child(this._backgroundGroup);
|
global.overlay_group.add_child(this._backgroundGroup);
|
||||||
@@ -148,8 +161,9 @@ const Overview = new Lang.Class({
|
|||||||
this._overview.add_actor(this._coverPane);
|
this._overview.add_actor(this._coverPane);
|
||||||
this._coverPane.connect('event', Lang.bind(this, function (actor, event) { return true; }));
|
this._coverPane.connect('event', Lang.bind(this, function (actor, event) { return true; }));
|
||||||
|
|
||||||
this._overview.hide();
|
this._stack.hide();
|
||||||
global.overlay_group.add_actor(this._overview);
|
this._stack.add_actor(this._overview);
|
||||||
|
global.overlay_group.add_actor(this._stack);
|
||||||
|
|
||||||
this._coverPane.hide();
|
this._coverPane.hide();
|
||||||
|
|
||||||
@@ -224,6 +238,20 @@ const Overview = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_capturedEvent: function(actor, event) {
|
||||||
|
let type = event.type();
|
||||||
|
if (type != Clutter.EventType.KEY_PRESS &&
|
||||||
|
type != Clutter.EventType.KEY_RELEASE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let symbol = event.get_key_symbol();
|
||||||
|
if (symbol == Clutter.KEY_Control_L ||
|
||||||
|
symbol == Clutter.KEY_Control_R)
|
||||||
|
this._controlPressed = type == Clutter.EventType.KEY_PRESS;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
_sessionUpdated: function() {
|
_sessionUpdated: function() {
|
||||||
this.isDummy = !Main.sessionMode.hasOverview;
|
this.isDummy = !Main.sessionMode.hasOverview;
|
||||||
this._createOverview();
|
this._createOverview();
|
||||||
@@ -269,15 +297,22 @@ const Overview = new Lang.Class({
|
|||||||
this._thumbnailsBox,
|
this._thumbnailsBox,
|
||||||
this._viewSelector);
|
this._viewSelector);
|
||||||
|
|
||||||
|
this._controls.dashActor.x_align = Clutter.ActorAlign.START;
|
||||||
|
this._controls.dashActor.y_expand = true;
|
||||||
|
|
||||||
|
// Put the dash in a separate layer to allow content to be centered
|
||||||
|
this._groupStack.add_actor(this._controls.dashActor);
|
||||||
|
|
||||||
// Pack all the actors into the group
|
// Pack all the actors into the group
|
||||||
this._group.add_actor(this._controls.dashActor);
|
this._group.add_actor(this._controls.dashSpacer);
|
||||||
this._group.add(this._viewSelector.actor, { x_fill: true,
|
this._group.add(this._viewSelector.actor, { x_fill: true,
|
||||||
expand: true });
|
expand: true });
|
||||||
this._group.add_actor(this._controls.thumbnailsActor);
|
this._group.add_actor(this._controls.thumbnailsActor);
|
||||||
|
|
||||||
// Add our same-line elements after the search entry
|
// Add our same-line elements after the search entry
|
||||||
this._overview.add(this._group, { y_fill: true,
|
this._overview.add(this._groupStack, { y_fill: true, expand: true });
|
||||||
expand: true });
|
|
||||||
|
this._stack.add_actor(this._controls.indicatorActor);
|
||||||
|
|
||||||
// TODO - recalculate everything when desktop size changes
|
// TODO - recalculate everything when desktop size changes
|
||||||
this.dashIconSize = this._dash.iconSize;
|
this.dashIconSize = this._dash.iconSize;
|
||||||
@@ -411,12 +446,8 @@ const Overview = new Lang.Class({
|
|||||||
// when it is next shown.
|
// when it is next shown.
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|
||||||
let primary = Main.layoutManager.primaryMonitor;
|
|
||||||
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
||||||
|
|
||||||
this._overview.set_position(primary.x, primary.y);
|
|
||||||
this._overview.set_size(primary.width, primary.height);
|
|
||||||
|
|
||||||
this._coverPane.set_position(0, workArea.y);
|
this._coverPane.set_position(0, workArea.y);
|
||||||
this._coverPane.set_size(workArea.width, workArea.height);
|
this._coverPane.set_size(workArea.width, workArea.height);
|
||||||
|
|
||||||
@@ -518,12 +549,12 @@ const Overview = new Lang.Class({
|
|||||||
Meta.disable_unredirect_for_screen(global.screen);
|
Meta.disable_unredirect_for_screen(global.screen);
|
||||||
global.window_group.hide();
|
global.window_group.hide();
|
||||||
global.top_window_group.hide();
|
global.top_window_group.hide();
|
||||||
this._overview.show();
|
this._stack.show();
|
||||||
this._backgroundGroup.show();
|
this._backgroundGroup.show();
|
||||||
this._viewSelector.show();
|
this._viewSelector.show();
|
||||||
|
|
||||||
this._overview.opacity = 0;
|
this._stack.opacity = 0;
|
||||||
Tweener.addTween(this._overview,
|
Tweener.addTween(this._stack,
|
||||||
{ opacity: 255,
|
{ opacity: 255,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
@@ -565,6 +596,9 @@ const Overview = new Lang.Class({
|
|||||||
if (!this._shown)
|
if (!this._shown)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (this._controlPressed)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!this._shownTemporarily)
|
if (!this._shownTemporarily)
|
||||||
this._animateNotVisible();
|
this._animateNotVisible();
|
||||||
|
|
||||||
@@ -642,7 +676,7 @@ const Overview = new Lang.Class({
|
|||||||
this._viewSelector.zoomFromOverview();
|
this._viewSelector.zoomFromOverview();
|
||||||
|
|
||||||
// Make other elements fade out.
|
// Make other elements fade out.
|
||||||
Tweener.addTween(this._overview,
|
Tweener.addTween(this._stack,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
@@ -680,7 +714,7 @@ const Overview = new Lang.Class({
|
|||||||
this._viewSelector.hide();
|
this._viewSelector.hide();
|
||||||
this._desktopFade.hide();
|
this._desktopFade.hide();
|
||||||
this._backgroundGroup.hide();
|
this._backgroundGroup.hide();
|
||||||
this._overview.hide();
|
this._stack.hide();
|
||||||
|
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
this.animationInProgress = false;
|
this.animationInProgress = false;
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
@@ -98,6 +99,7 @@ const SlidingControl = new Lang.Class({
|
|||||||
this.layout = new SlideLayout();
|
this.layout = new SlideLayout();
|
||||||
this.layout.slideDirection = params.slideDirection;
|
this.layout.slideDirection = params.slideDirection;
|
||||||
this.actor = new St.Widget({ layout_manager: this.layout,
|
this.actor = new St.Widget({ layout_manager: this.layout,
|
||||||
|
style_class: 'overview-controls',
|
||||||
clip_to_allocation: true });
|
clip_to_allocation: true });
|
||||||
|
|
||||||
Main.overview.connect('showing', Lang.bind(this, this._onOverviewShowing));
|
Main.overview.connect('showing', Lang.bind(this, this._onOverviewShowing));
|
||||||
@@ -247,7 +249,7 @@ const ThumbnailsSlider = new Lang.Class({
|
|||||||
_getAlwaysZoomOut: function() {
|
_getAlwaysZoomOut: function() {
|
||||||
// Always show the pager when hover, during a drag, or if workspaces are
|
// Always show the pager when hover, during a drag, or if workspaces are
|
||||||
// actually used, e.g. there are windows on more than one
|
// actually used, e.g. there are windows on more than one
|
||||||
let alwaysZoomOut = this.actor.hover || this.inDrag || global.screen.n_workspaces > 2;
|
let alwaysZoomOut = this.actor.hover || this.inDrag || !Meta.prefs_get_dynamic_workspaces() || global.screen.n_workspaces > 2;
|
||||||
|
|
||||||
if (!alwaysZoomOut) {
|
if (!alwaysZoomOut) {
|
||||||
let monitors = Main.layoutManager.monitors;
|
let monitors = Main.layoutManager.monitors;
|
||||||
@@ -328,19 +330,183 @@ const DashSlider = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const DashSpacer = new Lang.Class({
|
||||||
|
Name: 'DashSpacer',
|
||||||
|
Extends: St.Widget,
|
||||||
|
|
||||||
|
_init: function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
|
||||||
|
this._bindConstraint = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
setDashActor: function(dashActor) {
|
||||||
|
if (this._bindConstraint) {
|
||||||
|
this.remove_constraint(this._bindConstraint);
|
||||||
|
this._bindConstraint = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dashActor) {
|
||||||
|
this._bindConstraint = new Clutter.BindConstraint({ source: dashActor,
|
||||||
|
coordinate: Clutter.BindCoordinate.SIZE });
|
||||||
|
this.add_constraint(this._bindConstraint);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_width: function(forHeight) {
|
||||||
|
let box = this.get_allocation_box();
|
||||||
|
let minWidth = this.parent(forHeight)[0];
|
||||||
|
let natWidth = box.x2 - box.x1;
|
||||||
|
return [minWidth, natWidth];
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_height: function(forWidth) {
|
||||||
|
let box = this.get_allocation_box();
|
||||||
|
let minHeight = this.parent(forWidth)[0];
|
||||||
|
let natHeight = box.y2 - box.y1;
|
||||||
|
return [minHeight, natHeight];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const MessagesIndicator = new Lang.Class({
|
||||||
|
Name: 'MessagesIndicator',
|
||||||
|
|
||||||
|
_init: function(viewSelector) {
|
||||||
|
this._count = 0;
|
||||||
|
this._sources = [];
|
||||||
|
this._viewSelector = viewSelector;
|
||||||
|
|
||||||
|
this._container = new St.BoxLayout({ style_class: 'messages-indicator-contents',
|
||||||
|
reactive: true,
|
||||||
|
track_hover: true,
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
|
x_align: Clutter.ActorAlign.CENTER });
|
||||||
|
|
||||||
|
this._icon = new St.Icon({ icon_name: 'user-idle-symbolic',
|
||||||
|
icon_size: 16 });
|
||||||
|
this._container.add_actor(this._icon);
|
||||||
|
|
||||||
|
this._label = new St.Label();
|
||||||
|
this._container.add_actor(this._label);
|
||||||
|
|
||||||
|
this._highlight = new St.Widget({ style_class: 'messages-indicator-highlight',
|
||||||
|
x_expand: true,
|
||||||
|
y_expand: true,
|
||||||
|
y_align: Clutter.ActorAlign.END,
|
||||||
|
visible: false });
|
||||||
|
|
||||||
|
this._container.connect('notify::hover', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._highlight.visible = this._container.hover;
|
||||||
|
}));
|
||||||
|
|
||||||
|
let clickAction = new Clutter.ClickAction();
|
||||||
|
this._container.add_action(clickAction);
|
||||||
|
clickAction.connect('clicked', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
Main.messageTray.openTray();
|
||||||
|
}));
|
||||||
|
|
||||||
|
Main.messageTray.connect('showing', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._highlight.visible = false;
|
||||||
|
this._container.hover = false;
|
||||||
|
}));
|
||||||
|
|
||||||
|
let layout = new Clutter.BinLayout();
|
||||||
|
this.actor = new St.Widget({ layout_manager: layout,
|
||||||
|
style_class: 'messages-indicator',
|
||||||
|
y_expand: true,
|
||||||
|
y_align: Clutter.ActorAlign.END,
|
||||||
|
visible: false });
|
||||||
|
this.actor.add_actor(this._container);
|
||||||
|
this.actor.add_actor(this._highlight);
|
||||||
|
|
||||||
|
Main.messageTray.connect('source-added', Lang.bind(this, this._onSourceAdded));
|
||||||
|
Main.messageTray.connect('source-removed', Lang.bind(this, this._onSourceRemoved));
|
||||||
|
|
||||||
|
let sources = Main.messageTray.getSources();
|
||||||
|
sources.forEach(Lang.bind(this, function(source) { this._onSourceAdded(null, source); }));
|
||||||
|
|
||||||
|
this._viewSelector.connect('page-changed', Lang.bind(this, this._updateVisibility));
|
||||||
|
Main.overview.connect('showing', Lang.bind(this, this._updateVisibility));
|
||||||
|
},
|
||||||
|
|
||||||
|
_onSourceAdded: function(tray, source) {
|
||||||
|
if (source.trayIcon)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (source.isTransient)
|
||||||
|
return;
|
||||||
|
|
||||||
|
source.connect('count-updated', Lang.bind(this, this._updateCount));
|
||||||
|
this._sources.push(source);
|
||||||
|
this._updateCount();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onSourceRemoved: function(tray, source) {
|
||||||
|
this._sources.splice(this._sources.indexOf(source), 1);
|
||||||
|
this._updateCount();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateCount: function() {
|
||||||
|
let count = 0;
|
||||||
|
this._sources.forEach(Lang.bind(this,
|
||||||
|
function(source) {
|
||||||
|
count += source.indicatorCount;
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._count = count;
|
||||||
|
this._label.text = ngettext("%d new message",
|
||||||
|
"%d new messages",
|
||||||
|
count).format(count);
|
||||||
|
|
||||||
|
this._updateVisibility();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateVisibility: function() {
|
||||||
|
let activePage = this._viewSelector.getActivePage();
|
||||||
|
let visible = ((this._count > 0) && (activePage == ViewSelector.ViewPage.WINDOWS));
|
||||||
|
|
||||||
|
this.actor.visible = visible;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const ControlsManager = new Lang.Class({
|
const ControlsManager = new Lang.Class({
|
||||||
Name: 'ControlsManager',
|
Name: 'ControlsManager',
|
||||||
|
|
||||||
_init: function(dash, thumbnails, viewSelector) {
|
_init: function(dash, thumbnails, viewSelector) {
|
||||||
this._dashSlider = new DashSlider(dash);
|
this._dashSlider = new DashSlider(dash);
|
||||||
this.dashActor = this._dashSlider.actor;
|
this.dashActor = this._dashSlider.actor;
|
||||||
|
this.dashSpacer = new DashSpacer();
|
||||||
|
this.dashSpacer.setDashActor(this.dashActor);
|
||||||
|
|
||||||
this._thumbnailsSlider = new ThumbnailsSlider(thumbnails);
|
this._thumbnailsSlider = new ThumbnailsSlider(thumbnails);
|
||||||
this.thumbnailsActor = this._thumbnailsSlider.actor;
|
this.thumbnailsActor = this._thumbnailsSlider.actor;
|
||||||
|
|
||||||
|
this._indicator = new MessagesIndicator(viewSelector);
|
||||||
|
this.indicatorActor = this._indicator.actor;
|
||||||
|
|
||||||
this._viewSelector = viewSelector;
|
this._viewSelector = viewSelector;
|
||||||
this._viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility));
|
this._viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility));
|
||||||
this._viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty));
|
this._viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty));
|
||||||
|
|
||||||
|
Main.overview.connect('showing', Lang.bind(this, this._updateSpacerVisibility));
|
||||||
|
Main.overview.connect('item-drag-begin', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
let activePage = this._viewSelector.getActivePage();
|
||||||
|
if (activePage != ViewSelector.ViewPage.WINDOWS)
|
||||||
|
this._viewSelector.fadeHalf();
|
||||||
|
}));
|
||||||
|
Main.overview.connect('item-drag-end', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._viewSelector.fadeIn();
|
||||||
|
}));
|
||||||
|
Main.overview.connect('item-drag-cancelled', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._viewSelector.fadeIn();
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_setVisibility: function() {
|
_setVisibility: function() {
|
||||||
@@ -368,8 +534,18 @@ const ControlsManager = new Lang.Class({
|
|||||||
this._thumbnailsSlider.slideOut();
|
this._thumbnailsSlider.slideOut();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_updateSpacerVisibility: function() {
|
||||||
|
if (Main.overview.animationInProgress && !Main.overview.visibleTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let activePage = this._viewSelector.getActivePage();
|
||||||
|
this.dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS);
|
||||||
|
},
|
||||||
|
|
||||||
_onPageEmpty: function() {
|
_onPageEmpty: function() {
|
||||||
this._dashSlider.pageEmpty();
|
this._dashSlider.pageEmpty();
|
||||||
this._thumbnailsSlider.pageEmpty();
|
this._thumbnailsSlider.pageEmpty();
|
||||||
|
|
||||||
|
this._updateSpacerVisibility();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -203,7 +203,7 @@ const TextShadower = new Lang.Class({
|
|||||||
let child = children[i];
|
let child = children[i];
|
||||||
let childBox = new Clutter.ActorBox();
|
let childBox = new Clutter.ActorBox();
|
||||||
// The order of the labels here is arbitrary, except
|
// The order of the labels here is arbitrary, except
|
||||||
// we know the "real" label is at the end because Clutter.Group
|
// we know the "real" label is at the end because Clutter.Actor
|
||||||
// sorts by Z order
|
// sorts by Z order
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 0: // top
|
case 0: // top
|
||||||
|
@@ -255,6 +255,7 @@ const RemoteSearchProvider = new Lang.Class({
|
|||||||
metas[i][prop] = metas[i][prop].deep_unpack();
|
metas[i][prop] = metas[i][prop].deep_unpack();
|
||||||
resultMetas.push({ id: metas[i]['id'],
|
resultMetas.push({ id: metas[i]['id'],
|
||||||
name: metas[i]['name'],
|
name: metas[i]['name'],
|
||||||
|
description: metas[i]['description'],
|
||||||
createIcon: Lang.bind(this,
|
createIcon: Lang.bind(this,
|
||||||
this.createIcon, metas[i]) });
|
this.createIcon, metas[i]) });
|
||||||
}
|
}
|
||||||
|
@@ -447,7 +447,7 @@ const ScreenShield = new Lang.Class({
|
|||||||
|
|
||||||
this._lockScreenGroup.add_actor(this._lockScreenContents);
|
this._lockScreenGroup.add_actor(this._lockScreenContents);
|
||||||
|
|
||||||
this._backgroundGroup = new Meta.BackgroundGroup();
|
this._backgroundGroup = new Clutter.Actor();
|
||||||
|
|
||||||
this._lockScreenGroup.add_actor(this._backgroundGroup);
|
this._lockScreenGroup.add_actor(this._backgroundGroup);
|
||||||
this._backgroundGroup.lower_bottom();
|
this._backgroundGroup.lower_bottom();
|
||||||
@@ -538,21 +538,22 @@ const ScreenShield = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_createBackground: function(monitorIndex) {
|
_createBackground: function(monitorIndex) {
|
||||||
let bin = new St.Bin({ style_class: 'screen-shield-background' });
|
let monitor = Main.layoutManager.monitors[monitorIndex];
|
||||||
|
let widget = new St.Widget({ style_class: 'screen-shield-background',
|
||||||
|
x: monitor.x,
|
||||||
|
y: monitor.y,
|
||||||
|
width: monitor.width,
|
||||||
|
height: monitor.height });
|
||||||
|
|
||||||
let group = new Meta.BackgroundGroup();
|
let bgManager = new Background.BackgroundManager({ container: widget,
|
||||||
bin.child = group;
|
|
||||||
|
|
||||||
let bgManager = new Background.BackgroundManager({ container: group,
|
|
||||||
monitorIndex: monitorIndex,
|
monitorIndex: monitorIndex,
|
||||||
effects: Meta.BackgroundEffects.BLUR | Meta.BackgroundEffects.DESATURATE });
|
effects: Meta.BackgroundEffects.BLUR | Meta.BackgroundEffects.DESATURATE,
|
||||||
|
controlPosition: false });
|
||||||
bgManager.background.saturation = 0.6;
|
bgManager.background.saturation = 0.6;
|
||||||
|
|
||||||
this._bgManagers.push(bgManager);
|
this._bgManagers.push(bgManager);
|
||||||
|
|
||||||
this._backgroundGroup.add_child(bin);
|
this._backgroundGroup.add_child(widget);
|
||||||
bin.lower_bottom();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateBackgrounds: function() {
|
_updateBackgrounds: function() {
|
||||||
@@ -863,6 +864,14 @@ const ScreenShield = new Lang.Class({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_hideLockScreenComplete: function() {
|
||||||
|
if (Main.sessionMode.currentMode == 'lock-screen')
|
||||||
|
Main.sessionMode.popMode('lock-screen');
|
||||||
|
|
||||||
|
this._lockScreenState = MessageTray.State.HIDDEN;
|
||||||
|
this._lockScreenGroup.hide();
|
||||||
|
},
|
||||||
|
|
||||||
_hideLockScreen: function(animate, velocity) {
|
_hideLockScreen: function(animate, velocity) {
|
||||||
if (this._lockScreenState == MessageTray.State.HIDDEN)
|
if (this._lockScreenState == MessageTray.State.HIDDEN)
|
||||||
return;
|
return;
|
||||||
@@ -886,21 +895,13 @@ const ScreenShield = new Lang.Class({
|
|||||||
{ y: -h,
|
{ y: -h,
|
||||||
time: time,
|
time: time,
|
||||||
transition: 'easeInQuad',
|
transition: 'easeInQuad',
|
||||||
onComplete: function() {
|
onComplete: Lang.bind(this, this._hideLockScreenComplete),
|
||||||
this._lockScreenState = MessageTray.State.HIDDEN;
|
|
||||||
this._lockScreenGroup.hide();
|
|
||||||
},
|
|
||||||
onCompleteScope: this,
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this._lockScreenState = MessageTray.State.HIDDEN;
|
this._hideLockScreenComplete();
|
||||||
this._lockScreenGroup.hide();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
global.stage.show_cursor();
|
global.stage.show_cursor();
|
||||||
|
|
||||||
if (Main.sessionMode.currentMode == 'lock-screen')
|
|
||||||
Main.sessionMode.popMode('lock-screen');
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_ensureUnlockDialog: function(onPrimary, allowCancel) {
|
_ensureUnlockDialog: function(onPrimary, allowCancel) {
|
||||||
|
@@ -76,6 +76,11 @@ const ScreenshotService = new Lang.Class({
|
|||||||
|
|
||||||
ScreenshotAreaAsync : function (params, invocation) {
|
ScreenshotAreaAsync : function (params, invocation) {
|
||||||
let [x, y, width, height, flash, filename, callback] = params;
|
let [x, y, width, height, flash, filename, callback] = params;
|
||||||
|
if (height <= 0 || width <= 0) {
|
||||||
|
invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
|
||||||
|
"Invalid params");
|
||||||
|
return;
|
||||||
|
}
|
||||||
let screenshot = new Shell.Screenshot();
|
let screenshot = new Shell.Screenshot();
|
||||||
screenshot.screenshot_area (x, y, width, height, filename,
|
screenshot.screenshot_area (x, y, width, height, filename,
|
||||||
Lang.bind(this, this._onScreenshotComplete,
|
Lang.bind(this, this._onScreenshotComplete,
|
||||||
|
@@ -103,10 +103,9 @@ const ListSearchResult = new Lang.Class({
|
|||||||
x_align: St.Align.START,
|
x_align: St.Align.START,
|
||||||
y_align: St.Align.START });
|
y_align: St.Align.START });
|
||||||
|
|
||||||
// TODO: should highlight terms in the description here
|
|
||||||
if (this.metaInfo['description']) {
|
if (this.metaInfo['description']) {
|
||||||
let description = new St.Label({ style_class: 'list-search-result-description',
|
let description = new St.Label({ style_class: 'list-search-result-description' });
|
||||||
text: '"' + this.metaInfo['description'] + '"' });
|
description.clutter_text.set_markup(this.metaInfo['description']);
|
||||||
details.add(description, { x_fill: false,
|
details.add(description, { x_fill: false,
|
||||||
y_fill: false,
|
y_fill: false,
|
||||||
x_align: St.Align.START,
|
x_align: St.Align.START,
|
||||||
@@ -331,7 +330,8 @@ const SearchResults = new Lang.Class({
|
|||||||
|
|
||||||
this._scrollView = new St.ScrollView({ x_fill: true,
|
this._scrollView = new St.ScrollView({ x_fill: true,
|
||||||
y_fill: false,
|
y_fill: false,
|
||||||
style_class: 'vfade' });
|
overlay_scrollbars: true,
|
||||||
|
style_class: 'search-display vfade' });
|
||||||
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||||
this._scrollView.add_actor(scrollChild);
|
this._scrollView.add_actor(scrollChild);
|
||||||
let action = new Clutter.PanAction({ interpolate: true });
|
let action = new Clutter.PanAction({ interpolate: true });
|
||||||
|
@@ -1,14 +1,16 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const ExtensionSystem = imports.ui.extensionSystem;
|
const ExtensionSystem = imports.ui.extensionSystem;
|
||||||
const ExtensionDownloader = imports.ui.extensionDownloader;
|
const ExtensionDownloader = imports.ui.extensionDownloader;
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Hash = imports.misc.hash;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Screenshot = imports.ui.screenshot;
|
const Screenshot = imports.ui.screenshot;
|
||||||
|
|
||||||
@@ -18,6 +20,26 @@ const GnomeShellIface = <interface name="org.gnome.Shell">
|
|||||||
<arg type="b" direction="out" name="success" />
|
<arg type="b" direction="out" name="success" />
|
||||||
<arg type="s" direction="out" name="result" />
|
<arg type="s" direction="out" name="result" />
|
||||||
</method>
|
</method>
|
||||||
|
<method name="ShowOSD">
|
||||||
|
<arg type="a{sv}" direction="in" name="params"/>
|
||||||
|
</method>
|
||||||
|
<method name="GrabAccelerator">
|
||||||
|
<arg type="s" direction="in" name="accelerator"/>
|
||||||
|
<arg type="u" direction="in" name="flags"/>
|
||||||
|
<arg type="u" direction="out" name="action"/>
|
||||||
|
</method>
|
||||||
|
<method name="GrabAccelerators">
|
||||||
|
<arg type="a(su)" direction="in" name="accelerators"/>
|
||||||
|
<arg type="au" direction="out" name="actions"/>
|
||||||
|
</method>
|
||||||
|
<method name="UngrabAccelerator">
|
||||||
|
<arg type="u" direction="in" name="action"/>
|
||||||
|
<arg type="b" direction="out" name="success"/>
|
||||||
|
</method>
|
||||||
|
<signal name="AcceleratorActivated">
|
||||||
|
<arg name="action" type="u" />
|
||||||
|
<arg name="deviceid" type="u" />
|
||||||
|
</signal>
|
||||||
<property name="Mode" type="s" access="read" />
|
<property name="Mode" type="s" access="read" />
|
||||||
<property name="OverviewActive" type="b" access="readwrite" />
|
<property name="OverviewActive" type="b" access="readwrite" />
|
||||||
<property name="ShellVersion" type="s" access="read" />
|
<property name="ShellVersion" type="s" access="read" />
|
||||||
@@ -47,8 +69,16 @@ const GnomeShell = new Lang.Class({
|
|||||||
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellIface, this);
|
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellIface, this);
|
||||||
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell');
|
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell');
|
||||||
|
|
||||||
this._extensionsSerivce = new GnomeShellExtensions();
|
this._extensionsService = new GnomeShellExtensions();
|
||||||
this._screenshotService = new Screenshot.ScreenshotService();
|
this._screenshotService = new Screenshot.ScreenshotService();
|
||||||
|
|
||||||
|
this._grabbedAccelerators = new Hash.Map();
|
||||||
|
this._grabbers = new Hash.Map();
|
||||||
|
|
||||||
|
global.display.connect('accelerator-activated', Lang.bind(this,
|
||||||
|
function(display, action, deviceid) {
|
||||||
|
this._emitAcceleratorActivated(action, deviceid);
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -84,6 +114,102 @@ const GnomeShell = new Lang.Class({
|
|||||||
return [success, returnValue];
|
return [success, returnValue];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
ShowOSD: function(params) {
|
||||||
|
for (let param in params)
|
||||||
|
params[param] = params[param].deep_unpack();
|
||||||
|
|
||||||
|
let icon = null;
|
||||||
|
if (params['icon'])
|
||||||
|
icon = Gio.Icon.new_for_string(params['icon']);
|
||||||
|
|
||||||
|
Main.osdWindow.setIcon(icon);
|
||||||
|
Main.osdWindow.setLabel(params['label']);
|
||||||
|
Main.osdWindow.setLevel(params['level']);
|
||||||
|
|
||||||
|
Main.osdWindow.show();
|
||||||
|
},
|
||||||
|
|
||||||
|
GrabAcceleratorAsync: function(params, invocation) {
|
||||||
|
let [accel, flags] = params;
|
||||||
|
let sender = invocation.get_sender();
|
||||||
|
let bindingAction = this._grabAcceleratorForSender(accel, flags, sender);
|
||||||
|
return invocation.return_value(GLib.Variant.new('(u)', [bindingAction]));
|
||||||
|
},
|
||||||
|
|
||||||
|
GrabAcceleratorsAsync: function(params, invocation) {
|
||||||
|
let [accels] = params;
|
||||||
|
let sender = invocation.get_sender();
|
||||||
|
let bindingActions = [];
|
||||||
|
for (let i = 0; i < accels.length; i++) {
|
||||||
|
let [accel, flags] = accels[i];
|
||||||
|
bindingActions.push(this._grabAcceleratorForSender(accel, flags, sender));
|
||||||
|
}
|
||||||
|
return invocation.return_value(GLib.Variant.new('(au)', [bindingActions]));
|
||||||
|
},
|
||||||
|
|
||||||
|
UngrabAcceleratorAsync: function(params, invocation) {
|
||||||
|
let [action] = params;
|
||||||
|
let grabbedBy = this._grabbedAccelerators.get(action);
|
||||||
|
if (invocation.get_sender() != grabbedBy)
|
||||||
|
return invocation.return_value(GLib.Variant.new('(b)', [false]));
|
||||||
|
|
||||||
|
let ungrabSucceeded = global.display.ungrab_accelerator(action);
|
||||||
|
if (ungrabSucceeded)
|
||||||
|
this._grabbedAccelerators.delete(action);
|
||||||
|
return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
|
||||||
|
},
|
||||||
|
|
||||||
|
_emitAcceleratorActivated: function(action, deviceid) {
|
||||||
|
let destination = this._grabbedAccelerators.get(action);
|
||||||
|
if (!destination)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let connection = this._dbusImpl.get_connection();
|
||||||
|
let info = this._dbusImpl.get_info();
|
||||||
|
connection.emit_signal(destination,
|
||||||
|
this._dbusImpl.get_object_path(),
|
||||||
|
info ? info.name : null,
|
||||||
|
'AcceleratorActivated',
|
||||||
|
GLib.Variant.new('(uu)', [action, deviceid]));
|
||||||
|
},
|
||||||
|
|
||||||
|
_grabAcceleratorForSender: function(accelerator, flags, sender) {
|
||||||
|
let bindingAction = global.display.grab_accelerator(accelerator);
|
||||||
|
if (bindingAction == Meta.KeyBindingAction.NONE)
|
||||||
|
return Meta.KeyBindingAction.NONE;
|
||||||
|
|
||||||
|
let bindingName = Meta.external_binding_name_for_action(bindingAction);
|
||||||
|
Main.wm.allowKeybinding(bindingName, flags);
|
||||||
|
|
||||||
|
this._grabbedAccelerators.set(bindingAction, sender);
|
||||||
|
|
||||||
|
if (!this._grabbers.has(sender)) {
|
||||||
|
let id = Gio.bus_watch_name(Gio.BusType.SESSION, sender, 0, null,
|
||||||
|
Lang.bind(this, this._onGrabberBusNameVanished));
|
||||||
|
this._grabbers.set(sender, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bindingAction;
|
||||||
|
},
|
||||||
|
|
||||||
|
_ungrabAccelerator: function(action) {
|
||||||
|
let ungrabSucceeded = global.display.ungrab_accelerator(action);
|
||||||
|
if (ungrabSucceeded)
|
||||||
|
this._grabbedAccelerators.delete(action);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onGrabberBusNameVanished: function(connection, name) {
|
||||||
|
let grabs = this._grabbedAccelerators.items();
|
||||||
|
for (let i = 0; i < grabs.length; i++) {
|
||||||
|
let [action, sender] = grabs[i];
|
||||||
|
if (sender == name)
|
||||||
|
this._ungrabAccelerator(action);
|
||||||
|
}
|
||||||
|
Gio.bus_unwatch_name(this._grabbers.get(name));
|
||||||
|
this._grabbers.delete(name);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
Mode: global.session_mode,
|
Mode: global.session_mode,
|
||||||
|
|
||||||
get OverviewActive() {
|
get OverviewActive() {
|
||||||
|
@@ -89,7 +89,8 @@ const EntryMenu = new Lang.Class({
|
|||||||
|
|
||||||
_updateCopyItem: function() {
|
_updateCopyItem: function() {
|
||||||
let selection = this._entry.clutter_text.get_selection();
|
let selection = this._entry.clutter_text.get_selection();
|
||||||
this._copyItem.setSensitive(selection && selection != '');
|
this._copyItem.setSensitive(!this._entry.clutter_text.password_char &&
|
||||||
|
selection && selection != '');
|
||||||
},
|
},
|
||||||
|
|
||||||
_updatePasteItem: function() {
|
_updatePasteItem: function() {
|
||||||
|
@@ -398,6 +398,9 @@ const InputSourceIndicator = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_switchInputSource: function(display, screen, window, binding) {
|
_switchInputSource: function(display, screen, window, binding) {
|
||||||
|
if (this._mruSources.length < 2)
|
||||||
|
return;
|
||||||
|
|
||||||
let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward);
|
let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward);
|
||||||
let modifiers = binding.get_modifiers();
|
let modifiers = binding.get_modifiers();
|
||||||
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
|
||||||
|
@@ -160,6 +160,7 @@ const SwitcherPopup = new Lang.Class({
|
|||||||
// disturbed by the popup briefly flashing.
|
// disturbed by the popup briefly flashing.
|
||||||
this._initialDelayTimeoutId = Mainloop.timeout_add(POPUP_DELAY_TIMEOUT,
|
this._initialDelayTimeoutId = Mainloop.timeout_add(POPUP_DELAY_TIMEOUT,
|
||||||
Lang.bind(this, function () {
|
Lang.bind(this, function () {
|
||||||
|
Main.osdWindow.cancel();
|
||||||
this.actor.opacity = 255;
|
this.actor.opacity = 255;
|
||||||
this._initialDelayTimeoutId = 0;
|
this._initialDelayTimeoutId = 0;
|
||||||
}));
|
}));
|
||||||
@@ -304,7 +305,7 @@ const SwitcherList = new Lang.Class({
|
|||||||
this.actor.connect('allocate', Lang.bind(this, this._allocateTop));
|
this.actor.connect('allocate', Lang.bind(this, this._allocateTop));
|
||||||
|
|
||||||
// Here we use a GenericContainer so that we can force all the
|
// Here we use a GenericContainer so that we can force all the
|
||||||
// children except the separator to have the same width.
|
// children to have the same width.
|
||||||
this._list = new Shell.GenericContainer({ style_class: 'switcher-list-item-container' });
|
this._list = new Shell.GenericContainer({ style_class: 'switcher-list-item-container' });
|
||||||
this._list.spacing = 0;
|
this._list.spacing = 0;
|
||||||
this._list.connect('style-changed', Lang.bind(this, function() {
|
this._list.connect('style-changed', Lang.bind(this, function() {
|
||||||
@@ -339,7 +340,6 @@ const SwitcherList = new Lang.Class({
|
|||||||
|
|
||||||
this._items = [];
|
this._items = [];
|
||||||
this._highlighted = -1;
|
this._highlighted = -1;
|
||||||
this._separator = null;
|
|
||||||
this._squareItems = squareItems;
|
this._squareItems = squareItems;
|
||||||
this._minSize = 0;
|
this._minSize = 0;
|
||||||
this._scrollableRight = true;
|
this._scrollableRight = true;
|
||||||
@@ -402,12 +402,6 @@ const SwitcherList = new Lang.Class({
|
|||||||
this._itemEntered(index);
|
this._itemEntered(index);
|
||||||
},
|
},
|
||||||
|
|
||||||
addSeparator: function () {
|
|
||||||
let box = new St.Bin({ style_class: 'separator' });
|
|
||||||
this._separator = box;
|
|
||||||
this._list.add_actor(box);
|
|
||||||
},
|
|
||||||
|
|
||||||
highlight: function(index, justOutline) {
|
highlight: function(index, justOutline) {
|
||||||
if (this._highlighted != -1) {
|
if (this._highlighted != -1) {
|
||||||
this._items[this._highlighted].remove_style_pseudo_class('outlined');
|
this._items[this._highlighted].remove_style_pseudo_class('outlined');
|
||||||
@@ -515,14 +509,8 @@ const SwitcherList = new Lang.Class({
|
|||||||
_getPreferredWidth: function (actor, forHeight, alloc) {
|
_getPreferredWidth: function (actor, forHeight, alloc) {
|
||||||
let [maxChildMin, maxChildNat] = this._maxChildWidth(forHeight);
|
let [maxChildMin, maxChildNat] = this._maxChildWidth(forHeight);
|
||||||
|
|
||||||
let separatorWidth = 0;
|
|
||||||
if (this._separator) {
|
|
||||||
let [sepMin, sepNat] = this._separator.get_preferred_width(forHeight);
|
|
||||||
separatorWidth = sepNat + this._list.spacing;
|
|
||||||
}
|
|
||||||
|
|
||||||
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
||||||
alloc.min_size = this._items.length * maxChildMin + separatorWidth + totalSpacing;
|
alloc.min_size = this._items.length * maxChildMin + totalSpacing;
|
||||||
alloc.natural_size = alloc.min_size;
|
alloc.natural_size = alloc.min_size;
|
||||||
this._minSize = alloc.min_size;
|
this._minSize = alloc.min_size;
|
||||||
},
|
},
|
||||||
@@ -553,14 +541,7 @@ const SwitcherList = new Lang.Class({
|
|||||||
let [maxChildMin, maxChildNat] = this._maxChildWidth(childHeight);
|
let [maxChildMin, maxChildNat] = this._maxChildWidth(childHeight);
|
||||||
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
||||||
|
|
||||||
let separatorWidth = 0;
|
let childWidth = Math.floor(Math.max(0, box.x2 - box.x1 - totalSpacing) / this._items.length);
|
||||||
if (this._separator) {
|
|
||||||
let [sepMin, sepNat] = this._separator.get_preferred_width(childHeight);
|
|
||||||
separatorWidth = sepNat;
|
|
||||||
totalSpacing += this._list.spacing;
|
|
||||||
}
|
|
||||||
|
|
||||||
let childWidth = Math.floor(Math.max(0, box.x2 - box.x1 - totalSpacing - separatorWidth) / this._items.length);
|
|
||||||
|
|
||||||
let x = 0;
|
let x = 0;
|
||||||
let children = this._list.get_children();
|
let children = this._list.get_children();
|
||||||
@@ -580,14 +561,6 @@ const SwitcherList = new Lang.Class({
|
|||||||
children[i].allocate(childBox, flags);
|
children[i].allocate(childBox, flags);
|
||||||
|
|
||||||
x += this._list.spacing + childWidth;
|
x += this._list.spacing + childWidth;
|
||||||
} else if (children[i] == this._separator) {
|
|
||||||
// We want the separator to be more compact than the rest.
|
|
||||||
childBox.x1 = x;
|
|
||||||
childBox.y1 = 0;
|
|
||||||
childBox.x2 = x + separatorWidth;
|
|
||||||
childBox.y2 = childHeight;
|
|
||||||
children[i].allocate(childBox, flags);
|
|
||||||
x += this._list.spacing + separatorWidth;
|
|
||||||
} else {
|
} else {
|
||||||
// Something else, eg, AppSwitcher's arrows;
|
// Something else, eg, AppSwitcher's arrows;
|
||||||
// we don't allocate it.
|
// we don't allocate it.
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
@@ -45,12 +45,9 @@ const Tweener = imports.tweener.tweener;
|
|||||||
// calls any of these is almost certainly wrong anyway, because they
|
// calls any of these is almost certainly wrong anyway, because they
|
||||||
// affect the entire application.)
|
// affect the entire application.)
|
||||||
|
|
||||||
let animationSettings = null;
|
|
||||||
|
|
||||||
// Called from Main.start
|
// Called from Main.start
|
||||||
function init() {
|
function init() {
|
||||||
Tweener.setFrameTicker(new ClutterFrameTicker());
|
Tweener.setFrameTicker(new ClutterFrameTicker());
|
||||||
animationSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -77,7 +74,7 @@ function _wrapTweening(target, tweeningParameters) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!animationSettings.get_boolean('enable-animations'))
|
if (!Gtk.Settings.get_default().gtk_enable_animations)
|
||||||
tweeningParameters['time'] = 0.000001;
|
tweeningParameters['time'] = 0.000001;
|
||||||
|
|
||||||
_addHandler(target, tweeningParameters, 'onStart', _tweenStarted);
|
_addHandler(target, tweeningParameters, 'onStart', _tweenStarted);
|
||||||
|
@@ -52,6 +52,7 @@ const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session
|
|||||||
<property name="Remote" type="b" access="read"/>
|
<property name="Remote" type="b" access="read"/>
|
||||||
<property name="Class" type="s" access="read"/>
|
<property name="Class" type="s" access="read"/>
|
||||||
<property name="Type" type="s" access="read"/>
|
<property name="Type" type="s" access="read"/>
|
||||||
|
<property name="State" type="s" access="read"/>
|
||||||
</interface>;
|
</interface>;
|
||||||
|
|
||||||
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
|
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
|
||||||
@@ -888,6 +889,7 @@ const UserMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
let descriptionLabel = new St.Label({ style_class: 'end-session-dialog-description'});
|
let descriptionLabel = new St.Label({ style_class: 'end-session-dialog-description'});
|
||||||
descriptionLabel.set_text(_("Shutting down might cause them to lose unsaved work."));
|
descriptionLabel.set_text(_("Shutting down might cause them to lose unsaved work."));
|
||||||
|
descriptionLabel.clutter_text.line_wrap = true;
|
||||||
dialog.contentLayout.add(descriptionLabel, { x_fill: true,
|
dialog.contentLayout.add(descriptionLabel, { x_fill: true,
|
||||||
y_fill: true,
|
y_fill: true,
|
||||||
y_align: St.Align.START });
|
y_align: St.Align.START });
|
||||||
@@ -961,6 +963,9 @@ const UserMenuButton = new Lang.Class({
|
|||||||
if (proxy.Class != 'user')
|
if (proxy.Class != 'user')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (proxy.State == 'closing')
|
||||||
|
continue;
|
||||||
|
|
||||||
if (proxy.Id == GLib.getenv('XDG_SESSION_ID'))
|
if (proxy.Id == GLib.getenv('XDG_SESSION_ID'))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@@ -83,11 +83,10 @@ const ViewSelector = new Lang.Class({
|
|||||||
this._entry.connect('notify::mapped', Lang.bind(this, this._onMapped));
|
this._entry.connect('notify::mapped', Lang.bind(this, this._onMapped));
|
||||||
global.stage.connect('notify::key-focus', Lang.bind(this, this._onStageKeyFocusChanged));
|
global.stage.connect('notify::key-focus', Lang.bind(this, this._onStageKeyFocusChanged));
|
||||||
|
|
||||||
this._inactiveIcon = new St.Icon({ style_class: 'search-entry-icon',
|
this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon',
|
||||||
icon_name: 'edit-find-symbolic' });
|
icon_name: 'edit-find-symbolic' }));
|
||||||
this._activeIcon = new St.Icon({ style_class: 'search-entry-icon',
|
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
||||||
icon_name: 'edit-clear-symbolic' });
|
icon_name: 'edit-clear-symbolic' });
|
||||||
this._entry.set_secondary_icon(this._inactiveIcon);
|
|
||||||
|
|
||||||
this._iconClickedId = 0;
|
this._iconClickedId = 0;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
@@ -279,8 +278,7 @@ const ViewSelector = new Lang.Class({
|
|||||||
else
|
else
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
return true;
|
return true;
|
||||||
} else if (Clutter.keysym_to_unicode(symbol) ||
|
} else if (this._shouldTriggerSearch(symbol)) {
|
||||||
(symbol == Clutter.BackSpace && this._searchActive)) {
|
|
||||||
this.startSearch(event);
|
this.startSearch(event);
|
||||||
} else if (!this._searchActive) {
|
} else if (!this._searchActive) {
|
||||||
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
|
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
|
||||||
@@ -345,6 +343,17 @@ const ViewSelector = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_shouldTriggerSearch: function(symbol) {
|
||||||
|
let unicode = Clutter.keysym_to_unicode(symbol);
|
||||||
|
if (unicode == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return symbol == Clutter.BackSpace && this._searchActive;
|
||||||
|
},
|
||||||
|
|
||||||
startSearch: function(event) {
|
startSearch: function(event) {
|
||||||
global.stage.set_key_focus(this._text);
|
global.stage.set_key_focus(this._text);
|
||||||
this._text.event(event, true);
|
this._text.event(event, true);
|
||||||
@@ -366,7 +375,7 @@ const ViewSelector = new Lang.Class({
|
|||||||
this._searchResults.startingSearch();
|
this._searchResults.startingSearch();
|
||||||
|
|
||||||
if (this._searchActive) {
|
if (this._searchActive) {
|
||||||
this._entry.set_secondary_icon(this._activeIcon);
|
this._entry.set_secondary_icon(this._clearIcon);
|
||||||
|
|
||||||
if (this._iconClickedId == 0)
|
if (this._iconClickedId == 0)
|
||||||
this._iconClickedId = this._entry.connect('secondary-icon-clicked',
|
this._iconClickedId = this._entry.connect('secondary-icon-clicked',
|
||||||
@@ -386,7 +395,7 @@ const ViewSelector = new Lang.Class({
|
|||||||
this._searchTimeoutId = 0;
|
this._searchTimeoutId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._entry.set_secondary_icon(this._inactiveIcon);
|
this._entry.set_secondary_icon(null);
|
||||||
this._searchCancelled();
|
this._searchCancelled();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -502,6 +511,22 @@ const ViewSelector = new Lang.Class({
|
|||||||
return ViewPage.APPS;
|
return ViewPage.APPS;
|
||||||
else
|
else
|
||||||
return ViewPage.SEARCH;
|
return ViewPage.SEARCH;
|
||||||
|
},
|
||||||
|
|
||||||
|
fadeIn: function() {
|
||||||
|
let actor = this._activePage;
|
||||||
|
Tweener.addTween(actor, { opacity: 255,
|
||||||
|
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / 2,
|
||||||
|
transition: 'easeInQuad'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
fadeHalf: function() {
|
||||||
|
let actor = this._activePage;
|
||||||
|
Tweener.addTween(actor, { opacity: 128,
|
||||||
|
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / 2,
|
||||||
|
transition: 'easeOutQuad'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(ViewSelector.prototype);
|
Signals.addSignalMethods(ViewSelector.prototype);
|
||||||
|
@@ -174,15 +174,6 @@ const WindowManager = new Lang.Class({
|
|||||||
Meta.KeyBindingFlags.NONE,
|
Meta.KeyBindingFlags.NONE,
|
||||||
Shell.KeyBindingMode.NORMAL,
|
Shell.KeyBindingMode.NORMAL,
|
||||||
Lang.bind(this, this._openAppMenu));
|
Lang.bind(this, this._openAppMenu));
|
||||||
|
|
||||||
Main.overview.connect('showing', Lang.bind(this, function() {
|
|
||||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
|
||||||
this._undimWindow(this._dimmedWindows[i]);
|
|
||||||
}));
|
|
||||||
Main.overview.connect('hiding', Lang.bind(this, function() {
|
|
||||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
|
||||||
this._dimWindow(this._dimmedWindows[i]);
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
setCustomKeybindingHandler: function(name, modes, handler) {
|
setCustomKeybindingHandler: function(name, modes, handler) {
|
||||||
@@ -342,14 +333,12 @@ const WindowManager = new Lang.Class({
|
|||||||
if (shouldDim && !window._dimmed) {
|
if (shouldDim && !window._dimmed) {
|
||||||
window._dimmed = true;
|
window._dimmed = true;
|
||||||
this._dimmedWindows.push(window);
|
this._dimmedWindows.push(window);
|
||||||
if (!Main.overview.visible)
|
|
||||||
this._dimWindow(window);
|
this._dimWindow(window);
|
||||||
} else if (!shouldDim && window._dimmed) {
|
} else if (!shouldDim && window._dimmed) {
|
||||||
window._dimmed = false;
|
window._dimmed = false;
|
||||||
this._dimmedWindows = this._dimmedWindows.filter(function(win) {
|
this._dimmedWindows = this._dimmedWindows.filter(function(win) {
|
||||||
return win != window;
|
return win != window;
|
||||||
});
|
});
|
||||||
if (!Main.overview.visible)
|
|
||||||
this._undimWindow(window);
|
this._undimWindow(window);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -564,9 +553,9 @@ const WindowManager = new Lang.Class({
|
|||||||
|
|
||||||
let switchData = {};
|
let switchData = {};
|
||||||
this._switchData = switchData;
|
this._switchData = switchData;
|
||||||
switchData.inGroup = new Clutter.Group();
|
switchData.inGroup = new Clutter.Actor();
|
||||||
switchData.outGroup = new Clutter.Group();
|
switchData.outGroup = new Clutter.Actor();
|
||||||
switchData.movingWindowBin = new Clutter.Group();
|
switchData.movingWindowBin = new Clutter.Actor();
|
||||||
switchData.windows = [];
|
switchData.windows = [];
|
||||||
|
|
||||||
let wgroup = global.window_group;
|
let wgroup = global.window_group;
|
||||||
@@ -593,7 +582,7 @@ const WindowManager = new Lang.Class({
|
|||||||
switchData.windows.push({ window: window,
|
switchData.windows.push({ window: window,
|
||||||
parent: window.get_parent() });
|
parent: window.get_parent() });
|
||||||
window.reparent(switchData.inGroup);
|
window.reparent(switchData.inGroup);
|
||||||
window.show_all();
|
window.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,6 +15,7 @@ const Main = imports.ui.main;
|
|||||||
const Overview = imports.ui.overview;
|
const Overview = imports.ui.overview;
|
||||||
const Panel = imports.ui.panel;
|
const Panel = imports.ui.panel;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const WindowManager = imports.ui.windowManager;
|
||||||
|
|
||||||
const FOCUS_ANIMATION_TIME = 0.15;
|
const FOCUS_ANIMATION_TIME = 0.15;
|
||||||
|
|
||||||
@@ -41,6 +42,68 @@ function _interpolate(start, end, step) {
|
|||||||
return start + (end - start) * step;
|
return start + (end - start) * step;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const WindowCloneLayout = new Lang.Class({
|
||||||
|
Name: 'WindowCloneLayout',
|
||||||
|
Extends: Clutter.LayoutManager,
|
||||||
|
|
||||||
|
_init: function(boundingBox) {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this._boundingBox = boundingBox;
|
||||||
|
},
|
||||||
|
|
||||||
|
get boundingBox() {
|
||||||
|
return this._boundingBox;
|
||||||
|
},
|
||||||
|
|
||||||
|
set boundingBox(b) {
|
||||||
|
this._boundingBox = b;
|
||||||
|
this.layout_changed();
|
||||||
|
},
|
||||||
|
|
||||||
|
_makeBoxForWindow: function(window) {
|
||||||
|
// We need to adjust the position of the actor because of the
|
||||||
|
// consequences of invisible borders -- in reality, the texture
|
||||||
|
// has an extra set of "padding" around it that we need to trim
|
||||||
|
// down.
|
||||||
|
|
||||||
|
// The outer rect (from which we compute the bounding box)
|
||||||
|
// paradoxically is the smaller rectangle, containing the positions
|
||||||
|
// of the visible frame. The input rect contains everything,
|
||||||
|
// including the invisible border padding.
|
||||||
|
let inputRect = window.get_input_rect();
|
||||||
|
|
||||||
|
let box = new Clutter.ActorBox();
|
||||||
|
|
||||||
|
box.set_origin(inputRect.x - this._boundingBox.x,
|
||||||
|
inputRect.y - this._boundingBox.y);
|
||||||
|
box.set_size(inputRect.width, inputRect.height);
|
||||||
|
|
||||||
|
return box;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_height: function(container, forWidth) {
|
||||||
|
return [this._boundingBox.height, this._boundingBox.height];
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_width: function(container, forHeight) {
|
||||||
|
return [this._boundingBox.width, this._boundingBox.width];
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_allocate: function(container, box, flags) {
|
||||||
|
let clone = container.get_children().forEach(function (child) {
|
||||||
|
let realWindow;
|
||||||
|
if (child == container._delegate._windowClone)
|
||||||
|
realWindow = container._delegate.realWindow;
|
||||||
|
else
|
||||||
|
realWindow = child.source;
|
||||||
|
|
||||||
|
child.allocate(this._makeBoxForWindow(realWindow.meta_window),
|
||||||
|
flags);
|
||||||
|
}, this);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const WindowClone = new Lang.Class({
|
const WindowClone = new Lang.Class({
|
||||||
Name: 'WindowClone',
|
Name: 'WindowClone',
|
||||||
|
|
||||||
@@ -50,10 +113,7 @@ const WindowClone = new Lang.Class({
|
|||||||
this.metaWindow._delegate = this;
|
this.metaWindow._delegate = this;
|
||||||
this._workspace = workspace;
|
this._workspace = workspace;
|
||||||
|
|
||||||
let [borderX, borderY] = this._getInvisibleBorderPadding();
|
this._windowClone = new Clutter.Clone({ source: realWindow.get_texture() });
|
||||||
this._windowClone = new Clutter.Clone({ source: realWindow.get_texture(),
|
|
||||||
x: -borderX,
|
|
||||||
y: -borderY });
|
|
||||||
// We expect this.actor to be used for all interaction rather than
|
// We expect this.actor to be used for all interaction rather than
|
||||||
// this._windowClone; as the former is reactive and the latter
|
// this._windowClone; as the former is reactive and the latter
|
||||||
// is not, this just works for most cases. However, for DND all
|
// is not, this just works for most cases. However, for DND all
|
||||||
@@ -61,22 +121,17 @@ const WindowClone = new Lang.Class({
|
|||||||
// To avoid this, we hide it from pick.
|
// To avoid this, we hide it from pick.
|
||||||
Shell.util_set_hidden_from_pick(this._windowClone, true);
|
Shell.util_set_hidden_from_pick(this._windowClone, true);
|
||||||
|
|
||||||
this.origX = realWindow.x + borderX;
|
|
||||||
this.origY = realWindow.y + borderY;
|
|
||||||
|
|
||||||
let outerRect = realWindow.meta_window.get_outer_rect();
|
|
||||||
|
|
||||||
// The MetaShapedTexture that we clone has a size that includes
|
// The MetaShapedTexture that we clone has a size that includes
|
||||||
// the invisible border; this is inconvenient; rather than trying
|
// the invisible border; this is inconvenient; rather than trying
|
||||||
// to compensate all over the place we insert a ClutterGroup into
|
// to compensate all over the place we insert a custom container into
|
||||||
// the hierarchy that is sized to only the visible portion.
|
// the hierarchy that is sized to only the visible portion.
|
||||||
this.actor = new Clutter.Group({ reactive: true,
|
// As usual, we cannot use a ShellGenericContainer or StWidget here,
|
||||||
x: this.origX,
|
// because Workspace plays dirty tricks with reparenting to do DNDs
|
||||||
y: this.origY,
|
// and scroll-to-zoom.
|
||||||
width: outerRect.width,
|
this.actor = new Clutter.Actor({ reactive: true,
|
||||||
height: outerRect.height });
|
layout_manager: new WindowCloneLayout() });
|
||||||
|
|
||||||
this.actor.add_actor(this._windowClone);
|
this.actor.add_child(this._windowClone);
|
||||||
|
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
|
|
||||||
@@ -84,10 +139,19 @@ const WindowClone = new Lang.Class({
|
|||||||
this._dragSlot = [0, 0, 0, 0];
|
this._dragSlot = [0, 0, 0, 0];
|
||||||
this._stackAbove = null;
|
this._stackAbove = null;
|
||||||
|
|
||||||
this._sizeChangedId = this.realWindow.connect('size-changed',
|
this._windowClone._updateId = this.realWindow.connect('size-changed',
|
||||||
Lang.bind(this, this._onRealWindowSizeChanged));
|
Lang.bind(this, this._onRealWindowSizeChanged));
|
||||||
this._realWindowDestroyId = this.realWindow.connect('destroy',
|
this._windowClone._destroyId = this.realWindow.connect('destroy', Lang.bind(this, function() {
|
||||||
Lang.bind(this, this._disconnectRealWindowSignals));
|
// First destroy the clone and then destroy everything
|
||||||
|
// This will ensure that we never see it in the _disconnectSignals loop
|
||||||
|
this._windowClone.destroy();
|
||||||
|
this.destroy();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._updateAttachedDialogs();
|
||||||
|
this._computeBoundingBox();
|
||||||
|
this.actor.x = this._boundingBox.x;
|
||||||
|
this.actor.y = this._boundingBox.y;
|
||||||
|
|
||||||
let clickAction = new Clutter.ClickAction();
|
let clickAction = new Clutter.ClickAction();
|
||||||
clickAction.connect('clicked', Lang.bind(this, this._onClicked));
|
clickAction.connect('clicked', Lang.bind(this, this._onClicked));
|
||||||
@@ -121,6 +185,97 @@ const WindowClone = new Lang.Class({
|
|||||||
return this._slot;
|
return this._slot;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deleteAll: function() {
|
||||||
|
// Delete all windows, starting from the bottom-most (most-modal) one
|
||||||
|
|
||||||
|
let windows = this.actor.get_children();
|
||||||
|
for (let i = windows.length - 1; i >= 1; i--) {
|
||||||
|
let realWindow = windows[i].source;
|
||||||
|
let metaWindow = realWindow.meta_window;
|
||||||
|
|
||||||
|
metaWindow.delete(global.get_current_time());
|
||||||
|
}
|
||||||
|
|
||||||
|
this.metaWindow.delete(global.get_current_time());
|
||||||
|
},
|
||||||
|
|
||||||
|
addAttachedDialog: function(win) {
|
||||||
|
this._doAddAttachedDialog(win, win.get_compositor_private());
|
||||||
|
this._computeBoundingBox();
|
||||||
|
this._updateDimmer();
|
||||||
|
this.emit('size-changed');
|
||||||
|
},
|
||||||
|
|
||||||
|
_doAddAttachedDialog: function(metaWin, realWin) {
|
||||||
|
let clone = new Clutter.Clone({ source: realWin });
|
||||||
|
clone._updateId = realWin.connect('size-changed', Lang.bind(this, function() {
|
||||||
|
this._computeBoundingBox();
|
||||||
|
this.emit('size-changed');
|
||||||
|
}));
|
||||||
|
clone._destroyId = realWin.connect('destroy', Lang.bind(this, function() {
|
||||||
|
clone.destroy();
|
||||||
|
|
||||||
|
this._computeBoundingBox();
|
||||||
|
this._updateDimmer();
|
||||||
|
this.emit('size-changed');
|
||||||
|
}));
|
||||||
|
this.actor.add_child(clone);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateAttachedDialogs: function() {
|
||||||
|
let iter = Lang.bind(this, function(win) {
|
||||||
|
let actor = win.get_compositor_private();
|
||||||
|
|
||||||
|
if (!actor)
|
||||||
|
return false;
|
||||||
|
if (!win.is_attached_dialog())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
this._doAddAttachedDialog(win, actor);
|
||||||
|
win.foreach_transient(iter);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
this.metaWindow.foreach_transient(iter);
|
||||||
|
|
||||||
|
this._dimmer = new WindowManager.WindowDimmer(this._windowClone);
|
||||||
|
this._updateDimmer();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateDimmer: function() {
|
||||||
|
if (this.actor.get_n_children() > 1) {
|
||||||
|
this._dimmer.setEnabled(true);
|
||||||
|
this._dimmer.dimFactor = 1.0;
|
||||||
|
} else {
|
||||||
|
this._dimmer.setEnabled(false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
get boundingBox() {
|
||||||
|
return this._boundingBox;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOriginalPosition: function() {
|
||||||
|
return [this._boundingBox.x, this._boundingBox.y];
|
||||||
|
},
|
||||||
|
|
||||||
|
_computeBoundingBox: function() {
|
||||||
|
let rect = this.metaWindow.get_outer_rect();
|
||||||
|
|
||||||
|
this.actor.get_children().forEach(function (child) {
|
||||||
|
let realWindow;
|
||||||
|
if (child == this._windowClone)
|
||||||
|
realWindow = this.realWindow;
|
||||||
|
else
|
||||||
|
realWindow = child.source;
|
||||||
|
|
||||||
|
let metaWindow = realWindow.meta_window;
|
||||||
|
rect = rect.union(metaWindow.get_outer_rect());
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
this._boundingBox = rect;
|
||||||
|
this.actor.layout_manager.boundingBox = rect;
|
||||||
|
},
|
||||||
|
|
||||||
setStackAbove: function (actor) {
|
setStackAbove: function (actor) {
|
||||||
this._stackAbove = actor;
|
this._stackAbove = actor;
|
||||||
if (this.inDrag)
|
if (this.inDrag)
|
||||||
@@ -136,44 +291,26 @@ const WindowClone = new Lang.Class({
|
|||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
_disconnectRealWindowSignals: function() {
|
_disconnectSignals: function() {
|
||||||
if (this._sizeChangedId > 0)
|
this.actor.get_children().forEach(Lang.bind(this, function (child) {
|
||||||
this.realWindow.disconnect(this._sizeChangedId);
|
let realWindow;
|
||||||
this._sizeChangedId = 0;
|
if (child == this._windowClone)
|
||||||
|
realWindow = this.realWindow;
|
||||||
|
else
|
||||||
|
realWindow = child.source;
|
||||||
|
|
||||||
if (this._realWindowDestroyId > 0)
|
realWindow.disconnect(child._updateId);
|
||||||
this.realWindow.disconnect(this._realWindowDestroyId);
|
realWindow.disconnect(child._destroyId);
|
||||||
this._realWindowDestroyId = 0;
|
}));
|
||||||
},
|
|
||||||
|
|
||||||
_getInvisibleBorderPadding: function() {
|
|
||||||
// We need to adjust the position of the actor because of the
|
|
||||||
// consequences of invisible borders -- in reality, the texture
|
|
||||||
// has an extra set of "padding" around it that we need to trim
|
|
||||||
// down.
|
|
||||||
|
|
||||||
// The outer rect paradoxically is the smaller rectangle,
|
|
||||||
// containing the positions of the visible frame. The input
|
|
||||||
// rect contains everything, including the invisible border
|
|
||||||
// padding.
|
|
||||||
let outerRect = this.metaWindow.get_outer_rect();
|
|
||||||
let inputRect = this.metaWindow.get_input_rect();
|
|
||||||
let [borderX, borderY] = [outerRect.x - inputRect.x,
|
|
||||||
outerRect.y - inputRect.y];
|
|
||||||
|
|
||||||
return [borderX, borderY];
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onRealWindowSizeChanged: function() {
|
_onRealWindowSizeChanged: function() {
|
||||||
let [borderX, borderY] = this._getInvisibleBorderPadding();
|
this._computeBoundingBox();
|
||||||
let outerRect = this.metaWindow.get_outer_rect();
|
|
||||||
this.actor.set_size(outerRect.width, outerRect.height);
|
|
||||||
this._windowClone.set_position(-borderX, -borderY);
|
|
||||||
this.emit('size-changed');
|
this.emit('size-changed');
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
this._disconnectRealWindowSignals();
|
this._disconnectSignals();
|
||||||
|
|
||||||
this.metaWindow._delegate = null;
|
this.metaWindow._delegate = null;
|
||||||
this.actor._delegate = null;
|
this.actor._delegate = null;
|
||||||
@@ -432,7 +569,7 @@ const WindowOverlay = new Lang.Class({
|
|||||||
Lang.bind(this,
|
Lang.bind(this,
|
||||||
this._onWindowAdded));
|
this._onWindowAdded));
|
||||||
|
|
||||||
metaWindow.delete(global.get_current_time());
|
this._windowClone.deleteAll();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onWindowAdded: function(workspace, win) {
|
_onWindowAdded: function(workspace, win) {
|
||||||
@@ -561,6 +698,80 @@ const WindowPositionFlags = {
|
|||||||
ANIMATE: 1 << 1
|
ANIMATE: 1 << 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Window Thumbnail Layout Algorithm
|
||||||
|
// =================================
|
||||||
|
//
|
||||||
|
// General overview
|
||||||
|
// ----------------
|
||||||
|
//
|
||||||
|
// The window thumbnail layout algorithm calculates some optimal layout
|
||||||
|
// by computing layouts with some number of rows, calculating how good
|
||||||
|
// each layout is, and stopping iterating when it finds one that is worse
|
||||||
|
// than the previous layout. A layout consists of which windows are in
|
||||||
|
// which rows, row sizes and other general state tracking that would make
|
||||||
|
// calculating window positions from this information fairly easy.
|
||||||
|
//
|
||||||
|
// We don't compute some global order of windows right now for optimal
|
||||||
|
// travel when animating into the overview; windows are assumed to be
|
||||||
|
// in some stable order.
|
||||||
|
//
|
||||||
|
// After a layout is computed that's considered the best layout, we
|
||||||
|
// compute the layout scale to fit it in the area, and then compute
|
||||||
|
// slots (sizes and positions) for each thumbnail.
|
||||||
|
//
|
||||||
|
// Layout generation
|
||||||
|
// -----------------
|
||||||
|
//
|
||||||
|
// Layout generation is naive and simple: we simply add windows to a row
|
||||||
|
// until we've added too many windows to a row, and then make a new row,
|
||||||
|
// until we have our required N rows. The potential issue with this strategy
|
||||||
|
// is that we may have too many windows at the bottom in some pathological
|
||||||
|
// cases, which tends to make the thumbnails have the shape of a pile of
|
||||||
|
// sand with a peak, with one window at the top.
|
||||||
|
//
|
||||||
|
// Scaling factors
|
||||||
|
// ---------------
|
||||||
|
//
|
||||||
|
// Thumbnail position is mostly straightforward -- the main issue is
|
||||||
|
// computing an optimal scale for each window that fits the constraints,
|
||||||
|
// and doesn't make the thumbnail too small to see. There are two factors
|
||||||
|
// involved in thumbnail scale to make sure that these two goals are met:
|
||||||
|
// the window scale (calculated by _computeWindowScale) and the layout
|
||||||
|
// scale (calculated by computeSizeAndScale).
|
||||||
|
//
|
||||||
|
// The calculation logic becomes slightly more complicated because row
|
||||||
|
// and column spacing are not scaled, they're constant, so we can't
|
||||||
|
// simply generate a bunch of window positions and then scale it. In
|
||||||
|
// practice, it's not too bad -- we can simply try to fit the layout
|
||||||
|
// in the input area minus whatever spacing we have, and then add
|
||||||
|
// it back afterwards.
|
||||||
|
//
|
||||||
|
// The window scale is constant for the window's size regardless of the
|
||||||
|
// input area or the layout scale or rows or anything else, and right
|
||||||
|
// now just enlarges the window if it's too small. The fact that this
|
||||||
|
// factor is stable makes it easy to calculate, so there's no sense
|
||||||
|
// in not applying it in most calculations.
|
||||||
|
//
|
||||||
|
// The layout scale depends on the input area, the rows, etc, but is the
|
||||||
|
// same for the entire layout, rather than being per-window. After
|
||||||
|
// generating the rows of windows, we basically do some basic math to
|
||||||
|
// fit the full, unscaled layout to the input area, as described above.
|
||||||
|
//
|
||||||
|
// With these two factors combined, the final scale of each thumbnail is
|
||||||
|
// simply windowScale * layoutScale... almost.
|
||||||
|
//
|
||||||
|
// There's one additional constraint: the thumbnail scale must never be
|
||||||
|
// larger than WINDOW_CLONE_MAXIMUM_SCALE, which means that the inequality:
|
||||||
|
//
|
||||||
|
// windowScale * layoutScale <= WINDOW_CLONE_MAXIMUM_SCALE
|
||||||
|
//
|
||||||
|
// must always be true. This is for each individual window -- while we
|
||||||
|
// could adjust layoutScale to make the largest thumbnail smaller than
|
||||||
|
// WINDOW_CLONE_MAXIMUM_SCALE, it would shrink windows which are already
|
||||||
|
// under the inequality. To solve this, we simply cheat: we simply keep
|
||||||
|
// each window's "cell" area to be the same, but we shrink the thumbnail
|
||||||
|
// and center it horizontally, and align it to the bottom vertically.
|
||||||
|
|
||||||
const LayoutStrategy = new Lang.Class({
|
const LayoutStrategy = new Lang.Class({
|
||||||
Name: 'LayoutStrategy',
|
Name: 'LayoutStrategy',
|
||||||
Abstract: true,
|
Abstract: true,
|
||||||
@@ -583,19 +794,15 @@ const LayoutStrategy = new Lang.Class({
|
|||||||
// meant to be scaled
|
// meant to be scaled
|
||||||
//
|
//
|
||||||
// * neither height/fullHeight have any sort of spacing or padding
|
// * neither height/fullHeight have any sort of spacing or padding
|
||||||
//
|
|
||||||
// * if cellWidth is present, all windows in the row will occupy
|
|
||||||
// the space of cellWidth, centered.
|
|
||||||
return { x: 0, y: 0,
|
return { x: 0, y: 0,
|
||||||
width: 0, height: 0,
|
width: 0, height: 0,
|
||||||
fullWidth: 0, fullHeight: 0,
|
fullWidth: 0, fullHeight: 0,
|
||||||
cellWidth: 0,
|
|
||||||
windows: [] };
|
windows: [] };
|
||||||
},
|
},
|
||||||
|
|
||||||
// Computes and returns a fancy scale for @window using the
|
// Computes and returns an individual scaling factor for @window,
|
||||||
// base scale, @scale.
|
// to be applied in addition to the overal layout scale.
|
||||||
_computeWindowScale: function(window, scale) {
|
_computeWindowScale: function(window) {
|
||||||
// Since we align windows next to each other, the height of the
|
// Since we align windows next to each other, the height of the
|
||||||
// thumbnails is much more important to preserve than the width of
|
// thumbnails is much more important to preserve than the width of
|
||||||
// them, so two windows with equal height, but maybe differering
|
// them, so two windows with equal height, but maybe differering
|
||||||
@@ -608,14 +815,13 @@ const LayoutStrategy = new Lang.Class({
|
|||||||
// good. We'll use a multiplier of 1.5 for this.
|
// good. We'll use a multiplier of 1.5 for this.
|
||||||
|
|
||||||
// Map from [0, 1] to [1.5, 1]
|
// Map from [0, 1] to [1.5, 1]
|
||||||
let fancyScale = _interpolate(1.5, 1, ratio) * scale;
|
return _interpolate(1.5, 1, ratio);
|
||||||
return fancyScale;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Compute the size of each row, by assigning to the properties
|
// Compute the size of each row, by assigning to the properties
|
||||||
// row.width, row.height, row.fullWidth, row.fullHeight, and
|
// row.width, row.height, row.fullWidth, row.fullHeight, and
|
||||||
// (optionally) row.cellWidth, for each row in @layout.rows.
|
// (optionally) for each row in @layout.rows. This method is
|
||||||
// This method is intended to be called by subclasses.
|
// intended to be called by subclasses.
|
||||||
_computeRowSizes: function(layout) {
|
_computeRowSizes: function(layout) {
|
||||||
throw new Error('_computeRowSizes not implemented');
|
throw new Error('_computeRowSizes not implemented');
|
||||||
},
|
},
|
||||||
@@ -676,7 +882,7 @@ const LayoutStrategy = new Lang.Class({
|
|||||||
computeWindowSlots: function(layout, area) {
|
computeWindowSlots: function(layout, area) {
|
||||||
this._computeRowSizes(layout);
|
this._computeRowSizes(layout);
|
||||||
|
|
||||||
let { rows: rows, scale: scale, state: state } = layout;
|
let { rows: rows, scale: scale } = layout;
|
||||||
|
|
||||||
let slots = [];
|
let slots = [];
|
||||||
|
|
||||||
@@ -697,24 +903,22 @@ const LayoutStrategy = new Lang.Class({
|
|||||||
for (let i = 0; i < rows.length; i++) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
let row = rows[i];
|
let row = rows[i];
|
||||||
row.y += baseY;
|
row.y += baseY;
|
||||||
let baseX = row.x;
|
let x = row.x;
|
||||||
for (let j = 0; j < row.windows.length; j++) {
|
for (let j = 0; j < row.windows.length; j++) {
|
||||||
let window = row.windows[j];
|
let window = row.windows[j];
|
||||||
|
|
||||||
let s = this._computeWindowScale(window, scale);
|
let s = scale * this._computeWindowScale(window);
|
||||||
|
let cellWidth = window.actor.width * s;
|
||||||
|
let cellHeight = window.actor.height * s;
|
||||||
|
|
||||||
s = Math.min(s, WINDOW_CLONE_MAXIMUM_SCALE);
|
s = Math.min(s, WINDOW_CLONE_MAXIMUM_SCALE);
|
||||||
let width = window.actor.width * s;
|
let cloneWidth = window.actor.width * s;
|
||||||
let height = window.actor.height * s;
|
|
||||||
let y = row.y + row.height - height;
|
|
||||||
|
|
||||||
let x = baseX;
|
let cloneX = x + (cellWidth - cloneWidth) / 2;
|
||||||
if (row.cellWidth) {
|
let cloneY = row.y + row.height - cellHeight;
|
||||||
x += (row.cellWidth - width) / 2;
|
|
||||||
width = row.cellWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
slots.push([x, y, s, window]);
|
slots.push([cloneX, cloneY, s, window]);
|
||||||
baseX += width + this._columnSpacing;
|
x += cellWidth + this._columnSpacing;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return slots;
|
return slots;
|
||||||
@@ -753,7 +957,9 @@ const UnalignedLayoutStrategy = new Lang.Class({
|
|||||||
let rows = [];
|
let rows = [];
|
||||||
let totalWidth = 0;
|
let totalWidth = 0;
|
||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
totalWidth += windows[i].actor.width;
|
let window = windows[i];
|
||||||
|
let s = this._computeWindowScale(window);
|
||||||
|
totalWidth += window.actor.width * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
let idealRowWidth = totalWidth / numRows;
|
let idealRowWidth = totalWidth / numRows;
|
||||||
@@ -765,7 +971,7 @@ const UnalignedLayoutStrategy = new Lang.Class({
|
|||||||
|
|
||||||
for (; windowIdx < windows.length; windowIdx++) {
|
for (; windowIdx < windows.length; windowIdx++) {
|
||||||
let window = windows[windowIdx];
|
let window = windows[windowIdx];
|
||||||
let s = this._computeWindowScale(window, 1);
|
let s = this._computeWindowScale(window);
|
||||||
let width = window.actor.width * s;
|
let width = window.actor.width * s;
|
||||||
let height = window.actor.height * s;
|
let height = window.actor.height * s;
|
||||||
row.fullHeight = Math.max(row.fullHeight, height);
|
row.fullHeight = Math.max(row.fullHeight, height);
|
||||||
@@ -814,7 +1020,7 @@ const Workspace = new Lang.Class({
|
|||||||
|
|
||||||
this.monitorIndex = monitorIndex;
|
this.monitorIndex = monitorIndex;
|
||||||
this._monitor = Main.layoutManager.monitors[this.monitorIndex];
|
this._monitor = Main.layoutManager.monitors[this.monitorIndex];
|
||||||
this._windowOverlaysGroup = new Clutter.Group();
|
this._windowOverlaysGroup = new Clutter.Actor();
|
||||||
// Without this the drop area will be overlapped.
|
// Without this the drop area will be overlapped.
|
||||||
this._windowOverlaysGroup.set_size(0, 0);
|
this._windowOverlaysGroup.set_size(0, 0);
|
||||||
|
|
||||||
@@ -1151,9 +1357,29 @@ const Workspace = new Lang.Class({
|
|||||||
if (this._lookupIndex (metaWin) != -1)
|
if (this._lookupIndex (metaWin) != -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
|
if (!this._isMyWindow(win))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!this._isOverviewWindow(win)) {
|
||||||
|
if (metaWin.is_attached_dialog()) {
|
||||||
|
let parent = metaWin.get_transient_for();
|
||||||
|
while (parent.is_attached_dialog())
|
||||||
|
parent = metaWin.get_transient_for();
|
||||||
|
|
||||||
|
let idx = this._lookupIndex (parent);
|
||||||
|
if (idx < 0) {
|
||||||
|
// parent was not created yet, it will take care
|
||||||
|
// of the dialog when created
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let clone = this._windows[idx];
|
||||||
|
clone.addAttachedDialog(metaWin);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let [clone, overlay] = this._addWindowClone(win);
|
let [clone, overlay] = this._addWindowClone(win);
|
||||||
|
|
||||||
if (win._overviewHint) {
|
if (win._overviewHint) {
|
||||||
@@ -1252,9 +1478,11 @@ const Workspace = new Lang.Class({
|
|||||||
overlay.hide();
|
overlay.hide();
|
||||||
|
|
||||||
if (clone.metaWindow.showing_on_its_workspace()) {
|
if (clone.metaWindow.showing_on_its_workspace()) {
|
||||||
|
let [origX, origY] = clone.getOriginalPosition();
|
||||||
|
|
||||||
Tweener.addTween(clone.actor,
|
Tweener.addTween(clone.actor,
|
||||||
{ x: clone.origX,
|
{ x: origX,
|
||||||
y: clone.origY,
|
y: origY,
|
||||||
scale_x: 1.0,
|
scale_x: 1.0,
|
||||||
scale_y: 1.0,
|
scale_y: 1.0,
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
@@ -1349,6 +1577,11 @@ const Workspace = new Lang.Class({
|
|||||||
|
|
||||||
overlay.connect('show-close-button', Lang.bind(this, this._onShowOverlayClose));
|
overlay.connect('show-close-button', Lang.bind(this, this._onShowOverlayClose));
|
||||||
|
|
||||||
|
if (this._windows.length == 0)
|
||||||
|
clone.setStackAbove(null);
|
||||||
|
else
|
||||||
|
clone.setStackAbove(this._windows[this._windows.length - 1].actor);
|
||||||
|
|
||||||
this._windows.push(clone);
|
this._windows.push(clone);
|
||||||
this._windowOverlays.push(overlay);
|
this._windowOverlays.push(overlay);
|
||||||
|
|
||||||
|
@@ -13,6 +13,7 @@ const Background = imports.ui.background;
|
|||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const WindowManager = imports.ui.windowManager;
|
||||||
const Workspace = imports.ui.workspace;
|
const Workspace = imports.ui.workspace;
|
||||||
const WorkspacesView = imports.ui.workspacesView;
|
const WorkspacesView = imports.ui.workspacesView;
|
||||||
|
|
||||||
@@ -31,20 +32,49 @@ const WORKSPACE_KEEP_ALIVE_TIME = 100;
|
|||||||
|
|
||||||
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
||||||
|
|
||||||
|
/* A layout manager that requests size only for primary_actor, but then allocates
|
||||||
|
all using a fixed layout */
|
||||||
|
const PrimaryActorLayout = new Lang.Class({
|
||||||
|
Name: 'PrimaryActorLayout',
|
||||||
|
Extends: Clutter.FixedLayout,
|
||||||
|
|
||||||
|
_init: function(primaryActor) {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this.primaryActor = primaryActor;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_width: function(forHeight) {
|
||||||
|
return this.primaryActor.get_preferred_width(forHeight);
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_get_preferred_height: function(forWidth) {
|
||||||
|
return this.primaryActor.get_preferred_height(forWidth);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const WindowClone = new Lang.Class({
|
const WindowClone = new Lang.Class({
|
||||||
Name: 'WindowClone',
|
Name: 'WindowClone',
|
||||||
|
|
||||||
_init : function(realWindow) {
|
_init : function(realWindow) {
|
||||||
this.actor = new Clutter.Clone({ source: realWindow.get_texture(),
|
this.clone = new Clutter.Clone({ source: realWindow });
|
||||||
|
|
||||||
|
/* Can't use a Shell.GenericContainer because of DND and reparenting... */
|
||||||
|
this.actor = new Clutter.Actor({ layout_manager: new PrimaryActorLayout(this.clone),
|
||||||
reactive: true });
|
reactive: true });
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
|
this.actor.add_child(this.clone);
|
||||||
this.realWindow = realWindow;
|
this.realWindow = realWindow;
|
||||||
this.metaWindow = realWindow.meta_window;
|
this.metaWindow = realWindow.meta_window;
|
||||||
|
|
||||||
this._positionChangedId = this.realWindow.connect('position-changed',
|
this.clone._updateId = this.realWindow.connect('position-changed',
|
||||||
Lang.bind(this, this._onPositionChanged));
|
Lang.bind(this, this._onPositionChanged));
|
||||||
this._realWindowDestroyedId = this.realWindow.connect('destroy',
|
this.clone._destroyId = this.realWindow.connect('destroy', Lang.bind(this, function() {
|
||||||
Lang.bind(this, this._disconnectRealWindowSignals));
|
// First destroy the clone and then destroy everything
|
||||||
|
// This will ensure that we never see it in the _disconnectSignals loop
|
||||||
|
this.clone.destroy();
|
||||||
|
this.destroy();
|
||||||
|
}));
|
||||||
this._onPositionChanged();
|
this._onPositionChanged();
|
||||||
|
|
||||||
this.actor.connect('button-release-event',
|
this.actor.connect('button-release-event',
|
||||||
@@ -60,6 +90,24 @@ const WindowClone = new Lang.Class({
|
|||||||
this._draggable.connect('drag-cancelled', Lang.bind(this, this._onDragCancelled));
|
this._draggable.connect('drag-cancelled', Lang.bind(this, this._onDragCancelled));
|
||||||
this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
this._draggable.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
||||||
this.inDrag = false;
|
this.inDrag = false;
|
||||||
|
|
||||||
|
let iter = Lang.bind(this, function(win) {
|
||||||
|
let actor = win.get_compositor_private();
|
||||||
|
|
||||||
|
if (!actor)
|
||||||
|
return false;
|
||||||
|
if (!win.is_attached_dialog())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
this._doAddAttachedDialog(win, actor);
|
||||||
|
win.foreach_transient(iter);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
this.metaWindow.foreach_transient(iter);
|
||||||
|
|
||||||
|
this._dimmer = new WindowManager.WindowDimmer(this.clone);
|
||||||
|
this._updateDimmer();
|
||||||
},
|
},
|
||||||
|
|
||||||
setStackAbove: function (actor) {
|
setStackAbove: function (actor) {
|
||||||
@@ -74,25 +122,57 @@ const WindowClone = new Lang.Class({
|
|||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
addAttachedDialog: function(win) {
|
||||||
|
this._doAddAttachedDialog(win, win.get_compositor_private());
|
||||||
|
this._updateDimmer();
|
||||||
|
},
|
||||||
|
|
||||||
|
_doAddAttachedDialog: function(metaDialog, realDialog) {
|
||||||
|
let clone = new Clutter.Clone({ source: realDialog });
|
||||||
|
this._updateDialogPosition(realDialog, clone);
|
||||||
|
|
||||||
|
clone._updateId = realDialog.connect('position-changed',
|
||||||
|
Lang.bind(this, this._updateDialogPosition, clone));
|
||||||
|
clone._destroyId = realDialog.connect('destroy', Lang.bind(this, function() {
|
||||||
|
clone.destroy();
|
||||||
|
this._updateDimmer();
|
||||||
|
}));
|
||||||
|
this.actor.add_child(clone);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateDimmer: function() {
|
||||||
|
if (this.actor.get_n_children() > 1) {
|
||||||
|
this._dimmer.setEnabled(true);
|
||||||
|
this._dimmer.dimFactor = 1.0;
|
||||||
|
} else {
|
||||||
|
this._dimmer.setEnabled(false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateDialogPosition: function(realDialog, cloneDialog) {
|
||||||
|
let metaDialog = realDialog.meta_window;
|
||||||
|
let dialogRect = metaDialog.get_outer_rect();
|
||||||
|
let rect = this.metaWindow.get_outer_rect();
|
||||||
|
|
||||||
|
cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y);
|
||||||
|
},
|
||||||
|
|
||||||
_onPositionChanged: function() {
|
_onPositionChanged: function() {
|
||||||
let rect = this.metaWindow.get_outer_rect();
|
let rect = this.metaWindow.get_outer_rect();
|
||||||
this.actor.set_position(this.realWindow.x, this.realWindow.y);
|
this.actor.set_position(this.realWindow.x, this.realWindow.y);
|
||||||
},
|
},
|
||||||
|
|
||||||
_disconnectRealWindowSignals: function() {
|
_disconnectSignals: function() {
|
||||||
if (this._positionChangedId != 0) {
|
this.actor.get_children().forEach(function(child) {
|
||||||
this.realWindow.disconnect(this._positionChangedId);
|
let realWindow = child.source;
|
||||||
this._positionChangedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._realWindowDestroyedId != 0) {
|
realWindow.disconnect(child._updateId);
|
||||||
this.realWindow.disconnect(this._realWindowDestroyedId);
|
realWindow.disconnect(child._destroyId);
|
||||||
this._realWindowDestroyedId = 0;
|
});
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
this._disconnectRealWindowSignals();
|
this._disconnectSignals();
|
||||||
|
|
||||||
this.actor._delegate = null;
|
this.actor._delegate = null;
|
||||||
|
|
||||||
@@ -166,8 +246,8 @@ const WorkspaceThumbnail = new Lang.Class({
|
|||||||
style_class: 'workspace-thumbnail' });
|
style_class: 'workspace-thumbnail' });
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
|
|
||||||
this._contents = new Clutter.Group();
|
this._contents = new Clutter.Actor();
|
||||||
this.actor.add_actor(this._contents);
|
this.actor.add_child(this._contents);
|
||||||
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
@@ -320,10 +400,26 @@ const WorkspaceThumbnail = new Lang.Class({
|
|||||||
if (this._lookupIndex (metaWin) != -1)
|
if (this._lookupIndex (metaWin) != -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this._isMyWindow(win) || !this._isOverviewWindow(win))
|
if (!this._isMyWindow(win))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let clone = this._addWindowClone(win);
|
if (this._isOverviewWindow(win)) {
|
||||||
|
this._addWindowClone(win);
|
||||||
|
} else if (metaWin.is_attached_dialog()) {
|
||||||
|
let parent = metaWin.get_transient_for();
|
||||||
|
while (parent.is_attached_dialog())
|
||||||
|
parent = metaWin.get_transient_for();
|
||||||
|
|
||||||
|
let idx = this._lookupIndex (parent);
|
||||||
|
if (idx < 0) {
|
||||||
|
// parent was not created yet, it will take care
|
||||||
|
// of the dialog when created
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let clone = this._windows[idx];
|
||||||
|
clone.addAttachedDialog(metaWin);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_windowAdded : function(metaWorkspace, metaWin) {
|
_windowAdded : function(metaWorkspace, metaWin) {
|
||||||
@@ -551,7 +647,6 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
|
|
||||||
this.actor.connect('button-press-event', function() { return true; });
|
this.actor.connect('button-press-event', function() { return true; });
|
||||||
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease));
|
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease));
|
||||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
|
||||||
|
|
||||||
Main.overview.connect('showing',
|
Main.overview.connect('showing',
|
||||||
Lang.bind(this, this._createThumbnails));
|
Lang.bind(this, this._createThumbnails));
|
||||||
@@ -590,7 +685,7 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
let thumbnail = this._thumbnails[i]
|
let thumbnail = this._thumbnails[i]
|
||||||
let [w, h] = thumbnail.actor.get_transformed_size();
|
let [w, h] = thumbnail.actor.get_transformed_size();
|
||||||
if (y >= thumbnail.actor.y && y <= thumbnail.actor.y + h) {
|
if (y >= thumbnail.actor.y && y <= thumbnail.actor.y + h) {
|
||||||
thumbnail.activate(event.time);
|
thumbnail.activate(event.get_time());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1215,16 +1310,5 @@ const ThumbnailsBox = new Lang.Class({
|
|||||||
},
|
},
|
||||||
onCompleteScope: this
|
onCompleteScope: this
|
||||||
});
|
});
|
||||||
},
|
|
||||||
|
|
||||||
_onScrollEvent: function (actor, event) {
|
|
||||||
switch (event.get_scroll_direction()) {
|
|
||||||
case Clutter.ScrollDirection.UP:
|
|
||||||
Main.wm.actionMoveWorkspace(Meta.MotionDirection.UP);
|
|
||||||
break;
|
|
||||||
case Clutter.ScrollDirection.DOWN:
|
|
||||||
Main.wm.actionMoveWorkspace(Meta.MotionDirection.DOWN);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -21,14 +21,7 @@ const XdndHandler = new Lang.Class({
|
|||||||
Shell.util_set_hidden_from_pick(this._dummy, true);
|
Shell.util_set_hidden_from_pick(this._dummy, true);
|
||||||
this._dummy.hide();
|
this._dummy.hide();
|
||||||
|
|
||||||
// Mutter delays the creation of the output window as long
|
|
||||||
// as possible to avoid flicker. In case a plugin wants to
|
|
||||||
// access it directly it has to connect to the stage's show
|
|
||||||
// signal. (see comment in compositor.c:meta_compositor_manage_screen)
|
|
||||||
global.stage.connect('show', function () {
|
|
||||||
global.init_xdnd();
|
global.init_xdnd();
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
global.connect('xdnd-enter', Lang.bind(this, this._onEnter));
|
global.connect('xdnd-enter', Lang.bind(this, this._onEnter));
|
||||||
global.connect('xdnd-position-changed', Lang.bind(this, this._onPositionChanged));
|
global.connect('xdnd-position-changed', Lang.bind(this, this._onPositionChanged));
|
||||||
@@ -75,7 +68,7 @@ const XdndHandler = new Lang.Class({
|
|||||||
source: cursorWindow});
|
source: cursorWindow});
|
||||||
|
|
||||||
this._cursorWindowClone = new Clutter.Clone({ source: cursorWindow });
|
this._cursorWindowClone = new Clutter.Clone({ source: cursorWindow });
|
||||||
global.overlay_group.add_actor(this._cursorWindowClone);
|
Main.uiGroup.add_actor(this._cursorWindowClone);
|
||||||
Shell.util_set_hidden_from_pick(this._cursorWindowClone, true);
|
Shell.util_set_hidden_from_pick(this._cursorWindowClone, true);
|
||||||
|
|
||||||
// Make sure that the clone has the same position as the source
|
// Make sure that the clone has the same position as the source
|
||||||
@@ -89,7 +82,7 @@ const XdndHandler = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onPositionChanged: function(obj, x, y) {
|
_onPositionChanged: function(obj, x, y) {
|
||||||
let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
|
let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
|
||||||
|
|
||||||
// Make sure that the cursor window is on top
|
// Make sure that the cursor window is on top
|
||||||
if (this._cursorWindowClone)
|
if (this._cursorWindowClone)
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
# List of source files containing translatable strings.
|
||||||
|
# Please keep this file sorted alphabetically.
|
||||||
|
[encoding: UTF-8]
|
||||||
data/50-gnome-shell-screenshot.xml.in
|
data/50-gnome-shell-screenshot.xml.in
|
||||||
data/50-gnome-shell-system.xml.in
|
data/50-gnome-shell-system.xml.in
|
||||||
data/gnome-shell.desktop.in.in
|
data/gnome-shell.desktop.in.in
|
||||||
@@ -30,6 +33,7 @@ js/ui/lookingGlass.js
|
|||||||
js/ui/main.js
|
js/ui/main.js
|
||||||
js/ui/messageTray.js
|
js/ui/messageTray.js
|
||||||
js/ui/notificationDaemon.js
|
js/ui/notificationDaemon.js
|
||||||
|
js/ui/overviewControls.js
|
||||||
js/ui/overview.js
|
js/ui/overview.js
|
||||||
js/ui/panel.js
|
js/ui/panel.js
|
||||||
js/ui/popupMenu.js
|
js/ui/popupMenu.js
|
||||||
|
358
po/it.po
358
po/it.po
@@ -10,8 +10,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell 3.7.x\n"
|
"Project-Id-Version: gnome-shell 3.7.x\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-02-19 11:03+0100\n"
|
"POT-Creation-Date: 2013-03-02 15:53+0100\n"
|
||||||
"PO-Revision-Date: 2013-02-19 11:07+0100\n"
|
"PO-Revision-Date: 2013-03-02 15:54+0100\n"
|
||||||
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
||||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
@@ -58,7 +58,7 @@ msgid "Window management and application launching"
|
|||||||
msgstr "Gestisce finestre e avvia applicazioni"
|
msgstr "Gestisce finestre e avvia applicazioni"
|
||||||
|
|
||||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
||||||
#: ../js/extensionPrefs/main.js:152
|
#: ../js/extensionPrefs/main.js:153
|
||||||
msgid "GNOME Shell Extension Preferences"
|
msgid "GNOME Shell Extension Preferences"
|
||||||
msgstr "Preferenze estensioni di GNOME Shell"
|
msgstr "Preferenze estensioni di GNOME Shell"
|
||||||
|
|
||||||
@@ -128,14 +128,24 @@ msgstr ""
|
|||||||
"visualizzate nell'area dei preferiti."
|
"visualizzate nell'area dei preferiti."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
||||||
|
msgid "List of categories that should be displayed as folders"
|
||||||
|
msgstr "Elenco di categorie che dovrebbero essere mostrare come cartelle"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
||||||
|
msgid ""
|
||||||
|
"Each category name in this list will be represented as folder in the "
|
||||||
|
"application view, rather than being displayed inline in the main view."
|
||||||
|
msgstr "Ciascun nome di categoria in questa lista sarà rappresentata come una cartella nella vista applicazioni, invece che essere mostrata nella vista principale"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Cronologia per il dialogo dei comandi (Alt-F2)"
|
msgstr "Cronologia per il dialogo dei comandi (Alt-F2)"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "Cronologia per il dialogo looking glass"
|
msgstr "Cronologia per il dialogo looking glass"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last IM presence explicitly set by the user. "
|
"Internally used to store the last IM presence explicitly set by the user. "
|
||||||
"The value here is from the TpConnectionPresenceType enumeration."
|
"The value here is from the TpConnectionPresenceType enumeration."
|
||||||
@@ -144,7 +154,7 @@ msgstr ""
|
|||||||
"esplicitamente dall'utente. Il valore corrisponde alla enumerazione "
|
"esplicitamente dall'utente. Il valore corrisponde alla enumerazione "
|
||||||
"TpConnectionPresenceType."
|
"TpConnectionPresenceType."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last session presence status for the user. The "
|
"Internally used to store the last session presence status for the user. The "
|
||||||
"value here is from the GsmPresenceStatus enumeration."
|
"value here is from the GsmPresenceStatus enumeration."
|
||||||
@@ -152,11 +162,11 @@ msgstr ""
|
|||||||
"Usato internamente per memorizzare lo stato di presenza dell'ultima sessione "
|
"Usato internamente per memorizzare lo stato di presenza dell'ultima sessione "
|
||||||
"per l'utente. Il valore corrisponde alla enumerazione GsmPresenceStatus."
|
"per l'utente. Il valore corrisponde alla enumerazione GsmPresenceStatus."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
msgstr "Mostra sempre l'elemento \"Termina sessione\" nel menù utente."
|
msgstr "Mostra sempre l'elemento \"Termina sessione\" nel menù utente."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
"user, single-session situations."
|
"user, single-session situations."
|
||||||
@@ -164,13 +174,13 @@ msgstr ""
|
|||||||
"Questa chiave sovrascrive lo scomparsa automatica dell'elemento \"Termina "
|
"Questa chiave sovrascrive lo scomparsa automatica dell'elemento \"Termina "
|
||||||
"sessione\" nelle modalità singolo utente, sessione singola."
|
"sessione\" nelle modalità singolo utente, sessione singola."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Indica se ricordare la password per montare file system remoti o cifrati"
|
"Indica se ricordare la password per montare file system remoti o cifrati"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell will request a password when an encrypted device or a remote "
|
"The shell will request a password when an encrypted device or a remote "
|
||||||
"filesystem is mounted. If the password can be saved for future use a "
|
"filesystem is mounted. If the password can be saved for future use a "
|
||||||
@@ -182,73 +192,73 @@ msgstr ""
|
|||||||
"aggiunta la corrispettiva casella di selezione. Questa chiave imposta lo "
|
"aggiunta la corrispettiva casella di selezione. Questa chiave imposta lo "
|
||||||
"stato predefinito di tale casella."
|
"stato predefinito di tale casella."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Mostra il numero della settimana nel calendario"
|
msgstr "Mostra il numero della settimana nel calendario"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Se VERO, mostra il giorno della settimana ISO nel calendario."
|
msgstr "Se VERO, mostra il giorno della settimana ISO nel calendario."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Associazione tasti per aprire menù applicazioni"
|
msgstr "Associazione tasti per aprire menù applicazioni"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Associazione di tasti per aprire il menù delle applicazioni."
|
msgstr "Associazione di tasti per aprire il menù delle applicazioni."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Keybinding to open the \"Show Applications\" view"
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
msgstr "Associazione tasti per aprire la vista \"Mostra applicazioni\""
|
msgstr "Associazione tasti per aprire la vista \"Mostra applicazioni\""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Associazione di tasti per aprire la vista \"Mosta applicazioni\" della "
|
"Associazione di tasti per aprire la vista \"Mosta applicazioni\" della "
|
||||||
"panoramica Attività."
|
"panoramica Attività."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Associazione tasti per commutare la visibilità del cassetto messaggi"
|
msgstr "Associazione tasti per commutare la visibilità del cassetto messaggi"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Associazione di tasti per commutare la visibilità del cassetto messaggi."
|
"Associazione di tasti per commutare la visibilità del cassetto messaggi."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "Keybinding to focus the active notification"
|
msgid "Keybinding to focus the active notification"
|
||||||
msgstr "Associazione tasti dare il focus alla notifica attiva"
|
msgstr "Associazione tasti dare il focus alla notifica attiva"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||||
msgid "Keybinding to focus the active notification."
|
msgid "Keybinding to focus the active notification."
|
||||||
msgstr "Associazione di tasti per dare il focus alla notifica attiva."
|
msgstr "Associazione di tasti per dare il focus alla notifica attiva."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Associazione tasti per commutare registrazione schermo"
|
msgstr "Associazione tasti per commutare registrazione schermo"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Associazione di tasti per avviare/fermare il registratore di schermo "
|
"Associazione di tasti per avviare/fermare il registratore di schermo "
|
||||||
"incorporato."
|
"incorporato."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Quale tastiera usare"
|
msgstr "Quale tastiera usare"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Il tipo di tastiera da usare."
|
msgstr "Il tipo di tastiera da usare."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Framerate per la registrazione di screencast."
|
msgstr "Framerate per la registrazione di screencast."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@@ -256,11 +266,11 @@ msgstr ""
|
|||||||
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
|
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
|
||||||
"il registratore della GNOME Shell."
|
"il registratore della GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
|
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@@ -287,11 +297,11 @@ msgstr ""
|
|||||||
"usato come un segnaposto per una stima del valore di thread ottimale per il "
|
"usato come un segnaposto per una stima del valore di thread ottimale per il "
|
||||||
"sistema in uso."
|
"sistema in uso."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Estensione del file utilizzato per salvare lo screencast"
|
msgstr "Estensione del file utilizzato per salvare lo screencast"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@@ -301,11 +311,11 @@ msgstr ""
|
|||||||
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
|
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
|
||||||
"quando si registra utilizzando un diverso formato contenitore."
|
"quando si registra utilizzando un diverso formato contenitore."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||||
msgid "The application icon mode."
|
msgid "The application icon mode."
|
||||||
msgstr "La modalità dell'icona dell'applicazione."
|
msgstr "La modalità dell'icona dell'applicazione."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||||
msgid ""
|
msgid ""
|
||||||
"Configures how the windows are shown in the switcher. Valid possibilities "
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
@@ -315,22 +325,22 @@ msgstr ""
|
|||||||
"sono: \"thumbnail-only\" (mostra una miniatura della finestra), \"app-icon-"
|
"sono: \"thumbnail-only\" (mostra una miniatura della finestra), \"app-icon-"
|
||||||
"only\" (mostra solo l'icona dell'applicazione) oppure \"both\"."
|
"only\" (mostra solo l'icona dell'applicazione) oppure \"both\"."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||||
msgid "Attach modal dialog to the parent window"
|
msgid "Attach modal dialog to the parent window"
|
||||||
msgstr "Collega la finestra modale a quella genitore"
|
msgstr "Collega la finestra modale a quella genitore"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Questa chiave scavalca la chiave in org.gnome.mutter quando si esegue GNOME "
|
"Questa chiave scavalca la chiave in org.gnome.mutter quando si esegue GNOME "
|
||||||
"Shell."
|
"Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
||||||
msgid "Arrangement of buttons on the titlebar"
|
msgid "Arrangement of buttons on the titlebar"
|
||||||
msgstr "Disposizione dei pulsanti nella barra del titolo"
|
msgstr "Disposizione dei pulsanti nella barra del titolo"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
||||||
"GNOME Shell."
|
"GNOME Shell."
|
||||||
@@ -338,76 +348,73 @@ msgstr ""
|
|||||||
"Questa chiave scavalca la chiave in org.gnome.desktop.wm.preferences quando "
|
"Questa chiave scavalca la chiave in org.gnome.desktop.wm.preferences quando "
|
||||||
"si esegue GNOME Shell."
|
"si esegue GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr "Abilita il tiling di bordo quando si trascinano le finestre sui bordi dello schermo"
|
msgstr ""
|
||||||
|
"Abilita il tiling di bordo quando si trascinano le finestre sui bordi dello "
|
||||||
|
"schermo"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "Spazi di lavoro sono gestiti dinamicamente"
|
msgstr "Spazi di lavoro sono gestiti dinamicamente"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Spazi di lavoro solo sul monitor primario"
|
msgstr "Spazi di lavoro solo sul monitor primario"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:124
|
#: ../js/extensionPrefs/main.js:125
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si è verificato un errore nel caricare il dialogo delle preferenze per %s:"
|
"Si è verificato un errore nel caricare il dialogo delle preferenze per %s:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:164
|
#: ../js/extensionPrefs/main.js:165
|
||||||
msgid "Extension"
|
msgid "Extension"
|
||||||
msgstr "Estensione"
|
msgstr "Estensione"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:188
|
#: ../js/extensionPrefs/main.js:189
|
||||||
msgid "Select an extension to configure using the combobox above."
|
msgid "Select an extension to configure using the combobox above."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Selezionare una estensione da configurare usando la casella combinata qui "
|
"Selezionare una estensione da configurare usando la casella combinata qui "
|
||||||
"sopra."
|
"sopra."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:569
|
#: ../js/gdm/loginDialog.js:405
|
||||||
msgid "Session…"
|
msgid "Session…"
|
||||||
msgstr "Sessione…"
|
msgstr "Sessione…"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:726
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Sign In"
|
|
||||||
msgstr "Accesso"
|
|
||||||
|
|
||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:790
|
#: ../js/gdm/loginDialog.js:629
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Non elencato?"
|
msgstr "Non elencato?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:970 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||||
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:178
|
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126
|
||||||
#: ../js/ui/userMenu.js:932
|
#: ../js/ui/userMenu.js:932
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annulla"
|
msgstr "Annulla"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:986
|
#: ../js/gdm/loginDialog.js:799
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Accedi"
|
msgstr "Accedi"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:986
|
#: ../js/gdm/loginDialog.js:799
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Avanti"
|
msgstr "Avanti"
|
||||||
|
|
||||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||||
#. is not visible here since we only care about phase2 authentication
|
#. is not visible here since we only care about phase2 authentication
|
||||||
#. (and don't even care of which one)
|
#. (and don't even care of which one)
|
||||||
#: ../js/gdm/loginDialog.js:1095 ../js/ui/components/networkAgent.js:260
|
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260
|
||||||
#: ../js/ui/components/networkAgent.js:278
|
#: ../js/ui/components/networkAgent.js:278
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nome utente: "
|
msgstr "Nome utente: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1391
|
#: ../js/gdm/loginDialog.js:1157
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Finestra di accesso"
|
msgstr "Finestra di accesso"
|
||||||
|
|
||||||
@@ -430,50 +437,53 @@ msgstr "Riavvia"
|
|||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Spegni"
|
msgstr "Spegni"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:152
|
#: ../js/gdm/util.js:182
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Errore di autenticazione"
|
msgstr "Errore di autenticazione"
|
||||||
|
|
||||||
#. Translators: this message is shown below the password entry field
|
#. Translators: this message is shown below the password entry field
|
||||||
#. to indicate the user can swipe their finger instead
|
#. to indicate the user can swipe their finger instead
|
||||||
#: ../js/gdm/util.js:269
|
#: ../js/gdm/util.js:299
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(o passare il dito)"
|
msgstr "(o passare il dito)"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:294
|
#: ../js/gdm/util.js:324
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(p.e. utente o %s)"
|
msgstr "(p.e. utente o %s)"
|
||||||
|
|
||||||
#: ../js/misc/util.js:92
|
#: ../js/misc/util.js:94
|
||||||
msgid "Command not found"
|
msgid "Command not found"
|
||||||
msgstr "Comando non trovato"
|
msgstr "Comando non trovato"
|
||||||
|
|
||||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
#. something nicer
|
#. something nicer
|
||||||
#: ../js/misc/util.js:125
|
#: ../js/misc/util.js:127
|
||||||
msgid "Could not parse command:"
|
msgid "Could not parse command:"
|
||||||
msgstr "Impossibile analizzare il comando:"
|
msgstr "Impossibile analizzare il comando:"
|
||||||
|
|
||||||
#: ../js/misc/util.js:133
|
#: ../js/misc/util.js:135
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Esecuzione di «%s» non riuscita:"
|
msgstr "Esecuzione di «%s» non riuscita:"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#: ../js/ui/appDisplay.js:348
|
||||||
#: ../js/ui/appDisplay.js:259
|
msgid "Frequent"
|
||||||
|
msgstr "Frequenti"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:355
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Tutte"
|
msgstr "Tutte"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:624
|
#: ../js/ui/appDisplay.js:913
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nuova finestra"
|
msgstr "Nuova finestra"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:627 ../js/ui/dash.js:286
|
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Rimuovi dai preferiti"
|
msgstr "Rimuovi dai preferiti"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:628
|
#: ../js/ui/appDisplay.js:917
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Aggiungi ai preferiti"
|
msgstr "Aggiungi ai preferiti"
|
||||||
|
|
||||||
@@ -489,6 +499,14 @@ msgstr "%s è stato aggiunto ai preferiti."
|
|||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s è stato rimosso dai preferiti."
|
msgstr "%s è stato rimosso dai preferiti."
|
||||||
|
|
||||||
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:787
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Impostazioni"
|
||||||
|
|
||||||
|
#: ../js/ui/backgroundMenu.js:21
|
||||||
|
msgid "Change Background…"
|
||||||
|
msgstr "Cambia sfondo…"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
#.
|
#.
|
||||||
@@ -800,39 +818,39 @@ msgid "Mute"
|
|||||||
msgstr "Disattiva notifiche"
|
msgstr "Disattiva notifiche"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"
|
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"
|
||||||
#: ../js/ui/components/telepathyClient.js:938
|
#: ../js/ui/components/telepathyClient.js:942
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
|
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
|
||||||
msgstr "<b>Ieri</b>, <b>%-H.%M</b>"
|
msgstr "<b>Ieri</b>, <b>%-H.%M</b>"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30
|
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30
|
||||||
#: ../js/ui/components/telepathyClient.js:944
|
#: ../js/ui/components/telepathyClient.js:948
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "<b>%A</b>, <b>%H:%M</b>"
|
msgid "<b>%A</b>, <b>%H:%M</b>"
|
||||||
msgstr "<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"
|
#. 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:949
|
#: ../js/ui/components/telepathyClient.js:953
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
|
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>"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"
|
#. 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:953
|
#: ../js/ui/components/telepathyClient.js:957
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
|
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
|
#. Translators: this is the other person changing their old IM name to their new
|
||||||
#. IM name.
|
#. IM name.
|
||||||
#: ../js/ui/components/telepathyClient.js:981
|
#: ../js/ui/components/telepathyClient.js:985
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s ha cambiato nome in %s"
|
msgstr "%s ha cambiato nome in %s"
|
||||||
|
|
||||||
#. translators: argument is a room name like
|
#. translators: argument is a room name like
|
||||||
#. * room@jabber.org for example.
|
#. * room@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1084
|
#: ../js/ui/components/telepathyClient.js:1088
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Invio su %s"
|
msgstr "Invio su %s"
|
||||||
@@ -840,38 +858,38 @@ msgstr "Invio su %s"
|
|||||||
#. translators: first argument is the name of a contact and the second
|
#. 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
|
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||||
#. * for example.
|
#. * for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1092
|
#: ../js/ui/components/telepathyClient.js:1096
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s ti sta invitando su %s"
|
msgstr "%s ti sta invitando su %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1094
|
#: ../js/ui/components/telepathyClient.js:1098
|
||||||
#: ../js/ui/components/telepathyClient.js:1133
|
#: ../js/ui/components/telepathyClient.js:1137
|
||||||
#: ../js/ui/components/telepathyClient.js:1173
|
#: ../js/ui/components/telepathyClient.js:1177
|
||||||
#: ../js/ui/components/telepathyClient.js:1236
|
#: ../js/ui/components/telepathyClient.js:1240
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Declina"
|
msgstr "Declina"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1095
|
#: ../js/ui/components/telepathyClient.js:1099
|
||||||
#: ../js/ui/components/telepathyClient.js:1174
|
#: ../js/ui/components/telepathyClient.js:1178
|
||||||
#: ../js/ui/components/telepathyClient.js:1237
|
#: ../js/ui/components/telepathyClient.js:1241
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Accetta"
|
msgstr "Accetta"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1125
|
#: ../js/ui/components/telepathyClient.js:1129
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Videochiamata da %s"
|
msgstr "Videochiamata da %s"
|
||||||
|
|
||||||
#. translators: argument is a contact name like Alice for example.
|
#. translators: argument is a contact name like Alice for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1128
|
#: ../js/ui/components/telepathyClient.js:1132
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Chiamata da %s"
|
msgstr "Chiamata da %s"
|
||||||
|
|
||||||
#. translators: this is a button label (verb), not a noun
|
#. translators: this is a button label (verb), not a noun
|
||||||
#: ../js/ui/components/telepathyClient.js:1135
|
#: ../js/ui/components/telepathyClient.js:1139
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Rispondi"
|
msgstr "Rispondi"
|
||||||
|
|
||||||
@@ -880,112 +898,112 @@ msgstr "Rispondi"
|
|||||||
#. * file name. The string will be something
|
#. * file name. The string will be something
|
||||||
#. * like: "Alice is sending you test.ogg"
|
#. * like: "Alice is sending you test.ogg"
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/components/telepathyClient.js:1167
|
#: ../js/ui/components/telepathyClient.js:1171
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s ti sta inviando %s"
|
msgstr "%s ti sta inviando %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias
|
#. To translators: The parameter is the contact's alias
|
||||||
#: ../js/ui/components/telepathyClient.js:1202
|
#: ../js/ui/components/telepathyClient.js:1206
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s would like permission to see when you are online"
|
msgid "%s would like permission to see when you are online"
|
||||||
msgstr "%s chiede il permesso di vedere quando sei online"
|
msgstr "%s chiede il permesso di vedere quando sei online"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1294
|
#: ../js/ui/components/telepathyClient.js:1298
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Errore di rete"
|
msgstr "Errore di rete"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1296
|
#: ../js/ui/components/telepathyClient.js:1300
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Autenticazione non riuscita"
|
msgstr "Autenticazione non riuscita"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1298
|
#: ../js/ui/components/telepathyClient.js:1302
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Errore di cifratura"
|
msgstr "Errore di cifratura"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1304
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Certificato non fornito"
|
msgstr "Certificato non fornito"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1302
|
#: ../js/ui/components/telepathyClient.js:1306
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Certificato non fidato"
|
msgstr "Certificato non fidato"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1304
|
#: ../js/ui/components/telepathyClient.js:1308
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Certificato scaduto"
|
msgstr "Certificato scaduto"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1306
|
#: ../js/ui/components/telepathyClient.js:1310
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Certificato non attivato"
|
msgstr "Certificato non attivato"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1308
|
#: ../js/ui/components/telepathyClient.js:1312
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Corrispondenza errata nel nome host del certificato"
|
msgstr "Corrispondenza errata nel nome host del certificato"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1310
|
#: ../js/ui/components/telepathyClient.js:1314
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Corrispondenza errata nell'impronta digitare del certificato"
|
msgstr "Corrispondenza errata nell'impronta digitare del certificato"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1312
|
#: ../js/ui/components/telepathyClient.js:1316
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Certificato auto-firmato"
|
msgstr "Certificato auto-firmato"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1314
|
#: ../js/ui/components/telepathyClient.js:1318
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Lo stato è impostato a fuori rete"
|
msgstr "Lo stato è impostato a fuori rete"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1316
|
#: ../js/ui/components/telepathyClient.js:1320
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "La cifratura non è disponibile"
|
msgstr "La cifratura non è disponibile"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1318
|
#: ../js/ui/components/telepathyClient.js:1322
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Il certificato non è valido"
|
msgstr "Il certificato non è valido"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1320
|
#: ../js/ui/components/telepathyClient.js:1324
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "La connessione è stata rifiutata"
|
msgstr "La connessione è stata rifiutata"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1322
|
#: ../js/ui/components/telepathyClient.js:1326
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Impossibile stabilire la connessione"
|
msgstr "Impossibile stabilire la connessione"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1324
|
#: ../js/ui/components/telepathyClient.js:1328
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Connessione persa"
|
msgstr "Connessione persa"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1326
|
#: ../js/ui/components/telepathyClient.js:1330
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Questo account è già connesso al server"
|
msgstr "Questo account è già connesso al server"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1328
|
#: ../js/ui/components/telepathyClient.js:1332
|
||||||
msgid ""
|
msgid ""
|
||||||
"Connection has been replaced by a new connection using the same resource"
|
"Connection has been replaced by a new connection using the same resource"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La connessione è stata sostituita da una nuova connessione usando la stessa "
|
"La connessione è stata sostituita da una nuova connessione usando la stessa "
|
||||||
"risorsa"
|
"risorsa"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1330
|
#: ../js/ui/components/telepathyClient.js:1334
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "L'account esiste già sul server"
|
msgstr "L'account esiste già sul server"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1332
|
#: ../js/ui/components/telepathyClient.js:1336
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Il server è al momento troppo occupato per gestire la connessione"
|
msgstr "Il server è al momento troppo occupato per gestire la connessione"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1334
|
#: ../js/ui/components/telepathyClient.js:1338
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Il certificato è stato revocato"
|
msgstr "Il certificato è stato revocato"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1336
|
#: ../js/ui/components/telepathyClient.js:1340
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Il certificato usa un algoritmo di cifratura non sicuro o è "
|
"Il certificato usa un algoritmo di cifratura non sicuro o è "
|
||||||
"crittograficamente debole"
|
"crittograficamente debole"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1338
|
#: ../js/ui/components/telepathyClient.js:1342
|
||||||
msgid ""
|
msgid ""
|
||||||
"The length of the server certificate, or the depth of the server certificate "
|
"The length of the server certificate, or the depth of the server certificate "
|
||||||
"chain, exceed the limits imposed by the cryptography library"
|
"chain, exceed the limits imposed by the cryptography library"
|
||||||
@@ -996,22 +1014,22 @@ msgstr ""
|
|||||||
|
|
||||||
# indica lo stato del device BT, per esempio gli auricolari
|
# indica lo stato del device BT, per esempio gli auricolari
|
||||||
# credo sia meglio l'aggettivo che il sostantivo
|
# credo sia meglio l'aggettivo che il sostantivo
|
||||||
#: ../js/ui/components/telepathyClient.js:1340
|
#: ../js/ui/components/telepathyClient.js:1344
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Errore interno"
|
msgstr "Errore interno"
|
||||||
|
|
||||||
#. translators: argument is the account name, like
|
#. translators: argument is the account name, like
|
||||||
#. * name@jabber.org for example.
|
#. * name@jabber.org for example.
|
||||||
#: ../js/ui/components/telepathyClient.js:1350
|
#: ../js/ui/components/telepathyClient.js:1354
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Unable to connect to %s"
|
msgid "Unable to connect to %s"
|
||||||
msgstr "Impossibile connettersi a %s"
|
msgstr "Impossibile connettersi a %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1355
|
#: ../js/ui/components/telepathyClient.js:1359
|
||||||
msgid "View account"
|
msgid "View account"
|
||||||
msgstr "Visualizza account"
|
msgstr "Visualizza account"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1394
|
#: ../js/ui/components/telepathyClient.js:1398
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Motivo sconosciuto"
|
msgstr "Motivo sconosciuto"
|
||||||
|
|
||||||
@@ -1019,14 +1037,14 @@ msgstr "Motivo sconosciuto"
|
|||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Finestre"
|
msgstr "Finestre"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:250 ../js/ui/dash.js:288
|
#: ../js/ui/dash.js:248 ../js/ui/dash.js:286
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Mostra applicazioni"
|
msgstr "Mostra applicazioni"
|
||||||
|
|
||||||
# cruscotto?!?!?!?!?!?!?
|
# cruscotto?!?!?!?!?!?!?
|
||||||
#. Translators: this is the name of the dock/favorites area on
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
#. the left of the overview
|
#. the left of the overview
|
||||||
#: ../js/ui/dash.js:418
|
#: ../js/ui/dash.js:435
|
||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Dash"
|
msgstr "Dash"
|
||||||
|
|
||||||
@@ -1152,86 +1170,86 @@ msgstr "Installa"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Scaricare e installare «%s» da extensions.gnome.org?"
|
msgstr "Scaricare e installare «%s» da extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:621 ../js/ui/status/keyboard.js:314
|
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
|
||||||
#: ../js/ui/status/power.js:211
|
#: ../js/ui/status/power.js:211
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastiera"
|
msgstr "Tastiera"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:692
|
#: ../js/ui/lookingGlass.js:693
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Nessuna estensione installata"
|
msgstr "Nessuna estensione installata"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: ../js/ui/lookingGlass.js:746
|
#: ../js/ui/lookingGlass.js:747
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "%s non ha emesso alcun errore."
|
msgstr "%s non ha emesso alcun errore."
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:752
|
#: ../js/ui/lookingGlass.js:753
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Nascondi errori"
|
msgstr "Nascondi errori"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:756 ../js/ui/lookingGlass.js:816
|
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:817
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Mostra errori"
|
msgstr "Mostra errori"
|
||||||
|
|
||||||
# (ndt) o abilitata?
|
# (ndt) o abilitata?
|
||||||
#: ../js/ui/lookingGlass.js:765
|
#: ../js/ui/lookingGlass.js:766
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Abilitato"
|
msgstr "Abilitato"
|
||||||
|
|
||||||
# (ndt) o disabilitata?
|
# (ndt) o disabilitata?
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:768 ../src/gvc/gvc-mixer-control.c:1830
|
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Disabilitato"
|
msgstr "Disabilitato"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:770
|
#: ../js/ui/lookingGlass.js:771
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Errore"
|
msgstr "Errore"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:772
|
#: ../js/ui/lookingGlass.js:773
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Non aggiornato"
|
msgstr "Non aggiornato"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:774
|
#: ../js/ui/lookingGlass.js:775
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Scaricamento"
|
msgstr "Scaricamento"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:798
|
#: ../js/ui/lookingGlass.js:799
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Visualizza sorgente"
|
msgstr "Visualizza sorgente"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:807
|
#: ../js/ui/lookingGlass.js:808
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Pagina web"
|
msgstr "Pagina web"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1201
|
#: ../js/ui/messageTray.js:1182
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Apri"
|
msgstr "Apri"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1208
|
#: ../js/ui/messageTray.js:1189
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Rimuovi"
|
msgstr "Rimuovi"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1520
|
#: ../js/ui/messageTray.js:1501
|
||||||
msgid "Clear Messages"
|
msgid "Clear Messages"
|
||||||
msgstr "Pulisci messaggi"
|
msgstr "Pulisci messaggi"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1547
|
#: ../js/ui/messageTray.js:1528
|
||||||
msgid "Notification Settings"
|
msgid "Notification Settings"
|
||||||
msgstr "Impostazioni notifiche"
|
msgstr "Impostazioni notifiche"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1725
|
#: ../js/ui/messageTray.js:1707
|
||||||
msgid "No Messages"
|
msgid "No Messages"
|
||||||
msgstr "Nessun messaggio"
|
msgstr "Nessun messaggio"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1806
|
#: ../js/ui/messageTray.js:1787
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Cassetto messaggi"
|
msgstr "Cassetto messaggi"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2881
|
#: ../js/ui/messageTray.js:2864
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informazione di sistema"
|
msgstr "Informazione di sistema"
|
||||||
|
|
||||||
@@ -1240,11 +1258,18 @@ msgctxt "program"
|
|||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Sconosciuto"
|
msgstr "Sconosciuto"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:93
|
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153
|
||||||
|
#, c-format
|
||||||
|
msgid "%d new message"
|
||||||
|
msgid_plural "%d new messages"
|
||||||
|
msgstr[0] "%d nuovo messaggio"
|
||||||
|
msgstr[1] "%d nuovi messaggi"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:82
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Annulla"
|
msgstr "Annulla"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:140
|
#: ../js/ui/overview.js:129
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Panoramica"
|
msgstr "Panoramica"
|
||||||
|
|
||||||
@@ -1252,7 +1277,7 @@ msgstr "Panoramica"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/overview.js:220
|
#: ../js/ui/overview.js:284
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Digita per cercare…"
|
msgstr "Digita per cercare…"
|
||||||
|
|
||||||
@@ -1266,7 +1291,7 @@ msgstr "Esci"
|
|||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Attività"
|
msgstr "Attività"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:982
|
#: ../js/ui/panel.js:983
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Barra superiore"
|
msgstr "Barra superiore"
|
||||||
|
|
||||||
@@ -1289,29 +1314,22 @@ msgstr "Chiudi"
|
|||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:117
|
#: ../js/ui/screenShield.js:90
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d %B"
|
msgstr "%A, %d %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:180
|
#: ../js/ui/screenShield.js:155
|
||||||
#, c-format
|
|
||||||
msgid "%d new message"
|
|
||||||
msgid_plural "%d new messages"
|
|
||||||
msgstr[0] "%d nuovo messaggio"
|
|
||||||
msgstr[1] "%d nuovi messaggi"
|
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:182
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
msgstr[0] "%d nuova notifica"
|
msgstr[0] "%d nuova notifica"
|
||||||
msgstr[1] "%d nuove notifiche"
|
msgstr[1] "%d nuove notifiche"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:469 ../js/ui/userMenu.js:805
|
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:805
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Blocca"
|
msgstr "Blocca"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:635
|
#: ../js/ui/screenShield.js:639
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "GNOME deve bloccare lo schermo"
|
msgstr "GNOME deve bloccare lo schermo"
|
||||||
|
|
||||||
@@ -1322,11 +1340,11 @@ msgstr "GNOME deve bloccare lo schermo"
|
|||||||
#.
|
#.
|
||||||
#. XXX: another option is to kick the user into the gdm login
|
#. XXX: another option is to kick the user into the gdm login
|
||||||
#. screen, where we're not affected by grabs
|
#. screen, where we're not affected by grabs
|
||||||
#: ../js/ui/screenShield.js:754 ../js/ui/screenShield.js:1165
|
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Impossibile bloccare"
|
msgstr "Impossibile bloccare"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:755 ../js/ui/screenShield.js:1166
|
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Il blocco è stato impedito da un'applicazione."
|
msgstr "Il blocco è stato impedito da un'applicazione."
|
||||||
|
|
||||||
@@ -1362,56 +1380,56 @@ msgstr "Password"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Ricorda password"
|
msgstr "Ricorda password"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:192
|
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Sblocca"
|
msgstr "Sblocca"
|
||||||
|
|
||||||
# su Android è Rilevabile :P
|
# su Android è Rilevabile :P
|
||||||
#: ../js/ui/status/accessibility.js:35
|
#: ../js/ui/status/accessibility.js:36
|
||||||
msgid "Accessibility"
|
msgid "Accessibility"
|
||||||
msgstr "Accessibilità"
|
msgstr "Accessibilità"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:40
|
#: ../js/ui/status/accessibility.js:41
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Ingrandimento"
|
msgstr "Ingrandimento"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:47
|
#: ../js/ui/status/accessibility.js:48
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Lettore schermo"
|
msgstr "Lettore schermo"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:51
|
#: ../js/ui/status/accessibility.js:52
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Tastiera a schermo"
|
msgstr "Tastiera a schermo"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:55
|
#: ../js/ui/status/accessibility.js:56
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Avvisi visibili"
|
msgstr "Avvisi visibili"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:58
|
#: ../js/ui/status/accessibility.js:59
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Tasti singoli"
|
msgstr "Tasti singoli"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:61
|
#: ../js/ui/status/accessibility.js:62
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Tasti lenti"
|
msgstr "Tasti lenti"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:64
|
#: ../js/ui/status/accessibility.js:65
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Tasti rimbalzati"
|
msgstr "Tasti rimbalzati"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:67
|
#: ../js/ui/status/accessibility.js:68
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Mouse da tastiera"
|
msgstr "Mouse da tastiera"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:71
|
#: ../js/ui/status/accessibility.js:72
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Impostazioni accesso universale"
|
msgstr "Impostazioni accesso universale"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:107
|
#: ../js/ui/status/accessibility.js:129
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Contrasto elevato"
|
msgstr "Contrasto elevato"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:154
|
#: ../js/ui/status/accessibility.js:178
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Caratteri grandi"
|
msgstr "Caratteri grandi"
|
||||||
|
|
||||||
@@ -1774,11 +1792,11 @@ msgstr "Volume"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Microfono"
|
msgstr "Microfono"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:203
|
#: ../js/ui/unlockDialog.js:151
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Accedi come altro utente"
|
msgstr "Accedi come altro utente"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:229
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Unlock Window"
|
msgid "Unlock Window"
|
||||||
msgstr "Sblocca finestra"
|
msgstr "Sblocca finestra"
|
||||||
|
|
||||||
@@ -1810,10 +1828,6 @@ msgstr "Fuori rete"
|
|||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Notifiche"
|
msgstr "Notifiche"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:787
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Impostazioni"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:795
|
#: ../js/ui/userMenu.js:795
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambia utente"
|
msgstr "Cambia utente"
|
||||||
@@ -1947,6 +1961,10 @@ msgstr "La password non può essere vuota"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Il dialogo di autenticazione è stato annullato dall'utente"
|
msgstr "Il dialogo di autenticazione è stato annullato dall'utente"
|
||||||
|
|
||||||
|
#~ msgctxt "title"
|
||||||
|
#~ msgid "Sign In"
|
||||||
|
#~ msgstr "Accesso"
|
||||||
|
|
||||||
#~ msgid "Clear"
|
#~ msgid "Clear"
|
||||||
#~ msgstr "Pulisci"
|
#~ msgstr "Pulisci"
|
||||||
|
|
||||||
|
292
po/pl.po
292
po/pl.po
@@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-02-17 18:28+0100\n"
|
"POT-Creation-Date: 2013-02-24 01:52+0100\n"
|
||||||
"PO-Revision-Date: 2013-02-17 18:29+0100\n"
|
"PO-Revision-Date: 2013-02-24 01:53+0100\n"
|
||||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
||||||
"Language: pl\n"
|
"Language: pl\n"
|
||||||
@@ -129,14 +129,26 @@ msgstr ""
|
|||||||
"ulubionych."
|
"ulubionych."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
||||||
|
msgid "List of categories that should be displayed as folders"
|
||||||
|
msgstr "Lista kategorii, które powinny być wyświetlane jako katalogi"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
||||||
|
msgid ""
|
||||||
|
"Each category name in this list will be represented as folder in the "
|
||||||
|
"application view, rather than being displayed inline in the main view."
|
||||||
|
msgstr ""
|
||||||
|
"Każda nazwa kategorii na tej liście będzie przedstawiana jako katalog w "
|
||||||
|
"widoku programów, zamiast wyświetlać ją bezpośrednio w głównym widoku."
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Historia okna dialogowego poleceń (Alt-F2)"
|
msgstr "Historia okna dialogowego poleceń (Alt-F2)"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "Historia okna dialogowego looking glass"
|
msgstr "Historia okna dialogowego looking glass"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last IM presence explicitly set by the user. "
|
"Internally used to store the last IM presence explicitly set by the user. "
|
||||||
"The value here is from the TpConnectionPresenceType enumeration."
|
"The value here is from the TpConnectionPresenceType enumeration."
|
||||||
@@ -145,7 +157,7 @@ msgstr ""
|
|||||||
"ustawionego przez użytkownika. Wartość pochodzi ze spisu "
|
"ustawionego przez użytkownika. Wartość pochodzi ze spisu "
|
||||||
"TpConnectionPresenceType."
|
"TpConnectionPresenceType."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last session presence status for the user. The "
|
"Internally used to store the last session presence status for the user. The "
|
||||||
"value here is from the GsmPresenceStatus enumeration."
|
"value here is from the GsmPresenceStatus enumeration."
|
||||||
@@ -153,11 +165,11 @@ msgstr ""
|
|||||||
"Używane wewnętrznie do przechowywania ostatniego stanu obecności dla "
|
"Używane wewnętrznie do przechowywania ostatniego stanu obecności dla "
|
||||||
"użytkownika. Wartość pochodzi ze spisu GsmPresenceStatus."
|
"użytkownika. Wartość pochodzi ze spisu GsmPresenceStatus."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
msgstr "Wyświetlanie elementu menu \"Wyloguj się\" w menu użytkownika."
|
msgstr "Wyświetlanie elementu menu \"Wyloguj się\" w menu użytkownika."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
"user, single-session situations."
|
"user, single-session situations."
|
||||||
@@ -165,14 +177,14 @@ msgstr ""
|
|||||||
"Ten klucz zastępuje automatyczne ukrywanie elementu menu \"Wyloguj się\" w "
|
"Ten klucz zastępuje automatyczne ukrywanie elementu menu \"Wyloguj się\" w "
|
||||||
"sytuacji, gdy istnieje tylko jeden użytkownik i jedna sesja."
|
"sytuacji, gdy istnieje tylko jeden użytkownik i jedna sesja."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Określa, czy pamiętać hasła do montowania zaszyfrowanych lub zdalnych "
|
"Określa, czy pamiętać hasła do montowania zaszyfrowanych lub zdalnych "
|
||||||
"systemów plików"
|
"systemów plików"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell will request a password when an encrypted device or a remote "
|
"The shell will request a password when an encrypted device or a remote "
|
||||||
"filesystem is mounted. If the password can be saved for future use a "
|
"filesystem is mounted. If the password can be saved for future use a "
|
||||||
@@ -184,80 +196,80 @@ msgstr ""
|
|||||||
"obecne będzie pole wyboru \"Zapamiętanie hasła\". Ten klucz ustawia domyślną "
|
"obecne będzie pole wyboru \"Zapamiętanie hasła\". Ten klucz ustawia domyślną "
|
||||||
"wartość tego pola."
|
"wartość tego pola."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Wyświetlanie dnia tygodnia w kalendarzu"
|
msgstr "Wyświetlanie dnia tygodnia w kalendarzu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Jeśli jest ustawione na \"true\", to wyświetla w kalendarzu dzień tygodnia w "
|
"Jeśli jest ustawione na \"true\", to wyświetla w kalendarzu dzień tygodnia w "
|
||||||
"formacie ISO."
|
"formacie ISO."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Skrót do otwarcia menu programu"
|
msgstr "Skrót do otwarcia menu programu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Skrót do otwarcia menu programu."
|
msgstr "Skrót do otwarcia menu programu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Keybinding to open the \"Show Applications\" view"
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
msgstr "Skrót do otwarcia widoku \"Wyświetl programy\""
|
msgstr "Skrót do otwarcia widoku \"Wyświetl programy\""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
msgstr "Skrót do otwarcia widoku \"Wyświetl programy\" ekranu podglądu."
|
msgstr "Skrót do otwarcia widoku \"Wyświetl programy\" ekranu podglądu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania"
|
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania."
|
msgstr "Skrót do przełączenia widoczności obszaru powiadamiania."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "Keybinding to focus the active notification"
|
msgid "Keybinding to focus the active notification"
|
||||||
msgstr "Skrót do aktywacji bieżącego powiadomienia"
|
msgstr "Skrót do aktywacji bieżącego powiadomienia"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||||
msgid "Keybinding to focus the active notification."
|
msgid "Keybinding to focus the active notification."
|
||||||
msgstr "Skrót do aktywacji bieżącego powiadomienia."
|
msgstr "Skrót do aktywacji bieżącego powiadomienia."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Skrót do przełączenia nagrywania ekranu"
|
msgstr "Skrót do przełączenia nagrywania ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Skrót do uruchomienia/zatrzymania wbudowanego nagrywania ekranu."
|
msgstr "Skrót do uruchomienia/zatrzymania wbudowanego nagrywania ekranu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Której klawiatury używać"
|
msgstr "Której klawiatury używać"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Typ używanej klawiatury."
|
msgstr "Typ używanej klawiatury."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Liczba klatek na sekundę do nagrywania ekranu."
|
msgstr "Liczba klatek na sekundę do nagrywania ekranu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr "Liczba klatek na sekundę wynikowego nagrania ekranu."
|
msgstr "Liczba klatek na sekundę wynikowego nagrania ekranu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Potok biblioteki GStreamer używany do zakodowania nagrania ekranu"
|
msgstr "Potok biblioteki GStreamer używany do zakodowania nagrania ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@@ -282,11 +294,11 @@ msgstr ""
|
|||||||
"i nagrywa do formatu WebM używając kodeka VP8. %T jest zamieniane na "
|
"i nagrywa do formatu WebM używając kodeka VP8. %T jest zamieniane na "
|
||||||
"odgadniętą optymalną liczbę wątków dla komputera."
|
"odgadniętą optymalną liczbę wątków dla komputera."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Rozszerzenie pliku używane do przechowywania nagrań ekranu"
|
msgstr "Rozszerzenie pliku używane do przechowywania nagrań ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@@ -296,11 +308,11 @@ msgstr ""
|
|||||||
"dacie, i używającej tego rozszerzenia. Rozszerzenie powinno zostać "
|
"dacie, i używającej tego rozszerzenia. Rozszerzenie powinno zostać "
|
||||||
"zmienione, aby nagrywać w innym formacie kontenera."
|
"zmienione, aby nagrywać w innym formacie kontenera."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||||
msgid "The application icon mode."
|
msgid "The application icon mode."
|
||||||
msgstr "Tryb ikon programów."
|
msgstr "Tryb ikon programów."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||||
msgid ""
|
msgid ""
|
||||||
"Configures how the windows are shown in the switcher. Valid possibilities "
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
@@ -310,22 +322,22 @@ msgstr ""
|
|||||||
"\"thumbnail-only\" (wyświetla miniaturę okna), \"app-icon-only\" (wyświetla "
|
"\"thumbnail-only\" (wyświetla miniaturę okna), \"app-icon-only\" (wyświetla "
|
||||||
"tylko ikonę programu) lub \"both\" (wyświetla oba)."
|
"tylko ikonę programu) lub \"both\" (wyświetla oba)."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||||
msgid "Attach modal dialog to the parent window"
|
msgid "Attach modal dialog to the parent window"
|
||||||
msgstr "Dołączanie modalnych okien dialogowych do okien nadrzędnych"
|
msgstr "Dołączanie modalnych okien dialogowych do okien nadrzędnych"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ten klucz zastępuje klucz w \"org.gnome.mutter\", kiedy uruchomiona jest "
|
"Ten klucz zastępuje klucz w \"org.gnome.mutter\", kiedy uruchomiona jest "
|
||||||
"powłoka GNOME."
|
"powłoka GNOME."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
||||||
msgid "Arrangement of buttons on the titlebar"
|
msgid "Arrangement of buttons on the titlebar"
|
||||||
msgstr "Uporządkowanie przycisków na pasku tytułowym"
|
msgstr "Uporządkowanie przycisków na pasku tytułowym"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
||||||
"GNOME Shell."
|
"GNOME Shell."
|
||||||
@@ -333,17 +345,17 @@ msgstr ""
|
|||||||
"Ten klucz zastępuje klucz w \"org.gnome.desktop.wm.preferences\", kiedy "
|
"Ten klucz zastępuje klucz w \"org.gnome.desktop.wm.preferences\", kiedy "
|
||||||
"uruchomiona jest powłoka GNOME."
|
"uruchomiona jest powłoka GNOME."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Włączenie kafelkowania przy krawędziach podczas przenoszenia okien do "
|
"Włączenie kafelkowania przy krawędziach podczas przenoszenia okien do "
|
||||||
"krawędzi ekranu"
|
"krawędzi ekranu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "Dynamiczne zarządzanie obszarami roboczymi"
|
msgstr "Dynamiczne zarządzanie obszarami roboczymi"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Obszary robocze tylko na pierwszym monitorze"
|
msgstr "Obszary robocze tylko na pierwszym monitorze"
|
||||||
|
|
||||||
@@ -363,48 +375,43 @@ msgstr ""
|
|||||||
"Proszę wybrać rozszerzenie do skonfigurowania używając powyższego pola "
|
"Proszę wybrać rozszerzenie do skonfigurowania używając powyższego pola "
|
||||||
"wyboru."
|
"wyboru."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:569
|
#: ../js/gdm/loginDialog.js:405
|
||||||
msgid "Session…"
|
msgid "Session…"
|
||||||
msgstr "Sesja…"
|
msgstr "Sesja…"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:726
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Sign In"
|
|
||||||
msgstr "Proszę się zalogować"
|
|
||||||
|
|
||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:790
|
#: ../js/gdm/loginDialog.js:629
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Inny użytkownik?"
|
msgstr "Inny użytkownik?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:967 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||||
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:178
|
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126
|
||||||
#: ../js/ui/userMenu.js:931
|
#: ../js/ui/userMenu.js:932
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Anuluj"
|
msgstr "Anuluj"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:983
|
#: ../js/gdm/loginDialog.js:799
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Zaloguj"
|
msgstr "Zaloguj"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:983
|
#: ../js/gdm/loginDialog.js:799
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Dalej"
|
msgstr "Dalej"
|
||||||
|
|
||||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||||
#. is not visible here since we only care about phase2 authentication
|
#. is not visible here since we only care about phase2 authentication
|
||||||
#. (and don't even care of which one)
|
#. (and don't even care of which one)
|
||||||
#: ../js/gdm/loginDialog.js:1091 ../js/ui/components/networkAgent.js:260
|
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260
|
||||||
#: ../js/ui/components/networkAgent.js:278
|
#: ../js/ui/components/networkAgent.js:278
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nazwa użytkownika: "
|
msgstr "Nazwa użytkownika: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1387
|
#: ../js/gdm/loginDialog.js:1157
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Okno logowania"
|
msgstr "Okno logowania"
|
||||||
|
|
||||||
@@ -413,8 +420,8 @@ msgstr "Okno logowania"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Zasilanie"
|
msgstr "Zasilanie"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:693 ../js/ui/userMenu.js:697
|
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:694 ../js/ui/userMenu.js:698
|
||||||
#: ../js/ui/userMenu.js:813
|
#: ../js/ui/userMenu.js:814
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Uśpij"
|
msgstr "Uśpij"
|
||||||
|
|
||||||
@@ -422,55 +429,58 @@ msgstr "Uśpij"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Uruchom ponownie"
|
msgstr "Uruchom ponownie"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:695
|
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:696
|
||||||
#: ../js/ui/userMenu.js:697 ../js/ui/userMenu.js:812 ../js/ui/userMenu.js:935
|
#: ../js/ui/userMenu.js:698 ../js/ui/userMenu.js:813 ../js/ui/userMenu.js:936
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Wyłącz komputer"
|
msgstr "Wyłącz komputer"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:152
|
#: ../js/gdm/util.js:182
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Błąd uwierzytelniania"
|
msgstr "Błąd uwierzytelniania"
|
||||||
|
|
||||||
#. Translators: this message is shown below the password entry field
|
#. Translators: this message is shown below the password entry field
|
||||||
#. to indicate the user can swipe their finger instead
|
#. to indicate the user can swipe their finger instead
|
||||||
#: ../js/gdm/util.js:269
|
#: ../js/gdm/util.js:299
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(lub przeciągnięcie palca)"
|
msgstr "(lub przeciągnięcie palca)"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:294
|
#: ../js/gdm/util.js:324
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(np. użytkownik lub %s)"
|
msgstr "(np. użytkownik lub %s)"
|
||||||
|
|
||||||
#: ../js/misc/util.js:92
|
#: ../js/misc/util.js:94
|
||||||
msgid "Command not found"
|
msgid "Command not found"
|
||||||
msgstr "Nie odnaleziono polecenia"
|
msgstr "Nie odnaleziono polecenia"
|
||||||
|
|
||||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
#. something nicer
|
#. something nicer
|
||||||
#: ../js/misc/util.js:125
|
#: ../js/misc/util.js:127
|
||||||
msgid "Could not parse command:"
|
msgid "Could not parse command:"
|
||||||
msgstr "Nie można przetworzyć polecenia:"
|
msgstr "Nie można przetworzyć polecenia:"
|
||||||
|
|
||||||
#: ../js/misc/util.js:133
|
#: ../js/misc/util.js:135
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
|
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
|
||||||
|
|
||||||
#. Translators: Filter to display all applications
|
#: ../js/ui/appDisplay.js:348
|
||||||
#: ../js/ui/appDisplay.js:259
|
msgid "Frequent"
|
||||||
|
msgstr "Często używane"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:355
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Wszystkie"
|
msgstr "Wszystkie"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:667
|
#: ../js/ui/appDisplay.js:913
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nowe okno"
|
msgstr "Nowe okno"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:670 ../js/ui/dash.js:289
|
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Usuń z ulubionych"
|
msgstr "Usuń z ulubionych"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:671
|
#: ../js/ui/appDisplay.js:917
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Dodaj do ulubionych"
|
msgstr "Dodaj do ulubionych"
|
||||||
|
|
||||||
@@ -484,6 +494,14 @@ msgstr "Program %s został dodany do ulubionych."
|
|||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "Program %s został usunięty z ulubionych."
|
msgstr "Program %s został usunięty z ulubionych."
|
||||||
|
|
||||||
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:787
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr "Ustawienia"
|
||||||
|
|
||||||
|
#: ../js/ui/backgroundMenu.js:21
|
||||||
|
msgid "Change Background…"
|
||||||
|
msgstr "Zmień tło…"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#. Translators: Shown in calendar event list for all day events
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
#.
|
#.
|
||||||
@@ -1008,13 +1026,13 @@ msgstr "Nieznana przyczyna"
|
|||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Okna"
|
msgstr "Okna"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:253 ../js/ui/dash.js:291
|
#: ../js/ui/dash.js:248 ../js/ui/dash.js:286
|
||||||
msgid "Show Applications"
|
msgid "Show Applications"
|
||||||
msgstr "Wyświetl programy"
|
msgstr "Wyświetl programy"
|
||||||
|
|
||||||
#. Translators: this is the name of the dock/favorites area on
|
#. Translators: this is the name of the dock/favorites area on
|
||||||
#. the left of the overview
|
#. the left of the overview
|
||||||
#: ../js/ui/dash.js:427
|
#: ../js/ui/dash.js:435
|
||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Ulubione"
|
msgstr "Ulubione"
|
||||||
|
|
||||||
@@ -1141,84 +1159,84 @@ msgid "Download and install '%s' from extensions.gnome.org?"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Pobrać i zainstalować rozszerzenie \"%s\" z witryny extensions.gnome.org?"
|
"Pobrać i zainstalować rozszerzenie \"%s\" z witryny extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:601 ../js/ui/status/keyboard.js:314
|
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
|
||||||
#: ../js/ui/status/power.js:211
|
#: ../js/ui/status/power.js:211
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Klawiatura"
|
msgstr "Klawiatura"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:692
|
#: ../js/ui/lookingGlass.js:693
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Nie zainstalowano rozszerzeń"
|
msgstr "Nie zainstalowano rozszerzeń"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: ../js/ui/lookingGlass.js:746
|
#: ../js/ui/lookingGlass.js:747
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "Rozszerzenie %s nie wysłało żadnych błędów."
|
msgstr "Rozszerzenie %s nie wysłało żadnych błędów."
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:752
|
#: ../js/ui/lookingGlass.js:753
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Ukryj błędy"
|
msgstr "Ukryj błędy"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:756 ../js/ui/lookingGlass.js:816
|
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:817
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Wyświetl błędy"
|
msgstr "Wyświetl błędy"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:765
|
#: ../js/ui/lookingGlass.js:766
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Włączone"
|
msgstr "Włączone"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:768 ../src/gvc/gvc-mixer-control.c:1830
|
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Wyłączone"
|
msgstr "Wyłączone"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:770
|
#: ../js/ui/lookingGlass.js:771
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Błąd"
|
msgstr "Błąd"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:772
|
#: ../js/ui/lookingGlass.js:773
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Nieaktualne"
|
msgstr "Nieaktualne"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:774
|
#: ../js/ui/lookingGlass.js:775
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Pobieranie"
|
msgstr "Pobieranie"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:798
|
#: ../js/ui/lookingGlass.js:799
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Wyświetl źródło"
|
msgstr "Wyświetl źródło"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:807
|
#: ../js/ui/lookingGlass.js:808
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Strona WWW"
|
msgstr "Strona WWW"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1201
|
#: ../js/ui/messageTray.js:1177
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Otwórz"
|
msgstr "Otwórz"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1208
|
#: ../js/ui/messageTray.js:1184
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Usuń"
|
msgstr "Usuń"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1520
|
#: ../js/ui/messageTray.js:1496
|
||||||
msgid "Clear"
|
msgid "Clear Messages"
|
||||||
msgstr "Wyczyść"
|
msgstr "Wyczyść wiadomości"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1547
|
#: ../js/ui/messageTray.js:1523
|
||||||
msgid "Notification Settings"
|
msgid "Notification Settings"
|
||||||
msgstr "Ustawienia powiadomień"
|
msgstr "Ustawienia powiadomień"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1735
|
#: ../js/ui/messageTray.js:1702
|
||||||
msgid "No Messages"
|
msgid "No Messages"
|
||||||
msgstr "Brak wiadomości"
|
msgstr "Brak wiadomości"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1811
|
#: ../js/ui/messageTray.js:1782
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Obszar powiadamiania"
|
msgstr "Obszar powiadamiania"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2889
|
#: ../js/ui/messageTray.js:2857
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informacje systemowe"
|
msgstr "Informacje systemowe"
|
||||||
|
|
||||||
@@ -1227,11 +1245,11 @@ msgctxt "program"
|
|||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Nieznany"
|
msgstr "Nieznany"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:93
|
#: ../js/ui/overview.js:81
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Cofnij"
|
msgstr "Cofnij"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:140
|
#: ../js/ui/overview.js:124
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Podgląd"
|
msgstr "Podgląd"
|
||||||
|
|
||||||
@@ -1239,7 +1257,7 @@ msgstr "Podgląd"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/overview.js:219
|
#: ../js/ui/overview.js:272
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Wyszukiwanie…"
|
msgstr "Wyszukiwanie…"
|
||||||
|
|
||||||
@@ -1276,11 +1294,11 @@ msgstr "Zamknij"
|
|||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:117
|
#: ../js/ui/screenShield.js:90
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %e %B"
|
msgstr "%A, %e %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:180
|
#: ../js/ui/screenShield.js:153
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@@ -1288,7 +1306,7 @@ msgstr[0] "%d nowa wiadomość"
|
|||||||
msgstr[1] "%d nowe wiadomości"
|
msgstr[1] "%d nowe wiadomości"
|
||||||
msgstr[2] "%d nowych wiadomości"
|
msgstr[2] "%d nowych wiadomości"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:182
|
#: ../js/ui/screenShield.js:155
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@@ -1296,11 +1314,11 @@ msgstr[0] "%d nowe powiadomienie"
|
|||||||
msgstr[1] "%d nowe powiadomienia"
|
msgstr[1] "%d nowe powiadomienia"
|
||||||
msgstr[2] "%d nowych powiadomień"
|
msgstr[2] "%d nowych powiadomień"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:469 ../js/ui/userMenu.js:804
|
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:805
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Zablokuj ekran"
|
msgstr "Zablokuj ekran"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:635
|
#: ../js/ui/screenShield.js:638
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "Środowisko GNOME musi zablokować ekran"
|
msgstr "Środowisko GNOME musi zablokować ekran"
|
||||||
|
|
||||||
@@ -1311,11 +1329,11 @@ msgstr "Środowisko GNOME musi zablokować ekran"
|
|||||||
#.
|
#.
|
||||||
#. XXX: another option is to kick the user into the gdm login
|
#. XXX: another option is to kick the user into the gdm login
|
||||||
#. screen, where we're not affected by grabs
|
#. screen, where we're not affected by grabs
|
||||||
#: ../js/ui/screenShield.js:754 ../js/ui/screenShield.js:1165
|
#: ../js/ui/screenShield.js:757 ../js/ui/screenShield.js:1168
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Nie można zablokować"
|
msgstr "Nie można zablokować"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:755 ../js/ui/screenShield.js:1166
|
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Blokowanie zostało zablokowane przez program"
|
msgstr "Blokowanie zostało zablokowane przez program"
|
||||||
|
|
||||||
@@ -1327,19 +1345,19 @@ msgstr "Wyszukiwanie…"
|
|||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Brak wyników."
|
msgstr "Brak wyników."
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:26
|
#: ../js/ui/shellEntry.js:29
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Skopiuj"
|
msgstr "Skopiuj"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:31
|
#: ../js/ui/shellEntry.js:34
|
||||||
msgid "Paste"
|
msgid "Paste"
|
||||||
msgstr "Wklej"
|
msgstr "Wklej"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:102
|
#: ../js/ui/shellEntry.js:105
|
||||||
msgid "Show Text"
|
msgid "Show Text"
|
||||||
msgstr "Wyświetl tekst"
|
msgstr "Wyświetl tekst"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:104
|
#: ../js/ui/shellEntry.js:107
|
||||||
msgid "Hide Text"
|
msgid "Hide Text"
|
||||||
msgstr "Ukryj tekst"
|
msgstr "Ukryj tekst"
|
||||||
|
|
||||||
@@ -1351,55 +1369,55 @@ msgstr "Hasło"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Zapamiętanie hasła"
|
msgstr "Zapamiętanie hasła"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:192
|
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Odblokuj"
|
msgstr "Odblokuj"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:35
|
#: ../js/ui/status/accessibility.js:36
|
||||||
msgid "Accessibility"
|
msgid "Accessibility"
|
||||||
msgstr "Dostępność"
|
msgstr "Dostępność"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:40
|
#: ../js/ui/status/accessibility.js:41
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Powiększenie"
|
msgstr "Powiększenie"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:47
|
#: ../js/ui/status/accessibility.js:48
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Czytnik ekranowy"
|
msgstr "Czytnik ekranowy"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:51
|
#: ../js/ui/status/accessibility.js:52
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Klawiatura ekranowa"
|
msgstr "Klawiatura ekranowa"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:55
|
#: ../js/ui/status/accessibility.js:56
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Alarmy wizualne"
|
msgstr "Alarmy wizualne"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:58
|
#: ../js/ui/status/accessibility.js:59
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Trwałe klawisze"
|
msgstr "Trwałe klawisze"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:61
|
#: ../js/ui/status/accessibility.js:62
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Powolne klawisze"
|
msgstr "Powolne klawisze"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:64
|
#: ../js/ui/status/accessibility.js:65
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Odskakujące klawisze"
|
msgstr "Odskakujące klawisze"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:67
|
#: ../js/ui/status/accessibility.js:68
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Klawisze myszy"
|
msgstr "Klawisze myszy"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:71
|
#: ../js/ui/status/accessibility.js:72
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Ustawienia ułatwień dostępu"
|
msgstr "Ustawienia ułatwień dostępu"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:107
|
#: ../js/ui/status/accessibility.js:129
|
||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "Wysoki kontrast"
|
msgstr "Wysoki kontrast"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:154
|
#: ../js/ui/status/accessibility.js:178
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Duży tekst"
|
msgstr "Duży tekst"
|
||||||
|
|
||||||
@@ -1760,63 +1778,59 @@ msgstr "Głośność"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:203
|
#: ../js/ui/unlockDialog.js:151
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Zaloguj jako inny użytkownik"
|
msgstr "Zaloguj jako inny użytkownik"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:229
|
#: ../js/ui/unlockDialog.js:177
|
||||||
msgid "Unlock Window"
|
msgid "Unlock Window"
|
||||||
msgstr "Okno odblokowania"
|
msgstr "Okno odblokowania"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:191
|
#: ../js/ui/userMenu.js:192
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Dostępny"
|
msgstr "Dostępny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:194
|
#: ../js/ui/userMenu.js:195
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Zajęty"
|
msgstr "Zajęty"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:197
|
#: ../js/ui/userMenu.js:198
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Niewidoczny"
|
msgstr "Niewidoczny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:200
|
#: ../js/ui/userMenu.js:201
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Nieobecny"
|
msgstr "Nieobecny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:203
|
#: ../js/ui/userMenu.js:204
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Bezczynny"
|
msgstr "Bezczynny"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:206
|
#: ../js/ui/userMenu.js:207
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Offline"
|
msgstr "Offline"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:778
|
#: ../js/ui/userMenu.js:779
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Powiadomienia"
|
msgstr "Powiadomienia"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:786
|
#: ../js/ui/userMenu.js:795
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Ustawienia"
|
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:794
|
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Przełącz użytkownika"
|
msgstr "Przełącz użytkownika"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:799
|
#: ../js/ui/userMenu.js:800
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Wyloguj się"
|
msgstr "Wyloguj się"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:819
|
#: ../js/ui/userMenu.js:820
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Zaktualizuj i uruchom ponownie"
|
msgstr "Zaktualizuj i uruchom ponownie"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:837
|
#: ../js/ui/userMenu.js:838
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Stan komunikatora zostanie ustawiony na \"zajęty\""
|
msgstr "Stan komunikatora zostanie ustawiony na \"zajęty\""
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:838
|
#: ../js/ui/userMenu.js:839
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@@ -1826,20 +1840,20 @@ msgstr ""
|
|||||||
"użytkownik tego komputera może nie zobaczyć przychodzących od nich "
|
"użytkownik tego komputera może nie zobaczyć przychodzących od nich "
|
||||||
"wiadomości."
|
"wiadomości."
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:884
|
#: ../js/ui/userMenu.js:885
|
||||||
msgid "Other users are logged in."
|
msgid "Other users are logged in."
|
||||||
msgstr "Inni użytkownicy są zalogowani."
|
msgstr "Inni użytkownicy są zalogowani."
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:889
|
#: ../js/ui/userMenu.js:890
|
||||||
msgid "Shutting down might cause them to lose unsaved work."
|
msgid "Shutting down might cause them to lose unsaved work."
|
||||||
msgstr "Wyłączenie komputera może spowodować utratę danych."
|
msgstr "Wyłączenie komputera może spowodować utratę danych."
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:915
|
#: ../js/ui/userMenu.js:916
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s (remote)"
|
msgid "%s (remote)"
|
||||||
msgstr "%s (zdalnie)"
|
msgstr "%s (zdalnie)"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:917
|
#: ../js/ui/userMenu.js:918
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s (console)"
|
msgid "%s (console)"
|
||||||
msgstr "%s (konsola)"
|
msgstr "%s (konsola)"
|
||||||
|
597
po/pt_BR.po
597
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
191
po/sl.po
191
po/sl.po
@@ -9,15 +9,16 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2013-02-07 17:30+0000\n"
|
"POT-Creation-Date: 2013-02-12 15:16+0000\n"
|
||||||
"PO-Revision-Date: 2013-02-07 20:04+0100\n"
|
"PO-Revision-Date: 2013-02-24 21:33+0100\n"
|
||||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||||
"Language: Slovenian\n"
|
"Language: Slovenian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
|
||||||
|
"%100==4 ? 3 : 0);\n"
|
||||||
"X-Poedit-SourceCharset: utf-8\n"
|
"X-Poedit-SourceCharset: utf-8\n"
|
||||||
"X-Generator: Poedit 1.5.4\n"
|
"X-Generator: Poedit 1.5.4\n"
|
||||||
|
|
||||||
@@ -371,9 +372,10 @@ msgid "Not listed?"
|
|||||||
msgstr "Ali je ni na seznamu?"
|
msgstr "Ali je ni na seznamu?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:967 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:967 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
|
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:374
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||||
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:178
|
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:178
|
||||||
|
#: ../js/ui/userMenu.js:931
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Prekliči"
|
msgstr "Prekliči"
|
||||||
|
|
||||||
@@ -403,8 +405,8 @@ msgstr "Prijavno okno"
|
|||||||
msgid "Power"
|
msgid "Power"
|
||||||
msgstr "Napajanje"
|
msgstr "Napajanje"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:679 ../js/ui/userMenu.js:683
|
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:693 ../js/ui/userMenu.js:697
|
||||||
#: ../js/ui/userMenu.js:799
|
#: ../js/ui/userMenu.js:813
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Zaustavi"
|
msgstr "Zaustavi"
|
||||||
|
|
||||||
@@ -412,8 +414,8 @@ msgstr "Zaustavi"
|
|||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Zaženi znova"
|
msgstr "Zaženi znova"
|
||||||
|
|
||||||
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:681
|
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:695
|
||||||
#: ../js/ui/userMenu.js:683 ../js/ui/userMenu.js:798
|
#: ../js/ui/userMenu.js:697 ../js/ui/userMenu.js:812 ../js/ui/userMenu.js:935
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Izklop"
|
msgstr "Izklop"
|
||||||
|
|
||||||
@@ -482,60 +484,63 @@ msgctxt "event list time"
|
|||||||
msgid "All Day"
|
msgid "All Day"
|
||||||
msgstr "Celodnevno"
|
msgstr "Celodnevno"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list, if 24h format
|
#. Translators: Shown in calendar event list, if 24h format,
|
||||||
#: ../js/ui/calendar.js:66
|
#. \u2236 is a ratio character, similar to :
|
||||||
|
#: ../js/ui/calendar.js:67
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%H:%M"
|
msgid "%H\\u2236%M"
|
||||||
msgstr "%H:%M"
|
msgstr "%H\\u2236%M"
|
||||||
|
|
||||||
#. Transators: Shown in calendar event list, if 12h format
|
#. Transators: Shown in calendar event list, if 12h format,
|
||||||
#: ../js/ui/calendar.js:73
|
#. \u2236 is a ratio character, similar to : and \u2009 is
|
||||||
|
#. a thin space
|
||||||
|
#: ../js/ui/calendar.js:76
|
||||||
msgctxt "event list time"
|
msgctxt "event list time"
|
||||||
msgid "%l:%M %p"
|
msgid "%l\\u2236%M\\u2009%p"
|
||||||
msgstr "%l:%M %p"
|
msgstr "%l\\u2236%M\\u2009%p"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Sunday.
|
#. Translators: Calendar grid abbreviation for Sunday.
|
||||||
#. *
|
#. *
|
||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/calendar.js:104
|
#: ../js/ui/calendar.js:107
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "N"
|
msgstr "N"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: ../js/ui/calendar.js:106
|
#: ../js/ui/calendar.js:109
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "P"
|
msgstr "P"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: ../js/ui/calendar.js:108
|
#: ../js/ui/calendar.js:111
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "T"
|
msgstr "T"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: ../js/ui/calendar.js:110
|
#: ../js/ui/calendar.js:113
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: ../js/ui/calendar.js:112
|
#: ../js/ui/calendar.js:115
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Č"
|
msgstr "Č"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: ../js/ui/calendar.js:114
|
#: ../js/ui/calendar.js:117
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "P"
|
msgstr "P"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: ../js/ui/calendar.js:116
|
#: ../js/ui/calendar.js:119
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
@@ -546,77 +551,77 @@ msgstr "S"
|
|||||||
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
|
||||||
#. * both be 'T').
|
#. * both be 'T').
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/calendar.js:129
|
#: ../js/ui/calendar.js:132
|
||||||
msgctxt "list sunday"
|
msgctxt "list sunday"
|
||||||
msgid "Su"
|
msgid "Su"
|
||||||
msgstr "Ne"
|
msgstr "Ne"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Monday
|
#. Translators: Event list abbreviation for Monday
|
||||||
#: ../js/ui/calendar.js:131
|
#: ../js/ui/calendar.js:134
|
||||||
msgctxt "list monday"
|
msgctxt "list monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "P"
|
msgstr "P"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Tuesday
|
#. Translators: Event list abbreviation for Tuesday
|
||||||
#: ../js/ui/calendar.js:133
|
#: ../js/ui/calendar.js:136
|
||||||
msgctxt "list tuesday"
|
msgctxt "list tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "T"
|
msgstr "T"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Wednesday
|
#. Translators: Event list abbreviation for Wednesday
|
||||||
#: ../js/ui/calendar.js:135
|
#: ../js/ui/calendar.js:138
|
||||||
msgctxt "list wednesday"
|
msgctxt "list wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Thursday
|
#. Translators: Event list abbreviation for Thursday
|
||||||
#: ../js/ui/calendar.js:137
|
#: ../js/ui/calendar.js:140
|
||||||
msgctxt "list thursday"
|
msgctxt "list thursday"
|
||||||
msgid "Th"
|
msgid "Th"
|
||||||
msgstr "Če"
|
msgstr "Če"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Friday
|
#. Translators: Event list abbreviation for Friday
|
||||||
#: ../js/ui/calendar.js:139
|
#: ../js/ui/calendar.js:142
|
||||||
msgctxt "list friday"
|
msgctxt "list friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "Pe"
|
msgstr "Pe"
|
||||||
|
|
||||||
#. Translators: Event list abbreviation for Saturday
|
#. Translators: Event list abbreviation for Saturday
|
||||||
#: ../js/ui/calendar.js:141
|
#: ../js/ui/calendar.js:144
|
||||||
msgctxt "list saturday"
|
msgctxt "list saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events
|
#. Translators: Text to show if there are no events
|
||||||
#: ../js/ui/calendar.js:674
|
#: ../js/ui/calendar.js:677
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Nič ni razporejeno"
|
msgstr "Nič ni razporejeno"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
#: ../js/ui/calendar.js:690
|
#: ../js/ui/calendar.js:693
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %d. %m."
|
msgstr "%A, %d. %m."
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
#: ../js/ui/calendar.js:693
|
#: ../js/ui/calendar.js:696
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %d %B %Y"
|
msgstr "%A, %d %B %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:703
|
#: ../js/ui/calendar.js:706
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Danes"
|
msgstr "Danes"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:707
|
#: ../js/ui/calendar.js:710
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Jutri"
|
msgstr "Jutri"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:718
|
#: ../js/ui/calendar.js:721
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Ta teden"
|
msgstr "Ta teden"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:726
|
#: ../js/ui/calendar.js:729
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Naslednji teden"
|
msgstr "Naslednji teden"
|
||||||
|
|
||||||
@@ -628,16 +633,16 @@ msgstr "Zunanji pogon je priklopljen"
|
|||||||
msgid "External drive disconnected"
|
msgid "External drive disconnected"
|
||||||
msgstr "Zunanji pogon je odklopljen"
|
msgstr "Zunanji pogon je odklopljen"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:292
|
#: ../js/ui/components/autorunManager.js:294
|
||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Odstranljive naprave"
|
msgstr "Odstranljive naprave"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:591
|
#: ../js/ui/components/autorunManager.js:593
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Odpri s programom %s"
|
msgstr "Odpri s programom %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:617
|
#: ../js/ui/components/autorunManager.js:619
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Izvrzi"
|
msgstr "Izvrzi"
|
||||||
|
|
||||||
@@ -1016,22 +1021,22 @@ msgstr "Nastavitve časa in datuma"
|
|||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%a, %e. %b., %R"
|
msgstr "%a, %e. %b., %R"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:61
|
#: ../js/ui/endSessionDialog.js:62
|
||||||
#, c-format
|
#, c-format
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Log Out %s"
|
msgid "Log Out %s"
|
||||||
msgstr "Odjava %s"
|
msgstr "Odjava %s"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:62
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odjava"
|
msgstr "Odjava"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:63
|
#: ../js/ui/endSessionDialog.js:64
|
||||||
msgid "Click Log Out to quit these applications and log out of the system."
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
msgstr "Kliknite Odjava za končanje teh programov in odjavo iz sistema."
|
msgstr "Kliknite Odjava za končanje teh programov in odjavo iz sistema."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:65
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s will be logged out automatically in %d second."
|
msgid "%s will be logged out automatically in %d second."
|
||||||
msgid_plural "%s will be logged out automatically in %d seconds."
|
msgid_plural "%s will be logged out automatically in %d seconds."
|
||||||
@@ -1040,7 +1045,7 @@ msgstr[1] "Uporabnik %s bo samodejno odjavljen čez %d sekundo."
|
|||||||
msgstr[2] "Uporabnik %s bo samodejno odjavljen čez %d sekundi."
|
msgstr[2] "Uporabnik %s bo samodejno odjavljen čez %d sekundi."
|
||||||
msgstr[3] "Uporabnik %s bo samodejno odjavljen čez %d sekunde."
|
msgstr[3] "Uporabnik %s bo samodejno odjavljen čez %d sekunde."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:70
|
#: ../js/ui/endSessionDialog.js:71
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "You will be logged out automatically in %d second."
|
msgid "You will be logged out automatically in %d second."
|
||||||
msgid_plural "You will be logged out automatically in %d seconds."
|
msgid_plural "You will be logged out automatically in %d seconds."
|
||||||
@@ -1049,26 +1054,26 @@ msgstr[1] "Uporabnik bo samodejno odjavljen čez %d sekundo."
|
|||||||
msgstr[2] "Uporabnik bo samodejno odjavljen čez %d sekundi."
|
msgstr[2] "Uporabnik bo samodejno odjavljen čez %d sekundi."
|
||||||
msgstr[3] "Uporabnik bo samodejno odjavljen čez %d sekunde."
|
msgstr[3] "Uporabnik bo samodejno odjavljen čez %d sekunde."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:74
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
msgid "Logging out of the system."
|
msgid "Logging out of the system."
|
||||||
msgstr "Odjavljanje iz sistema."
|
msgstr "Odjavljanje iz sistema."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:76
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odjava"
|
msgstr "Odjava"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:81
|
#: ../js/ui/endSessionDialog.js:82
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Izklop"
|
msgstr "Izklop"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:82
|
#: ../js/ui/endSessionDialog.js:83
|
||||||
msgid "Click Power Off to quit these applications and power off the system."
|
msgid "Click Power Off to quit these applications and power off the system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Kliknite na gumb za izklop za končanje teh programov in izklop iz sistema."
|
"Kliknite na gumb za izklop za končanje teh programov in izklop iz sistema."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:84
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The system will power off automatically in %d second."
|
msgid "The system will power off automatically in %d second."
|
||||||
msgid_plural "The system will power off automatically in %d seconds."
|
msgid_plural "The system will power off automatically in %d seconds."
|
||||||
@@ -1077,31 +1082,31 @@ msgstr[1] "Sistem se bo samodejno izklopil čez %d sekundo."
|
|||||||
msgstr[2] "Sistem se bo samodejno izklopil čez %d sekundi."
|
msgstr[2] "Sistem se bo samodejno izklopil čez %d sekundi."
|
||||||
msgstr[3] "Sistem se bo samodejno izklopil čez %d sekunde."
|
msgstr[3] "Sistem se bo samodejno izklopil čez %d sekunde."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:88
|
#: ../js/ui/endSessionDialog.js:89
|
||||||
msgid "Powering off the system."
|
msgid "Powering off the system."
|
||||||
msgstr "Izklapljanje sistema"
|
msgstr "Izklapljanje sistema"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:90 ../js/ui/endSessionDialog.js:107
|
#: ../js/ui/endSessionDialog.js:91 ../js/ui/endSessionDialog.js:108
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Ponoven zagon"
|
msgstr "Ponoven zagon"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:92
|
#: ../js/ui/endSessionDialog.js:93
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Izklop"
|
msgstr "Izklop"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:98
|
#: ../js/ui/endSessionDialog.js:99
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Restart"
|
msgid "Restart"
|
||||||
msgstr "Ponoven zagon"
|
msgstr "Ponoven zagon"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:99
|
#: ../js/ui/endSessionDialog.js:100
|
||||||
msgid "Click Restart to quit these applications and restart the system."
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Kliknite Zaženi znova za končanje teh programov in ponoven zagon sistema. "
|
"Kliknite Zaženi znova za končanje teh programov in ponoven zagon sistema. "
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:101
|
#: ../js/ui/endSessionDialog.js:102
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The system will restart automatically in %d second."
|
msgid "The system will restart automatically in %d second."
|
||||||
msgid_plural "The system will restart automatically in %d seconds."
|
msgid_plural "The system will restart automatically in %d seconds."
|
||||||
@@ -1110,7 +1115,7 @@ msgstr[1] "Sistem se bo samodejno ponovno zagnal čez %d sekundo."
|
|||||||
msgstr[2] "Sistem se bo samodejno ponovno zagnal čez %d sekundi."
|
msgstr[2] "Sistem se bo samodejno ponovno zagnal čez %d sekundi."
|
||||||
msgstr[3] "Sistem se bo samodejno ponovno zagnal čez %d sekunde."
|
msgstr[3] "Sistem se bo samodejno ponovno zagnal čez %d sekunde."
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:105
|
#: ../js/ui/endSessionDialog.js:106
|
||||||
msgid "Restarting the system."
|
msgid "Restarting the system."
|
||||||
msgstr "Ponoven zagon sistema."
|
msgstr "Ponoven zagon sistema."
|
||||||
|
|
||||||
@@ -1189,15 +1194,23 @@ msgstr "Odpri"
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Odstrani"
|
msgstr "Odstrani"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1629
|
#: ../js/ui/messageTray.js:1461
|
||||||
|
msgid "Clear"
|
||||||
|
msgstr "Počisti"
|
||||||
|
|
||||||
|
#: ../js/ui/messageTray.js:1484
|
||||||
|
msgid "Notification Settings"
|
||||||
|
msgstr "Nastavitve obvestil"
|
||||||
|
|
||||||
|
#: ../js/ui/messageTray.js:1667
|
||||||
msgid "No Messages"
|
msgid "No Messages"
|
||||||
msgstr "Ni sporočil"
|
msgstr "Ni sporočil"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1648
|
#: ../js/ui/messageTray.js:1728
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Vrstica sporočanja"
|
msgstr "Vrstica sporočanja"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2759
|
#: ../js/ui/messageTray.js:2842
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Podrobnosti sistema"
|
msgstr "Podrobnosti sistema"
|
||||||
|
|
||||||
@@ -1283,7 +1296,7 @@ msgstr[1] "%d novo obvestilo"
|
|||||||
msgstr[2] "%d novi obvestili"
|
msgstr[2] "%d novi obvestili"
|
||||||
msgstr[3] "%d nova obvestila"
|
msgstr[3] "%d nova obvestila"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:464 ../js/ui/userMenu.js:790
|
#: ../js/ui/screenShield.js:464 ../js/ui/userMenu.js:804
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Zakleni"
|
msgstr "Zakleni"
|
||||||
|
|
||||||
@@ -1291,11 +1304,11 @@ msgstr "Zakleni"
|
|||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "Zakleniti je treba zaslon"
|
msgstr "Zakleniti je treba zaslon"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:430
|
#: ../js/ui/searchDisplay.js:431
|
||||||
msgid "Searching..."
|
msgid "Searching..."
|
||||||
msgstr "Iskanje ..."
|
msgstr "Iskanje ..."
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:478
|
#: ../js/ui/searchDisplay.js:479
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Ni najdenih zadetkov."
|
msgstr "Ni najdenih zadetkov."
|
||||||
|
|
||||||
@@ -1744,55 +1757,55 @@ msgstr "Prijava kot drug uporabnik"
|
|||||||
msgid "Unlock Window"
|
msgid "Unlock Window"
|
||||||
msgstr "Odkleni okno"
|
msgstr "Odkleni okno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:177
|
#: ../js/ui/userMenu.js:191
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Na voljo"
|
msgstr "Na voljo"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:180
|
#: ../js/ui/userMenu.js:194
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Zaposleno"
|
msgstr "Zaposleno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:183
|
#: ../js/ui/userMenu.js:197
|
||||||
msgid "Invisible"
|
msgid "Invisible"
|
||||||
msgstr "Nevidno"
|
msgstr "Nevidno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:186
|
#: ../js/ui/userMenu.js:200
|
||||||
msgid "Away"
|
msgid "Away"
|
||||||
msgstr "Odsotno"
|
msgstr "Odsotno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:189
|
#: ../js/ui/userMenu.js:203
|
||||||
msgid "Idle"
|
msgid "Idle"
|
||||||
msgstr "Nedejavno"
|
msgstr "Nedejavno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:192
|
#: ../js/ui/userMenu.js:206
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Nepovezano"
|
msgstr "Nepovezano"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:764
|
#: ../js/ui/userMenu.js:778
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Obvestila"
|
msgstr "Obvestila"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:772
|
#: ../js/ui/userMenu.js:786
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Nastavitve"
|
msgstr "Nastavitve"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:780
|
#: ../js/ui/userMenu.js:794
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Preklopi uporabnika"
|
msgstr "Preklopi uporabnika"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:785
|
#: ../js/ui/userMenu.js:799
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Odjava"
|
msgstr "Odjava"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:805
|
#: ../js/ui/userMenu.js:819
|
||||||
msgid "Install Updates & Restart"
|
msgid "Install Updates & Restart"
|
||||||
msgstr "Namesti posodobitve in ponovno zaženi"
|
msgstr "Namesti posodobitve in ponovno zaženi"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:823
|
#: ../js/ui/userMenu.js:837
|
||||||
msgid "Your chat status will be set to busy"
|
msgid "Your chat status will be set to busy"
|
||||||
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
|
||||||
|
|
||||||
#: ../js/ui/userMenu.js:824
|
#: ../js/ui/userMenu.js:838
|
||||||
msgid ""
|
msgid ""
|
||||||
"Notifications are now disabled, including chat messages. Your online status "
|
"Notifications are now disabled, including chat messages. Your online status "
|
||||||
"has been adjusted to let others know that you might not see their messages."
|
"has been adjusted to let others know that you might not see their messages."
|
||||||
@@ -1801,6 +1814,24 @@ msgstr ""
|
|||||||
"povezanosti se je prilagodilo, da bodo drugi vedeli, da njihovih sporočil "
|
"povezanosti se je prilagodilo, da bodo drugi vedeli, da njihovih sporočil "
|
||||||
"morda ne boste opazili."
|
"morda ne boste opazili."
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:884
|
||||||
|
msgid "Other users are logged in."
|
||||||
|
msgstr "Prijavljeni so tudi drugi uporabniki."
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:889
|
||||||
|
msgid "Shutting down might cause them to lose unsaved work."
|
||||||
|
msgstr "Z izklopom je njihovo delo lahko izgubljeno."
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:915
|
||||||
|
#, c-format
|
||||||
|
msgid "%s (remote)"
|
||||||
|
msgstr "%s (oddaljeno)"
|
||||||
|
|
||||||
|
#: ../js/ui/userMenu.js:917
|
||||||
|
#, c-format
|
||||||
|
msgid "%s (console)"
|
||||||
|
msgstr "%s (konzola)"
|
||||||
|
|
||||||
#: ../js/ui/viewSelector.js:85
|
#: ../js/ui/viewSelector.js:85
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programi"
|
msgstr "Programi"
|
||||||
@@ -1891,6 +1922,14 @@ msgstr "Geslo ne more biti prazno"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Uporabnik je zavrnil pogovorno okno overitve"
|
msgstr "Uporabnik je zavrnil pogovorno okno overitve"
|
||||||
|
|
||||||
|
#~ msgctxt "event list time"
|
||||||
|
#~ msgid "%H:%M"
|
||||||
|
#~ msgstr "%H:%M"
|
||||||
|
|
||||||
|
#~ msgctxt "event list time"
|
||||||
|
#~ msgid "%l:%M %p"
|
||||||
|
#~ msgstr "%l:%M %p"
|
||||||
|
|
||||||
#~ msgid "United Kingdom"
|
#~ msgid "United Kingdom"
|
||||||
#~ msgstr "Velika Britanija"
|
#~ msgstr "Velika Britanija"
|
||||||
|
|
||||||
|
565
po/zh_HK.po
565
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
565
po/zh_TW.po
565
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@@ -284,7 +284,7 @@ default_log_handler (const char *log_domain,
|
|||||||
|
|
||||||
/* Filter out telepathy-glib logs, we don't want to flood Shell's output
|
/* Filter out telepathy-glib logs, we don't want to flood Shell's output
|
||||||
* with those. */
|
* with those. */
|
||||||
if (!g_str_has_prefix (log_domain, "tp-glib"))
|
if (!log_domain || !g_str_has_prefix (log_domain, "tp-glib"))
|
||||||
g_log_default_handler (log_domain, log_level, message, data);
|
g_log_default_handler (log_domain, log_level, message, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -236,6 +236,60 @@ shell_generic_container_set_skip_paint (ShellGenericContainer *self,
|
|||||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
shell_generic_container_get_paint_volume (ClutterActor *self,
|
||||||
|
ClutterPaintVolume *volume)
|
||||||
|
{
|
||||||
|
ClutterActorBox paint_box, alloc_box;
|
||||||
|
StThemeNode *theme_node;
|
||||||
|
ClutterVertex origin;
|
||||||
|
|
||||||
|
/* Setting the paint volume does not make sense when we don't have any allocation */
|
||||||
|
if (!clutter_actor_has_allocation (self))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
theme_node = st_widget_get_theme_node (ST_WIDGET (self));
|
||||||
|
clutter_actor_get_allocation_box (self, &alloc_box);
|
||||||
|
|
||||||
|
st_theme_node_get_paint_box (theme_node, &alloc_box, &paint_box);
|
||||||
|
|
||||||
|
origin.x = paint_box.x1 - alloc_box.x1;
|
||||||
|
origin.y = paint_box.y1 - alloc_box.y1;
|
||||||
|
origin.z = 0.0f;
|
||||||
|
|
||||||
|
clutter_paint_volume_set_origin (volume, &origin);
|
||||||
|
clutter_paint_volume_set_width (volume, paint_box.x2 - paint_box.x1);
|
||||||
|
clutter_paint_volume_set_height (volume, paint_box.y2 - paint_box.y1);
|
||||||
|
|
||||||
|
if (!clutter_actor_get_clip_to_allocation (self))
|
||||||
|
{
|
||||||
|
ClutterActor *child;
|
||||||
|
/* Based on ClutterGroup/ClutterBox; include the children's
|
||||||
|
* paint volumes, since they may paint outside our allocation.
|
||||||
|
*/
|
||||||
|
for (child = clutter_actor_get_first_child (self);
|
||||||
|
child != NULL;
|
||||||
|
child = clutter_actor_get_next_sibling (child))
|
||||||
|
{
|
||||||
|
const ClutterPaintVolume *child_volume;
|
||||||
|
|
||||||
|
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (shell_generic_container_get_skip_paint (SHELL_GENERIC_CONTAINER (self), child))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
child_volume = clutter_actor_get_transformed_paint_volume (child, self);
|
||||||
|
if (!child_volume)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
clutter_paint_volume_union (volume, child_volume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shell_generic_container_finalize (GObject *object)
|
shell_generic_container_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
@@ -260,6 +314,7 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
|
|||||||
actor_class->allocate = shell_generic_container_allocate;
|
actor_class->allocate = shell_generic_container_allocate;
|
||||||
actor_class->paint = shell_generic_container_paint;
|
actor_class->paint = shell_generic_container_paint;
|
||||||
actor_class->pick = shell_generic_container_pick;
|
actor_class->pick = shell_generic_container_pick;
|
||||||
|
actor_class->get_paint_volume = shell_generic_container_get_paint_volume;
|
||||||
|
|
||||||
widget_class->get_focus_chain = shell_generic_container_get_focus_chain;
|
widget_class->get_focus_chain = shell_generic_container_get_focus_chain;
|
||||||
|
|
||||||
|
@@ -802,20 +802,22 @@ global_stage_notify_height (GObject *gobject,
|
|||||||
g_object_notify (G_OBJECT (global), "screen-height");
|
g_object_notify (G_OBJECT (global), "screen-height");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
global_stage_before_paint (ClutterStage *stage,
|
global_stage_before_paint (gpointer data)
|
||||||
ShellGlobal *global)
|
|
||||||
{
|
{
|
||||||
shell_perf_log_event (shell_perf_log_get_default (),
|
shell_perf_log_event (shell_perf_log_get_default (),
|
||||||
"clutter.stagePaintStart");
|
"clutter.stagePaintStart");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
global_stage_after_paint (ClutterStage *stage,
|
global_stage_after_paint (gpointer data)
|
||||||
ShellGlobal *global)
|
|
||||||
{
|
{
|
||||||
shell_perf_log_event (shell_perf_log_get_default (),
|
shell_perf_log_event (shell_perf_log_get_default (),
|
||||||
"clutter.stagePaintDone");
|
"clutter.stagePaintDone");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is an IBus workaround. The flow of events with IBus is that every time
|
/* This is an IBus workaround. The flow of events with IBus is that every time
|
||||||
@@ -939,10 +941,13 @@ _shell_global_set_plugin (ShellGlobal *global,
|
|||||||
g_signal_connect (global->stage, "notify::height",
|
g_signal_connect (global->stage, "notify::height",
|
||||||
G_CALLBACK (global_stage_notify_height), global);
|
G_CALLBACK (global_stage_notify_height), global);
|
||||||
|
|
||||||
g_signal_connect (global->stage, "paint",
|
clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_PRE_PAINT,
|
||||||
G_CALLBACK (global_stage_before_paint), global);
|
global_stage_before_paint,
|
||||||
g_signal_connect_after (global->stage, "paint",
|
NULL, NULL);
|
||||||
G_CALLBACK (global_stage_after_paint), global);
|
|
||||||
|
clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
|
||||||
|
global_stage_after_paint,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
shell_perf_log_define_event (shell_perf_log_get_default(),
|
shell_perf_log_define_event (shell_perf_log_get_default(),
|
||||||
"clutter.stagePaintStart",
|
"clutter.stagePaintStart",
|
||||||
|
@@ -602,7 +602,8 @@ st_entry_key_press_event (ClutterActor *actor,
|
|||||||
|
|
||||||
/* copy */
|
/* copy */
|
||||||
if ((event->modifier_state & CLUTTER_CONTROL_MASK)
|
if ((event->modifier_state & CLUTTER_CONTROL_MASK)
|
||||||
&& event->keyval == CLUTTER_c)
|
&& event->keyval == CLUTTER_c &&
|
||||||
|
clutter_text_get_password_char ((ClutterText*) priv->entry) == 0)
|
||||||
{
|
{
|
||||||
StClipboard *clipboard;
|
StClipboard *clipboard;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
@@ -622,7 +623,8 @@ st_entry_key_press_event (ClutterActor *actor,
|
|||||||
|
|
||||||
/* cut */
|
/* cut */
|
||||||
if ((event->modifier_state & CLUTTER_CONTROL_MASK)
|
if ((event->modifier_state & CLUTTER_CONTROL_MASK)
|
||||||
&& event->keyval == CLUTTER_x)
|
&& event->keyval == CLUTTER_x &&
|
||||||
|
clutter_text_get_password_char ((ClutterText*) priv->entry) == 0)
|
||||||
{
|
{
|
||||||
StClipboard *clipboard;
|
StClipboard *clipboard;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
|
@@ -64,20 +64,20 @@ void main ()
|
|||||||
|
|
||||||
float vfade_scale = height / vfade_offset;
|
float vfade_scale = height / vfade_offset;
|
||||||
if (fade_top) {
|
if (fade_top) {
|
||||||
ratio *= FADE((y / vfade_offset), min(vvalue * vfade_scale, 1.0));
|
ratio *= FADE((y / vfade_offset), min(sqrt(vvalue) * vfade_scale, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fade_bottom) {
|
if (fade_bottom) {
|
||||||
ratio *= FADE((fade_area[1][1] - y)/(fade_area[1][1] - fade_bottom_start), min((1.0 - vvalue) * vfade_scale, 1.0));
|
ratio *= FADE((fade_area[1][1] - y)/(fade_area[1][1] - fade_bottom_start), min(sqrt(1.0 - vvalue) * vfade_scale, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
float hfade_scale = width / hfade_offset;
|
float hfade_scale = width / hfade_offset;
|
||||||
if (fade_left) {
|
if (fade_left) {
|
||||||
ratio *= FADE(x / hfade_offset, min(hvalue * hfade_scale, 1.0));
|
ratio *= FADE(x / hfade_offset, min(sqrt(hvalue) * hfade_scale, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fade_right) {
|
if (fade_right) {
|
||||||
ratio *= FADE((fade_area[1][0] - x)/(fade_area[1][0] - fade_right_start), min((1.0 - hvalue) * hfade_scale, 1.0));
|
ratio *= FADE((fade_area[1][0] - x)/(fade_area[1][0] - fade_right_start), min(sqrt(1.0 - hvalue) * hfade_scale, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
cogl_color_out *= ratio;
|
cogl_color_out *= ratio;
|
||||||
|
@@ -101,6 +101,7 @@ struct _StScrollViewPrivate
|
|||||||
gboolean row_size_set : 1;
|
gboolean row_size_set : 1;
|
||||||
gboolean column_size_set : 1;
|
gboolean column_size_set : 1;
|
||||||
guint mouse_scroll : 1;
|
guint mouse_scroll : 1;
|
||||||
|
guint overlay_scrollbars : 1;
|
||||||
guint hscrollbar_visible : 1;
|
guint hscrollbar_visible : 1;
|
||||||
guint vscrollbar_visible : 1;
|
guint vscrollbar_visible : 1;
|
||||||
};
|
};
|
||||||
@@ -115,6 +116,7 @@ enum {
|
|||||||
PROP_HSCROLLBAR_VISIBLE,
|
PROP_HSCROLLBAR_VISIBLE,
|
||||||
PROP_VSCROLLBAR_VISIBLE,
|
PROP_VSCROLLBAR_VISIBLE,
|
||||||
PROP_MOUSE_SCROLL,
|
PROP_MOUSE_SCROLL,
|
||||||
|
PROP_OVERLAY_SCROLLBARS,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -148,6 +150,9 @@ st_scroll_view_get_property (GObject *object,
|
|||||||
case PROP_MOUSE_SCROLL:
|
case PROP_MOUSE_SCROLL:
|
||||||
g_value_set_boolean (value, priv->mouse_scroll);
|
g_value_set_boolean (value, priv->mouse_scroll);
|
||||||
break;
|
break;
|
||||||
|
case PROP_OVERLAY_SCROLLBARS:
|
||||||
|
g_value_set_boolean (value, priv->overlay_scrollbars);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
}
|
}
|
||||||
@@ -212,6 +217,10 @@ st_scroll_view_set_property (GObject *object,
|
|||||||
st_scroll_view_set_mouse_scrolling (self,
|
st_scroll_view_set_mouse_scrolling (self,
|
||||||
g_value_get_boolean (value));
|
g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
|
case PROP_OVERLAY_SCROLLBARS:
|
||||||
|
st_scroll_view_set_overlay_scrollbars (self,
|
||||||
|
g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
case PROP_HSCROLLBAR_POLICY:
|
case PROP_HSCROLLBAR_POLICY:
|
||||||
st_scroll_view_set_policy (self,
|
st_scroll_view_set_policy (self,
|
||||||
g_value_get_enum (value),
|
g_value_get_enum (value),
|
||||||
@@ -376,14 +385,14 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
|
|||||||
account_for_vscrollbar = FALSE;
|
account_for_vscrollbar = FALSE;
|
||||||
break;
|
break;
|
||||||
case GTK_POLICY_ALWAYS:
|
case GTK_POLICY_ALWAYS:
|
||||||
account_for_vscrollbar = TRUE;
|
account_for_vscrollbar = !priv->overlay_scrollbars;
|
||||||
break;
|
break;
|
||||||
case GTK_POLICY_AUTOMATIC:
|
case GTK_POLICY_AUTOMATIC:
|
||||||
/* For automatic scrollbars, we always request space for the vertical
|
/* For automatic scrollbars, we always request space for the vertical
|
||||||
* scrollbar; we won't know whether we actually need one until our
|
* scrollbar; we won't know whether we actually need one until our
|
||||||
* height is assigned in allocate().
|
* height is assigned in allocate().
|
||||||
*/
|
*/
|
||||||
account_for_vscrollbar = TRUE;
|
account_for_vscrollbar = !priv->overlay_scrollbars;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,14 +457,14 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
|
|||||||
account_for_hscrollbar = FALSE;
|
account_for_hscrollbar = FALSE;
|
||||||
break;
|
break;
|
||||||
case GTK_POLICY_ALWAYS:
|
case GTK_POLICY_ALWAYS:
|
||||||
account_for_hscrollbar = TRUE;
|
account_for_hscrollbar = !priv->overlay_scrollbars;
|
||||||
break;
|
break;
|
||||||
case GTK_POLICY_AUTOMATIC:
|
case GTK_POLICY_AUTOMATIC:
|
||||||
/* For automatic scrollbars, we always request space for the horizontal
|
/* For automatic scrollbars, we always request space for the horizontal
|
||||||
* scrollbar; we won't know whether we actually need one until our
|
* scrollbar; we won't know whether we actually need one until our
|
||||||
* width is assigned in allocate().
|
* width is assigned in allocate().
|
||||||
*/
|
*/
|
||||||
account_for_hscrollbar = TRUE;
|
account_for_hscrollbar = !priv->overlay_scrollbars;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -626,14 +635,15 @@ st_scroll_view_allocate (ClutterActor *actor,
|
|||||||
clutter_actor_allocate (priv->hscroll, &child_box, flags);
|
clutter_actor_allocate (priv->hscroll, &child_box, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In case the scrollbar policy is NEVER, we don't trim the content
|
/* In case the scrollbar policy is NEVER or scrollbars should be
|
||||||
* box allocation by the scrollbar size.
|
* overlayed, we don't trim the content box allocation by the
|
||||||
|
* scrollbar size.
|
||||||
* Fold this into the scrollbar sizes to simplify the rest of the
|
* Fold this into the scrollbar sizes to simplify the rest of the
|
||||||
* computations.
|
* computations.
|
||||||
*/
|
*/
|
||||||
if (priv->hscrollbar_policy == GTK_POLICY_NEVER)
|
if (priv->hscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
|
||||||
sb_height = 0;
|
sb_height = 0;
|
||||||
if (priv->vscrollbar_policy == GTK_POLICY_NEVER)
|
if (priv->vscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars)
|
||||||
sb_width = 0;
|
sb_width = 0;
|
||||||
|
|
||||||
/* Child */
|
/* Child */
|
||||||
@@ -828,6 +838,14 @@ st_scroll_view_class_init (StScrollViewClass *klass)
|
|||||||
PROP_MOUSE_SCROLL,
|
PROP_MOUSE_SCROLL,
|
||||||
pspec);
|
pspec);
|
||||||
|
|
||||||
|
pspec = g_param_spec_boolean ("overlay-scrollbars",
|
||||||
|
"Use Overlay Scrollbars",
|
||||||
|
"Overlay scrollbars over the content",
|
||||||
|
FALSE,
|
||||||
|
G_PARAM_READWRITE);
|
||||||
|
g_object_class_install_property (object_class,
|
||||||
|
PROP_OVERLAY_SCROLLBARS,
|
||||||
|
pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1090,6 +1108,49 @@ st_scroll_view_get_mouse_scrolling (StScrollView *scroll)
|
|||||||
return priv->mouse_scroll;
|
return priv->mouse_scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_scroll_view_set_overlay_scrollbars:
|
||||||
|
* @scroll: A #StScrollView
|
||||||
|
* @enabled: Whether to enable overlay scrollbars
|
||||||
|
*
|
||||||
|
* Sets whether scrollbars are painted on top of the content.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
st_scroll_view_set_overlay_scrollbars (StScrollView *scroll,
|
||||||
|
gboolean enabled)
|
||||||
|
{
|
||||||
|
StScrollViewPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (ST_IS_SCROLL_VIEW (scroll));
|
||||||
|
|
||||||
|
priv = ST_SCROLL_VIEW (scroll)->priv;
|
||||||
|
|
||||||
|
if (priv->overlay_scrollbars != enabled)
|
||||||
|
{
|
||||||
|
priv->overlay_scrollbars = enabled;
|
||||||
|
g_object_notify (G_OBJECT (scroll), "overlay-scrollbars");
|
||||||
|
clutter_actor_queue_relayout (CLUTTER_ACTOR (scroll));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_scroll_view_get_overlay_scrollbars:
|
||||||
|
* @scroll: A #StScrollView
|
||||||
|
*
|
||||||
|
* Gets the value set by st_scroll_view_set_overlay_scrollbars().
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
st_scroll_view_get_overlay_scrollbars (StScrollView *scroll)
|
||||||
|
{
|
||||||
|
StScrollViewPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (ST_IS_SCROLL_VIEW (scroll), FALSE);
|
||||||
|
|
||||||
|
priv = ST_SCROLL_VIEW (scroll)->priv;
|
||||||
|
|
||||||
|
return priv->overlay_scrollbars;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_scroll_view_set_policy:
|
* st_scroll_view_set_policy:
|
||||||
* @scroll: A #StScrollView
|
* @scroll: A #StScrollView
|
||||||
|
@@ -80,6 +80,10 @@ void st_scroll_view_set_mouse_scrolling (StScrollView *scroll,
|
|||||||
gboolean enabled);
|
gboolean enabled);
|
||||||
gboolean st_scroll_view_get_mouse_scrolling (StScrollView *scroll);
|
gboolean st_scroll_view_get_mouse_scrolling (StScrollView *scroll);
|
||||||
|
|
||||||
|
void st_scroll_view_set_overlay_scrollbars (StScrollView *scroll,
|
||||||
|
gboolean enabled);
|
||||||
|
gboolean st_scroll_view_get_overlay_scrollbars (StScrollView *scroll);
|
||||||
|
|
||||||
void st_scroll_view_set_policy (StScrollView *scroll,
|
void st_scroll_view_set_policy (StScrollView *scroll,
|
||||||
GtkPolicyType hscroll,
|
GtkPolicyType hscroll,
|
||||||
GtkPolicyType vscroll);
|
GtkPolicyType vscroll);
|
||||||
|
@@ -791,6 +791,9 @@ st_widget_get_paint_volume (ClutterActor *self,
|
|||||||
{
|
{
|
||||||
const ClutterPaintVolume *child_volume;
|
const ClutterPaintVolume *child_volume;
|
||||||
|
|
||||||
|
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
|
||||||
|
continue;
|
||||||
|
|
||||||
child_volume = clutter_actor_get_transformed_paint_volume (child, self);
|
child_volume = clutter_actor_get_transformed_paint_volume (child, self);
|
||||||
if (!child_volume)
|
if (!child_volume)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@@ -339,6 +339,10 @@ function test() {
|
|||||||
let vfade = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;' });
|
let vfade = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;' });
|
||||||
fadeBox.add(vfade);
|
fadeBox.add(vfade);
|
||||||
|
|
||||||
|
fadeBox.add(new St.Label({ text: 'Overlay scrollbars: '}));
|
||||||
|
let overlay = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;' });
|
||||||
|
fadeBox.add(overlay);
|
||||||
|
|
||||||
function togglePadding(button) {
|
function togglePadding(button) {
|
||||||
switch(button.label) {
|
switch(button.label) {
|
||||||
case 'No':
|
case 'No':
|
||||||
@@ -388,6 +392,20 @@ function test() {
|
|||||||
vfade.connect('clicked', function() { toggleFade(vfade); });
|
vfade.connect('clicked', function() { toggleFade(vfade); });
|
||||||
toggleFade(vfade);
|
toggleFade(vfade);
|
||||||
|
|
||||||
|
function toggleOverlay(button) {
|
||||||
|
switch(button.label) {
|
||||||
|
case 'No':
|
||||||
|
button.label = 'Yes';
|
||||||
|
break;
|
||||||
|
case 'Yes':
|
||||||
|
button.label = 'No';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
scrollView.overlay_scrollbars = (button.label == 'Yes');
|
||||||
|
}
|
||||||
|
|
||||||
|
overlay.connect('clicked', function() { toggleOverlay(overlay); });
|
||||||
|
|
||||||
UI.main(stage);
|
UI.main(stage);
|
||||||
}
|
}
|
||||||
test();
|
test();
|
||||||
|
Reference in New Issue
Block a user