Compare commits
9 Commits
wip/fmuell
...
wip/mcrha/
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bd4aac8f49 | ||
![]() |
785dd5c5f7 | ||
![]() |
71e469a59c | ||
![]() |
6d4b9d29b8 | ||
![]() |
33f5bb39cd | ||
![]() |
a1c3900630 | ||
![]() |
cdaf164c01 | ||
![]() |
2bd80579ed | ||
![]() |
54039c3552 |
@@ -15,7 +15,7 @@ variables:
|
||||
- merge_requests
|
||||
|
||||
check_commit_log:
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
||||
stage: review
|
||||
variables:
|
||||
GIT_DEPTH: "100"
|
||||
@@ -40,7 +40,7 @@ js_check:
|
||||
when: on_failure
|
||||
|
||||
build:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
||||
stage: build
|
||||
before_script:
|
||||
- .gitlab-ci/checkout-mutter.sh
|
||||
@@ -58,7 +58,7 @@ build:
|
||||
- build
|
||||
|
||||
test:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
||||
stage: test
|
||||
before_script:
|
||||
- ninja -C mutter/build install
|
||||
@@ -72,7 +72,7 @@ test:
|
||||
when: on_failure
|
||||
|
||||
test-pot:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
|
||||
stage: test
|
||||
before_script:
|
||||
- ninja -C mutter/build install
|
||||
|
@@ -1,19 +0,0 @@
|
||||
FROM registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||
|
||||
RUN dnf -y update && dnf -y upgrade && \
|
||||
dnf install -y 'dnf-command(copr)' && \
|
||||
dnf copr enable -y fmuellner/gnome-shell-ci && \
|
||||
dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \
|
||||
|
||||
# bt only exports HAVE_BLUETOOTH to js, rest are outdated build-requires
|
||||
dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel \
|
||||
upower-devel python3-devel && \
|
||||
|
||||
# We'll build mutter ourselves
|
||||
dnf remove -y --noautoremove mutter mutter-devel && \
|
||||
|
||||
# Needed for tests
|
||||
dnf install -y '*/xvfb-run' gdm-lib accountsservice-libs && \
|
||||
|
||||
dnf clean all && \
|
||||
rm -rf /var/cache/dnf
|
@@ -42,8 +42,6 @@ var IntrospectService = class {
|
||||
}
|
||||
|
||||
_isStandaloneApp(app) {
|
||||
let windows = app.get_windows();
|
||||
|
||||
return app.get_windows().some(w => w.transient_for == null);
|
||||
}
|
||||
|
||||
@@ -55,6 +53,11 @@ var IntrospectService = class {
|
||||
return APP_WHITELIST.includes(sender);
|
||||
}
|
||||
|
||||
_getSandboxedAppId(app) {
|
||||
let ids = app.get_windows().map(w => w.get_sandboxed_app_id());
|
||||
return ids.find(id => id != null);
|
||||
}
|
||||
|
||||
_syncRunningApplications() {
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
let apps = this._appSystem.get_running();
|
||||
@@ -76,6 +79,10 @@ var IntrospectService = class {
|
||||
newActiveApplication = app.get_id();
|
||||
}
|
||||
|
||||
let sandboxedAppId = this._getSandboxedAppId(app);
|
||||
if (sandboxedAppId)
|
||||
appInfo['sandboxed-app-id'] = new GLib.Variant('s', sandboxedAppId);
|
||||
|
||||
newRunningApplications[app.get_id()] = appInfo;
|
||||
}
|
||||
|
||||
@@ -137,6 +144,7 @@ var IntrospectService = class {
|
||||
let frameRect = window.get_frame_rect();
|
||||
let title = window.get_title();
|
||||
let wmClass = window.get_wm_class();
|
||||
let sandboxedAppId = window.get_sandboxed_app_id();
|
||||
|
||||
windowsList[windowId] = {
|
||||
'app-id': GLib.Variant.new('s', app.get_id()),
|
||||
@@ -153,6 +161,10 @@ var IntrospectService = class {
|
||||
|
||||
if (wmClass != null)
|
||||
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass);
|
||||
|
||||
if (sandboxedAppId != null)
|
||||
windowsList[windowId]['sandboxed-app-id'] =
|
||||
GLib.Variant.new('s', sandboxedAppId);
|
||||
}
|
||||
}
|
||||
invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));
|
||||
|
@@ -216,10 +216,17 @@ var LayoutManager = GObject.registerClass({
|
||||
this.uiGroup = new UiActor({ name: 'uiGroup' });
|
||||
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
|
||||
|
||||
global.stage.add_child(this.uiGroup);
|
||||
|
||||
global.stage.remove_actor(global.window_group);
|
||||
this.uiGroup.add_actor(global.window_group);
|
||||
|
||||
global.stage.add_child(this.uiGroup);
|
||||
// Using addChrome() to add actors to uiGroup will position actors
|
||||
// underneath the top_window_group.
|
||||
// To insert actors at the top of uiGroup, we use addTopChrome() or
|
||||
// add the actor directly using uiGroup.add_actor().
|
||||
global.stage.remove_actor(global.top_window_group);
|
||||
this.uiGroup.add_actor(global.top_window_group);
|
||||
|
||||
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
|
||||
visible: false,
|
||||
@@ -231,7 +238,7 @@ var LayoutManager = GObject.registerClass({
|
||||
clip_to_allocation: true,
|
||||
layout_manager: new Clutter.BinLayout(),
|
||||
});
|
||||
this.addChrome(this.screenShieldGroup);
|
||||
this.addTopChrome(this.screenShieldGroup);
|
||||
|
||||
this.panelBox = new St.BoxLayout({ name: 'panelBox',
|
||||
vertical: true });
|
||||
@@ -247,7 +254,7 @@ var LayoutManager = GObject.registerClass({
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
this.addChrome(this.keyboardBox);
|
||||
this.addTopChrome(this.keyboardBox);
|
||||
this._keyboardHeightNotifyId = 0;
|
||||
|
||||
// A dummy actor that tracks the mouse or text cursor, based on the
|
||||
@@ -255,9 +262,6 @@ var LayoutManager = GObject.registerClass({
|
||||
this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 });
|
||||
this.uiGroup.add_actor(this.dummyCursor);
|
||||
|
||||
global.stage.remove_actor(global.top_window_group);
|
||||
this.uiGroup.add_actor(global.top_window_group);
|
||||
|
||||
let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
|
||||
global.stage.remove_actor(feedbackGroup);
|
||||
this.uiGroup.add_actor(feedbackGroup);
|
||||
@@ -802,6 +806,16 @@ var LayoutManager = GObject.registerClass({
|
||||
this._trackActor(actor, params);
|
||||
}
|
||||
|
||||
// addTopChrome:
|
||||
// @actor: an actor to add to the chrome
|
||||
// @params: (optional) additional params
|
||||
//
|
||||
// Like addChrome(), but adds @actor above all windows, including popups.
|
||||
addTopChrome(actor, params) {
|
||||
this.uiGroup.add_actor(actor);
|
||||
this._trackActor(actor, params);
|
||||
}
|
||||
|
||||
// trackChrome:
|
||||
// @actor: a descendant of the chrome to begin tracking
|
||||
// @params: parameters describing how to track @actor
|
||||
|
@@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
|
||||
libmutter_pc = 'libmutter-' + mutter_api_version
|
||||
|
||||
croco_req = '>= 0.6.8'
|
||||
ecal_req = '>= 3.5.3'
|
||||
ecal_req = '>= 3.33.1'
|
||||
eds_req = '>= 3.17.2'
|
||||
gcr_req = '>= 3.7.5'
|
||||
gdesktop_req = '>= 3.7.90'
|
||||
@@ -73,7 +73,7 @@ else
|
||||
endif
|
||||
|
||||
atk_bridge_dep = dependency('atk-bridge-2.0')
|
||||
ecal_dep = dependency('libecal-1.2', version: ecal_req)
|
||||
ecal_dep = dependency('libecal-2.0', version: ecal_req)
|
||||
eds_dep = dependency('libedataserver-1.2', version: eds_req)
|
||||
gcr_dep = dependency('gcr-base-3', version: gcr_req)
|
||||
gdk_x11_dep = dependency('gdk-x11-3.0')
|
||||
|
110
po/es.po
110
po/es.po
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
|
||||
"PO-Revision-Date: 2019-04-23 10:15+0200\n"
|
||||
"POT-Creation-Date: 2019-05-15 17:25+0000\n"
|
||||
"PO-Revision-Date: 2019-05-16 12:35+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||
"Language: es\n"
|
||||
@@ -431,7 +431,7 @@ msgstr "Buscar en Software"
|
||||
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
|
||||
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
|
||||
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
|
||||
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -522,7 +522,8 @@ msgstr "Cerrar la sesión"
|
||||
|
||||
#. Translators: A list of keywords that match the logout action, separated by semicolons
|
||||
#: js/misc/systemActions.js:105
|
||||
msgid "logout;sign off"
|
||||
#| msgid "logout;sign off"
|
||||
msgid "logout;log out;sign off"
|
||||
msgstr "cerrar;sesión;salir"
|
||||
|
||||
#. Translators: The name of the suspend action in search
|
||||
@@ -730,7 +731,6 @@ msgstr "Todas"
|
||||
|
||||
#. Translators: This is the heading of a list of open windows
|
||||
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
|
||||
#| msgid "Windows"
|
||||
msgid "Open Windows"
|
||||
msgstr "Ventanas abiertas"
|
||||
|
||||
@@ -969,7 +969,7 @@ msgstr ""
|
||||
"Alternativamente puede conectarse pulsando el botón «WPS» de su router."
|
||||
|
||||
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
|
||||
#: js/ui/status/network.js:309 js/ui/status/network.js:891
|
||||
#: js/ui/status/network.js:310 js/ui/status/network.js:892
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
@@ -1044,7 +1044,7 @@ msgstr "Contraseña de la red de banda ancha móvil"
|
||||
msgid "A password is required to connect to “%s”."
|
||||
msgstr "Se requiere una contraseña para conectarse a «%s»."
|
||||
|
||||
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
|
||||
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
@@ -1365,13 +1365,13 @@ msgid "Leave On"
|
||||
msgstr "Dejar activada"
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
|
||||
#: js/ui/status/network.js:1263
|
||||
#: js/ui/status/network.js:1264
|
||||
msgid "Turn On"
|
||||
msgstr "Encender"
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
|
||||
#: js/ui/status/network.js:128 js/ui/status/network.js:310
|
||||
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
|
||||
#: js/ui/status/network.js:128 js/ui/status/network.js:311
|
||||
#: js/ui/status/network.js:1264 js/ui/status/network.js:1376
|
||||
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
|
||||
#: js/ui/status/rfkill.js:106
|
||||
msgid "Turn Off"
|
||||
@@ -1433,7 +1433,7 @@ msgstr "Ver fuente"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: js/ui/messageTray.js:1480
|
||||
#: js/ui/messageTray.js:1479
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
@@ -1526,7 +1526,7 @@ msgctxt "System menu in the top bar"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: js/ui/panel.js:864
|
||||
#: js/ui/panel.js:861
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superior"
|
||||
|
||||
@@ -1664,11 +1664,11 @@ msgstr "Rechazo de teclas"
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Teclas del ratón"
|
||||
|
||||
#: js/ui/status/accessibility.js:151
|
||||
#: js/ui/status/accessibility.js:135
|
||||
msgid "High Contrast"
|
||||
msgstr "Contraste alto"
|
||||
|
||||
#: js/ui/status/accessibility.js:182
|
||||
#: js/ui/status/accessibility.js:177
|
||||
msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
@@ -1676,7 +1676,7 @@ msgstr "Texto grande"
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
|
||||
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configuración de Bluetooth"
|
||||
|
||||
@@ -1749,13 +1749,13 @@ msgid "<unknown>"
|
||||
msgstr "<desconocido>"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
|
||||
#: js/ui/status/network.js:417 js/ui/status/network.js:1293
|
||||
#, javascript-format
|
||||
msgid "%s Off"
|
||||
msgstr "%s apagada"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:419
|
||||
#: js/ui/status/network.js:420
|
||||
#, javascript-format
|
||||
msgid "%s Connected"
|
||||
msgstr "%s conectada"
|
||||
@@ -1763,189 +1763,189 @@ msgstr "%s conectada"
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu);
|
||||
#. %s is a network identifier
|
||||
#: js/ui/status/network.js:424
|
||||
#: js/ui/status/network.js:425
|
||||
#, javascript-format
|
||||
msgid "%s Unmanaged"
|
||||
msgstr "%s sin gestionar"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:427
|
||||
#: js/ui/status/network.js:428
|
||||
#, javascript-format
|
||||
msgid "%s Disconnecting"
|
||||
msgstr "Desconectando %s"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
|
||||
#: js/ui/status/network.js:435 js/ui/status/network.js:1285
|
||||
#, javascript-format
|
||||
msgid "%s Connecting"
|
||||
msgstr "Conectando %s"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||
#: js/ui/status/network.js:437
|
||||
#: js/ui/status/network.js:438
|
||||
#, javascript-format
|
||||
msgid "%s Requires Authentication"
|
||||
msgstr "%s requiere autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing; %s is a network identifier
|
||||
#: js/ui/status/network.js:445
|
||||
#: js/ui/status/network.js:446
|
||||
#, javascript-format
|
||||
msgid "Firmware Missing For %s"
|
||||
msgstr "Falta el «firmware» para %s"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
||||
#: js/ui/status/network.js:449
|
||||
#: js/ui/status/network.js:450
|
||||
#, javascript-format
|
||||
msgid "%s Unavailable"
|
||||
msgstr "%s no disponible"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:452
|
||||
#: js/ui/status/network.js:453
|
||||
#, javascript-format
|
||||
msgid "%s Connection Failed"
|
||||
msgstr "Falló la conexión %s"
|
||||
|
||||
#: js/ui/status/network.js:464
|
||||
#: js/ui/status/network.js:465
|
||||
msgid "Wired Settings"
|
||||
msgstr "Configuración de red cableada"
|
||||
|
||||
#: js/ui/status/network.js:506
|
||||
#: js/ui/status/network.js:507
|
||||
msgid "Mobile Broadband Settings"
|
||||
msgstr "Configuración de banda ancha móvil"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
|
||||
#: js/ui/status/network.js:554 js/ui/status/network.js:1290
|
||||
#, javascript-format
|
||||
msgid "%s Hardware Disabled"
|
||||
msgstr "Hardware %s desactivado"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated
|
||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
||||
#: js/ui/status/network.js:557
|
||||
#: js/ui/status/network.js:558
|
||||
#, javascript-format
|
||||
msgid "%s Disabled"
|
||||
msgstr "%s desactivado"
|
||||
|
||||
#: js/ui/status/network.js:597
|
||||
#: js/ui/status/network.js:598
|
||||
msgid "Connect to Internet"
|
||||
msgstr "Conectar a Internet"
|
||||
|
||||
#: js/ui/status/network.js:786
|
||||
#: js/ui/status/network.js:787
|
||||
msgid "Airplane Mode is On"
|
||||
msgstr "El modo avión está activado"
|
||||
|
||||
#: js/ui/status/network.js:787
|
||||
#: js/ui/status/network.js:788
|
||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión."
|
||||
|
||||
#: js/ui/status/network.js:788
|
||||
#: js/ui/status/network.js:789
|
||||
msgid "Turn Off Airplane Mode"
|
||||
msgstr "Apagar el modo avión"
|
||||
|
||||
#: js/ui/status/network.js:797
|
||||
#: js/ui/status/network.js:798
|
||||
msgid "Wi-Fi is Off"
|
||||
msgstr "La Wi-Fi está desactivada"
|
||||
|
||||
#: js/ui/status/network.js:798
|
||||
#: js/ui/status/network.js:799
|
||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||
msgstr "Se debe activar la Wi-Fi para poder conectarse a la red."
|
||||
|
||||
#: js/ui/status/network.js:799
|
||||
#: js/ui/status/network.js:800
|
||||
msgid "Turn On Wi-Fi"
|
||||
msgstr "Activar la Wi-Fi"
|
||||
|
||||
#: js/ui/status/network.js:824
|
||||
#: js/ui/status/network.js:825
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Redes Wi-Fi"
|
||||
|
||||
#: js/ui/status/network.js:826
|
||||
#: js/ui/status/network.js:827
|
||||
msgid "Select a network"
|
||||
msgstr "Seleccionar una red"
|
||||
|
||||
#: js/ui/status/network.js:855
|
||||
#: js/ui/status/network.js:856
|
||||
msgid "No Networks"
|
||||
msgstr "No hay redes"
|
||||
|
||||
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
|
||||
#: js/ui/status/network.js:877 js/ui/status/rfkill.js:104
|
||||
msgid "Use hardware switch to turn off"
|
||||
msgstr "Usar el interruptor hardware para apagar"
|
||||
|
||||
#: js/ui/status/network.js:1152
|
||||
#: js/ui/status/network.js:1153
|
||||
msgid "Select Network"
|
||||
msgstr "Seleccionar red"
|
||||
|
||||
#: js/ui/status/network.js:1158
|
||||
#: js/ui/status/network.js:1159
|
||||
msgid "Wi-Fi Settings"
|
||||
msgstr "Configuración de Wi-Fi"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1280
|
||||
#: js/ui/status/network.js:1281
|
||||
#, javascript-format
|
||||
msgid "%s Hotspot Active"
|
||||
msgstr "Punto de acceso %s activo"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1295
|
||||
#: js/ui/status/network.js:1296
|
||||
#, javascript-format
|
||||
msgid "%s Not Connected"
|
||||
msgstr "%s no conectado"
|
||||
|
||||
#: js/ui/status/network.js:1392
|
||||
#: js/ui/status/network.js:1393
|
||||
msgid "connecting…"
|
||||
msgstr "conectando…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: js/ui/status/network.js:1395
|
||||
#: js/ui/status/network.js:1396
|
||||
msgid "authentication required"
|
||||
msgstr "se necesita autenticación"
|
||||
|
||||
#: js/ui/status/network.js:1397
|
||||
#: js/ui/status/network.js:1398
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#: js/ui/status/network.js:1447
|
||||
#: js/ui/status/network.js:1448
|
||||
msgid "VPN Settings"
|
||||
msgstr "Configuración de VPN"
|
||||
|
||||
#: js/ui/status/network.js:1464
|
||||
#: js/ui/status/network.js:1465
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: js/ui/status/network.js:1474
|
||||
#: js/ui/status/network.js:1475
|
||||
msgid "VPN Off"
|
||||
msgstr "VPN apagada"
|
||||
|
||||
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
|
||||
#: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: js/ui/status/network.js:1564
|
||||
#: js/ui/status/network.js:1565
|
||||
#, javascript-format
|
||||
msgid "%s Wired Connection"
|
||||
msgid_plural "%s Wired Connections"
|
||||
msgstr[0] "%s conexión cableada"
|
||||
msgstr[1] "%s conexiones cableadas"
|
||||
|
||||
#: js/ui/status/network.js:1568
|
||||
#: js/ui/status/network.js:1569
|
||||
#, javascript-format
|
||||
msgid "%s Wi-Fi Connection"
|
||||
msgid_plural "%s Wi-Fi Connections"
|
||||
msgstr[0] "%s conexión inalámbrica"
|
||||
msgstr[1] "%s conexiones inalámbricas"
|
||||
|
||||
#: js/ui/status/network.js:1572
|
||||
#: js/ui/status/network.js:1573
|
||||
#, javascript-format
|
||||
msgid "%s Modem Connection"
|
||||
msgid_plural "%s Modem Connections"
|
||||
msgstr[0] "%s conexión por módem"
|
||||
msgstr[1] "%s conexiones por módem"
|
||||
|
||||
#: js/ui/status/network.js:1705
|
||||
#: js/ui/status/network.js:1706
|
||||
msgid "Connection failed"
|
||||
msgstr "Falló la conexión"
|
||||
|
||||
#: js/ui/status/network.js:1706
|
||||
#: js/ui/status/network.js:1707
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falló la activación de la conexión de red"
|
||||
|
||||
|
@@ -295,13 +295,13 @@ create_client_for_source (ESource *source,
|
||||
CalendarSourceData *source_data)
|
||||
{
|
||||
ClientData *data;
|
||||
ECalClient *client;
|
||||
EClient *client;
|
||||
GError *error = NULL;
|
||||
|
||||
client = g_hash_table_lookup (source_data->clients, source);
|
||||
g_return_if_fail (client == NULL);
|
||||
|
||||
client = e_cal_client_new (source, source_type, &error);
|
||||
client = e_cal_client_connect_sync (source, source_type, -1, NULL, &error);
|
||||
if (!client)
|
||||
{
|
||||
g_warning ("Could not load source '%s': %s",
|
||||
@@ -312,7 +312,7 @@ create_client_for_source (ESource *source,
|
||||
}
|
||||
|
||||
data = g_slice_new0 (ClientData);
|
||||
data->client = client; /* takes ownership */
|
||||
data->client = E_CAL_CLIENT (client); /* takes ownership */
|
||||
data->backend_died_id = g_signal_connect (client,
|
||||
"backend-died",
|
||||
G_CALLBACK (backend_died_cb),
|
||||
|
@@ -102,97 +102,120 @@ typedef struct
|
||||
} CollectAppointmentsData;
|
||||
|
||||
static time_t
|
||||
get_time_from_property (icalcomponent *ical,
|
||||
icalproperty_kind prop_kind,
|
||||
struct icaltimetype (* get_prop_func) (const icalproperty *prop),
|
||||
icaltimezone *default_zone)
|
||||
get_time_from_property (ICalComponent *icomp,
|
||||
ICalPropertyKind prop_kind,
|
||||
ICalTime * (* get_prop_func) (ICalProperty *prop),
|
||||
ICalTimezone *default_zone)
|
||||
{
|
||||
icalproperty *prop;
|
||||
struct icaltimetype ical_time;
|
||||
icalparameter *param;
|
||||
icaltimezone *timezone = NULL;
|
||||
ICalProperty *prop;
|
||||
ICalTime *itt;
|
||||
ICalParameter *param;
|
||||
ICalTimezone *timezone = NULL;
|
||||
time_t retval;
|
||||
|
||||
prop = icalcomponent_get_first_property (ical, prop_kind);
|
||||
prop = i_cal_component_get_first_property (icomp, prop_kind);
|
||||
if (!prop)
|
||||
return 0;
|
||||
|
||||
ical_time = get_prop_func (prop);
|
||||
itt = get_prop_func (prop);
|
||||
|
||||
param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
|
||||
param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER);
|
||||
if (param)
|
||||
timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
|
||||
else if (icaltime_is_utc (ical_time))
|
||||
timezone = icaltimezone_get_utc_timezone ();
|
||||
timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param));
|
||||
else if (i_cal_time_is_utc (itt))
|
||||
timezone = i_cal_timezone_get_utc_timezone ();
|
||||
else
|
||||
timezone = default_zone;
|
||||
|
||||
return icaltime_as_timet_with_zone (ical_time, timezone);
|
||||
retval = i_cal_time_as_timet_with_zone (itt, timezone);
|
||||
|
||||
g_clear_object (¶m);
|
||||
g_clear_object (&prop);
|
||||
g_clear_object (&itt);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_ical_uid (icalcomponent *ical)
|
||||
get_ical_uid (ICalComponent *icomp)
|
||||
{
|
||||
return g_strdup (icalcomponent_get_uid (ical));
|
||||
return g_strdup (i_cal_component_get_uid (icomp));
|
||||
}
|
||||
|
||||
static char *
|
||||
get_ical_summary (icalcomponent *ical)
|
||||
get_ical_summary (ICalComponent *icomp)
|
||||
{
|
||||
icalproperty *prop;
|
||||
ICalProperty *prop;
|
||||
char *retval;
|
||||
|
||||
prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
|
||||
prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY);
|
||||
if (!prop)
|
||||
return NULL;
|
||||
|
||||
return g_strdup (icalproperty_get_summary (prop));
|
||||
retval = g_strdup (i_cal_property_get_summary (prop));
|
||||
|
||||
g_object_unref (prop);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_ical_description (icalcomponent *ical)
|
||||
get_ical_description (ICalComponent *icomp)
|
||||
{
|
||||
icalproperty *prop;
|
||||
ICalProperty *prop;
|
||||
char *retval;
|
||||
|
||||
prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
|
||||
prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY);
|
||||
if (!prop)
|
||||
return NULL;
|
||||
|
||||
return g_strdup (icalproperty_get_description (prop));
|
||||
retval = g_strdup (i_cal_property_get_description (prop));
|
||||
|
||||
g_object_unref (prop);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline time_t
|
||||
get_ical_start_time (icalcomponent *ical,
|
||||
icaltimezone *default_zone)
|
||||
get_ical_start_time (ICalComponent *icomp,
|
||||
ICalTimezone *default_zone)
|
||||
{
|
||||
return get_time_from_property (ical,
|
||||
ICAL_DTSTART_PROPERTY,
|
||||
icalproperty_get_dtstart,
|
||||
return get_time_from_property (icomp,
|
||||
I_CAL_DTSTART_PROPERTY,
|
||||
i_cal_property_get_dtstart,
|
||||
default_zone);
|
||||
}
|
||||
|
||||
static inline time_t
|
||||
get_ical_end_time (icalcomponent *ical,
|
||||
icaltimezone *default_zone)
|
||||
get_ical_end_time (ICalComponent *icomp,
|
||||
ICalTimezone *default_zone)
|
||||
{
|
||||
return get_time_from_property (ical,
|
||||
ICAL_DTEND_PROPERTY,
|
||||
icalproperty_get_dtend,
|
||||
return get_time_from_property (icomp,
|
||||
I_CAL_DTEND_PROPERTY,
|
||||
i_cal_property_get_dtend,
|
||||
default_zone);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
get_ical_is_all_day (icalcomponent *ical,
|
||||
get_ical_is_all_day (ICalComponent *icomp,
|
||||
time_t start_time,
|
||||
icaltimezone *default_zone)
|
||||
ICalTimezone *default_zone)
|
||||
{
|
||||
icalproperty *prop;
|
||||
struct tm *start_tm;
|
||||
time_t end_time;
|
||||
struct icaldurationtype duration;
|
||||
struct icaltimetype start_icaltime;
|
||||
ICalProperty *prop;
|
||||
ICalDuration *duration;
|
||||
ICalTime *dtstart;
|
||||
struct tm *start_tm;
|
||||
time_t end_time;
|
||||
gboolean retval;
|
||||
|
||||
start_icaltime = icalcomponent_get_dtstart (ical);
|
||||
if (start_icaltime.is_date)
|
||||
return TRUE;
|
||||
dtstart = i_cal_component_get_dtstart (icomp);
|
||||
if (dtstart && i_cal_time_is_date (dtstart))
|
||||
{
|
||||
g_clear_object (&dtstart);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
g_clear_object (&dtstart);
|
||||
|
||||
start_tm = gmtime (&start_time);
|
||||
if (start_tm->tm_sec != 0 ||
|
||||
@@ -200,35 +223,40 @@ get_ical_is_all_day (icalcomponent *ical,
|
||||
start_tm->tm_hour != 0)
|
||||
return FALSE;
|
||||
|
||||
if ((end_time = get_ical_end_time (ical, default_zone)))
|
||||
if ((end_time = get_ical_end_time (icomp, default_zone)))
|
||||
return (end_time - start_time) % 86400 == 0;
|
||||
|
||||
prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
|
||||
prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY);
|
||||
if (!prop)
|
||||
return FALSE;
|
||||
|
||||
duration = icalproperty_get_duration (prop);
|
||||
duration = i_cal_property_get_duration (prop);
|
||||
|
||||
return icaldurationtype_as_int (duration) % 86400 == 0;
|
||||
retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0;
|
||||
|
||||
g_clear_object (&duration);
|
||||
g_clear_object (&prop);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline time_t
|
||||
get_ical_due_time (icalcomponent *ical,
|
||||
icaltimezone *default_zone)
|
||||
get_ical_due_time (ICalComponent *icomp,
|
||||
ICalTimezone *default_zone)
|
||||
{
|
||||
return get_time_from_property (ical,
|
||||
ICAL_DUE_PROPERTY,
|
||||
icalproperty_get_due,
|
||||
return get_time_from_property (icomp,
|
||||
I_CAL_DUE_PROPERTY,
|
||||
i_cal_property_get_due,
|
||||
default_zone);
|
||||
}
|
||||
|
||||
static inline time_t
|
||||
get_ical_completed_time (icalcomponent *ical,
|
||||
icaltimezone *default_zone)
|
||||
get_ical_completed_time (ICalComponent *icomp,
|
||||
ICalTimezone *default_zone)
|
||||
{
|
||||
return get_time_from_property (ical,
|
||||
ICAL_COMPLETED_PROPERTY,
|
||||
icalproperty_get_completed,
|
||||
return get_time_from_property (icomp,
|
||||
I_CAL_COMPLETED_PROPERTY,
|
||||
i_cal_property_get_completed,
|
||||
default_zone);
|
||||
}
|
||||
|
||||
@@ -365,67 +393,69 @@ calendar_appointment_free (CalendarAppointment *appointment)
|
||||
|
||||
static void
|
||||
calendar_appointment_init (CalendarAppointment *appointment,
|
||||
icalcomponent *ical,
|
||||
ICalComponent *icomp,
|
||||
ECalClient *cal)
|
||||
{
|
||||
icaltimezone *default_zone;
|
||||
ICalTimezone *default_zone;
|
||||
const char *source_id;
|
||||
|
||||
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
|
||||
default_zone = e_cal_client_get_default_timezone (cal);
|
||||
|
||||
appointment->uid = get_ical_uid (ical);
|
||||
appointment->uid = get_ical_uid (icomp);
|
||||
appointment->source_id = g_strdup (source_id);
|
||||
appointment->backend_name = get_source_backend_name (cal);
|
||||
appointment->summary = get_ical_summary (ical);
|
||||
appointment->description = get_ical_description (ical);
|
||||
appointment->summary = get_ical_summary (icomp);
|
||||
appointment->description = get_ical_description (icomp);
|
||||
appointment->color_string = get_source_color (cal);
|
||||
appointment->start_time = get_ical_start_time (ical, default_zone);
|
||||
appointment->end_time = get_ical_end_time (ical, default_zone);
|
||||
appointment->is_all_day = get_ical_is_all_day (ical,
|
||||
appointment->start_time = get_ical_start_time (icomp, default_zone);
|
||||
appointment->end_time = get_ical_end_time (icomp, default_zone);
|
||||
appointment->is_all_day = get_ical_is_all_day (icomp,
|
||||
appointment->start_time,
|
||||
default_zone);
|
||||
}
|
||||
|
||||
static CalendarAppointment *
|
||||
calendar_appointment_new (icalcomponent *ical,
|
||||
calendar_appointment_new (ICalComponent *icomp,
|
||||
ECalClient *cal)
|
||||
{
|
||||
CalendarAppointment *appointment;
|
||||
|
||||
appointment = g_new0 (CalendarAppointment, 1);
|
||||
|
||||
calendar_appointment_init (appointment, ical, cal);
|
||||
calendar_appointment_init (appointment, icomp, cal);
|
||||
return appointment;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
generate_instances_cb (ECalComponent *comp,
|
||||
time_t start,
|
||||
time_t end,
|
||||
gpointer data)
|
||||
generate_instances_cb (ICalComponent *icomp,
|
||||
ICalTime *instance_start,
|
||||
ICalTime *instance_end,
|
||||
gpointer user_data,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
ECalClient *cal = ((CollectAppointmentsData *)data)->client;
|
||||
GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments;
|
||||
ECalClient *cal = ((CollectAppointmentsData *)user_data)->client;
|
||||
GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments;
|
||||
CalendarAppointment *appointment;
|
||||
CalendarOccurrence *occurrence;
|
||||
const char *uid;
|
||||
ICalTimezone *default_zone;
|
||||
const gchar *uid;
|
||||
|
||||
e_cal_component_get_uid (comp, &uid);
|
||||
default_zone = e_cal_client_get_default_timezone (cal);
|
||||
uid = i_cal_component_get_uid (icomp);
|
||||
appointment = g_hash_table_lookup (appointments, uid);
|
||||
|
||||
if (appointment == NULL)
|
||||
{
|
||||
icalcomponent *ical = e_cal_component_get_icalcomponent (comp);
|
||||
|
||||
appointment = calendar_appointment_new (ical, cal);
|
||||
appointment = calendar_appointment_new (icomp, cal);
|
||||
g_hash_table_insert (appointments, g_strdup (uid), appointment);
|
||||
}
|
||||
|
||||
occurrence = g_new0 (CalendarOccurrence, 1);
|
||||
occurrence->start_time = start;
|
||||
occurrence->end_time = end;
|
||||
occurrence->rid = e_cal_component_get_recurid_as_string (comp);
|
||||
occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone);
|
||||
occurrence->end_time = i_cal_time_as_timet_with_zone (instance_end, default_zone);
|
||||
occurrence->rid = e_cal_util_component_get_recurid_as_string (icomp);
|
||||
|
||||
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
|
||||
|
||||
@@ -442,7 +472,7 @@ struct _App
|
||||
time_t since;
|
||||
time_t until;
|
||||
|
||||
icaltimezone *zone;
|
||||
ICalTimezone *zone;
|
||||
|
||||
CalendarSources *sources;
|
||||
gulong sources_signal_id;
|
||||
@@ -468,9 +498,9 @@ app_update_timezone (App *app)
|
||||
if (g_strcmp0 (location, app->timezone_location) != 0)
|
||||
{
|
||||
if (location == NULL)
|
||||
app->zone = icaltimezone_get_utc_timezone ();
|
||||
app->zone = i_cal_timezone_get_utc_timezone ();
|
||||
else
|
||||
app->zone = icaltimezone_get_builtin_timezone (location);
|
||||
app->zone = i_cal_timezone_get_builtin_timezone (location);
|
||||
g_free (app->timezone_location);
|
||||
app->timezone_location = location;
|
||||
print_debug ("Using timezone %s", app->timezone_location);
|
||||
@@ -528,10 +558,10 @@ on_objects_added (ECalClientView *view,
|
||||
|
||||
for (l = objects; l != NULL; l = l->next)
|
||||
{
|
||||
icalcomponent *ical = l->data;
|
||||
ICalComponent *icomp = l->data;
|
||||
const char *uid;
|
||||
|
||||
uid = icalcomponent_get_uid (ical);
|
||||
uid = i_cal_component_get_uid (icomp);
|
||||
|
||||
if (g_hash_table_lookup (app->appointments, uid) == NULL)
|
||||
{
|
||||
@@ -600,7 +630,7 @@ app_load_events (App *app)
|
||||
|
||||
since_iso8601 = isodate_from_time_t (app->since);
|
||||
until_iso8601 = isodate_from_time_t (app->until);
|
||||
tz_location = icaltimezone_get_location (app->zone);
|
||||
tz_location = i_cal_timezone_get_location (app->zone);
|
||||
|
||||
print_debug ("Loading events since %s until %s",
|
||||
since_iso8601,
|
||||
@@ -622,21 +652,12 @@ app_load_events (App *app)
|
||||
|
||||
e_cal_client_set_default_timezone (cal, app->zone);
|
||||
|
||||
error = NULL;
|
||||
if (!e_client_open_sync (E_CLIENT (cal), TRUE, NULL, &error))
|
||||
{
|
||||
ESource *source = e_client_get_source (E_CLIENT (cal));
|
||||
g_warning ("Error opening calendar %s: %s\n",
|
||||
e_source_get_uid (source), error->message);
|
||||
g_error_free (error);
|
||||
continue;
|
||||
}
|
||||
|
||||
data.client = cal;
|
||||
data.appointments = app->appointments;
|
||||
e_cal_client_generate_instances_sync (cal,
|
||||
app->since,
|
||||
app->until,
|
||||
NULL,
|
||||
generate_instances_cb,
|
||||
&data);
|
||||
|
||||
|
@@ -18,6 +18,7 @@ st_headers = [
|
||||
'st-scrollable.h',
|
||||
'st-scroll-bar.h',
|
||||
'st-scroll-view.h',
|
||||
'st-scroll-view-fade.h',
|
||||
'st-settings.h',
|
||||
'st-shadow.h',
|
||||
'st-texture-cache.h',
|
||||
@@ -73,6 +74,7 @@ st_sources = [
|
||||
'st-scrollable.c',
|
||||
'st-scroll-bar.c',
|
||||
'st-scroll-view.c',
|
||||
'st-scroll-view-fade.c',
|
||||
'st-settings.c',
|
||||
'st-shadow.c',
|
||||
'st-texture-cache.c',
|
||||
@@ -94,11 +96,6 @@ st_enums = gnome.mkenums_simple('st-enum-types',
|
||||
|
||||
st_gir_sources = st_sources + st_private_headers + st_headers + st_enums
|
||||
|
||||
st_non_gir_sources = [
|
||||
'st-scroll-view-fade.c',
|
||||
'st-scroll-view-fade.h'
|
||||
]
|
||||
|
||||
data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl')
|
||||
|
||||
custom_target('scroll-view-fade-glsl',
|
||||
@@ -123,7 +120,7 @@ st_cflags = [
|
||||
|
||||
# Currently meson requires a shared library for building girs
|
||||
libst = shared_library('st-1.0',
|
||||
sources: st_gir_sources + st_non_gir_sources,
|
||||
sources: st_gir_sources,
|
||||
c_args: st_cflags,
|
||||
dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep],
|
||||
build_rpath: mutter_typelibdir,
|
||||
|
Reference in New Issue
Block a user