clutter: some fixes from upstream via Arch.
This commit is contained in:
parent
2edb2464cf
commit
58d42769fb
|
@ -0,0 +1,22 @@
|
|||
From 084dc49a0cdadeed7de896df81e9af536f2ab678 Mon Sep 17 00:00:00 2001
|
||||
From: Rico Tzschichholz <ricotz@ubuntu.com>
|
||||
Date: Thu, 2 Oct 2014 09:27:36 +0200
|
||||
Subject: x11: Add missing closure annotation to ClutterX11FilterFunc
|
||||
|
||||
|
||||
diff --git a/clutter/x11/clutter-x11.h b/clutter/x11/clutter-x11.h
|
||||
index b0ab8a1..285ea51 100644
|
||||
--- a/clutter/x11/clutter-x11.h
|
||||
+++ b/clutter/x11/clutter-x11.h
|
||||
@@ -85,7 +85,7 @@ typedef struct _ClutterX11XInputDevice ClutterX11XInputDevice;
|
||||
* ClutterX11FilterFunc:
|
||||
* @xev: Native X11 event structure
|
||||
* @cev: Clutter event structure
|
||||
- * @data: user data passed to the filter function
|
||||
+ * @data: (closure): user data passed to the filter function
|
||||
*
|
||||
* Filter function for X11 native events.
|
||||
*
|
||||
--
|
||||
cgit v0.10.1
|
||||
|
|
@ -0,0 +1,224 @@
|
|||
From 46877cc2bd497ec23acfa07fedaf29f45522dc6f Mon Sep 17 00:00:00 2001
|
||||
From: "Jasper St. Pierre" <jstpierre@mecheye.net>
|
||||
Date: Wed, 22 Oct 2014 18:44:22 -0700
|
||||
Subject: actor: Create a PangoContext per actor
|
||||
|
||||
For a variety of complicated reasons, ClutterText currently sets fields
|
||||
on the PangoContext when creating a layout. This causes ClutterText to
|
||||
behave somewhat erratically in certain cases, since the PangoContext is
|
||||
currently shared between all actors.
|
||||
|
||||
GTK+ creates a PangoContext for every single GtkWidget, so it seems like
|
||||
we should do the same here.
|
||||
|
||||
Move the private code that was previously in clutter-main.c into
|
||||
clutter-actor.c and clean it up a bit. This gives every actor its own
|
||||
PangoContext it can mutilate whenever it wants, at its heart's content.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=739050
|
||||
|
||||
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
|
||||
index 6a0582a..33fe3e7 100644
|
||||
--- a/clutter/clutter-actor.c
|
||||
+++ b/clutter/clutter-actor.c
|
||||
@@ -15474,6 +15474,46 @@ clutter_actor_grab_key_focus (ClutterActor *self)
|
||||
clutter_stage_set_key_focus (CLUTTER_STAGE (stage), self);
|
||||
}
|
||||
|
||||
+static void
|
||||
+update_pango_context (ClutterBackend *backend,
|
||||
+ PangoContext *context)
|
||||
+{
|
||||
+ ClutterSettings *settings;
|
||||
+ PangoFontDescription *font_desc;
|
||||
+ const cairo_font_options_t *font_options;
|
||||
+ gchar *font_name;
|
||||
+ PangoDirection pango_dir;
|
||||
+ gdouble resolution;
|
||||
+
|
||||
+ settings = clutter_settings_get_default ();
|
||||
+
|
||||
+ /* update the text direction */
|
||||
+ if (clutter_get_default_text_direction () == CLUTTER_TEXT_DIRECTION_RTL)
|
||||
+ pango_dir = PANGO_DIRECTION_RTL;
|
||||
+ else
|
||||
+ pango_dir = PANGO_DIRECTION_LTR;
|
||||
+
|
||||
+ pango_context_set_base_dir (context, pango_dir);
|
||||
+
|
||||
+ g_object_get (settings, "font-name", &font_name, NULL);
|
||||
+
|
||||
+ /* get the configuration for the PangoContext from the backend */
|
||||
+ font_options = clutter_backend_get_font_options (backend);
|
||||
+ resolution = clutter_backend_get_resolution (backend);
|
||||
+
|
||||
+ font_desc = pango_font_description_from_string (font_name);
|
||||
+
|
||||
+ if (resolution < 0)
|
||||
+ resolution = 96.0; /* fall back */
|
||||
+
|
||||
+ pango_context_set_font_description (context, font_desc);
|
||||
+ pango_cairo_context_set_font_options (context, font_options);
|
||||
+ pango_cairo_context_set_resolution (context, resolution);
|
||||
+
|
||||
+ pango_font_description_free (font_desc);
|
||||
+ g_free (font_name);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* clutter_actor_get_pango_context:
|
||||
* @self: a #ClutterActor
|
||||
@@ -15500,16 +15540,23 @@ PangoContext *
|
||||
clutter_actor_get_pango_context (ClutterActor *self)
|
||||
{
|
||||
ClutterActorPrivate *priv;
|
||||
+ ClutterBackend *backend = clutter_get_default_backend ();
|
||||
|
||||
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), NULL);
|
||||
|
||||
priv = self->priv;
|
||||
|
||||
- if (priv->pango_context != NULL)
|
||||
- return priv->pango_context;
|
||||
+ if (G_UNLIKELY (priv->pango_context == NULL))
|
||||
+ {
|
||||
+ priv->pango_context = clutter_actor_create_pango_context (self);
|
||||
|
||||
- priv->pango_context = _clutter_context_get_pango_context ();
|
||||
- g_object_ref (priv->pango_context);
|
||||
+ g_signal_connect_object (backend, "resolution-changed",
|
||||
+ G_CALLBACK (update_pango_context), priv->pango_context, 0);
|
||||
+ g_signal_connect_object (backend, "font-changed",
|
||||
+ G_CALLBACK (update_pango_context), priv->pango_context, 0);
|
||||
+ }
|
||||
+ else
|
||||
+ update_pango_context (backend, priv->pango_context);
|
||||
|
||||
return priv->pango_context;
|
||||
}
|
||||
@@ -15533,9 +15580,16 @@ clutter_actor_get_pango_context (ClutterActor *self)
|
||||
PangoContext *
|
||||
clutter_actor_create_pango_context (ClutterActor *self)
|
||||
{
|
||||
- g_return_val_if_fail (CLUTTER_IS_ACTOR (self), NULL);
|
||||
+ CoglPangoFontMap *font_map;
|
||||
+ PangoContext *context;
|
||||
+
|
||||
+ font_map = COGL_PANGO_FONT_MAP (clutter_get_font_map ());
|
||||
+
|
||||
+ context = cogl_pango_font_map_create_context (font_map);
|
||||
+ update_pango_context (clutter_get_default_backend (), context);
|
||||
+ pango_context_set_language (context, pango_language_get_default ());
|
||||
|
||||
- return _clutter_context_create_pango_context ();
|
||||
+ return context;
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c
|
||||
index 3b9385a..1a337c0 100644
|
||||
--- a/clutter/clutter-main.c
|
||||
+++ b/clutter/clutter-main.c
|
||||
@@ -764,86 +764,6 @@ clutter_get_text_direction (void)
|
||||
return dir;
|
||||
}
|
||||
|
||||
-static void
|
||||
-update_pango_context (ClutterBackend *backend,
|
||||
- PangoContext *context)
|
||||
-{
|
||||
- ClutterSettings *settings;
|
||||
- PangoFontDescription *font_desc;
|
||||
- const cairo_font_options_t *font_options;
|
||||
- gchar *font_name;
|
||||
- PangoDirection pango_dir;
|
||||
- gdouble resolution;
|
||||
-
|
||||
- settings = clutter_settings_get_default ();
|
||||
-
|
||||
- /* update the text direction */
|
||||
- if (clutter_text_direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||
- pango_dir = PANGO_DIRECTION_RTL;
|
||||
- else
|
||||
- pango_dir = PANGO_DIRECTION_LTR;
|
||||
-
|
||||
- pango_context_set_base_dir (context, pango_dir);
|
||||
-
|
||||
- g_object_get (settings, "font-name", &font_name, NULL);
|
||||
-
|
||||
- /* get the configuration for the PangoContext from the backend */
|
||||
- font_options = clutter_backend_get_font_options (backend);
|
||||
- resolution = clutter_backend_get_resolution (backend);
|
||||
-
|
||||
- font_desc = pango_font_description_from_string (font_name);
|
||||
-
|
||||
- if (resolution < 0)
|
||||
- resolution = 96.0; /* fall back */
|
||||
-
|
||||
- pango_context_set_font_description (context, font_desc);
|
||||
- pango_cairo_context_set_font_options (context, font_options);
|
||||
- pango_cairo_context_set_resolution (context, resolution);
|
||||
-
|
||||
- pango_font_description_free (font_desc);
|
||||
- g_free (font_name);
|
||||
-}
|
||||
-
|
||||
-PangoContext *
|
||||
-_clutter_context_get_pango_context (void)
|
||||
-{
|
||||
- ClutterMainContext *self = _clutter_context_get_default ();
|
||||
-
|
||||
- if (G_UNLIKELY (self->pango_context == NULL))
|
||||
- {
|
||||
- PangoContext *context;
|
||||
-
|
||||
- context = _clutter_context_create_pango_context ();
|
||||
- self->pango_context = context;
|
||||
-
|
||||
- g_signal_connect (self->backend, "resolution-changed",
|
||||
- G_CALLBACK (update_pango_context),
|
||||
- self->pango_context);
|
||||
- g_signal_connect (self->backend, "font-changed",
|
||||
- G_CALLBACK (update_pango_context),
|
||||
- self->pango_context);
|
||||
- }
|
||||
- else
|
||||
- update_pango_context (self->backend, self->pango_context);
|
||||
-
|
||||
- return self->pango_context;
|
||||
-}
|
||||
-
|
||||
-PangoContext *
|
||||
-_clutter_context_create_pango_context (void)
|
||||
-{
|
||||
- CoglPangoFontMap *font_map;
|
||||
- PangoContext *context;
|
||||
-
|
||||
- font_map = clutter_context_get_pango_fontmap ();
|
||||
-
|
||||
- context = cogl_pango_font_map_create_context (font_map);
|
||||
- update_pango_context (clutter_get_default_backend (), context);
|
||||
- pango_context_set_language (context, pango_language_get_default ());
|
||||
-
|
||||
- return context;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* clutter_main_quit:
|
||||
*
|
||||
diff --git a/clutter/clutter-private.h b/clutter/clutter-private.h
|
||||
index bf92626..b714edc 100644
|
||||
--- a/clutter/clutter-private.h
|
||||
+++ b/clutter/clutter-private.h
|
||||
@@ -198,8 +198,6 @@ ClutterMainContext * _clutter_context_get_default (void);
|
||||
void _clutter_context_lock (void);
|
||||
void _clutter_context_unlock (void);
|
||||
gboolean _clutter_context_is_initialized (void);
|
||||
-PangoContext * _clutter_context_create_pango_context (void);
|
||||
-PangoContext * _clutter_context_get_pango_context (void);
|
||||
ClutterPickMode _clutter_context_get_pick_mode (void);
|
||||
void _clutter_context_push_shader_stack (ClutterActor *actor);
|
||||
ClutterActor * _clutter_context_pop_shader_stack (ClutterActor *actor);
|
||||
--
|
||||
cgit v0.10.1
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
From 14d28e7908d5421f15f9b94f4f37d66f14c4222e Mon Sep 17 00:00:00 2001
|
||||
From: "Jasper St. Pierre" <jstpierre@mecheye.net>
|
||||
Date: Wed, 22 Oct 2014 18:44:16 -0700
|
||||
Subject: main: Don't update the PangoContext in clutter_set_font_flags
|
||||
|
||||
clutter_set_font_flags already calls clutter_backend_set_font_options,
|
||||
which emits a signal which our PangoContext listens to, so this is just
|
||||
duplicate and unneeded code.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=739050
|
||||
|
||||
diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c
|
||||
index 444ceba..3b9385a 100644
|
||||
--- a/clutter/clutter-main.c
|
||||
+++ b/clutter/clutter-main.c
|
||||
@@ -3276,7 +3276,6 @@ clutter_clear_glyph_cache (void)
|
||||
void
|
||||
clutter_set_font_flags (ClutterFontFlags flags)
|
||||
{
|
||||
- ClutterMainContext *context = _clutter_context_get_default ();
|
||||
CoglPangoFontMap *font_map;
|
||||
ClutterFontFlags old_flags, changed_flags;
|
||||
const cairo_font_options_t *font_options;
|
||||
@@ -3326,10 +3325,6 @@ clutter_set_font_flags (ClutterFontFlags flags)
|
||||
clutter_backend_set_font_options (backend, new_font_options);
|
||||
|
||||
cairo_font_options_destroy (new_font_options);
|
||||
-
|
||||
- /* update the default pango context, if any */
|
||||
- if (context->pango_context != NULL)
|
||||
- update_pango_context (backend, context->pango_context);
|
||||
}
|
||||
|
||||
/**
|
||||
--
|
||||
cgit v0.10.1
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From 7764fd2079318fede95b4b96c72d18bd31699270 Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Tue, 14 Oct 2014 12:41:10 +0200
|
||||
Subject: evdev: Flush event queue before removing an input device
|
||||
|
||||
libinput_suspend() will trigger the removal of input devices, but also
|
||||
the emission of button/key releases pairing everything that is pressed
|
||||
at that moment. These events are queued, but the ClutterInputDevice
|
||||
pointers in these will point to invalid memory at the time these are
|
||||
processed.
|
||||
|
||||
Fix this by flushing the event queue, in order to ensure there are no
|
||||
unprocessed input events after libinput_suspend().
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=738520
|
||||
|
||||
diff --git a/clutter/evdev/clutter-device-manager-evdev.c b/clutter/evdev/clutter-device-manager-evdev.c
|
||||
index 77a8ec6..7b48481 100644
|
||||
--- a/clutter/evdev/clutter-device-manager-evdev.c
|
||||
+++ b/clutter/evdev/clutter-device-manager-evdev.c
|
||||
@@ -1017,6 +1017,18 @@ clutter_seat_evdev_sync_leds (ClutterSeatEvdev *seat)
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+flush_event_queue (void)
|
||||
+{
|
||||
+ ClutterEvent *event;
|
||||
+
|
||||
+ while ((event = clutter_event_get ()) != NULL)
|
||||
+ {
|
||||
+ _clutter_process_event (event);
|
||||
+ clutter_event_free (event);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
process_base_event (ClutterDeviceManagerEvdev *manager_evdev,
|
||||
struct libinput_event *event)
|
||||
@@ -1034,6 +1046,11 @@ process_base_event (ClutterDeviceManagerEvdev *manager_evdev,
|
||||
break;
|
||||
|
||||
case LIBINPUT_EVENT_DEVICE_REMOVED:
|
||||
+ /* Flush all queued events, there
|
||||
+ * might be some from this device.
|
||||
+ */
|
||||
+ flush_event_queue ();
|
||||
+
|
||||
libinput_device = libinput_event_get_device (event);
|
||||
|
||||
device = libinput_device_get_user_data (libinput_device);
|
||||
--
|
||||
cgit v0.10.1
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
# Template file for 'clutter'
|
||||
pkgname=clutter
|
||||
version=1.20.0
|
||||
revision=1
|
||||
revision=2
|
||||
patch_args="-Np1"
|
||||
build_style=gnu-configure
|
||||
configure_args="--enable-introspection --enable-evdev-input
|
||||
build_options="gir"
|
||||
configure_args="$(vopt_enable gir introspection) --enable-evdev-input
|
||||
--enable-wayland-backend --enable-egl-backend --enable-wayland-compositor"
|
||||
hostmakedepends="pkg-config intltool gobject-introspection glib-devel"
|
||||
hostmakedepends="pkg-config intltool glib-devel $(vopt_if gir gobject-introspection)"
|
||||
makedepends="
|
||||
atk-devel pango-devel libXi-devel libXcomposite-devel json-glib-devel
|
||||
libxkbcommon-devel cogl-devel>=1.18 libinput-devel eudev-libgudev-devel
|
||||
|
@ -19,17 +21,20 @@ checksum=cc940809e6e1469ce349c4bddb0cbcc2c13c087d4fc15cda9278d855ee2d1293
|
|||
update_site="${GNOME_SITE}/$pkgname/cache.json"
|
||||
update_ignore="1.*[13579].*"
|
||||
|
||||
if [ -z "$CROSS_BUILD" ]; then
|
||||
build_options_default="gir"
|
||||
fi
|
||||
|
||||
clutter-devel_package() {
|
||||
depends="cogl-devel>=1.18 cairo-devel atk-devel pango-devel json-glib-devel
|
||||
libX11-devel libXext-devel libXfixes-devel libXdamage-devel
|
||||
libXcomposite-devel libXi-devel libinput-devel
|
||||
libxkbcommon-devel clutter>=${version}_${revision}"
|
||||
depends="${makedepends} clutter>=${version}_${revision}"
|
||||
short_desc+=" - development files"
|
||||
pkg_install() {
|
||||
vmove usr/include
|
||||
vmove usr/lib/pkgconfig
|
||||
vmove "usr/lib/*.so"
|
||||
vmove usr/share/gtk-doc
|
||||
vmove "usr/share/gir-*"
|
||||
if [ "$build_option_gir" ]; then
|
||||
vmove usr/share/gir-1.0
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue