diff --git a/srcpkgs/clutter/patches/closure-annotation.patch b/srcpkgs/clutter/patches/closure-annotation.patch new file mode 100644 index 00000000000..30e7b47fe78 --- /dev/null +++ b/srcpkgs/clutter/patches/closure-annotation.patch @@ -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 + diff --git a/srcpkgs/clutter/patches/create-pangocontext-per-actor.patch b/srcpkgs/clutter/patches/create-pangocontext-per-actor.patch new file mode 100644 index 00000000000..5dbbc2cbcd9 --- /dev/null +++ b/srcpkgs/clutter/patches/create-pangocontext-per-actor.patch @@ -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 + diff --git a/srcpkgs/clutter/patches/dont-update-pangocontext.patch b/srcpkgs/clutter/patches/dont-update-pangocontext.patch new file mode 100644 index 00000000000..689fb5976c9 --- /dev/null +++ b/srcpkgs/clutter/patches/dont-update-pangocontext.patch @@ -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 + diff --git a/srcpkgs/clutter/patches/evdev-flush-event-queue.patch b/srcpkgs/clutter/patches/evdev-flush-event-queue.patch new file mode 100644 index 00000000000..2b278b34817 --- /dev/null +++ b/srcpkgs/clutter/patches/evdev-flush-event-queue.patch @@ -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 + diff --git a/srcpkgs/clutter/template b/srcpkgs/clutter/template index 051feb91633..bfe50b17edb 100644 --- a/srcpkgs/clutter/template +++ b/srcpkgs/clutter/template @@ -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 } }