Skip to content
Commits on Source (91)
#!/usr/bin/bash
#!/bin/bash
fetch() {
local remote=$1
......
#!/usr/bin/bash
#!/bin/bash
# We need a coverity token to fetch the tarball
if [ -x $COVERITY_TOKEN ]
......
44.1
====
* Fall back to the default, not the unknown color space [Sebastian W.; !2915]
* Fix resizing windows via keyboard [Florian; !2908]
* Fix possible screen freeze after resume with multiple monitors [Daniel; !2933]
* Fix anchor position when dragging window [Carlos; !2942]
* Fix applying XSettings to decorations on X11 [Marco; !2948]
* Allow clipped redraws for headless backend [Salman; !2775]
* Improve screencast support [Georges; !2804]
* Fix focus-on-click for server-side decorated windows [Carlos; !2954]
* Fix initial fullscreen state of server-side decorated windows [Carlos; !2961]
* Fix feedback loop triggering bursts of excessive CPU load [Robert; !2823]
* Enable modifiers by default on non-native backend [Robert; !2972]
* Check EDID for supported sink Colorimetry [Sebastian W.; !2919]
* Fix artifacts in titlebars on some hardware [Carlos; !2976]
* Fix map transitions for X11 windows on wayland [Carlos; !2975]
* Fixed crashes [Jonas Å., Sebastian K., Carlos, Michel, Daniel, Robert;
!2932, !2930, !2945, !2956, !2962, !2968, !2967, !2960, !2963]
* Plugged leaks [Sebastian K., Jonas Å.; !2922, !2926, !2957]
* Misc. bug fixes and cleanups [Daniel, Ivan, Emmanuele, Simon, Jonas D.,
Jonas Å., Chris, Florian, Corentin, msizanoen1, Sebastian K.; !2918, !2904,
!2928, !2929, !2900, !2856, !2944, !2935, !2947, !2949, !2951, !2940, !2953,
!2964, !2934, !2902, !2971]
Contributors:
Jonas Ådahl, Emmanuele Bassi, Michel Dänzer, Jonas Dreßler, Carlos Garnacho,
Sebastian Keller, Robert Mader, Chris Mayo, Simon McVittie, Ivan Molodetskikh,
msizanoen1, Florian Müllner, Georges Basile Stavracas Neto, Corentin Noël,
Salman, Marco Trevisan (Treviño), Daniel van Vugt, Sebastian Wick
Translators:
Boyuan Yang [zh_CN], Ngọc Quân Trần [vi], Nathan Follens [nl]
44.0
====
* Fix state confusion and delay on startup [Carlos; !2906]
......
......@@ -688,7 +688,7 @@ clutter_backend_get_input_method (ClutterBackend *backend)
/**
* clutter_backend_set_input_method:
* @backend: the #ClutterBackend
* @method: the input method
* @method: (nullable): the input method
*
* Sets the input method to be used by Clutter
**/
......@@ -696,6 +696,12 @@ void
clutter_backend_set_input_method (ClutterBackend *backend,
ClutterInputMethod *method)
{
if (backend->input_method == method)
return;
if (backend->input_method)
clutter_input_method_focus_out (backend->input_method);
g_set_object (&backend->input_method, method);
}
......
......@@ -79,6 +79,7 @@ struct _ClutterFrameClock
gboolean is_next_presentation_time_valid;
int64_t next_presentation_time_us;
int64_t min_render_time_allowed_us;
/* Buffer must be submitted to KMS and GPU rendering must be finished
* this amount of time before the next presentation time.
......@@ -466,7 +467,8 @@ clutter_frame_clock_compute_max_render_time_us (ClutterFrameClock *frame_clock)
static void
calculate_next_update_time_us (ClutterFrameClock *frame_clock,
int64_t *out_next_update_time_us,
int64_t *out_next_presentation_time_us)
int64_t *out_next_presentation_time_us,
int64_t *out_min_render_time_allowed_us)
{
int64_t last_presentation_time_us;
int64_t now_us;
......@@ -489,6 +491,7 @@ calculate_next_update_time_us (ClutterFrameClock *frame_clock,
now_us;
*out_next_presentation_time_us = 0;
*out_min_render_time_allowed_us = 0;
return;
}
......@@ -613,6 +616,7 @@ calculate_next_update_time_us (ClutterFrameClock *frame_clock,
*out_next_update_time_us = next_update_time_us;
*out_next_presentation_time_us = next_presentation_time_us;
*out_min_render_time_allowed_us = min_render_time_allowed_us;
}
void
......@@ -704,7 +708,8 @@ clutter_frame_clock_schedule_update (ClutterFrameClock *frame_clock)
case CLUTTER_FRAME_CLOCK_STATE_IDLE:
calculate_next_update_time_us (frame_clock,
&next_update_time_us,
&frame_clock->next_presentation_time_us);
&frame_clock->next_presentation_time_us,
&frame_clock->min_render_time_allowed_us);
frame_clock->is_next_presentation_time_valid =
(frame_clock->next_presentation_time_us != 0);
break;
......@@ -775,6 +780,7 @@ clutter_frame_clock_dispatch (ClutterFrameClock *frame_clock,
frame->frame_count = frame_count;
frame->has_target_presentation_time = frame_clock->is_next_presentation_time_valid;
frame->target_presentation_time_us = frame_clock->next_presentation_time_us;
frame->min_render_time_allowed_us = frame_clock->min_render_time_allowed_us;
COGL_TRACE_BEGIN (ClutterFrameClockEvents, "Frame Clock (before frame)");
if (iface->before_frame)
......
......@@ -31,6 +31,7 @@ struct _ClutterFrame
gboolean has_target_presentation_time;
int64_t target_presentation_time_us;
int64_t min_render_time_allowed_us;
gboolean has_result;
ClutterFrameResult result;
......
......@@ -75,6 +75,21 @@ clutter_frame_get_target_presentation_time (ClutterFrame *frame,
}
}
gboolean
clutter_frame_get_min_render_time_allowed (ClutterFrame *frame,
int64_t *min_render_time_allowed_us)
{
if (frame->has_target_presentation_time)
{
*min_render_time_allowed_us = frame->min_render_time_allowed_us;
return TRUE;
}
else
{
return FALSE;
}
}
ClutterFrameResult
clutter_frame_get_result (ClutterFrame *frame)
{
......
......@@ -44,6 +44,10 @@ CLUTTER_EXPORT
gboolean clutter_frame_get_target_presentation_time (ClutterFrame *frame,
int64_t *target_presentation_time_us);
CLUTTER_EXPORT
gboolean clutter_frame_get_min_render_time_allowed (ClutterFrame *frame,
int64_t *min_render_time_allowed_us);
CLUTTER_EXPORT
void clutter_frame_set_result (ClutterFrame *frame,
ClutterFrameResult result);
......
......@@ -33,4 +33,7 @@ CoglFramebuffer * clutter_paint_context_get_base_framebuffer (ClutterPaintContex
const GArray *
clutter_paint_context_get_clip_frusta (ClutterPaintContext *paint_context);
void clutter_paint_context_assign_frame (ClutterPaintContext *paint_context,
ClutterFrame *frame);
#endif /* CLUTTER_PAINT_CONTEXT_PRIVATE_H */
......@@ -18,6 +18,7 @@
#include "clutter-build-config.h"
#include "clutter-paint-context-private.h"
#include "clutter-frame.h"
struct _ClutterPaintContext
{
......@@ -28,6 +29,7 @@ struct _ClutterPaintContext
GList *framebuffers;
ClutterStageView *view;
ClutterFrame *frame;
cairo_region_t *redraw_clip;
GArray *clip_frusta;
......@@ -93,6 +95,7 @@ clutter_paint_context_dispose (ClutterPaintContext *paint_context)
paint_context->framebuffers = NULL;
g_clear_pointer (&paint_context->redraw_clip, cairo_region_destroy);
g_clear_pointer (&paint_context->clip_frusta, g_array_unref);
g_clear_pointer (&paint_context->frame, clutter_frame_unref);
}
void
......@@ -196,3 +199,31 @@ clutter_paint_context_get_paint_flags (ClutterPaintContext *paint_context)
{
return paint_context->paint_flags;
}
void
clutter_paint_context_assign_frame (ClutterPaintContext *paint_context,
ClutterFrame *frame)
{
g_assert (paint_context != NULL);
g_assert (paint_context->frame == NULL);
g_assert (frame != NULL);
paint_context->frame = clutter_frame_ref (frame);
}
/**
* clutter_paint_context_get_frame: (skip)
* @paint_context: The #ClutterPaintContext
*
* Retrieves the #ClutterFrame assigned to @paint_context, if any. A frame is
* only assigned when the paint context is created as part of a frame scheduled
* by the frame clock, and won't be assigned e.g. on offscreen paints.
*
* Returns: (transfer none)(nullable): The #ClutterFrame associated with the
* @paint_context, or %NULL
*/
ClutterFrame *
clutter_paint_context_get_frame (ClutterPaintContext *paint_context)
{
return paint_context->frame;
}
......@@ -75,4 +75,7 @@ const cairo_region_t * clutter_paint_context_get_redraw_clip (ClutterPaintContex
CLUTTER_EXPORT
ClutterPaintFlag clutter_paint_context_get_paint_flags (ClutterPaintContext *paint_context);
CLUTTER_EXPORT
ClutterFrame * clutter_paint_context_get_frame (ClutterPaintContext *paint_context);
#endif /* CLUTTER_PAINT_CONTEXT_H */
......@@ -211,19 +211,26 @@ static void
clutter_value_transform_path_string (const GValue *src,
GValue *dest)
{
gchar *string = clutter_path_get_description (src->data[0].v_pointer);
if (src->data[0].v_pointer != NULL)
{
gchar *string = clutter_path_get_description (src->data[0].v_pointer);
g_value_take_string (dest, string);
g_value_take_string (dest, string);
}
}
static void
clutter_value_transform_string_path (const GValue *src,
GValue *dest)
{
ClutterPath *new_path;
const char *str;
new_path = clutter_path_new_with_description (g_value_get_string (src));
g_value_take_object (dest, new_path);
str = g_value_get_string (src);
if (str != NULL)
{
ClutterPath *new_path = clutter_path_new_with_description (str);
g_value_take_object (dest, new_path);
}
}
static void
......
......@@ -679,6 +679,17 @@ clutter_seat_has_touchscreen (ClutterSeat *seat)
return has_touchscreen;
}
/**
* clutter_seat_query_state:
* @seat: a #ClutterSeat
* @device: a #ClutterInputDevice
* @sequence: (nullable): a #ClutterEventSequence
* @coords: (out caller-allocates) (optional): the coordinates of the pointer
* @modifiers: (out) (optional): the current #ClutterModifierType of the pointer
*
* Returns: %TRUE if @device (or the specific @sequence) is on the stage, %FALSE
* otherwise.
**/
gboolean
clutter_seat_query_state (ClutterSeat *seat,
ClutterInputDevice *device,
......
......@@ -50,6 +50,14 @@ enum
static GParamSpec *obj_props[PROP_LAST];
enum
{
DESTROY,
N_SIGNALS
};
guint stage_view_signals[N_SIGNALS] = { 0 };
typedef struct _ClutterStageViewPrivate
{
char *name;
......@@ -1467,6 +1475,8 @@ clutter_stage_view_dispose (GObject *object)
clutter_stage_view_get_instance_private (view);
int i;
g_signal_emit (view, stage_view_signals[DESTROY], 0);
g_clear_pointer (&priv->name, g_free);
g_clear_object (&priv->shadow.framebuffer);
......@@ -1607,6 +1617,14 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass)
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, PROP_LAST, obj_props);
stage_view_signals[DESTROY] =
g_signal_new ("destroy",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}
void
......
......@@ -406,6 +406,7 @@ setup_clip_frustum (ClutterStage *stage,
static void
clutter_stage_do_paint_view (ClutterStage *stage,
ClutterStageView *view,
ClutterFrame *frame,
const cairo_region_t *redraw_clip)
{
ClutterPaintContext *paint_context;
......@@ -451,6 +452,9 @@ clutter_stage_do_paint_view (ClutterStage *stage,
clip_frusta,
CLUTTER_PAINT_FLAG_NONE);
if (frame)
clutter_paint_context_assign_frame (paint_context, frame);
clutter_actor_paint (CLUTTER_ACTOR (stage), paint_context);
clutter_paint_context_destroy (paint_context);
}
......@@ -1259,7 +1263,7 @@ clutter_stage_real_paint_view (ClutterStage *stage,
const cairo_region_t *redraw_clip,
ClutterFrame *frame)
{
clutter_stage_do_paint_view (stage, view, redraw_clip);
clutter_stage_do_paint_view (stage, view, frame, redraw_clip);
}
static void
......@@ -1918,7 +1922,7 @@ clutter_stage_read_pixels (ClutterStage *stage,
}
framebuffer = clutter_stage_view_get_framebuffer (view);
clutter_stage_do_paint_view (stage, view, clip);
clutter_stage_do_paint_view (stage, view, NULL, clip);
cairo_region_destroy (clip);
......
......@@ -21,7 +21,6 @@ if get_option('debug')
elif buildtype != 'plain'
clutter_debug_c_args += [
'-DG_DISABLE_ASSERT',
'-DG_DISABLE_CHECKS',
'-DG_DISABLE_CAST_CHECKS',
]
endif
......
......@@ -106,7 +106,6 @@ if get_option('debug')
]
elif buildtype != 'plain'
cogl_debug_c_args += [
'-DG_DISABLE_CHECKS',
'-DG_DISABLE_CAST_CHECKS'
]
endif
......
mutter (44.1-0ubuntu1) lunar; urgency=medium
[ Jeremy Bícha ]
* New upstream release (LP: #2020225, LP: #2012717, LP: #2013216,
LP: #2015861, LP: #2017097)
* debian/libmutter-12-0.symbols: Add new symbols
* Drop 3 patches applied in new release
[ Daniel van Vugt ]
* Update triple buffering patch for Mutter 44.1 (LP: #2017137)
-- Jeremy Bícha <jbicha@ubuntu.com> Fri, 19 May 2023 16:18:13 -0400
mutter (44.0-2ubuntu4.23.04.1) lunar; urgency=medium
[ Marco Trevisan (Treviño) ]
......
......@@ -7,7 +7,7 @@ Section: x11
Priority: optional
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Uploaders: Jeremy Bicha <jbicha@ubuntu.com>
Uploaders: Jeremy Bicha <jbicha@ubuntu.com>, Marco Trevisan (Treviño) <marco@ubuntu.com>
Build-Depends: debhelper-compat (= 13),
dh-exec,
dh-sequence-gir,
......@@ -89,8 +89,8 @@ Rules-Requires-Root: no
Standards-Version: 4.6.2
XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git -b debian/unstable
XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/mutter
Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git -b ubuntu/master
Vcs-Browser: https://salsa.debian.org/gnome-team/mutter/tree/ubuntu/master
Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git -b ubuntu/lunar
Vcs-Browser: https://salsa.debian.org/gnome-team/mutter/tree/ubuntu/lunar
Package: mutter
Architecture: linux-any
......
......@@ -85,8 +85,8 @@ Rules-Requires-Root: no
Standards-Version: 4.6.2
XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git -b debian/unstable
XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/mutter
Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git -b ubuntu/master
Vcs-Browser: https://salsa.debian.org/gnome-team/mutter/tree/ubuntu/master
Vcs-Git: https://salsa.debian.org/gnome-team/mutter.git -b ubuntu/lunar
Vcs-Browser: https://salsa.debian.org/gnome-team/mutter/tree/ubuntu/lunar
Package: mutter
Architecture: linux-any
......