Compare commits

...

70 Commits

Author SHA1 Message Date
Florian Müllner
f07306897f Bump version to 3.21.92
Update NEWS.
2016-09-13 00:16:11 +02:00
Piotr Drąg
44d731fff5 Add more options to XGETTEXT_OPTIONS in po/Makevars 2016-09-12 19:43:44 +02:00
Tom Tryfonidis
52f939f64c Updated Greek translation 2016-09-11 21:20:39 +00:00
Stas Solovey
f1d12c18d8 Updated Russian translation 2016-09-11 17:52:46 +00:00
Florian Müllner
373ebb50eb Restore gvc submodule
Commit 68f439425b accidentally dropped the changes from the last
couple of months ...
2016-09-11 19:20:00 +02:00
Florian Müllner
b0b5be63b9 Restore gnome-shell-sass submodule
Commit 68f439425b accidentally dropped the changes from the last
couple of months ...
2016-09-11 19:17:36 +02:00
Fran Dieguez
68f439425b Updated Galician translations 2016-09-11 00:35:39 +02:00
Michael Catanzaro
cae4d92191 loginDialog: fix cancel button in ask for username mode
If the user clicks Not Listed? to enter ask for username mode, clicks
cancel, and then attempts to log in via the user list, the user will see
"Authentication failed" after correctly typing the password, and then
will become stuck in an empty screen with just the gray noise background.

The problem is, we forgot to disconnect from the signal that's waiting
for the next button to be pressed on the username entry screen. Since
the signal handler that executes here is expecting the username to be
input, and isn't prepared for us to have switched back to user list,
various bad things happen. We try to start two gdm-password
conversations at once, for instance, one using the user's password as
the username. I stopped investigating here, because it's easy to fix by
disconnecting from the signal at the right time.

https://bugzilla.gnome.org/show_bug.cgi?id=770328
2016-09-10 16:50:53 -05:00
Changwoo Ryu
f336295475 Updated Korean translation 2016-09-10 18:16:31 +00:00
Florian Müllner
06d0e7d74a telepathyClient: Always clear pending messages on destroy
Since commit 82950ecea, we acknowledge pending messages when closing a
chat notification for a channel we are handling to prevent the channel
from popping up again immediately. While this isn't an issue for channels
we don't handle, the unread messages of the destroyed notification are
still considered for the messages indicator in the top bar, which is
clearly confusing (in particular when we end up showing the indicator
without any notifications in the list). As it's arguably correct to not
meddle with a channel handled by someone else, just reset the cache of
pending messages to address this issue.

https://bugzilla.gnome.org/show_bug.cgi?id=770888
2016-09-09 23:54:28 +02:00
Florian Müllner
5e0e3edc7b data: Swap default for 'disable-extension-version-check' setting
Nowadays, the user interface has mostly stabilized with most changes
happening under the hood. As a result, extensions written for previous
versions of GNOME Shell are very much expected to keep working on
updates, if it wasn't for the version check that requires a version
bump in the extension metadata. There has been a setting to disable
that check for a while, but it's existence isn't widely known (hence
the common perception that "everything breaks on updates"). While
there is still some risk that an out-of-date extension can be enabled
without error, but fails spectacularly later (where we cannot catch
the exception), it is reasonably small by now when compared to the
~95% of extensions that can be "unbroken", so swap the default value
to disable version checks by default.

https://bugzilla.gnome.org/show_bug.cgi?id=770887
2016-09-09 23:54:28 +02:00
Rui Matos
02a51bfa65 windowManager: Fix windows not getting undimmed while hidden
Mutter's plugin destroy event doesn't happen if a window is hidden
when it gets unmanaged so we also need to handle the
MetaWindow::unmanaged signal to check whether the parent should
dimmed.

https://bugzilla.gnome.org/show_bug.cgi?id=752524
2016-09-09 17:17:07 +02:00
Rui Matos
dbd04df311 windowManager: Fix windows not getting undimmed in some cases
meta_window_foreach_transient() iterates through all transients of a
window, not only direct transients. This means that simply checking if
a transient is an attached dialog isn't enough because it might be a
non-direct transient for the window we're checking, in which case we
don't want to dim the window.

In particular this fixes windows not getting undimmed when they have
more that one level of transient children and the direct transient gets
destroyed. In that case we would still find at least one non-direct
transient child and decide to keep the window dimmed.

https://bugzilla.gnome.org/show_bug.cgi?id=770163
2016-09-09 17:17:06 +02:00
Arash Mousavi
e6adcd99c7 [l10n] update Persian translations 2016-09-09 18:36:30 +04:30
Florian Müllner
3171819c36 altTab: Don't mess up MRU order while cycling windows
Commit bd6e7f14d1 reimplemented the cycle keybindings to
fix cycling between more than two windows, but the approach
of highlighting cycled windows by actually focusing them has
the drawback that cycling messes up the MRU order of windows.
To fix this, only change the window focus when the operation
finishes, and use a dedicated actor that draws a border around
a window clone for highlighting.

https://bugzilla.gnome.org/show_bug.cgi?id=771063
2016-09-08 21:32:10 +02:00
Rui Matos
e4976b535d WorkspaceSwitcherPopup: allow input events to pass through
There's no particular reason for this actor to be reactive and thus
preventing input events to reach actors underneath, e.g. quickly
clicking on something while the popup isn't yet finished animating
out.

https://bugzilla.gnome.org/show_bug.cgi?id=770382
2016-09-08 19:29:50 +02:00
Claude Paroz
06d1602f17 Updated French translation 2016-09-08 16:40:26 +00:00
Rūdolfs Mazurs
603d0dfbc3 Update Latvian translation 2016-09-08 19:00:21 +03:00
Olivier Fourdan
0b6c5b4620 systray: Bail out if the plug window is gone
Instead of crashing when deferencing a NULL pointer.

Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=755313
2016-09-08 12:08:02 +02:00
Hannie Dumoleyn
d7894dbc44 Updated Dutch translation Master 2016-09-07 17:19:57 +02:00
Tiago Santos
d25d8126ea Updated Portuguese translation 2016-09-07 05:49:14 +00:00
Anders Jonsson
2402d3e115 Updated Swedish translation 2016-09-06 22:07:24 +00:00
Yosef Or Boczko
ac4284d348 Updated Hebrew translation 2016-09-06 12:21:39 +03:00
Jonas Ådahl
f9ef80749a recorder: Composite captured images before passing into gstreamer
Mutter may capture the screen in multiple capture regions. If this is
done, take these images and composite them onto one large image, which
is then passed into the gstreamer source.
2016-09-06 15:22:23 +08:00
Jonas Ådahl
22f0d3076e screenshot: Composite multiple captures into one image
When clutter gives us multiple captures (multiple cairo_surface_t's),
composite them into one large image and use that as final screenshot
result. This makes screenshooting work when mutter uses multiple views.

https://bugzilla.gnome.org/show_bug.cgi?id=770128
2016-09-06 15:22:23 +08:00
A S Alam
127b6dca1c updated Punjabi Translation 2016-09-05 07:29:17 -05:00
Trần Ngọc Quân
8cfff33291 Updated Vietnamese translation
Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
2016-09-05 15:04:03 +07:00
Muhammet Kara
21f534c7f0 Updated Turkish translation 2016-09-04 19:12:28 +00:00
Aurimas Černius
9faa1db942 Updated Lithuanian translation 2016-09-04 12:28:10 +03:00
Baurzhan Muftakhidinov
2fc9bffb23 Updated Kazakh translation 2016-09-04 04:15:00 +00:00
Changwoo Ryu
f16eae45a2 Updated Korean translation 2016-09-03 14:07:31 +00:00
Florian Müllner
622e73c34c Bump version to 3.21.91
Update NEWS.
2016-08-30 00:26:31 +02:00
Мирослав Николић
eb1c3d7045 Updated Serbian translation 2016-08-28 09:16:02 +02:00
Matej Urbančič
fc26895f70 Updated Slovenian translation 2016-08-25 22:53:27 +02:00
Enrico Nicoletto
ca224b379f Updated Brazilian Portuguese translation 2016-08-22 21:13:36 +00:00
Fabio Tomat
42b609b852 Updated Friulian translation 2016-08-22 20:53:03 +00:00
Daniel Mustieles
a24169e2aa Updated Spanish translation 2016-08-22 20:44:47 +02:00
Andika Triwidada
144d1dca88 Updated Indonesian translation 2016-08-22 09:47:46 +00:00
Dušan Kazik
38ab6ba3ec Updated Slovak translation 2016-08-21 16:01:41 +00:00
Jiri Grönroos
bc6a0626c1 Updated Finnish translation 2016-08-21 09:45:31 +00:00
Mario Blättermann
497f4f4a3c Updated German translation 2016-08-21 09:39:47 +00:00
Florian Müllner
8c8c89a5f1 Bump version to 3.21.90.1
The 3.21.90 tarball got corrupted, so do another point release.
2016-08-20 23:02:34 +02:00
Timm Bäder
d658a5148a recorder: Print absolute path if output file can't be opened 2016-08-20 16:03:31 +02:00
Piotr Drąg
2c3e0dab0f Updated Polish translation 2016-08-20 10:26:50 +02:00
Balázs Úr
e2400e35bd Updated Hungarian translation 2016-08-19 22:01:16 +00:00
Marek Černocký
fc4562491b Updated Czech translation 2016-08-19 23:17:20 +02:00
Piotr Drąg
6e3bedb888 Add translator comments to .desktop files 2016-08-19 23:15:20 +02:00
Florian Müllner
2b8332df5e Bump version to 3.21.90
Update NEWS.
2016-08-19 22:16:00 +02:00
Florian Müllner
795e7d4b59 build: Say good-bye to intltool
intltool is unmaintained nowadays while upstream gettext gained
support for formats like GSettings schemas and .desktop files,
and offers a mechanism to teach it about other XML formats not
yet supported out of the box which we can use for the rest.
So there's nothing stopping us, just make the switch ...

https://bugzilla.gnome.org/show_bug.cgi?id=769074
2016-08-19 22:13:14 +02:00
Andika Triwidada
522d46a525 Updated Indonesian translation 2016-08-19 06:21:39 +00:00
Enrico Nicoletto
dcecf5e350 Updated Brazilian Portuguese translation 2016-08-19 02:26:11 +00:00
Muhammet Kara
a61c929450 Updated Turkish translation 2016-08-16 04:02:44 +00:00
Marek Cernocky
5992e9f524 Updated Czech translation 2016-08-12 17:31:44 +02:00
Jiri Grönroos
ee4cd05ebd Updated Finnish translation 2016-08-12 12:42:53 +00:00
Florian Müllner
af5e65fd79 global: Make timestamp parameter unsigned
Negative values don't make sense to timestamps, and an unsigned
timestamp as returned by shell_global_get_current_time() or
Gdk/Clutter events may exceed the range of signed integers.

https://bugzilla.gnome.org/show_bug.cgi?id=769216
2016-08-11 09:04:22 +02:00
Carlos Garnacho
284cbf3ea7 shell: Remove shell_util_text_insert_keyval()
It is now unused.
2016-08-10 11:25:50 +02:00
Carlos Garnacho
c3e68955e3 keyboard: Implement more of the wayland caribou adapter
Have it notify properly of changes to the current input source, as
well as exposing those in get_groups().

The support for virtual keyboard events has been replaced by
ClutterVirtualInputDevice, which can be thought of as the equivalent
to the XTEST devices in X11.

https://bugzilla.gnome.org/show_bug.cgi?id=765009
2016-08-10 11:23:58 +02:00
Yosef Or Boczko
ffa28e7ee7 Updated Hebrew translation 2016-08-07 15:42:02 +03:00
Balázs Úr
78d81f909c Updated Hungarian translation 2016-08-04 21:54:56 +00:00
Florian Müllner
34551bf48b Bump g-i requirement
We need commit bd475c00d9 to pick up mutter's clutter fork.
2016-08-03 21:46:54 +02:00
Aurimas Černius
e02cd53ac5 Updated Lithuanian translation 2016-08-03 21:56:30 +03:00
Bernd Homuth
b7f5154bd3 Updated German translation 2016-08-02 20:15:37 +00:00
Daniel Mustieles
d80247918c Updated Spanish translation 2016-08-02 16:50:47 +02:00
Tiago Santos
bb8c2d3e13 Updated Portuguese translation 2016-07-27 07:42:37 +00:00
Florian Müllner
6e0e37519d calendar-server: Add back missing return value
In commit 7e0e224e0, when moving from e_cal_recur_generate_instances()
to e_cal_client_generate_instances(), the return value of the
ECalRecurInstanceFn callback was accidentally removed; add it
back.

https://bugzilla.gnome.org/show_bug.cgi?id=769156
2016-07-25 18:55:22 +02:00
Fabio Tomat
5c19ae5878 Updated Friulian translation 2016-07-23 15:51:45 +00:00
Piotr Drąg
8713473c64 Add Language headers to po files
Future versions of gettext will fail if this header is missing.
2016-07-21 02:46:17 +02:00
Piotr Drąg
a4b4f2f6fd Updated POTFILES.in 2016-07-21 00:50:20 +02:00
Florian Müllner
03f22135b5 Bump version to 3.21.4
Update NEWS.
2016-07-20 21:07:19 +02:00
Florian Müllner
5b79f657eb data: Dist portals keyfile
Whoops, forgot that in the previous commit :-(
2016-07-20 21:07:19 +02:00
72 changed files with 12928 additions and 12278 deletions

4
.gitignore vendored

@@ -16,7 +16,6 @@ config.log
config.status config.status
config config
configure configure
data/50-gnome-shell-*.xml
data/org.gnome.Shell.desktop data/org.gnome.Shell.desktop
data/org.gnome.Shell.desktop.in data/org.gnome.Shell.desktop.in
data/gnome-shell-extension-prefs.desktop data/gnome-shell-extension-prefs.desktop
@@ -26,8 +25,6 @@ data/gschemas.compiled
data/perf-background.xml data/perf-background.xml
data/org.gnome.shell.gschema.xml data/org.gnome.shell.gschema.xml
data/org.gnome.shell.gschema.valid data/org.gnome.shell.gschema.valid
data/org.gnome.shell.evolution.calendar.gschema.xml
data/org.gnome.shell.evolution.calendar.gschema.valid
data/org.gnome.Shell.PortalHelper.desktop data/org.gnome.Shell.PortalHelper.desktop
data/org.gnome.Shell.PortalHelper.service data/org.gnome.Shell.PortalHelper.service
data/theme/.sass-cache data/theme/.sass-cache
@@ -74,7 +71,6 @@ src/*-marshal.[ch]
src/Makefile src/Makefile
src/Makefile.in src/Makefile.in
src/calendar-server/evolution-calendar.desktop src/calendar-server/evolution-calendar.desktop
src/calendar-server/evolution-calendar.desktop.in
src/calendar-server/org.gnome.Shell.CalendarServer.service src/calendar-server/org.gnome.Shell.CalendarServer.service
src/gnome-shell src/gnome-shell
src/gnome-shell-calendar-server src/gnome-shell-calendar-server

71
NEWS

@@ -1,3 +1,74 @@
3.21.92
=======
* Adjust screen capture to work with multiple stage views [Jonas; #770128]
* Improve handling of cycle shortcuts [Florian; #771063]
* Fix windows not getting undimmed in some cases [Rui; #770163, #752524]
* Disable extension version check by default [Florian; #770887]
* Misc. bug fixes [Rui, Florian, Michael; #770382, #770888, #770328]
Contributors:
Jonas Ådahl, Michael Catanzaro, Fran Dieguez, Olivier Fourdan, Rui Matos,
Florian Müllner
Translations:
Changwoo Ryu [ko], Baurzhan Muftakhidinov [kk], Aurimas Černius [lt],
Muhammet Kara [tr], Trần Ngọc Quân [vi], A S Alam [pa], Yosef Or Boczko [he],
Anders Jonsson [sv], Tiago Santos [pt], Hannie Dumoleyn [nl],
Rūdolfs Mazurs [lv], Claude Paroz [fr], Arash Mousavi [fa],
Fran Dieguez [gl], Stas Solovey [ru], Tom Tryfonidis [el]
3.21.91
=======
Translations:
Mario Blättermann [de], Jiri Grönroos [fi], Dušan Kazik [sk],
Andika Triwidada [id], Daniel Mustieles [es], Fabio Tomat [fur],
Enrico Nicoletto [pt_BR], Matej Urbančič [sl], Мирослав Николић [sr, sr@latin]
3.21.90.1
=========
Contributors:
Piotr Drąg
Translations:
Marek Černocký [cs], Balázs Úr [hu]
3.21.90
=======
* Improve on-screen keyboard on wayland [Carlos; #765009]
* Misc. bug fixes [Florian; #769156, #769216, #769074]
Contributors:
Carlos Garnacho, Florian Müllner
Translations:
Fabio Tomat [fur], Tiago Santos [pt], Daniel Mustieles [es],
Bernd Homuth [de], Aurimas Černius [lt], Balázs Úr [hu],
Yosef Or Boczko [he], Jiri Grönroos [fi], Marek Cernocky [cs],
Muhammet Kara [tr], Enrico Nicoletto [pt_BR], Andika Triwidada [id]
3.21.4
======
* overview: Fix switching workspaces when scrolling on non-primary monitors
[Florian; #766883, #768316]
* Fix crash when using screen recorder under wayland [Rui; #767001]
* Update theme on video memory purge errors [Rui; #739178]
* Free old backgrounds immediately [Hyungwon; #766353]
* Add support for system upgrades to end session dialog [Kalev; #763611]
* Fix maximized windows flickering to the wrong size on restart [Owen; #761566]
* Hide ignored events in calendar as well [Florian; #768538]
* calendar: Only hide dismissed occurrence of recurring event [Florian; #748226]
* Provide org.freedesktop.impl.portal.access implementation [Florian; #768669]
* Misc. bug fixes and cleanups [Rui, Florian, Marinus, Jonas; #767954, #768317,
#746867, #762206, #768956, #768979]
Contributors:
Jonas Ådahl, Piotr Drąg, Hyungwon Hwang, Kalev Lember, Rui Matos,
Florian Müllner, Marinus Schraal, Owen W. Taylor
Translations:
Andika Triwidada [id], Daniel Mustieles [es], Bruce Cowan [en_GB],
Dušan Kazik [sk], Piotr Drąg [pl], Chao-Hsiung Liao [zh_HK]
3.21.3 3.21.3
====== ======
* Do not disable suspend action when locked [Florian; #725960] * Do not disable suspend action when locked [Florian; #725960]

@@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.21.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.21.92],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AX_IS_RELEASE([git-directory]) AX_IS_RELEASE([git-directory])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
@@ -24,13 +24,14 @@ LT_PREREQ([2.2.6])
LT_INIT([disable-static]) LT_INIT([disable-static])
# i18n # i18n
IT_PROG_INTLTOOL([0.40])
GETTEXT_PACKAGE=gnome-shell GETTEXT_PACKAGE=gnome-shell
AC_SUBST(GETTEXT_PACKAGE) AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
[The prefix for our gettext translation domains.]) [The prefix for our gettext translation domains.])
AM_GNU_GETTEXT_VERSION([0.19.6])
AM_GNU_GETTEXT([external])
PKG_PROG_PKG_CONFIG([0.22]) PKG_PROG_PKG_CONFIG([0.22])
AC_PATH_PROG([XSLTPROC], [xsltproc]) AC_PATH_PROG([XSLTPROC], [xsltproc])
@@ -75,9 +76,9 @@ AS_IF([test x$enable_systemd != xno], [
AC_MSG_RESULT($enable_systemd) AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.21.5 CLUTTER_MIN_VERSION=1.21.5
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4 GOBJECT_INTROSPECTION_MIN_VERSION=1.49.1
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.21.3 MUTTER_MIN_VERSION=3.21.92
GTK_MIN_VERSION=3.15.0 GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.45.3 GIO_MIN_VERSION=2.45.3
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
@@ -254,7 +255,6 @@ AC_CONFIG_FILES([
docs/reference/st/Makefile docs/reference/st/Makefile
docs/reference/st/st-docs.sgml docs/reference/st/st-docs.sgml
js/Makefile js/Makefile
src/calendar-server/evolution-calendar.desktop.in
src/Makefile src/Makefile
src/gvc/Makefile src/gvc/Makefile
browser-plugin/Makefile browser-plugin/Makefile

@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<KeyListEntries schema="org.gnome.shell.keybindings" <KeyListEntries schema="org.gnome.shell.keybindings"
group="system" group="system"
_name="System" name="System"
wm_name="GNOME Shell" wm_name="GNOME Shell"
package="gnome-shell"> package="gnome-shell">
<KeyListEntry name="toggle-message-tray" <KeyListEntry name="toggle-message-tray"
_description="Show the notification list"/> description="Show the notification list"/>
<KeyListEntry name="focus-active-notification" <KeyListEntry name="focus-active-notification"
_description="Focus the active notification"/> description="Focus the active notification"/>
<KeyListEntry name="toggle-overview" <KeyListEntry name="toggle-overview"
_description="Show the overview"/> description="Show the overview"/>
<KeyListEntry name="toggle-application-view" <KeyListEntry name="toggle-application-view"
_description="Show all applications"/> description="Show all applications"/>
<KeyListEntry name="open-application-menu" <KeyListEntry name="open-application-menu"
_description="Open the application menu"/> description="Open the application menu"/>
</KeyListEntries> </KeyListEntries>

@@ -14,8 +14,9 @@ servicedir = $(datadir)/dbus-1/services
service_DATA = org.gnome.Shell.PortalHelper.service service_DATA = org.gnome.Shell.PortalHelper.service
CLEANFILES += \ CLEANFILES += \
org.gnome.Shell.PortalHelper.service \ org.gnome.Shell.PortalHelper.service \
org.gnome.Shell.PortalHelper.desktop \ org.gnome.Shell.PortalHelper.desktop \
org.gnome.Shell.PortalHelper.desktop.in \
$(NULL) $(NULL)
endif endif
@@ -31,7 +32,9 @@ endif
-e "s|@VERSION[@]|$(VERSION)|" \ -e "s|@VERSION[@]|$(VERSION)|" \
$< > $@ || rm $@ $< > $@ || rm $@
@INTLTOOL_DESKTOP_RULE@ %.desktop:%.desktop.in
$(AM_V_GEN) $(MSGFMT) --desktop --template $(builddir)/$< \
-d $(top_srcdir)/po -o $@
introspectiondir = $(datadir)/dbus-1/interfaces introspectiondir = $(datadir)/dbus-1/interfaces
introspection_DATA = \ introspection_DATA = \
@@ -83,14 +86,11 @@ perf-background.xml: perf-background.xml.in
$< > $@ || rm $@ $< > $@ || rm $@
keysdir = @GNOME_KEYBINDINGS_KEYSDIR@ keysdir = @GNOME_KEYBINDINGS_KEYSDIR@
keys_in_files = 50-gnome-shell-system.xml.in keys_DATA = 50-gnome-shell-system.xml
keys_DATA = $(keys_in_files:.xml.in=.xml)
gsettings_SCHEMAS = org.gnome.shell.gschema.xml gsettings_SCHEMAS = org.gnome.shell.gschema.xml
@INTLTOOL_XML_NOMERGE_RULE@ %.gschema.xml: %.gschema.xml.in Makefile
%.gschema.xml.in: %.gschema.xml.in.in Makefile
$(AM_V_GEN) sed -e 's|@GETTEXT_PACKAGE[@]|$(GETTEXT_PACKAGE)|g' \ $(AM_V_GEN) sed -e 's|@GETTEXT_PACKAGE[@]|$(GETTEXT_PACKAGE)|g' \
$< > $@ || rm $@ $< > $@ || rm $@
@@ -109,15 +109,16 @@ convert_DATA = gnome-shell-overrides.convert
EXTRA_DIST = \ EXTRA_DIST = \
org.gnome.Shell.desktop.in.in \ org.gnome.Shell.desktop.in.in \
gnome-shell-extension-prefs.desktop.in.in \ gnome-shell-extension-prefs.desktop.in.in \
$(portal_DATA) \
$(introspection_DATA) \ $(introspection_DATA) \
$(menu_DATA) \ $(menu_DATA) \
$(convert_DATA) \ $(convert_DATA) \
$(keys_in_files) \ $(keys_DATA) \
$(dist_theme_files) \ $(dist_theme_files) \
perf-background.xml.in \ perf-background.xml.in \
org.gnome.Shell.PortalHelper.desktop.in \ org.gnome.Shell.PortalHelper.desktop.in.in \
org.gnome.Shell.PortalHelper.service.in \ org.gnome.Shell.PortalHelper.service.in \
org.gnome.shell.gschema.xml.in.in \ org.gnome.shell.gschema.xml.in \
gnome-shell-theme.gresource.xml \ gnome-shell-theme.gresource.xml \
$(resource_files) \ $(resource_files) \
$(NULL) $(NULL)
@@ -126,11 +127,9 @@ CLEANFILES += \
org.gnome.Shell.desktop.in \ org.gnome.Shell.desktop.in \
gnome-shell-extension-prefs.in \ gnome-shell-extension-prefs.in \
$(desktop_DATA) \ $(desktop_DATA) \
$(keys_DATA) \
$(gsettings_SCHEMAS) \ $(gsettings_SCHEMAS) \
perf-background.xml \ perf-background.xml \
gschemas.compiled \ gschemas.compiled \
org.gnome.shell.gschema.valid \ org.gnome.shell.gschema.valid \
org.gnome.shell.gschema.xml.in \
gnome-shell-theme.gresource \ gnome-shell-theme.gresource \
$(NULL) $(NULL)

@@ -1,7 +1,7 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
_Name=GNOME Shell Extension Preferences Name=GNOME Shell Extension Preferences
_Comment=Configure GNOME Shell Extensions Comment=Configure GNOME Shell Extensions
Exec=@bindir@/gnome-shell-extension-prefs %u Exec=@bindir@/gnome-shell-extension-prefs %u
X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-shell X-GNOME-Bugzilla-Product=gnome-shell

@@ -1,9 +1,10 @@
[Desktop Entry] [Desktop Entry]
_Name=Network Login Name=Network Login
Type=Application Type=Application
Exec=gapplication launch org.gnome.Shell.PortalHelper Exec=gapplication launch org.gnome.Shell.PortalHelper
DBusActivatable=true DBusActivatable=true
NoDisplay=true NoDisplay=true
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
Icon=network-workgroup Icon=network-workgroup
StartupNotify=true StartupNotify=true
OnlyShowIn=GNOME; OnlyShowIn=GNOME;

@@ -1,7 +1,7 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
_Name=GNOME Shell Name=GNOME Shell
_Comment=Window management and application launching Comment=Window management and application launching
Exec=@bindir@/gnome-shell Exec=@bindir@/gnome-shell
X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-shell X-GNOME-Bugzilla-Product=gnome-shell

@@ -3,84 +3,84 @@
gettext-domain="@GETTEXT_PACKAGE@"> gettext-domain="@GETTEXT_PACKAGE@">
<key name="development-tools" type="b"> <key name="development-tools" type="b">
<default>true</default> <default>true</default>
<_summary> <summary>
Enable internal tools useful for developers and testers from Alt-F2 Enable internal tools useful for developers and testers from Alt-F2
</_summary> </summary>
<_description> <description>
Allows access to internal debugging and monitoring tools Allows access to internal debugging and monitoring tools
using the Alt-F2 dialog. using the Alt-F2 dialog.
</_description> </description>
</key> </key>
<key name="enabled-extensions" type="as"> <key name="enabled-extensions" type="as">
<default>[]</default> <default>[]</default>
<_summary>UUIDs of extensions to enable</_summary> <summary>UUIDs of extensions to enable</summary>
<_description> <description>
GNOME Shell extensions have a UUID property; this key lists extensions GNOME Shell extensions have a UUID property; this key lists extensions
which should be loaded. Any extension that wants to be loaded needs which should be loaded. Any extension that wants to be loaded needs
to be in this list. You can also manipulate this list with the to be in this list. You can also manipulate this list with the
EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell. EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
</_description> </description>
</key> </key>
<key name="disable-extension-version-validation" type="b"> <key name="disable-extension-version-validation" type="b">
<default>false</default> <default>true</default>
<_summary>Disables the validation of extension version compatibility</_summary> <summary>Disables the validation of extension version compatibility</summary>
<_description> <description>
GNOME Shell will only load extensions that claim to support the current GNOME Shell will only load extensions that claim to support the current
running version. Enabling this option will disable this check and try to running version. Enabling this option will disable this check and try to
load all extensions regardless of the versions they claim to support. load all extensions regardless of the versions they claim to support.
</_description> </description>
</key> </key>
<key name="favorite-apps" type="as"> <key name="favorite-apps" type="as">
<default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default> <default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
<_summary>List of desktop file IDs for favorite applications</_summary> <summary>List of desktop file IDs for favorite applications</summary>
<_description> <description>
The applications corresponding to these identifiers The applications corresponding to these identifiers
will be displayed in the favorites area. will be displayed in the favorites area.
</_description> </description>
</key> </key>
<key name="app-picker-view" type="u"> <key name="app-picker-view" type="u">
<default>0</default> <default>0</default>
<_summary>App Picker View</_summary> <summary>App Picker View</summary>
<_description> <description>
Index of the currently selected view in the application picker. Index of the currently selected view in the application picker.
</_description> </description>
</key> </key>
<key name="command-history" type="as"> <key name="command-history" type="as">
<default>[]</default> <default>[]</default>
<_summary>History for command (Alt-F2) dialog</_summary> <summary>History for command (Alt-F2) dialog</summary>
</key> </key>
<key name="looking-glass-history" type="as"> <key name="looking-glass-history" type="as">
<default>[]</default> <default>[]</default>
<!-- Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass --> <!-- Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass -->
<_summary>History for the looking glass dialog</_summary> <summary>History for the looking glass dialog</summary>
</key> </key>
<key name="always-show-log-out" type="b"> <key name="always-show-log-out" type="b">
<default>false</default> <default>false</default>
<_summary>Always show the 'Log out' menu item in the user menu.</_summary> <summary>Always show the 'Log out' menu item in the user menu.</summary>
<_description> <description>
This key overrides the automatic hiding of the 'Log out' This key overrides the automatic hiding of the 'Log out'
menu item in single-user, single-session situations. menu item in single-user, single-session situations.
</_description> </description>
</key> </key>
<key name="remember-mount-password" type="b"> <key name="remember-mount-password" type="b">
<default>false</default> <default>false</default>
<_summary>Whether to remember password for mounting encrypted or remote filesystems</_summary> <summary>Whether to remember password for mounting encrypted or remote filesystems</summary>
<_description> <description>
The shell will request a password when an encrypted device or a The shell will request a password when an encrypted device or a
remote filesystem is mounted. If the password can be saved for remote filesystem is mounted. If the password can be saved for
future use a 'Remember Password' checkbox will be present. future use a 'Remember Password' checkbox will be present.
This key sets the default state of the checkbox. This key sets the default state of the checkbox.
</_description> </description>
</key> </key>
<key name="had-bluetooth-devices-setup" type="b"> <key name="had-bluetooth-devices-setup" type="b">
<default>false</default> <default>false</default>
<_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary> <summary>Whether the default Bluetooth adapter had set up devices associated to it</summary>
<_description> <description>
The shell will only show a Bluetooth menu item if a Bluetooth The shell will only show a Bluetooth menu item if a Bluetooth
adapter is powered, or if there were devices set up associated adapter is powered, or if there were devices set up associated
with the default adapter. This will be reset if the default with the default adapter. This will be reset if the default
adapter is ever seen not to have devices associated to it. adapter is ever seen not to have devices associated to it.
</_description> </description>
</key> </key>
<child name="keybindings" schema="org.gnome.shell.keybindings"/> <child name="keybindings" schema="org.gnome.shell.keybindings"/>
<child name="keyboard" schema="org.gnome.shell.keyboard"/> <child name="keyboard" schema="org.gnome.shell.keyboard"/>
@@ -90,44 +90,44 @@
gettext-domain="@GETTEXT_PACKAGE@"> gettext-domain="@GETTEXT_PACKAGE@">
<key name="open-application-menu" type="as"> <key name="open-application-menu" type="as">
<default>["&lt;Super&gt;F10"]</default> <default>["&lt;Super&gt;F10"]</default>
<_summary>Keybinding to open the application menu</_summary> <summary>Keybinding to open the application menu</summary>
<_description> <description>
Keybinding to open the application menu. Keybinding to open the application menu.
</_description> </description>
</key> </key>
<key name="toggle-application-view" type="as"> <key name="toggle-application-view" type="as">
<default>["&lt;Super&gt;a"]</default> <default>["&lt;Super&gt;a"]</default>
<_summary>Keybinding to open the "Show Applications" view</_summary> <summary>Keybinding to open the "Show Applications" view</summary>
<_description> <description>
Keybinding to open the "Show Applications" view of the Activities Keybinding to open the "Show Applications" view of the Activities
Overview. Overview.
</_description> </description>
</key> </key>
<key name="toggle-overview" type="as"> <key name="toggle-overview" type="as">
<default>["&lt;Super&gt;s"]</default> <default>["&lt;Super&gt;s"]</default>
<_summary>Keybinding to open the overview</_summary> <summary>Keybinding to open the overview</summary>
<_description> <description>
Keybinding to open the Activities Overview. Keybinding to open the Activities Overview.
</_description> </description>
</key> </key>
<key name="toggle-message-tray" type="as"> <key name="toggle-message-tray" type="as">
<default>["&lt;Super&gt;v","&lt;Super&gt;m"]</default> <default>["&lt;Super&gt;v","&lt;Super&gt;m"]</default>
<_summary>Keybinding to toggle the visibility of the notification list</_summary> <summary>Keybinding to toggle the visibility of the notification list</summary>
<_description> <description>
Keybinding to toggle the visibility of the notification list. Keybinding to toggle the visibility of the notification list.
</_description> </description>
</key> </key>
<key name="focus-active-notification" type="as"> <key name="focus-active-notification" type="as">
<default>["&lt;Super&gt;n"]</default> <default>["&lt;Super&gt;n"]</default>
<_summary>Keybinding to focus the active notification</_summary> <summary>Keybinding to focus the active notification</summary>
<_description> <description>
Keybinding to focus the active notification. Keybinding to focus the active notification.
</_description> </description>
</key> </key>
<key name="pause-resume-tweens" type="as"> <key name="pause-resume-tweens" type="as">
<default>[]</default> <default>[]</default>
<_summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</_summary> <summary>Keybinding that pauses and resumes all running tweens, for debugging purposes</summary>
<_description></_description> <description></description>
</key> </key>
</schema> </schema>
@@ -135,10 +135,10 @@
gettext-domain="@GETTEXT_PACKAGE@"> gettext-domain="@GETTEXT_PACKAGE@">
<key name="keyboard-type" type="s"> <key name="keyboard-type" type="s">
<default>'touch'</default> <default>'touch'</default>
<_summary>Which keyboard to use</_summary> <summary>Which keyboard to use</summary>
<_description> <description>
The type of keyboard to use. The type of keyboard to use.
</_description> </description>
</key> </key>
</schema> </schema>
@@ -147,11 +147,11 @@
gettext-domain="@GETTEXT_PACKAGE@"> gettext-domain="@GETTEXT_PACKAGE@">
<key type="b" name="current-workspace-only"> <key type="b" name="current-workspace-only">
<default>false</default> <default>false</default>
<_summary>Limit switcher to current workspace.</_summary> <summary>Limit switcher to current workspace.</summary>
<_description> <description>
If true, only applications that have windows on the current workspace are shown in the switcher. If true, only applications that have windows on the current workspace are shown in the switcher.
Otherwise, all applications are included. Otherwise, all applications are included.
</_description> </description>
</key> </key>
</schema> </schema>
@@ -165,20 +165,20 @@
gettext-domain="@GETTEXT_PACKAGE@"> gettext-domain="@GETTEXT_PACKAGE@">
<key name="app-icon-mode" enum="org.gnome.shell.window-switcher.AppIconMode"> <key name="app-icon-mode" enum="org.gnome.shell.window-switcher.AppIconMode">
<default>'both'</default> <default>'both'</default>
<_summary>The application icon mode.</_summary> <summary>The application icon mode.</summary>
<_description> <description>
Configures how the windows are shown in the switcher. Valid possibilities Configures how the windows are shown in the switcher. Valid possibilities
are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only'
(shows only the application icon) or 'both'. (shows only the application icon) or 'both'.
</_description> </description>
</key> </key>
<key type="b" name="current-workspace-only"> <key type="b" name="current-workspace-only">
<default>true</default> <default>true</default>
<_summary>Limit switcher to current workspace.</_summary> <summary>Limit switcher to current workspace.</summary>
<_description> <description>
If true, only windows from the current workspace are shown in the switcher. If true, only windows from the current workspace are shown in the switcher.
Otherwise, all windows are included. Otherwise, all windows are included.
</_description> </description>
</key> </key>
</schema> </schema>
@@ -186,43 +186,43 @@
gettext-domain="@GETTEXT_PACKAGE@"> gettext-domain="@GETTEXT_PACKAGE@">
<key name="attach-modal-dialogs" type="b"> <key name="attach-modal-dialogs" type="b">
<default>true</default> <default>true</default>
<_summary>Attach modal dialog to the parent window</_summary> <summary>Attach modal dialog to the parent window</summary>
<_description> <description>
This key overrides the key in org.gnome.mutter when running This key overrides the key in org.gnome.mutter when running
GNOME Shell. GNOME Shell.
</_description> </description>
</key> </key>
<key name="edge-tiling" type="b"> <key name="edge-tiling" type="b">
<default>true</default> <default>true</default>
<_summary>Enable edge tiling when dropping windows on screen edges</_summary> <summary>Enable edge tiling when dropping windows on screen edges</summary>
<_description> <description>
This key overrides the key in org.gnome.mutter when running GNOME Shell. This key overrides the key in org.gnome.mutter when running GNOME Shell.
</_description> </description>
</key> </key>
<key name="dynamic-workspaces" type="b"> <key name="dynamic-workspaces" type="b">
<default>true</default> <default>true</default>
<_summary>Workspaces are managed dynamically</_summary> <summary>Workspaces are managed dynamically</summary>
<_description> <description>
This key overrides the key in org.gnome.mutter when running GNOME Shell. This key overrides the key in org.gnome.mutter when running GNOME Shell.
</_description> </description>
</key> </key>
<key name="workspaces-only-on-primary" type="b"> <key name="workspaces-only-on-primary" type="b">
<default>true</default> <default>true</default>
<_summary>Workspaces only on primary monitor</_summary> <summary>Workspaces only on primary monitor</summary>
<_description> <description>
This key overrides the key in org.gnome.mutter when running GNOME Shell. This key overrides the key in org.gnome.mutter when running GNOME Shell.
</_description> </description>
</key> </key>
<key name="focus-change-on-pointer-rest" type="b"> <key name="focus-change-on-pointer-rest" type="b">
<default>true</default> <default>true</default>
<_summary>Delay focus changes in mouse mode until the pointer stops moving</_summary> <summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
<_description> <description>
This key overrides the key in org.gnome.mutter when running GNOME Shell. This key overrides the key in org.gnome.mutter when running GNOME Shell.
</_description> </description>
</key> </key>
</schema> </schema>
</schemalist> </schemalist>

@@ -604,6 +604,10 @@ StScrollBar {
width: 96px; width: 96px;
height: 96px; } height: 96px; }
/* Window Cycler */
.cycler-highlight {
border: 5px solid #215d9c; }
/* Workspace Switcher */ /* Workspace Switcher */
.workspace-switcher-group { .workspace-switcher-group {
padding: 12px; } padding: 12px; }

@@ -604,6 +604,10 @@ StScrollBar {
width: 96px; width: 96px;
height: 96px; } height: 96px; }
/* Window Cycler */
.cycler-highlight {
border: 5px solid #215d9c; }
/* Workspace Switcher */ /* Workspace Switcher */
.workspace-switcher-group { .workspace-switcher-group {
padding: 12px; } padding: 12px; }

@@ -804,6 +804,11 @@ const LoginDialog = new Lang.Class({
this._user = null; this._user = null;
if (this._nextSignalId) {
this._authPrompt.disconnect(this._nextSignalId);
this._nextSignalId = 0;
}
if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) { if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) {
if (!this._disableUserList) if (!this._disableUserList)
this._showUserList(); this._showUserList();

@@ -354,6 +354,67 @@ const AppSwitcherPopup = new Lang.Class({
} }
}); });
const CyclerHighlight = new Lang.Class({
Name: 'CyclerHighlight',
_init: function() {
this._window = null;
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._clone = new Clutter.Clone();
this.actor.add_actor(this._clone);
this._highlight = new St.Widget({ style_class: 'cycler-highlight' });
this.actor.add_actor(this._highlight);
let coordinate = Clutter.BindCoordinate.ALL;
let constraint = new Clutter.BindConstraint({ coordinate: coordinate });
this._clone.bind_property('source', constraint, 'source', 0);
this.actor.add_constraint(constraint);
this.actor.connect('notify::allocation',
Lang.bind(this, this._onAllocationChanged));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
},
set window(w) {
if (this._window == w)
return;
this._window = w;
if (this._clone.source)
this._clone.source.show();
let windowActor = this._window ? this._window.get_compositor_private()
: null;
if (windowActor)
windowActor.hide();
this._clone.source = windowActor;
},
_onAllocationChanged: function() {
if (!this._window) {
this._highlight.set_size(0, 0);
this._highlight.hide();
} else {
let [x, y] = this.actor.allocation.get_origin();
let rect = this._window.get_frame_rect();
this._highlight.set_size(rect.width, rect.height);
this._highlight.set_position(rect.x - x, rect.y - y);
this._highlight.show();
}
},
_onDestroy: function() {
this.window = null;
}
});
const CyclerPopup = new Lang.Class({ const CyclerPopup = new Lang.Class({
Name: 'CyclerPopup', Name: 'CyclerPopup',
Extends: SwitcherPopup.SwitcherPopup, Extends: SwitcherPopup.SwitcherPopup,
@@ -367,6 +428,9 @@ const CyclerPopup = new Lang.Class({
if (this._items.length == 0) if (this._items.length == 0)
return; return;
this._highlight = new CyclerHighlight();
global.window_group.add_actor(this._highlight.actor);
// We don't show an actual popup, so just provide what SwitcherPopup // We don't show an actual popup, so just provide what SwitcherPopup
// expects instead of inheriting from SwitcherList // expects instead of inheriting from SwitcherList
this._switcherList = { actor: new St.Widget(), this._switcherList = { actor: new St.Widget(),
@@ -375,11 +439,18 @@ const CyclerPopup = new Lang.Class({
}, },
_highlightItem: function(index, justOutline) { _highlightItem: function(index, justOutline) {
Main.activateWindow(this._items[index]); this._highlight.window = this._items[index];
global.window_group.set_child_above_sibling(this._highlight.actor, null);
}, },
_finish: function() { _finish: function() {
this._highlightItem(this._selectedIndex); Main.activateWindow(this._items[this._selectedIndex]);
this.parent();
},
_onDestroy: function() {
this._highlight.actor.destroy();
this.parent(); this.parent();
} }

@@ -475,6 +475,11 @@ const ChatSource = new Lang.Class({
this._channel.close_async(function(channel, result) { this._channel.close_async(function(channel, result) {
channel.close_finish(result); channel.close_finish(result);
}); });
} else {
// Don't indicate any unread messages when the notification
// that represents them has been destroyed.
this._pendingMessages = [];
this.countUpdated();
} }
// Keep source alive while the channel is open // Keep source alive while the channel is open

@@ -10,6 +10,7 @@ const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
const InputSourceManager = imports.ui.status.keyboard;
const BoxPointer = imports.ui.boxpointer; const BoxPointer = imports.ui.boxpointer;
const Layout = imports.ui.layout; const Layout = imports.ui.layout;
@@ -757,19 +758,48 @@ const ShellWaylandAdapter = new Lang.Class({
Name: 'ShellWaylandAdapter', Name: 'ShellWaylandAdapter',
Extends: Caribou.XAdapter, Extends: Caribou.XAdapter,
_init: function () {
this.parent();
let deviceManager = Clutter.DeviceManager.get_default();
this._virtualDevice = deviceManager.create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE);
this._inputSourceManager = InputSourceManager.getInputSourceManager();
this._sourceChangedId = this._inputSourceManager.connect('current-source-changed',
Lang.bind(this, this._onSourceChanged));
this._sourcesModifiedId = this._inputSourceManager.connect ('sources-changed',
Lang.bind(this, this._onSourcesModified));
},
_onSourcesModified: function () {
this.emit('config-changed');
},
_onSourceChanged: function (inputSourceManager, oldSource) {
let source = inputSourceManager.currentSource;
this.emit('group-changed', source.index, source.id, '');
},
vfunc_get_groups: function () {
let inputSources = this._inputSourceManager.inputSources;
let groups = []
let variants = [];
for (let i in inputSources) {
let is = inputSources[i];
groups[is.index] = is.id;
variants[is.index] = '';
}
return [groups, groups.length, variants, variants.length];
},
vfunc_keyval_press: function(keyval) { vfunc_keyval_press: function(keyval) {
let focus = global.stage.get_key_focus(); this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
if (focus instanceof Clutter.Text) keyval, Clutter.KeyState.PRESSED);
Shell.util_text_insert_keyval(focus, keyval);
else
this.parent(keyval);
}, },
vfunc_keyval_release: function(keyval) { vfunc_keyval_release: function(keyval) {
let focus = global.stage.get_key_focus(); this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
if (focus instanceof Clutter.Text) keyval, Clutter.KeyState.RELEASED);
return; // do nothing
else
this.parent(keyval);
}, },
}); });

@@ -1349,9 +1349,13 @@ const WindowManager = new Lang.Class({
_hasAttachedDialogs: function(window, ignoreWindow) { _hasAttachedDialogs: function(window, ignoreWindow) {
var count = 0; var count = 0;
window.foreach_transient(function(win) { window.foreach_transient(function(win) {
if (win != ignoreWindow && win.is_attached_dialog()) if (win != ignoreWindow &&
win.is_attached_dialog() &&
win.get_transient_for() == window) {
count++; count++;
return false; return false;
}
return true;
}); });
return count != 0; return count != 0;
}, },
@@ -1420,6 +1424,11 @@ const WindowManager = new Lang.Class({
actor._windowType = type; actor._windowType = type;
})); }));
actor.meta_window.connect('unmanaged', Lang.bind(this, function(window) {
let parent = window.get_transient_for();
if (parent)
this._checkDimming(parent);
}));
if (actor.meta_window.is_attached_dialog()) if (actor.meta_window.is_attached_dialog())
this._checkDimming(actor.get_meta_window().get_transient_for()); this._checkDimming(actor.get_meta_window().get_transient_for());

@@ -19,8 +19,7 @@ const WorkspaceSwitcherPopup = new Lang.Class({
Name: 'WorkspaceSwitcherPopup', Name: 'WorkspaceSwitcherPopup',
_init : function() { _init : function() {
this.actor = new St.Widget({ reactive: true, this.actor = new St.Widget({ x: 0,
x: 0,
y: 0, y: 0,
width: global.screen_width, width: global.screen_width,
height: global.screen_height, height: global.screen_height,

68
po/Makevars Normal file

@@ -0,0 +1,68 @@
# Makefile variables for PO directory in any package using GNU gettext.
# Usually the message domain is the same as the package name.
DOMAIN = $(PACKAGE)
# These two variables depend on the location of this directory.
subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \
--keyword=C_:1c,2 --keyword=NC_:1c,2 \
--keyword=g_dngettext:2,3 --add-comments \
--flag=g_dngettext:2:pass-c-format \
--flag=g_strdup_printf:1:c-format \
--flag=g_string_printf:2:c-format \
--flag=g_string_append_printf:2:c-format \
--flag=g_error_new:3:c-format \
--flag=g_set_error:4:c-format \
--flag=g_markup_printf_escaped:1:c-format \
--flag=g_log:3:c-format \
--flag=g_print:1:c-format \
--flag=g_printerr:1:c-format \
--flag=g_printf:1:c-format \
--flag=g_fprintf:2:c-format \
--flag=g_sprintf:2:c-format \
--flag=g_snprintf:3:c-format
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package. (Note that the msgstr strings, extracted from the package's
# sources, belong to the copyright holder of the package.) Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Translation copyright holder
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
# in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
# understood.
# - Strings which make invalid assumptions about notation of date, time or
# money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =
# Ignore the timestamp of the .pot file, as git clones do not have
# deterministic timestamps, and .po files are updated by translators
# (only) in GNOME projects.
PO_DEPENDS_ON_POT = no
# This tells whether or not to forcibly update $(DOMAIN).pot and
# regenerate PO files on "make dist". Possible values are "yes" and
# "no". Set this to no if the POT file and PO files are maintained
# externally.
DIST_DEPENDS_ON_UPDATE_PO = no

@@ -1,17 +1,17 @@
# List of source files containing translatable strings. # List of source files containing translatable strings.
# Please keep this file sorted alphabetically. # Please keep this file sorted alphabetically.
[encoding: UTF-8] data/50-gnome-shell-system.xml
data/50-gnome-shell-system.xml.in
data/gnome-shell-extension-prefs.desktop.in.in data/gnome-shell-extension-prefs.desktop.in.in
data/org.gnome.Shell.desktop.in.in data/org.gnome.Shell.desktop.in.in
data/org.gnome.shell.gschema.xml.in.in data/org.gnome.shell.gschema.xml.in
data/org.gnome.Shell.PortalHelper.desktop.in data/org.gnome.Shell.PortalHelper.desktop.in.in
js/extensionPrefs/main.js js/extensionPrefs/main.js
js/gdm/authPrompt.js js/gdm/authPrompt.js
js/gdm/loginDialog.js js/gdm/loginDialog.js
js/gdm/util.js js/gdm/util.js
js/misc/util.js js/misc/util.js
js/portalHelper/main.js js/portalHelper/main.js
js/ui/accessDialog.js
js/ui/appDisplay.js js/ui/appDisplay.js
js/ui/appFavorites.js js/ui/appFavorites.js
js/ui/audioDeviceSelection.js js/ui/audioDeviceSelection.js
@@ -61,7 +61,7 @@ js/ui/viewSelector.js
js/ui/windowAttentionHandler.js js/ui/windowAttentionHandler.js
js/ui/windowManager.js js/ui/windowManager.js
js/ui/windowMenu.js js/ui/windowMenu.js
src/calendar-server/evolution-calendar.desktop.in.in src/calendar-server/evolution-calendar.desktop.in
# Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it. # Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it.
src/gvc/gvc-mixer-control.c src/gvc/gvc-mixer-control.c
src/main.c src/main.c

@@ -1,4 +0,0 @@
data/org.gnome.shell.evolution.calendar.gschema.xml.in
src/calendar-server/evolution-calendar.desktop.in
# Meh, autofools :-(
sub/src/calendar-server/evolution-calendar.desktop.in

@@ -13,7 +13,7 @@ msgstr ""
"PO-Revision-Date: 2014-09-15 14:59+0530\n" "PO-Revision-Date: 2014-09-15 14:59+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n" "Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n" "Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n" "Language: as\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"

@@ -7,6 +7,7 @@ msgstr ""
"PO-Revision-Date: 2011-04-04 11:04+0600\n" "PO-Revision-Date: 2011-04-04 11:04+0600\n"
"Last-Translator: Israt Jahan <israt@ankur.org.bd>\n" "Last-Translator: Israt Jahan <israt@ankur.org.bd>\n"
"Language-Team: Bengali <ankur-bd-l10n@googlegroups.com>\n" "Language-Team: Bengali <ankur-bd-l10n@googlegroups.com>\n"
"Language: bn\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"

@@ -11,7 +11,7 @@ msgstr ""
"PO-Revision-Date: 2014-12-30 16:45+0000\n" "PO-Revision-Date: 2014-12-30 16:45+0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n" "Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: en_US\n" "Language: bn_IN\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"

@@ -14,7 +14,7 @@ msgstr ""
"PO-Revision-Date: 2014-09-14 23:32+0200\n" "PO-Revision-Date: 2014-09-14 23:32+0200\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n" "Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n" "Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: ca-XV\n" "Language: ca@valencia\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: 8bits\n" "Content-Transfer-Encoding: 8bits\n"

825
po/cs.po

File diff suppressed because it is too large Load Diff

838
po/de.po

File diff suppressed because it is too large Load Diff

836
po/el.po

File diff suppressed because it is too large Load Diff

806
po/es.po

File diff suppressed because it is too large Load Diff

1024
po/fa.po

File diff suppressed because it is too large Load Diff

844
po/fi.po

File diff suppressed because it is too large Load Diff

836
po/fr.po

File diff suppressed because it is too large Load Diff

911
po/fur.po

File diff suppressed because it is too large Load Diff

813
po/gl.po

File diff suppressed because it is too large Load Diff

@@ -13,7 +13,7 @@ msgstr ""
"PO-Revision-Date: 2014-10-01 15:51+0530\n" "PO-Revision-Date: 2014-10-01 15:51+0530\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n" "Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: \n" "Language: gu\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"

854
po/he.po

File diff suppressed because it is too large Load Diff

836
po/hu.po

File diff suppressed because it is too large Load Diff

808
po/id.po

File diff suppressed because it is too large Load Diff

831
po/kk.po

File diff suppressed because it is too large Load Diff

816
po/ko.po

File diff suppressed because it is too large Load Diff

@@ -14,7 +14,7 @@ msgstr ""
"PO-Revision-Date: 2012-09-24 14:29+0600\n" "PO-Revision-Date: 2012-09-24 14:29+0600\n"
"Last-Translator: Timur Zhamakeev <ztimur@gmail.com>\n" "Last-Translator: Timur Zhamakeev <ztimur@gmail.com>\n"
"Language-Team: Kirghiz <gnome-i18n@gnome.org>\n" "Language-Team: Kirghiz <gnome-i18n@gnome.org>\n"
"Language: ky_KG\n" "Language: ky\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"

829
po/lt.po

File diff suppressed because it is too large Load Diff

805
po/lv.po

File diff suppressed because it is too large Load Diff

@@ -11,6 +11,7 @@ msgstr ""
"PO-Revision-Date: 2011-12-08 22:37+0100\n" "PO-Revision-Date: 2011-12-08 22:37+0100\n"
"Last-Translator: Jovan N\n" "Last-Translator: Jovan N\n"
"Language-Team: mk_MK <jovan@lugola.net>\n" "Language-Team: mk_MK <jovan@lugola.net>\n"
"Language: mk\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"

@@ -11,7 +11,7 @@ msgstr ""
"PO-Revision-Date: 2014-09-15 19:21+0730\n" "PO-Revision-Date: 2014-09-15 19:21+0730\n"
"Last-Translator: Umarzuki Mochlis Moktar <umar@umarzuki.org>\n" "Last-Translator: Umarzuki Mochlis Moktar <umar@umarzuki.org>\n"
"Language-Team: GNOME Malay Team <gnome-ms@googlegroups.com>\n" "Language-Team: GNOME Malay Team <gnome-ms@googlegroups.com>\n"
"Language: \n" "Language: ms\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"

@@ -13,7 +13,7 @@ msgstr ""
"PO-Revision-Date: 2016-05-01 14:21+0200\n" "PO-Revision-Date: 2016-05-01 14:21+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: Norwegian bokmål\n" "Language: nb\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"

808
po/nl.po

File diff suppressed because it is too large Load Diff

904
po/pa.po

File diff suppressed because it is too large Load Diff

905
po/pl.po

File diff suppressed because it is too large Load Diff

811
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

799
po/ru.po

File diff suppressed because it is too large Load Diff

804
po/sk.po

File diff suppressed because it is too large Load Diff

827
po/sl.po

File diff suppressed because it is too large Load Diff

836
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

827
po/sv.po

File diff suppressed because it is too large Load Diff

808
po/tr.po

File diff suppressed because it is too large Load Diff

@@ -15,7 +15,7 @@ msgstr ""
"PO-Revision-Date: 2013-03-07 21:01+0900\n" "PO-Revision-Date: 2013-03-07 21:01+0900\n"
"Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n" "Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n"
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n" "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
"Language: \n" "Language: ug\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"

831
po/vi.po

File diff suppressed because it is too large Load Diff

@@ -13,7 +13,7 @@ msgstr ""
"PO-Revision-Date: 2014-08-19 19:17+0800\n" "PO-Revision-Date: 2014-08-19 19:17+0800\n"
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n" "Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n" "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
"Language: zh_TW\n" "Language: zh_HK\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"

@@ -12,7 +12,9 @@ desktopdir=$(datadir)/applications
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
desktop_in_files = calendar-server/evolution-calendar.desktop.in desktop_in_files = calendar-server/evolution-calendar.desktop.in
@INTLTOOL_DESKTOP_RULE@ %.desktop:%.desktop.in
@$(MKDIR_P) $(builddir)/calendar-server
$(AM_V_GEN) $(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@
gnome_shell_calendar_server_CFLAGS = \ gnome_shell_calendar_server_CFLAGS = \
-I$(top_srcdir)/src \ -I$(top_srcdir)/src \
@@ -30,6 +32,7 @@ gnome_shell_calendar_server_LDADD = \
EXTRA_DIST += \ EXTRA_DIST += \
calendar-server/README \ calendar-server/README \
calendar-server/org.gnome.Shell.CalendarServer.service.in \ calendar-server/org.gnome.Shell.CalendarServer.service.in \
$(desktop_in_files) \
$(NULL) $(NULL)
CLEANFILES += \ CLEANFILES += \

@@ -0,0 +1,8 @@
[Desktop Entry]
Name=Evolution Calendar
Exec=evolution -c calendar
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
Icon=evolution
NoDisplay=true
Type=Application
StartupNotify=true

@@ -1,7 +0,0 @@
[Desktop Entry]
_Name=Evolution Calendar
Exec=evolution -c calendar
Icon=evolution
NoDisplay=true
Type=Application
StartupNotify=true

@@ -443,6 +443,8 @@ generate_instances_cb (ECalComponent *comp,
occurrence->rid = e_cal_component_get_recurid_as_string (comp); occurrence->rid = e_cal_component_get_recurid_as_string (comp);
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence); appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
return TRUE;
} }

@@ -1583,7 +1583,7 @@ shell_global_get_current_time (ShellGlobal *global)
*/ */
GAppLaunchContext * GAppLaunchContext *
shell_global_create_app_launch_context (ShellGlobal *global, shell_global_create_app_launch_context (ShellGlobal *global,
int timestamp, guint32 timestamp,
int workspace) int workspace)
{ {
GdkAppLaunchContext *context; GdkAppLaunchContext *context;

@@ -71,7 +71,7 @@ void shell_global_sync_pointer (ShellGlobal *global);
GAppLaunchContext * GAppLaunchContext *
shell_global_create_app_launch_context (ShellGlobal *global, shell_global_create_app_launch_context (ShellGlobal *global,
int timestamp, guint32 timestamp,
int workspace); int workspace);
void shell_global_play_theme_sound (ShellGlobal *global, void shell_global_play_theme_sound (ShellGlobal *global,

@@ -22,6 +22,7 @@
#include "shell-global.h" #include "shell-global.h"
#include "shell-recorder-src.h" #include "shell-recorder-src.h"
#include "shell-recorder.h" #include "shell-recorder.h"
#include "shell-util.h"
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications" #define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled" #define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
@@ -437,17 +438,21 @@ recorder_record_frame (ShellRecorder *recorder,
if (n_captures == 0) if (n_captures == 0)
return; return;
/* if (n_captures == 1)
* TODO: Deal with each capture region separately, instead of dropping image = cairo_surface_reference (captures[0].image);
* anything except the first one. else
*/ image = shell_util_composite_capture_images (captures,
n_captures,
recorder->area.x,
recorder->area.y,
recorder->area.width,
recorder->area.height);
image = captures[0].image;
data = cairo_image_surface_get_data (image); data = cairo_image_surface_get_data (image);
size = captures[0].rect.width * captures[0].rect.height * 4; size = (cairo_image_surface_get_height (image) *
cairo_image_surface_get_stride (image));
/* TODO: Capture more than the first framebuffer. */ for (i = 0; i < n_captures; i++)
for (i = 1; i < n_captures; i++)
cairo_surface_destroy (captures[i].image); cairo_surface_destroy (captures[i].image);
g_free (captures); g_free (captures);
@@ -1075,7 +1080,7 @@ recorder_open_outfile (ShellRecorder *recorder,
if (outfile == -1 && errno != EEXIST) if (outfile == -1 && errno != EEXIST)
{ {
g_warning ("Cannot open output file '%s': %s", filename->str, g_strerror (errno)); g_warning ("Cannot open output file '%s': %s", path, g_strerror (errno));
g_string_free (filename, TRUE); g_string_free (filename, TRUE);
g_free (path); g_free (path);
goto out; goto out;

@@ -10,6 +10,7 @@
#include "shell-global.h" #include "shell-global.h"
#include "shell-screenshot.h" #include "shell-screenshot.h"
#include "shell-util.h"
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications" #define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled" #define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
@@ -233,14 +234,15 @@ do_grab_screenshot (ShellScreenshot *screenshot,
if (n_captures == 0) if (n_captures == 0)
return; return;
else if (n_captures == 1)
priv->image = cairo_surface_reference (captures[0].image);
else
priv->image = shell_util_composite_capture_images (captures,
n_captures,
x, y,
width, height);
/* for (i = 0; i < n_captures; i++)
* TODO: Deal with each capture region separately, instead of dropping
* anything except the first one.
*/
priv->image = captures[0].image;
for (i = 1; i < n_captures; i++)
cairo_surface_destroy (captures[i].image); cairo_surface_destroy (captures[i].image);
g_free (captures); g_free (captures);

@@ -204,6 +204,12 @@ shell_tray_icon_click (ShellTrayIcon *icon,
gdk_error_trap_push (); gdk_error_trap_push ();
remote_window = gtk_socket_get_plug_window (GTK_SOCKET (icon->priv->socket)); remote_window = gtk_socket_get_plug_window (GTK_SOCKET (icon->priv->socket));
if (remote_window == NULL)
{
g_warning ("shell tray: plug window is gone");
gdk_error_trap_pop_ignored ();
return;
}
xwindow = GDK_WINDOW_XID (remote_window); xwindow = GDK_WINDOW_XID (remote_window);
xdisplay = GDK_WINDOW_XDISPLAY (remote_window); xdisplay = GDK_WINDOW_XDISPLAY (remote_window);
screen = gdk_window_get_screen (remote_window); screen = gdk_window_get_screen (remote_window);

@@ -393,18 +393,6 @@ shell_util_need_background_refresh (void)
return FALSE; return FALSE;
} }
void
shell_util_text_insert_keyval (ClutterActor *actor,
guint keyval)
{
ClutterEvent event = { 0 };
event.type = CLUTTER_KEY_PRESS;
event.key.keyval = keyval;
clutter_actor_event (actor, &event, FALSE);
}
static gboolean static gboolean
canvas_draw_cb (ClutterContent *content, canvas_draw_cb (ClutterContent *content,
cairo_t *cr, cairo_t *cr,
@@ -458,3 +446,49 @@ shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
return content; return content;
} }
cairo_surface_t *
shell_util_composite_capture_images (ClutterCapture *captures,
int n_captures,
int x,
int y,
int width,
int height)
{
int i;
cairo_format_t format;
cairo_surface_t *image;
cairo_t *cr;
format = cairo_image_surface_get_format (captures[0].image);
image = cairo_image_surface_create (format, width, height);
cr = cairo_create (image);
for (i = 0; i < n_captures; i++)
{
ClutterCapture *capture = &captures[i];
double capture_scale = 1.0;
/*
* Ignore capture regions with scale other than 1 for now; mutter can't
* produce them yet, so there is no way to test them.
*/
cairo_surface_get_device_scale (capture->image, &capture_scale, NULL);
if ((int) capture_scale != 1)
continue;
cairo_save (cr);
cairo_translate (cr,
capture->rect.x - x,
capture->rect.y - y);
cairo_set_source_surface (cr, capture->image, 0, 0);
cairo_paint (cr);
cairo_restore (cr);
}
cairo_destroy (cr);
return image;
}

@@ -48,12 +48,16 @@ void shell_util_cursor_tracker_to_clutter (MetaCursorTracker *tracker,
gboolean shell_util_need_background_refresh (void); gboolean shell_util_need_background_refresh (void);
void shell_util_text_insert_keyval (ClutterActor *actor,
guint keyval);
ClutterContent * shell_util_get_content_for_window_actor (MetaWindowActor *window_actor, ClutterContent * shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
MetaRectangle *window_rect); MetaRectangle *window_rect);
cairo_surface_t * shell_util_composite_capture_images (ClutterCapture *captures,
int n_captures,
int x,
int y,
int width,
int height);
G_END_DECLS G_END_DECLS
#endif /* __SHELL_UTIL_H__ */ #endif /* __SHELL_UTIL_H__ */