Compare commits

...

9 Commits

Author SHA1 Message Date
Milan Crha
bd4aac8f49 calendar-server: Port to libecal-2.0
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/501
2019-05-17 20:24:08 +00:00
Florian Müllner
785dd5c5f7 Revert "calendar-server: Port to libecal-2.0"
This reverts commit 71e469a59c.
2019-05-17 22:23:43 +02:00
Milan Crha
71e469a59c calendar-server: Port to libecal-2.0
Port the calendar-server code to work with the latest evolution-data-server
API changes.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/501
2019-05-17 22:17:07 +02:00
Florian Müllner
6d4b9d29b8 ci: Switch to mutter's docker image
Mutter's CI now also builds gnome-shell to ensure that a MR doesn't
break the shell. Its docker image has therefore been updated to contain
all our deps as well, so we don't need our own image anymore.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/546
2019-05-17 20:52:44 +02:00
Florian Müllner
33f5bb39cd introspect: Include sandboxed-app-id as well
App IDs in gnome-shell don't match AppStream, Flatpak or Snap IDs. For the
desktop portal, the latter two are more relevant, so include it in the
returned information.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1289
2019-05-16 13:02:08 +00:00
Florian Müllner
a1c3900630 introspect: Remove unused variable
https://gitlab.gnome.org/GNOME/gnome-shell/issues/1289
2019-05-16 13:02:08 +00:00
Daniel Mustieles
cdaf164c01 Updated Spanish translation 2019-05-16 12:41:26 +02:00
Jonas Dreßler
2bd80579ed layout: Show important actors above top_window_group
The top_window_group is used for windows like popup menus, which should
appear above shell chrome like the panel.

Since we want important actors such as the screen keyboard or modal
dialogs to be shown above those windows, add their actors after adding
global.top_window_group to this.uiGroup and provide a new function
addTopChrome() to add important chrome above the top_window_group.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/917

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/358
2019-05-15 22:39:53 +00:00
Marco Trevisan (Treviño)
54039c3552 st: Introspect ScrollViewFade to read fade properties
Util.ensureActorVisibleInScrollView takes care of the potential scroll view fade
effect in order to compute the scroll offset, reading the ScrollViewFade's
`vfade-offset` property. This was correctly working until gnome 3.30 cycle.
However such property isn't defined now because since gjs 1.54, it can only
fetch introspected properties and St.ScrollViewFade was considered a private API
not exposed by gir.

Fix this by also introspecting st-scroll-view-fade sources.
Not being considered private anymore, install the header.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1061
2019-05-15 15:15:31 -05:00
9 changed files with 221 additions and 196 deletions

View File

@@ -15,7 +15,7 @@ variables:
- merge_requests - merge_requests
check_commit_log: check_commit_log:
image: registry.gitlab.gnome.org/gnome/mutter/master:v1 image: registry.gitlab.gnome.org/gnome/mutter/master:v2
stage: review stage: review
variables: variables:
GIT_DEPTH: "100" GIT_DEPTH: "100"
@@ -40,7 +40,7 @@ js_check:
when: on_failure when: on_failure
build: build:
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1 image: registry.gitlab.gnome.org/gnome/mutter/master:v2
stage: build stage: build
before_script: before_script:
- .gitlab-ci/checkout-mutter.sh - .gitlab-ci/checkout-mutter.sh
@@ -58,7 +58,7 @@ build:
- build - build
test: test:
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1 image: registry.gitlab.gnome.org/gnome/mutter/master:v2
stage: test stage: test
before_script: before_script:
- ninja -C mutter/build install - ninja -C mutter/build install
@@ -72,7 +72,7 @@ test:
when: on_failure when: on_failure
test-pot: test-pot:
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1 image: registry.gitlab.gnome.org/gnome/mutter/master:v2
stage: test stage: test
before_script: before_script:
- ninja -C mutter/build install - ninja -C mutter/build install

View File

@@ -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

View File

@@ -42,8 +42,6 @@ var IntrospectService = class {
} }
_isStandaloneApp(app) { _isStandaloneApp(app) {
let windows = app.get_windows();
return app.get_windows().some(w => w.transient_for == null); return app.get_windows().some(w => w.transient_for == null);
} }
@@ -55,6 +53,11 @@ var IntrospectService = class {
return APP_WHITELIST.includes(sender); 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() { _syncRunningApplications() {
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
let apps = this._appSystem.get_running(); let apps = this._appSystem.get_running();
@@ -76,6 +79,10 @@ var IntrospectService = class {
newActiveApplication = app.get_id(); 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; newRunningApplications[app.get_id()] = appInfo;
} }
@@ -137,6 +144,7 @@ var IntrospectService = class {
let frameRect = window.get_frame_rect(); let frameRect = window.get_frame_rect();
let title = window.get_title(); let title = window.get_title();
let wmClass = window.get_wm_class(); let wmClass = window.get_wm_class();
let sandboxedAppId = window.get_sandboxed_app_id();
windowsList[windowId] = { windowsList[windowId] = {
'app-id': GLib.Variant.new('s', app.get_id()), 'app-id': GLib.Variant.new('s', app.get_id()),
@@ -153,6 +161,10 @@ var IntrospectService = class {
if (wmClass != null) if (wmClass != null)
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass); 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])); invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));

View File

@@ -216,10 +216,17 @@ var LayoutManager = GObject.registerClass({
this.uiGroup = new UiActor({ name: 'uiGroup' }); this.uiGroup = new UiActor({ name: 'uiGroup' });
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT); this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
global.stage.add_child(this.uiGroup);
global.stage.remove_actor(global.window_group); global.stage.remove_actor(global.window_group);
this.uiGroup.add_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', this.overviewGroup = new St.Widget({ name: 'overviewGroup',
visible: false, visible: false,
@@ -231,7 +238,7 @@ var LayoutManager = GObject.registerClass({
clip_to_allocation: true, clip_to_allocation: true,
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
}); });
this.addChrome(this.screenShieldGroup); this.addTopChrome(this.screenShieldGroup);
this.panelBox = new St.BoxLayout({ name: 'panelBox', this.panelBox = new St.BoxLayout({ name: 'panelBox',
vertical: true }); vertical: true });
@@ -247,7 +254,7 @@ var LayoutManager = GObject.registerClass({
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox', this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
reactive: true, reactive: true,
track_hover: true }); track_hover: true });
this.addChrome(this.keyboardBox); this.addTopChrome(this.keyboardBox);
this._keyboardHeightNotifyId = 0; this._keyboardHeightNotifyId = 0;
// A dummy actor that tracks the mouse or text cursor, based on the // 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.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 });
this.uiGroup.add_actor(this.dummyCursor); 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); let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
global.stage.remove_actor(feedbackGroup); global.stage.remove_actor(feedbackGroup);
this.uiGroup.add_actor(feedbackGroup); this.uiGroup.add_actor(feedbackGroup);
@@ -802,6 +806,16 @@ var LayoutManager = GObject.registerClass({
this._trackActor(actor, params); 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: // trackChrome:
// @actor: a descendant of the chrome to begin tracking // @actor: a descendant of the chrome to begin tracking
// @params: parameters describing how to track @actor // @params: parameters describing how to track @actor

View File

@@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
libmutter_pc = 'libmutter-' + mutter_api_version libmutter_pc = 'libmutter-' + mutter_api_version
croco_req = '>= 0.6.8' croco_req = '>= 0.6.8'
ecal_req = '>= 3.5.3' ecal_req = '>= 3.33.1'
eds_req = '>= 3.17.2' eds_req = '>= 3.17.2'
gcr_req = '>= 3.7.5' gcr_req = '>= 3.7.5'
gdesktop_req = '>= 3.7.90' gdesktop_req = '>= 3.7.90'
@@ -73,7 +73,7 @@ else
endif endif
atk_bridge_dep = dependency('atk-bridge-2.0') 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) eds_dep = dependency('libedataserver-1.2', version: eds_req)
gcr_dep = dependency('gcr-base-3', version: gcr_req) gcr_dep = dependency('gcr-base-3', version: gcr_req)
gdk_x11_dep = dependency('gdk-x11-3.0') gdk_x11_dep = dependency('gdk-x11-3.0')

110
po/es.po
View File

@@ -9,8 +9,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-04-17 19:29+0000\n" "POT-Creation-Date: 2019-05-15 17:25+0000\n"
"PO-Revision-Date: 2019-04-23 10:15+0200\n" "PO-Revision-Date: 2019-05-16 12:35+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: es <gnome-es-list@gnome.org>\n" "Language-Team: es <gnome-es-list@gnome.org>\n"
"Language: es\n" "Language: es\n"
@@ -431,7 +431,7 @@ msgstr "Buscar en Software"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55 #: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136 #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188 #: 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" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@@ -522,7 +522,8 @@ msgstr "Cerrar la sesión"
#. Translators: A list of keywords that match the logout action, separated by semicolons #. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105 #: js/misc/systemActions.js:105
msgid "logout;sign off" #| msgid "logout;sign off"
msgid "logout;log out;sign off"
msgstr "cerrar;sesión;salir" msgstr "cerrar;sesión;salir"
#. Translators: The name of the suspend action in search #. 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 #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79 #: js/ui/appDisplay.js:1713 js/ui/panel.js:79
#| msgid "Windows"
msgid "Open Windows" msgid "Open Windows"
msgstr "Ventanas abiertas" msgstr "Ventanas abiertas"
@@ -969,7 +969,7 @@ msgstr ""
"Alternativamente puede conectarse pulsando el botón «WPS» de su router." "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/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" msgid "Connect"
msgstr "Conectar" 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”." msgid "A password is required to connect to “%s”."
msgstr "Se requiere una contraseña para conectarse a «%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" msgid "Network Manager"
msgstr "Gestor de la red" msgstr "Gestor de la red"
@@ -1365,13 +1365,13 @@ msgid "Leave On"
msgstr "Dejar activada" msgstr "Dejar activada"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133 #: 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" msgid "Turn On"
msgstr "Encender" msgstr "Encender"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133 #: 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:128 js/ui/status/network.js:311
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375 #: 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/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106 #: js/ui/status/rfkill.js:106
msgid "Turn Off" msgid "Turn Off"
@@ -1433,7 +1433,7 @@ msgstr "Ver fuente"
msgid "Web Page" msgid "Web Page"
msgstr "Página web" msgstr "Página web"
#: js/ui/messageTray.js:1480 #: js/ui/messageTray.js:1479
msgid "System Information" msgid "System Information"
msgstr "Información del sistema" msgstr "Información del sistema"
@@ -1526,7 +1526,7 @@ msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: js/ui/panel.js:864 #: js/ui/panel.js:861
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
@@ -1664,11 +1664,11 @@ msgstr "Rechazo de teclas"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Teclas del ratón" msgstr "Teclas del ratón"
#: js/ui/status/accessibility.js:151 #: js/ui/status/accessibility.js:135
msgid "High Contrast" msgid "High Contrast"
msgstr "Contraste alto" msgstr "Contraste alto"
#: js/ui/status/accessibility.js:182 #: js/ui/status/accessibility.js:177
msgid "Large Text" msgid "Large Text"
msgstr "Texto grande" msgstr "Texto grande"
@@ -1676,7 +1676,7 @@ msgstr "Texto grande"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "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" msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth" msgstr "Configuración de Bluetooth"
@@ -1749,13 +1749,13 @@ msgid "<unknown>"
msgstr "<desconocido>" msgstr "<desconocido>"
#. Translators: %s is a network identifier #. 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 #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s apagada" msgstr "%s apagada"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:419 #: js/ui/status/network.js:420
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "%s conectada" msgstr "%s conectada"
@@ -1763,189 +1763,189 @@ msgstr "%s conectada"
#. Translators: this is for network devices that are physically present but are not #. 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); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:424 #: js/ui/status/network.js:425
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s sin gestionar" msgstr "%s sin gestionar"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:427 #: js/ui/status/network.js:428
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "Desconectando %s" msgstr "Desconectando %s"
#. Translators: %s is a network identifier #. 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 #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "Conectando %s" msgstr "Conectando %s"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. 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 #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s requiere autenticación" msgstr "%s requiere autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:445 #: js/ui/status/network.js:446
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Falta el «firmware» para %s" msgstr "Falta el «firmware» para %s"
#. Translators: this is for a network device that cannot be activated (for example it #. 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 #. 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 #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s no disponible" msgstr "%s no disponible"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:452 #: js/ui/status/network.js:453
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "Falló la conexión %s" msgstr "Falló la conexión %s"
#: js/ui/status/network.js:464 #: js/ui/status/network.js:465
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Configuración de red cableada" msgstr "Configuración de red cableada"
#: js/ui/status/network.js:506 #: js/ui/status/network.js:507
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil" msgstr "Configuración de banda ancha móvil"
#. Translators: %s is a network identifier #. 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 #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "Hardware %s desactivado" msgstr "Hardware %s desactivado"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. 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 #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s desactivado" msgstr "%s desactivado"
#: js/ui/status/network.js:597 #: js/ui/status/network.js:598
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Conectar a Internet" msgstr "Conectar a Internet"
#: js/ui/status/network.js:786 #: js/ui/status/network.js:787
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "El modo avión está activado" 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." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión." 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" msgid "Turn Off Airplane Mode"
msgstr "Apagar el modo avión" msgstr "Apagar el modo avión"
#: js/ui/status/network.js:797 #: js/ui/status/network.js:798
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "La Wi-Fi está desactivada" 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." 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." 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" msgid "Turn On Wi-Fi"
msgstr "Activar la Wi-Fi" msgstr "Activar la Wi-Fi"
#: js/ui/status/network.js:824 #: js/ui/status/network.js:825
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi" msgstr "Redes Wi-Fi"
#: js/ui/status/network.js:826 #: js/ui/status/network.js:827
msgid "Select a network" msgid "Select a network"
msgstr "Seleccionar una red" msgstr "Seleccionar una red"
#: js/ui/status/network.js:855 #: js/ui/status/network.js:856
msgid "No Networks" msgid "No Networks"
msgstr "No hay redes" 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" msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar" msgstr "Usar el interruptor hardware para apagar"
#: js/ui/status/network.js:1152 #: js/ui/status/network.js:1153
msgid "Select Network" msgid "Select Network"
msgstr "Seleccionar red" msgstr "Seleccionar red"
#: js/ui/status/network.js:1158 #: js/ui/status/network.js:1159
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi" msgstr "Configuración de Wi-Fi"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1280 #: js/ui/status/network.js:1281
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "Punto de acceso %s activo" msgstr "Punto de acceso %s activo"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1295 #: js/ui/status/network.js:1296
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s no conectado" msgstr "%s no conectado"
#: js/ui/status/network.js:1392 #: js/ui/status/network.js:1393
msgid "connecting…" msgid "connecting…"
msgstr "conectando…" msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password #. 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" msgid "authentication required"
msgstr "se necesita autenticación" msgstr "se necesita autenticación"
#: js/ui/status/network.js:1397 #: js/ui/status/network.js:1398
msgid "connection failed" msgid "connection failed"
msgstr "falló la conexión" msgstr "falló la conexión"
#: js/ui/status/network.js:1447 #: js/ui/status/network.js:1448
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Configuración de VPN" msgstr "Configuración de VPN"
#: js/ui/status/network.js:1464 #: js/ui/status/network.js:1465
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1474 #: js/ui/status/network.js:1475
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN apagada" 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" msgid "Network Settings"
msgstr "Configuración de la red" msgstr "Configuración de la red"
#: js/ui/status/network.js:1564 #: js/ui/status/network.js:1565
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s conexión cableada" msgstr[0] "%s conexión cableada"
msgstr[1] "%s conexiones cableadas" msgstr[1] "%s conexiones cableadas"
#: js/ui/status/network.js:1568 #: js/ui/status/network.js:1569
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conexión inalámbrica" msgstr[0] "%s conexión inalámbrica"
msgstr[1] "%s conexiones inalámbricas" msgstr[1] "%s conexiones inalámbricas"
#: js/ui/status/network.js:1572 #: js/ui/status/network.js:1573
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s conexión por módem" msgstr[0] "%s conexión por módem"
msgstr[1] "%s conexiones 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" msgid "Connection failed"
msgstr "Falló la conexión" msgstr "Falló la conexión"
#: js/ui/status/network.js:1706 #: js/ui/status/network.js:1707
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red" msgstr "Falló la activación de la conexión de red"

View File

@@ -295,13 +295,13 @@ create_client_for_source (ESource *source,
CalendarSourceData *source_data) CalendarSourceData *source_data)
{ {
ClientData *data; ClientData *data;
ECalClient *client; EClient *client;
GError *error = NULL; GError *error = NULL;
client = g_hash_table_lookup (source_data->clients, source); client = g_hash_table_lookup (source_data->clients, source);
g_return_if_fail (client == NULL); 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) if (!client)
{ {
g_warning ("Could not load source '%s': %s", g_warning ("Could not load source '%s': %s",
@@ -312,7 +312,7 @@ create_client_for_source (ESource *source,
} }
data = g_slice_new0 (ClientData); 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, data->backend_died_id = g_signal_connect (client,
"backend-died", "backend-died",
G_CALLBACK (backend_died_cb), G_CALLBACK (backend_died_cb),

View File

@@ -102,97 +102,120 @@ typedef struct
} CollectAppointmentsData; } CollectAppointmentsData;
static time_t static time_t
get_time_from_property (icalcomponent *ical, get_time_from_property (ICalComponent *icomp,
icalproperty_kind prop_kind, ICalPropertyKind prop_kind,
struct icaltimetype (* get_prop_func) (const icalproperty *prop), ICalTime * (* get_prop_func) (ICalProperty *prop),
icaltimezone *default_zone) ICalTimezone *default_zone)
{ {
icalproperty *prop; ICalProperty *prop;
struct icaltimetype ical_time; ICalTime *itt;
icalparameter *param; ICalParameter *param;
icaltimezone *timezone = NULL; 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) if (!prop)
return 0; 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) if (param)
timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param)); timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param));
else if (icaltime_is_utc (ical_time)) else if (i_cal_time_is_utc (itt))
timezone = icaltimezone_get_utc_timezone (); timezone = i_cal_timezone_get_utc_timezone ();
else else
timezone = default_zone; 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 (&param);
g_clear_object (&prop);
g_clear_object (&itt);
return retval;
} }
static char * 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 * 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) if (!prop)
return NULL; 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 * 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) if (!prop)
return NULL; 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 static inline time_t
get_ical_start_time (icalcomponent *ical, get_ical_start_time (ICalComponent *icomp,
icaltimezone *default_zone) ICalTimezone *default_zone)
{ {
return get_time_from_property (ical, return get_time_from_property (icomp,
ICAL_DTSTART_PROPERTY, I_CAL_DTSTART_PROPERTY,
icalproperty_get_dtstart, i_cal_property_get_dtstart,
default_zone); default_zone);
} }
static inline time_t static inline time_t
get_ical_end_time (icalcomponent *ical, get_ical_end_time (ICalComponent *icomp,
icaltimezone *default_zone) ICalTimezone *default_zone)
{ {
return get_time_from_property (ical, return get_time_from_property (icomp,
ICAL_DTEND_PROPERTY, I_CAL_DTEND_PROPERTY,
icalproperty_get_dtend, i_cal_property_get_dtend,
default_zone); default_zone);
} }
static gboolean static gboolean
get_ical_is_all_day (icalcomponent *ical, get_ical_is_all_day (ICalComponent *icomp,
time_t start_time, time_t start_time,
icaltimezone *default_zone) ICalTimezone *default_zone)
{ {
icalproperty *prop; ICalProperty *prop;
struct tm *start_tm; ICalDuration *duration;
time_t end_time; ICalTime *dtstart;
struct icaldurationtype duration; struct tm *start_tm;
struct icaltimetype start_icaltime; time_t end_time;
gboolean retval;
start_icaltime = icalcomponent_get_dtstart (ical); dtstart = i_cal_component_get_dtstart (icomp);
if (start_icaltime.is_date) if (dtstart && i_cal_time_is_date (dtstart))
return TRUE; {
g_clear_object (&dtstart);
return TRUE;
}
g_clear_object (&dtstart);
start_tm = gmtime (&start_time); start_tm = gmtime (&start_time);
if (start_tm->tm_sec != 0 || if (start_tm->tm_sec != 0 ||
@@ -200,35 +223,40 @@ get_ical_is_all_day (icalcomponent *ical,
start_tm->tm_hour != 0) start_tm->tm_hour != 0)
return FALSE; 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; 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) if (!prop)
return FALSE; 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 static inline time_t
get_ical_due_time (icalcomponent *ical, get_ical_due_time (ICalComponent *icomp,
icaltimezone *default_zone) ICalTimezone *default_zone)
{ {
return get_time_from_property (ical, return get_time_from_property (icomp,
ICAL_DUE_PROPERTY, I_CAL_DUE_PROPERTY,
icalproperty_get_due, i_cal_property_get_due,
default_zone); default_zone);
} }
static inline time_t static inline time_t
get_ical_completed_time (icalcomponent *ical, get_ical_completed_time (ICalComponent *icomp,
icaltimezone *default_zone) ICalTimezone *default_zone)
{ {
return get_time_from_property (ical, return get_time_from_property (icomp,
ICAL_COMPLETED_PROPERTY, I_CAL_COMPLETED_PROPERTY,
icalproperty_get_completed, i_cal_property_get_completed,
default_zone); default_zone);
} }
@@ -365,67 +393,69 @@ calendar_appointment_free (CalendarAppointment *appointment)
static void static void
calendar_appointment_init (CalendarAppointment *appointment, calendar_appointment_init (CalendarAppointment *appointment,
icalcomponent *ical, ICalComponent *icomp,
ECalClient *cal) ECalClient *cal)
{ {
icaltimezone *default_zone; ICalTimezone *default_zone;
const char *source_id; const char *source_id;
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal))); source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
default_zone = e_cal_client_get_default_timezone (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->source_id = g_strdup (source_id);
appointment->backend_name = get_source_backend_name (cal); appointment->backend_name = get_source_backend_name (cal);
appointment->summary = get_ical_summary (ical); appointment->summary = get_ical_summary (icomp);
appointment->description = get_ical_description (ical); appointment->description = get_ical_description (icomp);
appointment->color_string = get_source_color (cal); appointment->color_string = get_source_color (cal);
appointment->start_time = get_ical_start_time (ical, default_zone); appointment->start_time = get_ical_start_time (icomp, default_zone);
appointment->end_time = get_ical_end_time (ical, default_zone); appointment->end_time = get_ical_end_time (icomp, default_zone);
appointment->is_all_day = get_ical_is_all_day (ical, appointment->is_all_day = get_ical_is_all_day (icomp,
appointment->start_time, appointment->start_time,
default_zone); default_zone);
} }
static CalendarAppointment * static CalendarAppointment *
calendar_appointment_new (icalcomponent *ical, calendar_appointment_new (ICalComponent *icomp,
ECalClient *cal) ECalClient *cal)
{ {
CalendarAppointment *appointment; CalendarAppointment *appointment;
appointment = g_new0 (CalendarAppointment, 1); appointment = g_new0 (CalendarAppointment, 1);
calendar_appointment_init (appointment, ical, cal); calendar_appointment_init (appointment, icomp, cal);
return appointment; return appointment;
} }
static gboolean static gboolean
generate_instances_cb (ECalComponent *comp, generate_instances_cb (ICalComponent *icomp,
time_t start, ICalTime *instance_start,
time_t end, ICalTime *instance_end,
gpointer data) gpointer user_data,
GCancellable *cancellable,
GError **error)
{ {
ECalClient *cal = ((CollectAppointmentsData *)data)->client; ECalClient *cal = ((CollectAppointmentsData *)user_data)->client;
GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments; GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments;
CalendarAppointment *appointment; CalendarAppointment *appointment;
CalendarOccurrence *occurrence; 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); appointment = g_hash_table_lookup (appointments, uid);
if (appointment == NULL) if (appointment == NULL)
{ {
icalcomponent *ical = e_cal_component_get_icalcomponent (comp); appointment = calendar_appointment_new (icomp, cal);
appointment = calendar_appointment_new (ical, cal);
g_hash_table_insert (appointments, g_strdup (uid), appointment); g_hash_table_insert (appointments, g_strdup (uid), appointment);
} }
occurrence = g_new0 (CalendarOccurrence, 1); occurrence = g_new0 (CalendarOccurrence, 1);
occurrence->start_time = start; occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone);
occurrence->end_time = end; occurrence->end_time = i_cal_time_as_timet_with_zone (instance_end, default_zone);
occurrence->rid = e_cal_component_get_recurid_as_string (comp); occurrence->rid = e_cal_util_component_get_recurid_as_string (icomp);
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence); appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
@@ -442,7 +472,7 @@ struct _App
time_t since; time_t since;
time_t until; time_t until;
icaltimezone *zone; ICalTimezone *zone;
CalendarSources *sources; CalendarSources *sources;
gulong sources_signal_id; gulong sources_signal_id;
@@ -468,9 +498,9 @@ app_update_timezone (App *app)
if (g_strcmp0 (location, app->timezone_location) != 0) if (g_strcmp0 (location, app->timezone_location) != 0)
{ {
if (location == NULL) if (location == NULL)
app->zone = icaltimezone_get_utc_timezone (); app->zone = i_cal_timezone_get_utc_timezone ();
else else
app->zone = icaltimezone_get_builtin_timezone (location); app->zone = i_cal_timezone_get_builtin_timezone (location);
g_free (app->timezone_location); g_free (app->timezone_location);
app->timezone_location = location; app->timezone_location = location;
print_debug ("Using timezone %s", app->timezone_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) for (l = objects; l != NULL; l = l->next)
{ {
icalcomponent *ical = l->data; ICalComponent *icomp = l->data;
const char *uid; const char *uid;
uid = icalcomponent_get_uid (ical); uid = i_cal_component_get_uid (icomp);
if (g_hash_table_lookup (app->appointments, uid) == NULL) 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); since_iso8601 = isodate_from_time_t (app->since);
until_iso8601 = isodate_from_time_t (app->until); 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", print_debug ("Loading events since %s until %s",
since_iso8601, since_iso8601,
@@ -622,21 +652,12 @@ app_load_events (App *app)
e_cal_client_set_default_timezone (cal, app->zone); 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.client = cal;
data.appointments = app->appointments; data.appointments = app->appointments;
e_cal_client_generate_instances_sync (cal, e_cal_client_generate_instances_sync (cal,
app->since, app->since,
app->until, app->until,
NULL,
generate_instances_cb, generate_instances_cb,
&data); &data);

View File

@@ -18,6 +18,7 @@ st_headers = [
'st-scrollable.h', 'st-scrollable.h',
'st-scroll-bar.h', 'st-scroll-bar.h',
'st-scroll-view.h', 'st-scroll-view.h',
'st-scroll-view-fade.h',
'st-settings.h', 'st-settings.h',
'st-shadow.h', 'st-shadow.h',
'st-texture-cache.h', 'st-texture-cache.h',
@@ -73,6 +74,7 @@ st_sources = [
'st-scrollable.c', 'st-scrollable.c',
'st-scroll-bar.c', 'st-scroll-bar.c',
'st-scroll-view.c', 'st-scroll-view.c',
'st-scroll-view-fade.c',
'st-settings.c', 'st-settings.c',
'st-shadow.c', 'st-shadow.c',
'st-texture-cache.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_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') data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl')
custom_target('scroll-view-fade-glsl', custom_target('scroll-view-fade-glsl',
@@ -123,7 +120,7 @@ st_cflags = [
# Currently meson requires a shared library for building girs # Currently meson requires a shared library for building girs
libst = shared_library('st-1.0', libst = shared_library('st-1.0',
sources: st_gir_sources + st_non_gir_sources, sources: st_gir_sources,
c_args: st_cflags, c_args: st_cflags,
dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep], dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep],
build_rpath: mutter_typelibdir, build_rpath: mutter_typelibdir,