Compare commits

..

31 Commits

Author SHA1 Message Date
Carlos Garnacho
25bbb4cc40 backends: Allow multiple "SW" cursor overlays on the stage
All the upper layers are prepared for multiple onscreen cursors, but
this. All MetaCursorRenderers created would poke the same internal
MetaOverlay in the stage.

This will lead to multiple cursor renderers resorting to the "SW"
rendering paths (as it can be seen with tablet support) to reuse the
same overlay, thus leading to flickering when a different
MetaCursorRenderer takes over the overlay.

Fix this by allowing per-cursor-renderer overlays, their lifetime
is attached to the cursor renderer, so is expected to be tear down
if the relevant device (eg. tablet) disappears.
2016-05-02 13:49:13 +02:00
Carlos Garnacho
3a963d95db wayland: Ensure each MetaWaylandSeat gets its MetaWaylandTabletSeat
Those need to be created in advance in order to handle properly the
events, even on lack of requesting clients.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
212a170ae2 core: Update tablet cursors
On wayland, tablets have their standalone pointer, which must be updated
on events from the corresponding device.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
17f2b4ea43 wayland: Add methods to update the position of different tools' cursors 2016-05-02 12:26:50 +02:00
Carlos Garnacho
4ce4f4eac9 wayland: Implement tool notification
Those must be notified to clients before proximity_in, only if the client
didn't have a resource for this tool previously.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
d7b8db3c96 wayland: Let MetaWaylandTabletManager process tablet events
meta_wayland_tablet_manager_update()/handle_event() are called before
the MetaWaylandSeat counterparts. If the event comes from a device
managed by MetaWaylandTabletManager, the event will be exclusively handled
by it.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
754a4bf287 wayland: Implement wl_tablet_tool.set_cursor
Each tool has its own MetaCursorRenderer instance, which is created/destroyed
upon proximity, and possibly updated through focus and set_cursor calls in
between.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
d46586e383 wayland: Implement wl_tablet_tool device event emission
This takes care of the emission of motion/down/up/button, in addition
to the extra distance/pressure/tilt axes.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
38bff73d30 wayland: Add focus management to MetaWaylandTabletTool
Tools can now switch between surfaces, which implies the emission
of wl_tablet_tool.proximity_in/out events.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
aaa59ab6a7 wayland: Initialize the MetaWaylandTabletManager 2016-05-02 12:26:50 +02:00
Carlos Garnacho
dff045963a wayland: Add MetaWaylandTabletManager
This struct keeps the server side information for the wl_tablet_manager
global resource. It keeps the clients requesting this interface, and
does keep track of the plugged tablet devices, so
wl_tablet_manager.device_added is emitted on the expected clients.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
6bbd6d2948 wayland: Add MetaWaylandTabletSeat
This object groups all the tablets/tools pertaining to a given seat.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
2ea01aa428 wayland: Add MetaWaylandTabletTool
This struct holds the server-side information of a wl_tablet_tool, which
represents an specific tool of an specific tablet, and is unique as such.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
1a31721e57 wayland: Add MetaWaylandTablet
This (very basic at the moment) struct keeps server-side information
for wl_tablet resources.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
033c78a7a2 protocol: Generate code for the tablet protocol
This is provided by wayland-protocols
2016-05-02 12:26:50 +02:00
Carlos Garnacho
f1afc604d9 backend: Realize cursor on default MetaCursorRenderer paths
The cursor is realized on x11/native subclasses, but not if a base
MetaCursorRenderer is created.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
c89edb29f9 wayland: Refactor MetaWaylandSurfaceRoleCursor
Move into a standalone meta-wayland-surface-role-cursor.[ch], and
make generic enough to work for pointe and additional (eg. tablet)
cursors.

Most notably, the sprite is now kept completely internal to the
cursor role, and updates are routed through the given
MetaCursorRenderer (which may be the default one for the pointer,
or something else).

The way cursor updates after cursor surface destruction has also
been reworked, the pointer will just keep track of the last cursor
surface, so older surfaces being destroyed don't trigger pointer
rechecks/updates.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
c28fc68df1 wayland: Add MetaWaylandSurface::destroy signal
There's places where it would be convenient to add listeners to this,
so add the signal. The signal is only emitted once during destruction,
it is convenient for the places where we want notifications at a time
the object is still alive, as opposed to weak refs which notify after
the fact.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
5774875ab9 evdev: Avoid updating seat pointer position on tablet events 2016-05-02 12:26:50 +02:00
Carlos Garnacho
422284e0cd evdev: Implement ClutterInputDevice::update_from_tool
This vfunc pokes the libinput_tool in order to find out the currently
available axes, and updates the device as such.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
c72ad23b84 main: Allow updating device axes from the current tool
This way devices are ensured the proper axis status at the time
of processing the events.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
d0d343352c evdev: Implement tablet events
Tablet proximity, motion and button events are translated into ClutterEvents,
and the device state is updated accordingly.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
feff353081 evdev: Implement ClutterInputDeviceTool
This will be backed by a libinput_tool, the type and serial are
fetched from there.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
216298dfad events: Add proximity events
These events will be sent on tool proximity of tablet events.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
efd90eb471 event: Add ClutterInputDeviceTool information to clutter events
These can be used to determine the tool that's being in use for a given event
2016-05-02 12:26:50 +02:00
Carlos Garnacho
63b1a55283 input-device: Add ClutterInputDeviceTool
This is an unique opaque struct that identifies a given tool of
a given device.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
aa0eea9814 enums: Add rotation/slider axes
These will be useful for the tablet tools that have these features.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
fe5f12ddb5 evdev: Map LIBINPUT_DEVICE_CAP_TABLET to CLUTTER_TABLET_DEVICE
This is so tablet devices have the correct ClutterInputDeviceType
2016-05-02 12:26:50 +02:00
Carlos Garnacho
8110197df4 evdev: Pass axis parameters when notifying absolute motion events
This will be useful for tablet support, NULL is given in the current
callers.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
8d290f182a input-device: Disconnect signals on actors where the device has a cursor
Otherwise the signals are left dangling if the device is removed, causing
possible invalid memory accesses afterwards.
2016-05-02 12:26:50 +02:00
Carlos Garnacho
9d06421c1f evdev: Use device name rather than sysname
The device name is something more natural, similar to what's seen
in X11, the sysname is rather the event node basename, which may
also vary depending on device insertion/detection time.
2016-05-02 12:26:50 +02:00
1000 changed files with 57865 additions and 114753 deletions

30
.gitignore vendored
View File

@@ -36,26 +36,17 @@ mutter-wayland.desktop
stamp-h1 stamp-h1
*.gmo *.gmo
*.make *.make
*.log
*.trs
*~ *~
stamp-it stamp-it
.intltool-merge-cache .intltool-merge-cache
ABOUT-NLS
POTFILES POTFILES
Makevars.template
po/*.header
po/*.pot po/*.pot
po/*.sed
po/*.sin
Rules-quot
libmutter.pc libmutter.pc
mutter mutter
mutter-restart-helper mutter-restart-helper
mutter-test-client mutter-test-client
mutter-test-runner mutter-test-runner
mutter-test-unit-tests mutter-test-unit-tests
mutter-test-headless-start-test
mutter-all.test mutter-all.test
org.gnome.mutter.gschema.valid org.gnome.mutter.gschema.valid
org.gnome.mutter.gschema.xml org.gnome.mutter.gschema.xml
@@ -72,8 +63,6 @@ src/stamp-meta-enum-types.h
src/meta-dbus-display-config.[ch] src/meta-dbus-display-config.[ch]
src/meta-dbus-idle-monitor.[ch] src/meta-dbus-idle-monitor.[ch]
src/meta-dbus-login1.[ch] src/meta-dbus-login1.[ch]
src/meta-dbus-remote-desktop.[ch]
src/meta-dbus-screen-cast.[ch]
src/gtk-primary-selection-protocol.c src/gtk-primary-selection-protocol.c
src/gtk-primary-selection-server-protocol.h src/gtk-primary-selection-server-protocol.h
src/gtk-shell-protocol.c src/gtk-shell-protocol.c
@@ -86,25 +75,7 @@ src/relative-pointer-unstable-v*-protocol.c
src/relative-pointer-unstable-v*-server-protocol.h src/relative-pointer-unstable-v*-server-protocol.h
src/pointer-constraints-unstable-v*-protocol.c src/pointer-constraints-unstable-v*-protocol.c
src/pointer-constraints-unstable-v*-server-protocol.h src/pointer-constraints-unstable-v*-server-protocol.h
src/xdg-foreign-unstable-v*-protocol.c
src/xdg-foreign-unstable-v*-server-protocol.h
src/xdg-output-unstable-v1-protocol.c
src/xdg-output-unstable-v1-server-protocol.h
src/xwayland-keyboard-grab-unstable-v1-protocol.c
src/xwayland-keyboard-grab-unstable-v1-server-protocol.h
src/tablet-unstable-v*-protocol.c
src/tablet-unstable-v*-server-protocol.h
src/text-input-unstable-v*-protocol.c
src/text-input-unstable-v*-server-protocol.h
src/keyboard-shortcuts-inhibit-unstable-v*-protocol.c
src/keyboard-shortcuts-inhibit-unstable-v*-server-protocol.h
src/linux-dmabuf-unstable-v*-protocol.c
src/linux-dmabuf-unstable-v*-server-protocol.h
src/xdg-shell-protocol.c
src/xdg-shell-server-protocol.h
src/wayland-eglstream-controller-server-protocol.h
src/meta/meta-version.h src/meta/meta-version.h
src/libmutter-*.pc
doc/reference/*.args doc/reference/*.args
doc/reference/*.bak doc/reference/*.bak
doc/reference/*.hierarchy doc/reference/*.hierarchy
@@ -130,4 +101,3 @@ ltsugar.m4
ltversion.m4 ltversion.m4
lt~obsolete.m4 lt~obsolete.m4
.dirstamp .dirstamp
**/tags.*

664
NEWS
View File

@@ -1,667 +1,3 @@
3.30.0
======
Translators:
Fran Dieguez [gl], Balázs Meskó [hu], Rūdolfs Mazurs [lv],
Trần Ngọc Quân [vi], Ask Hjorth Larsen [da], gogo [hr]
3.29.92
=======
* Avoid crash when a cursor is not found [Sebastian; #254]
* Fix screen rotation regression [Jonas; #216]
* Handle requests to unmanaged windows gracefully [Jonas; #240]
* Move popups together with their parent [Jonas; #274]
* Fix non-lowercase letters on virtual key devices [Carlos; gnome-shell#135]
* Misc. bug fixes [Iain, Jonas; #223, #192, #279]
Contributors:
Jonas Ådahl, Carlos Garnacho, Sebastian Keller, Iain Lane, Robert Mader,
Daniel van Vugt
Translators:
Gwan-gyeong Mun [ko], Kukuh Syafaat [id], Milo Casagrande [it],
Anders Jonsson [sv], Rafael Fontenelle [pt_BR], Marek Cernocky [cs]
3.29.91
=======
* Various crash fixes [Olivier, Iain; #255, #223]
* Fix lock up with some DRI drivers [Alex; #127]
* Send correct button codes from virtual evdev devices [Jonas; !190]
* Improve grab-device clock updates on X11 [Jeff; !174]
* Fix popups closing immediately on key down [Jonas; !180]
* Prevent clients from modifying the shared keymap [Jonas; #784206]
Contributors:
Jonas Ådahl, Andrea Azzarone, Piotr Drąg, Olivier Fourdan, Carlos Garnacho,
Jan Grulich, Iain Lane, Alex Villacís Lasso, Jeff Smith, Daniel van Vugt
Translators:
Matej Urbančič [sl], Mario Blättermann [de], Piotr Drąg [pl],
Aurimas Černius [lt], Yi-Jyun Pan [zh_TW], Emin Tufan Çetin [tr],
Fabio Tomat [fur], Bruce Cowan [en_GB]
3.29.90
=======
* Various crash fixes [Olivier, Jonas, Florian; #189, #70, #194, #15, #130]
* Don't expose resolutions that are below the minimum [Andrea; #793223]
* Remove support for preference overrides [Florian; #786496]
* Misc. bug fixes and cleanups [Daniel, Jonas, Florian; #131, #245, !176]
Contributors:
Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Florian Müllner, Kevin Tamool,
Daniel van Vugt
Translators:
Daniel Mustieles [es], Claude Paroz [fr]
3.29.4
======
* Fix crash with parent-less modal dialogs [Olivier; #174]
* Preserve paint volumes where possible to optimize CPU usage [Carlos; #782344]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Iain Lane, Bastien Nocera
Translators:
Daniel Șerbănescu [ro]
3.29.3
======
* Fix Korean Hangul support on wayland [Changwoo; #152]
* Improve support for proprietary Nvidia driver [Jonas; #790316]
* Only upload HW cursor sprite to the GPU that will display them [Jonas; #77]
* Improve EGLstream support [Miguel; #2, #782575]
* Remove MetaScreen to prepare for non-mandatary X11 dependency
[Armin, Jonas; #759538]
* Misc. bug fixes [Olivier, Jonas, Sam; #160, !130, #786929, #788834]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Armin Krezović, Corentin Noël,
Changwoo Ryu, Sam Spilsbury, Daniel Stone, Marco Trevisan (Treviño),
Miguel A. Vico, Daniel van Vugt
Translators:
Yi-Jyun Pan [zh_TW], Jordi Mas [ca], Daniel Șerbănescu [ro], Fabio Tomat [fur]
3.29.2
======
* Fix size change animations on wayland [Georges; #780292]
* Handle touch events on server-side titlebars [Carlos; #770185]
* Misc. bug fixes [Florian, Olivier, Jonas, Georges; #134, #124, !96, #138,
!102, #781471, #150]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Florian Müllner,
Georges Basile Stavracas Neto, Marco Trevisan (Treviño), Daniel van Vugt
Translators:
Daniel Șerbănescu [ro], Marcos Lans [gl], Dz Chen [zh_CN]
3.29.1
======
* Fix various input-method regressions [Carlos, Olivier; #65, #74, #66, #112]
* Fix wayland build on FreeBSD [Ting-Wei; #792280, #792717]
* Fix swapped colors in screenshots (again) [Carlos; #72]
* Allow building with elogind [Rasmus; !46]
* Consider display rotation for cursor [Olivier; #85]
* Fall back to non-modifier GBM surfaces [Daniel; #84]
* Take inhibitors into account for monitoring idle [Bastien; #705942]
* Misc. bug fixes [handsome-feng, Olivier, Mario, Jonas; !45, #83, #104,
gnome-shell#157, #130, #21]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, handsome-feng, Yussuf Khalil,
Ting-Wei Lan, Aleksandr Mezin, Alberts Muktupāvels,
Georges Basile Stavracas Neto, Bastien Nocera, Benjamin Otte,
Mario Sanchez Prada, Daniel Stone, Ray Strode, Rasmus Thomsen,
Marco Trevisan (Treviño), Daniel van Vugt
Translators:
Emin Tufan Çetin [tr], Dušan Kazik [sk], Matej Urbančič [sl]
3.28.0
======
* Fix xdg-foreign regression [Carlos; #63]
Contributors:
Carlos Garnacho, Georges Basile Stavracas Neto
Translators:
Marek Cernocky [cs], Ask Hjorth Larsen [da], Chao-Hsiung Liao [zh_TW],
Anders Jonsson [sv], Mart Raudsepp [et]
3.27.92
=======
* Fix use of modifiers with multi-GPU systems [Louis-Francis; #18]
* Add xdg-shell stable support [Jonas; #791938]
* Fix scaling of icons in titlebar buttons [Egmont; #23]
* Implement missing wacom functionality on X11 [Carlos; #48]
* Force 8-bit RGB config [Jonas; #2]
* Misc. bug fixes [Jonas, Olivier, Robert; #6, #27, #792203]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Egmont Koblinger, Robert Mader,
Bastien Nocera, Louis-Francis Ratté-Boulianne
Translators:
Daniel Mustieles [es], Марко Костић [sr], Милош Поповић [sr@latin],
Fran Dieguez [gl], Balázs Úr [hu], Gwan-gyeong Mun [ko], Rūdolfs Mazurs [lv],
Milo Casagrande [it], Mario Blättermann [de], GNOME Translation Robot [gd,
nl], Claude Paroz [fr], Aurimas Černius [lt]
3.27.91
=======
* Fix handling of trackball settings on wayland [Carlos; #787804]
* Apply font settings on wayland [Daniel; #645433]
* Fix keybindings getting mixed up with some layouts [Jonas; #789300]
* Fix bluetooth mouse cursor disappearing after idle [Benoit; #761067]
* Support platforms that export EGL_KHR_platform_gbm [memeka; #780668]
* Add keyboard accessibility support on wayland [Olivier; #788564]
* Fix missing cursor when using screen magnifier [Carlos; #754806]
* Fix external monitor shutting off on wayland when lid closes [Jonas; #788915]
* Add xdg-output support [Olivier; #787363]
* Add Xwayland grab keyboard support [Olivier; #783342]
* Allow shortcut inhibition of the super key [Olivier; #790627]
* Take "panel orientation" drm_connector property into account [Hans; #782294]
* Fix focus window ending up below other windows on wayland [Olivier; #780820]
* Fix maximized windows restoring to a tiny size on wayland [Olivier; #783901]
* Fix tap-and-drag setting on X11 [Jonas; #775755]
* Fix handling of single-touch devices on wayland [Carlos; #792005]
* Support tiled/compressed buffers [Daniel; #785779]
* Port screencast support to pipewire 0.1.8 [Jonas; #792854]
* Add support for third stylus button on newer tablets [Jason; #790033]
* Fix background corruption regression on nvidia [Jonas; #739178]
* Misc. bug fixes [Jonas, Rui, Michael, Marco, Carlos, Olivier, Philip, Piotr,
Ting-Wei, Daniel, Jeremy, Hans, Florian, Ray, Jeff, George, Gwan-gyeong;
#789153, #788493, #784314, #789227, #789223, #789277, #782344, #789552,
#789553, #788695, #789984, #788764, #789386, #784545, #790336, #790358,
#791022, #791006, #789070, #772218, #791383, #791809, #776220, #791916,
#792281, #790309, #791371, #792527, #792599, #788834, #792765, #792062,
#645460, #792853, !2, #792818, #8, #12, #789501, #10, #789961, #13, !15, #1,
#26, #28, #35, #36, #38]
Contributors:
Jonas Ådahl, Jeremy Bicha, Michael Catanzaro, Piotr Drąg, Olivier Fourdan,
Carlos Garnacho, Jason Gerecke, Hans de Goede, Benoit Gschwind,
Peter Hutterer, George Kiagiadakis, Ting-Wei Lan, Rui Matos, memeka,
Florian Müllner, Gwan-gyeong Mun, Jeremy Nickurak, Marc-Antoine Perennou,
Jeff Smith, Daniel Stone, Ray Strode, Marco Trevisan (Treviño),
Daniel van Vugt, Philip Withnall
Translators:
Khaled Hosny [ar], Kjartan Maraas [nb], Piotr Drąg [pl],
Rafael Fontenelle [pt_BR], Christian Kirbach [de], Anders Jonsson [sv],
Charles Monzat [fr], Marek Cernocky [cs], Muhammet Kara [tr],
Milo Casagrande [it], Pawan Chitrakar [ne], Yosef Or Boczko [he],
Kukuh Syafaat [id], Daniel Mustieles [es], Fabio Tomat [fur],
Kristjan SCHMIDT [eo], Balázs Úr [hu], Andika Triwidada [id],
Fran Dieguez [gl], gogo [hr]
3.27.1
======
* Work with clients that require older linux_dmabuf protocol [Daniel; #788558]
* Support hybrid GPU systems [Jonas; #785381]
* Prevent crash when closing maximized windows [Jonni; #788666]
* Use the correct monitor for HiDPI scaling of shell chrome [Jonas; #788820]
* Fix unredirection of fullscreen windows [Rui, Jonas; #788493]
* Fix list of supported monitor scales on X11 [Jonas; #788901]
* Misc. bug fixes [Florian, Jonas, Marco; #788572, #788569, #788607, #788860,
#788921]
Contributors:
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Daniel Stone,
Marco Trevisan, Jonni Westphalen
Translations:
Xavi Ivars [ca@valencia]
3.26.1
======
* Fix crash when respawning shortcut inhibitor dialog [Olivier; #787568]
* Fix crash during monitor configuration migration [Carlos, Jonas; #787668]
* Fix multihead regressions in X11 session [Jonas; #787477]
* Fix screen rotation regressions [Hans; #787836]
* Fix keybindings not being resolved with non-latin layouts [Jonas; #787016]
* Support snap packages for sandboxed app IDs [Marco; #788217]
* Fix crash when reconnecting tablet device [Jason; #787649]
* Support running headless [Jonas; #730551, #787637]
* Support _NET_RESTACK_WINDOW and ConfigureRequest siblings [Vasilis; #786365]
* Fix monitor layout not being remembered across sessions [Jonas; #787629]
* Make sure to export _NET_NUMBER_OF_DESKTOPS [Florian; #760651]
* Allow resizing of tiled windows [Georges, Florian; #645153]
* Export tiling information to clients [Georges; #751857]
* Misc. bug fixes [Jonas, Florian, Jeremy, Rico; #787570, #787715, #787953,
#788049, #788199, #788292, #788197]
Contributors:
Jonas Ådahl, Andrea Azzarone, Georges Basile Stavracas Neto, Hans de Goede,
Olivier Fourdan, Carlos Garnacho, Jason Gerecke, Vasilis Liaskovitis,
Rui Matos, Florian Müllner, Jeremy Soller, Marco Trevisan, Rico Tzschichholz
Translations:
Matej Urbančič [sl], gogo [hr], Cheng-Chia Tseng [zh_TW]
3.26.0
======
Contributors:
Florian Müllner
Translations:
Trần Ngọc Quân [vi], Inaki Larranaga Murgoitio [eu], Jordi Mas [ca],
Anders Jonsson [sv], Alexander Shopov [bg], Ask Hjorth Larsen [da],
Jean-Baptiste Holcroft [fr], A S Alam [pa]
3.25.92
=======
* Add screencast and remote desktop support [Jonas; #784199]
* Support running with no attached monitors [Jonas; #730551]
* Add a vertical gradient effect to background actor [Alessandro; #786618]
* Misc. bug fixes [Mario, Daniel, Piotr, Jonas, Bastien; #786619, #786677,
#772218, #786918, #760670]
Contributors:
Jonas Ådahl, Alessandro Bono, Piotr Drąg, Bastien Nocera,
Mario Sanchez Prada, Daniel Stone
Translations:
Marek Cernocky [cs], Aurimas Černius [lt], Piotr Drąg [pl],
Fran Dieguez [gl], gogo [hr], Dušan Kazik [sk], Milo Casagrande [it],
Jordi Mas [ca], Cheng-Chia Tseng [zh_TW], Марко Костић [sr],
Милош Поповић [sr@latin], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
Ask Hjorth Larsen [da], Piotr Drąg [it, lt], Jiri Grönroos [fi],
Emin Tufan Çetin [tr], Wolfgang Stöggl [de], Kukuh Syafaat [id],
Yuras Shumovich [be], Changwoo Ryu [ko], Alexander Shopov [bg],
Rafael Fontenelle [pt_BR], Balázs Úr [hu]
3.25.91
=======
* Reduce memory use of suspended instances [Jonas; #786299]
* Make supported scales determination saner [Rui; #786474]
* Fix crash on inhibit-shortcuts dialog reponse [Jonas; #786385]
* Support libinput's tag-and-drag setting [freeroot; #775755]
* Avoid overlapping keybindings with multiple layouts [Jonas; #786408]
* Fix non-transformed cursor on rotated monitors [Jonas; #786023]
* Avoid unnecessary work during background painting [Alessandro; #783512]
* Misc. bug fixes [Alberts, Jonas, Mario; #691611, #786300, #777732, #786568]
Contributors:
freeroot, Jonas Ådahl, Alessandro Bono, Carlos Garnacho, Rui Matos,
Alberts Muktupāvels, Mario Sanchez Prada
Translations:
Muhammet Kara [tr], Claude Paroz [fr], Мирослав Николић [sr, sr@latin],
Pawan Chitrakar [ne], Kukuh Syafaat [id]
3.25.90
=======
* Add zwp_linux_dmabuf_v1 support [Daniel; #785262]
* Add (x)wayland shortcut inhibitor support [Olivier; #783342]
* Misc. bug fixes [Daniel, Carlos, Cosimo; #785263, #785347, #767805]
Contributors:
Jonas Ådahl, Cosimo Cecchi, Olivier Fourdan, Carlos Garnacho, Daniel Stone
Translations:
Fabio Tomat [fur], Kukuh Syafaat [id], Aurimas Černius [lt],
Daniel Mustieles [es], Baurzhan Muftakhidinov [kk], Jordi Mas [ca],
Matej Urbančič [sl], Marek Cernocky [cs], gogo [hr], Fran Dieguez [gl],
Balázs Meskó [hu]
3.25.4
======
* Do not throttle motion events on tablet tools [Carlos; #783535]
* Handle left-handed mode on pen/eraser devices [Carlos; #782027]
* Add wl_surface.damage_buffer() support [Jonas; #784080]
* Fix crash when moving across on-adjacent monitors [Jonas; #783630]
* Fix window moving/resizing via tablet tools [Jason; #777333]
* Support fractional monitor scaling [Jonas, Marco; #765011]
* Keep override-redirect windows stacked on top [Rui; #780485]
* Implement tablet rings/strips configuration [Carlos; #782033]
* Support tablet wheel events on wayland [Jason; #783716]
* Move g-s-d xrandr functionality into mutter [Rui; #781906]
* Misc. bug fixes [Florian, Jason, Miguel, Carlos, Jonas; #783502, #784009,
#784223, #784272, #784402, #784881, #762083, #784867, #781723]
Contributors:
Jonas Ådahl, Miguel A. Vico, Emmanuele Bassi, Carlos Garnacho, Jason Gerecke,
Rui Matos, Florian Müllner, Marco Trevisan (Treviño)
3.25.3
======
* Ignore hotplug-mode-update value on startup [Marco; #783073]
* Implement configurable monitor scales on X11 [Jonas; #777732]
* Fix handling of tiled monitors [Jonas; #781723]
* Handle multiple keycodes for keysym [Christian; #781223]
* Consider subsurfaces when grabbing [mindtree; #781811]
* Fix logic for HiPDPI scaling of TV outputs [Christian; #777347]
* Fix handling of left-handed mode on pen/eraser devices [Carlos; #782027]
* Fix output cycling in non-display-attached tablets [Carlos; #782032]
* Fix wacom cursor offset on wayland [Jason; #784009]
* Handle EXIF orientation of backgrounds [Silvère; #783125]
* Misc. bug fixes [Piotr, Tim, Bastien, Jonas, Florian, Benoit, Carlos; #772218,
#783161, #780407, #783113, #783293, #783505, #781703]
Contributors:
mitchmindtree, Jonas Ådahl, Ikey Doherty, Piotr Drąg, Carlos Garnacho,
Jason Gerecke, Benoit Gschwind, Christian Kellner, Silvère Latchurié,
Tim Lunn, Florian Müllner, Bastien Nocera, Marco Trevisan (Treviño)
Translations:
Fabio Tomat [fur], Kukuh Syafaat [id], Khaled Hosny [ar],
Daniel Mustieles [es]
3.25.2
======
* Fix frame updates on hide-titlebar-when-maximized changes [Florian; #781862]
* Fix accessible screen coordinates on X11 [Florian; #781902]
* Use less CPU when rendering fast-updating windows [Carlos, Emmanuele; #782344]
* Compute geometry of clients that don't set one explicitly [Olivier; #782213]
* Fix copy+paste of UTF8 strings between X11 and wayland [Carlos; #782472]
* Fix non-wayland builds [Chris; #780533]
* Add plugin vfunc to implement a custom force-quit dialog [Carlos; #711619]
* Fix swapped red and blue channels in CoglTexture data [Carlos; #779234
* Fix build where libtool's link_all_deplibs defaults to 'no' [Marco; #782821]
* Fix glitches when opening a window maximized [Olivier; #781353, #782183]
* Fix wrong cursor after window underneath the pointer changed [Carlos; #755164]
* Implement support for disable-while-typing option [Evan; #764852]
* Emit size-change signal when tiling [Alessandro; #782968]
* Misc. bug fixes [Nigel, Matthias, Jonas; #759085, #780215, #782156, #782152]
Contributors:
Jonas Ådahl, Emmanuele Bassi, Alessandro Bono, Olivier Fourdan,
Carlos Garnacho, Matthias Liertzer, Florian Müllner, Nigel Taylor,
Marco Trevisan (Treviño), Chris Vine, Evan Welsh
Translations:
Fabio Tomat [fur], Jordi Mas [ca], Mario Blättermann [de],
Emin Tufan Çetin [tr], Balázs Úr [hu]
3.25.1
======
* Always sync window geometry on state changes [Jonas; #780292]
* Use EGL instead of GLX when drawing using GLES [Jonas; #771636]
* Fix HiDPI detection on vertical monitor layouts [Carlos; #777687]
* Get double-click timing from desktop mouse settings [Armin; #771576]
* Scale relative motion deltas with monitor scale [Jonas, Carlos; #778119]
* Use texture fallback when setting hardware cursor fails [Jente; #770020]
* Fix lock-up when using additional theme variants [Shantanu; #780254]
* Rework low-level monitor configuration [Jonas; #777732]
* Fix building with GLES2 instead of GL [Mario; #781398]
* Misc. bug fixes [Jonas, Piotr, Philip; #780304, #772218, #781242, #781391]
Contributors:
Jonas Ådahl, Philip Chimento, Piotr Drąg, Carlos Garnacho, Shantanu Goel,
Jente Hidskes, Armin Krezović, Rui Matos, Florian Müllner, Mario Sanchez Prada
Translations:
Yuras Shumovich [be], Yosef Or Boczko [he], Tom Tryfonidis [el],
Fabio Tomat [fur], Kukuh Syafaat [id]
3.24.0
======
Translations:
Yuri Myasoedov [ru], Rūdolfs Mazurs [lv], Jordi Mas [ca]
3.23.92
=======
* Properly handle EGLOutput acquire errors [Jonas, Miguel; #779112]
* Fix crash when a window closes during Alt+Tab [Rui; #779483]
* Implement DnD handling code in wayland [Hyungwon; #765003]
* Fix fallout from pixel conversion optimization in 3.23.91 [Carlos; #779234]
* Fix mouse input stopping to work in applications [Carlos; #763246]
* Fix DnD between QT5 and GTK3 applications on wayland [Carlos; #779757]
* Make EDID reading less fragile [Jonas; #779837]
* Add support for tablet grouping [Carlos; #779986]
* Misc. bug fixes and cleanups [Rui, Jonas; #779436, #779001, #779745]
Contributors:
Jonas Ådahl, Miguel A. Vico, Olivier Fourdan, Carlos Garnacho,
Hyungwon Hwang, Rui Matos
Translations:
Chao-Hsiung Liao [zh_TW], Sveinn í Felli [is], Ask Hjorth Larsen [da],
Changwoo Ryu [ko], Aurimas Černius [lt], GNOME Translation Robot [gd],
Marek Černocký [cs], Fran Dieguez [gl], Dušan Kazik [sk]
3.23.91
=======
* Give libinput read-only access to /sys [Carlos; #778472]
* Allow edge-scrolling without 2-finger-scroll capable devices [Rui; #778554]
* Fullscreen windows on the requested monitor on wayland [Rui; #772525]
* Implement threaded swap_event fallback for NVIDIA driver [Owen; #779039]
* Avoid pixel conversions when storing textures from cairo [Carlos; #779234]
* Misc. bug fixes [Piotr, Rui, Florian; #772218, #776919, #778831, #642652]
Contributors:
Piotr Drąg, Carlos Garnacho, Rui Matos, Florian Müllner, Owen W. Taylor
Translations:
Inaki Larranaga Murgoitio [eu], Daniel Mustieles [es], Claude Paroz [fr],
Mario Blättermann [de], Kjartan Maraas [nb], Piotr Drąg [pl],
Andika Triwidada [id], Anders Jonsson [sv], Milo Casagrande [it],
Fabio Tomat [fur], Rafael Fontenelle [pt_BR],
Мирослав Николић [sr, sr@latin], Balázs Meskó [hu], Chao-Hsiung Liao [zh_TW]
3.23.90
=======
* Fix window menu placement with HiDPI [Jonas; #776055]
* Improve EGLStream support [Jonas; #773629]
* Start moving low-level monitor configuration into mutter [Jonas; #777732]
* Fix erroneous key event repeats [Rui; #774989]
* Don't hardcode seat ID in ClutterDeviceManager [Carlos; #778092]
* Fix "ghost" cursors in multi-monitor setups [Jonas; #771056]
* Use eglGetPlatformDisplay [Adam; #772422]
* Fix erratic raise_or_lower behavior [Jose; #705200]
* Fix coordinate mapping of absolute devices [Carlos; #774115]
* Show OSD on tablet mode switches [Carlos; #771098]
* Make mutter libs parallel installable [Jonas; #777317]
* Only apply keymap when not running nested [Jonas; #777800]
* Set right scale for tablet tool cursors on HiDPI [Carlos; #778474]
* Adjust server-side shadows to match Adwaita [Juraj; #744667]
* Misc. bug fixes [Jonas, Bastien, Carlos, Peter, Lionel, Jeremy, Florian;
#774891, #777389, #777691, #778262, #776543, #778684, #778699, #744667]
Contributors:
Jonas Ådahl, Jeremy Bicha, Piotr Drąg, Juraj Fiala, Carlos Garnacho,
Peter Hutterer, Adam Jackson, Lionel Landwerlin, Jose Marino, Rui Matos,
Florian Müllner, Bastien Nocera
Translations:
Kjartan Maraas [nb], Mandy Wang [zh_CN], Marek Černocký [cs],
Anders Jonsson [sv], Dušan Kazik [sk], Piotr Drąg [pl], Matej Urbančič [sl]
3.23.3
======
* Fix frequent freezes in multihead setups on wayland [Rui; #774557]
* Preserve root window mask on XSelectionRequest [Olivier; #776128]
* Misc. bug fixes [Carlos, Florian, Rui, Olivier; #775478, #774891, #775986,
#776036]
Contributors:
Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
3.23.2
======
* Stack docks below other windows on fullscreen monitors [Rui; #772937]
* Fix popup grabs blocking screen lock on wayland [Rui; #771235]
* Handle touchpad pinch gestures with more than two fingers [Carlos; #765937]
* Implement drawing tablet support on X11 [Carlos; #773779]
* Fix some Wine games starting minimized [Carlos; #774333]
* Fix switching between two finger- and edge scrolling on wayland [Rui; #771744]
* Implement support for EGLStream/EGLDevice [Jonas; #773629]
* Add size_changed vfunc to handle async client size changes [Rui; #770345]
* Change focus window on clicks with any modifiers [Rui; #746642]
* Misc. bug fixes and cleanups [Carlos, Daniel, Jonas, Rui; #771067, #774330, #774613,
#771297, #774135, #774827, #774923]
Contributors:
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Daniel Stone
Translations:
Kjartan Maraas [nb]
3.23.1
======
* Fix handling of Escape shortcut in force-quit dialog [Landry; #737109]
* Improve pointer constraints support [Jonas; #771859]
* Really fix framebuffer capture origin offset [Rui; #771502]
* Fix session going into idle mode immediately on startup [Rui; #772839]
* Fix mirror mode with stage views [Rui; #773115]
* Fall back to X with connectors spread across multiple GPUs [Ray; #771442]
* Fix various crashes on wayland [Jonas, Carlos; #771646, #771858, #772929]
* Fix various placement issues on wayland [Olivier, Jonas, Sjoerd; #772729,
#768039, #771841, #771841, #773141]
* Misc. bug fixes [Rui, Jonas, Olivier; #771019, #773116, #772914, #773210]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Landry MINOZA,
Sjoerd Simons, Ray Strode
Translations:
Theppitak Karoonboonyanan [th], Kjartan Maraas [nb], Hannie Dumoleyn [nl],
liushuyu [zh_CN]
3.22.1
======
* Fix feedback loop between StClipboard and X11 bridge [Carlos; #760745]
* Fall back gracefully if DRM plane rotation fails [Carlos; #772512]
* Approximate native monitor backend behavior to X [Rui; #772176]
* Fix crash on VT switch on wayland [Jonas; #771646]
* Expose Flatpak ID for application matching [Florian; #772613, #772614]
Contributors:
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Olav Vitters
Translations:
Inaki Larranaga Murgoitio [eu], Milo Casagrande [it]
3.22.0
======
* Fix wayland crashes [Jonas; #771305, #771345, #770940, #771495]
* Fix display rotation on wayland [Jonas; #770672]
* Fix framebuffer capture origin offset [Rui; #771502]
* Misc. bug fixes [Jonas, Florian, Carlos; #770937, #771536, #771628, #771549]
Contributors:
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner
Translations:
Ask Hjorth Larsen [da], Charles Monzat [fr], Stas Solovey [ru],
Tom Tryfonidis [el], David King [en_GB]
3.21.92
=======
* Fix absolute pointer motion events on wayland [Jonas; #770557]
* Default to using stage views [Jonas; #770366]
* Fix animated cursors on wayland [Rui; #749913]
* Fix various crashes on wayland [Jonas; #757568, #770727, #770992]
* Fix screen capture for stage views not at (0, 0) [Jonas; #770127]
* Compress motion events instead of discarding them [Jonas; #771049]
* Fix XWayland pointer warp emulation [Jonas; #771050]
* Add common monitor modes in KMS backend [Rui; #744544]
* Temporarily use g-s-d schemas for tablet configuration [Carlos; #771315]
* Misc. bug fixes [Jonas, Carlos; #770402, #770647, #770991, #770994, #770929]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
Translations:
Changwoo Ryu [ko], Baurzhan Muftakhidinov [kk], Anders Jonsson [sv],
Tiago Santos [pt], Rafael Fontenelle [pt_BR], Mario Blättermann [de],
Alexander Shopov [bg], Rūdolfs Mazurs [lv], Fran Dieguez [gl],
Trần Ngọc Quân [vi], Piotr Drąg [pl], Мирослав Николић [sr, sr@latin]
3.21.91
=======
* Add support for xdg-foreign protocol [Jonas; #769786]
* Support monitor rotation on wayland [Carlos; #745079]
* Port xdg-shell implementation to unstable v6 [Jonas; #769936]
* Handle unsupported buffer sizes more gracefully [Olivier; #770387]
* Use the same output naming logic as the X server on wayland [Rui; #770338]
* Fix replies in gnome-shell's chat notifications on wayland [Florian; #758167]
* Misc. bug fixes and cleanups [Bastien, Sjoerd, Jonas; #769276, #769636,
#770131, #770324, #769731]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner,
Bastien Nocera, Sjoerd Simons
Translations:
Piotr Drąg [pl], Mario Blättermann [de], Andika Triwidada [id],
Enrico Nicoletto [pt_BR], Мирослав Николић [sr, sr@latin]
3.21.90
=======
* Consider XDG_SESSION_TYPE when determining session type [Jouke; #759388]
* Re-add support for edge scrolling on some touchpads [Bastien; #768245]
* Support mouse and trackball acceleration profile [Jonas; #769179]
* Draw monitor contentn to individual framebuffer [Jonas; #768976]
* Support virtual input devices [Jonas, Carlos; #765009]
* Set correct output scale on hotplug [Jonas; #769505]
* Misc. bug fixes and cleanups [Florian, Jonas, Thomas, Bastien, Carlos;
#769014, #769024, #769054, #769070, #769036, #769305, #769578, #769800,
#769073]
Contributors:
Jonas Ådahl, Carlos Garnacho, Thomas Hindoe Paaboel Andersen, Simon McVittie,
Alberts Muktupāvels, Florian Müllner, Bastien Nocera, Jouke Witteveen
Translations:
Daniel Mustieles [es], Aurimas Černius [lt], Dušan Kazik [sk],
Fabio Tomat [fur], Balázs Úr [hu], Yosef Or Boczko [he], Marek Černocký [cs],
Matej Urbančič [sl]
3.21.4
======
* Fix missing frame border around GTK+ dialogs [Florian; #745060]
* Improve X11 <-> wayland copy and paste interaction [Carlos; #768007]
* Add support for NV_robustness_video_memory_purge extension [Rui; #739178]
* Fix restoring the old focused window on restart [Owen; #766243]
* Fix fullscreen windows on other monitors stealing focus after closing
a window [Rui; #768221]
* Draw monitor content to individual framebuffer [Jonas; #768976]
* Provide screen capture API [Jonas; #768978]
* Misc. bug fixes and cleanups [Rui, Owen, Luca, Olivier, Jonas, Carlos;
#767969, #768243, #762407, #767997, #768039, #768977, #768977]
Contributors:
Jonas Ådahl, Luca Bruno, Olivier Fourdan, Carlos Garnacho, Rui Matos,
Florian Müllner, Owen W. Taylor
Translations:
Andika Triwidada [id]
3.21.3
======
* Don't create invalid UTF-8 window description strings [Rui; #765535]
* Convert window titles and wm_class to UTF-8 [Rui; #752788]
* Communicate tiled state to GTK+ on wayland [Olivier; #766860]
* Use kill() to force-quit unresponsive wayland clients [Olivier; #767464]
* Fix window position when unmaximizing via DND on wayland [Olivier; #764180]
* Avoid full window redraws when using extended frame sync [Florian; #767798]
Contributors:
Olivier Fourdan, Rui Matos, Florian Müllner
Translations:
Cédric Valmary [oc]
3.21.2
======
* Clean up surface <-> shell interaction [Jonas; #763431]
* Fix grabbing random keys for disabled shortcuts [Rui; #766270]
* Fix stacking of hidden windows on wayland [Rui; #764844]
* Misc. bug fixes [Victor, Florian, Marek, Rui; #766306, #766326, #751847,
#763832, #766528]
Contributors:
Jonas Ådahl, Emmanuele Bassi, Marek Chalupa, Matthias Clasen,
Carlos Garnacho, Rui Matos, Florian Müllner, Victor Toso
Translations:
Tiago Santos [pt], Cédric Valmary [oc], Muhammet Kara [tr]
3.21.1 3.21.1
====== ======
* Notify clients of pending modifier state changes [Rui; #748526] * Notify clients of pending modifier state changes [Rui; #748526]

View File

@@ -1,30 +0,0 @@
# Mutter
Mutter is a Wayland display server and X11 window manager and compositor library.
When used as a Wayland display server, it runs on top of KMS and libinput. It
implements the compositor side of the Wayland core protocol as well as various
protocol extensions. It also has functionality related to running X11
applications using Xwayland.
When used on top of Xorg it acts as a X11 window manager and compositing manager.
It contains functionality related to, among other things, window management,
window compositing, focus tracking, workspace management, keybindings and
monitor configuration.
Internally it uses a fork of Cogl, a hardware acceleration abstraction library
used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a
scene graph and user interface toolkit.
Mutter is used by GNOME Shell, the GNOME core user interface. It can also be run
standalone, using the command "mutter", but just running plain mutter is only
intended for debugging purposes.
## License
Mutter is distributed under the terms of the GNU General Public License,
version 2 or later. See the [COPYING][license] file for detalis.
[bug-tracker]: https://gitlab.gnome.org/GNOME/mutter/issues
[license]: COPYING

View File

@@ -6,23 +6,16 @@ test -z "$srcdir" && srcdir=.
REQUIRED_AUTOMAKE_VERSION=1.11 REQUIRED_AUTOMAKE_VERSION=1.11
olddir="$(pwd)" (test -f $srcdir/configure.ac \
&& test -d $srcdir/src) || {
cd "${srcdir}"
(test -f configure.ac \
&& test -d src) || {
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
echo " top-level mutter directory" echo " top-level metacity directory"
exit 1 exit 1
} }
aclocal --install || exit 1 which gnome-autogen.sh || {
intltoolize --force --copy --automake || exit 1 echo "You need to install gnome-common from GNOME Subversion (or from"
autoreconf --verbose --force --install || exit 1 echo "your distribution's package manager)."
exit 1
cd "${olddir}" }
. gnome-autogen.sh
if [ "$NOCONFIGURE" = "" ]; then
"${srcdir}/configure" "$@" || exit 1
fi

20
clutter/.gitignore vendored
View File

@@ -18,16 +18,16 @@ stamp-enum-types
stamp-marshal stamp-marshal
tags tags
/ChangeLog* /ChangeLog*
clutter-build-config.h /clutter/clutter-config.h
clutter-build-config.h.in /clutter/clutter-enum-types.[ch]
clutter-config.h /clutter/clutter-marshal.[ch]
clutter-enum-types.[ch] /clutter/clutter-version.h
clutter-marshal.[ch] /clutter/gcov-report.txt
clutter-version.h /clutter/clutter-json.h
gcov-report.txt /clutter/*.log
clutter-json.h /clutter/*.trs
clutter-lcov.info /clutter-lcov.info
clutter-lcov /clutter-lcov
!/build/autotools/introspection.m4 !/build/autotools/introspection.m4
!/build/autotools/as-linguas.m4 !/build/autotools/as-linguas.m4
!/build/autotools/as-compiler-flag.m4 !/build/autotools/as-compiler-flag.m4

View File

@@ -16,6 +16,7 @@ AM_CPPFLAGS = \
-DCLUTTER_LOCALEDIR=\""$(localedir)"\" \ -DCLUTTER_LOCALEDIR=\""$(localedir)"\" \
-DCLUTTER_SYSCONFDIR=\""$(sysconfdir)"\" \ -DCLUTTER_SYSCONFDIR=\""$(sysconfdir)"\" \
-DCLUTTER_COMPILATION=1 \ -DCLUTTER_COMPILATION=1 \
-DCOGL_ENABLE_EXPERIMENTAL_API \
-DCOGL_DISABLE_DEPRECATION_WARNINGS \ -DCOGL_DISABLE_DEPRECATION_WARNINGS \
-DG_LOG_DOMAIN=\"Clutter\" \ -DG_LOG_DOMAIN=\"Clutter\" \
-I$(top_srcdir) \ -I$(top_srcdir) \
@@ -25,7 +26,6 @@ AM_CPPFLAGS = \
-I$(top_builddir)/clutter \ -I$(top_builddir)/clutter \
-I$(top_srcdir)/../cogl \ -I$(top_srcdir)/../cogl \
-I$(top_builddir)/../cogl \ -I$(top_builddir)/../cogl \
-I$(top_builddir)/../cogl/cogl \
$(CLUTTER_DEPRECATED_CFLAGS) \ $(CLUTTER_DEPRECATED_CFLAGS) \
$(CLUTTER_DEBUG_CFLAGS) \ $(CLUTTER_DEBUG_CFLAGS) \
$(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) \ $(CLUTTER_HIDDEN_VISIBILITY_CFLAGS) \
@@ -37,7 +37,7 @@ AM_CFLAGS = $(CLUTTER_CFLAGS) $(MAINTAINER_CFLAGS)
INTROSPECTION_GIRS = INTROSPECTION_GIRS =
# the base include path for headers # the base include path for headers
clutter_base_includedir = $(includedir)/mutter/clutter-$(LIBMUTTER_API_VERSION) clutter_base_includedir = $(includedir)/mutter/clutter-$(CLUTTER_API_VERSION)
clutter_includedir = $(clutter_base_includedir)/clutter clutter_includedir = $(clutter_base_includedir)/clutter
clutter_deprecateddir = $(clutter_base_includedir)/clutter/deprecated clutter_deprecateddir = $(clutter_base_includedir)/clutter/deprecated
@@ -62,6 +62,7 @@ source_h = \
clutter-canvas.h \ clutter-canvas.h \
clutter-child-meta.h \ clutter-child-meta.h \
clutter-click-action.h \ clutter-click-action.h \
clutter-cogl-compat.h \
clutter-clone.h \ clutter-clone.h \
clutter-color-static.h \ clutter-color-static.h \
clutter-color.h \ clutter-color.h \
@@ -87,8 +88,6 @@ source_h = \
clutter-image.h \ clutter-image.h \
clutter-input-device.h \ clutter-input-device.h \
clutter-input-device-tool.h \ clutter-input-device-tool.h \
clutter-input-focus.h \
clutter-input-method.h \
clutter-interval.h \ clutter-interval.h \
clutter-keyframe-transition.h \ clutter-keyframe-transition.h \
clutter-keysyms.h \ clutter-keysyms.h \
@@ -125,7 +124,6 @@ source_h = \
clutter-transition.h \ clutter-transition.h \
clutter-types.h \ clutter-types.h \
clutter-units.h \ clutter-units.h \
clutter-virtual-input-device.h \
clutter-zoom-action.h \ clutter-zoom-action.h \
$(NULL) $(NULL)
@@ -171,9 +169,6 @@ source_c = \
clutter-image.c \ clutter-image.c \
clutter-input-device.c \ clutter-input-device.c \
clutter-input-device-tool.c \ clutter-input-device-tool.c \
clutter-input-focus.c \
clutter-input-method.c \
clutter-virtual-input-device.c \
clutter-interval.c \ clutter-interval.c \
clutter-keyframe-transition.c \ clutter-keyframe-transition.c \
clutter-keysyms-table.c \ clutter-keysyms-table.c \
@@ -233,8 +228,6 @@ source_h_priv = \
clutter-flatten-effect.h \ clutter-flatten-effect.h \
clutter-gesture-action-private.h \ clutter-gesture-action-private.h \
clutter-id-pool.h \ clutter-id-pool.h \
clutter-input-focus-private.h \
clutter-input-method-private.h \
clutter-master-clock.h \ clutter-master-clock.h \
clutter-master-clock-default.h \ clutter-master-clock-default.h \
clutter-offscreen-effect-private.h \ clutter-offscreen-effect-private.h \
@@ -245,7 +238,6 @@ source_h_priv = \
clutter-settings-private.h \ clutter-settings-private.h \
clutter-stage-manager-private.h \ clutter-stage-manager-private.h \
clutter-stage-private.h \ clutter-stage-private.h \
clutter-stage-view.h \
clutter-stage-window.h \ clutter-stage-window.h \
$(NULL) $(NULL)
@@ -254,7 +246,6 @@ source_c_priv = \
clutter-easing.c \ clutter-easing.c \
clutter-event-translator.c \ clutter-event-translator.c \
clutter-id-pool.c \ clutter-id-pool.c \
clutter-stage-view.c \
$(NULL) $(NULL)
# deprecated installed headers # deprecated installed headers
@@ -276,6 +267,7 @@ deprecated_h = \
deprecated/clutter-box.h \ deprecated/clutter-box.h \
deprecated/clutter-cairo-texture.h \ deprecated/clutter-cairo-texture.h \
deprecated/clutter-container.h \ deprecated/clutter-container.h \
deprecated/clutter-fixed.h \
deprecated/clutter-frame-source.h \ deprecated/clutter-frame-source.h \
deprecated/clutter-group.h \ deprecated/clutter-group.h \
deprecated/clutter-input-device.h \ deprecated/clutter-input-device.h \
@@ -312,6 +304,7 @@ deprecated_c = \
deprecated/clutter-behaviour-scale.c \ deprecated/clutter-behaviour-scale.c \
deprecated/clutter-box.c \ deprecated/clutter-box.c \
deprecated/clutter-cairo-texture.c \ deprecated/clutter-cairo-texture.c \
deprecated/clutter-fixed.c \
deprecated/clutter-frame-source.c \ deprecated/clutter-frame-source.c \
deprecated/clutter-group.c \ deprecated/clutter-group.c \
deprecated/clutter-input-device-deprecated.c \ deprecated/clutter-input-device-deprecated.c \
@@ -362,7 +355,7 @@ EXTRA_DIST += clutter-version.h.in clutter-version.h
# key symbol update script # key symbol update script
EXTRA_DIST += clutter-keysyms-update.pl EXTRA_DIST += clutter-keysyms-update.pl
pc_files += mutter-clutter-$(LIBMUTTER_API_VERSION).pc pc_files += mutter-clutter-$(CLUTTER_API_VERSION).pc
# in order to be compatible with Clutter < 1.10, when we shipped a single # in order to be compatible with Clutter < 1.10, when we shipped a single
# shared library whose name was determined by the single backend it # shared library whose name was determined by the single backend it
@@ -394,7 +387,6 @@ x11_source_c = \
x11/clutter-keymap-x11.c \ x11/clutter-keymap-x11.c \
x11/clutter-stage-x11.c \ x11/clutter-stage-x11.c \
x11/clutter-x11-texture-pixmap.c \ x11/clutter-x11-texture-pixmap.c \
x11/clutter-xkb-a11y-x11.c \
$(NULL) $(NULL)
x11_source_h = \ x11_source_h = \
@@ -409,7 +401,6 @@ x11_source_h_priv = \
x11/clutter-keymap-x11.h \ x11/clutter-keymap-x11.h \
x11/clutter-settings-x11.h \ x11/clutter-settings-x11.h \
x11/clutter-stage-x11.h \ x11/clutter-stage-x11.h \
x11/clutter-xkb-a11y-x11.h \
$(NULL) $(NULL)
x11_source_c_priv = \ x11_source_c_priv = \
@@ -422,21 +413,11 @@ x11_source_c_priv = \
x11_source_c += \ x11_source_c += \
x11/clutter-device-manager-xi2.c \ x11/clutter-device-manager-xi2.c \
x11/clutter-input-device-xi2.c \ x11/clutter-input-device-xi2.c \
x11/clutter-input-device-tool-xi2.c \
$(NULL) $(NULL)
x11_source_h_priv += \ x11_source_h_priv += \
x11/clutter-device-manager-xi2.h \ x11/clutter-device-manager-xi2.h \
x11/clutter-input-device-xi2.h \ x11/clutter-input-device-xi2.h \
x11/clutter-input-device-tool-xi2.h \
$(NULL)
x11_source_c += \
x11/clutter-virtual-input-device-x11.c \
$(NULL)
x11_source_h_priv += \
x11/clutter-virtual-input-device-x11.h \
$(NULL) $(NULL)
backend_source_h += $(x11_source_h) backend_source_h += $(x11_source_h)
@@ -450,10 +431,10 @@ x11_introspection = $(x11_source_c) $(x11_source_h)
clutterx11_includedir = $(clutter_includedir)/x11 clutterx11_includedir = $(clutter_includedir)/x11
clutterx11_include_HEADERS = $(x11_source_h) clutterx11_include_HEADERS = $(x11_source_h)
mutter-clutter-x11-@LIBMUTTER_API_VERSION@.pc: mutter-clutter-$(LIBMUTTER_API_VERSION).pc mutter-clutter-x11-$(CLUTTER_API_VERSION).pc: mutter-clutter-$(CLUTTER_API_VERSION).pc
$(QUIET_GEN)cp -f $< $(@F) $(QUIET_GEN)cp -f $< $(@F)
pc_files += mutter-clutter-x11-$(LIBMUTTER_API_VERSION).pc pc_files += mutter-clutter-x11-$(CLUTTER_API_VERSION).pc
# Shared cogl backend files # Shared cogl backend files
cogl_source_h = cogl_source_h =
@@ -479,17 +460,13 @@ backend_source_c += $(glx_source_c)
evdev_c_priv = \ evdev_c_priv = \
evdev/clutter-device-manager-evdev.c \ evdev/clutter-device-manager-evdev.c \
evdev/clutter-input-device-evdev.c \ evdev/clutter-input-device-evdev.c \
evdev/clutter-seat-evdev.c \
evdev/clutter-virtual-input-device-evdev.c \
evdev/clutter-event-evdev.c \ evdev/clutter-event-evdev.c \
evdev/clutter-input-device-tool-evdev.c \ evdev/clutter-input-device-tool-evdev.c \
$(NULL) $(NULL)
evdev_h_priv = \ evdev_h_priv = \
evdev/clutter-device-manager-evdev.h \ evdev/clutter-device-manager-evdev.h \
evdev/clutter-input-device-evdev.h \ evdev/clutter-input-device-evdev.h \
evdev/clutter-seat-evdev.h \
evdev/clutter-input-device-tool-evdev.h \ evdev/clutter-input-device-tool-evdev.h \
evdev/clutter-virtual-input-device-evdev.h \
$(NULL) $(NULL)
evdev_h = evdev/clutter-evdev.h evdev_h = evdev/clutter-evdev.h
@@ -510,8 +487,8 @@ egl_source_h = \
egl/clutter-egl.h \ egl/clutter-egl.h \
$(NULL) $(NULL)
egl_source_h_priv = egl/clutter-backend-eglnative.h egl_source_h_priv = egl/clutter-backend-eglnative.h egl/clutter-stage-eglnative.h
egl_source_c = egl/clutter-backend-eglnative.c egl_source_c = egl/clutter-backend-eglnative.c egl/clutter-stage-eglnative.c
wayland_compositor_source_h = \ wayland_compositor_source_h = \
wayland/clutter-wayland-compositor.h \ wayland/clutter-wayland-compositor.h \
@@ -585,23 +562,23 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = $(pc_files) pkgconfig_DATA = $(pc_files)
DISTCLEANFILES += $(pc_files) DISTCLEANFILES += $(pc_files)
clutter_include_HEADERS = $(source_h) clutter.h clutter-version.h clutter-autocleanups.h clutter-mutter.h clutter_include_HEADERS = $(source_h) clutter.h clutter-version.h clutter-autocleanups.h
nodist_clutter_include_HEADERS = clutter-config.h $(built_source_h) nodist_clutter_include_HEADERS = clutter-config.h $(built_source_h)
clutter_deprecated_HEADERS = $(deprecated_h) clutter_deprecated_HEADERS = $(deprecated_h)
mutterlibdir = $(libdir)/mutter mutterlibdir = $(libdir)/mutter
mutterlib_LTLIBRARIES = libmutter-clutter-@LIBMUTTER_API_VERSION@.la mutterlib_LTLIBRARIES = libmutter-clutter-@CLUTTER_API_VERSION@.la
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_LIBADD = \ libmutter_clutter_@CLUTTER_API_VERSION@_la_LIBADD = \
$(LIBM) \ $(LIBM) \
$(CLUTTER_LIBS) \ $(CLUTTER_LIBS) \
$(top_builddir)/../cogl/cogl/libmutter-cogl-$(LIBMUTTER_API_VERSION).la \ $(top_builddir)/../cogl/cogl/libmutter-cogl.la \
$(top_builddir)/../cogl/cogl-pango/libmutter-cogl-pango-$(LIBMUTTER_API_VERSION).la \ $(top_builddir)/../cogl/cogl-pango/libmutter-cogl-pango.la \
$(top_builddir)/../cogl/cogl-path/libmutter-cogl-path-$(LIBMUTTER_API_VERSION).la \ $(top_builddir)/../cogl/cogl-path/libmutter-cogl-path.la \
$(NULL) $(NULL)
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \ libmutter_clutter_@CLUTTER_API_VERSION@_la_SOURCES = \
$(backend_source_c) \ $(backend_source_c) \
$(backend_source_h) \ $(backend_source_h) \
$(backend_source_c_priv) \ $(backend_source_c_priv) \
@@ -619,12 +596,12 @@ libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
$(cally_sources_private) \ $(cally_sources_private) \
$(NULL) $(NULL)
nodist_libmutter_clutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \ nodist_libmutter_clutter_@CLUTTER_API_VERSION@_la_SOURCES = \
$(backend_source_built) \ $(backend_source_built) \
$(built_source_c) \ $(built_source_c) \
$(built_source_h) $(built_source_h)
libmutter_clutter_@LIBMUTTER_API_VERSION@_la_LDFLAGS = \ libmutter_clutter_@CLUTTER_API_VERSION@_la_LDFLAGS = \
$(CLUTTER_LINK_FLAGS) \ $(CLUTTER_LINK_FLAGS) \
$(CLUTTER_LT_LDFLAGS) \ $(CLUTTER_LT_LDFLAGS) \
-export-dynamic \ -export-dynamic \
@@ -638,13 +615,13 @@ install-exec-local:
rm -f $$lib.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION); \ rm -f $$lib.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION); \
) ; \ ) ; \
(cd $(DESTDIR)$(mutterlibdir) && \ (cd $(DESTDIR)$(mutterlibdir) && \
{ ln -s -f libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0 || \ { ln -s -f libmutter-clutter-$(CLUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0 || \
{ rm -f $$lib.0 && ln -s libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0; }; \ { rm -f $$lib.0 && ln -s libmutter-clutter-1.0.so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib.0; }; \
} \ } \
) ; \ ) ; \
(cd $(DESTDIR)$(mutterlibdir) && \ (cd $(DESTDIR)$(mutterlibdir) && \
{ ln -s -f libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib || \ { ln -s -f libmutter-clutter-$(CLUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib || \
{ rm -f $$lib && ln -s libmutter-clutter-$(LIBMUTTER_API_VERSION).so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib; }; \ { rm -f $$lib && ln -s libmutter-clutter-1.0.so.0.$(CLUTTER_LT_CURRENT).$(CLUTTER_LT_REVISION) $$lib; }; \
} \ } \
) ; \ ) ; \
done done
@@ -652,65 +629,59 @@ install-exec-local:
# gobject-introspection rules # gobject-introspection rules
-include $(INTROSPECTION_MAKEFILE) -include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_SCANNER_ARGS = \ INTROSPECTION_SCANNER_ARGS = --add-include-path=$(top_builddir)/../cogl/cogl --add-include-path=$(top_builddir)/../cogl/cogl-pango
--add-include-path=$(top_builddir)/../cogl/cogl \ INTROSPECTION_COMPILER_ARGS = --includedir=$(top_builddir)/../cogl/cogl --includedir=$(top_builddir)/../cogl/cogl-pango
--add-include-path=$(top_builddir)/../cogl/cogl-pango
INTROSPECTION_COMPILER_ARGS = \
--includedir=$(top_builddir)/../cogl/cogl \
--includedir=$(top_builddir)/../cogl/cogl-pango
INTROSPECTION_SCANNER_ENV = \
PKG_CONFIG_PATH=$(top_builddir)/../cogl/cogl/:$(top_builddir)/../cogl/cogl-pango/:$${PKG_CONFIG_PATH}
Clutter-@LIBMUTTER_API_VERSION@.gir: libmutter-clutter-@LIBMUTTER_API_VERSION@.la Makefile Clutter-@CLUTTER_API_VERSION@.gir: libmutter-clutter-@CLUTTER_API_VERSION@.la Makefile
Clutter_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = Clutter Clutter_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = Clutter
Clutter_@LIBMUTTER_API_VERSION@_gir_VERSION = @LIBMUTTER_API_VERSION@ Clutter_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
Clutter_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la Clutter_@CLUTTER_API_VERSION_AM@_gir_LIBS = libmutter-clutter-@CLUTTER_API_VERSION@.la
Clutter_@LIBMUTTER_API_VERSION@_gir_FILES = \ Clutter_@CLUTTER_API_VERSION_AM@_gir_FILES = \
$(clutter_include_HEADERS) \ $(clutter_include_HEADERS) \
$(clutter_deprecated_HEADERS) \ $(clutter_deprecated_HEADERS) \
$(nodist_clutter_include_HEADERS) \ $(nodist_clutter_include_HEADERS) \
$(source_c) \ $(source_c) \
$(deprecated_c) \ $(deprecated_c) \
$(built_source_c) $(built_source_c)
Clutter_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS) Clutter_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
Clutter_@LIBMUTTER_API_VERSION@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-@LIBMUTTER_API_VERSION@ CoglPango-@LIBMUTTER_API_VERSION@ Atk-1.0 Json-1.0 Clutter_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 cairo-1.0 Cogl-1.0 CoglPango-1.0 Atk-1.0 Json-1.0
Clutter_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \ Clutter_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
--warn-all \ --warn-all \
--c-include='clutter/clutter.h' \ --c-include='clutter/clutter.h' \
--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@ --pkg-export=mutter-clutter-@CLUTTER_API_VERSION@
INTROSPECTION_GIRS += Clutter-@LIBMUTTER_API_VERSION@.gir INTROSPECTION_GIRS += Clutter-@CLUTTER_API_VERSION@.gir
Cally-@LIBMUTTER_API_VERSION@.gir: Makefile Clutter-@LIBMUTTER_API_VERSION@.gir Cally-@CLUTTER_API_VERSION@.gir: Makefile Clutter-@CLUTTER_API_VERSION@.gir
Cally_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = Cally Cally_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = Cally
Cally_@LIBMUTTER_API_VERSION@_gir_VERSION = @LIBMUTTER_API_VERSION@ Cally_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
Cally_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la Cally_@CLUTTER_API_VERSION_AM@_gir_LIBS = libmutter-clutter-@CLUTTER_API_VERSION@.la
Cally_@LIBMUTTER_API_VERSION@_gir_FILES = $(cally_sources_h) $(cally_sources_c) Cally_@CLUTTER_API_VERSION_AM@_gir_FILES = $(cally_sources_h) $(cally_sources_c)
Cally_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS) Cally_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
Cally_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \ Cally_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
--warn-all \ --warn-all \
--c-include='cally/cally.h' \ --c-include='cally/cally.h' \
--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@ \ --pkg-export=mutter-cally-@CLUTTER_API_VERSION@ \
--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir --include-uninstalled=$(top_builddir)/clutter/Clutter-@CLUTTER_API_VERSION@.gir
INTROSPECTION_GIRS += Cally-@LIBMUTTER_API_VERSION@.gir INTROSPECTION_GIRS += Cally-@CLUTTER_API_VERSION@.gir
ClutterX11-@LIBMUTTER_API_VERSION@.gir: Makefile Clutter-@LIBMUTTER_API_VERSION@.gir ClutterX11-@CLUTTER_API_VERSION@.gir: Makefile Clutter-@CLUTTER_API_VERSION@.gir
ClutterX11_@LIBMUTTER_API_VERSION@_gir_NAMESPACE = ClutterX11 ClutterX11_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = ClutterX11
ClutterX11_@LIBMUTTER_API_VERSION@_gir_INCLUDES = xlib-2.0 ClutterX11_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = xlib-2.0
ClutterX11_@LIBMUTTER_API_VERSION@_gir_LIBS = libmutter-clutter-@LIBMUTTER_API_VERSION@.la ClutterX11_@CLUTTER_API_VERSION_AM@_gir_LIBS = libmutter-clutter-@CLUTTER_API_VERSION@.la
ClutterX11_@LIBMUTTER_API_VERSION@_gir_FILES = $(x11_introspection) ClutterX11_@CLUTTER_API_VERSION_AM@_gir_FILES = $(x11_introspection)
ClutterX11_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS) ClutterX11_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
ClutterX11_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \ ClutterX11_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
--warn-all \ --warn-all \
--c-include='clutter/x11/clutter-x11.h' \ --c-include='clutter/x11/clutter-x11.h' \
--pkg-export=mutter-clutter-x11-@LIBMUTTER_API_VERSION@ \ --pkg-export=mutter-clutter-x11-@CLUTTER_API_VERSION@ \
--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir --include-uninstalled=$(top_builddir)/clutter/Clutter-@CLUTTER_API_VERSION@.gir
INTROSPECTION_GIRS += ClutterX11-@LIBMUTTER_API_VERSION@.gir INTROSPECTION_GIRS += ClutterX11-@CLUTTER_API_VERSION@.gir
# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to # INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
# install anything - we need to install inside our prefix. # install anything - we need to install inside our prefix.

View File

@@ -34,7 +34,6 @@ stamp-marshal: $(marshal_list)
$(AM_V_GEN)$(GLIB_GENMARSHAL) \ $(AM_V_GEN)$(GLIB_GENMARSHAL) \
--prefix=$(glib_marshal_prefix) \ --prefix=$(glib_marshal_prefix) \
--header \ --header \
--valist-marshallers \
$(marshal_list) > xgen-mh \ $(marshal_list) > xgen-mh \
&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \ && (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
&& rm -f xgen-mh \ && rm -f xgen-mh \
@@ -44,11 +43,10 @@ $(marshal_h): stamp-marshal
@true @true
$(marshal_c): $(marshal_h) $(marshal_c): $(marshal_h)
$(AM_V_GEN)$(GLIB_GENMARSHAL) \ $(AM_V_GEN)(echo "#include \"$(marshal_h)\"" ; \
$(GLIB_GENMARSHAL) \
--prefix=$(glib_marshal_prefix) \ --prefix=$(glib_marshal_prefix) \
--body \ --body \
--valist-marshallers \ $(marshal_list)) > xgen-mc \
--prototypes \ && cp xgen-mc $(marshal_c) \
$(marshal_list) > xgen-mc \
&& (cmp -s xgen-mc $(marshal_c) || cp -f xgen-mc $(marshal_c)) \
&& rm -f xgen-mc && rm -f xgen-mc

View File

@@ -68,7 +68,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <glib.h> #include <glib.h>
@@ -781,7 +781,7 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
"position of the stage"); "position of the stage");
} }
else else
#endif #else
{ {
static gboolean yet_warned = FALSE; static gboolean yet_warned = FALSE;
@@ -793,6 +793,7 @@ _cally_actor_get_top_level_origin (ClutterActor *actor,
"atk_component_get_extents() with ATK_XY_SCREEN."); "atk_component_get_extents() with ATK_XY_SCREEN.");
} }
} }
#endif
if (xp) if (xp)
*xp = x; *xp = x;

View File

@@ -69,7 +69,7 @@
* a11y POV should still be managed as a image (with the proper properties, * a11y POV should still be managed as a image (with the proper properties,
* position, size, etc.). * position, size, etc.).
*/ */
#include "clutter-build-config.h" #include "config.h"
#include "cally-clone.h" #include "cally-clone.h"
#include "cally-actor-private.h" #include "cally-actor-private.h"

View File

@@ -34,7 +34,7 @@
* group. * group.
*/ */
#include "clutter-build-config.h" #include "config.h"
#include "cally-group.h" #include "cally-group.h"
#include "cally-actor-private.h" #include "cally-actor-private.h"

View File

@@ -30,7 +30,7 @@
* In particular it sets a proper role for the rectangle. * In particular it sets a proper role for the rectangle.
*/ */
#include "clutter-build-config.h" #include "config.h"
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS #define CLUTTER_DISABLE_DEPRECATION_WARNINGS

View File

@@ -35,7 +35,7 @@
* #ClutterStageManager). * #ClutterStageManager).
*/ */
#include "clutter-build-config.h" #include "config.h"
#include "cally-root.h" #include "cally-root.h"

View File

@@ -34,7 +34,7 @@
* being a canvas. Anyway, this is required for applications using * being a canvas. Anyway, this is required for applications using
* just clutter, or directly #ClutterStage * just clutter, or directly #ClutterStage
*/ */
#include "clutter-build-config.h" #include "config.h"
#include "cally-stage.h" #include "cally-stage.h"
#include "cally-actor-private.h" #include "cally-actor-private.h"

View File

@@ -40,7 +40,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "cally-text.h" #include "cally-text.h"

View File

@@ -30,7 +30,7 @@
* *
* In particular it sets a proper role for the texture. * In particular it sets a proper role for the texture.
*/ */
#include "clutter-build-config.h" #include "config.h"
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS #define CLUTTER_DISABLE_DEPRECATION_WARNINGS

View File

@@ -39,7 +39,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <stdlib.h> #include <stdlib.h>
@@ -214,8 +214,6 @@ cally_util_simulate_snooper_install (void)
G_CALLBACK (cally_util_stage_added_cb), cally_key_snooper); G_CALLBACK (cally_util_stage_added_cb), cally_key_snooper);
g_signal_connect (G_OBJECT (stage_manager), "stage-removed", g_signal_connect (G_OBJECT (stage_manager), "stage-removed",
G_CALLBACK (cally_util_stage_removed_cb), cally_key_snooper); G_CALLBACK (cally_util_stage_removed_cb), cally_key_snooper);
g_slist_free (stage_list);
} }
static void static void

View File

@@ -30,7 +30,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS #define CLUTTER_DISABLE_DEPRECATION_WARNINGS

View File

@@ -42,7 +42,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-action.h" #include "clutter-action.h"

View File

@@ -1,5 +1,5 @@
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -42,7 +42,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-actor-meta-private.h" #include "clutter-actor-meta-private.h"

View File

@@ -605,7 +605,7 @@
* #ClutterActor:reactive property instead of this macro. * #ClutterActor:reactive property instead of this macro.
*/ */
#include "clutter-build-config.h" #include "config.h"
#include <math.h> #include <math.h>
@@ -840,7 +840,6 @@ struct _ClutterActorPrivate
guint needs_compute_expand : 1; guint needs_compute_expand : 1;
guint needs_x_expand : 1; guint needs_x_expand : 1;
guint needs_y_expand : 1; guint needs_y_expand : 1;
guint needs_paint_volume_update : 1;
}; };
enum enum
@@ -1093,11 +1092,6 @@ static void clutter_actor_set_child_transform_internal (ClutterActor *sel
static void clutter_actor_realize_internal (ClutterActor *self); static void clutter_actor_realize_internal (ClutterActor *self);
static void clutter_actor_unrealize_internal (ClutterActor *self); static void clutter_actor_unrealize_internal (ClutterActor *self);
static void clutter_actor_push_in_cloned_branch (ClutterActor *self,
gulong count);
static void clutter_actor_pop_in_cloned_branch (ClutterActor *self,
gulong count);
/* Helper macro which translates by the anchor coord, applies the /* Helper macro which translates by the anchor coord, applies the
given transformation and then translates back */ given transformation and then translates back */
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \ #define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
@@ -1510,8 +1504,6 @@ clutter_actor_real_map (ClutterActor *self)
CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED); CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED);
self->priv->needs_paint_volume_update = TRUE;
stage = _clutter_actor_get_stage_internal (self); stage = _clutter_actor_get_stage_internal (self);
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self); priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
@@ -2664,15 +2656,7 @@ _clutter_actor_signal_queue_redraw (ClutterActor *self,
_clutter_actor_queue_redraw_on_clones (self); _clutter_actor_queue_redraw_on_clones (self);
/* calls klass->queue_redraw in default handler */ /* calls klass->queue_redraw in default handler */
if (g_signal_has_handler_pending (self, actor_signals[QUEUE_REDRAW], g_signal_emit (self, actor_signals[QUEUE_REDRAW], 0, origin);
0, TRUE))
{
g_signal_emit (self, actor_signals[QUEUE_REDRAW], 0, origin);
}
else
{
CLUTTER_ACTOR_GET_CLASS (self)->queue_redraw (self, origin);
}
} }
static void static void
@@ -2745,7 +2729,6 @@ clutter_actor_real_queue_relayout (ClutterActor *self)
priv->needs_width_request = TRUE; priv->needs_width_request = TRUE;
priv->needs_height_request = TRUE; priv->needs_height_request = TRUE;
priv->needs_allocation = TRUE; priv->needs_allocation = TRUE;
priv->needs_paint_volume_update = TRUE;
/* reset the cached size requests */ /* reset the cached size requests */
memset (priv->width_requests, 0, memset (priv->width_requests, 0,
@@ -2830,7 +2813,7 @@ _clutter_actor_fully_transform_vertices (ClutterActor *self,
/* Note: we pass NULL as the ancestor because we don't just want the modelview /* Note: we pass NULL as the ancestor because we don't just want the modelview
* that gets us to stage coordinates, we want to go all the way to eye * that gets us to stage coordinates, we want to go all the way to eye
* coordinates */ * coordinates */
_clutter_actor_get_relative_transformation_matrix (self, NULL, &modelview); _clutter_actor_apply_relative_transformation_matrix (self, NULL, &modelview);
/* Fetch the projection and viewport */ /* Fetch the projection and viewport */
_clutter_stage_get_projection_matrix (CLUTTER_STAGE (stage), &projection); _clutter_stage_get_projection_matrix (CLUTTER_STAGE (stage), &projection);
@@ -4032,11 +4015,7 @@ clutter_actor_continue_paint (ClutterActor *self)
clutter_paint_node_unref (dummy); clutter_paint_node_unref (dummy);
/* XXX:2.0 - Call the paint() virtual directly */ /* XXX:2.0 - Call the paint() virtual directly */
if (g_signal_has_handler_pending (self, actor_signals[PAINT], g_signal_emit (self, actor_signals[PAINT], 0);
0, TRUE))
g_signal_emit (self, actor_signals[PAINT], 0);
else
CLUTTER_ACTOR_GET_CLASS (self)->paint (self);
} }
else else
{ {
@@ -4050,11 +4029,7 @@ clutter_actor_continue_paint (ClutterActor *self)
* *
* XXX:2.0 - Call the pick() virtual directly * XXX:2.0 - Call the pick() virtual directly
*/ */
if (g_signal_has_handler_pending (self, actor_signals[PICK], g_signal_emit (self, actor_signals[PICK], 0, &col);
0, TRUE))
g_signal_emit (self, actor_signals[PICK], 0, &col);
else
CLUTTER_ACTOR_GET_CLASS (self)->pick (self, &col);
} }
} }
else else
@@ -4294,9 +4269,6 @@ clutter_actor_remove_child_internal (ClutterActor *self,
self->priv->age += 1; self->priv->age += 1;
if (self->priv->in_cloned_branch)
clutter_actor_pop_in_cloned_branch (child, self->priv->in_cloned_branch);
/* if the child that got removed was visible and set to /* if the child that got removed was visible and set to
* expand then we want to reset the parent's state in * expand then we want to reset the parent's state in
* case the child was the only thing that was making it * case the child was the only thing that was making it
@@ -8530,7 +8502,6 @@ clutter_actor_init (ClutterActor *self)
priv->needs_width_request = TRUE; priv->needs_width_request = TRUE;
priv->needs_height_request = TRUE; priv->needs_height_request = TRUE;
priv->needs_allocation = TRUE; priv->needs_allocation = TRUE;
priv->needs_paint_volume_update = TRUE;
priv->cached_width_age = 1; priv->cached_width_age = 1;
priv->cached_height_age = 1; priv->cached_height_age = 1;
@@ -10097,9 +10068,6 @@ clutter_actor_allocate (ClutterActor *self,
return; return;
} }
if (CLUTTER_ACTOR_IS_MAPPED (self))
self->priv->needs_paint_volume_update = TRUE;
if (!stage_allocation_changed) if (!stage_allocation_changed)
{ {
/* If the actor didn't move but needs_allocation is set, we just /* If the actor didn't move but needs_allocation is set, we just
@@ -12918,9 +12886,6 @@ clutter_actor_add_child_internal (ClutterActor *self,
self->priv->age += 1; self->priv->age += 1;
if (self->priv->in_cloned_branch)
clutter_actor_push_in_cloned_branch (child, self->priv->in_cloned_branch);
/* if push_internal() has been called then we automatically set /* if push_internal() has been called then we automatically set
* the flag on the actor * the flag on the actor
*/ */
@@ -12991,9 +12956,6 @@ clutter_actor_add_child_internal (ClutterActor *self,
child->priv->needs_height_request = TRUE; child->priv->needs_height_request = TRUE;
child->priv->needs_allocation = TRUE; child->priv->needs_allocation = TRUE;
if (CLUTTER_ACTOR_IS_MAPPED (child))
child->priv->needs_paint_volume_update = TRUE;
/* we only queue a relayout here, because any possible /* we only queue a relayout here, because any possible
* redraw has already been queued either by show() or * redraw has already been queued either by show() or
* by our call to queue_redraw() above * by our call to queue_redraw() above
@@ -17536,16 +17498,11 @@ _clutter_actor_get_paint_volume_mutable (ClutterActor *self)
priv = self->priv; priv = self->priv;
if (priv->paint_volume_valid) if (priv->paint_volume_valid)
{ clutter_paint_volume_free (&priv->paint_volume);
if (!priv->needs_paint_volume_update)
return &priv->paint_volume;
clutter_paint_volume_free (&priv->paint_volume);
}
if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume)) if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume))
{ {
priv->paint_volume_valid = TRUE; priv->paint_volume_valid = TRUE;
priv->needs_paint_volume_update = FALSE;
return &priv->paint_volume; return &priv->paint_volume;
} }
else else
@@ -20715,31 +20672,29 @@ clutter_actor_get_child_transform (ClutterActor *self,
} }
static void static void
clutter_actor_push_in_cloned_branch (ClutterActor *self, clutter_actor_push_in_cloned_branch (ClutterActor *self)
gulong count)
{ {
ClutterActor *iter; ClutterActor *iter;
for (iter = self->priv->first_child; for (iter = self->priv->first_child;
iter != NULL; iter != NULL;
iter = iter->priv->next_sibling) iter = iter->priv->next_sibling)
clutter_actor_push_in_cloned_branch (iter, count); clutter_actor_push_in_cloned_branch (iter);
self->priv->in_cloned_branch += count; self->priv->in_cloned_branch += 1;
} }
static void static void
clutter_actor_pop_in_cloned_branch (ClutterActor *self, clutter_actor_pop_in_cloned_branch (ClutterActor *self)
gulong count)
{ {
ClutterActor *iter; ClutterActor *iter;
self->priv->in_cloned_branch -= count; self->priv->in_cloned_branch -= 1;
for (iter = self->priv->first_child; for (iter = self->priv->first_child;
iter != NULL; iter != NULL;
iter = iter->priv->next_sibling) iter = iter->priv->next_sibling)
clutter_actor_pop_in_cloned_branch (iter, count); clutter_actor_pop_in_cloned_branch (iter);
} }
void void
@@ -20755,7 +20710,7 @@ _clutter_actor_attach_clone (ClutterActor *actor,
g_hash_table_add (priv->clones, clone); g_hash_table_add (priv->clones, clone);
clutter_actor_push_in_cloned_branch (actor, 1); clutter_actor_push_in_cloned_branch (actor);
} }
void void
@@ -20770,7 +20725,7 @@ _clutter_actor_detach_clone (ClutterActor *actor,
g_hash_table_lookup (priv->clones, clone) == NULL) g_hash_table_lookup (priv->clones, clone) == NULL)
return; return;
clutter_actor_pop_in_cloned_branch (actor, 1); clutter_actor_pop_in_cloned_branch (actor);
g_hash_table_remove (priv->clones, clone); g_hash_table_remove (priv->clones, clone);

View File

@@ -856,6 +856,8 @@ CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_remove_all_transitions (ClutterActor *self); void clutter_actor_remove_all_transitions (ClutterActor *self);
/* Experimental API */
#ifdef CLUTTER_ENABLE_EXPERIMENTAL_API
CLUTTER_AVAILABLE_IN_1_16 CLUTTER_AVAILABLE_IN_1_16
gboolean clutter_actor_has_mapped_clones (ClutterActor *self); gboolean clutter_actor_has_mapped_clones (ClutterActor *self);
CLUTTER_AVAILABLE_IN_1_22 CLUTTER_AVAILABLE_IN_1_22
@@ -863,6 +865,7 @@ void clutter_actor_set_opacity_override
gint opacity); gint opacity);
CLUTTER_AVAILABLE_IN_1_22 CLUTTER_AVAILABLE_IN_1_22
gint clutter_actor_get_opacity_override (ClutterActor *self); gint clutter_actor_get_opacity_override (ClutterActor *self);
#endif
/** /**
* ClutterActorCreateChildFunc: * ClutterActorCreateChildFunc:

View File

@@ -35,7 +35,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-align-constraint.h" #include "clutter-align-constraint.h"

View File

@@ -46,7 +46,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS #define CLUTTER_DISABLE_DEPRECATION_WARNINGS

View File

@@ -58,8 +58,6 @@ struct _ClutterBackend
gint32 units_serial; gint32 units_serial;
GList *event_translators; GList *event_translators;
ClutterInputMethod *input_method;
}; };
struct _ClutterBackendClass struct _ClutterBackendClass
@@ -67,6 +65,8 @@ struct _ClutterBackendClass
/*< private >*/ /*< private >*/
GObjectClass parent_class; GObjectClass parent_class;
GType stage_window_type;
/* vfuncs */ /* vfuncs */
gboolean (* pre_parse) (ClutterBackend *backend, gboolean (* pre_parse) (ClutterBackend *backend,
GError **error); GError **error);
@@ -88,6 +88,8 @@ struct _ClutterBackendClass
GError **error); GError **error);
gboolean (* create_context) (ClutterBackend *backend, gboolean (* create_context) (ClutterBackend *backend,
GError **error); GError **error);
void (* ensure_context) (ClutterBackend *backend,
ClutterStage *stage);
ClutterDeviceManager *(* get_device_manager) (ClutterBackend *backend); ClutterDeviceManager *(* get_device_manager) (ClutterBackend *backend);
void (* copy_event_data) (ClutterBackend *backend, void (* copy_event_data) (ClutterBackend *backend,
@@ -102,8 +104,6 @@ struct _ClutterBackendClass
PangoDirection (* get_keymap_direction) (ClutterBackend *backend); PangoDirection (* get_keymap_direction) (ClutterBackend *backend);
void (* bell_notify) (ClutterBackend *backend);
/* signals */ /* signals */
void (* resolution_changed) (ClutterBackend *backend); void (* resolution_changed) (ClutterBackend *backend);
void (* font_changed) (ClutterBackend *backend); void (* font_changed) (ClutterBackend *backend);
@@ -115,6 +115,10 @@ ClutterBackend * _clutter_create_backend (void);
ClutterStageWindow * _clutter_backend_create_stage (ClutterBackend *backend, ClutterStageWindow * _clutter_backend_create_stage (ClutterBackend *backend,
ClutterStage *wrapper, ClutterStage *wrapper,
GError **error); GError **error);
void _clutter_backend_ensure_context (ClutterBackend *backend,
ClutterStage *stage);
void _clutter_backend_ensure_context_internal (ClutterBackend *backend,
ClutterStage *stage);
gboolean _clutter_backend_create_context (ClutterBackend *backend, gboolean _clutter_backend_create_context (ClutterBackend *backend,
GError **error); GError **error);
@@ -134,11 +138,8 @@ void _clutter_backend_free_event_data (Clutter
gboolean _clutter_backend_translate_event (ClutterBackend *backend, gboolean _clutter_backend_translate_event (ClutterBackend *backend,
gpointer native, gpointer native,
ClutterEvent *event); ClutterEvent *event);
CLUTTER_AVAILABLE_IN_MUTTER
void _clutter_backend_add_event_translator (ClutterBackend *backend, void _clutter_backend_add_event_translator (ClutterBackend *backend,
ClutterEventTranslator *translator); ClutterEventTranslator *translator);
void _clutter_backend_remove_event_translator (ClutterBackend *backend, void _clutter_backend_remove_event_translator (ClutterBackend *backend,
ClutterEventTranslator *translator); ClutterEventTranslator *translator);
@@ -150,7 +151,6 @@ gint32 _clutter_backend_get_units_serial (Clutter
PangoDirection _clutter_backend_get_keymap_direction (ClutterBackend *backend); PangoDirection _clutter_backend_get_keymap_direction (ClutterBackend *backend);
CLUTTER_AVAILABLE_IN_MUTTER
void _clutter_backend_reset_cogl_framebuffer (ClutterBackend *backend); void _clutter_backend_reset_cogl_framebuffer (ClutterBackend *backend);
void clutter_set_allowed_drivers (const char *drivers); void clutter_set_allowed_drivers (const char *drivers);

View File

@@ -39,7 +39,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API
@@ -48,7 +48,6 @@
#include "clutter-debug.h" #include "clutter-debug.h"
#include "clutter-event-private.h" #include "clutter-event-private.h"
#include "clutter-marshal.h" #include "clutter-marshal.h"
#include "clutter-mutter.h"
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-stage-manager-private.h" #include "clutter-stage-manager-private.h"
#include "clutter-stage-private.h" #include "clutter-stage-private.h"
@@ -127,7 +126,6 @@ clutter_backend_finalize (GObject *gobject)
g_free (backend->font_name); g_free (backend->font_name);
clutter_backend_set_font_options (backend, NULL); clutter_backend_set_font_options (backend, NULL);
g_clear_object (&backend->input_method);
G_OBJECT_CLASS (clutter_backend_parent_class)->finalize (gobject); G_OBJECT_CLASS (clutter_backend_parent_class)->finalize (gobject);
} }
@@ -232,17 +230,31 @@ clutter_backend_do_real_create_context (ClutterBackend *backend,
CoglSwapChain *swap_chain; CoglSwapChain *swap_chain;
GError *internal_error; GError *internal_error;
if (backend->cogl_context != NULL)
return TRUE;
klass = CLUTTER_BACKEND_GET_CLASS (backend); klass = CLUTTER_BACKEND_GET_CLASS (backend);
swap_chain = NULL; swap_chain = NULL;
internal_error = NULL; internal_error = NULL;
CLUTTER_NOTE (BACKEND, "Creating Cogl renderer"); CLUTTER_NOTE (BACKEND, "Creating Cogl renderer");
backend->cogl_renderer = klass->get_renderer (backend, &internal_error); if (klass->get_renderer != NULL)
backend->cogl_renderer = klass->get_renderer (backend, &internal_error);
else
backend->cogl_renderer = cogl_renderer_new ();
if (backend->cogl_renderer == NULL) if (backend->cogl_renderer == NULL)
goto error; goto error;
#ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT
/* If the application is trying to act as a Wayland compositor then
it needs to have an EGL-based renderer backend */
if (_wayland_compositor_display)
cogl_renderer_add_constraint (backend->cogl_renderer,
COGL_RENDERER_CONSTRAINT_USES_EGL);
#endif
CLUTTER_NOTE (BACKEND, "Connecting the renderer"); CLUTTER_NOTE (BACKEND, "Connecting the renderer");
cogl_renderer_set_driver (backend->cogl_renderer, driver_id); cogl_renderer_set_driver (backend->cogl_renderer, driver_id);
if (!cogl_renderer_connect (backend->cogl_renderer, &internal_error)) if (!cogl_renderer_connect (backend->cogl_renderer, &internal_error))
@@ -349,9 +361,6 @@ clutter_backend_real_create_context (ClutterBackend *backend,
gboolean allow_any; gboolean allow_any;
int i; int i;
if (backend->cogl_context != NULL)
return TRUE;
if (allowed_drivers == NULL) if (allowed_drivers == NULL)
allowed_drivers = CLUTTER_DRIVERS; allowed_drivers = CLUTTER_DRIVERS;
@@ -414,6 +423,27 @@ clutter_backend_real_create_context (ClutterBackend *backend,
return TRUE; return TRUE;
} }
static void
clutter_backend_real_ensure_context (ClutterBackend *backend,
ClutterStage *stage)
{
ClutterStageWindow *stage_impl;
CoglFramebuffer *framebuffer;
if (stage == NULL)
return;
stage_impl = _clutter_stage_get_window (stage);
if (stage_impl == NULL)
return;
framebuffer = _clutter_stage_window_get_active_framebuffer (stage_impl);
if (framebuffer == NULL)
return;
cogl_set_framebuffer (framebuffer);
}
static ClutterFeatureFlags static ClutterFeatureFlags
clutter_backend_real_get_features (ClutterBackend *backend) clutter_backend_real_get_features (ClutterBackend *backend)
{ {
@@ -447,9 +477,38 @@ clutter_backend_real_get_features (ClutterBackend *backend)
return flags; return flags;
} }
static const char *allowed_backends; static ClutterStageWindow *
clutter_backend_real_create_stage (ClutterBackend *backend,
ClutterStage *wrapper,
GError **error)
{
ClutterBackendClass *klass;
static ClutterBackend * (* custom_backend_func) (void); if (!clutter_feature_available (CLUTTER_FEATURE_STAGE_MULTIPLE))
{
ClutterStageManager *manager = clutter_stage_manager_get_default ();
if (clutter_stage_manager_get_default_stage (manager) != NULL)
{
g_set_error (error, CLUTTER_INIT_ERROR,
CLUTTER_INIT_ERROR_BACKEND,
_("The backend of type '%s' does not support "
"creating multiple stages"),
G_OBJECT_TYPE_NAME (backend));
return NULL;
}
}
klass = CLUTTER_BACKEND_GET_CLASS (backend);
g_assert (klass->stage_window_type != G_TYPE_INVALID);
return g_object_new (klass->stage_window_type,
"backend", backend,
"wrapper", wrapper,
NULL);
}
static const char *allowed_backends;
static const struct { static const struct {
const char *name; const char *name;
@@ -458,18 +517,15 @@ static const struct {
#ifdef CLUTTER_WINDOWING_X11 #ifdef CLUTTER_WINDOWING_X11
{ CLUTTER_WINDOWING_X11, clutter_backend_x11_new }, { CLUTTER_WINDOWING_X11, clutter_backend_x11_new },
#endif #endif
#ifdef CLUTTER_WINDOWING_WAYLAND
{ CLUTTER_WINDOWING_WAYLAND, clutter_backend_wayland_new },
#endif
#ifdef CLUTTER_WINDOWING_EGL #ifdef CLUTTER_WINDOWING_EGL
{ CLUTTER_WINDOWING_EGL, clutter_backend_egl_native_new }, { CLUTTER_WINDOWING_EGL, clutter_backend_egl_native_new },
#endif #endif
{ NULL, NULL }, { NULL, NULL },
}; };
void
clutter_set_custom_backend_func (ClutterBackend *(* func) (void))
{
custom_backend_func = func;
}
ClutterBackend * ClutterBackend *
_clutter_create_backend (void) _clutter_create_backend (void)
{ {
@@ -479,16 +535,6 @@ _clutter_create_backend (void)
char **backends; char **backends;
int i; int i;
if (custom_backend_func)
{
retval = custom_backend_func ();
if (!retval)
g_error ("Failed to create custom backend.");
return retval;
}
if (allowed_backends == NULL) if (allowed_backends == NULL)
allowed_backends = "*"; allowed_backends = "*";
@@ -616,6 +662,8 @@ clutter_backend_class_init (ClutterBackendClass *klass)
gobject_class->dispose = clutter_backend_dispose; gobject_class->dispose = clutter_backend_dispose;
gobject_class->finalize = clutter_backend_finalize; gobject_class->finalize = clutter_backend_finalize;
klass->stage_window_type = G_TYPE_INVALID;
/** /**
* ClutterBackend::resolution-changed: * ClutterBackend::resolution-changed:
* @backend: the #ClutterBackend that emitted the signal * @backend: the #ClutterBackend that emitted the signal
@@ -677,7 +725,9 @@ clutter_backend_class_init (ClutterBackendClass *klass)
klass->get_device_manager = clutter_backend_real_get_device_manager; klass->get_device_manager = clutter_backend_real_get_device_manager;
klass->translate_event = clutter_backend_real_translate_event; klass->translate_event = clutter_backend_real_translate_event;
klass->create_context = clutter_backend_real_create_context; klass->create_context = clutter_backend_real_create_context;
klass->ensure_context = clutter_backend_real_ensure_context;
klass->get_features = clutter_backend_real_get_features; klass->get_features = clutter_backend_real_get_features;
klass->create_stage = clutter_backend_real_create_stage;
} }
static void static void
@@ -768,6 +818,87 @@ _clutter_backend_create_context (ClutterBackend *backend,
return klass->create_context (backend, error); return klass->create_context (backend, error);
} }
void
_clutter_backend_ensure_context_internal (ClutterBackend *backend,
ClutterStage *stage)
{
ClutterBackendClass *klass = CLUTTER_BACKEND_GET_CLASS (backend);
if (G_LIKELY (klass->ensure_context))
klass->ensure_context (backend, stage);
}
void
_clutter_backend_ensure_context (ClutterBackend *backend,
ClutterStage *stage)
{
static ClutterStage *current_context_stage = NULL;
g_assert (CLUTTER_IS_BACKEND (backend));
g_assert (CLUTTER_IS_STAGE (stage));
if (current_context_stage != stage ||
!clutter_actor_is_realized (CLUTTER_ACTOR (stage)))
{
ClutterStage *new_stage = NULL;
if (!clutter_actor_is_realized (CLUTTER_ACTOR (stage)))
{
new_stage = NULL;
CLUTTER_NOTE (BACKEND,
"Stage [%p] is not realized, unsetting the stage",
stage);
}
else
{
new_stage = stage;
CLUTTER_NOTE (BACKEND,
"Setting the new stage [%p]",
new_stage);
}
/* XXX: Until Cogl becomes fully responsible for backend windows
* Clutter need to manually keep it informed of the current window size
*
* NB: This must be done after we ensure_context above because Cogl
* always assumes there is a current GL context.
*/
if (new_stage != NULL)
{
float width, height;
_clutter_backend_ensure_context_internal (backend, new_stage);
clutter_actor_get_size (CLUTTER_ACTOR (stage), &width, &height);
cogl_onscreen_clutter_backend_set_size (width, height);
/* Eventually we will have a separate CoglFramebuffer for
* each stage and each one will track private projection
* matrix and viewport state, but until then we need to make
* sure we update the projection and viewport whenever we
* switch between stages.
*
* This dirty mechanism will ensure they are asserted before
* the next paint...
*/
_clutter_stage_dirty_viewport (stage);
_clutter_stage_dirty_projection (stage);
}
/* FIXME: With a NULL stage and thus no active context it may make more
* sense to clean the context but then re call with the default stage
* so at least there is some kind of context in place (as to avoid
* potential issue of GL calls with no context).
*/
current_context_stage = new_stage;
}
else
CLUTTER_NOTE (BACKEND, "Stage is the same");
}
ClutterFeatureFlags ClutterFeatureFlags
_clutter_backend_get_features (ClutterBackend *backend) _clutter_backend_get_features (ClutterBackend *backend)
{ {
@@ -1215,7 +1346,7 @@ _clutter_backend_remove_event_translator (ClutterBackend *backend,
} }
/** /**
* clutter_backend_get_cogl_context: (skip) * clutter_backend_get_cogl_context:
* @backend: a #ClutterBackend * @backend: a #ClutterBackend
* *
* Retrieves the #CoglContext associated with the given clutter * Retrieves the #CoglContext associated with the given clutter
@@ -1364,41 +1495,3 @@ clutter_set_allowed_drivers (const char *drivers)
allowed_drivers = g_strdup (drivers); allowed_drivers = g_strdup (drivers);
} }
void
clutter_backend_bell_notify (ClutterBackend *backend)
{
ClutterBackendClass *klass;
klass = CLUTTER_BACKEND_GET_CLASS (backend);
if (klass->bell_notify)
klass->bell_notify (backend);
}
/**
* clutter_backend_get_input_method:
* @backend: the #CLutterBackend
*
* Returns the input method used by Clutter
*
* Returns: (transfer none): the input method
**/
ClutterInputMethod *
clutter_backend_get_input_method (ClutterBackend *backend)
{
return backend->input_method;
}
/**
* clutter_backend_set_input_method:
* @backend: the #ClutterBackend
* @method: the input method
*
* Sets the input method to be used by Clutter
**/
void
clutter_backend_set_input_method (ClutterBackend *backend,
ClutterInputMethod *method)
{
g_set_object (&backend->input_method, method);
}

View File

@@ -31,7 +31,9 @@
#include <cairo.h> #include <cairo.h>
#include <pango/pango.h> #include <pango/pango.h>
#ifdef COGL_ENABLE_EXPERIMENTAL_API
#include <cogl/cogl.h> #include <cogl/cogl.h>
#endif
#include <clutter/clutter-config.h> #include <clutter/clutter-config.h>
#include <clutter/clutter-types.h> #include <clutter/clutter-types.h>
@@ -71,18 +73,11 @@ void clutter_backend_set_font_options (Clutter
CLUTTER_AVAILABLE_IN_ALL CLUTTER_AVAILABLE_IN_ALL
const cairo_font_options_t * clutter_backend_get_font_options (ClutterBackend *backend); const cairo_font_options_t * clutter_backend_get_font_options (ClutterBackend *backend);
#if defined (COGL_ENABLE_EXPERIMENTAL_API) && defined (CLUTTER_ENABLE_EXPERIMENTAL_API)
CLUTTER_AVAILABLE_IN_1_8 CLUTTER_AVAILABLE_IN_1_8
CoglContext * clutter_backend_get_cogl_context (ClutterBackend *backend); CoglContext * clutter_backend_get_cogl_context (ClutterBackend *backend);
#endif
CLUTTER_AVAILABLE_IN_ALL
void clutter_backend_bell_notify (ClutterBackend *backend);
CLUTTER_AVAILABLE_IN_MUTTER
ClutterInputMethod * clutter_backend_get_input_method (ClutterBackend *backend);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_backend_set_input_method (ClutterBackend *backend,
ClutterInputMethod *method);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_BACKEND_H__ */ #endif /* __CLUTTER_BACKEND_H__ */

View File

@@ -31,7 +31,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-types.h" #include "clutter-types.h"

View File

@@ -21,8 +21,6 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>. * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "clutter-build-config.h"
#include <glib.h> #include <glib.h>
#include <string.h> #include <string.h>
#include "clutter-bezier.h" #include "clutter-bezier.h"
@@ -59,10 +57,6 @@
#define CBZ_T_STEP (CBZ_T_ONE / CBZ_T_SAMPLES) #define CBZ_T_STEP (CBZ_T_ONE / CBZ_T_SAMPLES)
#define CBZ_L_STEP (CBZ_T_ONE / CBZ_T_SAMPLES) #define CBZ_L_STEP (CBZ_T_ONE / CBZ_T_SAMPLES)
#define FIXED_BITS (32)
#define FIXED_Q (FIXED_BITS - 16)
#define FIXED_FROM_INT(x) ((x) << FIXED_Q)
typedef gint32 _FixedT; typedef gint32 _FixedT;
/* /*
@@ -192,90 +186,6 @@ _clutter_bezier_advance (const ClutterBezier *b, gint L, ClutterKnot * knot)
knot->x, knot->y); knot->x, knot->y);
} }
static int
sqrti (int number)
{
#if defined __SSE2__
/* The GCC built-in with SSE2 (sqrtsd) is up to twice as fast as
* the pure integer code below. It is also more accurate.
*/
return __builtin_sqrt (number);
#else
/* This is a fixed point implementation of the Quake III sqrt algorithm,
* described, for example, at
* http://www.codemaestro.com/reviews/review00000105.html
*
* While the original QIII is extremely fast, the use of floating division
* and multiplication makes it perform very on arm processors without FPU.
*
* The key to successfully replacing the floating point operations with
* fixed point is in the choice of the fixed point format. The QIII
* algorithm does not calculate the square root, but its reciprocal ('y'
* below), which is only at the end turned to the inverse value. In order
* for the algorithm to produce satisfactory results, the reciprocal value
* must be represented with sufficient precission; the 16.16 we use
* elsewhere in clutter is not good enough, and 10.22 is used instead.
*/
_FixedT x;
uint32_t y_1; /* 10.22 fixed point */
uint32_t f = 0x600000; /* '1.5' as 10.22 fixed */
union
{
float f;
uint32_t i;
} flt, flt2;
flt.f = number;
x = FIXED_FROM_INT (number) / 2;
/* The QIII initial estimate */
flt.i = 0x5f3759df - ( flt.i >> 1 );
/* Now, we convert the float to 10.22 fixed. We exploit the mechanism
* described at http://www.d6.com/users/checker/pdfs/gdmfp.pdf.
*
* We want 22 bit fraction; a single precission float uses 23 bit
* mantisa, so we only need to add 2^(23-22) (no need for the 1.5
* multiplier as we are only dealing with positive numbers).
*
* Note: we have to use two separate variables here -- for some reason,
* if we try to use just the flt variable, gcc on ARM optimises the whole
* addition out, and it all goes pear shape, since without it, the bits
* in the float will not be correctly aligned.
*/
flt2.f = flt.f + 2.0;
flt2.i &= 0x7FFFFF;
/* Now we correct the estimate */
y_1 = (flt2.i >> 11) * (flt2.i >> 11);
y_1 = (y_1 >> 8) * (x >> 8);
y_1 = f - y_1;
flt2.i = (flt2.i >> 11) * (y_1 >> 11);
/* If the original argument is less than 342, we do another
* iteration to improve precission (for arguments >= 342, the single
* iteration produces generally better results).
*/
if (x < 171)
{
y_1 = (flt2.i >> 11) * (flt2.i >> 11);
y_1 = (y_1 >> 8) * (x >> 8);
y_1 = f - y_1;
flt2.i = (flt2.i >> 11) * (y_1 >> 11);
}
/* Invert, round and convert from 10.22 to an integer
* 0x1e3c68 is a magical rounding constant that produces slightly
* better results than 0x200000.
*/
return (number * flt2.i + 0x1e3c68) >> 22;
#endif
}
void void
_clutter_bezier_init (ClutterBezier *b, _clutter_bezier_init (ClutterBezier *b,
gint x_0, gint y_0, gint x_0, gint y_0,
@@ -324,7 +234,7 @@ _clutter_bezier_init (ClutterBezier *b,
* triggers, we need to change those two functions a bit. * triggers, we need to change those two functions a bit.
*/ */
if (b->ax > 0x1fff || b->bx > 0x1fff || b->cx > 0x1fff) if (b->ax > 0x1fff || b->bx > 0x1fff || b->cx > 0x1fff)
g_warning ("Calculated coefficients will result in multiplication " g_warning ("Calculated coefficents will result in multiplication "
"overflow in clutter_bezier_t2x and clutter_bezier_t2y."); "overflow in clutter_bezier_t2x and clutter_bezier_t2y.");
/* /*
@@ -340,7 +250,7 @@ _clutter_bezier_init (ClutterBezier *b,
int x = _clutter_bezier_t2x (b, t); int x = _clutter_bezier_t2x (b, t);
int y = _clutter_bezier_t2y (b, t); int y = _clutter_bezier_t2y (b, t);
guint l = sqrti ((y - yp)*(y - yp) + (x - xp)*(x - xp)); guint l = cogl_sqrti ((y - yp)*(y - yp) + (x - xp)*(x - xp));
l += length[i-1]; l += length[i-1];

View File

@@ -44,7 +44,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -81,7 +81,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -95,7 +95,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-binding-pool.h" #include "clutter-binding-pool.h"

View File

@@ -38,7 +38,7 @@
#define CLUTTER_BLUR_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BLUR_EFFECT, ClutterBlurEffectClass)) #define CLUTTER_BLUR_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BLUR_EFFECT, ClutterBlurEffectClass))
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API

View File

@@ -49,7 +49,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -38,7 +38,7 @@
#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass)) #define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass))
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -28,7 +28,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-cairo.h" #include "clutter-cairo.h"

View File

@@ -43,7 +43,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <cogl/cogl.h> #include <cogl/cogl.h>
@@ -76,6 +76,9 @@ struct _ClutterCanvasPrivate
gboolean dirty; gboolean dirty;
CoglBitmap *buffer; CoglBitmap *buffer;
int scale_factor;
guint scale_factor_set : 1;
}; };
enum enum
@@ -84,6 +87,8 @@ enum
PROP_WIDTH, PROP_WIDTH,
PROP_HEIGHT, PROP_HEIGHT,
PROP_SCALE_FACTOR,
PROP_SCALE_FACTOR_SET,
LAST_PROP LAST_PROP
}; };
@@ -180,6 +185,11 @@ clutter_canvas_set_property (GObject *gobject,
} }
break; break;
case PROP_SCALE_FACTOR:
clutter_canvas_set_scale_factor (CLUTTER_CANVAS (gobject),
g_value_get_int (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@@ -204,6 +214,17 @@ clutter_canvas_get_property (GObject *gobject,
g_value_set_int (value, priv->height); g_value_set_int (value, priv->height);
break; break;
case PROP_SCALE_FACTOR:
if (priv->scale_factor_set)
g_value_set_int (value, priv->scale_factor);
else
g_value_set_int (value, -1);
break;
case PROP_SCALE_FACTOR_SET:
g_value_set_boolean (value, priv->scale_factor_set);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@@ -247,6 +268,46 @@ clutter_canvas_class_init (ClutterCanvasClass *klass)
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
/**
* ClutterCanvas:scale-factor-set:
*
* Whether the #ClutterCanvas:scale-factor property is set.
*
* If the #ClutterCanvas:scale-factor-set property is %FALSE
* then #ClutterCanvas will use the #ClutterSettings:window-scaling-factor
* property.
*
* Since: 1.18
*/
obj_props[PROP_SCALE_FACTOR_SET] =
g_param_spec_boolean ("scale-factor-set",
P_("Scale Factor Set"),
P_("Whether the scale-factor property is set"),
FALSE,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
/**
* ClutterCanvas:scale-factor:
*
* The scaling factor to be applied to the Cairo surface used for
* drawing.
*
* If #ClutterCanvas:scale-factor is set to a negative value, the
* value of the #ClutterSettings:window-scaling-factor property is
* used instead.
*
* Use #ClutterCanvas:scale-factor-set to check if the scale factor
* is set.
*
* Since: 1.18
*/
obj_props[PROP_SCALE_FACTOR] =
g_param_spec_int ("scale-factor",
P_("Scale Factor"),
P_("The scaling factor for the surface"),
-1, 1000,
-1,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
/** /**
* ClutterCanvas::draw: * ClutterCanvas::draw:
@@ -293,6 +354,7 @@ clutter_canvas_init (ClutterCanvas *self)
self->priv->width = -1; self->priv->width = -1;
self->priv->height = -1; self->priv->height = -1;
self->priv->scale_factor = -1;
} }
static void static void
@@ -335,18 +397,28 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
gboolean mapped_buffer; gboolean mapped_buffer;
unsigned char *data; unsigned char *data;
CoglBuffer *buffer; CoglBuffer *buffer;
int window_scale = 1;
gboolean res; gboolean res;
cairo_t *cr; cairo_t *cr;
g_assert (priv->height > 0 && priv->width > 0); g_assert (priv->width > 0 && priv->width > 0);
priv->dirty = TRUE; priv->dirty = TRUE;
real_width = priv->width; if (priv->scale_factor_set)
real_height = priv->height; window_scale = priv->scale_factor;
else
g_object_get (clutter_settings_get_default (),
"window-scaling-factor", &window_scale,
NULL);
CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d", real_width = priv->width * window_scale;
priv->width, priv->height); real_height = priv->height * window_scale;
CLUTTER_NOTE (MISC, "Creating Cairo surface with size %d x %d (real: %d x %d, scale: %d)",
priv->width, priv->height,
real_width, real_height,
window_scale);
if (priv->buffer == NULL) if (priv->buffer == NULL)
{ {
@@ -389,6 +461,8 @@ clutter_canvas_emit_draw (ClutterCanvas *self)
mapped_buffer = FALSE; mapped_buffer = FALSE;
} }
cairo_surface_set_device_scale (surface, window_scale, window_scale);
self->priv->cr = cr = cairo_create (surface); self->priv->cr = cr = cairo_create (surface);
g_signal_emit (self, canvas_signals[DRAW], 0, g_signal_emit (self, canvas_signals[DRAW], 0,
@@ -562,3 +636,81 @@ clutter_canvas_set_size (ClutterCanvas *canvas,
return clutter_canvas_invalidate_internal (canvas, width, height); return clutter_canvas_invalidate_internal (canvas, width, height);
} }
/**
* clutter_canvas_set_scale_factor:
* @canvas: a #ClutterCanvas
* @scale: the scale factor, or -1 for the default
*
* Sets the scaling factor for the Cairo surface used by @canvas.
*
* This function should rarely be used.
*
* The default scaling factor of a #ClutterCanvas content uses the
* #ClutterSettings:window-scaling-factor property, which is set by
* the windowing system. By using this function it is possible to
* override that setting.
*
* Changing the scale factor will invalidate the @canvas.
*
* Since: 1.18
*/
void
clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
int scale)
{
ClutterCanvasPrivate *priv;
GObject *obj;
g_return_if_fail (CLUTTER_IS_CANVAS (canvas));
g_return_if_fail (scale != 0);
priv = canvas->priv;
if (scale < 0)
{
if (!priv->scale_factor_set)
return;
priv->scale_factor_set = FALSE;
priv->scale_factor = -1;
}
else
{
if (priv->scale_factor_set && priv->scale_factor == scale)
return;
priv->scale_factor_set = TRUE;
priv->scale_factor = scale;
}
clutter_content_invalidate (CLUTTER_CONTENT (canvas));
obj = G_OBJECT (canvas);
g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR]);
g_object_notify_by_pspec (obj, obj_props[PROP_SCALE_FACTOR_SET]);
}
/**
* clutter_canvas_get_scale_factor:
* @canvas: a #ClutterCanvas
*
* Retrieves the scaling factor of @canvas, as set using
* clutter_canvas_set_scale_factor().
*
* Return value: the scaling factor, or -1 if the @canvas
* uses the default from #ClutterSettings
*
* Since: 1.18
*/
int
clutter_canvas_get_scale_factor (ClutterCanvas *canvas)
{
g_return_val_if_fail (CLUTTER_IS_CANVAS (canvas), -1);
if (!canvas->priv->scale_factor_set)
return -1;
return canvas->priv->scale_factor;
}

View File

@@ -37,7 +37,7 @@
* #ClutterChildMeta is available since Clutter 0.8 * #ClutterChildMeta is available since Clutter 0.8
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-child-meta.h" #include "clutter-child-meta.h"

View File

@@ -93,7 +93,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-click-action.h" #include "clutter-click-action.h"

View File

@@ -38,7 +38,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API
@@ -54,7 +54,6 @@
struct _ClutterClonePrivate struct _ClutterClonePrivate
{ {
ClutterActor *clone_source; ClutterActor *clone_source;
gulong source_destroy_id;
}; };
G_DEFINE_TYPE_WITH_PRIVATE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR) G_DEFINE_TYPE_WITH_PRIVATE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR)
@@ -377,13 +376,6 @@ clutter_clone_new (ClutterActor *source)
return g_object_new (CLUTTER_TYPE_CLONE, "source", source, NULL); return g_object_new (CLUTTER_TYPE_CLONE, "source", source, NULL);
} }
static void
on_source_destroyed (ClutterActor *source,
ClutterClone *self)
{
clutter_clone_set_source_internal (self, NULL);
}
static void static void
clutter_clone_set_source_internal (ClutterClone *self, clutter_clone_set_source_internal (ClutterClone *self,
ClutterActor *source) ClutterActor *source)
@@ -395,8 +387,6 @@ clutter_clone_set_source_internal (ClutterClone *self,
if (priv->clone_source != NULL) if (priv->clone_source != NULL)
{ {
g_signal_handler_disconnect (priv->clone_source, priv->source_destroy_id);
priv->source_destroy_id = 0;
_clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self)); _clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self));
g_object_unref (priv->clone_source); g_object_unref (priv->clone_source);
priv->clone_source = NULL; priv->clone_source = NULL;
@@ -406,8 +396,6 @@ clutter_clone_set_source_internal (ClutterClone *self,
{ {
priv->clone_source = g_object_ref (source); priv->clone_source = g_object_ref (source);
_clutter_actor_attach_clone (priv->clone_source, CLUTTER_ACTOR (self)); _clutter_actor_attach_clone (priv->clone_source, CLUTTER_ACTOR (self));
priv->source_destroy_id = g_signal_connect (priv->clone_source, "destroy",
G_CALLBACK (on_source_destroyed), self);
} }
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_SOURCE]); g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_SOURCE]);

View File

@@ -0,0 +1,52 @@
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2012 Intel Corporation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef __CLUTTER_COGL_COMPAT_H__
#define __CLUTTER_COGL_COMPAT_H__
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <clutter/clutter.h> can be included directly."
#endif
G_BEGIN_DECLS
/* XXX: Some public Clutter apis depend on Cogl types that have been
* removed from the Cogl 2.0 experimental api.
*
* If somone has opted to use the Cogl 2.0 experimental api by
* defining COGL_ENABLE_EXPERIMENTAL_2_0_API then we need to define
* some place holder typdefs for compatability.
*
* NB: we build all clutter internals with COGL_ENABLE_EXPERIMENTAL_2_0_API
* defined.
*/
#ifdef COGL_ENABLE_EXPERIMENTAL_2_0_API
/* CoglMaterial has been replaced with CoglPipeline in Cogl 2.0 */
typedef struct _CoglMaterial CoglMaterial;
#endif
G_END_DECLS
#endif /* __CLUTTER_COGL_COMPAT_H__ */

View File

@@ -34,7 +34,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>
@@ -48,7 +48,7 @@
#include "clutter-debug.h" #include "clutter-debug.h"
/* XXX - keep in sync with the ClutterStaticColor enumeration order */ /* XXX - keep in sync with the ClutterStaticColor enumeration order */
static const ClutterColor static_colors[] = { static const ClutterColor const static_colors[] = {
/* CGA/EGA color palette */ /* CGA/EGA color palette */
{ 0xff, 0xff, 0xff, 0xff }, /* white */ { 0xff, 0xff, 0xff, 0xff }, /* white */
{ 0x00, 0x00, 0x00, 0xff }, /* black */ { 0x00, 0x00, 0x00, 0xff }, /* black */

View File

@@ -38,7 +38,7 @@
#define CLUTTER_COLORIZE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_COLORIZE_EFFECT, ClutterColorizeEffectClass)) #define CLUTTER_COLORIZE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_COLORIZE_EFFECT, ClutterColorizeEffectClass))
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API

View File

@@ -129,7 +129,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <string.h> #include <string.h>

View File

@@ -27,7 +27,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <stdarg.h> #include <stdarg.h>

View File

@@ -37,7 +37,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-content-private.h" #include "clutter-content-private.h"

View File

@@ -52,7 +52,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API

View File

@@ -20,6 +20,7 @@
#include "deprecated/clutter-box.h" #include "deprecated/clutter-box.h"
#include "deprecated/clutter-cairo-texture.h" #include "deprecated/clutter-cairo-texture.h"
#include "deprecated/clutter-container.h" #include "deprecated/clutter-container.h"
#include "deprecated/clutter-fixed.h"
#include "deprecated/clutter-frame-source.h" #include "deprecated/clutter-frame-source.h"
#include "deprecated/clutter-group.h" #include "deprecated/clutter-group.h"
#include "deprecated/clutter-input-device.h" #include "deprecated/clutter-input-device.h"

View File

@@ -40,7 +40,7 @@
#define CLUTTER_DESATURATE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DESATURATE_EFFECT, ClutterDesaturateEffectClass)) #define CLUTTER_DESATURATE_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DESATURATE_EFFECT, ClutterDesaturateEffectClass))
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API

View File

@@ -131,23 +131,13 @@ struct _ClutterInputDevice
gchar *vendor_id; gchar *vendor_id;
gchar *product_id; gchar *product_id;
gchar *node_path;
GPtrArray *tools; GPtrArray *tools;
gint n_rings;
gint n_strips;
gint n_mode_groups;
ClutterInputDeviceMapping mapping_mode;
guint has_cursor : 1; guint has_cursor : 1;
guint is_enabled : 1; guint is_enabled : 1;
}; };
typedef void (*ClutterEmitInputDeviceEvent) (ClutterEvent *event,
ClutterInputDevice *device);
struct _ClutterInputDeviceClass struct _ClutterInputDeviceClass
{ {
GObjectClass parent_class; GObjectClass parent_class;
@@ -157,20 +147,6 @@ struct _ClutterInputDeviceClass
guint *evdev_keycode); guint *evdev_keycode);
void (* update_from_tool) (ClutterInputDevice *device, void (* update_from_tool) (ClutterInputDevice *device,
ClutterInputDeviceTool *tool); ClutterInputDeviceTool *tool);
gboolean (* is_mode_switch_button) (ClutterInputDevice *device,
guint group,
guint button);
gint (* get_group_n_modes) (ClutterInputDevice *device,
gint group);
gboolean (* is_grouped) (ClutterInputDevice *device,
ClutterInputDevice *other_device);
/* Keyboard accessbility */
void (* process_kbd_a11y_event) (ClutterEvent *event,
ClutterInputDevice *device,
ClutterEmitInputDeviceEvent emit_event_func);
}; };
/* Platform-dependent interface */ /* Platform-dependent interface */
@@ -205,10 +181,6 @@ void _clutter_device_manager_select_stage_events (ClutterDeviceMa
ClutterStage *stage); ClutterStage *stage);
ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager); ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceManager *device_manager);
void _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manger,
ClutterEvent *event,
const ClutterEvent *to_discard);
/* input device */ /* input device */
gboolean _clutter_input_device_has_sequence (ClutterInputDevice *device, gboolean _clutter_input_device_has_sequence (ClutterInputDevice *device,
ClutterEventSequence *sequence); ClutterEventSequence *sequence);

View File

@@ -37,7 +37,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-backend-private.h" #include "clutter-backend-private.h"
@@ -47,16 +47,11 @@
#include "clutter-marshal.h" #include "clutter-marshal.h"
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-stage-private.h" #include "clutter-stage-private.h"
#include "clutter-virtual-input-device.h"
#include "clutter-input-device-tool.h"
struct _ClutterDeviceManagerPrivate struct _ClutterDeviceManagerPrivate
{ {
/* back-pointer to the backend */ /* back-pointer to the backend */
ClutterBackend *backend; ClutterBackend *backend;
/* Keyboard a11y */
ClutterKbdA11ySettings kbd_a11y_settings;
}; };
enum enum
@@ -74,9 +69,6 @@ enum
{ {
DEVICE_ADDED, DEVICE_ADDED,
DEVICE_REMOVED, DEVICE_REMOVED,
TOOL_CHANGED,
KBD_A11Y_MASK_CHANGED,
KBD_A11Y_FLAGS_CHANGED,
LAST_SIGNAL LAST_SIGNAL
}; };
@@ -191,56 +183,6 @@ clutter_device_manager_class_init (ClutterDeviceManagerClass *klass)
_clutter_marshal_VOID__OBJECT, _clutter_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
CLUTTER_TYPE_INPUT_DEVICE); CLUTTER_TYPE_INPUT_DEVICE);
manager_signals[TOOL_CHANGED] =
g_signal_new (I_("tool-changed"),
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
_clutter_marshal_VOID__OBJECT_OBJECT,
G_TYPE_NONE, 2,
CLUTTER_TYPE_INPUT_DEVICE,
CLUTTER_TYPE_INPUT_DEVICE_TOOL);
/**
* ClutterDeviceManager::kbd-a11y-mods-state-changed:
* @manager: the #ClutterDeviceManager that emitted the signal
* @latched_mask: the latched modifier mask from stickykeys
* @locked_mask: the locked modifier mask from stickykeys
*
* The ::kbd-a11y-mods-state-changed signal is emitted each time either the
* latched modifiers mask or locked modifiers mask are changed as the
* result of keyboard accessibilty's sticky keys operations.
*/
manager_signals[KBD_A11Y_MASK_CHANGED] =
g_signal_new (I_("kbd-a11y-mods-state-changed"),
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
_clutter_marshal_VOID__UINT_UINT,
G_TYPE_NONE, 2,
G_TYPE_UINT,
G_TYPE_UINT);
/**
* ClutterDeviceManager::kbd-a11y-flags-changed:
* @manager: the #ClutterDeviceManager that emitted the signal
* @settings_flags: the new ClutterKeyboardA11yFlags configuration
* @changed_mask: the ClutterKeyboardA11yFlags changed
*
* The ::kbd-a11y-flags-changed signal is emitted each time the
* ClutterKeyboardA11yFlags configuration is changed as the result of
* keyboard accessibilty operations.
*/
manager_signals[KBD_A11Y_FLAGS_CHANGED] =
g_signal_new (I_("kbd-a11y-flags-changed"),
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
_clutter_marshal_VOID__UINT_UINT,
G_TYPE_NONE, 2,
G_TYPE_UINT,
G_TYPE_UINT);
} }
static void static void
@@ -493,97 +435,3 @@ _clutter_device_manager_get_backend (ClutterDeviceManager *manager)
return manager->priv->backend; return manager->priv->backend;
} }
/**
* clutter_device_manager_create_virtual_device:
* @device_manager: a #ClutterDeviceManager
* @device_type: the type of the virtual device
*
* Creates a virtual input device.
*
* Returns: (transfer full): a newly created virtual device
**/
ClutterVirtualInputDevice *
clutter_device_manager_create_virtual_device (ClutterDeviceManager *device_manager,
ClutterInputDeviceType device_type)
{
ClutterDeviceManagerClass *manager_class;
g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL);
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
return manager_class->create_virtual_device (device_manager,
device_type);
}
/**
* clutter_device_manager_supported_virtua_device_types: (skip)
*/
ClutterVirtualDeviceType
clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager)
{
ClutterDeviceManagerClass *manager_class;
g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager),
CLUTTER_VIRTUAL_DEVICE_TYPE_NONE);
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
return manager_class->get_supported_virtual_device_types (device_manager);
}
void
_clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager,
ClutterEvent *event,
const ClutterEvent *to_discard)
{
ClutterDeviceManagerClass *manager_class;
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
if (!manager_class->compress_motion)
return;
manager_class->compress_motion (device_manager, event, to_discard);
}
static gboolean
are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a,
ClutterKbdA11ySettings *b)
{
return (a->controls == b->controls &&
a->slowkeys_delay == b->slowkeys_delay &&
a->debounce_delay == b->debounce_delay &&
a->timeout_delay == b->timeout_delay &&
a->mousekeys_init_delay == b->mousekeys_init_delay &&
a->mousekeys_max_speed == b->mousekeys_max_speed &&
a->mousekeys_accel_time == b->mousekeys_accel_time);
}
void
clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *settings)
{
ClutterDeviceManagerClass *manager_class;
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
if (are_kbd_a11y_settings_equal (&device_manager->priv->kbd_a11y_settings, settings))
return;
device_manager->priv->kbd_a11y_settings = *settings;
manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
if (manager_class->apply_kbd_a11y_settings)
manager_class->apply_kbd_a11y_settings (device_manager, settings);
}
void
clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *settings)
{
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
*settings = device_manager->priv->kbd_a11y_settings;
}

View File

@@ -44,35 +44,6 @@ typedef struct _ClutterDeviceManager ClutterDeviceManager;
typedef struct _ClutterDeviceManagerPrivate ClutterDeviceManagerPrivate; typedef struct _ClutterDeviceManagerPrivate ClutterDeviceManagerPrivate;
typedef struct _ClutterDeviceManagerClass ClutterDeviceManagerClass; typedef struct _ClutterDeviceManagerClass ClutterDeviceManagerClass;
/**
* ClutterVirtualDeviceType:
*/
typedef enum _ClutterVirtualDeviceType
{
CLUTTER_VIRTUAL_DEVICE_TYPE_NONE = 0,
CLUTTER_VIRTUAL_DEVICE_TYPE_KEYBOARD = 1 << 0,
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER = 1 << 1,
CLUTTER_VIRTUAL_DEVICE_TYPE_TOUCHSCREEN = 1 << 2,
} ClutterVirtualDeviceType;
/**
* ClutterKbdA11ySettings:
*
* The #ClutterKbdA11ySettings structure contains keyboard accessibility
* settings
*
*/
typedef struct _ClutterKbdA11ySettings
{
ClutterKeyboardA11yFlags controls;
gint slowkeys_delay;
gint debounce_delay;
gint timeout_delay;
gint mousekeys_init_delay;
gint mousekeys_max_speed;
gint mousekeys_accel_time;
} ClutterKbdA11ySettings;
/** /**
* ClutterDeviceManager: * ClutterDeviceManager:
* *
@@ -112,17 +83,9 @@ struct _ClutterDeviceManagerClass
ClutterInputDevice *device); ClutterInputDevice *device);
void (* select_stage_events) (ClutterDeviceManager *manager, void (* select_stage_events) (ClutterDeviceManager *manager,
ClutterStage *stage); ClutterStage *stage);
ClutterVirtualInputDevice *(* create_virtual_device) (ClutterDeviceManager *device_manager,
ClutterInputDeviceType device_type);
ClutterVirtualDeviceType (* get_supported_virtual_device_types) (ClutterDeviceManager *device_manager);
void (* compress_motion) (ClutterDeviceManager *device_manger,
ClutterEvent *event,
const ClutterEvent *to_discard);
/* Keyboard accessbility */
void (* apply_kbd_a11y_settings) (ClutterDeviceManager *device_manger,
ClutterKbdA11ySettings *settings);
/* padding */ /* padding */
gpointer _padding[6]; gpointer _padding[7];
}; };
CLUTTER_AVAILABLE_IN_1_2 CLUTTER_AVAILABLE_IN_1_2
@@ -142,20 +105,6 @@ CLUTTER_AVAILABLE_IN_1_2
ClutterInputDevice * clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager, ClutterInputDevice * clutter_device_manager_get_core_device (ClutterDeviceManager *device_manager,
ClutterInputDeviceType device_type); ClutterInputDeviceType device_type);
CLUTTER_AVAILABLE_IN_ALL
ClutterVirtualInputDevice *clutter_device_manager_create_virtual_device (ClutterDeviceManager *device_manager,
ClutterInputDeviceType device_type);
CLUTTER_AVAILABLE_IN_ALL
ClutterVirtualDeviceType clutter_device_manager_get_supported_virtual_device_types (ClutterDeviceManager *device_manager);
CLUTTER_AVAILABLE_IN_ALL
void clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *settings);
CLUTTER_AVAILABLE_IN_ALL
void clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *settings);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_DEVICE_MANAGER_H__ */ #endif /* __CLUTTER_DEVICE_MANAGER_H__ */

View File

@@ -64,7 +64,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-drag-action.h" #include "clutter-drag-action.h"

View File

@@ -59,7 +59,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-drop-action.h" #include "clutter-drop-action.h"

View File

@@ -1,4 +1,4 @@
#include "clutter-build-config.h" #include "config.h"
#include "clutter-easing.h" #include "clutter-easing.h"

View File

@@ -161,7 +161,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-effect.h" #include "clutter-effect.h"

View File

@@ -1,5 +1,5 @@
/*** BEGIN file-header ***/ /*** BEGIN file-header ***/
#include "clutter-build-config.h" #include "config.h"
#include "clutter-enum-types.h" #include "clutter-enum-types.h"
/*** END file-header ***/ /*** END file-header ***/

View File

@@ -396,43 +396,6 @@ typedef enum {
CLUTTER_MODIFIER_MASK = 0x5c001fff CLUTTER_MODIFIER_MASK = 0x5c001fff
} ClutterModifierType; } ClutterModifierType;
/**
* ClutterKeyboardA11yFlags:
* @CLUTTER_A11Y_KEYBOARD_ENABLED:
* @CLUTTER_A11Y_TIMEOUT_ENABLED:
* @CLUTTER_A11Y_MOUSE_KEYS_ENABLED:
* @CLUTTER_A11Y_SLOW_KEYS_ENABLED:
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS:
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT:
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT:
* @CLUTTER_A11Y_BOUNCE_KEYS_ENABLED:
* @CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT:
* @CLUTTER_A11Y_TOGGLE_KEYS_ENABLED:
* @CLUTTER_A11Y_STICKY_KEYS_ENABLED:
* @CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF:
* @CLUTTER_A11Y_STICKY_KEYS_BEEP:
* @CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP:
*
* Keyboard accessibility features applied to a ClutterInputDevice keyboard.
*
*/
typedef enum {
CLUTTER_A11Y_KEYBOARD_ENABLED = 1 << 0,
CLUTTER_A11Y_TIMEOUT_ENABLED = 1 << 1,
CLUTTER_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
CLUTTER_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
CLUTTER_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
CLUTTER_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
CLUTTER_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
CLUTTER_A11Y_STICKY_KEYS_BEEP = 1 << 12,
CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
} ClutterKeyboardA11yFlags;
/** /**
* ClutterActorFlags: * ClutterActorFlags:
* @CLUTTER_ACTOR_MAPPED: the actor will be painted (is visible, and inside * @CLUTTER_ACTOR_MAPPED: the actor will be painted (is visible, and inside
@@ -761,17 +724,14 @@ typedef enum { /*< prefix=CLUTTER_DRAG >*/
* ClutterEventFlags: * ClutterEventFlags:
* @CLUTTER_EVENT_NONE: No flag set * @CLUTTER_EVENT_NONE: No flag set
* @CLUTTER_EVENT_FLAG_SYNTHETIC: Synthetic event * @CLUTTER_EVENT_FLAG_SYNTHETIC: Synthetic event
* @CLUTTER_EVENT_FLAG_REPEATED: Auto-repeated event
* *
* Flags for the #ClutterEvent * Flags for the #ClutterEvent
* *
* Since: 0.6 * Since: 0.6
*/ */
typedef enum { /*< flags prefix=CLUTTER_EVENT >*/ typedef enum { /*< flags prefix=CLUTTER_EVENT >*/
CLUTTER_EVENT_NONE = 0, CLUTTER_EVENT_NONE = 0,
CLUTTER_EVENT_FLAG_SYNTHETIC = 1 << 0, CLUTTER_EVENT_FLAG_SYNTHETIC = 1 << 0
CLUTTER_EVENT_FLAG_INPUT_METHOD = 1 << 1,
CLUTTER_EVENT_FLAG_REPEATED = 1 << 2
} ClutterEventFlags; } ClutterEventFlags;
/** /**
@@ -834,10 +794,6 @@ typedef enum { /*< prefix=CLUTTER >*/
CLUTTER_TOUCHPAD_SWIPE, CLUTTER_TOUCHPAD_SWIPE,
CLUTTER_PROXIMITY_IN, CLUTTER_PROXIMITY_IN,
CLUTTER_PROXIMITY_OUT, CLUTTER_PROXIMITY_OUT,
CLUTTER_PAD_BUTTON_PRESS,
CLUTTER_PAD_BUTTON_RELEASE,
CLUTTER_PAD_STRIP,
CLUTTER_PAD_RING,
CLUTTER_EVENT_LAST /* helper */ CLUTTER_EVENT_LAST /* helper */
} ClutterEventType; } ClutterEventType;
@@ -944,7 +900,6 @@ typedef enum { /*< prefix=CLUTTER_FLOW >*/
* @CLUTTER_PEN_DEVICE: A pen device * @CLUTTER_PEN_DEVICE: A pen device
* @CLUTTER_ERASER_DEVICE: An eraser device * @CLUTTER_ERASER_DEVICE: An eraser device
* @CLUTTER_CURSOR_DEVICE: A cursor device * @CLUTTER_CURSOR_DEVICE: A cursor device
* @CLUTTER_PAD_DEVICE: A tablet pad
* @CLUTTER_N_DEVICE_TYPES: The number of device types * @CLUTTER_N_DEVICE_TYPES: The number of device types
* *
* The types of input devices available. * The types of input devices available.
@@ -965,7 +920,6 @@ typedef enum {
CLUTTER_PEN_DEVICE, CLUTTER_PEN_DEVICE,
CLUTTER_ERASER_DEVICE, CLUTTER_ERASER_DEVICE,
CLUTTER_CURSOR_DEVICE, CLUTTER_CURSOR_DEVICE,
CLUTTER_PAD_DEVICE,
CLUTTER_N_DEVICE_TYPES CLUTTER_N_DEVICE_TYPES
} ClutterInputDeviceType; } ClutterInputDeviceType;
@@ -1566,51 +1520,6 @@ typedef enum {
CLUTTER_INPUT_DEVICE_TOOL_LENS CLUTTER_INPUT_DEVICE_TOOL_LENS
} ClutterInputDeviceToolType; } ClutterInputDeviceToolType;
typedef enum {
CLUTTER_INPUT_DEVICE_PAD_SOURCE_UNKNOWN,
CLUTTER_INPUT_DEVICE_PAD_SOURCE_FINGER,
} ClutterInputDevicePadSource;
typedef enum {
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE,
CLUTTER_INPUT_DEVICE_MAPPING_RELATIVE,
} ClutterInputDeviceMapping;
typedef enum {
CLUTTER_INPUT_CONTENT_HINT_COMPLETION = 1 << 0,
CLUTTER_INPUT_CONTENT_HINT_SPELLCHECK = 1 << 1,
CLUTTER_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION = 1 << 2,
CLUTTER_INPUT_CONTENT_HINT_LOWERCASE = 1 << 3,
CLUTTER_INPUT_CONTENT_HINT_UPPERCASE = 1 << 4,
CLUTTER_INPUT_CONTENT_HINT_TITLECASE = 1 << 5,
CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT = 1 << 6,
CLUTTER_INPUT_CONTENT_HINT_SENSITIVE_DATA = 1 << 7,
CLUTTER_INPUT_CONTENT_HINT_LATIN = 1 << 8,
CLUTTER_INPUT_CONTENT_HINT_MULTILINE = 1 << 9,
} ClutterInputContentHintFlags;
typedef enum {
CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL,
CLUTTER_INPUT_CONTENT_PURPOSE_ALPHA,
CLUTTER_INPUT_CONTENT_PURPOSE_DIGITS,
CLUTTER_INPUT_CONTENT_PURPOSE_NUMBER,
CLUTTER_INPUT_CONTENT_PURPOSE_PHONE,
CLUTTER_INPUT_CONTENT_PURPOSE_URL,
CLUTTER_INPUT_CONTENT_PURPOSE_EMAIL,
CLUTTER_INPUT_CONTENT_PURPOSE_NAME,
CLUTTER_INPUT_CONTENT_PURPOSE_PASSWORD,
CLUTTER_INPUT_CONTENT_PURPOSE_DATE,
CLUTTER_INPUT_CONTENT_PURPOSE_TIME,
CLUTTER_INPUT_CONTENT_PURPOSE_DATETIME,
CLUTTER_INPUT_CONTENT_PURPOSE_TERMINAL,
} ClutterInputContentPurpose;
typedef enum {
CLUTTER_INPUT_PANEL_STATE_OFF,
CLUTTER_INPUT_PANEL_STATE_ON,
CLUTTER_INPUT_PANEL_STATE_TOGGLE,
} ClutterInputPanelState;
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_ENUMS_H__ */ #endif /* __CLUTTER_ENUMS_H__ */

View File

@@ -1,4 +1,4 @@
#include "clutter-build-config.h" #include "config.h"
#include "clutter-event-translator.h" #include "clutter-event-translator.h"

View File

@@ -29,7 +29,6 @@ struct _ClutterEventTranslatorIface
ClutterEvent *translated); ClutterEvent *translated);
}; };
CLUTTER_AVAILABLE_IN_MUTTER
GType _clutter_event_translator_get_type (void) G_GNUC_CONST; GType _clutter_event_translator_get_type (void) G_GNUC_CONST;
ClutterTranslateReturn _clutter_event_translator_translate_event (ClutterEventTranslator *translator, ClutterTranslateReturn _clutter_event_translator_translate_event (ClutterEventTranslator *translator,

View File

@@ -24,7 +24,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-backend-private.h" #include "clutter-backend-private.h"
@@ -413,10 +413,6 @@ clutter_event_get_position (const ClutterEvent *event,
case CLUTTER_EVENT_LAST: case CLUTTER_EVENT_LAST:
case CLUTTER_PROXIMITY_IN: case CLUTTER_PROXIMITY_IN:
case CLUTTER_PROXIMITY_OUT: case CLUTTER_PROXIMITY_OUT:
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
case CLUTTER_PAD_STRIP:
case CLUTTER_PAD_RING:
clutter_point_init (position, 0.f, 0.f); clutter_point_init (position, 0.f, 0.f);
break; break;
@@ -487,10 +483,6 @@ clutter_event_set_coords (ClutterEvent *event,
case CLUTTER_EVENT_LAST: case CLUTTER_EVENT_LAST:
case CLUTTER_PROXIMITY_IN: case CLUTTER_PROXIMITY_IN:
case CLUTTER_PROXIMITY_OUT: case CLUTTER_PROXIMITY_OUT:
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
case CLUTTER_PAD_STRIP:
case CLUTTER_PAD_RING:
break; break;
case CLUTTER_ENTER: case CLUTTER_ENTER:
@@ -819,15 +811,9 @@ clutter_event_get_button (const ClutterEvent *event)
{ {
g_return_val_if_fail (event != NULL, 0); g_return_val_if_fail (event != NULL, 0);
g_return_val_if_fail (event->type == CLUTTER_BUTTON_PRESS || g_return_val_if_fail (event->type == CLUTTER_BUTTON_PRESS ||
event->type == CLUTTER_BUTTON_RELEASE || event->type == CLUTTER_BUTTON_RELEASE, 0);
event->type == CLUTTER_PAD_BUTTON_PRESS ||
event->type == CLUTTER_PAD_BUTTON_RELEASE, 0);
if (event->type == CLUTTER_BUTTON_PRESS || return event->button.button;
event->type == CLUTTER_BUTTON_RELEASE)
return event->button.button;
else
return event->pad_button.button;
} }
/** /**
@@ -1147,19 +1133,6 @@ clutter_event_set_device (ClutterEvent *event,
case CLUTTER_PROXIMITY_OUT: case CLUTTER_PROXIMITY_OUT:
event->proximity.device = device; event->proximity.device = device;
break; break;
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
event->pad_button.device = device;
break;
case CLUTTER_PAD_STRIP:
event->pad_strip.device = device;
break;
case CLUTTER_PAD_RING:
event->pad_ring.device = device;
break;
} }
} }
@@ -1244,19 +1217,6 @@ clutter_event_get_device (const ClutterEvent *event)
case CLUTTER_PROXIMITY_OUT: case CLUTTER_PROXIMITY_OUT:
device = event->proximity.device; device = event->proximity.device;
break; break;
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
device = event->pad_button.device;
break;
case CLUTTER_PAD_STRIP:
device = event->pad_strip.device;
break;
case CLUTTER_PAD_RING:
device = event->pad_ring.device;
break;
} }
return device; return device;
@@ -1748,10 +1708,6 @@ clutter_event_get_axes (const ClutterEvent *event,
case CLUTTER_TOUCHPAD_PINCH: case CLUTTER_TOUCHPAD_PINCH:
case CLUTTER_TOUCHPAD_SWIPE: case CLUTTER_TOUCHPAD_SWIPE:
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
case CLUTTER_PAD_STRIP:
case CLUTTER_PAD_RING:
break; break;
} }
@@ -1990,28 +1946,22 @@ clutter_event_remove_filter (guint id)
} }
/** /**
* clutter_event_get_touchpad_gesture_finger_count: * clutter_event_get_gesture_swipe_finger_count:
* @event: a touchpad swipe/pinch event * @event: a touchpad swipe event
* *
* Returns the number of fingers that is triggering the touchpad gesture. * Returns the number of fingers that is triggering the touchpad gesture.
* *
* Returns: the number of fingers in the gesture. * Returns: the number of fingers swiping.
* *
* Since: 1.24 * Since: 1.24
**/ **/
guint guint
clutter_event_get_touchpad_gesture_finger_count (const ClutterEvent *event) clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event)
{ {
g_return_val_if_fail (event != NULL, 0); g_return_val_if_fail (event != NULL, 0);
g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_SWIPE || g_return_val_if_fail (event->type == CLUTTER_TOUCHPAD_SWIPE, 0);
event->type == CLUTTER_TOUCHPAD_PINCH, 0);
if (event->type == CLUTTER_TOUCHPAD_SWIPE) return event->touchpad_swipe.n_fingers;
return event->touchpad_swipe.n_fingers;
else if (event->type == CLUTTER_TOUCHPAD_PINCH)
return event->touchpad_pinch.n_fingers;
return 0;
} }
/** /**
@@ -2158,82 +2108,3 @@ clutter_event_get_scroll_finish_flags (const ClutterEvent *event)
return event->scroll.finish_flags; return event->scroll.finish_flags;
} }
guint
clutter_event_get_mode_group (const ClutterEvent *event)
{
g_return_val_if_fail (event->type == CLUTTER_PAD_BUTTON_PRESS ||
event->type == CLUTTER_PAD_BUTTON_RELEASE ||
event->type == CLUTTER_PAD_RING ||
event->type == CLUTTER_PAD_STRIP, 0);
switch (event->type)
{
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
return event->pad_button.group;
case CLUTTER_PAD_RING:
return event->pad_ring.group;
case CLUTTER_PAD_STRIP:
return event->pad_strip.group;
default:
return 0;
}
}
/**
* clutter_event_get_pad_event_details:
* @event: a pad event
* @number: (out) (optional): ring/strip/button number
* @mode: (out) (optional): pad mode as per the event
* @value: (out) (optional): event axis value
*
* Returns the details of a pad event.
*
* Returns: #TRUE if event details could be obtained
**/
gboolean
clutter_event_get_pad_event_details (const ClutterEvent *event,
guint *number,
guint *mode,
gdouble *value)
{
guint n, m;
gdouble v;
g_return_val_if_fail (event != NULL, FALSE);
g_return_val_if_fail (event->type == CLUTTER_PAD_BUTTON_PRESS ||
event->type == CLUTTER_PAD_BUTTON_RELEASE ||
event->type == CLUTTER_PAD_RING ||
event->type == CLUTTER_PAD_STRIP, FALSE);
switch (event->type)
{
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
n = event->pad_button.button;
m = event->pad_button.mode;
v = 0.0;
break;
case CLUTTER_PAD_RING:
n = event->pad_ring.ring_number;
m = event->pad_ring.mode;
v = event->pad_ring.angle;
break;
case CLUTTER_PAD_STRIP:
n = event->pad_strip.strip_number;
m = event->pad_strip.mode;
v = event->pad_strip.value;
break;
default:
return FALSE;
}
if (number)
*number = n;
if (mode)
*mode = m;
if (value)
*value = v;
return TRUE;
}

View File

@@ -118,9 +118,6 @@ typedef struct _ClutterTouchEvent ClutterTouchEvent;
typedef struct _ClutterTouchpadPinchEvent ClutterTouchpadPinchEvent; typedef struct _ClutterTouchpadPinchEvent ClutterTouchpadPinchEvent;
typedef struct _ClutterTouchpadSwipeEvent ClutterTouchpadSwipeEvent; typedef struct _ClutterTouchpadSwipeEvent ClutterTouchpadSwipeEvent;
typedef struct _ClutterProximityEvent ClutterProximityEvent; typedef struct _ClutterProximityEvent ClutterProximityEvent;
typedef struct _ClutterPadButtonEvent ClutterPadButtonEvent;
typedef struct _ClutterPadStripEvent ClutterPadStripEvent;
typedef struct _ClutterPadRingEvent ClutterPadRingEvent;
/** /**
* ClutterAnyEvent: * ClutterAnyEvent:
@@ -459,7 +456,6 @@ struct _ClutterTouchpadPinchEvent
gfloat dy; gfloat dy;
gfloat angle_delta; gfloat angle_delta;
gfloat scale; gfloat scale;
guint n_fingers;
}; };
/** /**
@@ -497,52 +493,6 @@ struct _ClutterTouchpadSwipeEvent
gfloat dy; gfloat dy;
}; };
struct _ClutterPadButtonEvent
{
ClutterEventType type;
guint32 time;
ClutterEventFlags flags;
ClutterStage *stage;
ClutterActor *source;
guint32 button;
guint32 group;
ClutterInputDevice *device;
guint32 mode;
};
struct _ClutterPadStripEvent
{
ClutterEventType type;
guint32 time;
ClutterEventFlags flags;
ClutterStage *stage;
ClutterActor *source;
ClutterInputDevice *device;
ClutterInputDevicePadSource strip_source;
guint32 strip_number;
guint32 group;
gdouble value;
guint32 mode;
};
struct _ClutterPadRingEvent
{
ClutterEventType type;
guint32 time;
ClutterEventFlags flags;
ClutterStage *stage;
ClutterActor *source;
ClutterInputDevice *device;
ClutterInputDevicePadSource ring_source;
guint32 ring_number;
guint32 group;
gdouble angle;
guint32 mode;
};
/** /**
* ClutterEvent: * ClutterEvent:
* *
@@ -566,9 +516,6 @@ union _ClutterEvent
ClutterTouchpadPinchEvent touchpad_pinch; ClutterTouchpadPinchEvent touchpad_pinch;
ClutterTouchpadSwipeEvent touchpad_swipe; ClutterTouchpadSwipeEvent touchpad_swipe;
ClutterProximityEvent proximity; ClutterProximityEvent proximity;
ClutterPadButtonEvent pad_button;
ClutterPadStripEvent pad_strip;
ClutterPadRingEvent pad_ring;
}; };
/** /**
@@ -756,7 +703,7 @@ CLUTTER_AVAILABLE_IN_1_2
const ClutterEvent * clutter_get_current_event (void); const ClutterEvent * clutter_get_current_event (void);
CLUTTER_AVAILABLE_IN_1_24 CLUTTER_AVAILABLE_IN_1_24
guint clutter_event_get_touchpad_gesture_finger_count (const ClutterEvent *event); guint clutter_event_get_gesture_swipe_finger_count (const ClutterEvent *event);
CLUTTER_AVAILABLE_IN_1_24 CLUTTER_AVAILABLE_IN_1_24
gdouble clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event); gdouble clutter_event_get_gesture_pinch_angle_delta (const ClutterEvent *event);
@@ -775,16 +722,6 @@ void clutter_event_get_gesture_motion_delta (const Clut
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event); ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags (const ClutterEvent *event); ClutterScrollFinishFlags clutter_event_get_scroll_finish_flags (const ClutterEvent *event);
CLUTTER_AVAILABLE_IN_ALL
guint clutter_event_get_mode_group (const ClutterEvent *event);
CLUTTER_AVAILABLE_IN_MUTTER
gboolean clutter_event_get_pad_event_details (const ClutterEvent *event,
guint *number,
guint *mode,
gdouble *value);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_EVENT_H__ */ #endif /* __CLUTTER_EVENT_H__ */

View File

@@ -38,7 +38,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <stdlib.h> #include <stdlib.h>

View File

@@ -35,7 +35,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-debug.h" #include "clutter-debug.h"

View File

@@ -28,7 +28,7 @@
it only exists because that class is abstract */ it only exists because that class is abstract */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-flatten-effect.h" #include "clutter-flatten-effect.h"

View File

@@ -53,7 +53,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -84,7 +84,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-gesture-action-private.h" #include "clutter-gesture-action-private.h"

View File

@@ -27,7 +27,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <string.h> #include <string.h>

View File

@@ -29,7 +29,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-debug.h" #include "clutter-debug.h"

View File

@@ -37,7 +37,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API

View File

@@ -131,8 +131,10 @@ gboolean clutter_image_set_bytes (ClutterImage
guint row_stride, guint row_stride,
GError **error); GError **error);
#if defined(COGL_ENABLE_EXPERIMENTAL_API) && defined(CLUTTER_ENABLE_EXPERIMENTAL_API)
CLUTTER_AVAILABLE_IN_1_10 CLUTTER_AVAILABLE_IN_1_10
CoglTexture * clutter_image_get_texture (ClutterImage *image); CoglTexture * clutter_image_get_texture (ClutterImage *image);
#endif
G_END_DECLS G_END_DECLS

View File

@@ -22,7 +22,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-input-device-tool.h" #include "clutter-input-device-tool.h"
@@ -34,14 +34,12 @@ struct _ClutterInputDeviceToolPrivate
{ {
ClutterInputDeviceToolType type; ClutterInputDeviceToolType type;
guint64 serial; guint64 serial;
guint64 id;
}; };
enum { enum {
PROP_0, PROP_0,
PROP_TYPE, PROP_TYPE,
PROP_SERIAL, PROP_SERIAL,
PROP_ID,
PROP_LAST PROP_LAST
}; };
@@ -68,9 +66,6 @@ clutter_input_device_tool_set_property (GObject *object,
case PROP_SERIAL: case PROP_SERIAL:
priv->serial = g_value_get_uint64 (value); priv->serial = g_value_get_uint64 (value);
break; break;
case PROP_ID:
priv->id = g_value_get_uint64 (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
} }
@@ -95,9 +90,6 @@ clutter_input_device_tool_get_property (GObject *object,
case PROP_SERIAL: case PROP_SERIAL:
g_value_set_uint64 (value, priv->serial); g_value_set_uint64 (value, priv->serial);
break; break;
case PROP_ID:
g_value_set_uint64 (value, priv->id);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
} }
@@ -124,12 +116,6 @@ clutter_input_device_tool_class_init (ClutterInputDeviceToolClass *klass)
P_("Tool serial"), P_("Tool serial"),
0, G_MAXUINT64, 0, 0, G_MAXUINT64, 0,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
props[PROP_ID] =
g_param_spec_uint64 ("id",
P_("Tool ID"),
P_("Tool ID"),
0, G_MAXUINT64, 0,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (gobject_class, PROP_LAST, props); g_object_class_install_properties (gobject_class, PROP_LAST, props);
} }
@@ -150,7 +136,7 @@ clutter_input_device_tool_init (ClutterInputDeviceTool *tool)
* *
* Since: 1.28 * Since: 1.28
**/ **/
guint64 guint
clutter_input_device_tool_get_serial (ClutterInputDeviceTool *tool) clutter_input_device_tool_get_serial (ClutterInputDeviceTool *tool)
{ {
ClutterInputDeviceToolPrivate *priv; ClutterInputDeviceToolPrivate *priv;
@@ -184,24 +170,3 @@ clutter_input_device_tool_get_tool_type (ClutterInputDeviceTool *tool)
return priv->type; return priv->type;
} }
/**
* clutter_input_device_tool_get_id:
* @tool: a #ClutterInputDeviceTool
*
* Gets the ID of this tool, this value can be used to identify a
* physical tool (eg. a tablet pen) across program executions.
*
* Returns: The tool ID for this tool
**/
guint64
clutter_input_device_tool_get_id (ClutterInputDeviceTool *tool)
{
ClutterInputDeviceToolPrivate *priv;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE_TOOL (tool), 0);
priv = clutter_input_device_tool_get_instance_private (tool);
return priv->id;
}

View File

@@ -56,14 +56,11 @@ CLUTTER_AVAILABLE_IN_ALL
GType clutter_input_device_tool_get_type (void) G_GNUC_CONST; GType clutter_input_device_tool_get_type (void) G_GNUC_CONST;
CLUTTER_AVAILABLE_IN_ALL CLUTTER_AVAILABLE_IN_ALL
guint64 clutter_input_device_tool_get_serial (ClutterInputDeviceTool *tool); guint clutter_input_device_tool_get_serial (ClutterInputDeviceTool *tool);
CLUTTER_AVAILABLE_IN_ALL CLUTTER_AVAILABLE_IN_ALL
ClutterInputDeviceToolType clutter_input_device_tool_get_tool_type (ClutterInputDeviceTool *tool); ClutterInputDeviceToolType clutter_input_device_tool_get_tool_type (ClutterInputDeviceTool *tool);
CLUTTER_AVAILABLE_IN_ALL
guint64 clutter_input_device_tool_get_id (ClutterInputDeviceTool *tool);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_INPUT_DEVICE_TOOL_H__ */ #endif /* __CLUTTER_INPUT_DEVICE_TOOL_H__ */

View File

@@ -32,7 +32,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-input-device.h" #include "clutter-input-device.h"
@@ -70,12 +70,6 @@ enum
PROP_VENDOR_ID, PROP_VENDOR_ID,
PROP_PRODUCT_ID, PROP_PRODUCT_ID,
PROP_N_STRIPS,
PROP_N_RINGS,
PROP_N_MODE_GROUPS,
PROP_DEVICE_NODE,
PROP_MAPPING_MODE,
PROP_LAST PROP_LAST
}; };
@@ -201,26 +195,6 @@ clutter_input_device_set_property (GObject *gobject,
self->product_id = g_value_dup_string (value); self->product_id = g_value_dup_string (value);
break; break;
case PROP_N_RINGS:
self->n_rings = g_value_get_int (value);
break;
case PROP_N_STRIPS:
self->n_strips = g_value_get_int (value);
break;
case PROP_N_MODE_GROUPS:
self->n_mode_groups = g_value_get_int (value);
break;
case PROP_DEVICE_NODE:
self->node_path = g_value_dup_string (value);
break;
case PROP_MAPPING_MODE:
self->mapping_mode = g_value_get_enum (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@@ -281,26 +255,6 @@ clutter_input_device_get_property (GObject *gobject,
g_value_set_string (value, self->product_id); g_value_set_string (value, self->product_id);
break; break;
case PROP_N_RINGS:
g_value_set_int (value, self->n_rings);
break;
case PROP_N_STRIPS:
g_value_set_int (value, self->n_strips);
break;
case PROP_N_MODE_GROUPS:
g_value_set_int (value, self->n_mode_groups);
break;
case PROP_DEVICE_NODE:
g_value_set_string (value, self->node_path);
break;
case PROP_MAPPING_MODE:
g_value_set_enum (value, self->mapping_mode);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@@ -478,42 +432,6 @@ clutter_input_device_class_init (ClutterInputDeviceClass *klass)
NULL, NULL,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
obj_props[PROP_N_RINGS] =
g_param_spec_int ("n-rings",
P_("Number of rings"),
P_("Number of rings (circular sliders) in this device"),
0, G_MAXINT, 0,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
obj_props[PROP_N_STRIPS] =
g_param_spec_int ("n-strips",
P_("Number of strips"),
P_("Number of strips (linear sliders) in this device"),
0, G_MAXINT, 0,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
obj_props[PROP_N_MODE_GROUPS] =
g_param_spec_int ("n-mode-groups",
P_("Number of mode groups"),
P_("Number of mode groups"),
0, G_MAXINT, 0,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
obj_props[PROP_DEVICE_NODE] =
g_param_spec_string ("device-node",
P_("Device node path"),
P_("Device node path"),
NULL,
CLUTTER_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
obj_props[PROP_MAPPING_MODE] =
g_param_spec_enum ("mapping-mode",
P_("Device mapping mode"),
P_("Device mapping mode"),
CLUTTER_TYPE_INPUT_DEVICE_MAPPING,
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE,
CLUTTER_PARAM_READWRITE);
gobject_class->dispose = clutter_input_device_dispose; gobject_class->dispose = clutter_input_device_dispose;
gobject_class->set_property = clutter_input_device_set_property; gobject_class->set_property = clutter_input_device_set_property;
gobject_class->get_property = clutter_input_device_get_property; gobject_class->get_property = clutter_input_device_get_property;
@@ -2148,141 +2066,3 @@ clutter_input_device_update_from_tool (ClutterInputDevice *device,
if (device_class->update_from_tool) if (device_class->update_from_tool)
device_class->update_from_tool (device, tool); device_class->update_from_tool (device, tool);
} }
gint
clutter_input_device_get_n_rings (ClutterInputDevice *device)
{
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
return device->n_rings;
}
gint
clutter_input_device_get_n_strips (ClutterInputDevice *device)
{
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
return device->n_strips;
}
gint
clutter_input_device_get_n_mode_groups (ClutterInputDevice *device)
{
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
CLUTTER_PAD_DEVICE, 0);
return device->n_mode_groups;
}
gint
clutter_input_device_get_group_n_modes (ClutterInputDevice *device,
gint group)
{
ClutterInputDeviceClass *device_class;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), 0);
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
CLUTTER_PAD_DEVICE, 0);
g_return_val_if_fail (group >= 0, 0);
device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
if (device_class->get_group_n_modes)
return device_class->get_group_n_modes (device, group);
return 0;
}
gboolean
clutter_input_device_is_mode_switch_button (ClutterInputDevice *device,
guint group,
guint button)
{
ClutterInputDeviceClass *device_class;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
CLUTTER_PAD_DEVICE, FALSE);
device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
if (device_class->is_mode_switch_button)
return device_class->is_mode_switch_button (device, group, button);
return FALSE;
}
gint
clutter_input_device_get_mode_switch_button_group (ClutterInputDevice *device,
guint button)
{
gint group;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), -1);
g_return_val_if_fail (clutter_input_device_get_device_type (device) ==
CLUTTER_PAD_DEVICE, -1);
for (group = 0; group < device->n_mode_groups; group++)
{
if (clutter_input_device_is_mode_switch_button (device, group, button))
return group;
}
return -1;
}
const gchar *
clutter_input_device_get_device_node (ClutterInputDevice *device)
{
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
return device->node_path;
}
ClutterInputDeviceMapping
clutter_input_device_get_mapping_mode (ClutterInputDevice *device)
{
ClutterInputDeviceType device_type;
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device),
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE);
device_type = clutter_input_device_get_device_type (device);
g_return_val_if_fail (device_type == CLUTTER_TABLET_DEVICE ||
device_type == CLUTTER_PEN_DEVICE ||
device_type == CLUTTER_ERASER_DEVICE,
CLUTTER_INPUT_DEVICE_MAPPING_ABSOLUTE);
return device->mapping_mode;
}
void
clutter_input_device_set_mapping_mode (ClutterInputDevice *device,
ClutterInputDeviceMapping mapping)
{
ClutterInputDeviceType device_type;
g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device));
device_type = clutter_input_device_get_device_type (device);
g_return_if_fail (device_type == CLUTTER_TABLET_DEVICE ||
device_type == CLUTTER_PEN_DEVICE ||
device_type == CLUTTER_ERASER_DEVICE);
if (device->mapping_mode == mapping)
return;
device->mapping_mode = mapping;
g_object_notify (G_OBJECT (device), "mapping-mode");
}
gboolean
clutter_input_device_is_grouped (ClutterInputDevice *device,
ClutterInputDevice *other_device)
{
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (other_device), FALSE);
return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->is_grouped (device, other_device);
}

View File

@@ -140,38 +140,6 @@ const gchar * clutter_input_device_get_vendor_id (ClutterInputDev
CLUTTER_AVAILABLE_IN_1_22 CLUTTER_AVAILABLE_IN_1_22
const gchar * clutter_input_device_get_product_id (ClutterInputDevice *device); const gchar * clutter_input_device_get_product_id (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_ALL
gint clutter_input_device_get_n_rings (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_ALL
gint clutter_input_device_get_n_strips (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_ALL
gint clutter_input_device_get_n_mode_groups (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_ALL
gint clutter_input_device_get_group_n_modes (ClutterInputDevice *device,
gint group);
CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_input_device_is_mode_switch_button (ClutterInputDevice *device,
guint group,
guint button);
CLUTTER_AVAILABLE_IN_ALL
gint clutter_input_device_get_mode_switch_button_group (ClutterInputDevice *device,
guint button);
CLUTTER_AVAILABLE_IN_ALL
const gchar * clutter_input_device_get_device_node (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_ALL
ClutterInputDeviceMapping clutter_input_device_get_mapping_mode (ClutterInputDevice *device);
CLUTTER_AVAILABLE_IN_ALL
void clutter_input_device_set_mapping_mode (ClutterInputDevice *device,
ClutterInputDeviceMapping mapping);
CLUTTER_AVAILABLE_IN_ALL
gboolean clutter_input_device_is_grouped (ClutterInputDevice *device,
ClutterInputDevice *other_device);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_INPUT_DEVICE_H__ */ #endif /* __CLUTTER_INPUT_DEVICE_H__ */

View File

@@ -1,40 +0,0 @@
/*
* Copyright (C) 2017,2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#ifndef __CLUTTER_INPUT_FOCUS_PRIVATE_H__
#define __CLUTTER_INPUT_FOCUS_PRIVATE_H__
void clutter_input_focus_focus_in (ClutterInputFocus *focus,
ClutterInputMethod *method);
void clutter_input_focus_focus_out (ClutterInputFocus *focus);
void clutter_input_focus_commit (ClutterInputFocus *focus,
const gchar *text);
void clutter_input_focus_delete_surrounding (ClutterInputFocus *focus,
guint offset,
guint len);
void clutter_input_focus_request_surrounding (ClutterInputFocus *focus);
void clutter_input_focus_set_preedit_text (ClutterInputFocus *focus,
const gchar *preedit,
guint cursor);
#endif /* __CLUTTER_INPUT_FOCUS_PRIVATE_H__ */

View File

@@ -1,243 +0,0 @@
/*
* Copyright (C) 2017,2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#include "clutter-build-config.h"
#include "clutter/clutter-input-focus.h"
#include "clutter/clutter-input-focus-private.h"
#include "clutter/clutter-input-method-private.h"
typedef struct _ClutterInputFocusPrivate ClutterInputFocusPrivate;
struct _ClutterInputFocusPrivate
{
ClutterInputMethod *im;
};
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputFocus, clutter_input_focus, G_TYPE_OBJECT)
static void
clutter_input_focus_real_focus_in (ClutterInputFocus *focus,
ClutterInputMethod *im)
{
ClutterInputFocusPrivate *priv;
priv = clutter_input_focus_get_instance_private (focus);
priv->im = im;
}
static void
clutter_input_focus_real_focus_out (ClutterInputFocus *focus)
{
ClutterInputFocusPrivate *priv;
priv = clutter_input_focus_get_instance_private (focus);
priv->im = NULL;
}
static void
clutter_input_focus_class_init (ClutterInputFocusClass *klass)
{
klass->focus_in = clutter_input_focus_real_focus_in;
klass->focus_out = clutter_input_focus_real_focus_out;
}
static void
clutter_input_focus_init (ClutterInputFocus *focus)
{
}
gboolean
clutter_input_focus_is_focused (ClutterInputFocus *focus)
{
ClutterInputFocusPrivate *priv;
priv = clutter_input_focus_get_instance_private (focus);
return !!priv->im;
}
void
clutter_input_focus_reset (ClutterInputFocus *focus)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_reset (priv->im);
}
void
clutter_input_focus_set_cursor_location (ClutterInputFocus *focus,
const ClutterRect *rect)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_set_cursor_location (priv->im, rect);
}
void
clutter_input_focus_set_surrounding (ClutterInputFocus *focus,
const gchar *text,
guint cursor,
guint anchor)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_set_surrounding (priv->im, text, cursor, anchor);
}
void
clutter_input_focus_set_content_hints (ClutterInputFocus *focus,
ClutterInputContentHintFlags hints)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_set_content_hints (priv->im, hints);
}
void
clutter_input_focus_set_content_purpose (ClutterInputFocus *focus,
ClutterInputContentPurpose purpose)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_set_content_purpose (priv->im, purpose);
}
gboolean
clutter_input_focus_filter_key_event (ClutterInputFocus *focus,
const ClutterKeyEvent *key)
{
ClutterInputFocusPrivate *priv;
g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE);
g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE);
priv = clutter_input_focus_get_instance_private (focus);
return clutter_input_method_filter_key_event (priv->im, key);
}
void
clutter_input_focus_set_can_show_preedit (ClutterInputFocus *focus,
gboolean can_show_preedit)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_set_can_show_preedit (priv->im, can_show_preedit);
}
void
clutter_input_focus_request_toggle_input_panel (ClutterInputFocus *focus)
{
ClutterInputFocusPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (clutter_input_focus_is_focused (focus));
priv = clutter_input_focus_get_instance_private (focus);
clutter_input_method_toggle_input_panel (priv->im);
}
void
clutter_input_focus_focus_in (ClutterInputFocus *focus,
ClutterInputMethod *im)
{
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->focus_in (focus, im);
}
void
clutter_input_focus_focus_out (ClutterInputFocus *focus)
{
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->focus_out (focus);
}
void
clutter_input_focus_commit (ClutterInputFocus *focus,
const gchar *text)
{
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->commit_text (focus, text);
}
void
clutter_input_focus_delete_surrounding (ClutterInputFocus *focus,
guint offset,
guint len)
{
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->delete_surrounding (focus, offset, len);
}
void
clutter_input_focus_request_surrounding (ClutterInputFocus *focus)
{
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->request_surrounding (focus);
}
void
clutter_input_focus_set_preedit_text (ClutterInputFocus *focus,
const gchar *preedit,
guint cursor)
{
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
CLUTTER_INPUT_FOCUS_GET_CLASS (focus)->set_preedit_text (focus, preedit, cursor);
}

View File

@@ -1,83 +0,0 @@
/*
* Copyright (C) 2017,2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#ifndef __CLUTTER_INPUT_FOCUS_H__
#define __CLUTTER_INPUT_FOCUS_H__
#include <clutter/clutter.h>
#define CLUTTER_TYPE_INPUT_FOCUS (clutter_input_focus_get_type ())
CLUTTER_AVAILABLE_IN_MUTTER
G_DECLARE_DERIVABLE_TYPE (ClutterInputFocus, clutter_input_focus,
CLUTTER, INPUT_FOCUS, GObject)
struct _ClutterInputFocusClass
{
GObjectClass parent_class;
GTypeInterface iface;
void (* focus_in) (ClutterInputFocus *focus,
ClutterInputMethod *input_method);
void (* focus_out) (ClutterInputFocus *focus);
void (* request_surrounding) (ClutterInputFocus *focus);
void (* delete_surrounding) (ClutterInputFocus *focus,
guint offset,
guint len);
void (* commit_text) (ClutterInputFocus *focus,
const gchar *text);
void (* set_preedit_text) (ClutterInputFocus *focus,
const gchar *preedit,
guint cursor);
};
CLUTTER_AVAILABLE_IN_MUTTER
gboolean clutter_input_focus_is_focused (ClutterInputFocus *focus);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_reset (ClutterInputFocus *focus);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_set_cursor_location (ClutterInputFocus *focus,
const ClutterRect *rect);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_set_surrounding (ClutterInputFocus *focus,
const gchar *text,
guint cursor,
guint anchor);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_set_content_hints (ClutterInputFocus *focus,
ClutterInputContentHintFlags hint);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_set_content_purpose (ClutterInputFocus *focus,
ClutterInputContentPurpose purpose);
CLUTTER_AVAILABLE_IN_MUTTER
gboolean clutter_input_focus_filter_key_event (ClutterInputFocus *focus,
const ClutterKeyEvent *key);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_set_can_show_preedit (ClutterInputFocus *focus,
gboolean can_show_preedit);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_focus_request_toggle_input_panel (ClutterInputFocus *focus);
#endif /* __CLUTTER_INPUT_FOCUS_H__ */

View File

@@ -1,46 +0,0 @@
/*
* Copyright (C) 2017,2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#ifndef __CLUTTER_INPUT_METHOD_PRIVATE_H__
#define __CLUTTER_INPUT_METHOD_PRIVATE_H__
ClutterInputFocus * clutter_input_method_get_focus (ClutterInputMethod *method);
void clutter_input_method_reset (ClutterInputMethod *method);
void clutter_input_method_set_cursor_location (ClutterInputMethod *method,
const ClutterRect *rect);
void clutter_input_method_set_surrounding (ClutterInputMethod *method,
const gchar *text,
guint cursor,
guint anchor);
void clutter_input_method_set_content_hints (ClutterInputMethod *method,
ClutterInputContentHintFlags hints);
void clutter_input_method_set_content_purpose (ClutterInputMethod *method,
ClutterInputContentPurpose purpose);
void clutter_input_method_set_can_show_preedit (ClutterInputMethod *method,
gboolean can_show_preedit);
gboolean clutter_input_method_filter_key_event (ClutterInputMethod *method,
const ClutterKeyEvent *key);
void clutter_input_method_toggle_input_panel (ClutterInputMethod *method);
#endif /* __CLUTTER_INPUT_METHOD_PRIVATE_H__ */

View File

@@ -1,444 +0,0 @@
/*
* Copyright (C) 2017,2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#include "clutter-build-config.h"
#include "clutter-private.h"
#include "clutter/clutter-input-method.h"
#include "clutter/clutter-input-method-private.h"
#include "clutter/clutter-input-focus-private.h"
typedef struct _ClutterInputMethodPrivate ClutterInputMethodPrivate;
struct _ClutterInputMethodPrivate
{
ClutterInputFocus *focus;
ClutterInputContentHintFlags content_hints;
ClutterInputContentPurpose content_purpose;
gboolean can_show_preedit;
};
enum {
COMMIT,
DELETE_SURROUNDING,
REQUEST_SURROUNDING,
INPUT_PANEL_STATE,
CURSOR_LOCATION_CHANGED,
N_SIGNALS,
};
enum {
PROP_0,
PROP_CONTENT_HINTS,
PROP_CONTENT_PURPOSE,
PROP_CAN_SHOW_PREEDIT,
N_PROPS
};
static guint signals[N_SIGNALS] = { 0 };
static GParamSpec *pspecs[N_PROPS] = { 0 };
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterInputMethod, clutter_input_method, G_TYPE_OBJECT)
static void
set_content_hints (ClutterInputMethod *im,
ClutterInputContentHintFlags content_hints)
{
ClutterInputMethodPrivate *priv;
priv = clutter_input_method_get_instance_private (im);
priv->content_hints = content_hints;
CLUTTER_INPUT_METHOD_GET_CLASS (im)->update_content_hints (im, content_hints);
}
static void
set_content_purpose (ClutterInputMethod *im,
ClutterInputContentPurpose content_purpose)
{
ClutterInputMethodPrivate *priv;
priv = clutter_input_method_get_instance_private (im);
priv->content_purpose = content_purpose;
CLUTTER_INPUT_METHOD_GET_CLASS (im)->update_content_purpose (im,
content_purpose);
}
static void
set_can_show_preedit (ClutterInputMethod *im,
gboolean can_show_preedit)
{
ClutterInputMethodPrivate *priv;
priv = clutter_input_method_get_instance_private (im);
priv->can_show_preedit = can_show_preedit;
}
static void
clutter_input_method_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
switch (prop_id)
{
case PROP_CONTENT_HINTS:
set_content_hints (CLUTTER_INPUT_METHOD (object),
g_value_get_flags (value));
break;
case PROP_CONTENT_PURPOSE:
set_content_purpose (CLUTTER_INPUT_METHOD (object),
g_value_get_enum (value));
break;
case PROP_CAN_SHOW_PREEDIT:
set_can_show_preedit (CLUTTER_INPUT_METHOD (object),
g_value_get_boolean (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
clutter_input_method_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
ClutterInputMethodPrivate *priv;
ClutterInputMethod *im;
im = CLUTTER_INPUT_METHOD (object);
priv = clutter_input_method_get_instance_private (im);
switch (prop_id)
{
case PROP_CONTENT_HINTS:
g_value_set_flags (value, priv->content_hints);
break;
case PROP_CONTENT_PURPOSE:
g_value_set_enum (value, priv->content_purpose);
break;
case PROP_CAN_SHOW_PREEDIT:
g_value_set_boolean (value, priv->can_show_preedit);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
clutter_input_method_class_init (ClutterInputMethodClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->set_property = clutter_input_method_set_property;
object_class->get_property = clutter_input_method_get_property;
signals[COMMIT] =
g_signal_new ("commit",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_STRING);
signals[DELETE_SURROUNDING] =
g_signal_new ("delete-surrounding",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
signals[REQUEST_SURROUNDING] =
g_signal_new ("request-surrounding",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[INPUT_PANEL_STATE] =
g_signal_new ("input-panel-state",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1,
CLUTTER_TYPE_INPUT_PANEL_STATE);
signals[CURSOR_LOCATION_CHANGED] =
g_signal_new ("cursor-location-changed",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1, CLUTTER_TYPE_RECT);
pspecs[PROP_CONTENT_HINTS] =
g_param_spec_flags ("content-hints",
P_("Content hints"),
P_("Content hints"),
CLUTTER_TYPE_INPUT_CONTENT_HINT_FLAGS, 0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
pspecs[PROP_CONTENT_PURPOSE] =
g_param_spec_enum ("content-purpose",
P_("Content purpose"),
P_("Content purpose"),
CLUTTER_TYPE_INPUT_CONTENT_PURPOSE, 0,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
pspecs[PROP_CAN_SHOW_PREEDIT] =
g_param_spec_boolean ("can-show-preedit",
P_("Can show preedit"),
P_("Can show preedit"),
FALSE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, pspecs);
}
static void
clutter_input_method_init (ClutterInputMethod *im)
{
}
void
clutter_input_method_focus_in (ClutterInputMethod *im,
ClutterInputFocus *focus)
{
ClutterInputMethodPrivate *priv;
ClutterInputMethodClass *klass;
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
g_return_if_fail (CLUTTER_IS_INPUT_FOCUS (focus));
priv = clutter_input_method_get_instance_private (im);
if (priv->focus == focus)
return;
if (priv->focus)
clutter_input_method_focus_out (im);
g_set_object (&priv->focus, focus);
if (focus)
{
klass = CLUTTER_INPUT_METHOD_GET_CLASS (im);
klass->focus_in (im, focus);
clutter_input_focus_focus_in (priv->focus, im);
}
}
void
clutter_input_method_focus_out (ClutterInputMethod *im)
{
ClutterInputMethodPrivate *priv;
ClutterInputMethodClass *klass;
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
priv = clutter_input_method_get_instance_private (im);
if (!priv->focus)
return;
clutter_input_focus_focus_out (priv->focus);
g_clear_object (&priv->focus);
klass = CLUTTER_INPUT_METHOD_GET_CLASS (im);
klass->focus_out (im);
g_signal_emit (im, signals[INPUT_PANEL_STATE],
0, CLUTTER_INPUT_PANEL_STATE_OFF);
}
ClutterInputFocus *
clutter_input_method_get_focus (ClutterInputMethod *im)
{
ClutterInputMethodPrivate *priv;
priv = clutter_input_method_get_instance_private (im);
return priv->focus;
}
void
clutter_input_method_commit (ClutterInputMethod *im,
const gchar *text)
{
ClutterInputMethodPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
priv = clutter_input_method_get_instance_private (im);
if (priv->focus)
clutter_input_focus_commit (priv->focus, text);
}
void
clutter_input_method_delete_surrounding (ClutterInputMethod *im,
guint offset,
guint len)
{
ClutterInputMethodPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
priv = clutter_input_method_get_instance_private (im);
if (priv->focus)
clutter_input_focus_delete_surrounding (priv->focus, offset, len);
}
void
clutter_input_method_request_surrounding (ClutterInputMethod *im)
{
ClutterInputMethodPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
priv = clutter_input_method_get_instance_private (im);
if (priv->focus)
clutter_input_focus_request_surrounding (priv->focus);
}
/**
* clutter_input_method_set_preedit_text:
* @im: a #ClutterInputMethod
* @preedit: (nullable): the preedit text, or %NULL
* @cursor: the cursor
*
* Sets the preedit text on the current input focus.
**/
void
clutter_input_method_set_preedit_text (ClutterInputMethod *im,
const gchar *preedit,
guint cursor)
{
ClutterInputMethodPrivate *priv;
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
priv = clutter_input_method_get_instance_private (im);
if (priv->focus)
clutter_input_focus_set_preedit_text (priv->focus, preedit, cursor);
}
void
clutter_input_method_notify_key_event (ClutterInputMethod *im,
const ClutterEvent *event,
gboolean filtered)
{
if (!filtered)
{
ClutterEvent *copy;
/* XXX: we rely on the IM implementation to notify back of
* key events in the exact same order they were given.
*/
copy = clutter_event_copy (event);
clutter_event_set_flags (copy, clutter_event_get_flags (event) |
CLUTTER_EVENT_FLAG_INPUT_METHOD);
clutter_event_set_source_device (copy, clutter_event_get_device (copy));
clutter_event_put (copy);
clutter_event_free (copy);
}
}
void
clutter_input_method_toggle_input_panel (ClutterInputMethod *im)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
g_signal_emit (im, signals[INPUT_PANEL_STATE], 0,
CLUTTER_INPUT_PANEL_STATE_TOGGLE);
}
void
clutter_input_method_reset (ClutterInputMethod *im)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
CLUTTER_INPUT_METHOD_GET_CLASS (im)->reset (im);
}
void
clutter_input_method_set_cursor_location (ClutterInputMethod *im,
const ClutterRect *rect)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
CLUTTER_INPUT_METHOD_GET_CLASS (im)->set_cursor_location (im, rect);
g_signal_emit (im, signals[CURSOR_LOCATION_CHANGED], 0, rect);
}
void
clutter_input_method_set_surrounding (ClutterInputMethod *im,
const gchar *text,
guint cursor,
guint anchor)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
CLUTTER_INPUT_METHOD_GET_CLASS (im)->set_surrounding (im, text,
cursor, anchor);
}
void
clutter_input_method_set_content_hints (ClutterInputMethod *im,
ClutterInputContentHintFlags hints)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
g_object_set (G_OBJECT (im), "content-hints", hints, NULL);
}
void
clutter_input_method_set_content_purpose (ClutterInputMethod *im,
ClutterInputContentPurpose purpose)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
g_object_set (G_OBJECT (im), "content-purpose", purpose, NULL);
}
void
clutter_input_method_set_can_show_preedit (ClutterInputMethod *im,
gboolean can_show_preedit)
{
g_return_if_fail (CLUTTER_IS_INPUT_METHOD (im));
g_object_set (G_OBJECT (im), "can-show-preedit", can_show_preedit, NULL);
}
gboolean
clutter_input_method_filter_key_event (ClutterInputMethod *im,
const ClutterKeyEvent *key)
{
ClutterInputMethodClass *im_class = CLUTTER_INPUT_METHOD_GET_CLASS (im);
g_return_val_if_fail (CLUTTER_IS_INPUT_METHOD (im), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
if (clutter_event_get_flags ((ClutterEvent *) key) & CLUTTER_EVENT_FLAG_INPUT_METHOD)
return FALSE;
if (!im_class->filter_key_event)
return FALSE;
return im_class->filter_key_event (im, (const ClutterEvent *) key);
}

View File

@@ -1,88 +0,0 @@
/*
* Copyright (C) 2017,2018 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Author: Carlos Garnacho <carlosg@gnome.org>
*/
#ifndef __CLUTTER_INPUT_METHOD_H__
#define __CLUTTER_INPUT_METHOD_H__
#include <clutter/clutter.h>
#define CLUTTER_TYPE_INPUT_METHOD (clutter_input_method_get_type ())
CLUTTER_AVAILABLE_IN_MUTTER
G_DECLARE_DERIVABLE_TYPE (ClutterInputMethod, clutter_input_method,
CLUTTER, INPUT_METHOD, GObject)
typedef struct _ClutterInputMethodClass ClutterInputMethodClass;
struct _ClutterInputMethodClass
{
GObjectClass parent_class;
void (* focus_in) (ClutterInputMethod *im,
ClutterInputFocus *actor);
void (* focus_out) (ClutterInputMethod *im);
void (* reset) (ClutterInputMethod *im);
void (* set_cursor_location) (ClutterInputMethod *im,
const ClutterRect *rect);
void (* set_surrounding) (ClutterInputMethod *im,
const gchar *text,
guint cursor,
guint anchor);
void (* update_content_hints) (ClutterInputMethod *im,
ClutterInputContentHintFlags hint);
void (* update_content_purpose) (ClutterInputMethod *im,
ClutterInputContentPurpose purpose);
gboolean (* filter_key_event) (ClutterInputMethod *im,
const ClutterEvent *key);
};
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_focus_in (ClutterInputMethod *im,
ClutterInputFocus *focus);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_focus_out (ClutterInputMethod *im);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_commit (ClutterInputMethod *im,
const gchar *text);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_delete_surrounding (ClutterInputMethod *im,
guint offset,
guint len);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_request_surrounding (ClutterInputMethod *im);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_set_preedit_text (ClutterInputMethod *im,
const gchar *preedit,
guint cursor);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_notify_key_event (ClutterInputMethod *im,
const ClutterEvent *event,
gboolean filtered);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_input_method_request_toggle_input_panel (ClutterInputMethod *im);
#endif /* __CLUTTER_INPUT_METHOD_H__ */

View File

@@ -46,7 +46,7 @@
* #ClutterInterval is available since Clutter 1.0 * #ClutterInterval is available since Clutter 1.0
*/ */
#include "clutter-build-config.h" #include "config.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -62,6 +62,9 @@
#include "clutter-scriptable.h" #include "clutter-scriptable.h"
#include "clutter-script-private.h" #include "clutter-script-private.h"
#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
#include "deprecated/clutter-fixed.h"
enum enum
{ {
PROP_0, PROP_0,
@@ -107,6 +110,25 @@ clutter_interval_real_validate (ClutterInterval *interval,
{ {
GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec); GType pspec_gtype = G_PARAM_SPEC_VALUE_TYPE (pspec);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
/* check the GTypes we provide first */
if (pspec_gtype == COGL_TYPE_FIXED)
{
ClutterParamSpecFixed *pspec_fixed = CLUTTER_PARAM_SPEC_FIXED (pspec);
CoglFixed a, b;
a = b = 0;
clutter_interval_get_interval (interval, &a, &b);
if ((a >= pspec_fixed->minimum && a <= pspec_fixed->maximum) &&
(b >= pspec_fixed->minimum && b <= pspec_fixed->maximum))
return TRUE;
else
return FALSE;
}
G_GNUC_END_IGNORE_DEPRECATIONS;
/* then check the fundamental types */ /* then check the fundamental types */
switch (G_TYPE_FUNDAMENTAL (pspec_gtype)) switch (G_TYPE_FUNDAMENTAL (pspec_gtype))
{ {

View File

@@ -63,7 +63,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-keyframe-transition.h" #include "clutter-keyframe-transition.h"

View File

@@ -1,4 +1,4 @@
#include "clutter-build-config.h" #include "config.h"
#include <glib.h> #include <glib.h>

View File

@@ -130,7 +130,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <glib-object.h> #include <glib-object.h>

View File

@@ -35,7 +35,7 @@
* #ClutterLayoutMeta is available since Clutter 1.2 * #ClutterLayoutMeta is available since Clutter 1.2
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-layout-meta.h" #include "clutter-layout-meta.h"

View File

@@ -128,8 +128,6 @@
#define CLUTTER_AVAILABLE_IN_ALL _CLUTTER_EXTERN #define CLUTTER_AVAILABLE_IN_ALL _CLUTTER_EXTERN
#define CLUTTER_AVAILABLE_IN_MUTTER _CLUTTER_EXTERN
/** /**
* CLUTTER_VERSION_MIN_REQUIRED: * CLUTTER_VERSION_MIN_REQUIRED:
* *
@@ -278,8 +276,6 @@
# define CLUTTER_DEPRECATED_IN_1_12_FOR(f) _CLUTTER_EXTERN # define CLUTTER_DEPRECATED_IN_1_12_FOR(f) _CLUTTER_EXTERN
#endif #endif
#define CLUTTER_DEPRECATED_IN_MUTTER CLUTTER_DEPRECATED
#if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_12 #if CLUTTER_VERSION_MAX_ALLOWED < CLUTTER_VERSION_1_12
# define CLUTTER_AVAILABLE_IN_1_12 CLUTTER_UNAVAILABLE(1, 12) # define CLUTTER_AVAILABLE_IN_1_12 CLUTTER_UNAVAILABLE(1, 12)
#else #else

View File

@@ -48,7 +48,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <stdlib.h> #include <stdlib.h>
@@ -62,7 +62,6 @@
#include "clutter-feature.h" #include "clutter-feature.h"
#include "clutter-main.h" #include "clutter-main.h"
#include "clutter-master-clock.h" #include "clutter-master-clock.h"
#include "clutter-mutter.h"
#include "clutter-private.h" #include "clutter-private.h"
#include "clutter-settings-private.h" #include "clutter-settings-private.h"
#include "clutter-stage-manager.h" #include "clutter-stage-manager.h"
@@ -719,8 +718,14 @@ clutter_get_text_direction (void)
} }
else else
{ {
/* Re-use GTK+'s LTR/RTL handling */ /* Translators: Leave this UNTRANSLATED if your language is
const char *e = g_dgettext ("gtk30", "default:LTR"); * left-to-right. If your language is right-to-left
* (e.g. Hebrew, Arabic), translate it to "default:RTL".
*
* Do NOT translate it to non-English e.g. "predefinito:LTR"! If
* it isn't default:LTR or default:RTL it will not work.
*/
char *e = _("default:LTR");
if (strcmp (e, "default:RTL") == 0) if (strcmp (e, "default:RTL") == 0)
dir = CLUTTER_TEXT_DIRECTION_RTL; dir = CLUTTER_TEXT_DIRECTION_RTL;
@@ -2089,21 +2094,6 @@ emit_keyboard_event (ClutterEvent *event,
} }
} }
static inline void
process_key_event (ClutterEvent *event,
ClutterInputDevice *device)
{
ClutterInputDeviceClass *device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
if (device_class->process_kbd_a11y_event)
{
device_class->process_kbd_a11y_event (event, device, emit_keyboard_event);
return;
}
emit_keyboard_event (event, device);
}
static gboolean static gboolean
is_off_stage (ClutterActor *stage, is_off_stage (ClutterActor *stage,
gfloat x, gfloat x,
@@ -2172,10 +2162,6 @@ _clutter_process_event_details (ClutterActor *stage,
case CLUTTER_KEY_PRESS: case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE: case CLUTTER_KEY_RELEASE:
case CLUTTER_PAD_BUTTON_PRESS:
case CLUTTER_PAD_BUTTON_RELEASE:
case CLUTTER_PAD_STRIP:
case CLUTTER_PAD_RING:
{ {
ClutterActor *actor = NULL; ClutterActor *actor = NULL;
@@ -2191,7 +2177,7 @@ _clutter_process_event_details (ClutterActor *stage,
} }
} }
process_key_event (event, device); emit_keyboard_event (event, device);
} }
break; break;
@@ -2757,7 +2743,6 @@ clutter_input_device_grab (ClutterInputDevice *device,
switch (device->device_type) switch (device->device_type)
{ {
case CLUTTER_POINTER_DEVICE: case CLUTTER_POINTER_DEVICE:
case CLUTTER_TABLET_DEVICE:
grab_actor = &(device->pointer_grab_actor); grab_actor = &(device->pointer_grab_actor);
break; break;
@@ -2803,7 +2788,6 @@ clutter_input_device_ungrab (ClutterInputDevice *device)
switch (device->device_type) switch (device->device_type)
{ {
case CLUTTER_POINTER_DEVICE: case CLUTTER_POINTER_DEVICE:
case CLUTTER_TABLET_DEVICE:
grab_actor = &(device->pointer_grab_actor); grab_actor = &(device->pointer_grab_actor);
break; break;

View File

@@ -17,14 +17,12 @@ VOID:BOXED,FLAGS
VOID:INT VOID:INT
VOID:INT64,INT64,FLOAT,BOOLEAN VOID:INT64,INT64,FLOAT,BOOLEAN
VOID:INT,INT VOID:INT,INT
VOID:INT,POINTER
VOID:FLOAT,FLOAT VOID:FLOAT,FLOAT
VOID:INT,INT,INT,INT VOID:INT,INT,INT,INT
VOID:OBJECT VOID:OBJECT
VOID:OBJECT,FLAGS VOID:OBJECT,FLAGS
VOID:OBJECT,FLOAT,FLOAT VOID:OBJECT,FLOAT,FLOAT
VOID:OBJECT,FLOAT,FLOAT,FLAGS VOID:OBJECT,FLOAT,FLOAT,FLAGS
VOID:OBJECT,OBJECT
VOID:OBJECT,PARAM VOID:OBJECT,PARAM
VOID:OBJECT,POINTER VOID:OBJECT,POINTER
VOID:OBJECT,UINT VOID:OBJECT,UINT

View File

@@ -30,7 +30,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-master-clock.h" #include "clutter-master-clock.h"

View File

@@ -32,7 +32,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include "clutter-master-clock.h" #include "clutter-master-clock.h"

View File

@@ -1,51 +0,0 @@
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2016 Red Hat Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef __CLUTTER_MUTTER_H__
#define __CLUTTER_MUTTER_H__
#define __CLUTTER_H_INSIDE__
#include "clutter-backend.h"
#include "clutter-macros.h"
#include "clutter-stage-view.h"
#include "cogl/clutter-stage-cogl.h"
#include "x11/clutter-stage-x11.h"
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_set_custom_backend_func (ClutterBackend *(* func) (void));
CLUTTER_AVAILABLE_IN_MUTTER
gboolean _clutter_get_sync_to_vblank (void);
CLUTTER_AVAILABLE_IN_MUTTER
int64_t clutter_stage_get_frame_counter (ClutterStage *stage);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_stage_capture_into (ClutterStage *stage,
gboolean paint,
cairo_rectangle_int_t *rect,
uint8_t *data);
#undef __CLUTTER_H_INSIDE__
#endif /* __CLUTTER_MUTTER_H__ */

View File

@@ -63,9 +63,11 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include "clutter-offscreen-effect.h" #include "clutter-offscreen-effect.h"
#include "cogl/cogl.h" #include "cogl/cogl.h"
@@ -518,7 +520,7 @@ clutter_offscreen_effect_get_texture (ClutterOffscreenEffect *effect)
} }
/** /**
* clutter_offscreen_effect_get_target: (skip) * clutter_offscreen_effect_get_target:
* @effect: a #ClutterOffscreenEffect * @effect: a #ClutterOffscreenEffect
* *
* Retrieves the material used as a render target for the offscreen * Retrieves the material used as a render target for the offscreen

View File

@@ -31,6 +31,7 @@
#include <cogl/cogl.h> #include <cogl/cogl.h>
#include <clutter/clutter-effect.h> #include <clutter/clutter-effect.h>
#include <clutter/clutter-cogl-compat.h>
G_BEGIN_DECLS G_BEGIN_DECLS

View File

@@ -36,7 +36,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <math.h> #include <math.h>

View File

@@ -59,7 +59,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API
@@ -884,7 +884,7 @@ clutter_paint_node_add_texture_rectangle (ClutterPaintNode *node,
} }
/** /**
* clutter_paint_node_add_path: (skip) * clutter_paint_node_add_path:
* @node: a #ClutterPaintNode * @node: a #ClutterPaintNode
* @path: a Cogl path * @path: a Cogl path
* *
@@ -912,7 +912,7 @@ clutter_paint_node_add_path (ClutterPaintNode *node,
} }
/** /**
* clutter_paint_node_add_primitive: (skip) * clutter_paint_node_add_primitive:
* @node: a #ClutterPaintNode * @node: a #ClutterPaintNode
* @primitive: a Cogl primitive * @primitive: a Cogl primitive
* *

View File

@@ -66,13 +66,14 @@ void clutter_paint_node_add_texture_rectangle (Clutter
float y_1, float y_1,
float x_2, float x_2,
float y_2); float y_2);
#if defined(COGL_ENABLE_EXPERIMENTAL_API) && defined(CLUTTER_ENABLE_EXPERIMENTAL_API)
CLUTTER_AVAILABLE_IN_1_10 CLUTTER_AVAILABLE_IN_1_10
void clutter_paint_node_add_path (ClutterPaintNode *node, void clutter_paint_node_add_path (ClutterPaintNode *node,
CoglPath *path); CoglPath *path);
CLUTTER_AVAILABLE_IN_1_10 CLUTTER_AVAILABLE_IN_1_10
void clutter_paint_node_add_primitive (ClutterPaintNode *node, void clutter_paint_node_add_primitive (ClutterPaintNode *node,
CoglPrimitive *primitive); CoglPrimitive *primitive);
#endif /* COGL_ENABLE_EXPERIMENTAL_API && CLUTTER_ENABLE_EXPERIMENTAL_API */
/** /**
* CLUTTER_VALUE_HOLDS_PAINT_NODE: * CLUTTER_VALUE_HOLDS_PAINT_NODE:

View File

@@ -32,7 +32,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#define CLUTTER_ENABLE_EXPERIMENTAL_API #define CLUTTER_ENABLE_EXPERIMENTAL_API
@@ -511,7 +511,7 @@ clutter_pipeline_node_init (ClutterPipelineNode *self)
} }
/** /**
* clutter_pipeline_node_new: (skip) * clutter_pipeline_node_new:
* @pipeline: (allow-none): a Cogl pipeline state object, or %NULL * @pipeline: (allow-none): a Cogl pipeline state object, or %NULL
* *
* Creates a new #ClutterPaintNode that will use the @pipeline to * Creates a new #ClutterPaintNode that will use the @pipeline to

View File

@@ -118,8 +118,10 @@ typedef struct _ClutterPipelineNodeClass ClutterPipelineNodeClass;
CLUTTER_AVAILABLE_IN_1_10 CLUTTER_AVAILABLE_IN_1_10
GType clutter_pipeline_node_get_type (void) G_GNUC_CONST; GType clutter_pipeline_node_get_type (void) G_GNUC_CONST;
#if defined(COGL_ENABLE_EXPERIMENTAL_API) && defined(CLUTTER_ENABLE_EXPERIMENTAL_API)
CLUTTER_AVAILABLE_IN_1_10 CLUTTER_AVAILABLE_IN_1_10
ClutterPaintNode * clutter_pipeline_node_new (CoglPipeline *pipeline); ClutterPaintNode * clutter_pipeline_node_new (CoglPipeline *pipeline);
#endif /* COGL_ENABLE_EXPERIMENTAL_API && CLUTTER_ENABLE_EXPERIMENTAL_API */
#define CLUTTER_TYPE_TEXT_NODE (clutter_text_node_get_type ()) #define CLUTTER_TYPE_TEXT_NODE (clutter_text_node_get_type ())
#define CLUTTER_TEXT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TEXT_NODE, ClutterTextNode)) #define CLUTTER_TEXT_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TEXT_NODE, ClutterTextNode))

View File

@@ -25,7 +25,7 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "clutter-build-config.h" #include "config.h"
#endif #endif
#include <string.h> #include <string.h>

Some files were not shown because too many files have changed in this diff Show More