Compare commits
43 Commits
3.13.2
...
wip/new-no
Author | SHA1 | Date | |
---|---|---|---|
bf374ccabb | |||
02060d2bbc | |||
8750f1edc0 | |||
798f17a97d | |||
a4091adbf2 | |||
ecf795b6ef | |||
75447b249c | |||
26d2fb8a37 | |||
f7223763d2 | |||
0b414308fb | |||
060917ae2b | |||
9f2e5b9b51 | |||
4a07eb77f6 | |||
fbe379c81c | |||
a07e8bbf37 | |||
a6aabb1d3a | |||
aef6273fed | |||
be8b1c7d2d | |||
14bc748cea | |||
c32917f6c1 | |||
182d45dace | |||
829e7623df | |||
89675c9061 | |||
f9df83802d | |||
e51eb723fc | |||
5b61f2d642 | |||
094669baee | |||
f6b5385495 | |||
524e2df708 | |||
9f887d9a28 | |||
214a41793f | |||
2e40ffc558 | |||
3584887938 | |||
0d6c002b8e | |||
ec714864f2 | |||
1b77149ec9 | |||
93c9e031e3 | |||
3ff4277f86 | |||
2a63267be0 | |||
2b365627ed | |||
b8f0d0f0dc | |||
df1bed941d | |||
604085fdb9 |
@ -403,13 +403,18 @@ StScrollBar StButton#vhandle:active {
|
|||||||
icon-size: 16px;
|
icon-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.no-networks-label {
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-networks-box {
|
||||||
|
spacing: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Buttons */
|
/* Buttons */
|
||||||
|
|
||||||
.candidate-page-button,
|
.candidate-page-button,
|
||||||
.notification-button,
|
|
||||||
.notification-icon-button,
|
|
||||||
.hotplug-notification-item,
|
.hotplug-notification-item,
|
||||||
.hotplug-resident-eject-button,
|
|
||||||
.modal-dialog-button,
|
.modal-dialog-button,
|
||||||
.app-view-control {
|
.app-view-control {
|
||||||
border: 1px solid #8b8b8b;
|
border: 1px solid #8b8b8b;
|
||||||
@ -423,17 +428,12 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.candidate-page-button:hover,
|
.candidate-page-button:hover,
|
||||||
.notification-button:hover,
|
|
||||||
.notification-icon-button:hover,
|
|
||||||
.hotplug-notification-item:hover,
|
.hotplug-notification-item:hover,
|
||||||
.hotplug-resident-eject-button:hover,
|
|
||||||
.modal-dialog-button:hover {
|
.modal-dialog-button:hover {
|
||||||
background-gradient-start: rgba(255, 255, 255, 0.3);
|
background-gradient-start: rgba(255, 255, 255, 0.3);
|
||||||
background-gradient-end: rgba(255, 255, 255, 0.1);
|
background-gradient-end: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification-button:focus,
|
|
||||||
.notification-icon-button:focus,
|
|
||||||
.hotplug-notification-item:focus,
|
.hotplug-notification-item:focus,
|
||||||
.modal-dialog-button:focus,
|
.modal-dialog-button:focus,
|
||||||
.app-view-control:focus {
|
.app-view-control:focus {
|
||||||
@ -447,10 +447,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
.candidate-page-button:active,
|
.candidate-page-button:active,
|
||||||
.candidate-page-button:pressed,
|
.candidate-page-button:pressed,
|
||||||
.notification-button:active,
|
|
||||||
.notification-icon-button:active,
|
|
||||||
.hotplug-notification-item:active,
|
.hotplug-notification-item:active,
|
||||||
.hotplug-resident-eject-button:active,
|
|
||||||
.modal-dialog-button:active,
|
.modal-dialog-button:active,
|
||||||
.modal-dialog-button:pressed,
|
.modal-dialog-button:pressed,
|
||||||
.app-view-control:checked {
|
.app-view-control:checked {
|
||||||
@ -459,8 +456,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.candidate-page-button:insensitive,
|
.candidate-page-button:insensitive,
|
||||||
.notification-button:insensitive,
|
|
||||||
.notification-icon-button:insensitive,
|
|
||||||
.modal-dialog-button:insensitive {
|
.modal-dialog-button:insensitive {
|
||||||
border-color: #666666;
|
border-color: #666666;
|
||||||
color: #9f9f9f;
|
color: #9f9f9f;
|
||||||
@ -472,7 +467,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
#searchEntry,
|
#searchEntry,
|
||||||
.modal-dialog-button,
|
.modal-dialog-button,
|
||||||
.notification-button,
|
|
||||||
.hotplug-notification-item,
|
.hotplug-notification-item,
|
||||||
.app-view-controls,
|
.app-view-controls,
|
||||||
#screenShieldNotifications {
|
#screenShieldNotifications {
|
||||||
@ -1300,8 +1294,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
.calendar {
|
.calendar {
|
||||||
padding: .4em 1.75em .8em 1.75em;
|
padding: .4em 1.75em .8em 1.75em;
|
||||||
spacing-rows: 0px;
|
|
||||||
spacing-columns: 0px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-month-label {
|
.calendar-month-label {
|
||||||
@ -1497,111 +1489,87 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-right: 8pt;
|
padding-right: 8pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Message Tray */
|
||||||
|
|
||||||
|
.notification-drawer {
|
||||||
|
background: rgba(0,0,0,0.8);
|
||||||
|
padding: 1em;
|
||||||
|
border: 2px solid #4c4c4c;
|
||||||
|
border-bottom: 0px;
|
||||||
|
border-radius: 6px 6px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-tray-icons,
|
||||||
|
.notification-drawer-footer-actions {
|
||||||
|
spacing: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-tray-icon-button,
|
||||||
|
.notification-drawer-button {
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #4c4c4c;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-tray-icon-button {
|
||||||
|
width: 22px;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-drawer-button StIcon {
|
||||||
|
icon-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-tray-icon-button:hover,
|
||||||
|
.notification-drawer-button:hover {
|
||||||
|
background: 1px solid #4c4c4c;
|
||||||
|
}
|
||||||
|
|
||||||
.url-highlighter {
|
.url-highlighter {
|
||||||
link-color: #ccccff;
|
link-color: #ccccff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Message Tray */
|
.notification, #notification-container, .notification-drawer {
|
||||||
#message-tray {
|
|
||||||
background: #2e3436 url(message-tray-background.png);
|
|
||||||
background-repeat: repeat;
|
|
||||||
height: 72px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-tray-summary {
|
|
||||||
height: 72px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-tray-menu-button StIcon {
|
|
||||||
padding: 0 20px;
|
|
||||||
color: #aaaaaa;
|
|
||||||
icon-size: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message-tray-menu-button:hover StIcon,
|
|
||||||
.message-tray-menu-button:active StIcon,
|
|
||||||
.message-tray-menu-button:focus StIcon {
|
|
||||||
color: #eeeeee;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-messages-label,
|
|
||||||
.no-networks-label {
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-networks-box {
|
|
||||||
spacing: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification {
|
|
||||||
border-radius: 10px 10px 0px 0px;
|
|
||||||
background: rgba(0,0,0,0.9);
|
|
||||||
padding: 8px 8px 4px 8px;
|
|
||||||
spacing-rows: 4px;
|
|
||||||
spacing-columns: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification, #notification-container {
|
|
||||||
font-size: 11pt;
|
font-size: 11pt;
|
||||||
width: 34em;
|
width: 34em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification.multi-line-notification {
|
.notification-main-content {
|
||||||
padding-bottom: 8px;
|
padding: 8px;
|
||||||
|
spacing: 8px;
|
||||||
|
border-radius: 10px 10px 0px 0px;
|
||||||
|
background: rgba(0,0,0,0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification-unexpanded {
|
.notification-action-area {
|
||||||
/* We want to force the actor at a specific size, irrespective
|
padding: 8px;
|
||||||
of its minimum and preferred size, so we override both */
|
|
||||||
min-height: 36px;
|
|
||||||
height: 36px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We use row-span = 2 for the image cell, which prevents its height preferences to be
|
.notification-action-area,
|
||||||
taken into account during allocation, so its height ends up being limited by the height
|
.notification-button {
|
||||||
of the content in the other rows. To avoid showing a stretched image, we set the minimum
|
background: rgba(0,0,0,0.8);
|
||||||
height of the table to be ICON_SIZE + IMAGE_SIZE + spacing-rows = 24 + 125 + 10 = 159 */
|
border-top: 1px solid #666;
|
||||||
.notification-with-image {
|
|
||||||
min-height: 159px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-boxpointer {
|
.notification-button {
|
||||||
-arrow-border-radius: 15px;
|
padding: 8px 0px;
|
||||||
-arrow-background-color: rgba(0,0,0,0.9);
|
border-right: 1px solid #666;
|
||||||
-arrow-base: 36px;
|
|
||||||
-arrow-rise: 18px;
|
|
||||||
color: white;
|
|
||||||
-boxpointer-gap: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-boxpointer .notification {
|
.notification-button:hover {
|
||||||
border-radius: 9px;
|
background: rgba(255,255,255,0.3);
|
||||||
background: rgba(0,0,0,0) !important;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-boxpointer #summary-right-click-menu {
|
.notification-button:active {
|
||||||
padding-top: 12px;
|
background: rgba(255,255,255,0.1);
|
||||||
padding-bottom: 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-notification-stack-scrollview {
|
.notification-button:last-child {
|
||||||
max-height: 18em;
|
border-right-width: 0px;
|
||||||
padding-top: 8px;
|
|
||||||
padding-bottom: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.summary-notification-stack-scrollview:ltr {
|
.notification-title-box {
|
||||||
padding-right: 8px;
|
spacing: 8px;
|
||||||
}
|
|
||||||
|
|
||||||
.summary-notification-stack-scrollview:rtl {
|
|
||||||
padding-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-scrollview {
|
|
||||||
max-height: 10em;
|
|
||||||
-st-vfade-offset: 24px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification-scrollview:ltr > StScrollBar {
|
.notification-scrollview:ltr > StScrollBar {
|
||||||
@ -1612,37 +1580,9 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-right: 6px;
|
padding-right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.notification-body {
|
.notification-scrollview {
|
||||||
spacing: 5px;
|
max-height: 10em;
|
||||||
}
|
-st-vfade-offset: 24px;
|
||||||
|
|
||||||
.notification-actions {
|
|
||||||
padding-top: 18px;
|
|
||||||
spacing: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-button {
|
|
||||||
-st-natural-width: 140px;
|
|
||||||
padding: 4px 4px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-button:focus {
|
|
||||||
-st-natural-width: 138px;
|
|
||||||
padding: 3px 4px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-icon-button {
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-icon-button:focus {
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-icon-button > StIcon {
|
|
||||||
icon-size: 16px;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.secondary-icon {
|
.secondary-icon {
|
||||||
@ -1667,45 +1607,6 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hotplug-resident-box {
|
|
||||||
spacing: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hotplug-resident-mount {
|
|
||||||
spacing: 8px;
|
|
||||||
border-radius: 4px;
|
|
||||||
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hotplug-resident-mount:hover {
|
|
||||||
background-gradient-direction: horizontal;
|
|
||||||
background-gradient-start: rgba(255, 255, 255, 0.1);
|
|
||||||
background-gradient-end: rgba(255, 255, 255, 0);
|
|
||||||
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hotplug-resident-mount-label {
|
|
||||||
color: inherit;
|
|
||||||
padding-left: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hotplug-resident-mount-icon {
|
|
||||||
icon-size: 24px;
|
|
||||||
padding-left: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hotplug-resident-eject-icon {
|
|
||||||
icon-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hotplug-resident-eject-button {
|
|
||||||
padding: 7px;
|
|
||||||
border-radius: 5px;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chat-log-message {
|
.chat-log-message {
|
||||||
color: #888888;
|
color: #888888;
|
||||||
}
|
}
|
||||||
@ -1745,7 +1646,11 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-notification-scrollview{
|
.chat-notification-body-box {
|
||||||
|
spacing: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chat-notification-scrollview {
|
||||||
max-height: 22em;
|
max-height: 22em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1795,6 +1700,28 @@ StScrollBar StButton#vhandle:active {
|
|||||||
-shell-counter-overlap-y: 13px;
|
-shell-counter-overlap-y: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.message-tray-indicator {
|
||||||
|
spacing: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-tray-indicator-count {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
color: black;
|
||||||
|
background-color: rgba(255, 255, 255, 0.7);
|
||||||
|
border-radius: 1em;
|
||||||
|
padding: 1em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-tray-indicator-glow {
|
||||||
|
height: 4px;
|
||||||
|
background-gradient-start: rgba(255, 255, 255, 0);
|
||||||
|
background-gradient-end: rgba(255, 255, 255, 1);
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
/* OSD */
|
/* OSD */
|
||||||
.osd-window {
|
.osd-window {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -2664,8 +2591,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#screenShieldNotifications .notification-button,
|
#screenShieldNotifications .notification-button {
|
||||||
#screenShieldNotifications .notification-icon-button {
|
|
||||||
border: 1px rgba(255,255,255,0.5);
|
border: 1px rgba(255,255,255,0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,7 @@ IGNORE_HFILES= \
|
|||||||
gactionmuxer.h \
|
gactionmuxer.h \
|
||||||
gactionobservable.h \
|
gactionobservable.h \
|
||||||
gactionobserver.h \
|
gactionobserver.h \
|
||||||
|
shell-network-agent.h \
|
||||||
shell-recorder-src.h
|
shell-recorder-src.h
|
||||||
|
|
||||||
if !BUILD_RECORDER
|
if !BUILD_RECORDER
|
||||||
|
@ -50,7 +50,6 @@
|
|||||||
<xi:include href="xml/shell-wm.xml"/>
|
<xi:include href="xml/shell-wm.xml"/>
|
||||||
<xi:include href="xml/shell-util.xml"/>
|
<xi:include href="xml/shell-util.xml"/>
|
||||||
<xi:include href="xml/shell-mount-operation.xml"/>
|
<xi:include href="xml/shell-mount-operation.xml"/>
|
||||||
<xi:include href="xml/shell-network-agent.xml"/>
|
|
||||||
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
||||||
<xi:include href="xml/shell-tp-client.xml"/>
|
<xi:include href="xml/shell-tp-client.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
@ -48,8 +48,6 @@ const _SCROLL_ANIMATION_TIME = 0.5;
|
|||||||
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
||||||
const _LOGO_ICON_HEIGHT = 48;
|
const _LOGO_ICON_HEIGHT = 48;
|
||||||
|
|
||||||
let _loginDialog = null;
|
|
||||||
|
|
||||||
const UserListItem = new Lang.Class({
|
const UserListItem = new Lang.Class({
|
||||||
Name: 'UserListItem',
|
Name: 'UserListItem',
|
||||||
|
|
||||||
|
@ -372,7 +372,7 @@ const WindowSwitcherPopup = new Lang.Class({
|
|||||||
|
|
||||||
_getWindowList: function() {
|
_getWindowList: function() {
|
||||||
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||||
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace);
|
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||||
},
|
},
|
||||||
|
|
||||||
_createSwitcher: function() {
|
_createSwitcher: function() {
|
||||||
@ -459,8 +459,7 @@ const AppSwitcher = new Lang.Class({
|
|||||||
let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' });
|
let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' });
|
||||||
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
|
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
|
||||||
: null;
|
: null;
|
||||||
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL,
|
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||||
global.screen, workspace);
|
|
||||||
|
|
||||||
// Construct the AppIcons, add to the popup
|
// Construct the AppIcons, add to the popup
|
||||||
for (let i = 0; i < apps.length; i++) {
|
for (let i = 0; i < apps.length; i++) {
|
||||||
|
@ -408,9 +408,9 @@ const Calendar = new Lang.Class({
|
|||||||
|
|
||||||
this._shouldDateGrabFocus = false;
|
this._shouldDateGrabFocus = false;
|
||||||
|
|
||||||
this.actor = new St.Table({ homogeneous: false,
|
this.actor = new St.Widget({ style_class: 'calendar',
|
||||||
style_class: 'calendar',
|
layout_manager: new Clutter.TableLayout(),
|
||||||
reactive: true });
|
reactive: true });
|
||||||
|
|
||||||
this.actor.connect('scroll-event',
|
this.actor.connect('scroll-event',
|
||||||
Lang.bind(this, this._onScroll));
|
Lang.bind(this, this._onScroll));
|
||||||
@ -441,13 +441,14 @@ const Calendar = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_buildHeader: function() {
|
_buildHeader: function() {
|
||||||
|
let layout = this.actor.layout_manager;
|
||||||
let offsetCols = this._useWeekdate ? 1 : 0;
|
let offsetCols = this._useWeekdate ? 1 : 0;
|
||||||
this.actor.destroy_all_children();
|
this.actor.destroy_all_children();
|
||||||
|
|
||||||
// Top line of the calendar '<| September 2009 |>'
|
// Top line of the calendar '<| September 2009 |>'
|
||||||
this._topBox = new St.BoxLayout();
|
this._topBox = new St.BoxLayout();
|
||||||
this.actor.add(this._topBox,
|
layout.pack(this._topBox, 0, 0);
|
||||||
{ row: 0, col: 0, col_span: offsetCols + 7 });
|
layout.set_span(this._topBox, offsetCols + 7, 1);
|
||||||
|
|
||||||
this._backButton = new St.Button({ style_class: 'calendar-change-month-back',
|
this._backButton = new St.Button({ style_class: 'calendar-change-month-back',
|
||||||
accessible_name: _("Previous month"),
|
accessible_name: _("Previous month"),
|
||||||
@ -479,10 +480,8 @@ const Calendar = new Lang.Class({
|
|||||||
let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay());
|
let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay());
|
||||||
let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading',
|
let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading',
|
||||||
text: customDayAbbrev });
|
text: customDayAbbrev });
|
||||||
this.actor.add(label,
|
let col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
|
||||||
{ row: 1,
|
layout.pack(label, col, 1);
|
||||||
col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7,
|
|
||||||
x_fill: false, x_align: St.Align.MIDDLE });
|
|
||||||
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,6 +600,7 @@ const Calendar = new Lang.Class({
|
|||||||
|
|
||||||
beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY);
|
beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY);
|
||||||
|
|
||||||
|
let layout = this.actor.layout_manager;
|
||||||
let iter = new Date(beginDate);
|
let iter = new Date(beginDate);
|
||||||
let row = 2;
|
let row = 2;
|
||||||
// nRows here means 6 weeks + one header + one navbar
|
// nRows here means 6 weeks + one header + one navbar
|
||||||
@ -648,16 +648,15 @@ const Calendar = new Lang.Class({
|
|||||||
button.style_class = styleClass;
|
button.style_class = styleClass;
|
||||||
|
|
||||||
let offsetCols = this._useWeekdate ? 1 : 0;
|
let offsetCols = this._useWeekdate ? 1 : 0;
|
||||||
this.actor.add(button,
|
let col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
|
||||||
{ row: row, col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7 });
|
layout.pack(button, col, row);
|
||||||
|
|
||||||
this._buttons.push(button);
|
this._buttons.push(button);
|
||||||
|
|
||||||
if (this._useWeekdate && iter.getDay() == 4) {
|
if (this._useWeekdate && iter.getDay() == 4) {
|
||||||
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
|
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
|
||||||
style_class: 'calendar-day-base calendar-week-number'});
|
style_class: 'calendar-day-base calendar-week-number'});
|
||||||
this.actor.add(label,
|
layout.pack(label, 0, row);
|
||||||
{ row: row, col: 0, y_align: St.Align.MIDDLE });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
iter.setTime(iter.getTime() + MSECS_IN_DAY);
|
||||||
@ -700,7 +699,10 @@ const EventsList = new Lang.Class({
|
|||||||
Name: 'EventsList',
|
Name: 'EventsList',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this.actor = new St.Table({ style_class: 'events-table' });
|
let layout = new Clutter.TableLayout();
|
||||||
|
this.actor = new St.Widget({ style_class: 'events-table',
|
||||||
|
layout_manager: layout });
|
||||||
|
layout.hookup_style(this.actor);
|
||||||
this._date = new Date();
|
this._date = new Date();
|
||||||
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
||||||
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
|
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
|
||||||
@ -724,9 +726,11 @@ const EventsList = new Lang.Class({
|
|||||||
dayLabel.clutter_text.line_wrap = false;
|
dayLabel.clutter_text.line_wrap = false;
|
||||||
dayLabel.clutter_text.ellipsize = false;
|
dayLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
this.actor.add(dayLabel, { row: index, col: 0,
|
let layout = this.actor.layout_manager;
|
||||||
x_expand: false, x_align: St.Align.END,
|
layout.pack(dayLabel, 0, index);
|
||||||
y_fill: false, y_align: St.Align.START });
|
layout.child_set(dayLabel, { x_expand: false,
|
||||||
|
x_align: Clutter.TableAlignment.END,
|
||||||
|
y_align: Clutter.TableAlignment.START });
|
||||||
|
|
||||||
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
||||||
let timeString = _formatEventTime(event, clockFormat);
|
let timeString = _formatEventTime(event, clockFormat);
|
||||||
@ -735,18 +739,17 @@ const EventsList = new Lang.Class({
|
|||||||
timeLabel.clutter_text.line_wrap = false;
|
timeLabel.clutter_text.line_wrap = false;
|
||||||
timeLabel.clutter_text.ellipsize = false;
|
timeLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
this.actor.add(timeLabel, { row: index, col: 1,
|
layout.pack(timeLabel, 1, index);
|
||||||
x_expand: false, x_align: St.Align.MIDDLE,
|
layout.child_set(timeLabel, { x_expand: false,
|
||||||
y_fill: false, y_align: St.Align.START });
|
y_align: Clutter.TableAlignment.START });
|
||||||
|
|
||||||
let titleLabel = new St.Label({ style_class: 'events-day-task',
|
let titleLabel = new St.Label({ style_class: 'events-day-task',
|
||||||
text: event.summary });
|
text: event.summary });
|
||||||
titleLabel.clutter_text.line_wrap = true;
|
titleLabel.clutter_text.line_wrap = true;
|
||||||
titleLabel.clutter_text.ellipsize = false;
|
titleLabel.clutter_text.ellipsize = false;
|
||||||
|
|
||||||
this.actor.add(titleLabel, { row: index, col: 2,
|
layout.pack(titleLabel, 2, index);
|
||||||
x_expand: true, x_align: St.Align.START,
|
layout.child_set(titleLabel, { x_expand: true });
|
||||||
y_fill: false, y_align: St.Align.START });
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
|
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
|
||||||
@ -755,13 +758,10 @@ const EventsList = new Lang.Class({
|
|||||||
if (events.length == 0 && !showNothingScheduled)
|
if (events.length == 0 && !showNothingScheduled)
|
||||||
return index;
|
return index;
|
||||||
|
|
||||||
this.actor.add(new St.Label({ style_class: 'events-day-header', text: header }),
|
let label = new St.Label({ style_class: 'events-day-header', text: header });
|
||||||
{ row: index, col: 0, col_span: 3,
|
let layout = this.actor.layout_manager;
|
||||||
// In theory, x_expand should be true here, but x_expand
|
layout.pack(label, 0, index);
|
||||||
// is a property of the column for StTable, ie all day cells
|
layout.child_set(label, { column_span: 3, x_expand: false });
|
||||||
// get it too
|
|
||||||
x_expand: false, x_align: St.Align.START,
|
|
||||||
y_fill: false, y_align: St.Align.START });
|
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
for (let n = 0; n < events.length; n++) {
|
for (let n = 0; n < events.length; n++) {
|
||||||
|
@ -170,17 +170,6 @@ const AutorunManager = new Lang.Class({
|
|||||||
this._transDispatcher = new AutorunTransientDispatcher(this);
|
this._transDispatcher = new AutorunTransientDispatcher(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
_ensureResidentSource: function() {
|
|
||||||
if (this._residentSource)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._residentSource = new AutorunResidentSource(this);
|
|
||||||
let destroyId = this._residentSource.connect('destroy', Lang.bind(this, function() {
|
|
||||||
this._residentSource.disconnect(destroyId);
|
|
||||||
this._residentSource = null;
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
enable: function() {
|
enable: function() {
|
||||||
this._scanMounts();
|
this._scanMounts();
|
||||||
|
|
||||||
@ -189,17 +178,12 @@ const AutorunManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
disable: function() {
|
disable: function() {
|
||||||
if (this._residentSource)
|
|
||||||
this._residentSource.destroy();
|
|
||||||
this._volumeMonitor.disconnect(this._mountAddedId);
|
this._volumeMonitor.disconnect(this._mountAddedId);
|
||||||
this._volumeMonitor.disconnect(this._mountRemovedId);
|
this._volumeMonitor.disconnect(this._mountRemovedId);
|
||||||
},
|
},
|
||||||
|
|
||||||
_processMount: function(mount, hotplug) {
|
_processMount: function(mount, hotplug) {
|
||||||
let discoverer = new ContentTypeDiscoverer(Lang.bind(this, function(mount, apps, contentTypes) {
|
let discoverer = new ContentTypeDiscoverer(Lang.bind(this, function(mount, apps, contentTypes) {
|
||||||
this._ensureResidentSource();
|
|
||||||
this._residentSource.addMount(mount, apps);
|
|
||||||
|
|
||||||
if (hotplug)
|
if (hotplug)
|
||||||
this._transDispatcher.addMount(mount, apps, contentTypes);
|
this._transDispatcher.addMount(mount, apps, contentTypes);
|
||||||
}));
|
}));
|
||||||
@ -224,8 +208,6 @@ const AutorunManager = new Lang.Class({
|
|||||||
|
|
||||||
_onMountRemoved: function(monitor, mount) {
|
_onMountRemoved: function(monitor, mount) {
|
||||||
this._transDispatcher.removeMount(mount);
|
this._transDispatcher.removeMount(mount);
|
||||||
if (this._residentSource)
|
|
||||||
this._residentSource.removeMount(mount);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
ejectMount: function(mount) {
|
ejectMount: function(mount) {
|
||||||
@ -288,153 +270,6 @@ const AutorunManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const AutorunResidentSource = new Lang.Class({
|
|
||||||
Name: 'AutorunResidentSource',
|
|
||||||
Extends: MessageTray.Source,
|
|
||||||
|
|
||||||
_init: function(manager) {
|
|
||||||
this.parent(_("Removable Devices"), 'media-removable');
|
|
||||||
this.resident = true;
|
|
||||||
|
|
||||||
this._mounts = [];
|
|
||||||
|
|
||||||
this._manager = manager;
|
|
||||||
this._notification = new AutorunResidentNotification(this._manager, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
_createPolicy: function() {
|
|
||||||
return new MessageTray.NotificationPolicy({ showInLockScreen: false });
|
|
||||||
},
|
|
||||||
|
|
||||||
buildRightClickMenu: function() {
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
|
|
||||||
addMount: function(mount, apps) {
|
|
||||||
if (!shouldAutorunMount(mount, false))
|
|
||||||
return;
|
|
||||||
|
|
||||||
let filtered = this._mounts.filter(function (element) {
|
|
||||||
return (element.mount == mount);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (filtered.length != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let element = { mount: mount, apps: apps };
|
|
||||||
this._mounts.push(element);
|
|
||||||
this._redisplay();
|
|
||||||
},
|
|
||||||
|
|
||||||
removeMount: function(mount) {
|
|
||||||
this._mounts =
|
|
||||||
this._mounts.filter(function (element) {
|
|
||||||
return (element.mount != mount);
|
|
||||||
});
|
|
||||||
|
|
||||||
this._redisplay();
|
|
||||||
},
|
|
||||||
|
|
||||||
_redisplay: function() {
|
|
||||||
if (this._mounts.length == 0) {
|
|
||||||
this._notification.destroy();
|
|
||||||
this.destroy();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._notification.updateForMounts(this._mounts);
|
|
||||||
|
|
||||||
// add ourselves as a source, and push the notification
|
|
||||||
if (!Main.messageTray.contains(this)) {
|
|
||||||
Main.messageTray.add(this);
|
|
||||||
this.pushNotification(this._notification);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const AutorunResidentNotification = new Lang.Class({
|
|
||||||
Name: 'AutorunResidentNotification',
|
|
||||||
Extends: MessageTray.Notification,
|
|
||||||
|
|
||||||
_init: function(manager, source) {
|
|
||||||
this.parent(source, source.title, null, { customContent: true });
|
|
||||||
|
|
||||||
// set the notification as resident
|
|
||||||
this.setResident(true);
|
|
||||||
|
|
||||||
this._layout = new St.BoxLayout ({ style_class: 'hotplug-resident-box',
|
|
||||||
vertical: true });
|
|
||||||
this._manager = manager;
|
|
||||||
|
|
||||||
this.addActor(this._layout,
|
|
||||||
{ x_expand: true,
|
|
||||||
x_fill: true });
|
|
||||||
},
|
|
||||||
|
|
||||||
updateForMounts: function(mounts) {
|
|
||||||
// remove all the layout content
|
|
||||||
this._layout.destroy_all_children();
|
|
||||||
|
|
||||||
for (let idx = 0; idx < mounts.length; idx++) {
|
|
||||||
let element = mounts[idx];
|
|
||||||
|
|
||||||
let actor = this._itemForMount(element.mount, element.apps);
|
|
||||||
this._layout.add(actor, { x_fill: true,
|
|
||||||
expand: true });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_itemForMount: function(mount, apps) {
|
|
||||||
let item = new St.BoxLayout();
|
|
||||||
|
|
||||||
// prepare the mount button content
|
|
||||||
let mountLayout = new St.BoxLayout();
|
|
||||||
|
|
||||||
let mountIcon = new St.Icon({ gicon: mount.get_icon(),
|
|
||||||
style_class: 'hotplug-resident-mount-icon' });
|
|
||||||
mountLayout.add_actor(mountIcon);
|
|
||||||
|
|
||||||
let labelBin = new St.Bin({ y_align: St.Align.MIDDLE });
|
|
||||||
let mountLabel =
|
|
||||||
new St.Label({ text: mount.get_name(),
|
|
||||||
style_class: 'hotplug-resident-mount-label',
|
|
||||||
track_hover: true,
|
|
||||||
reactive: true });
|
|
||||||
labelBin.add_actor(mountLabel);
|
|
||||||
mountLayout.add_actor(labelBin);
|
|
||||||
|
|
||||||
let mountButton = new St.Button({ child: mountLayout,
|
|
||||||
x_align: St.Align.START,
|
|
||||||
x_fill: true,
|
|
||||||
style_class: 'hotplug-resident-mount',
|
|
||||||
button_mask: St.ButtonMask.ONE });
|
|
||||||
item.add(mountButton, { x_align: St.Align.START,
|
|
||||||
expand: true });
|
|
||||||
|
|
||||||
let ejectIcon =
|
|
||||||
new St.Icon({ icon_name: 'media-eject-symbolic',
|
|
||||||
style_class: 'hotplug-resident-eject-icon' });
|
|
||||||
|
|
||||||
let ejectButton =
|
|
||||||
new St.Button({ style_class: 'hotplug-resident-eject-button',
|
|
||||||
button_mask: St.ButtonMask.ONE,
|
|
||||||
child: ejectIcon });
|
|
||||||
item.add(ejectButton, { x_align: St.Align.END });
|
|
||||||
|
|
||||||
// now connect signals
|
|
||||||
mountButton.connect('clicked', Lang.bind(this, function(actor, event) {
|
|
||||||
startAppForMount(apps[0], mount);
|
|
||||||
}));
|
|
||||||
|
|
||||||
ejectButton.connect('clicked', Lang.bind(this, function() {
|
|
||||||
this._manager.ejectMount(mount);
|
|
||||||
}));
|
|
||||||
|
|
||||||
return item;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const AutorunTransientDispatcher = new Lang.Class({
|
const AutorunTransientDispatcher = new Lang.Class({
|
||||||
Name: 'AutorunTransientDispatcher',
|
Name: 'AutorunTransientDispatcher',
|
||||||
|
|
||||||
@ -559,12 +394,12 @@ const AutorunTransientNotification = new Lang.Class({
|
|||||||
Extends: MessageTray.Notification,
|
Extends: MessageTray.Notification,
|
||||||
|
|
||||||
_init: function(manager, source) {
|
_init: function(manager, source) {
|
||||||
this.parent(source, source.title, null, { customContent: true });
|
this.parent(source, source.title);
|
||||||
|
|
||||||
this._manager = manager;
|
this._manager = manager;
|
||||||
this._box = new St.BoxLayout({ style_class: 'hotplug-transient-box',
|
this._box = new St.BoxLayout({ style_class: 'hotplug-transient-box',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
this.addActor(this._box);
|
this._bodyBin.child = this._box;
|
||||||
|
|
||||||
this._mount = source.mount;
|
this._mount = source.mount;
|
||||||
|
|
||||||
|
@ -102,15 +102,6 @@ const TelepathyClient = new Lang.Class({
|
|||||||
this._tpClient.set_handle_channels_func(
|
this._tpClient.set_handle_channels_func(
|
||||||
Lang.bind(this, this._handleChannels));
|
Lang.bind(this, this._handleChannels));
|
||||||
|
|
||||||
// Watch subscription requests and connection errors
|
|
||||||
this._subscriptionSource = null;
|
|
||||||
this._accountSource = null;
|
|
||||||
|
|
||||||
// Workaround for gjs not supporting GPtrArray in signals.
|
|
||||||
// See BGO bug #653941 for context.
|
|
||||||
this._tpClient.set_contact_list_changed_func(
|
|
||||||
Lang.bind(this, this._contactListChanged));
|
|
||||||
|
|
||||||
// Allow other clients (such as Empathy) to pre-empt our channels if
|
// Allow other clients (such as Empathy) to pre-empt our channels if
|
||||||
// needed
|
// needed
|
||||||
this._tpClient.set_delegated_channels_callback(
|
this._tpClient.set_delegated_channels_callback(
|
||||||
@ -124,17 +115,12 @@ const TelepathyClient = new Lang.Class({
|
|||||||
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
|
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._accountManagerValidityChangedId = this._accountManager.connect('account-validity-changed',
|
|
||||||
Lang.bind(this, this._accountValidityChanged));
|
|
||||||
|
|
||||||
if (!this._accountManager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
|
if (!this._accountManager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
|
||||||
this._accountManager.prepare_async(null, Lang.bind(this, this._accountManagerPrepared));
|
this._accountManager.prepare_async(null, Lang.bind(this, this._accountManagerPrepared));
|
||||||
},
|
},
|
||||||
|
|
||||||
disable: function() {
|
disable: function() {
|
||||||
this._tpClient.unregister();
|
this._tpClient.unregister();
|
||||||
this._accountManager.disconnect(this._accountManagerValidityChangedId);
|
|
||||||
this._accountManagerValidityChangedId = 0;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_observeChannels: function(observer, account, conn, channels,
|
_observeChannels: function(observer, account, conn, channels,
|
||||||
@ -219,33 +205,6 @@ const TelepathyClient = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_displayRoomInvitation: function(conn, channel, dispatchOp, context) {
|
|
||||||
// We can only approve the rooms if we have been invited to it
|
|
||||||
let selfContact = channel.group_get_self_contact();
|
|
||||||
if (selfContact == null) {
|
|
||||||
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
|
|
||||||
message: 'Not invited to the room' }));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let [invited, inviter, reason, msg] = channel.group_get_local_pending_contact_info(selfContact);
|
|
||||||
if (!invited) {
|
|
||||||
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
|
|
||||||
message: 'Not invited to the room' }));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: We don't have a 'chat room' icon (bgo #653737) use
|
|
||||||
// system-users for now as Empathy does.
|
|
||||||
let source = new ApproverSource(dispatchOp, _("Invitation"),
|
|
||||||
Gio.icon_new_for_string('system-users'));
|
|
||||||
Main.messageTray.add(source);
|
|
||||||
|
|
||||||
let notif = new RoomInviteNotification(source, dispatchOp, channel, inviter);
|
|
||||||
source.notify(notif);
|
|
||||||
context.accept();
|
|
||||||
},
|
|
||||||
|
|
||||||
_approveChannels: function(approver, account, conn, channels,
|
_approveChannels: function(approver, account, conn, channels,
|
||||||
dispatchOp, context) {
|
dispatchOp, context) {
|
||||||
let channel = channels[0];
|
let channel = channels[0];
|
||||||
@ -259,10 +218,6 @@ const TelepathyClient = new Lang.Class({
|
|||||||
|
|
||||||
if (chanType == Tp.IFACE_CHANNEL_TYPE_TEXT)
|
if (chanType == Tp.IFACE_CHANNEL_TYPE_TEXT)
|
||||||
this._approveTextChannel(account, conn, channel, dispatchOp, context);
|
this._approveTextChannel(account, conn, channel, dispatchOp, context);
|
||||||
else if (chanType == Tp.IFACE_CHANNEL_TYPE_CALL)
|
|
||||||
this._approveCall(account, conn, channel, dispatchOp, context);
|
|
||||||
else if (chanType == Tp.IFACE_CHANNEL_TYPE_FILE_TRANSFER)
|
|
||||||
this._approveFileTransfer(account, conn, channel, dispatchOp, context);
|
|
||||||
else
|
else
|
||||||
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
|
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
|
||||||
message: 'Unsupported channel type' }));
|
message: 'Unsupported channel type' }));
|
||||||
@ -283,45 +238,9 @@ const TelepathyClient = new Lang.Class({
|
|||||||
}}));
|
}}));
|
||||||
|
|
||||||
context.accept();
|
context.accept();
|
||||||
} else {
|
|
||||||
this._displayRoomInvitation(conn, channel, dispatchOp, context);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_approveCall: function(account, conn, channel, dispatchOp, context) {
|
|
||||||
let isVideo = false;
|
|
||||||
|
|
||||||
let props = channel.borrow_immutable_properties();
|
|
||||||
|
|
||||||
if (props[Tp.PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO])
|
|
||||||
isVideo = true;
|
|
||||||
|
|
||||||
// We got the TpContact
|
|
||||||
let source = new ApproverSource(dispatchOp, _("Call"), isVideo ?
|
|
||||||
Gio.icon_new_for_string('camera-web') :
|
|
||||||
Gio.icon_new_for_string('audio-input-microphone'));
|
|
||||||
Main.messageTray.add(source);
|
|
||||||
|
|
||||||
let notif = new AudioVideoNotification(source, dispatchOp, channel,
|
|
||||||
channel.get_target_contact(), isVideo);
|
|
||||||
source.notify(notif);
|
|
||||||
context.accept();
|
|
||||||
},
|
|
||||||
|
|
||||||
_approveFileTransfer: function(account, conn, channel, dispatchOp, context) {
|
|
||||||
// Use the icon of the file being transferred
|
|
||||||
let gicon = Gio.content_type_get_icon(channel.get_mime_type());
|
|
||||||
|
|
||||||
// We got the TpContact
|
|
||||||
let source = new ApproverSource(dispatchOp, _("File Transfer"), gicon);
|
|
||||||
Main.messageTray.add(source);
|
|
||||||
|
|
||||||
let notif = new FileTransferNotification(source, dispatchOp, channel,
|
|
||||||
channel.get_target_contact());
|
|
||||||
source.notify(notif);
|
|
||||||
context.accept();
|
|
||||||
},
|
|
||||||
|
|
||||||
_delegatedChannelsCb: function(client, channels) {
|
_delegatedChannelsCb: function(client, channels) {
|
||||||
// Nothing to do as we don't make a distinction between observed and
|
// Nothing to do as we don't make a distinction between observed and
|
||||||
// handled channels.
|
// handled channels.
|
||||||
@ -329,105 +248,7 @@ const TelepathyClient = new Lang.Class({
|
|||||||
|
|
||||||
_accountManagerPrepared: function(am, result) {
|
_accountManagerPrepared: function(am, result) {
|
||||||
am.prepare_finish(result);
|
am.prepare_finish(result);
|
||||||
|
|
||||||
let accounts = am.get_valid_accounts();
|
|
||||||
for (let i = 0; i < accounts.length; i++) {
|
|
||||||
this._accountValidityChanged(am, accounts[i], true);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_accountValidityChanged: function(am, account, valid) {
|
|
||||||
if (!valid)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// It would be better to connect to "status-changed" but we cannot.
|
|
||||||
// See discussion in https://bugzilla.gnome.org/show_bug.cgi?id=654159
|
|
||||||
account.connect("notify::connection-status",
|
|
||||||
Lang.bind(this, this._accountConnectionStatusNotifyCb));
|
|
||||||
|
|
||||||
account.connect('notify::connection',
|
|
||||||
Lang.bind(this, this._connectionChanged));
|
|
||||||
this._connectionChanged(account);
|
|
||||||
},
|
|
||||||
|
|
||||||
_connectionChanged: function(account) {
|
|
||||||
let conn = account.get_connection();
|
|
||||||
if (conn == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._tpClient.grab_contact_list_changed(conn);
|
|
||||||
if (conn.get_contact_list_state() == Tp.ContactListState.SUCCESS) {
|
|
||||||
this._contactListChanged(conn, conn.dup_contact_list(), []);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_contactListChanged: function(conn, added, removed) {
|
|
||||||
for (let i = 0; i < added.length; i++) {
|
|
||||||
let contact = added[i];
|
|
||||||
|
|
||||||
contact.connect('subscription-states-changed',
|
|
||||||
Lang.bind(this, this._subscriptionStateChanged));
|
|
||||||
this._subscriptionStateChanged(contact);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_subscriptionStateChanged: function(contact) {
|
|
||||||
if (contact.get_publish_state() != Tp.SubscriptionState.ASK)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Implicitly accept publish requests if contact is already subscribed */
|
|
||||||
if (contact.get_subscribe_state() == Tp.SubscriptionState.YES ||
|
|
||||||
contact.get_subscribe_state() == Tp.SubscriptionState.ASK) {
|
|
||||||
|
|
||||||
contact.authorize_publication_async(function(src, result) {
|
|
||||||
src.authorize_publication_finish(result)});
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Display notification to ask user to accept/reject request */
|
|
||||||
let source = this._ensureAppSource();
|
|
||||||
|
|
||||||
let notif = new SubscriptionRequestNotification(source, contact);
|
|
||||||
source.notify(notif);
|
|
||||||
},
|
|
||||||
|
|
||||||
_accountConnectionStatusNotifyCb: function(account) {
|
|
||||||
let connectionError = account.connection_error;
|
|
||||||
|
|
||||||
if (account.connection_status != Tp.ConnectionStatus.DISCONNECTED ||
|
|
||||||
connectionError == Tp.error_get_dbus_name(Tp.Error.CANCELLED)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let notif = this._accountNotifications[account.get_object_path()];
|
|
||||||
if (notif)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Display notification that account failed to connect */
|
|
||||||
let source = this._ensureAppSource();
|
|
||||||
|
|
||||||
notif = new AccountNotification(source, account, connectionError);
|
|
||||||
this._accountNotifications[account.get_object_path()] = notif;
|
|
||||||
notif.connect('destroy', Lang.bind(this, function() {
|
|
||||||
delete this._accountNotifications[account.get_object_path()];
|
|
||||||
}));
|
|
||||||
source.notify(notif);
|
|
||||||
},
|
|
||||||
|
|
||||||
_ensureAppSource: function() {
|
|
||||||
if (this._appSource == null) {
|
|
||||||
this._appSource = new MessageTray.Source(_("Chat"), 'empathy');
|
|
||||||
this._appSource.policy = new MessageTray.NotificationApplicationPolicy('empathy');
|
|
||||||
|
|
||||||
Main.messageTray.add(this._appSource);
|
|
||||||
this._appSource.connect('destroy', Lang.bind(this, function () {
|
|
||||||
this._appSource = null;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
return this._appSource;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const ChatSource = new Lang.Class({
|
const ChatSource = new Lang.Class({
|
||||||
@ -545,7 +366,7 @@ const ChatSource = new Lang.Class({
|
|||||||
|
|
||||||
_updateAvatarIcon: function() {
|
_updateAvatarIcon: function() {
|
||||||
this.iconUpdated();
|
this.iconUpdated();
|
||||||
this._notification.update(this._notification.title, null, { customContent: true });
|
this._notification.update(this._notification.title);
|
||||||
},
|
},
|
||||||
|
|
||||||
open: function() {
|
open: function() {
|
||||||
@ -737,7 +558,7 @@ const ChatSource = new Lang.Class({
|
|||||||
|
|
||||||
title = GLib.markup_escape_text(this.title, -1);
|
title = GLib.markup_escape_text(this.title, -1);
|
||||||
|
|
||||||
this._notification.update(this._notification.title, null, { customContent: true, secondaryGIcon: this.getSecondaryIcon() });
|
this._notification.update(this._notification.title, null, { secondaryGIcon: this.getSecondaryIcon() });
|
||||||
|
|
||||||
if (message)
|
if (message)
|
||||||
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
||||||
@ -764,8 +585,7 @@ const ChatNotification = new Lang.Class({
|
|||||||
Extends: MessageTray.Notification,
|
Extends: MessageTray.Notification,
|
||||||
|
|
||||||
_init: function(source) {
|
_init: function(source) {
|
||||||
this.parent(source, source.title, null, { customContent: true, secondaryGIcon: source.getSecondaryIcon() });
|
this.parent(source, source.title, null, { secondaryGIcon: source.getSecondaryIcon() });
|
||||||
this.setResident(true);
|
|
||||||
|
|
||||||
this._responseEntry = new St.Entry({ style_class: 'chat-response',
|
this._responseEntry = new St.Entry({ style_class: 'chat-response',
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
@ -781,16 +601,17 @@ const ChatNotification = new Lang.Class({
|
|||||||
this.emit('unfocused');
|
this.emit('unfocused');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._createScrollArea();
|
|
||||||
this._lastGroup = null;
|
this._lastGroup = null;
|
||||||
this._lastGroupActor = null;
|
|
||||||
|
this._bodyBox = new St.BoxLayout({ style_class: 'chat-notification-body-box' });
|
||||||
|
this._bodyBin.child = this._bodyBox;
|
||||||
|
|
||||||
// Keep track of the bottom position for the current adjustment and
|
// Keep track of the bottom position for the current adjustment and
|
||||||
// force a scroll to the bottom if things change while we were at the
|
// force a scroll to the bottom if things change while we were at the
|
||||||
// bottom
|
// bottom
|
||||||
this._oldMaxScrollValue = this._scrollArea.vscroll.adjustment.value;
|
this._oldMaxScrollValue = this._bodyScrollArea.vscroll.adjustment.value;
|
||||||
this._scrollArea.add_style_class_name('chat-notification-scrollview');
|
this._bodyScrollArea.add_style_class_name('chat-notification-scrollview');
|
||||||
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
|
this._bodyScrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
|
||||||
if (adjustment.value == this._oldMaxScrollValue)
|
if (adjustment.value == this._oldMaxScrollValue)
|
||||||
this.scrollTo(St.Side.BOTTOM);
|
this.scrollTo(St.Side.BOTTOM);
|
||||||
this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size);
|
this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size);
|
||||||
@ -827,8 +648,7 @@ const ChatNotification = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (message.direction == NotificationDirection.RECEIVED) {
|
if (message.direction == NotificationDirection.RECEIVED) {
|
||||||
this.update(this.source.title, messageBody, { customContent: true,
|
this.update(this.source.title, messageBody, { bannerMarkup: true });
|
||||||
bannerMarkup: true });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let group = (message.direction == NotificationDirection.RECEIVED ?
|
let group = (message.direction == NotificationDirection.RECEIVED ?
|
||||||
@ -865,7 +685,7 @@ const ChatNotification = new Lang.Class({
|
|||||||
expired[i].actor.destroy();
|
expired[i].actor.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
let groups = this._contentArea.get_children();
|
let groups = this._bodyBox.get_children();
|
||||||
for (let i = 0; i < groups.length; i++) {
|
for (let i = 0; i < groups.length; i++) {
|
||||||
let group = groups[i];
|
let group = groups[i];
|
||||||
if (group.get_n_children() == 0)
|
if (group.get_n_children() == 0)
|
||||||
@ -897,9 +717,9 @@ const ChatNotification = new Lang.Class({
|
|||||||
if (this._timestampTimeoutId)
|
if (this._timestampTimeoutId)
|
||||||
Mainloop.source_remove(this._timestampTimeoutId);
|
Mainloop.source_remove(this._timestampTimeoutId);
|
||||||
|
|
||||||
let highlighter = new MessageTray.URLHighlighter(props.body,
|
let highlighter = new MessageTray.URLHighlighter();
|
||||||
true, // line wrap?
|
highlighter.actor.clutter_text.line_wrap = true;
|
||||||
true); // allow markup?
|
highlighter.setMarkup(props.body, true);
|
||||||
|
|
||||||
let body = highlighter.actor;
|
let body = highlighter.actor;
|
||||||
|
|
||||||
@ -911,14 +731,16 @@ const ChatNotification = new Lang.Class({
|
|||||||
if (group != this._lastGroup) {
|
if (group != this._lastGroup) {
|
||||||
this._lastGroup = group;
|
this._lastGroup = group;
|
||||||
let emptyLine = new St.Label({ style_class: 'chat-empty-line' });
|
let emptyLine = new St.Label({ style_class: 'chat-empty-line' });
|
||||||
this.addActor(emptyLine);
|
this._bodyBox.add_child(emptyLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._lastMessageBox = new St.BoxLayout({ vertical: false });
|
this._lastMessageBox = new St.BoxLayout({ vertical: false });
|
||||||
this._lastMessageBox.add(body, props.childProps);
|
|
||||||
this.addActor(this._lastMessageBox);
|
|
||||||
|
|
||||||
this.updated();
|
let revealer = new MessageTray.Revealer(body);
|
||||||
|
this._lastMessageBox.add(revealer, props.childProps);
|
||||||
|
revealer.show(true);
|
||||||
|
|
||||||
|
this._bodyBox.add_child(this._lastMessageBox);
|
||||||
|
|
||||||
let timestamp = props.timestamp;
|
let timestamp = props.timestamp;
|
||||||
this._history.unshift({ actor: body, time: timestamp,
|
this._history.unshift({ actor: body, time: timestamp,
|
||||||
@ -949,78 +771,74 @@ const ChatNotification = new Lang.Class({
|
|||||||
|
|
||||||
let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
||||||
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
||||||
|
let hasAmPm = date.toLocaleFormat('%p') != '';
|
||||||
|
|
||||||
switch (clockFormat) {
|
if (clockFormat == '24h' || !hasAmPm) {
|
||||||
case '24h':
|
// Show only the time if date is on today
|
||||||
// Show only the time if date is on today
|
if(daysAgo < 1){
|
||||||
if(daysAgo < 1){
|
/* Translators: Time in 24h format */
|
||||||
/* Translators: Time in 24h format */
|
format = _("%H\u2236%M");
|
||||||
format = _("%H\u2236%M");
|
}
|
||||||
}
|
// Show the word "Yesterday" and time if date is on yesterday
|
||||||
// Show the word "Yesterday" and time if date is on yesterday
|
else if(daysAgo <2){
|
||||||
else if(daysAgo <2){
|
/* Translators: this is the word "Yesterday" followed by a
|
||||||
/* Translators: this is the word "Yesterday" followed by a
|
time string in 24h format. i.e. "Yesterday, 14:30" */
|
||||||
time string in 24h format. i.e. "Yesterday, 14:30" */
|
// xgettext:no-c-format
|
||||||
// xgettext:no-c-format
|
format = _("Yesterday, %H\u2236%M");
|
||||||
format = _("Yesterday, %H\u2236%M");
|
}
|
||||||
}
|
// Show a week day and time if date is in the last week
|
||||||
// Show a week day and time if date is in the last week
|
else if (daysAgo < 7) {
|
||||||
else if (daysAgo < 7) {
|
/* Translators: this is the week day name followed by a time
|
||||||
/* Translators: this is the week day name followed by a time
|
string in 24h format. i.e. "Monday, 14:30" */
|
||||||
string in 24h format. i.e. "Monday, 14:30" */
|
// xgettext:no-c-format
|
||||||
// xgettext:no-c-format
|
format = _("%A, %H\u2236%M");
|
||||||
format = _("%A, %H\u2236%M");
|
|
||||||
|
|
||||||
} else if (date.getYear() == now.getYear()) {
|
} else if (date.getYear() == now.getYear()) {
|
||||||
/* Translators: this is the month name and day number
|
/* Translators: this is the month name and day number
|
||||||
followed by a time string in 24h format.
|
followed by a time string in 24h format.
|
||||||
i.e. "May 25, 14:30" */
|
i.e. "May 25, 14:30" */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d, %H\u2236%M");
|
format = _("%B %d, %H\u2236%M");
|
||||||
} else {
|
} else {
|
||||||
/* Translators: this is the month name, day number, year
|
/* Translators: this is the month name, day number, year
|
||||||
number followed by a time string in 24h format.
|
number followed by a time string in 24h format.
|
||||||
i.e. "May 25 2012, 14:30" */
|
i.e. "May 25 2012, 14:30" */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d %Y, %H\u2236%M");
|
format = _("%B %d %Y, %H\u2236%M");
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
default:
|
// Show only the time if date is on today
|
||||||
/* explicit fall-through */
|
if(daysAgo < 1){
|
||||||
case '12h':
|
/* Translators: Time in 24h format */
|
||||||
// Show only the time if date is on today
|
format = _("%l\u2236%M %p");
|
||||||
if(daysAgo < 1){
|
}
|
||||||
/* Translators: Time in 24h format */
|
// Show the word "Yesterday" and time if date is on yesterday
|
||||||
format = _("%l\u2236%M %p");
|
else if(daysAgo <2){
|
||||||
}
|
/* Translators: this is the word "Yesterday" followed by a
|
||||||
// Show the word "Yesterday" and time if date is on yesterday
|
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
||||||
else if(daysAgo <2){
|
// xgettext:no-c-format
|
||||||
/* Translators: this is the word "Yesterday" followed by a
|
format = _("Yesterday, %l\u2236%M %p");
|
||||||
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
}
|
||||||
// xgettext:no-c-format
|
// Show a week day and time if date is in the last week
|
||||||
format = _("Yesterday, %l\u2236%M %p");
|
else if (daysAgo < 7) {
|
||||||
}
|
/* Translators: this is the week day name followed by a time
|
||||||
// Show a week day and time if date is in the last week
|
string in 12h format. i.e. "Monday, 2:30 pm" */
|
||||||
else if (daysAgo < 7) {
|
// xgettext:no-c-format
|
||||||
/* Translators: this is the week day name followed by a time
|
format = _("%A, %l\u2236%M %p");
|
||||||
string in 12h format. i.e. "Monday, 2:30 pm" */
|
|
||||||
// xgettext:no-c-format
|
|
||||||
format = _("%A, %l\u2236%M %p");
|
|
||||||
|
|
||||||
} else if (date.getYear() == now.getYear()) {
|
} else if (date.getYear() == now.getYear()) {
|
||||||
/* Translators: this is the month name and day number
|
/* Translators: this is the month name and day number
|
||||||
followed by a time string in 12h format.
|
followed by a time string in 12h format.
|
||||||
i.e. "May 25, 2:30 pm" */
|
i.e. "May 25, 2:30 pm" */
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d, %l\u2236%M %p");
|
format = _("%B %d, %l\u2236%M %p");
|
||||||
} else {
|
} else {
|
||||||
/* Translators: this is the month name, day number, year
|
/* Translators: this is the month name, day number, year
|
||||||
number followed by a time string in 12h format.
|
number followed by a time string in 12h format.
|
||||||
i.e. "May 25 2012, 2:30 pm"*/
|
i.e. "May 25 2012, 2:30 pm"*/
|
||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = _("%B %d %Y, %l\u2236%M %p");
|
format = _("%B %d %Y, %l\u2236%M %p");
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return date.toLocaleFormat(format);
|
return date.toLocaleFormat(format);
|
||||||
},
|
},
|
||||||
@ -1057,7 +875,7 @@ const ChatNotification = new Lang.Class({
|
|||||||
group: 'meta',
|
group: 'meta',
|
||||||
styles: ['chat-meta-message'] });
|
styles: ['chat-meta-message'] });
|
||||||
|
|
||||||
this.update(newAlias, null, { customContent: true });
|
this.update(newAlias);
|
||||||
|
|
||||||
this._filterMessages();
|
this._filterMessages();
|
||||||
},
|
},
|
||||||
@ -1110,359 +928,4 @@ const ChatNotification = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const ApproverSource = new Lang.Class({
|
|
||||||
Name: 'ApproverSource',
|
|
||||||
Extends: MessageTray.Source,
|
|
||||||
|
|
||||||
_init: function(dispatchOp, text, gicon) {
|
|
||||||
this._gicon = gicon;
|
|
||||||
|
|
||||||
this.parent(text);
|
|
||||||
|
|
||||||
this._dispatchOp = dispatchOp;
|
|
||||||
|
|
||||||
// Destroy the source if the channel dispatch operation is invalidated
|
|
||||||
// as we can't approve any more.
|
|
||||||
this._invalidId = dispatchOp.connect('invalidated',
|
|
||||||
Lang.bind(this, function(domain, code, msg) {
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_createPolicy: function() {
|
|
||||||
return new MessageTray.NotificationApplicationPolicy('empathy');
|
|
||||||
},
|
|
||||||
|
|
||||||
destroy: function() {
|
|
||||||
if (this._invalidId != 0) {
|
|
||||||
this._dispatchOp.disconnect(this._invalidId);
|
|
||||||
this._invalidId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parent();
|
|
||||||
},
|
|
||||||
|
|
||||||
getIcon: function() {
|
|
||||||
return this._gicon;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const RoomInviteNotification = new Lang.Class({
|
|
||||||
Name: 'RoomInviteNotification',
|
|
||||||
Extends: MessageTray.Notification,
|
|
||||||
|
|
||||||
_init: function(source, dispatchOp, channel, inviter) {
|
|
||||||
this.parent(source,
|
|
||||||
/* translators: argument is a room name like
|
|
||||||
* room@jabber.org for example. */
|
|
||||||
_("Invitation to %s").format(channel.get_identifier()),
|
|
||||||
null,
|
|
||||||
{ customContent: true });
|
|
||||||
this.setResident(true);
|
|
||||||
|
|
||||||
/* translators: first argument is the name of a contact and the second
|
|
||||||
* one the name of a room. "Alice is inviting you to join room@jabber.org
|
|
||||||
* for example. */
|
|
||||||
this.addBody(_("%s is inviting you to join %s").format(inviter.get_alias(), channel.get_identifier()));
|
|
||||||
|
|
||||||
this.addAction(_("Decline"), Lang.bind(this, function() {
|
|
||||||
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
|
|
||||||
src.leave_channels_finish(result);
|
|
||||||
});
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
this.addAction(_("Accept"), Lang.bind(this, function() {
|
|
||||||
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
|
|
||||||
src.handle_with_time_finish(result);
|
|
||||||
});
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Audio Video
|
|
||||||
const AudioVideoNotification = new Lang.Class({
|
|
||||||
Name: 'AudioVideoNotification',
|
|
||||||
Extends: MessageTray.Notification,
|
|
||||||
|
|
||||||
_init: function(source, dispatchOp, channel, contact, isVideo) {
|
|
||||||
let title = '';
|
|
||||||
|
|
||||||
if (isVideo)
|
|
||||||
/* translators: argument is a contact name like Alice for example. */
|
|
||||||
title = _("Video call from %s").format(contact.get_alias());
|
|
||||||
else
|
|
||||||
/* translators: argument is a contact name like Alice for example. */
|
|
||||||
title = _("Call from %s").format(contact.get_alias());
|
|
||||||
|
|
||||||
this.parent(source, title, null, { customContent: true });
|
|
||||||
this.setResident(true);
|
|
||||||
|
|
||||||
this.setUrgency(MessageTray.Urgency.CRITICAL);
|
|
||||||
|
|
||||||
this.addAction(_("Decline"), Lang.bind(this, function() {
|
|
||||||
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
|
|
||||||
src.leave_channels_finish(result);
|
|
||||||
});
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
/* translators: this is a button label (verb), not a noun */
|
|
||||||
this.addAction(_("Answer"), Lang.bind(this, function() {
|
|
||||||
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
|
|
||||||
src.handle_with_time_finish(result);
|
|
||||||
});
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// File Transfer
|
|
||||||
const FileTransferNotification = new Lang.Class({
|
|
||||||
Name: 'FileTransferNotification',
|
|
||||||
Extends: MessageTray.Notification,
|
|
||||||
|
|
||||||
_init: function(source, dispatchOp, channel, contact) {
|
|
||||||
this.parent(source,
|
|
||||||
/* To translators: The first parameter is
|
|
||||||
* the contact's alias and the second one is the
|
|
||||||
* file name. The string will be something
|
|
||||||
* like: "Alice is sending you test.ogg"
|
|
||||||
*/
|
|
||||||
_("%s is sending you %s").format(contact.get_alias(),
|
|
||||||
channel.get_filename()),
|
|
||||||
null,
|
|
||||||
{ customContent: true });
|
|
||||||
this.setResident(true);
|
|
||||||
|
|
||||||
this.addAction(_("Decline"), Lang.bind(this, function() {
|
|
||||||
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
|
|
||||||
src.leave_channels_finish(result);
|
|
||||||
});
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
this.addAction(_("Accept"), Lang.bind(this, function() {
|
|
||||||
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
|
|
||||||
src.handle_with_time_finish(result);
|
|
||||||
});
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Subscription request
|
|
||||||
const SubscriptionRequestNotification = new Lang.Class({
|
|
||||||
Name: 'SubscriptionRequestNotification',
|
|
||||||
Extends: MessageTray.Notification,
|
|
||||||
|
|
||||||
_init: function(source, contact) {
|
|
||||||
this.parent(source,
|
|
||||||
/* To translators: The parameter is the contact's alias */
|
|
||||||
_("%s would like permission to see when you are online").format(contact.get_alias()),
|
|
||||||
null, { customContent: true });
|
|
||||||
|
|
||||||
this._contact = contact;
|
|
||||||
this._connection = contact.get_connection();
|
|
||||||
|
|
||||||
let layout = new St.BoxLayout({ vertical: false });
|
|
||||||
|
|
||||||
// Display avatar
|
|
||||||
let iconBox = new St.Bin({ style_class: 'avatar-box' });
|
|
||||||
iconBox._size = 48;
|
|
||||||
|
|
||||||
let textureCache = St.TextureCache.get_default();
|
|
||||||
let file = contact.get_avatar_file();
|
|
||||||
|
|
||||||
if (file) {
|
|
||||||
let uri = file.get_uri();
|
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
|
||||||
iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size, scaleFactor);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
iconBox.child = new St.Icon({ icon_name: 'avatar-default',
|
|
||||||
icon_size: iconBox._size });
|
|
||||||
}
|
|
||||||
|
|
||||||
layout.add(iconBox);
|
|
||||||
|
|
||||||
// subscription request message
|
|
||||||
let label = new St.Label({ style_class: 'subscription-message',
|
|
||||||
text: contact.get_publish_request() });
|
|
||||||
|
|
||||||
layout.add(label);
|
|
||||||
|
|
||||||
this.addActor(layout);
|
|
||||||
|
|
||||||
this.addAction(_("Decline"), Lang.bind(this, function() {
|
|
||||||
contact.remove_async(function(src, result) {
|
|
||||||
src.remove_finish(result);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
this.addAction(_("Accept"), Lang.bind(this, function() {
|
|
||||||
// Authorize the contact and request to see his status as well
|
|
||||||
contact.authorize_publication_async(function(src, result) {
|
|
||||||
src.authorize_publication_finish(result);
|
|
||||||
});
|
|
||||||
|
|
||||||
contact.request_subscription_async('', function(src, result) {
|
|
||||||
src.request_subscription_finish(result);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._changedId = contact.connect('subscription-states-changed',
|
|
||||||
Lang.bind(this, this._subscriptionStatesChangedCb));
|
|
||||||
this._invalidatedId = this._connection.connect('invalidated',
|
|
||||||
Lang.bind(this, this.destroy));
|
|
||||||
},
|
|
||||||
|
|
||||||
destroy: function() {
|
|
||||||
if (this._changedId != 0) {
|
|
||||||
this._contact.disconnect(this._changedId);
|
|
||||||
this._changedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._invalidatedId != 0) {
|
|
||||||
this._connection.disconnect(this._invalidatedId);
|
|
||||||
this._invalidatedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parent();
|
|
||||||
},
|
|
||||||
|
|
||||||
_subscriptionStatesChangedCb: function(contact, subscribe, publish, msg) {
|
|
||||||
// Destroy the notification if the subscription request has been
|
|
||||||
// answered
|
|
||||||
if (publish != Tp.SubscriptionState.ASK)
|
|
||||||
this.destroy();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Messages from empathy/libempathy/empathy-utils.c
|
|
||||||
// create_errors_to_message_hash()
|
|
||||||
|
|
||||||
/* Translator note: these should be the same messages that are
|
|
||||||
* used in Empathy, so just copy and paste from there. */
|
|
||||||
let _connectionErrorMessages = {};
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.NETWORK_ERROR)]
|
|
||||||
= _("Network error");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.AUTHENTICATION_FAILED)]
|
|
||||||
= _("Authentication failed");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ENCRYPTION_ERROR)]
|
|
||||||
= _("Encryption error");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_NOT_PROVIDED)]
|
|
||||||
= _("Certificate not provided");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_UNTRUSTED)]
|
|
||||||
= _("Certificate untrusted");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_EXPIRED)]
|
|
||||||
= _("Certificate expired");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_NOT_ACTIVATED)]
|
|
||||||
= _("Certificate not activated");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_HOSTNAME_MISMATCH)]
|
|
||||||
= _("Certificate hostname mismatch");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_FINGERPRINT_MISMATCH)]
|
|
||||||
= _("Certificate fingerprint mismatch");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_SELF_SIGNED)]
|
|
||||||
= _("Certificate self-signed");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CANCELLED)]
|
|
||||||
= _("Status is set to offline");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ENCRYPTION_NOT_AVAILABLE)]
|
|
||||||
= _("Encryption is not available");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_INVALID)]
|
|
||||||
= _("Certificate is invalid");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_REFUSED)]
|
|
||||||
= _("Connection has been refused");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_FAILED)]
|
|
||||||
= _("Connection can't be established");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_LOST)]
|
|
||||||
= _("Connection has been lost");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ALREADY_CONNECTED)]
|
|
||||||
= _("This account is already connected to the server");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_REPLACED)]
|
|
||||||
= _("Connection has been replaced by a new connection using the same resource");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.REGISTRATION_EXISTS)]
|
|
||||||
= _("The account already exists on the server");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.SERVICE_BUSY)]
|
|
||||||
= _("Server is currently too busy to handle the connection");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_REVOKED)]
|
|
||||||
= _("Certificate has been revoked");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_INSECURE)]
|
|
||||||
= _("Certificate uses an insecure cipher algorithm or is cryptographically weak");
|
|
||||||
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_LIMIT_EXCEEDED)]
|
|
||||||
= _("The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library");
|
|
||||||
_connectionErrorMessages['org.freedesktop.DBus.Error.NoReply']
|
|
||||||
= _("Internal error");
|
|
||||||
|
|
||||||
const AccountNotification = new Lang.Class({
|
|
||||||
Name: 'AccountNotification',
|
|
||||||
Extends: MessageTray.Notification,
|
|
||||||
|
|
||||||
_init: function(source, account, connectionError) {
|
|
||||||
this.parent(source,
|
|
||||||
/* translators: argument is the account name, like
|
|
||||||
* name@jabber.org for example. */
|
|
||||||
_("Unable to connect to %s").format(account.get_display_name()),
|
|
||||||
this._getMessage(connectionError));
|
|
||||||
|
|
||||||
this._account = account;
|
|
||||||
|
|
||||||
this.addAction(_("View account"), Lang.bind(this, function() {
|
|
||||||
let cmd = 'empathy-accounts --select-account=' +
|
|
||||||
account.get_path_suffix();
|
|
||||||
let app_info = Gio.app_info_create_from_commandline(cmd, null, 0);
|
|
||||||
app_info.launch([], global.create_app_launch_context(0, -1));
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._enabledId = account.connect('notify::enabled',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
if (!account.is_enabled())
|
|
||||||
this.destroy();
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._invalidatedId = account.connect('invalidated',
|
|
||||||
Lang.bind(this, this.destroy));
|
|
||||||
|
|
||||||
this._connectionStatusId = account.connect('notify::connection-status',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
let status = account.connection_status;
|
|
||||||
if (status == Tp.ConnectionStatus.CONNECTED) {
|
|
||||||
this.destroy();
|
|
||||||
} else if (status == Tp.ConnectionStatus.DISCONNECTED) {
|
|
||||||
let connectionError = account.connection_error;
|
|
||||||
|
|
||||||
if (connectionError == Tp.error_get_dbus_name(Tp.Error.CANCELLED))
|
|
||||||
this.destroy();
|
|
||||||
else
|
|
||||||
this.update(this.title, this._getMessage(connectionError));
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_getMessage: function(connectionError) {
|
|
||||||
let message;
|
|
||||||
if (connectionError in _connectionErrorMessages) {
|
|
||||||
message = _connectionErrorMessages[connectionError];
|
|
||||||
} else {
|
|
||||||
message = _("Unknown reason");
|
|
||||||
}
|
|
||||||
return message;
|
|
||||||
},
|
|
||||||
|
|
||||||
destroy: function() {
|
|
||||||
if (this._enabledId != 0) {
|
|
||||||
this._account.disconnect(this._enabledId);
|
|
||||||
this._enabledId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._invalidatedId != 0) {
|
|
||||||
this._account.disconnect(this._invalidatedId);
|
|
||||||
this._invalidatedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._connectionStatusId != 0) {
|
|
||||||
this._account.disconnect(this._connectionStatusId);
|
|
||||||
this._connectionStatusId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parent();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const Component = TelepathyClient;
|
const Component = TelepathyClient;
|
||||||
|
@ -87,7 +87,7 @@ const CtrlAltTabManager = new Lang.Class({
|
|||||||
if (Main.sessionMode.hasWindows && !Main.overview.visible) {
|
if (Main.sessionMode.hasWindows && !Main.overview.visible) {
|
||||||
let screen = global.screen;
|
let screen = global.screen;
|
||||||
let display = screen.get_display();
|
let display = screen.get_display();
|
||||||
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ());
|
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen.get_active_workspace ());
|
||||||
let windowTracker = Shell.WindowTracker.get_default();
|
let windowTracker = Shell.WindowTracker.get_default();
|
||||||
let textureCache = St.TextureCache.get_default();
|
let textureCache = St.TextureCache.get_default();
|
||||||
for (let i = 0; i < windows.length; i++) {
|
for (let i = 0; i < windows.length; i++) {
|
||||||
|
169
js/ui/layout.js
169
js/ui/layout.js
@ -22,11 +22,6 @@ const KEYBOARD_ANIMATION_TIME = 0.15;
|
|||||||
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
|
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
|
||||||
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
|
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
|
||||||
|
|
||||||
// The message tray takes this much pressure
|
|
||||||
// in the pressure barrier at once to release it.
|
|
||||||
const MESSAGE_TRAY_PRESSURE_THRESHOLD = 250; // pixels
|
|
||||||
const MESSAGE_TRAY_PRESSURE_TIMEOUT = 1000; // ms
|
|
||||||
|
|
||||||
const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
|
const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
|
||||||
const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
|
const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
|
||||||
|
|
||||||
@ -150,7 +145,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
|
|
||||||
this._keyboardIndex = -1;
|
this._keyboardIndex = -1;
|
||||||
this._rightPanelBarrier = null;
|
this._rightPanelBarrier = null;
|
||||||
this._trayBarrier = null;
|
|
||||||
|
|
||||||
this._inOverview = false;
|
this._inOverview = false;
|
||||||
this._updateRegionIdle = 0;
|
this._updateRegionIdle = 0;
|
||||||
@ -210,7 +204,6 @@ const LayoutManager = new Lang.Class({
|
|||||||
this.trayBox = new St.Widget({ name: 'trayBox',
|
this.trayBox = new St.Widget({ name: 'trayBox',
|
||||||
layout_manager: new Clutter.BinLayout() });
|
layout_manager: new Clutter.BinLayout() });
|
||||||
this.addChrome(this.trayBox);
|
this.addChrome(this.trayBox);
|
||||||
this._setupTrayPressure();
|
|
||||||
|
|
||||||
this.modalDialogGroup = new St.Widget({ name: 'modalDialogGroup',
|
this.modalDialogGroup = new St.Widget({ name: 'modalDialogGroup',
|
||||||
layout_manager: new Clutter.BinLayout() });
|
layout_manager: new Clutter.BinLayout() });
|
||||||
@ -449,50 +442,9 @@ const LayoutManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_setupTrayPressure: function() {
|
|
||||||
this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD,
|
|
||||||
MESSAGE_TRAY_PRESSURE_TIMEOUT,
|
|
||||||
Shell.KeyBindingMode.NORMAL |
|
|
||||||
Shell.KeyBindingMode.OVERVIEW);
|
|
||||||
this._trayPressure.setEventFilter(this._trayBarrierEventFilter);
|
|
||||||
this._trayPressure.connect('trigger', function(barrier) {
|
|
||||||
if (Main.layoutManager.bottomMonitor.inFullscreen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Main.messageTray.openTray();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateTrayBarrier: function() {
|
|
||||||
let monitor = this.bottomMonitor;
|
|
||||||
|
|
||||||
if (this._trayBarrier) {
|
|
||||||
this._trayPressure.removeBarrier(this._trayBarrier);
|
|
||||||
this._trayBarrier.destroy();
|
|
||||||
this._trayBarrier = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._trayBarrier = new Meta.Barrier({ display: global.display,
|
|
||||||
x1: monitor.x, x2: monitor.x + monitor.width,
|
|
||||||
y1: monitor.y + monitor.height, y2: monitor.y + monitor.height,
|
|
||||||
directions: Meta.BarrierDirection.NEGATIVE_Y });
|
|
||||||
this._trayPressure.addBarrier(this._trayBarrier);
|
|
||||||
},
|
|
||||||
|
|
||||||
_trayBarrierEventFilter: function(event) {
|
|
||||||
// Throw out all events where the pointer was grabbed by another
|
|
||||||
// client, as the client that grabbed the pointer expects to have
|
|
||||||
// complete control over it
|
|
||||||
if (event.grabbed && Main.modalCount == 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
_monitorsChanged: function() {
|
_monitorsChanged: function() {
|
||||||
this._updateMonitors();
|
this._updateMonitors();
|
||||||
this._updateBoxes();
|
this._updateBoxes();
|
||||||
this._updateTrayBarrier();
|
|
||||||
this._updateHotCorners();
|
this._updateHotCorners();
|
||||||
this._updateBackgrounds();
|
this._updateBackgrounds();
|
||||||
this._updateFullscreen();
|
this._updateFullscreen();
|
||||||
@ -1096,10 +1048,10 @@ const HotCorner = new Lang.Class({
|
|||||||
|
|
||||||
this._setupFallbackCornerIfNeeded(layoutManager);
|
this._setupFallbackCornerIfNeeded(layoutManager);
|
||||||
|
|
||||||
this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
|
this._pressureBarrier = new TriggerablePressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
|
||||||
HOT_CORNER_PRESSURE_TIMEOUT,
|
HOT_CORNER_PRESSURE_TIMEOUT,
|
||||||
Shell.KeyBindingMode.NORMAL |
|
Shell.KeyBindingMode.NORMAL |
|
||||||
Shell.KeyBindingMode.OVERVIEW);
|
Shell.KeyBindingMode.OVERVIEW);
|
||||||
this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview));
|
this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview));
|
||||||
|
|
||||||
// Cache the three ripples instead of dynamically creating and destroying them.
|
// Cache the three ripples instead of dynamically creating and destroying them.
|
||||||
@ -1277,14 +1229,12 @@ const PressureBarrier = new Lang.Class({
|
|||||||
Name: 'PressureBarrier',
|
Name: 'PressureBarrier',
|
||||||
|
|
||||||
_init: function(threshold, timeout, keybindingMode) {
|
_init: function(threshold, timeout, keybindingMode) {
|
||||||
this._threshold = threshold;
|
this.threshold = threshold;
|
||||||
this._timeout = timeout;
|
this.timeout = timeout;
|
||||||
this._keybindingMode = keybindingMode;
|
this._keybindingMode = keybindingMode;
|
||||||
this._barriers = [];
|
this._barriers = [];
|
||||||
this._eventFilter = null;
|
this._eventFilter = null;
|
||||||
|
this.reset();
|
||||||
this._isTriggered = false;
|
|
||||||
this._reset();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
addBarrier: function(barrier) {
|
addBarrier: function(barrier) {
|
||||||
@ -1313,10 +1263,10 @@ const PressureBarrier = new Lang.Class({
|
|||||||
this._eventFilter = filter;
|
this._eventFilter = filter;
|
||||||
},
|
},
|
||||||
|
|
||||||
_reset: function() {
|
reset: function() {
|
||||||
this._barrierEvents = [];
|
this._barrierEvents = [];
|
||||||
this._currentPressure = 0;
|
|
||||||
this._lastTime = 0;
|
this._lastTime = 0;
|
||||||
|
this.currentPressure = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
_isHorizontal: function(barrier) {
|
_isHorizontal: function(barrier) {
|
||||||
@ -1337,12 +1287,21 @@ const PressureBarrier = new Lang.Class({
|
|||||||
return Math.abs(event.dy);
|
return Math.abs(event.dy);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get currentPressure() {
|
||||||
|
return this._currentPressure;
|
||||||
|
},
|
||||||
|
|
||||||
|
set currentPressure(value) {
|
||||||
|
this._currentPressure = value;
|
||||||
|
this.emit('pressure-changed');
|
||||||
|
},
|
||||||
|
|
||||||
_trimBarrierEvents: function() {
|
_trimBarrierEvents: function() {
|
||||||
// Events are guaranteed to be sorted in time order from
|
// Events are guaranteed to be sorted in time order from
|
||||||
// oldest to newest, so just look for the first old event,
|
// oldest to newest, so just look for the first old event,
|
||||||
// and then chop events after that off.
|
// and then chop events after that off.
|
||||||
let i = 0;
|
let i = 0;
|
||||||
let threshold = this._lastTime - this._timeout;
|
let threshold = this._lastTime - this.timeout;
|
||||||
|
|
||||||
while (i < this._barrierEvents.length) {
|
while (i < this._barrierEvents.length) {
|
||||||
let [time, distance] = this._barrierEvents[i];
|
let [time, distance] = this._barrierEvents[i];
|
||||||
@ -1355,21 +1314,75 @@ const PressureBarrier = new Lang.Class({
|
|||||||
|
|
||||||
for (i = 0; i < firstNewEvent; i++) {
|
for (i = 0; i < firstNewEvent; i++) {
|
||||||
let [time, distance] = this._barrierEvents[i];
|
let [time, distance] = this._barrierEvents[i];
|
||||||
this._currentPressure -= distance;
|
this.currentPressure = distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._barrierEvents = this._barrierEvents.slice(firstNewEvent);
|
this._barrierEvents = this._barrierEvents.slice(firstNewEvent);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onBarrierLeft: function(barrier, event) {
|
_onBarrierLeft: function(barrier, event) {
|
||||||
this._reset();
|
this.reset();
|
||||||
|
},
|
||||||
|
|
||||||
|
_shouldUseEvent: function(barrier, event) {
|
||||||
|
if (this._eventFilter && this._eventFilter(event))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Throw out all events not in the proper keybinding mode
|
||||||
|
if (!(this._keybindingMode & Main.keybindingMode))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let slide = this._getDistanceAlongBarrier(barrier, event);
|
||||||
|
let distance = this._getDistanceAcrossBarrier(barrier, event);
|
||||||
|
|
||||||
|
// Throw out events where the cursor is move more
|
||||||
|
// along the axis of the barrier than moving with
|
||||||
|
// the barrier.
|
||||||
|
if (slide > distance)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_appendEvent: function(barrier, event) {
|
||||||
|
let distance = this._getDistanceAcrossBarrier(barrier, event);
|
||||||
|
|
||||||
|
this._lastTime = event.time;
|
||||||
|
|
||||||
|
this._trimBarrierEvents();
|
||||||
|
distance = Math.min(15, distance);
|
||||||
|
|
||||||
|
this._barrierEvents.push([event.time, distance]);
|
||||||
|
this.currentPressure += distance;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onBarrierHit: function(barrier, event) {
|
||||||
|
if (!this._shouldUseEvent(barrier, event))
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._appendEvent(barrier, event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(PressureBarrier.prototype);
|
||||||
|
|
||||||
|
const TriggerablePressureBarrier = new Lang.Class({
|
||||||
|
Name: 'TriggerablePressureBarrier',
|
||||||
|
Extends: PressureBarrier,
|
||||||
|
|
||||||
|
_init: function(threshold, timeout, keybindingMode) {
|
||||||
|
this.parent(threshold, timeout, keybindingMode);
|
||||||
this._isTriggered = false;
|
this._isTriggered = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_trigger: function() {
|
_trigger: function() {
|
||||||
this._isTriggered = true;
|
this._isTriggered = true;
|
||||||
this.emit('trigger');
|
this.emit('trigger');
|
||||||
this._reset();
|
this.reset();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onBarrierLeft: function() {
|
||||||
|
this.parent();
|
||||||
|
this._isTriggered = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onBarrierHit: function(barrier, event) {
|
_onBarrierHit: function(barrier, event) {
|
||||||
@ -1378,37 +1391,17 @@ const PressureBarrier = new Lang.Class({
|
|||||||
if (this._isTriggered)
|
if (this._isTriggered)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this._eventFilter && this._eventFilter(event))
|
if (!this._shouldUseEvent(barrier, event))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Throw out all events not in the proper keybinding mode
|
if (distance >= this.threshold) {
|
||||||
if (!(this._keybindingMode & Main.keybindingMode))
|
|
||||||
return;
|
|
||||||
|
|
||||||
let slide = this._getDistanceAlongBarrier(barrier, event);
|
|
||||||
let distance = this._getDistanceAcrossBarrier(barrier, event);
|
|
||||||
|
|
||||||
if (distance >= this._threshold) {
|
|
||||||
this._trigger();
|
this._trigger();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Throw out events where the cursor is move more
|
this._appendEvent(barrier, event);
|
||||||
// along the axis of the barrier than moving with
|
|
||||||
// the barrier.
|
|
||||||
if (slide > distance)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._lastTime = event.time;
|
if (this.currentPressure >= this.threshold)
|
||||||
|
|
||||||
this._trimBarrierEvents();
|
|
||||||
distance = Math.min(15, distance);
|
|
||||||
|
|
||||||
this._barrierEvents.push([event.time, distance]);
|
|
||||||
this._currentPressure += distance;
|
|
||||||
|
|
||||||
if (this._currentPressure >= this._threshold)
|
|
||||||
this._trigger();
|
this._trigger();
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(PressureBarrier.prototype);
|
|
||||||
|
1956
js/ui/messageTray.js
1956
js/ui/messageTray.js
File diff suppressed because it is too large
Load Diff
@ -91,21 +91,6 @@ const rewriteRules = {
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
|
|
||||||
'bluetooth-applet': 'bluetooth',
|
|
||||||
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
|
|
||||||
// when moved to control center
|
|
||||||
'gnome-sound-applet': 'volume',
|
|
||||||
'nm-applet': 'network',
|
|
||||||
'gnome-power-manager': 'battery',
|
|
||||||
'keyboard': 'keyboard',
|
|
||||||
'a11y-keyboard': 'a11y',
|
|
||||||
'kbd-scrolllock': 'keyboard',
|
|
||||||
'kbd-numlock': 'keyboard',
|
|
||||||
'kbd-capslock': 'keyboard',
|
|
||||||
'ibus-ui-gtk': 'keyboard'
|
|
||||||
};
|
|
||||||
|
|
||||||
const FdoNotificationDaemon = new Lang.Class({
|
const FdoNotificationDaemon = new Lang.Class({
|
||||||
Name: 'FdoNotificationDaemon',
|
Name: 'FdoNotificationDaemon',
|
||||||
|
|
||||||
@ -120,16 +105,10 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
|
|
||||||
this._nextNotificationId = 1;
|
this._nextNotificationId = 1;
|
||||||
|
|
||||||
this._trayManager = new Shell.TrayManager();
|
|
||||||
this._trayIconAddedId = this._trayManager.connect('tray-icon-added', Lang.bind(this, this._onTrayIconAdded));
|
|
||||||
this._trayIconRemovedId = this._trayManager.connect('tray-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
|
|
||||||
|
|
||||||
Shell.WindowTracker.get_default().connect('notify::focus-app',
|
Shell.WindowTracker.get_default().connect('notify::focus-app',
|
||||||
Lang.bind(this, this._onFocusAppChanged));
|
Lang.bind(this, this._onFocusAppChanged));
|
||||||
Main.overview.connect('hidden',
|
Main.overview.connect('hidden',
|
||||||
Lang.bind(this, this._onFocusAppChanged));
|
Lang.bind(this, this._onFocusAppChanged));
|
||||||
|
|
||||||
this._trayManager.manage_screen(global.screen, Main.messageTray.actor);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_imageForNotificationData: function(hints) {
|
_imageForNotificationData: function(hints) {
|
||||||
@ -170,28 +149,23 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_lookupSource: function(title, pid, trayIcon) {
|
_lookupSource: function(title, pid) {
|
||||||
for (let i = 0; i < this._sources.length; i++) {
|
for (let i = 0; i < this._sources.length; i++) {
|
||||||
let source = this._sources[i];
|
let source = this._sources[i];
|
||||||
if (source.pid == pid &&
|
if (source.pid == pid && source.initialTitle == title)
|
||||||
(source.initialTitle == title || source.trayIcon || trayIcon))
|
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Returns the source associated with ndata.notification if it is set.
|
// Returns the source associated with ndata.notification if it is set.
|
||||||
// If the existing or requested source is associated with a tray icon
|
|
||||||
// and passed in pid matches a pid of an existing source, the title
|
|
||||||
// match is ignored to enable representing a tray icon and notifications
|
|
||||||
// from the same application with a single source.
|
|
||||||
//
|
//
|
||||||
// If no existing source is found, a new source is created as long as
|
// If no existing source is found, a new source is created as long as
|
||||||
// pid is provided.
|
// pid is provided.
|
||||||
//
|
//
|
||||||
// Either a pid or ndata.notification is needed to retrieve or
|
// Either a pid or ndata.notification is needed to retrieve or
|
||||||
// create a source.
|
// create a source.
|
||||||
_getSource: function(title, pid, ndata, sender, trayIcon) {
|
_getSource: function(title, pid, ndata, sender) {
|
||||||
if (!pid && !(ndata && ndata.notification))
|
if (!pid && !(ndata && ndata.notification))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
@ -202,13 +176,13 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
if (ndata && ndata.notification)
|
if (ndata && ndata.notification)
|
||||||
return ndata.notification.source;
|
return ndata.notification.source;
|
||||||
|
|
||||||
let source = this._lookupSource(title, pid, trayIcon);
|
let source = this._lookupSource(title, pid);
|
||||||
if (source) {
|
if (source) {
|
||||||
source.setTitle(title);
|
source.setTitle(title);
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
let source = new FdoNotificationDaemonSource(title, pid, sender, trayIcon, ndata ? ndata.hints['desktop-entry'] : null);
|
let source = new FdoNotificationDaemonSource(title, pid, sender, ndata ? ndata.hints['desktop-entry'] : null);
|
||||||
|
|
||||||
this._sources.push(source);
|
this._sources.push(source);
|
||||||
source.connect('destroy', Lang.bind(this, function() {
|
source.connect('destroy', Lang.bind(this, function() {
|
||||||
@ -334,13 +308,14 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_makeButton: function(id, label, useActionIcons) {
|
_makeButton: function(id, label, useActionIcons) {
|
||||||
let button = new St.Button({ can_focus: true });
|
let button = new St.Button({ can_focus: true,
|
||||||
|
x_expand: true,
|
||||||
|
style_class: 'notification-button' });
|
||||||
let iconName = id.endsWith('-symbolic') ? id : id + '-symbolic';
|
let iconName = id.endsWith('-symbolic') ? id : id + '-symbolic';
|
||||||
|
|
||||||
if (useActionIcons && Gtk.IconTheme.get_default().has_icon(iconName)) {
|
if (useActionIcons && Gtk.IconTheme.get_default().has_icon(iconName)) {
|
||||||
button.add_style_class_name('notification-icon-button');
|
button.child = new St.Icon({ icon_name: iconName, icon_size: 16 });
|
||||||
button.child = new St.Icon({ icon_name: iconName });
|
|
||||||
} else {
|
} else {
|
||||||
button.add_style_class_name('notification-button');
|
|
||||||
button.label = label;
|
button.label = label;
|
||||||
}
|
}
|
||||||
return button;
|
return button;
|
||||||
@ -379,8 +354,6 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
let gicon = this._iconForNotificationData(icon, hints);
|
let gicon = this._iconForNotificationData(icon, hints);
|
||||||
let gimage = this._imageForNotificationData(hints);
|
let gimage = this._imageForNotificationData(hints);
|
||||||
|
|
||||||
let image = null;
|
|
||||||
|
|
||||||
// If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon
|
// If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon
|
||||||
// and don't show a large image. There are currently many applications that use
|
// and don't show a large image. There are currently many applications that use
|
||||||
// notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets
|
// notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets
|
||||||
@ -389,10 +362,7 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
// So the logic here does the right thing for this case. If both an icon and either
|
// So the logic here does the right thing for this case. If both an icon and either
|
||||||
// one of 'image-data' or 'image-path' are specified, we show both an icon and
|
// one of 'image-data' or 'image-path' are specified, we show both an icon and
|
||||||
// a large image.
|
// a large image.
|
||||||
if (gicon && gimage)
|
if (!gicon && gimage)
|
||||||
image = new St.Icon({ gicon: gimage,
|
|
||||||
icon_size: notification.IMAGE_SIZE });
|
|
||||||
else if (!gicon && gimage)
|
|
||||||
gicon = gimage;
|
gicon = gimage;
|
||||||
else if (!gicon)
|
else if (!gicon)
|
||||||
gicon = this._fallbackIconForNotificationData(hints);
|
gicon = this._fallbackIconForNotificationData(hints);
|
||||||
@ -402,7 +372,6 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
clear: true,
|
clear: true,
|
||||||
soundFile: hints['sound-file'],
|
soundFile: hints['sound-file'],
|
||||||
soundName: hints['sound-name'] });
|
soundName: hints['sound-name'] });
|
||||||
notification.setImage(image);
|
|
||||||
|
|
||||||
let hasDefaultAction = false;
|
let hasDefaultAction = false;
|
||||||
|
|
||||||
@ -442,7 +411,6 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
notification.setUrgency(MessageTray.Urgency.CRITICAL);
|
notification.setUrgency(MessageTray.Urgency.CRITICAL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
notification.setResident(hints.resident == true);
|
|
||||||
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
|
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
|
||||||
// of the 'transient' hint with hints['transient'] rather than hints.transient
|
// of the 'transient' hint with hints['transient'] rather than hints.transient
|
||||||
notification.setTransient(hints['transient'] == true);
|
notification.setTransient(hints['transient'] == true);
|
||||||
@ -470,7 +438,6 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
'body-markup',
|
'body-markup',
|
||||||
// 'icon-multi',
|
// 'icon-multi',
|
||||||
'icon-static',
|
'icon-static',
|
||||||
'persistence',
|
|
||||||
'sound',
|
'sound',
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
@ -492,7 +459,7 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
for (let i = 0; i < this._sources.length; i++) {
|
for (let i = 0; i < this._sources.length; i++) {
|
||||||
let source = this._sources[i];
|
let source = this._sources[i];
|
||||||
if (source.app == tracker.focus_app) {
|
if (source.app == tracker.focus_app) {
|
||||||
source.destroyNonResidentNotifications();
|
source.destroyNotifications();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -507,30 +474,15 @@ const FdoNotificationDaemon = new Lang.Class({
|
|||||||
this._dbusImpl.emit_signal('ActionInvoked',
|
this._dbusImpl.emit_signal('ActionInvoked',
|
||||||
GLib.Variant.new('(us)', [id, action]));
|
GLib.Variant.new('(us)', [id, action]));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onTrayIconAdded: function(o, icon) {
|
|
||||||
let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
|
|
||||||
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass] !== undefined)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let source = this._getSource(icon.title || icon.wm_class || C_("program", "Unknown"), icon.pid, null, null, icon);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onTrayIconRemoved: function(o, icon) {
|
|
||||||
let source = this._lookupSource(null, icon.pid, true);
|
|
||||||
if (source)
|
|
||||||
source.destroy();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const FdoNotificationDaemonSource = new Lang.Class({
|
const FdoNotificationDaemonSource = new Lang.Class({
|
||||||
Name: 'FdoNotificationDaemonSource',
|
Name: 'FdoNotificationDaemonSource',
|
||||||
Extends: MessageTray.Source,
|
Extends: MessageTray.Source,
|
||||||
|
|
||||||
_init: function(title, pid, sender, trayIcon, appId) {
|
_init: function(title, pid, sender, appId) {
|
||||||
// Need to set the app before chaining up, so
|
// Need to set the app before chaining up, so
|
||||||
// methods called from the parent constructor can find it
|
// methods called from the parent constructor can find it
|
||||||
this.trayIcon = trayIcon;
|
|
||||||
this.pid = pid;
|
this.pid = pid;
|
||||||
this.app = this._getApp(appId);
|
this.app = this._getApp(appId);
|
||||||
|
|
||||||
@ -550,12 +502,6 @@ const FdoNotificationDaemonSource = new Lang.Class({
|
|||||||
Lang.bind(this, this._onNameVanished));
|
Lang.bind(this, this._onNameVanished));
|
||||||
else
|
else
|
||||||
this._nameWatcherId = 0;
|
this._nameWatcherId = 0;
|
||||||
|
|
||||||
if (this.trayIcon) {
|
|
||||||
// Try again finding the app, using the WM_CLASS from the tray icon
|
|
||||||
this._setSummaryIcon(this.trayIcon);
|
|
||||||
this.useNotificationIcon = false;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_createPolicy: function() {
|
_createPolicy: function() {
|
||||||
@ -571,48 +517,23 @@ const FdoNotificationDaemonSource = new Lang.Class({
|
|||||||
// Destroy the notification source when its sender is removed from DBus.
|
// Destroy the notification source when its sender is removed from DBus.
|
||||||
// Only do so if this.app is set to avoid removing "notify-send" sources, senders
|
// Only do so if this.app is set to avoid removing "notify-send" sources, senders
|
||||||
// of which аre removed from DBus immediately.
|
// of which аre removed from DBus immediately.
|
||||||
// Sender being removed from DBus would normally result in a tray icon being removed,
|
if (this.app)
|
||||||
// so allow the code path that handles the tray icon being removed to handle that case.
|
|
||||||
if (!this.trayIcon && this.app)
|
|
||||||
this.destroy();
|
this.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
processNotification: function(notification, gicon) {
|
processNotification: function(notification, gicon) {
|
||||||
if (gicon)
|
if (gicon)
|
||||||
this._gicon = gicon;
|
this._gicon = gicon;
|
||||||
if (!this.trayIcon)
|
|
||||||
this.iconUpdated();
|
this.iconUpdated();
|
||||||
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
if (notification.resident && this.app && tracker.focus_app == this.app)
|
if (this.app && tracker.focus_app == this.app)
|
||||||
this.pushNotification(notification);
|
this.pushNotification(notification);
|
||||||
else
|
else
|
||||||
this.notify(notification);
|
this.notify(notification);
|
||||||
},
|
},
|
||||||
|
|
||||||
handleSummaryClick: function(button) {
|
|
||||||
if (!this.trayIcon)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let event = Clutter.get_current_event();
|
|
||||||
|
|
||||||
// Left clicks are passed through only where there aren't unacknowledged
|
|
||||||
// notifications, so it possible to open them in summary mode; right
|
|
||||||
// clicks are always forwarded, as the right click menu is not useful for
|
|
||||||
// tray icons
|
|
||||||
if (button == 1 &&
|
|
||||||
this.notifications.length > 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let id = global.stage.connect('deactivate', Lang.bind(this, function () {
|
|
||||||
global.stage.disconnect(id);
|
|
||||||
this.trayIcon.click(event);
|
|
||||||
}));
|
|
||||||
|
|
||||||
Main.overview.hide();
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getApp: function(appId) {
|
_getApp: function(appId) {
|
||||||
let app;
|
let app;
|
||||||
|
|
||||||
@ -620,16 +541,6 @@ const FdoNotificationDaemonSource = new Lang.Class({
|
|||||||
if (app != null)
|
if (app != null)
|
||||||
return app;
|
return app;
|
||||||
|
|
||||||
if (this.trayIcon) {
|
|
||||||
app = Shell.AppSystem.get_default().lookup_startup_wmclass(this.trayIcon.wm_class);
|
|
||||||
if (app != null)
|
|
||||||
return app;
|
|
||||||
|
|
||||||
app = Shell.AppSystem.get_default().lookup_desktop_wmclass(this.trayIcon.wm_class);
|
|
||||||
if (app != null)
|
|
||||||
return app;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (appId) {
|
if (appId) {
|
||||||
app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
|
app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
|
||||||
if (app != null)
|
if (app != null)
|
||||||
@ -651,12 +562,11 @@ const FdoNotificationDaemonSource = new Lang.Class({
|
|||||||
|
|
||||||
open: function() {
|
open: function() {
|
||||||
this.openApp();
|
this.openApp();
|
||||||
this.destroyNonResidentNotifications();
|
this.destroyNotifications();
|
||||||
},
|
},
|
||||||
|
|
||||||
_lastNotificationRemoved: function() {
|
_lastNotificationRemoved: function() {
|
||||||
if (!this.trayIcon)
|
this.destroy();
|
||||||
this.destroy();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
openApp: function() {
|
openApp: function() {
|
||||||
@ -677,11 +587,7 @@ const FdoNotificationDaemonSource = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
createIcon: function(size) {
|
createIcon: function(size) {
|
||||||
if (this.trayIcon) {
|
if (this.app) {
|
||||||
return new Clutter.Clone({ width: size,
|
|
||||||
height: size,
|
|
||||||
source: this.trayIcon });
|
|
||||||
} else if (this.app) {
|
|
||||||
return this.app.create_icon_texture(size);
|
return this.app.create_icon_texture(size);
|
||||||
} else if (this._gicon) {
|
} else if (this._gicon) {
|
||||||
return new St.Icon({ gicon: this._gicon,
|
return new St.Icon({ gicon: this._gicon,
|
||||||
|
@ -263,8 +263,6 @@ const Overview = new Lang.Class({
|
|||||||
this._overview.add(this._controls.actor, { y_fill: true, expand: true });
|
this._overview.add(this._controls.actor, { y_fill: true, expand: true });
|
||||||
this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||||
|
|
||||||
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;
|
||||||
this._dash.connect('icon-size-changed',
|
this._dash.connect('icon-size-changed',
|
||||||
|
@ -396,111 +396,6 @@ const DashSpacer = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
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;
|
|
||||||
let hasChats = false;
|
|
||||||
this._sources.forEach(Lang.bind(this,
|
|
||||||
function(source) {
|
|
||||||
count += source.indicatorCount;
|
|
||||||
hasChats |= source.isChat;
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._count = count;
|
|
||||||
this._label.text = ngettext("%d new message",
|
|
||||||
"%d new messages",
|
|
||||||
count).format(count);
|
|
||||||
|
|
||||||
this._icon.visible = hasChats;
|
|
||||||
this._updateVisibility();
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateVisibility: function() {
|
|
||||||
let activePage = this._viewSelector.getActivePage();
|
|
||||||
let visible = ((this._count > 0) && (activePage == ViewSelector.ViewPage.WINDOWS));
|
|
||||||
|
|
||||||
this.actor.visible = visible;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const ControlsLayout = new Lang.Class({
|
const ControlsLayout = new Lang.Class({
|
||||||
Name: 'ControlsLayout',
|
Name: 'ControlsLayout',
|
||||||
Extends: Clutter.BinLayout,
|
Extends: Clutter.BinLayout,
|
||||||
@ -529,9 +424,6 @@ const ControlsManager = new Lang.Class({
|
|||||||
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));
|
||||||
|
|
||||||
this._indicator = new MessagesIndicator(this.viewSelector);
|
|
||||||
this.indicatorActor = this._indicator.actor;
|
|
||||||
|
|
||||||
let layout = new ControlsLayout();
|
let layout = new ControlsLayout();
|
||||||
this.actor = new St.Widget({ layout_manager: layout,
|
this.actor = new St.Widget({ layout_manager: layout,
|
||||||
reactive: true,
|
reactive: true,
|
||||||
|
@ -464,8 +464,6 @@ const WindowManager = new Lang.Class({
|
|||||||
|
|
||||||
this._dimmedWindows = [];
|
this._dimmedWindows = [];
|
||||||
|
|
||||||
this._animationBlockCount = 0;
|
|
||||||
|
|
||||||
this._allowedKeybindings = {};
|
this._allowedKeybindings = {};
|
||||||
|
|
||||||
this._switchData = null;
|
this._switchData = null;
|
||||||
@ -708,16 +706,8 @@ const WindowManager = new Lang.Class({
|
|||||||
this._allowedKeybindings[name] = modes;
|
this._allowedKeybindings[name] = modes;
|
||||||
},
|
},
|
||||||
|
|
||||||
blockAnimations: function() {
|
|
||||||
this._animationBlockCount++;
|
|
||||||
},
|
|
||||||
|
|
||||||
unblockAnimations: function() {
|
|
||||||
this._animationBlockCount = Math.max(0, this._animationBlockCount - 1);
|
|
||||||
},
|
|
||||||
|
|
||||||
_shouldAnimate: function() {
|
_shouldAnimate: function() {
|
||||||
return !(Main.overview.visible || this._animationBlockCount > 0);
|
return !Main.overview.visible;
|
||||||
},
|
},
|
||||||
|
|
||||||
_shouldAnimateActor: function(actor) {
|
_shouldAnimateActor: function(actor) {
|
||||||
@ -1163,8 +1153,8 @@ const WindowManager = new Lang.Class({
|
|||||||
this._tilePreview.hide();
|
this._tilePreview.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
_showWindowMenu: function(shellwm, window, menu, x, y) {
|
_showWindowMenu: function(shellwm, window, menu, rect) {
|
||||||
this._windowMenuManager.showWindowMenuForWindow(window, menu, x, y);
|
this._windowMenuManager.showWindowMenuForWindow(window, menu, rect);
|
||||||
},
|
},
|
||||||
|
|
||||||
_startAppSwitcher : function(display, screen, window, binding) {
|
_startAppSwitcher : function(display, screen, window, binding) {
|
||||||
|
@ -15,8 +15,8 @@ const WindowMenu = new Lang.Class({
|
|||||||
Name: 'WindowMenu',
|
Name: 'WindowMenu',
|
||||||
Extends: PopupMenu.PopupMenu,
|
Extends: PopupMenu.PopupMenu,
|
||||||
|
|
||||||
_init: function(window) {
|
_init: function(window, sourceActor) {
|
||||||
this.parent(Main.layoutManager.dummyCursor, 0, St.Side.TOP);
|
this.parent(sourceActor, 0, St.Side.TOP);
|
||||||
|
|
||||||
this.actor.add_style_class_name('window-menu');
|
this.actor.add_style_class_name('window-menu');
|
||||||
|
|
||||||
@ -129,10 +129,10 @@ const AppMenu = new Lang.Class({
|
|||||||
Name: 'AppMenu',
|
Name: 'AppMenu',
|
||||||
Extends: RemoteMenu.RemoteMenu,
|
Extends: RemoteMenu.RemoteMenu,
|
||||||
|
|
||||||
_init: function(window) {
|
_init: function(window, sourceActor) {
|
||||||
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||||||
|
|
||||||
this.parent(Main.layoutManager.dummyCursor, app.menu, app.action_group);
|
this.parent(sourceActor, app.menu, app.action_group);
|
||||||
|
|
||||||
this.actor.add_style_class_name('fallback-app-menu');
|
this.actor.add_style_class_name('fallback-app-menu');
|
||||||
let variant = window.get_gtk_theme_variant();
|
let variant = window.get_gtk_theme_variant();
|
||||||
@ -149,11 +149,18 @@ const WindowMenuManager = new Lang.Class({
|
|||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
|
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
|
||||||
|
|
||||||
|
this._sourceActor = new St.Widget({ reactive: true, visible: false });
|
||||||
|
this._sourceActor.connect('button-press-event', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._manager.activeMenu.toggle();
|
||||||
|
}));
|
||||||
|
Main.uiGroup.add_actor(this._sourceActor);
|
||||||
},
|
},
|
||||||
|
|
||||||
showWindowMenuForWindow: function(window, type, x, y) {
|
showWindowMenuForWindow: function(window, type, rect) {
|
||||||
let menu = (type == Meta.WindowMenuType.WM) ? new WindowMenu(window)
|
let menuType = (type == Meta.WindowMenuType.WM) ? WindowMenu : AppMenu;
|
||||||
: new AppMenu(window);
|
let menu = new menuType(window, this._sourceActor);
|
||||||
|
|
||||||
this._manager.addMenu(menu);
|
this._manager.addMenu(menu);
|
||||||
|
|
||||||
@ -161,12 +168,18 @@ const WindowMenuManager = new Lang.Class({
|
|||||||
window.check_alive(global.get_current_time());
|
window.check_alive(global.get_current_time());
|
||||||
});
|
});
|
||||||
|
|
||||||
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
|
this._sourceActor.set_size(rect.width, rect.height);
|
||||||
|
this._sourceActor.set_position(rect.x, rect.y);
|
||||||
|
this._sourceActor.show();
|
||||||
|
|
||||||
menu.open(BoxPointer.PopupAnimation.NONE);
|
menu.open(BoxPointer.PopupAnimation.NONE);
|
||||||
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
menu.connect('open-state-changed', Lang.bind(this, function(menu_, isOpen) {
|
menu.connect('open-state-changed', Lang.bind(this, function(menu_, isOpen) {
|
||||||
if (!isOpen)
|
if (isOpen)
|
||||||
menu.destroy();
|
return;
|
||||||
|
|
||||||
|
this._sourceActor.hide();
|
||||||
|
menu.destroy();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -200,6 +200,10 @@ const WindowClone = new Lang.Class({
|
|||||||
this.emit('size-changed');
|
this.emit('size-changed');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
hasAttachedDialogs: function() {
|
||||||
|
return this.actor.get_n_children() > 1;
|
||||||
|
},
|
||||||
|
|
||||||
_doAddAttachedDialog: function(metaWin, realWin) {
|
_doAddAttachedDialog: function(metaWin, realWin) {
|
||||||
let clone = new Clutter.Clone({ source: realWin });
|
let clone = new Clutter.Clone({ source: realWin });
|
||||||
clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() {
|
clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() {
|
||||||
@ -582,7 +586,8 @@ const WindowOverlay = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_windowCanClose: function() {
|
_windowCanClose: function() {
|
||||||
return this._windowClone.metaWindow.can_close();
|
return this._windowClone.metaWindow.can_close() &&
|
||||||
|
!this._windowClone.hasAttachedDialogs();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onWindowAdded: function(workspace, win) {
|
_onWindowAdded: function(workspace, win) {
|
||||||
|
1428
po/en_GB.po
1428
po/en_GB.po
File diff suppressed because it is too large
Load Diff
44
po/it.po
44
po/it.po
@ -11,8 +11,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\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: 2014-04-06 07:54+0000\n"
|
"POT-Creation-Date: 2014-05-27 19:20+0000\n"
|
||||||
"PO-Revision-Date: 2014-04-06 14:15+0100\n"
|
"PO-Revision-Date: 2014-05-31 14:54+0100\n"
|
||||||
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
||||||
"Language-Team: Italiano <tp@lists.linux.it>\n"
|
"Language-Team: Italiano <tp@lists.linux.it>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
@ -421,7 +421,7 @@ 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/panel.js:809
|
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809
|
||||||
#: ../js/ui/status/system.js:334
|
#: ../js/ui/status/system.js:337
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Impostazioni"
|
msgstr "Impostazioni"
|
||||||
|
|
||||||
@ -1076,7 +1076,7 @@ msgstr[1] "Il sistema verrà spento automaticamente tra %d secondi."
|
|||||||
#: ../js/ui/endSessionDialog.js:93
|
#: ../js/ui/endSessionDialog.js:93
|
||||||
msgctxt "checkbox"
|
msgctxt "checkbox"
|
||||||
msgid "Install pending software updates"
|
msgid "Install pending software updates"
|
||||||
msgstr "Installa gli aggiornamenti software in sospeso"
|
msgstr "Installare gli aggiornamenti software in sospeso"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
|
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
@ -1130,7 +1130,7 @@ msgstr "Installa e spegni"
|
|||||||
#: ../js/ui/endSessionDialog.js:131
|
#: ../js/ui/endSessionDialog.js:131
|
||||||
msgctxt "checkbox"
|
msgctxt "checkbox"
|
||||||
msgid "Power off after updates are installed"
|
msgid "Power off after updates are installed"
|
||||||
msgstr "Spegne dopo aver installato gli aggiornamenti"
|
msgstr "Spegnere dopo aver installato gli aggiornamenti"
|
||||||
|
|
||||||
#: ../js/ui/endSessionDialog.js:315
|
#: ../js/ui/endSessionDialog.js:315
|
||||||
msgid "Running on battery power: please plug in before installing updates."
|
msgid "Running on battery power: please plug in before installing updates."
|
||||||
@ -1167,7 +1167,7 @@ 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:641 ../js/ui/status/keyboard.js:335
|
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:339
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastiera"
|
msgstr "Tastiera"
|
||||||
|
|
||||||
@ -1328,7 +1328,7 @@ 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:474 ../js/ui/status/system.js:342
|
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Blocca"
|
msgstr "Blocca"
|
||||||
|
|
||||||
@ -1344,11 +1344,11 @@ msgstr "Impossibile bloccare"
|
|||||||
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."
|
||||||
|
|
||||||
#: ../js/ui/search.js:603
|
#: ../js/ui/search.js:606
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Ricerca…"
|
msgstr "Ricerca…"
|
||||||
|
|
||||||
#: ../js/ui/search.js:649
|
#: ../js/ui/search.js:652
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Nessun risultato."
|
msgstr "Nessun risultato."
|
||||||
|
|
||||||
@ -1427,8 +1427,8 @@ msgstr "Bluetooth"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
|
||||||
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
|
||||||
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85
|
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
|
||||||
#: ../js/ui/status/rfkill.js:105
|
#: ../js/ui/status/rfkill.js:114
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
msgstr "Spegni"
|
msgstr "Spegni"
|
||||||
|
|
||||||
@ -1451,7 +1451,7 @@ msgstr "Non collegato"
|
|||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
msgstr "Luminosità"
|
msgstr "Luminosità"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:403
|
#: ../js/ui/status/keyboard.js:407
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Mostra disposizione tastiera"
|
msgstr "Mostra disposizione tastiera"
|
||||||
|
|
||||||
@ -1461,13 +1461,11 @@ msgstr "Posizione"
|
|||||||
|
|
||||||
# (ndt) o disabilitata?
|
# (ndt) o disabilitata?
|
||||||
#: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
|
#: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
|
||||||
#| msgid "Disabled"
|
|
||||||
msgid "Disable"
|
msgid "Disable"
|
||||||
msgstr "Disabilitato"
|
msgstr "Disabilitato"
|
||||||
|
|
||||||
# (ndt) o abilitata?
|
# (ndt) o abilitata?
|
||||||
#: ../js/ui/status/location.js:165
|
#: ../js/ui/status/location.js:165
|
||||||
#| msgid "Enabled"
|
|
||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Abilita"
|
msgstr "Abilita"
|
||||||
|
|
||||||
@ -1577,7 +1575,7 @@ msgstr "Seleziona una rete"
|
|||||||
msgid "No Networks"
|
msgid "No Networks"
|
||||||
msgstr "Nessuna rete"
|
msgstr "Nessuna rete"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103
|
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
|
||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "Usare l'interruttore hardware per disattivare"
|
msgstr "Usare l'interruttore hardware per disattivare"
|
||||||
|
|
||||||
@ -1601,7 +1599,7 @@ msgstr "Hotspot attivo"
|
|||||||
msgid "Connecting"
|
msgid "Connecting"
|
||||||
msgstr "Connessione"
|
msgstr "Connessione"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88
|
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Impostazioni rete"
|
msgstr "Impostazioni rete"
|
||||||
|
|
||||||
@ -1656,31 +1654,31 @@ msgstr "UPS"
|
|||||||
msgid "Battery"
|
msgid "Battery"
|
||||||
msgstr "Batteria"
|
msgstr "Batteria"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:82
|
#: ../js/ui/status/rfkill.js:83
|
||||||
msgid "Airplane Mode"
|
msgid "Airplane Mode"
|
||||||
msgstr "Modalità aereo"
|
msgstr "Modalità aereo"
|
||||||
|
|
||||||
#: ../js/ui/status/rfkill.js:84
|
#: ../js/ui/status/rfkill.js:85
|
||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "On"
|
msgstr "On"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:314
|
#: ../js/ui/status/system.js:317
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambia utente"
|
msgstr "Cambia utente"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:319
|
#: ../js/ui/status/system.js:322
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
msgstr "Termina sessione"
|
msgstr "Termina sessione"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:338
|
#: ../js/ui/status/system.js:341
|
||||||
msgid "Orientation Lock"
|
msgid "Orientation Lock"
|
||||||
msgstr "Blocco orientazione"
|
msgstr "Blocco orientazione"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:346
|
#: ../js/ui/status/system.js:349
|
||||||
msgid "Suspend"
|
msgid "Suspend"
|
||||||
msgstr "Sospendi"
|
msgstr "Sospendi"
|
||||||
|
|
||||||
#: ../js/ui/status/system.js:349
|
#: ../js/ui/status/system.js:352
|
||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Spegni"
|
msgstr "Spegni"
|
||||||
|
|
||||||
|
183
po/lt.po
183
po/lt.po
@ -11,8 +11,8 @@ 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: 2014-05-18 07:27+0000\n"
|
"POT-Creation-Date: 2014-06-02 19:26+0000\n"
|
||||||
"PO-Revision-Date: 2014-05-18 22:25+0300\n"
|
"PO-Revision-Date: 2014-06-02 23:35+0300\n"
|
||||||
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
|
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
|
||||||
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
|
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
|
||||||
"Language: lt\n"
|
"Language: lt\n"
|
||||||
@ -58,7 +58,6 @@ msgid "Window management and application launching"
|
|||||||
msgstr "Langų valdymas ir programų paleidimas"
|
msgstr "Langų valdymas ir programų paleidimas"
|
||||||
|
|
||||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
||||||
#: ../js/extensionPrefs/main.js:155
|
|
||||||
msgid "GNOME Shell Extension Preferences"
|
msgid "GNOME Shell Extension Preferences"
|
||||||
msgstr "GNOME Shell plėtinių nustatymai"
|
msgstr "GNOME Shell plėtinių nustatymai"
|
||||||
|
|
||||||
@ -267,45 +266,30 @@ msgid ""
|
|||||||
msgstr "Šis raktas perrašo org.gnome.mutter raktą, kai vykdoma GNOME Shell."
|
msgstr "Šis raktas perrašo org.gnome.mutter raktą, kai vykdoma GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "Arrangement of buttons on the titlebar"
|
|
||||||
msgstr "Mygtukų išdėstymas pavadinimo juostoje"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
|
||||||
msgid ""
|
|
||||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
|
||||||
"GNOME Shell."
|
|
||||||
msgstr ""
|
|
||||||
"Šis raktas perrašo org.gnome.desktop.wm.preferences raktą, kai vykdoma GNOME "
|
|
||||||
"Shell."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr "Įjungti kraštų išplėtimą, kai langai numetami ekrano kraštuose"
|
msgstr "Įjungti kraštų išplėtimą, kai langai numetami ekrano kraštuose"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "Darbalaukiai yra valdomi dinamiškai"
|
msgstr "Darbalaukiai yra valdomi dinamiškai"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Darbalaukiai tik pagrindiniame monitoriuje"
|
msgstr "Darbalaukiai tik pagrindiniame monitoriuje"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
||||||
msgstr "Atidėti fokuso pakeitimus pelei iki žymiklis nustos judėti"
|
msgstr "Atidėti fokuso pakeitimus pelei iki žymiklis nustos judėti"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:127
|
#: ../js/extensionPrefs/main.js:125
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr "Kilo klaida įkeliant %s nustatymų dialogą:"
|
msgstr "Kilo klaida įkeliant %s nustatymų dialogą:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:167
|
#: ../js/extensionPrefs/main.js:157
|
||||||
msgid "Extension"
|
#| msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "Plėtinys"
|
msgid "GNOME Shell Extensions"
|
||||||
|
msgstr "GNOME Shell plėtiniai"
|
||||||
#: ../js/extensionPrefs/main.js:191
|
|
||||||
msgid "Select an extension to configure using the combobox above."
|
|
||||||
msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį."
|
|
||||||
|
|
||||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
||||||
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
||||||
@ -328,25 +312,25 @@ msgctxt "button"
|
|||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Prisijungti"
|
msgstr "Prisijungti"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:271
|
#: ../js/gdm/loginDialog.js:269
|
||||||
msgid "Choose Session"
|
msgid "Choose Session"
|
||||||
msgstr "Pasirinkite seansą"
|
msgstr "Pasirinkite seansą"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:431
|
#: ../js/gdm/loginDialog.js:429
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Nėra sąraše?"
|
msgstr "Nėra sąraše?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:616
|
#: ../js/gdm/loginDialog.js:614
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(pvz., naudotojas arba %s)"
|
msgstr "(pvz., naudotojas arba %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
|
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
|
||||||
#: ../js/ui/components/networkAgent.js:280
|
#: ../js/ui/components/networkAgent.js:280
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Naudotojo vardas: "
|
msgstr "Naudotojo vardas: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:924
|
#: ../js/gdm/loginDialog.js:922
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Prisijungimo langas"
|
msgstr "Prisijungimo langas"
|
||||||
|
|
||||||
@ -534,11 +518,11 @@ msgctxt "list saturday"
|
|||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Št"
|
msgstr "Št"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:453
|
#: ../js/ui/calendar.js:454
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Ankstesnis mėnuo"
|
msgstr "Ankstesnis mėnuo"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:463
|
#: ../js/ui/calendar.js:464
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Kitas mėnuo"
|
msgstr "Kitas mėnuo"
|
||||||
|
|
||||||
@ -724,77 +708,77 @@ msgid "Mute"
|
|||||||
msgstr "Nutildyti"
|
msgstr "Nutildyti"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:958
|
#: ../js/ui/components/telepathyClient.js:957
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:965
|
#: ../js/ui/components/telepathyClient.js:964
|
||||||
msgid "Yesterday, %H∶%M"
|
msgid "Yesterday, %H∶%M"
|
||||||
msgstr "Vakar, %H:%M"
|
msgstr "Vakar, %H:%M"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 24h format. i.e. "Monday, 14:30" */
|
#. string in 24h format. i.e. "Monday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:972
|
#: ../js/ui/components/telepathyClient.js:971
|
||||||
msgid "%A, %H∶%M"
|
msgid "%A, %H∶%M"
|
||||||
msgstr "%A, %H∶%M"
|
msgstr "%A, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 24h format.
|
#. followed by a time string in 24h format.
|
||||||
#. i.e. "May 25, 14:30" */
|
#. i.e. "May 25, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:979
|
#: ../js/ui/components/telepathyClient.js:978
|
||||||
msgid "%B %d, %H∶%M"
|
msgid "%B %d, %H∶%M"
|
||||||
msgstr "%B %d, %H∶%M"
|
msgstr "%B %d, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 24h format.
|
#. number followed by a time string in 24h format.
|
||||||
#. i.e. "May 25 2012, 14:30" */
|
#. i.e. "May 25 2012, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:985
|
#: ../js/ui/components/telepathyClient.js:984
|
||||||
msgid "%B %d %Y, %H∶%M"
|
msgid "%B %d %Y, %H∶%M"
|
||||||
msgstr "%Y %m %d, %H∶%M"
|
msgstr "%Y %m %d, %H∶%M"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:994
|
#: ../js/ui/components/telepathyClient.js:990
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%l∶%M %p"
|
msgstr "%l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1001
|
#: ../js/ui/components/telepathyClient.js:997
|
||||||
msgid "Yesterday, %l∶%M %p"
|
msgid "Yesterday, %l∶%M %p"
|
||||||
msgstr "Vakar, %l∶%M %p"
|
msgstr "Vakar, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1008
|
#: ../js/ui/components/telepathyClient.js:1004
|
||||||
msgid "%A, %l∶%M %p"
|
msgid "%A, %l∶%M %p"
|
||||||
msgstr "%A, %l∶%M %p"
|
msgstr "%A, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 12h format.
|
#. followed by a time string in 12h format.
|
||||||
#. i.e. "May 25, 2:30 pm" */
|
#. i.e. "May 25, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1015
|
#: ../js/ui/components/telepathyClient.js:1011
|
||||||
msgid "%B %d, %l∶%M %p"
|
msgid "%B %d, %l∶%M %p"
|
||||||
msgstr "%B %d, %l∶%M %p"
|
msgstr "%B %d, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 12h format.
|
#. number followed by a time string in 12h format.
|
||||||
#. i.e. "May 25 2012, 2:30 pm"*/
|
#. i.e. "May 25 2012, 2:30 pm"*/
|
||||||
#: ../js/ui/components/telepathyClient.js:1021
|
#: ../js/ui/components/telepathyClient.js:1017
|
||||||
msgid "%B %d %Y, %l∶%M %p"
|
msgid "%B %d %Y, %l∶%M %p"
|
||||||
msgstr "%Y %B %d, %l∶%M %p"
|
msgstr "%Y %B %d, %l∶%M %p"
|
||||||
|
|
||||||
#. 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:1054
|
#: ../js/ui/components/telepathyClient.js:1049
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s nuo šiol vadinasi %s"
|
msgstr "%s nuo šiol vadinasi %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:1158
|
#: ../js/ui/components/telepathyClient.js:1153
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Kvietimas į %s"
|
msgstr "Kvietimas į %s"
|
||||||
@ -802,38 +786,38 @@ msgstr "Kvietimas į %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:1166
|
#: ../js/ui/components/telepathyClient.js:1161
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s jus kviečia prisijungti prie %s"
|
msgstr "%s jus kviečia prisijungti prie %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1168
|
#: ../js/ui/components/telepathyClient.js:1163
|
||||||
#: ../js/ui/components/telepathyClient.js:1203
|
#: ../js/ui/components/telepathyClient.js:1198
|
||||||
#: ../js/ui/components/telepathyClient.js:1237
|
#: ../js/ui/components/telepathyClient.js:1232
|
||||||
#: ../js/ui/components/telepathyClient.js:1295
|
#: ../js/ui/components/telepathyClient.js:1290
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Atmesti"
|
msgstr "Atmesti"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1174
|
#: ../js/ui/components/telepathyClient.js:1169
|
||||||
#: ../js/ui/components/telepathyClient.js:1243
|
#: ../js/ui/components/telepathyClient.js:1238
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1295
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Priimti"
|
msgstr "Priimti"
|
||||||
|
|
||||||
#. 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:1193
|
#: ../js/ui/components/telepathyClient.js:1188
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Vaizdo skambutis nuo %s"
|
msgstr "Vaizdo skambutis nuo %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:1196
|
#: ../js/ui/components/telepathyClient.js:1191
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Skambutis nuo %s"
|
msgstr "Skambutis nuo %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:1210
|
#: ../js/ui/components/telepathyClient.js:1205
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Atsiliepti"
|
msgstr "Atsiliepti"
|
||||||
|
|
||||||
@ -842,110 +826,110 @@ msgstr "Atsiliepti"
|
|||||||
#. * 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:1231
|
#: ../js/ui/components/telepathyClient.js:1226
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s jums siunčia %s"
|
msgstr "%s jums siunčia %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias */
|
#. To translators: The parameter is the contact's alias */
|
||||||
#: ../js/ui/components/telepathyClient.js:1260
|
#: ../js/ui/components/telepathyClient.js:1255
|
||||||
#, javascript-format
|
#, javascript-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 pageidauja matyti, kai esate prisijungę prie interneto"
|
msgstr "%s pageidauja matyti, kai esate prisijungę prie interneto"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1346
|
#: ../js/ui/components/telepathyClient.js:1341
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Tinklo klaida"
|
msgstr "Tinklo klaida"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1348
|
#: ../js/ui/components/telepathyClient.js:1343
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Nepavyko patvirtinti tapatybės"
|
msgstr "Nepavyko patvirtinti tapatybės"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1350
|
#: ../js/ui/components/telepathyClient.js:1345
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Šifravimo klaida"
|
msgstr "Šifravimo klaida"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1352
|
#: ../js/ui/components/telepathyClient.js:1347
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Liudijimas nepateiktas"
|
msgstr "Liudijimas nepateiktas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1349
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Liudijimas nepatikimas"
|
msgstr "Liudijimas nepatikimas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1356
|
#: ../js/ui/components/telepathyClient.js:1351
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Liudijimo galiojimas pasibaigęs"
|
msgstr "Liudijimo galiojimas pasibaigęs"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1358
|
#: ../js/ui/components/telepathyClient.js:1353
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Liudijimas neaktyvuotas"
|
msgstr "Liudijimas neaktyvuotas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1360
|
#: ../js/ui/components/telepathyClient.js:1355
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Liudijimo serverio vardo nesutapimas"
|
msgstr "Liudijimo serverio vardo nesutapimas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1362
|
#: ../js/ui/components/telepathyClient.js:1357
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Liudijimo piršto atspaudo nesutapimas"
|
msgstr "Liudijimo piršto atspaudo nesutapimas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1359
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Liudijimas pačių pasirašytas"
|
msgstr "Liudijimas pačių pasirašytas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1366
|
#: ../js/ui/components/telepathyClient.js:1361
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "Nustatyta atsijungimo būsena"
|
msgstr "Nustatyta atsijungimo būsena"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1368
|
#: ../js/ui/components/telepathyClient.js:1363
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Šifravimas negalimas"
|
msgstr "Šifravimas negalimas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1370
|
#: ../js/ui/components/telepathyClient.js:1365
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "Liudijimas netinkamas"
|
msgstr "Liudijimas netinkamas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1372
|
#: ../js/ui/components/telepathyClient.js:1367
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "Ryšys atmestas"
|
msgstr "Ryšys atmestas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1374
|
#: ../js/ui/components/telepathyClient.js:1369
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "Nepavyko užmegzti ryšio"
|
msgstr "Nepavyko užmegzti ryšio"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1376
|
#: ../js/ui/components/telepathyClient.js:1371
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Ryšys nutrūko"
|
msgstr "Ryšys nutrūko"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1378
|
#: ../js/ui/components/telepathyClient.js:1373
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Ši paskyra jau prijungta prie serverio"
|
msgstr "Ši paskyra jau prijungta prie serverio"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1380
|
#: ../js/ui/components/telepathyClient.js:1375
|
||||||
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 "Ryšys pakeistas nauju ryšiu naudojant tą patį išteklių"
|
msgstr "Ryšys pakeistas nauju ryšiu naudojant tą patį išteklių"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1382
|
#: ../js/ui/components/telepathyClient.js:1377
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "Tokia paskyra serveryje jau yra"
|
msgstr "Tokia paskyra serveryje jau yra"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1384
|
#: ../js/ui/components/telepathyClient.js:1379
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "Šiuo metu serveris per daug užimtas šiai užklausai apdoroti"
|
msgstr "Šiuo metu serveris per daug užimtas šiai užklausai apdoroti"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1386
|
#: ../js/ui/components/telepathyClient.js:1381
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "Liudijimas atšauktas"
|
msgstr "Liudijimas atšauktas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1388
|
#: ../js/ui/components/telepathyClient.js:1383
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Liudijimui naudojamas nesaugus šifravimo algoritmas arba jis kriptografiškai "
|
"Liudijimui naudojamas nesaugus šifravimo algoritmas arba jis kriptografiškai "
|
||||||
"silpnas"
|
"silpnas"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1390
|
#: ../js/ui/components/telepathyClient.js:1385
|
||||||
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"
|
||||||
@ -953,22 +937,22 @@ msgstr ""
|
|||||||
"Serverio liudijimo ilgis arba liudijimų eilės dydis viršija kriptografijos "
|
"Serverio liudijimo ilgis arba liudijimų eilės dydis viršija kriptografijos "
|
||||||
"bibliotekos apribojimus"
|
"bibliotekos apribojimus"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1392
|
#: ../js/ui/components/telepathyClient.js:1387
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Vidinė klaida"
|
msgstr "Vidinė klaida"
|
||||||
|
|
||||||
#. 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:1402
|
#: ../js/ui/components/telepathyClient.js:1397
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Unable to connect to %s"
|
msgid "Unable to connect to %s"
|
||||||
msgstr "Nepavyksta prisijungti prie %s"
|
msgstr "Nepavyksta prisijungti prie %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1407
|
#: ../js/ui/components/telepathyClient.js:1402
|
||||||
msgid "View account"
|
msgid "View account"
|
||||||
msgstr "Rodyti paskyrą"
|
msgstr "Rodyti paskyrą"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1444
|
#: ../js/ui/components/telepathyClient.js:1439
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Nežinoma priežastis"
|
msgstr "Nežinoma priežastis"
|
||||||
|
|
||||||
@ -1148,7 +1132,7 @@ msgstr "Įdiegti"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Parsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
|
msgstr "Parsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
|
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:339
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Klaviatūra"
|
msgstr "Klaviatūra"
|
||||||
|
|
||||||
@ -1283,7 +1267,7 @@ msgstr "Apžvalga"
|
|||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Viršutinė juosta"
|
msgstr "Viršutinė juosta"
|
||||||
|
|
||||||
#: ../js/ui/popupMenu.js:271
|
#: ../js/ui/popupMenu.js:279
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@ -1291,7 +1275,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Įveskite komandą"
|
msgstr "Įveskite komandą"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
|
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Užverti"
|
msgstr "Užverti"
|
||||||
|
|
||||||
@ -1432,7 +1416,7 @@ msgstr "Atsijungta"
|
|||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
msgstr "Ryškumas"
|
msgstr "Ryškumas"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:403
|
#: ../js/ui/status/keyboard.js:407
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Rodyti klaviatūros išdėstymą"
|
msgstr "Rodyti klaviatūros išdėstymą"
|
||||||
|
|
||||||
@ -1719,43 +1703,43 @@ msgstr[0] "Pakeitimai bus grąžinti po %d sekundės"
|
|||||||
msgstr[1] "Pakeitimai bus grąžinti po %d sekundžių"
|
msgstr[1] "Pakeitimai bus grąžinti po %d sekundžių"
|
||||||
msgstr[2] "Pakeitimai bus grąžinti po %d sekundžių"
|
msgstr[2] "Pakeitimai bus grąžinti po %d sekundžių"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:33
|
#: ../js/ui/windowMenu.js:34
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Sumažinti"
|
msgstr "Sumažinti"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:40
|
#: ../js/ui/windowMenu.js:41
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Grąžinti iš išdidinimo"
|
msgstr "Grąžinti iš išdidinimo"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:44
|
#: ../js/ui/windowMenu.js:45
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Išdidinti"
|
msgstr "Išdidinti"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:51
|
#: ../js/ui/windowMenu.js:52
|
||||||
msgid "Move"
|
msgid "Move"
|
||||||
msgstr "Perkelti"
|
msgstr "Perkelti"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:57
|
#: ../js/ui/windowMenu.js:58
|
||||||
msgid "Resize"
|
msgid "Resize"
|
||||||
msgstr "Keisti dydį"
|
msgstr "Keisti dydį"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:64
|
#: ../js/ui/windowMenu.js:65
|
||||||
msgid "Move Titlebar Onscreen"
|
msgid "Move Titlebar Onscreen"
|
||||||
msgstr "Perkelti pavadinimo juostą į ekraną"
|
msgstr "Perkelti pavadinimo juostą į ekraną"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:69
|
#: ../js/ui/windowMenu.js:70
|
||||||
msgid "Always on Top"
|
msgid "Always on Top"
|
||||||
msgstr "Visada viršuje"
|
msgstr "Visada viršuje"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:86
|
#: ../js/ui/windowMenu.js:89
|
||||||
msgid "Always on Visible Workspace"
|
msgid "Always on Visible Workspace"
|
||||||
msgstr "Visada matomame darbalaukyje"
|
msgstr "Visada matomame darbalaukyje"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:103
|
#: ../js/ui/windowMenu.js:106
|
||||||
msgid "Move to Workspace Up"
|
msgid "Move to Workspace Up"
|
||||||
msgstr "Perkelti į aukščiau esantį darbalaukį"
|
msgstr "Perkelti į aukščiau esantį darbalaukį"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:108
|
#: ../js/ui/windowMenu.js:111
|
||||||
msgid "Move to Workspace Down"
|
msgid "Move to Workspace Down"
|
||||||
msgstr "Perkelti į žemiau esantį darbalaukį"
|
msgstr "Perkelti į žemiau esantį darbalaukį"
|
||||||
|
|
||||||
@ -1819,3 +1803,4 @@ msgstr "Slaptažodis negali būti tuščias"
|
|||||||
#: ../src/shell-polkit-authentication-agent.c:346
|
#: ../src/shell-polkit-authentication-agent.c:346
|
||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"
|
msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"
|
||||||
|
|
||||||
|
211
po/pt_BR.po
211
po/pt_BR.po
@ -13,25 +13,24 @@
|
|||||||
# Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013.
|
# Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013.
|
||||||
# Fábio Nogueira <fnogueira@gnome.org>, 2014.
|
# Fábio Nogueira <fnogueira@gnome.org>, 2014.
|
||||||
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
|
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
|
||||||
# Enrico Nicoletto <liverig@gmail.com>, 2013, 2014.
|
|
||||||
# Georges Basile Stavracas Neto <georges.stavracas@gmail.com>, 2014.
|
# Georges Basile Stavracas Neto <georges.stavracas@gmail.com>, 2014.
|
||||||
|
# Enrico Nicoletto <liverig@gmail.com>, 2013, 2014.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\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: 2014-05-19 11:46+0000\n"
|
"POT-Creation-Date: 2014-06-03 07:28+0000\n"
|
||||||
"PO-Revision-Date: 2014-05-19 16:48-0300\n"
|
"PO-Revision-Date: 2014-06-03 10:26-0300\n"
|
||||||
"Last-Translator: Georges Basile Stavracas Neto <georges.stavracas@gmail."
|
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
|
||||||
"com>\n"
|
|
||||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\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=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
"X-Generator: Poedit 1.6.4\n"
|
"X-Generator: Poedit 1.6.5\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||||
@ -68,13 +67,12 @@ msgid "Window management and application launching"
|
|||||||
msgstr "Gerenciamento de janelas e lançador de aplicativos"
|
msgstr "Gerenciamento de janelas e lançador de aplicativos"
|
||||||
|
|
||||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
||||||
#: ../js/extensionPrefs/main.js:155
|
|
||||||
msgid "GNOME Shell Extension Preferences"
|
msgid "GNOME Shell Extension Preferences"
|
||||||
msgstr "Preferências de extensões do GNOME Shell"
|
msgstr "Preferências de extensões do Shell do GNOME"
|
||||||
|
|
||||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
|
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
|
||||||
msgid "Configure GNOME Shell Extensions"
|
msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "Configurar extensões do GNOME Shell"
|
msgstr "Configurar extensões do Shell do GNOME"
|
||||||
|
|
||||||
# Traduções do Xfce e da Microsoft usam compositor --Enrico
|
# Traduções do Xfce e da Microsoft usam compositor --Enrico
|
||||||
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
|
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
|
||||||
@ -287,47 +285,31 @@ msgstr ""
|
|||||||
"GNOME."
|
"GNOME."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "Arrangement of buttons on the titlebar"
|
|
||||||
msgstr "Organização dos botões na barra de título"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
|
||||||
msgid ""
|
|
||||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
|
||||||
"GNOME Shell."
|
|
||||||
msgstr ""
|
|
||||||
"Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
|
|
||||||
"executar o Shell do GNOME."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
|
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "Espaços de trabalho são gerenciados dinamicamente"
|
msgstr "Espaços de trabalho são gerenciados dinamicamente"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Espaços de trabalho apenas no monitor primário"
|
msgstr "Espaços de trabalho apenas no monitor primário"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
||||||
msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
|
msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:127
|
#: ../js/extensionPrefs/main.js:125
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "There was an error loading the preferences dialog for %s:"
|
msgid "There was an error loading the preferences dialog for %s:"
|
||||||
msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:"
|
msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:"
|
||||||
|
|
||||||
#: ../js/extensionPrefs/main.js:167
|
#: ../js/extensionPrefs/main.js:157
|
||||||
msgid "Extension"
|
#| msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "Extensão"
|
msgid "GNOME Shell Extensions"
|
||||||
|
msgstr "Extensões do Shell do GNOME"
|
||||||
#: ../js/extensionPrefs/main.js:191
|
|
||||||
msgid "Select an extension to configure using the combobox above."
|
|
||||||
msgstr ""
|
|
||||||
"Selecione uma extensão para configurar usando a caixa de seleção abaixo."
|
|
||||||
|
|
||||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
|
||||||
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
|
||||||
@ -350,25 +332,25 @@ msgctxt "button"
|
|||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Entrar"
|
msgstr "Entrar"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:271
|
#: ../js/gdm/loginDialog.js:269
|
||||||
msgid "Choose Session"
|
msgid "Choose Session"
|
||||||
msgstr "Escolher sessão"
|
msgstr "Escolher sessão"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:431
|
#: ../js/gdm/loginDialog.js:429
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Não está listado?"
|
msgstr "Não está listado?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:616
|
#: ../js/gdm/loginDialog.js:614
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(ex.: usuário ou %s)"
|
msgstr "(ex.: usuário ou %s)"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
|
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
|
||||||
#: ../js/ui/components/networkAgent.js:280
|
#: ../js/ui/components/networkAgent.js:280
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Nome de usuário: "
|
msgstr "Nome de usuário: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:924
|
#: ../js/gdm/loginDialog.js:922
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Janela de sessão"
|
msgstr "Janela de sessão"
|
||||||
|
|
||||||
@ -556,11 +538,11 @@ msgctxt "list saturday"
|
|||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Sab"
|
msgstr "Sab"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:453
|
#: ../js/ui/calendar.js:454
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Mês anterior"
|
msgstr "Mês anterior"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:463
|
#: ../js/ui/calendar.js:464
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Próximo mês"
|
msgstr "Próximo mês"
|
||||||
|
|
||||||
@ -746,77 +728,77 @@ msgid "Mute"
|
|||||||
msgstr "Sem áudio"
|
msgstr "Sem áudio"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:958
|
#: ../js/ui/components/telepathyClient.js:957
|
||||||
msgid "%H∶%M"
|
msgid "%H∶%M"
|
||||||
msgstr "%H∶%M"
|
msgstr "%H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
#. time string in 24h format. i.e. "Yesterday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:965
|
#: ../js/ui/components/telepathyClient.js:964
|
||||||
msgid "Yesterday, %H∶%M"
|
msgid "Yesterday, %H∶%M"
|
||||||
msgstr "Ontem, %H∶%M"
|
msgstr "Ontem, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 24h format. i.e. "Monday, 14:30" */
|
#. string in 24h format. i.e. "Monday, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:972
|
#: ../js/ui/components/telepathyClient.js:971
|
||||||
msgid "%A, %H∶%M"
|
msgid "%A, %H∶%M"
|
||||||
msgstr "%A, %H∶%M"
|
msgstr "%A, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 24h format.
|
#. followed by a time string in 24h format.
|
||||||
#. i.e. "May 25, 14:30" */
|
#. i.e. "May 25, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:979
|
#: ../js/ui/components/telepathyClient.js:978
|
||||||
msgid "%B %d, %H∶%M"
|
msgid "%B %d, %H∶%M"
|
||||||
msgstr "%d de %B, %H∶%M"
|
msgstr "%d de %B, %H∶%M"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 24h format.
|
#. number followed by a time string in 24h format.
|
||||||
#. i.e. "May 25 2012, 14:30" */
|
#. i.e. "May 25 2012, 14:30" */
|
||||||
#: ../js/ui/components/telepathyClient.js:985
|
#: ../js/ui/components/telepathyClient.js:984
|
||||||
msgid "%B %d %Y, %H∶%M"
|
msgid "%B %d %Y, %H∶%M"
|
||||||
msgstr "%d de %B de %Y, %H∶%M"
|
msgstr "%d de %B de %Y, %H∶%M"
|
||||||
|
|
||||||
#. Translators: Time in 24h format */
|
#. Translators: Time in 24h format */
|
||||||
#: ../js/ui/components/telepathyClient.js:994
|
#: ../js/ui/components/telepathyClient.js:990
|
||||||
msgid "%l∶%M %p"
|
msgid "%l∶%M %p"
|
||||||
msgstr "%l∶%M %p"
|
msgstr "%l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the word "Yesterday" followed by a
|
#. Translators: this is the word "Yesterday" followed by a
|
||||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1001
|
#: ../js/ui/components/telepathyClient.js:997
|
||||||
msgid "Yesterday, %l∶%M %p"
|
msgid "Yesterday, %l∶%M %p"
|
||||||
msgstr "Ontem, %l∶%M %p"
|
msgstr "Ontem, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the week day name followed by a time
|
#. Translators: this is the week day name followed by a time
|
||||||
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
#. string in 12h format. i.e. "Monday, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1008
|
#: ../js/ui/components/telepathyClient.js:1004
|
||||||
msgid "%A, %l∶%M %p"
|
msgid "%A, %l∶%M %p"
|
||||||
msgstr "%A, %l∶%M %p"
|
msgstr "%A, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name and day number
|
#. Translators: this is the month name and day number
|
||||||
#. followed by a time string in 12h format.
|
#. followed by a time string in 12h format.
|
||||||
#. i.e. "May 25, 2:30 pm" */
|
#. i.e. "May 25, 2:30 pm" */
|
||||||
#: ../js/ui/components/telepathyClient.js:1015
|
#: ../js/ui/components/telepathyClient.js:1011
|
||||||
msgid "%B %d, %l∶%M %p"
|
msgid "%B %d, %l∶%M %p"
|
||||||
msgstr "%d de %B, %l∶%M %p"
|
msgstr "%d de %B, %l∶%M %p"
|
||||||
|
|
||||||
#. Translators: this is the month name, day number, year
|
#. Translators: this is the month name, day number, year
|
||||||
#. number followed by a time string in 12h format.
|
#. number followed by a time string in 12h format.
|
||||||
#. i.e. "May 25 2012, 2:30 pm"*/
|
#. i.e. "May 25 2012, 2:30 pm"*/
|
||||||
#: ../js/ui/components/telepathyClient.js:1021
|
#: ../js/ui/components/telepathyClient.js:1017
|
||||||
msgid "%B %d %Y, %l∶%M %p"
|
msgid "%B %d %Y, %l∶%M %p"
|
||||||
msgstr "%d de %B de %Y, %l∶%M %p"
|
msgstr "%d de %B de %Y, %l∶%M %p"
|
||||||
|
|
||||||
#. 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:1054
|
#: ../js/ui/components/telepathyClient.js:1049
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s agora é conhecido como %s"
|
msgstr "%s agora é conhecido como %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:1158
|
#: ../js/ui/components/telepathyClient.js:1153
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Invitation to %s"
|
msgid "Invitation to %s"
|
||||||
msgstr "Convite para %s"
|
msgstr "Convite para %s"
|
||||||
@ -824,38 +806,38 @@ msgstr "Convite para %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:1166
|
#: ../js/ui/components/telepathyClient.js:1161
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is inviting you to join %s"
|
msgid "%s is inviting you to join %s"
|
||||||
msgstr "%s está convidando você para participar de %s"
|
msgstr "%s está convidando você para participar de %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1168
|
#: ../js/ui/components/telepathyClient.js:1163
|
||||||
#: ../js/ui/components/telepathyClient.js:1203
|
#: ../js/ui/components/telepathyClient.js:1198
|
||||||
#: ../js/ui/components/telepathyClient.js:1237
|
#: ../js/ui/components/telepathyClient.js:1232
|
||||||
#: ../js/ui/components/telepathyClient.js:1295
|
#: ../js/ui/components/telepathyClient.js:1290
|
||||||
msgid "Decline"
|
msgid "Decline"
|
||||||
msgstr "Recusar"
|
msgstr "Recusar"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1174
|
#: ../js/ui/components/telepathyClient.js:1169
|
||||||
#: ../js/ui/components/telepathyClient.js:1243
|
#: ../js/ui/components/telepathyClient.js:1238
|
||||||
#: ../js/ui/components/telepathyClient.js:1300
|
#: ../js/ui/components/telepathyClient.js:1295
|
||||||
msgid "Accept"
|
msgid "Accept"
|
||||||
msgstr "Aceitar"
|
msgstr "Aceitar"
|
||||||
|
|
||||||
#. 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:1193
|
#: ../js/ui/components/telepathyClient.js:1188
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Video call from %s"
|
msgid "Video call from %s"
|
||||||
msgstr "Chamada de vídeo para %s"
|
msgstr "Chamada de vídeo para %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:1196
|
#: ../js/ui/components/telepathyClient.js:1191
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Call from %s"
|
msgid "Call from %s"
|
||||||
msgstr "Chamada de %s"
|
msgstr "Chamada de %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:1210
|
#: ../js/ui/components/telepathyClient.js:1205
|
||||||
msgid "Answer"
|
msgid "Answer"
|
||||||
msgstr "Atender"
|
msgstr "Atender"
|
||||||
|
|
||||||
@ -864,110 +846,110 @@ msgstr "Atender"
|
|||||||
#. * 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:1231
|
#: ../js/ui/components/telepathyClient.js:1226
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s is sending you %s"
|
msgid "%s is sending you %s"
|
||||||
msgstr "%s está enviando %s"
|
msgstr "%s está enviando %s"
|
||||||
|
|
||||||
#. To translators: The parameter is the contact's alias */
|
#. To translators: The parameter is the contact's alias */
|
||||||
#: ../js/ui/components/telepathyClient.js:1260
|
#: ../js/ui/components/telepathyClient.js:1255
|
||||||
#, javascript-format
|
#, javascript-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 quer permissão para vê-lo quando conectado"
|
msgstr "%s quer permissão para vê-lo quando conectado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1346
|
#: ../js/ui/components/telepathyClient.js:1341
|
||||||
msgid "Network error"
|
msgid "Network error"
|
||||||
msgstr "Erro de rede"
|
msgstr "Erro de rede"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1348
|
#: ../js/ui/components/telepathyClient.js:1343
|
||||||
msgid "Authentication failed"
|
msgid "Authentication failed"
|
||||||
msgstr "Falha de autenticação"
|
msgstr "Falha de autenticação"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1350
|
#: ../js/ui/components/telepathyClient.js:1345
|
||||||
msgid "Encryption error"
|
msgid "Encryption error"
|
||||||
msgstr "Erro de criptografia"
|
msgstr "Erro de criptografia"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1352
|
#: ../js/ui/components/telepathyClient.js:1347
|
||||||
msgid "Certificate not provided"
|
msgid "Certificate not provided"
|
||||||
msgstr "Certificado não fornecido"
|
msgstr "Certificado não fornecido"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1354
|
#: ../js/ui/components/telepathyClient.js:1349
|
||||||
msgid "Certificate untrusted"
|
msgid "Certificate untrusted"
|
||||||
msgstr "Certificado não confiável"
|
msgstr "Certificado não confiável"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1356
|
#: ../js/ui/components/telepathyClient.js:1351
|
||||||
msgid "Certificate expired"
|
msgid "Certificate expired"
|
||||||
msgstr "Certificado expirado"
|
msgstr "Certificado expirado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1358
|
#: ../js/ui/components/telepathyClient.js:1353
|
||||||
msgid "Certificate not activated"
|
msgid "Certificate not activated"
|
||||||
msgstr "Certificado não ativado"
|
msgstr "Certificado não ativado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1360
|
#: ../js/ui/components/telepathyClient.js:1355
|
||||||
msgid "Certificate hostname mismatch"
|
msgid "Certificate hostname mismatch"
|
||||||
msgstr "Máquina do certificado não confere"
|
msgstr "Máquina do certificado não confere"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1362
|
#: ../js/ui/components/telepathyClient.js:1357
|
||||||
msgid "Certificate fingerprint mismatch"
|
msgid "Certificate fingerprint mismatch"
|
||||||
msgstr "Impressão digital do certificado não confere"
|
msgstr "Impressão digital do certificado não confere"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1364
|
#: ../js/ui/components/telepathyClient.js:1359
|
||||||
msgid "Certificate self-signed"
|
msgid "Certificate self-signed"
|
||||||
msgstr "Certificado auto-assinado"
|
msgstr "Certificado auto-assinado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1366
|
#: ../js/ui/components/telepathyClient.js:1361
|
||||||
msgid "Status is set to offline"
|
msgid "Status is set to offline"
|
||||||
msgstr "O status está definido como desconectado."
|
msgstr "O status está definido como desconectado."
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1368
|
#: ../js/ui/components/telepathyClient.js:1363
|
||||||
msgid "Encryption is not available"
|
msgid "Encryption is not available"
|
||||||
msgstr "Criptografia não disponível"
|
msgstr "Criptografia não disponível"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1370
|
#: ../js/ui/components/telepathyClient.js:1365
|
||||||
msgid "Certificate is invalid"
|
msgid "Certificate is invalid"
|
||||||
msgstr "O certificado é inválido"
|
msgstr "O certificado é inválido"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1372
|
#: ../js/ui/components/telepathyClient.js:1367
|
||||||
msgid "Connection has been refused"
|
msgid "Connection has been refused"
|
||||||
msgstr "A conexão foi recusada"
|
msgstr "A conexão foi recusada"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1374
|
#: ../js/ui/components/telepathyClient.js:1369
|
||||||
msgid "Connection can't be established"
|
msgid "Connection can't be established"
|
||||||
msgstr "A conexão não pode ser estabelecida"
|
msgstr "A conexão não pode ser estabelecida"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1376
|
#: ../js/ui/components/telepathyClient.js:1371
|
||||||
msgid "Connection has been lost"
|
msgid "Connection has been lost"
|
||||||
msgstr "Conexão perdida"
|
msgstr "Conexão perdida"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1378
|
#: ../js/ui/components/telepathyClient.js:1373
|
||||||
msgid "This account is already connected to the server"
|
msgid "This account is already connected to the server"
|
||||||
msgstr "Esta conta já está conectada ao servidor"
|
msgstr "Esta conta já está conectada ao servidor"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1380
|
#: ../js/ui/components/telepathyClient.js:1375
|
||||||
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 "A conexão foi substituída por uma nova conexão usando o mesmo recurso"
|
msgstr "A conexão foi substituída por uma nova conexão usando o mesmo recurso"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1382
|
#: ../js/ui/components/telepathyClient.js:1377
|
||||||
msgid "The account already exists on the server"
|
msgid "The account already exists on the server"
|
||||||
msgstr "A conta já existe no servidor"
|
msgstr "A conta já existe no servidor"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1384
|
#: ../js/ui/components/telepathyClient.js:1379
|
||||||
msgid "Server is currently too busy to handle the connection"
|
msgid "Server is currently too busy to handle the connection"
|
||||||
msgstr "O servidor está atualmente muito ocupado para controlar a conexão"
|
msgstr "O servidor está atualmente muito ocupado para controlar a conexão"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1386
|
#: ../js/ui/components/telepathyClient.js:1381
|
||||||
msgid "Certificate has been revoked"
|
msgid "Certificate has been revoked"
|
||||||
msgstr "O certificado foi revogado"
|
msgstr "O certificado foi revogado"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1388
|
#: ../js/ui/components/telepathyClient.js:1383
|
||||||
msgid ""
|
msgid ""
|
||||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"O certificado usa um algoritmo de cifragem inseguro ou é criptograficamente "
|
"O certificado usa um algoritmo de cifragem inseguro ou é criptograficamente "
|
||||||
"fraco"
|
"fraco"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1390
|
#: ../js/ui/components/telepathyClient.js:1385
|
||||||
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"
|
||||||
@ -975,22 +957,22 @@ msgstr ""
|
|||||||
"O comprimento do certificado do servidor, ou a profundidade da cadeia do "
|
"O comprimento do certificado do servidor, ou a profundidade da cadeia do "
|
||||||
"certificado excedeu os limites impostos pela biblioteca de criptografia"
|
"certificado excedeu os limites impostos pela biblioteca de criptografia"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1392
|
#: ../js/ui/components/telepathyClient.js:1387
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr "Erro interno"
|
msgstr "Erro 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:1402
|
#: ../js/ui/components/telepathyClient.js:1397
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Unable to connect to %s"
|
msgid "Unable to connect to %s"
|
||||||
msgstr "Não foi possível conectar-se a %s"
|
msgstr "Não foi possível conectar-se a %s"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1407
|
#: ../js/ui/components/telepathyClient.js:1402
|
||||||
msgid "View account"
|
msgid "View account"
|
||||||
msgstr "Visualizar conta"
|
msgstr "Visualizar conta"
|
||||||
|
|
||||||
#: ../js/ui/components/telepathyClient.js:1444
|
#: ../js/ui/components/telepathyClient.js:1439
|
||||||
msgid "Unknown reason"
|
msgid "Unknown reason"
|
||||||
msgstr "Razão desconhecida"
|
msgstr "Razão desconhecida"
|
||||||
|
|
||||||
@ -1167,7 +1149,7 @@ msgstr "Instalar"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?"
|
msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
|
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:339
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclado"
|
msgstr "Teclado"
|
||||||
|
|
||||||
@ -1301,7 +1283,7 @@ msgstr "Atividades"
|
|||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Barra superior"
|
msgstr "Barra superior"
|
||||||
|
|
||||||
#: ../js/ui/popupMenu.js:271
|
#: ../js/ui/popupMenu.js:279
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@ -1309,7 +1291,7 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Digite um comando"
|
msgstr "Digite um comando"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
|
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Fechar"
|
msgstr "Fechar"
|
||||||
|
|
||||||
@ -1448,7 +1430,7 @@ msgstr "Não conectado"
|
|||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
msgstr "Brilho"
|
msgstr "Brilho"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:403
|
#: ../js/ui/status/keyboard.js:407
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Exibir disposição de teclado"
|
msgstr "Exibir disposição de teclado"
|
||||||
|
|
||||||
@ -1737,43 +1719,43 @@ msgid_plural "Settings changes will revert in %d seconds"
|
|||||||
msgstr[0] "Alterações nas configurações serão revertidas em %d segundo"
|
msgstr[0] "Alterações nas configurações serão revertidas em %d segundo"
|
||||||
msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
|
msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:33
|
#: ../js/ui/windowMenu.js:34
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Minimizar"
|
msgstr "Minimizar"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:40
|
#: ../js/ui/windowMenu.js:41
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Restaurar"
|
msgstr "Restaurar"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:44
|
#: ../js/ui/windowMenu.js:45
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Maximizar"
|
msgstr "Maximizar"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:51
|
#: ../js/ui/windowMenu.js:52
|
||||||
msgid "Move"
|
msgid "Move"
|
||||||
msgstr "Mover"
|
msgstr "Mover"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:57
|
#: ../js/ui/windowMenu.js:58
|
||||||
msgid "Resize"
|
msgid "Resize"
|
||||||
msgstr "Redimensionar"
|
msgstr "Redimensionar"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:64
|
#: ../js/ui/windowMenu.js:65
|
||||||
msgid "Move Titlebar Onscreen"
|
msgid "Move Titlebar Onscreen"
|
||||||
msgstr "Mover barra de título na tela"
|
msgstr "Mover barra de título na tela"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:69
|
#: ../js/ui/windowMenu.js:70
|
||||||
msgid "Always on Top"
|
msgid "Always on Top"
|
||||||
msgstr "Sempre no topo"
|
msgstr "Sempre no topo"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:86
|
#: ../js/ui/windowMenu.js:89
|
||||||
msgid "Always on Visible Workspace"
|
msgid "Always on Visible Workspace"
|
||||||
msgstr "Sempre na área de trabalho visível"
|
msgstr "Sempre na área de trabalho visível"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:103
|
#: ../js/ui/windowMenu.js:106
|
||||||
msgid "Move to Workspace Up"
|
msgid "Move to Workspace Up"
|
||||||
msgstr "Mover para a área de trabalho acima"
|
msgstr "Mover para a área de trabalho acima"
|
||||||
|
|
||||||
#: ../js/ui/windowMenu.js:108
|
#: ../js/ui/windowMenu.js:111
|
||||||
msgid "Move to Workspace Down"
|
msgid "Move to Workspace Down"
|
||||||
msgstr "Mover para a área de trabalho abaixo"
|
msgstr "Mover para a área de trabalho abaixo"
|
||||||
|
|
||||||
@ -1836,6 +1818,23 @@ msgstr "A senha não pode estar em branco"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "O diálogo de autenticação foi descartado pelo usuário"
|
msgstr "O diálogo de autenticação foi descartado pelo usuário"
|
||||||
|
|
||||||
|
#~ msgid "Arrangement of buttons on the titlebar"
|
||||||
|
#~ msgstr "Organização dos botões na barra de título"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
|
||||||
|
#~ "running GNOME Shell."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
|
||||||
|
#~ "executar o Shell do GNOME."
|
||||||
|
|
||||||
|
#~ msgid "Extension"
|
||||||
|
#~ msgstr "Extensão"
|
||||||
|
|
||||||
|
#~ msgid "Select an extension to configure using the combobox above."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Selecione uma extensão para configurar usando a caixa de seleção abaixo."
|
||||||
|
|
||||||
#~ msgid "calendar:MY"
|
#~ msgid "calendar:MY"
|
||||||
#~ msgstr "calendar:MY"
|
#~ msgstr "calendar:MY"
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ INTROSPECTION_GIRS += ShellMenu-0.1.gir
|
|||||||
CLEANFILES += ShellMenu-0.1.gir
|
CLEANFILES += ShellMenu-0.1.gir
|
||||||
|
|
||||||
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
|
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
|
||||||
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4 GMenu-3.0
|
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4
|
||||||
if HAVE_NETWORKMANAGER
|
if HAVE_NETWORKMANAGER
|
||||||
Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0
|
Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0
|
||||||
endif
|
endif
|
||||||
|
@ -78,6 +78,10 @@ static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
|||||||
MetaWindowMenuType menu,
|
MetaWindowMenuType menu,
|
||||||
int x,
|
int x,
|
||||||
int y);
|
int y);
|
||||||
|
static void gnome_shell_plugin_show_window_menu_for_rect (MetaPlugin *plugin,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect);
|
||||||
|
|
||||||
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||||
XEvent *event);
|
XEvent *event);
|
||||||
@ -145,6 +149,7 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
|||||||
plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview;
|
plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview;
|
||||||
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
|
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
|
||||||
plugin_class->show_window_menu = gnome_shell_plugin_show_window_menu;
|
plugin_class->show_window_menu = gnome_shell_plugin_show_window_menu;
|
||||||
|
plugin_class->show_window_menu_for_rect = gnome_shell_plugin_show_window_menu_for_rect;
|
||||||
|
|
||||||
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
|
||||||
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
|
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
|
||||||
@ -318,6 +323,15 @@ gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
|||||||
_shell_wm_show_window_menu (get_shell_wm (), window, menu, x, y);
|
_shell_wm_show_window_menu (get_shell_wm (), window, menu, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnome_shell_plugin_show_window_menu_for_rect (MetaPlugin *plugin,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect)
|
||||||
|
{
|
||||||
|
_shell_wm_show_window_menu_for_rect (get_shell_wm (), window, menu, rect);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||||
XEvent *xev)
|
XEvent *xev)
|
||||||
|
@ -778,7 +778,7 @@ emit_changed_accels (GtkActionMuxer *muxer,
|
|||||||
/**
|
/**
|
||||||
* gtk_action_muxer_set_parent:
|
* gtk_action_muxer_set_parent:
|
||||||
* @muxer: a #GtkActionMuxer
|
* @muxer: a #GtkActionMuxer
|
||||||
* @parent: (allow-none): the new parent #GtkActionMuxer
|
* @parent: (nullable): the new parent #GtkActionMuxer
|
||||||
*
|
*
|
||||||
* Sets the parent of @muxer to @parent.
|
* Sets the parent of @muxer to @parent.
|
||||||
*/
|
*/
|
||||||
|
@ -252,7 +252,7 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
|
|||||||
/**
|
/**
|
||||||
* shell_app_system_lookup_desktop_wmclass:
|
* shell_app_system_lookup_desktop_wmclass:
|
||||||
* @system: a #ShellAppSystem
|
* @system: a #ShellAppSystem
|
||||||
* @wmclass: (allow-none): A WM_CLASS value
|
* @wmclass: (nullable): A WM_CLASS value
|
||||||
*
|
*
|
||||||
* Find a valid application whose .desktop file, without the extension
|
* Find a valid application whose .desktop file, without the extension
|
||||||
* and properly canonicalized, matches @wmclass.
|
* and properly canonicalized, matches @wmclass.
|
||||||
@ -303,7 +303,7 @@ shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
|
|||||||
/**
|
/**
|
||||||
* shell_app_system_lookup_startup_wmclass:
|
* shell_app_system_lookup_startup_wmclass:
|
||||||
* @system: a #ShellAppSystem
|
* @system: a #ShellAppSystem
|
||||||
* @wmclass: (allow-none): A WM_CLASS value
|
* @wmclass: (nullable): A WM_CLASS value
|
||||||
*
|
*
|
||||||
* Find a valid application whose .desktop file contains a
|
* Find a valid application whose .desktop file contains a
|
||||||
* StartupWMClass entry matching @wmclass.
|
* StartupWMClass entry matching @wmclass.
|
||||||
|
@ -516,7 +516,7 @@ find_most_recent_transient_on_same_workspace (MetaDisplay *display,
|
|||||||
/**
|
/**
|
||||||
* shell_app_activate_window:
|
* shell_app_activate_window:
|
||||||
* @app: a #ShellApp
|
* @app: a #ShellApp
|
||||||
* @window: (allow-none): Window to be focused
|
* @window: (nullable): Window to be focused
|
||||||
* @timestamp: Event timestamp
|
* @timestamp: Event timestamp
|
||||||
*
|
*
|
||||||
* Bring all windows for the given app to the foreground,
|
* Bring all windows for the given app to the foreground,
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1156,27 +1155,18 @@ shell_global_reexec_self (ShellGlobal *global)
|
|||||||
{
|
{
|
||||||
GPtrArray *arr;
|
GPtrArray *arr;
|
||||||
gsize len;
|
gsize len;
|
||||||
|
|
||||||
|
#if defined __linux__
|
||||||
char *buf;
|
char *buf;
|
||||||
char *buf_p;
|
char *buf_p;
|
||||||
char *buf_end;
|
char *buf_end;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
#if defined __linux__
|
|
||||||
if (!g_file_get_contents ("/proc/self/cmdline", &buf, &len, &error))
|
if (!g_file_get_contents ("/proc/self/cmdline", &buf, &len, &error))
|
||||||
{
|
{
|
||||||
g_warning ("failed to get /proc/self/cmdline: %s", error->message);
|
g_warning ("failed to get /proc/self/cmdline: %s", error->message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#elif defined __OpenBSD__
|
|
||||||
int pid = getpid();
|
|
||||||
int mib[] = { CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_ARGV };
|
|
||||||
if (sysctl(mib, G_N_ELEMENTS (mib), &buf, &len, NULL, 0) == -1) {
|
|
||||||
g_warning ("failed to get command line args: %d", errno);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
buf_end = buf+len;
|
buf_end = buf+len;
|
||||||
arr = g_ptr_array_new ();
|
arr = g_ptr_array_new ();
|
||||||
@ -1185,6 +1175,30 @@ shell_global_reexec_self (ShellGlobal *global)
|
|||||||
g_ptr_array_add (arr, buf_p);
|
g_ptr_array_add (arr, buf_p);
|
||||||
|
|
||||||
g_ptr_array_add (arr, NULL);
|
g_ptr_array_add (arr, NULL);
|
||||||
|
#elif defined __OpenBSD__
|
||||||
|
gchar **args, **args_p;
|
||||||
|
gint mib[] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV };
|
||||||
|
|
||||||
|
if (sysctl (mib, G_N_ELEMENTS (mib), NULL, &len, NULL, 0) == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
args = g_malloc0 (len);
|
||||||
|
|
||||||
|
if (sysctl (mib, G_N_ELEMENTS (mib), args, &len, NULL, 0) == -1) {
|
||||||
|
g_warning ("failed to get command line args: %d", errno);
|
||||||
|
g_free (args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
arr = g_ptr_array_new ();
|
||||||
|
for (args_p = args; *args_p != NULL; args_p++) {
|
||||||
|
g_ptr_array_add (arr, *args_p);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_ptr_array_add (arr, NULL);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Close all file descriptors other than stdin/stdout/stderr, otherwise
|
/* Close all file descriptors other than stdin/stdout/stderr, otherwise
|
||||||
* they will leak and stay open after the exec. In particular, this is
|
* they will leak and stay open after the exec. In particular, this is
|
||||||
@ -1200,6 +1214,11 @@ shell_global_reexec_self (ShellGlobal *global)
|
|||||||
execvp (arr->pdata[0], (char**)arr->pdata);
|
execvp (arr->pdata[0], (char**)arr->pdata);
|
||||||
g_warning ("failed to reexec: %s", g_strerror (errno));
|
g_warning ("failed to reexec: %s", g_strerror (errno));
|
||||||
g_ptr_array_free (arr, TRUE);
|
g_ptr_array_free (arr, TRUE);
|
||||||
|
#if defined __linux__
|
||||||
|
g_free (buf);
|
||||||
|
#elif defined __OpenBSD__
|
||||||
|
g_free (args);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1583,7 +1602,7 @@ build_ca_proplist_for_event (ca_proplist *props,
|
|||||||
* @global: the #ShellGlobal
|
* @global: the #ShellGlobal
|
||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @name: the sound name
|
* @name: the sound name
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
*
|
*
|
||||||
* Plays a simple sound picked according to Freedesktop sound theme.
|
* Plays a simple sound picked according to Freedesktop sound theme.
|
||||||
* Really just a workaround for libcanberra not being introspected.
|
* Really just a workaround for libcanberra not being introspected.
|
||||||
@ -1611,7 +1630,7 @@ shell_global_play_theme_sound (ShellGlobal *global,
|
|||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @name: the sound name
|
* @name: the sound name
|
||||||
* @description: the localized description of the event that triggered this alert
|
* @description: the localized description of the event that triggered this alert
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
* @application_id: application on behalf of which the sound is played
|
* @application_id: application on behalf of which the sound is played
|
||||||
* @application_name:
|
* @application_name:
|
||||||
*
|
*
|
||||||
@ -1645,7 +1664,7 @@ shell_global_play_theme_sound_full (ShellGlobal *global,
|
|||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @file_name: the file name to play
|
* @file_name: the file name to play
|
||||||
* @description: the localized description of the event that triggered this alert
|
* @description: the localized description of the event that triggered this alert
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
* @application_id: application on behalf of which the sound is played
|
* @application_id: application on behalf of which the sound is played
|
||||||
* @application_name:
|
* @application_name:
|
||||||
*
|
*
|
||||||
@ -1679,7 +1698,7 @@ shell_global_play_sound_file_full (ShellGlobal *global,
|
|||||||
* @id: an id, used to cancel later (0 if not needed)
|
* @id: an id, used to cancel later (0 if not needed)
|
||||||
* @file_name: the file name to play
|
* @file_name: the file name to play
|
||||||
* @description: the localized description of the event that triggered this alert
|
* @description: the localized description of the event that triggered this alert
|
||||||
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played
|
* @for_event: (nullable): a #ClutterEvent in response to which the sound is played
|
||||||
*
|
*
|
||||||
* Like shell_global_play_theme_sound(), but with an explicit path
|
* Like shell_global_play_theme_sound(), but with an explicit path
|
||||||
* instead of a themed sound.
|
* instead of a themed sound.
|
||||||
@ -1840,7 +1859,7 @@ load_variant (GFile *dir,
|
|||||||
* shell_global_set_runtime_state:
|
* shell_global_set_runtime_state:
|
||||||
* @global: a #ShellGlobal
|
* @global: a #ShellGlobal
|
||||||
* @property_name: Name of the property
|
* @property_name: Name of the property
|
||||||
* @variant: (allow-none): A #GVariant, or %NULL to unset
|
* @variant: (nullable): A #GVariant, or %NULL to unset
|
||||||
*
|
*
|
||||||
* Change the value of serialized runtime state.
|
* Change the value of serialized runtime state.
|
||||||
*/
|
*/
|
||||||
@ -1875,7 +1894,7 @@ shell_global_get_runtime_state (ShellGlobal *global,
|
|||||||
* shell_global_set_persistent_state:
|
* shell_global_set_persistent_state:
|
||||||
* @global: a #ShellGlobal
|
* @global: a #ShellGlobal
|
||||||
* @property_name: Name of the property
|
* @property_name: Name of the property
|
||||||
* @variant: (allow-none): A #GVariant, or %NULL to unset
|
* @variant: (nullable): A #GVariant, or %NULL to unset
|
||||||
*
|
*
|
||||||
* Change the value of serialized persistent state.
|
* Change the value of serialized persistent state.
|
||||||
*/
|
*/
|
||||||
|
@ -516,7 +516,7 @@ shell_keyring_prompt_new (void)
|
|||||||
*
|
*
|
||||||
* Get the prompt password text actor
|
* Get the prompt password text actor
|
||||||
*
|
*
|
||||||
* Returns: (transfer none) (allow-none): the password actor
|
* Returns: (transfer none) (nullable): the password actor
|
||||||
*/
|
*/
|
||||||
ClutterText *
|
ClutterText *
|
||||||
shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
|
shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
|
||||||
@ -531,7 +531,7 @@ shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
|
|||||||
*
|
*
|
||||||
* Get the prompt password text actor
|
* Get the prompt password text actor
|
||||||
*
|
*
|
||||||
* Returns: (transfer none) (allow-none): the password actor
|
* Returns: (transfer none) (nullable): the password actor
|
||||||
*/
|
*/
|
||||||
ClutterText *
|
ClutterText *
|
||||||
shell_keyring_prompt_get_confirm_actor (ShellKeyringPrompt *self)
|
shell_keyring_prompt_get_confirm_actor (ShellKeyringPrompt *self)
|
||||||
@ -616,7 +616,7 @@ on_password_changed (ClutterText *text,
|
|||||||
/**
|
/**
|
||||||
* shell_keyring_prompt_set_password_actor:
|
* shell_keyring_prompt_set_password_actor:
|
||||||
* @self: the internal prompt
|
* @self: the internal prompt
|
||||||
* @password_actor: (allow-none): the password actor
|
* @password_actor: (nullable): the password actor
|
||||||
*
|
*
|
||||||
* Set the prompt password text actor
|
* Set the prompt password text actor
|
||||||
*/
|
*/
|
||||||
@ -651,7 +651,7 @@ shell_keyring_prompt_set_password_actor (ShellKeyringPrompt *self,
|
|||||||
/**
|
/**
|
||||||
* shell_keyring_prompt_set_confirm_actor:
|
* shell_keyring_prompt_set_confirm_actor:
|
||||||
* @self: the internal prompt
|
* @self: the internal prompt
|
||||||
* @confirm_actor: (allow-none): the confirm password actor
|
* @confirm_actor: (nullable): the confirm password actor
|
||||||
*
|
*
|
||||||
* Set the prompt password confirmation text actor
|
* Set the prompt password confirmation text actor
|
||||||
*/
|
*/
|
||||||
|
@ -64,7 +64,7 @@ shell_menu_tracker_remove_func (gint position,
|
|||||||
* shell_menu_tracker_new:
|
* shell_menu_tracker_new:
|
||||||
* @observable:
|
* @observable:
|
||||||
* @model:
|
* @model:
|
||||||
* @action_namespace: (allow-none):
|
* @action_namespace: (nullable):
|
||||||
* @insert_func:
|
* @insert_func:
|
||||||
* @insert_user_data:
|
* @insert_user_data:
|
||||||
* @insert_notify:
|
* @insert_notify:
|
||||||
|
@ -1629,7 +1629,7 @@ shell_recorder_set_draw_cursor (ShellRecorder *recorder,
|
|||||||
/**
|
/**
|
||||||
* shell_recorder_set_pipeline:
|
* shell_recorder_set_pipeline:
|
||||||
* @recorder: the #ShellRecorder
|
* @recorder: the #ShellRecorder
|
||||||
* @pipeline: (allow-none): the GStreamer pipeline used to encode recordings
|
* @pipeline: (nullable): the GStreamer pipeline used to encode recordings
|
||||||
* or %NULL for the default value.
|
* or %NULL for the default value.
|
||||||
*
|
*
|
||||||
* Sets the GStreamer pipeline used to encode recordings.
|
* Sets the GStreamer pipeline used to encode recordings.
|
||||||
@ -1681,7 +1681,7 @@ shell_recorder_set_area (ShellRecorder *recorder,
|
|||||||
/**
|
/**
|
||||||
* shell_recorder_record:
|
* shell_recorder_record:
|
||||||
* @recorder: the #ShellRecorder
|
* @recorder: the #ShellRecorder
|
||||||
* @filename_used: (out) (allow-none): actual filename used for recording
|
* @filename_used: (out) (optional): actual filename used for recording
|
||||||
*
|
*
|
||||||
* Starts recording, Starting the recording may fail if the output file
|
* Starts recording, Starting the recording may fail if the output file
|
||||||
* cannot be opened, or if the output stream cannot be created
|
* cannot be opened, or if the output stream cannot be created
|
||||||
|
@ -21,10 +21,6 @@ struct _ShellTpClientPrivate
|
|||||||
ShellTpClientHandleChannelsImpl handle_channels_impl;
|
ShellTpClientHandleChannelsImpl handle_channels_impl;
|
||||||
gpointer user_data_handle_channels;
|
gpointer user_data_handle_channels;
|
||||||
GDestroyNotify destroy_handle_channels;
|
GDestroyNotify destroy_handle_channels;
|
||||||
|
|
||||||
ShellTpClientContactListChangedImpl contact_list_changed_impl;
|
|
||||||
gpointer user_data_contact_list_changed;
|
|
||||||
GDestroyNotify destroy_contact_list_changed;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,7 +31,7 @@ struct _ShellTpClientPrivate
|
|||||||
* if possible
|
* if possible
|
||||||
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
||||||
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
||||||
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL;
|
* @dispatch_operation: (nullable): a #TpChannelDispatchOperation or %NULL;
|
||||||
* the dispatch_operation is not guaranteed to be prepared
|
* the dispatch_operation is not guaranteed to be prepared
|
||||||
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
|
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
|
||||||
* #TpChannelRequest, all having their object-path defined but are not
|
* #TpChannelRequest, all having their object-path defined but are not
|
||||||
@ -54,7 +50,7 @@ struct _ShellTpClientPrivate
|
|||||||
* if possible
|
* if possible
|
||||||
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
||||||
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
||||||
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL;
|
* @dispatch_operation: (nullable): a #TpChannelDispatchOperation or %NULL;
|
||||||
* the dispatch_operation is not guaranteed to be prepared
|
* the dispatch_operation is not guaranteed to be prepared
|
||||||
* @context: a #TpAddDispatchOperationContext representing the context of this
|
* @context: a #TpAddDispatchOperationContext representing the context of this
|
||||||
* D-Bus call
|
* D-Bus call
|
||||||
@ -83,16 +79,6 @@ struct _ShellTpClientPrivate
|
|||||||
* Signature of the implementation of the HandleChannels method.
|
* Signature of the implementation of the HandleChannels method.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* ShellTpClientContactListChangedImpl:
|
|
||||||
* @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
|
|
||||||
* if possible
|
|
||||||
* @added: (element-type TelepathyGLib.Contact): a #GPtrArray of added #TpContact
|
|
||||||
* @removed: (element-type TelepathyGLib.Contact): a #GPtrArray of removed #TpContact
|
|
||||||
*
|
|
||||||
* Signature of the implementation of the ContactListChanged method.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shell_tp_client_init (ShellTpClient *self)
|
shell_tp_client_init (ShellTpClient *self)
|
||||||
{
|
{
|
||||||
@ -226,13 +212,6 @@ shell_tp_client_dispose (GObject *object)
|
|||||||
self->priv->user_data_handle_channels = NULL;
|
self->priv->user_data_handle_channels = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->priv->destroy_contact_list_changed != NULL)
|
|
||||||
{
|
|
||||||
self->priv->destroy_contact_list_changed (self->priv->user_data_contact_list_changed);
|
|
||||||
self->priv->destroy_contact_list_changed = NULL;
|
|
||||||
self->priv->user_data_contact_list_changed = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dispose != NULL)
|
if (dispose != NULL)
|
||||||
dispose (object);
|
dispose (object);
|
||||||
}
|
}
|
||||||
@ -290,40 +269,3 @@ shell_tp_client_set_handle_channels_func (ShellTpClient *self,
|
|||||||
self->priv->user_data_handle_channels = user_data;
|
self->priv->user_data_handle_channels = user_data;
|
||||||
self->priv->destroy_handle_channels = destroy;
|
self->priv->destroy_handle_channels = destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
shell_tp_client_set_contact_list_changed_func (ShellTpClient *self,
|
|
||||||
ShellTpClientContactListChangedImpl contact_list_changed_impl,
|
|
||||||
gpointer user_data,
|
|
||||||
GDestroyNotify destroy)
|
|
||||||
{
|
|
||||||
g_assert (self->priv->contact_list_changed_impl == NULL);
|
|
||||||
|
|
||||||
self->priv->contact_list_changed_impl = contact_list_changed_impl;
|
|
||||||
self->priv->user_data_handle_channels = user_data;
|
|
||||||
self->priv->destroy_handle_channels = destroy;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_contact_list_changed (TpConnection *conn,
|
|
||||||
GPtrArray *added,
|
|
||||||
GPtrArray *removed,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
ShellTpClient *self = (ShellTpClient *) user_data;
|
|
||||||
|
|
||||||
g_assert (self->priv->contact_list_changed_impl != NULL);
|
|
||||||
|
|
||||||
self->priv->contact_list_changed_impl (conn,
|
|
||||||
added, removed,
|
|
||||||
self->priv->user_data_contact_list_changed);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
|
|
||||||
TpConnection *conn)
|
|
||||||
{
|
|
||||||
g_signal_connect (conn, "contact-list-changed",
|
|
||||||
G_CALLBACK (on_contact_list_changed),
|
|
||||||
self);
|
|
||||||
}
|
|
||||||
|
@ -86,19 +86,5 @@ void shell_tp_client_set_handle_channels_func (ShellTpClient *self,
|
|||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GDestroyNotify destroy);
|
GDestroyNotify destroy);
|
||||||
|
|
||||||
typedef void (*ShellTpClientContactListChangedImpl) (
|
|
||||||
TpConnection *connection,
|
|
||||||
GPtrArray *added,
|
|
||||||
GPtrArray *removed,
|
|
||||||
gpointer user_data);
|
|
||||||
|
|
||||||
void shell_tp_client_set_contact_list_changed_func (ShellTpClient *self,
|
|
||||||
ShellTpClientContactListChangedImpl contact_list_changed_impl,
|
|
||||||
gpointer user_data,
|
|
||||||
GDestroyNotify destroy);
|
|
||||||
|
|
||||||
void shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
|
|
||||||
TpConnection *conn);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
#endif /* __SHELL_TP_CLIENT_H__ */
|
#endif /* __SHELL_TP_CLIENT_H__ */
|
||||||
|
@ -45,6 +45,10 @@ void _shell_wm_show_window_menu (ShellWM *wm,
|
|||||||
MetaWindowMenuType menu,
|
MetaWindowMenuType menu,
|
||||||
int x,
|
int x,
|
||||||
int y);
|
int y);
|
||||||
|
void _shell_wm_show_window_menu_for_rect (ShellWM *wm,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect);
|
||||||
|
|
||||||
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
|
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
|
||||||
MetaKeyBinding *binding);
|
MetaKeyBinding *binding);
|
||||||
|
@ -141,8 +141,8 @@ shell_wm_class_init (ShellWMClass *klass)
|
|||||||
G_TYPE_FROM_CLASS (klass),
|
G_TYPE_FROM_CLASS (klass),
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
0, NULL, NULL, NULL,
|
0, NULL, NULL, NULL,
|
||||||
G_TYPE_NONE, 4,
|
G_TYPE_NONE, 3,
|
||||||
META_TYPE_WINDOW, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
|
META_TYPE_WINDOW, G_TYPE_INT, META_TYPE_RECTANGLE);
|
||||||
shell_wm_signals[FILTER_KEYBINDING] =
|
shell_wm_signals[FILTER_KEYBINDING] =
|
||||||
g_signal_new ("filter-keybinding",
|
g_signal_new ("filter-keybinding",
|
||||||
G_TYPE_FROM_CLASS (klass),
|
G_TYPE_FROM_CLASS (klass),
|
||||||
@ -303,7 +303,22 @@ _shell_wm_show_window_menu (ShellWM *wm,
|
|||||||
int x,
|
int x,
|
||||||
int y)
|
int y)
|
||||||
{
|
{
|
||||||
g_signal_emit (wm, shell_wm_signals[SHOW_WINDOW_MENU], 0, window, menu, x, y);
|
MetaRectangle rect;
|
||||||
|
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = rect.height = 0;
|
||||||
|
|
||||||
|
_shell_wm_show_window_menu_for_rect (wm, window, menu, &rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_shell_wm_show_window_menu_for_rect (ShellWM *wm,
|
||||||
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
|
MetaRectangle *rect)
|
||||||
|
{
|
||||||
|
g_signal_emit (wm, shell_wm_signals[SHOW_WINDOW_MENU], 0, window, menu, rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -414,7 +414,7 @@ st_bin_new (void)
|
|||||||
/**
|
/**
|
||||||
* st_bin_set_child:
|
* st_bin_set_child:
|
||||||
* @bin: a #StBin
|
* @bin: a #StBin
|
||||||
* @child: (allow-none): a #ClutterActor, or %NULL
|
* @child: (nullable): a #ClutterActor, or %NULL
|
||||||
*
|
*
|
||||||
* Sets @child as the child of @bin.
|
* Sets @child as the child of @bin.
|
||||||
*
|
*
|
||||||
|
@ -908,7 +908,7 @@ st_entry_get_text (StEntry *entry)
|
|||||||
/**
|
/**
|
||||||
* st_entry_set_text:
|
* st_entry_set_text:
|
||||||
* @entry: a #StEntry
|
* @entry: a #StEntry
|
||||||
* @text: (allow-none): text to set the entry to
|
* @text: (nullable): text to set the entry to
|
||||||
*
|
*
|
||||||
* Sets the text displayed on the entry
|
* Sets the text displayed on the entry
|
||||||
*/
|
*/
|
||||||
@ -963,7 +963,7 @@ st_entry_get_clutter_text (StEntry *entry)
|
|||||||
/**
|
/**
|
||||||
* st_entry_set_hint_text:
|
* st_entry_set_hint_text:
|
||||||
* @entry: a #StEntry
|
* @entry: a #StEntry
|
||||||
* @text: (allow-none): text to set as the entry hint
|
* @text: (nullable): text to set as the entry hint
|
||||||
*
|
*
|
||||||
* Sets the text to display when the entry is empty and unfocused. When the
|
* Sets the text to display when the entry is empty and unfocused. When the
|
||||||
* entry is displaying the hint, it has a pseudo class of "indeterminate".
|
* entry is displaying the hint, it has a pseudo class of "indeterminate".
|
||||||
@ -1136,7 +1136,7 @@ _st_entry_set_icon (StEntry *entry,
|
|||||||
/**
|
/**
|
||||||
* st_entry_set_primary_icon:
|
* st_entry_set_primary_icon:
|
||||||
* @entry: a #StEntry
|
* @entry: a #StEntry
|
||||||
* @icon: (allow-none): a #ClutterActor
|
* @icon: (nullable): a #ClutterActor
|
||||||
*
|
*
|
||||||
* Set the primary icon of the entry to @icon
|
* Set the primary icon of the entry to @icon
|
||||||
*/
|
*/
|
||||||
@ -1156,7 +1156,7 @@ st_entry_set_primary_icon (StEntry *entry,
|
|||||||
/**
|
/**
|
||||||
* st_entry_set_secondary_icon:
|
* st_entry_set_secondary_icon:
|
||||||
* @entry: a #StEntry
|
* @entry: a #StEntry
|
||||||
* @icon: (allow-none): an #ClutterActor
|
* @icon: (nullable): an #ClutterActor
|
||||||
*
|
*
|
||||||
* Set the secondary icon of the entry to @icon
|
* Set the secondary icon of the entry to @icon
|
||||||
*/
|
*/
|
||||||
|
@ -532,7 +532,7 @@ st_icon_get_gicon (StIcon *icon)
|
|||||||
/**
|
/**
|
||||||
* st_icon_set_gicon:
|
* st_icon_set_gicon:
|
||||||
* @icon: an icon
|
* @icon: an icon
|
||||||
* @gicon: (allow-none): a #GIcon to override :icon-name
|
* @gicon: (nullable): a #GIcon to override :icon-name
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
st_icon_set_gicon (StIcon *icon, GIcon *gicon)
|
st_icon_set_gicon (StIcon *icon, GIcon *gicon)
|
||||||
|
@ -131,8 +131,8 @@ st_scrollable_set_adjustments (StScrollable *scrollable,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* st_scroll_bar_get_adjustments:
|
* st_scroll_bar_get_adjustments:
|
||||||
* @hadjustment: (transfer none) (out) (allow-none): location to store the horizontal adjustment, or %NULL
|
* @hadjustment: (transfer none) (out) (optional) (nullable): location to store the horizontal adjustment, or %NULL
|
||||||
* @vadjustment: (transfer none) (out) (allow-none): location to store the vertical adjustment, or %NULL
|
* @vadjustment: (transfer none) (out) (optional) (nullable): location to store the vertical adjustment, or %NULL
|
||||||
*
|
*
|
||||||
* Gets the adjustment objects that store the offsets of the scrollable widget
|
* Gets the adjustment objects that store the offsets of the scrollable widget
|
||||||
* into its possible scrolling area.
|
* into its possible scrolling area.
|
||||||
|
@ -1022,7 +1022,7 @@ load_gicon_with_colors (StTextureCache *cache,
|
|||||||
/**
|
/**
|
||||||
* st_texture_cache_load_gicon:
|
* st_texture_cache_load_gicon:
|
||||||
* @cache: The texture cache instance
|
* @cache: The texture cache instance
|
||||||
* @theme_node: (allow-none): The #StThemeNode to use for colors, or NULL
|
* @theme_node: (nullable): The #StThemeNode to use for colors, or NULL
|
||||||
* if the icon must not be recolored
|
* if the icon must not be recolored
|
||||||
* @icon: the #GIcon to load
|
* @icon: the #GIcon to load
|
||||||
* @size: Size of themed
|
* @size: Size of themed
|
||||||
@ -1235,7 +1235,7 @@ load_sliced_image (GSimpleAsyncResult *result,
|
|||||||
* @grid_width: Width in pixels
|
* @grid_width: Width in pixels
|
||||||
* @grid_height: Height in pixels
|
* @grid_height: Height in pixels
|
||||||
* @scale: Scale factor of the display
|
* @scale: Scale factor of the display
|
||||||
* @load_callback: (scope async) (allow-none): Function called when the image is loaded, or %NULL
|
* @load_callback: (scope async) (nullable): Function called when the image is loaded, or %NULL
|
||||||
* @user_data: Data to pass to the load callback
|
* @user_data: Data to pass to the load callback
|
||||||
*
|
*
|
||||||
* This function reads a single image file which contains multiple images internally.
|
* This function reads a single image file which contains multiple images internally.
|
||||||
|
@ -204,17 +204,17 @@ split_on_whitespace (const gchar *s)
|
|||||||
/**
|
/**
|
||||||
* st_theme_node_new:
|
* st_theme_node_new:
|
||||||
* @context: the context representing global state for this themed tree
|
* @context: the context representing global state for this themed tree
|
||||||
* @parent_node: (allow-none): the parent node of this node
|
* @parent_node: (nullable): the parent node of this node
|
||||||
* @theme: (allow-none): a theme (stylesheet set) that overrides the
|
* @theme: (nullable): a theme (stylesheet set) that overrides the
|
||||||
* theme inherited from the parent node
|
* theme inherited from the parent node
|
||||||
* @element_type: the type of the GObject represented by this node
|
* @element_type: the type of the GObject represented by this node
|
||||||
* in the tree (corresponding to an element if we were theming an XML
|
* in the tree (corresponding to an element if we were theming an XML
|
||||||
* document. %G_TYPE_NONE means this style was created for the stage
|
* document. %G_TYPE_NONE means this style was created for the stage
|
||||||
* actor and matches a selector element name of 'stage'.
|
* actor and matches a selector element name of 'stage'.
|
||||||
* @element_id: (allow-none): the ID to match CSS rules against
|
* @element_id: (nullable): the ID to match CSS rules against
|
||||||
* @element_class: (allow-none): a whitespace-separated list of classes
|
* @element_class: (nullable): a whitespace-separated list of classes
|
||||||
* to match CSS rules against
|
* to match CSS rules against
|
||||||
* @pseudo_class: (allow-none): a whitespace-separated list of pseudo-classes
|
* @pseudo_class: (nullable): a whitespace-separated list of pseudo-classes
|
||||||
* (like 'hover' or 'visited') to match CSS rules against
|
* (like 'hover' or 'visited') to match CSS rules against
|
||||||
*
|
*
|
||||||
* Creates a new #StThemeNode. Once created, a node is immutable. Of any
|
* Creates a new #StThemeNode. Once created, a node is immutable. Of any
|
||||||
@ -3536,7 +3536,7 @@ st_theme_node_adjust_for_height (StThemeNode *node,
|
|||||||
/**
|
/**
|
||||||
* st_theme_node_adjust_preferred_width:
|
* st_theme_node_adjust_preferred_width:
|
||||||
* @node: a #StThemeNode
|
* @node: a #StThemeNode
|
||||||
* @min_width_p: (inout) (allow-none): the minimum width to adjust
|
* @min_width_p: (inout) (nullable): the minimum width to adjust
|
||||||
* @natural_width_p: (inout): the natural width to adjust
|
* @natural_width_p: (inout): the natural width to adjust
|
||||||
*
|
*
|
||||||
* Adjusts the minimum and natural width computed for an actor by
|
* Adjusts the minimum and natural width computed for an actor by
|
||||||
@ -3603,7 +3603,7 @@ st_theme_node_adjust_for_width (StThemeNode *node,
|
|||||||
/**
|
/**
|
||||||
* st_theme_node_adjust_preferred_height:
|
* st_theme_node_adjust_preferred_height:
|
||||||
* @node: a #StThemeNode
|
* @node: a #StThemeNode
|
||||||
* @min_height_p: (inout) (allow-none): the minimum height to adjust
|
* @min_height_p: (inout) (nullable): the minimum height to adjust
|
||||||
* @natural_height_p: (inout): the natural height to adjust
|
* @natural_height_p: (inout): the natural height to adjust
|
||||||
*
|
*
|
||||||
* Adjusts the minimum and natural height computed for an actor by
|
* Adjusts the minimum and natural height computed for an actor by
|
||||||
@ -3815,8 +3815,8 @@ st_theme_node_geometry_equal (StThemeNode *node,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* st_theme_node_paint_equal:
|
* st_theme_node_paint_equal:
|
||||||
* @node: (allow-none): a #StThemeNode
|
* @node: (nullable): a #StThemeNode
|
||||||
* @other: (allow-none): a different #StThemeNode
|
* @other: (nullable): a different #StThemeNode
|
||||||
*
|
*
|
||||||
* Check if st_theme_node_paint() will paint identically for @node as it does
|
* Check if st_theme_node_paint() will paint identically for @node as it does
|
||||||
* for @other. Note that in some cases this function may return %TRUE even
|
* for @other. Note that in some cases this function may return %TRUE even
|
||||||
|
@ -1173,7 +1173,7 @@ remove_class_name (gchar **class_list,
|
|||||||
/**
|
/**
|
||||||
* st_widget_set_style_class_name:
|
* st_widget_set_style_class_name:
|
||||||
* @actor: a #StWidget
|
* @actor: a #StWidget
|
||||||
* @style_class_list: (allow-none): a new style class list string
|
* @style_class_list: (nullable): a new style class list string
|
||||||
*
|
*
|
||||||
* Set the style class name list. @style_class_list can either be
|
* Set the style class name list. @style_class_list can either be
|
||||||
* %NULL, for no classes, or a space-separated list of style class
|
* %NULL, for no classes, or a space-separated list of style class
|
||||||
@ -1316,7 +1316,7 @@ st_widget_has_style_pseudo_class (StWidget *actor,
|
|||||||
/**
|
/**
|
||||||
* st_widget_set_style_pseudo_class:
|
* st_widget_set_style_pseudo_class:
|
||||||
* @actor: a #StWidget
|
* @actor: a #StWidget
|
||||||
* @pseudo_class_list: (allow-none): a new pseudo class list string
|
* @pseudo_class_list: (nullable): a new pseudo class list string
|
||||||
*
|
*
|
||||||
* Set the style pseudo class list. @pseudo_class_list can either be
|
* Set the style pseudo class list. @pseudo_class_list can either be
|
||||||
* %NULL, for no classes, or a space-separated list of pseudo class
|
* %NULL, for no classes, or a space-separated list of pseudo class
|
||||||
@ -1382,7 +1382,7 @@ st_widget_remove_style_pseudo_class (StWidget *actor,
|
|||||||
/**
|
/**
|
||||||
* st_widget_set_style:
|
* st_widget_set_style:
|
||||||
* @actor: a #StWidget
|
* @actor: a #StWidget
|
||||||
* @style: (allow-none): a inline style string, or %NULL
|
* @style: (nullable): a inline style string, or %NULL
|
||||||
*
|
*
|
||||||
* Set the inline style string for this widget. The inline style string is an
|
* Set the inline style string for this widget. The inline style string is an
|
||||||
* optional ';'-separated list of CSS properties that override the style as
|
* optional ';'-separated list of CSS properties that override the style as
|
||||||
@ -2051,7 +2051,7 @@ st_widget_real_navigate_focus (StWidget *widget,
|
|||||||
/**
|
/**
|
||||||
* st_widget_navigate_focus:
|
* st_widget_navigate_focus:
|
||||||
* @widget: the "top level" container
|
* @widget: the "top level" container
|
||||||
* @from: (allow-none): the actor that the focus is coming from
|
* @from: (nullable): the actor that the focus is coming from
|
||||||
* @direction: the direction focus is moving in
|
* @direction: the direction focus is moving in
|
||||||
* @wrap_around: whether focus should wrap around
|
* @wrap_around: whether focus should wrap around
|
||||||
*
|
*
|
||||||
@ -2270,7 +2270,7 @@ st_widget_set_label_actor (StWidget *widget,
|
|||||||
/**
|
/**
|
||||||
* st_widget_set_accessible_name:
|
* st_widget_set_accessible_name:
|
||||||
* @widget: widget to set the accessible name for
|
* @widget: widget to set the accessible name for
|
||||||
* @name: (allow-none): a character string to be set as the accessible name
|
* @name: (nullable): a character string to be set as the accessible name
|
||||||
*
|
*
|
||||||
* This method sets @name as the accessible name for @widget.
|
* This method sets @name as the accessible name for @widget.
|
||||||
*
|
*
|
||||||
@ -2845,8 +2845,8 @@ st_widget_get_focus_chain (StWidget *widget)
|
|||||||
* st_get_align_factors:
|
* st_get_align_factors:
|
||||||
* @x_align: an #StAlign
|
* @x_align: an #StAlign
|
||||||
* @y_align: an #StAlign
|
* @y_align: an #StAlign
|
||||||
* @x_align_out: (out) (allow-none): @x_align as a #gdouble
|
* @x_align_out: (out) (optional): @x_align as a #gdouble
|
||||||
* @y_align_out: (out) (allow-none): @y_align as a #gdouble
|
* @y_align_out: (out) (optional): @y_align as a #gdouble
|
||||||
*
|
*
|
||||||
* Converts @x_align and @y_align to #gdouble values.
|
* Converts @x_align and @y_align to #gdouble values.
|
||||||
*/
|
*/
|
||||||
|
@ -80,7 +80,7 @@ struct _StWidgetClass
|
|||||||
/**
|
/**
|
||||||
* StWidgetClass::navigate_focus:
|
* StWidgetClass::navigate_focus:
|
||||||
* @self: the "top level" container
|
* @self: the "top level" container
|
||||||
* @from: (allow-none): the actor that the focus is coming from
|
* @from: (nullable): the actor that the focus is coming from
|
||||||
* @direction: the direction focus is moving in
|
* @direction: the direction focus is moving in
|
||||||
*/
|
*/
|
||||||
gboolean (* navigate_focus) (StWidget *self,
|
gboolean (* navigate_focus) (StWidget *self,
|
||||||
|
Reference in New Issue
Block a user