Compare commits
	
		
			1 Commits
		
	
	
		
			3.37.90
			...
			wip/carlos
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5aeb8ff6a6 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -103,4 +103,3 @@ doc/reference/meta.types
 | 
			
		||||
.dirstamp
 | 
			
		||||
**/tags.*
 | 
			
		||||
build/
 | 
			
		||||
subprojects/sysprof/
 | 
			
		||||
 
 | 
			
		||||
@@ -17,9 +17,8 @@ check-commit-log:
 | 
			
		||||
 | 
			
		||||
build-mutter:
 | 
			
		||||
  stage: build
 | 
			
		||||
  needs: []
 | 
			
		||||
  script:
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Db_coverage=true -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - ninja -C build install
 | 
			
		||||
  artifacts:
 | 
			
		||||
@@ -32,7 +31,6 @@ build-mutter:
 | 
			
		||||
 | 
			
		||||
build-without-opengl-and-glx:
 | 
			
		||||
  stage: build
 | 
			
		||||
  needs: []
 | 
			
		||||
  script:
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Dopengl=false -Dglx=false -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
@@ -46,7 +44,6 @@ build-without-opengl-and-glx:
 | 
			
		||||
 | 
			
		||||
build-without-native-backend-and-wayland:
 | 
			
		||||
  stage: build
 | 
			
		||||
  needs: []
 | 
			
		||||
  script:
 | 
			
		||||
    - meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false -Dwayland=false -Dcore_tests=false --werror --prefix /usr
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
@@ -62,7 +59,6 @@ test-mutter:
 | 
			
		||||
  stage: test
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - build-mutter
 | 
			
		||||
  needs: ["build-mutter"]
 | 
			
		||||
  variables:
 | 
			
		||||
    XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
 | 
			
		||||
    GSETTINGS_SCHEMA_DIR: "$CI_PROJECT_DIR/build/data"
 | 
			
		||||
@@ -88,13 +84,13 @@ test-mutter-coverage:
 | 
			
		||||
  stage: coverage
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - test-mutter
 | 
			
		||||
  needs: ["test-mutter"]
 | 
			
		||||
  script:
 | 
			
		||||
    - ninja -C build coverage
 | 
			
		||||
    - cat build/meson-logs/coverage.txt
 | 
			
		||||
    - meson . coverage-build -Dbuildtype=debugoptimized -Db_coverage=true -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr
 | 
			
		||||
    - ninja -C coverage-build coverage
 | 
			
		||||
    - cat coverage-build/meson-logs/coverage.txt
 | 
			
		||||
  artifacts:
 | 
			
		||||
    paths:
 | 
			
		||||
      - build/meson-logs
 | 
			
		||||
      - coverage-build/meson-logs
 | 
			
		||||
  when: manual
 | 
			
		||||
  except:
 | 
			
		||||
    refs:
 | 
			
		||||
@@ -105,7 +101,6 @@ can-build-gnome-shell:
 | 
			
		||||
  stage: test
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - build-mutter
 | 
			
		||||
  needs: ["build-mutter"]
 | 
			
		||||
  before_script:
 | 
			
		||||
    - meson install --no-rebuild -C build
 | 
			
		||||
  script:
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,6 @@ RUN dnf -y update && dnf -y upgrade && \
 | 
			
		||||
    # For running unit tests
 | 
			
		||||
    dnf install -y xorg-x11-server-Xvfb mesa-dri-drivers dbus dbus-x11 \
 | 
			
		||||
        '*/xvfb-run' gdm-lib accountsservice-libs gnome-control-center gcovr \
 | 
			
		||||
        libnma python3-gobject python3-dbusmock \
 | 
			
		||||
        --setopt=install_weak_deps=False && \
 | 
			
		||||
 | 
			
		||||
    # GNOME Shell
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,30 +1,3 @@
 | 
			
		||||
3.37.90
 | 
			
		||||
=======
 | 
			
		||||
* Fix using NEAREST filter for backgrounds on scaled monitors [Daniel V.; !1346]
 | 
			
		||||
* Screencast fixes and improvements [Jonas; !1361, !1377, !1391]
 | 
			
		||||
* Support tap-button-map and tap-drag-lock touchpad settings [Giusy; !1319]
 | 
			
		||||
* Fix wine copy & paste [Sebastian; !1369]
 | 
			
		||||
* Fix shadows of server-side decorated XWayland windows [Olivier; #1358]
 | 
			
		||||
* Replace some loaded terms with more descriptive ones [Olivier; !1396]
 | 
			
		||||
* Add API to launch trusted wayland clients [Sergio; #741]
 | 
			
		||||
* Skip displays with 'non-desktop' property set [Philipp; !1393]
 | 
			
		||||
* Invalidate offscreen effect cache on video memory purge [Daniel V.; !1374]
 | 
			
		||||
* Add wl_shm support for 10 bpc and 16 bpc half float formats [Jonas; !804]
 | 
			
		||||
* Fixed crashes [Jonas, Erik, Martin; !1365, !1375, #1343]
 | 
			
		||||
* Misc. bug fixes and cleanups [Daniel V., Carlos, Olivier, Christian,
 | 
			
		||||
  Daniel * G., Jonas, Florian; !1370, !1376, !1385, !1352, !1386, !1390,
 | 
			
		||||
  !1388, !1397, !1398, !1401]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Sergio Costas, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Christian Hergert, Sebastian Keller, Erik Kurzinger, Giusy Margarita,
 | 
			
		||||
  Daniel García Moreno, Florian Müllner, Daniel van Vugt, Martin Whitaker,
 | 
			
		||||
  Philipp Zabel
 | 
			
		||||
 | 
			
		||||
Translators:
 | 
			
		||||
  Fabio Tomat [fur], Rafael Fontenelle [pt_BR], Jordi Mas [ca],
 | 
			
		||||
  Yuri Chornoivan [uk], Alexandre Franke [fr]
 | 
			
		||||
 | 
			
		||||
3.37.3
 | 
			
		||||
======
 | 
			
		||||
* Support custom keyboard layouts in $XDG_CONFIG_HOME/xkb [Peter; !936]
 | 
			
		||||
 
 | 
			
		||||
@@ -10295,38 +10295,6 @@ clutter_actor_get_fixed_position (ClutterActor *self,
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_actor_get_transformed_extents:
 | 
			
		||||
 * @self: A #ClutterActor
 | 
			
		||||
 * @rect: (out): return location for the transformed bounding rect
 | 
			
		||||
 *
 | 
			
		||||
 * Gets the transformed bounding rect of an actor, in pixels relative to the stage.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
clutter_actor_get_transformed_extents (ClutterActor    *self,
 | 
			
		||||
                                       graphene_rect_t *rect)
 | 
			
		||||
{
 | 
			
		||||
  graphene_quad_t quad;
 | 
			
		||||
  graphene_point3d_t v[4];
 | 
			
		||||
  ClutterActorBox box;
 | 
			
		||||
 | 
			
		||||
  box.x1 = 0;
 | 
			
		||||
  box.y1 = 0;
 | 
			
		||||
  box.x2 = clutter_actor_box_get_width (&self->priv->allocation);
 | 
			
		||||
  box.y2 = clutter_actor_box_get_height (&self->priv->allocation);
 | 
			
		||||
  if (_clutter_actor_transform_and_project_box (self, &box, v))
 | 
			
		||||
    {
 | 
			
		||||
      graphene_quad_init (&quad,
 | 
			
		||||
                          (graphene_point_t *) &v[0],
 | 
			
		||||
                          (graphene_point_t *) &v[1],
 | 
			
		||||
                          (graphene_point_t *) &v[2],
 | 
			
		||||
                          (graphene_point_t *) &v[3]);
 | 
			
		||||
 | 
			
		||||
      if (rect)
 | 
			
		||||
        graphene_quad_bounds (&quad, rect);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_actor_get_transformed_position:
 | 
			
		||||
 * @self: A #ClutterActor
 | 
			
		||||
@@ -16215,7 +16183,12 @@ update_stage_views (ClutterActor *self)
 | 
			
		||||
  stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self));
 | 
			
		||||
  g_return_if_fail (stage);
 | 
			
		||||
 | 
			
		||||
  clutter_actor_get_transformed_extents (self, &bounding_rect);
 | 
			
		||||
  clutter_actor_get_transformed_position (self,
 | 
			
		||||
                                          &bounding_rect.origin.x,
 | 
			
		||||
                                          &bounding_rect.origin.y);
 | 
			
		||||
  clutter_actor_get_transformed_size (self,
 | 
			
		||||
                                      &bounding_rect.size.width,
 | 
			
		||||
                                      &bounding_rect.size.height);
 | 
			
		||||
 | 
			
		||||
  if (bounding_rect.size.width == 0.0 ||
 | 
			
		||||
      bounding_rect.size.height == 0.0)
 | 
			
		||||
 
 | 
			
		||||
@@ -813,11 +813,6 @@ void                            clutter_actor_set_child_transform
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_get_child_transform               (ClutterActor               *self,
 | 
			
		||||
                                                                                 ClutterMatrix              *transform);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_get_transformed_extents          (ClutterActor               *self,
 | 
			
		||||
                                                                                graphene_rect_t            *rect);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void                            clutter_actor_get_transformed_position          (ClutterActor               *self,
 | 
			
		||||
                                                                                 gfloat                     *x,
 | 
			
		||||
 
 | 
			
		||||
@@ -422,6 +422,14 @@ clutter_backend_real_get_features (ClutterBackend *backend)
 | 
			
		||||
      flags |= CLUTTER_FEATURE_STAGE_STATIC;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_SWAP_THROTTLE))
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_NOTE (BACKEND, "Cogl supports swap buffers throttling");
 | 
			
		||||
      flags |= CLUTTER_FEATURE_SWAP_THROTTLE;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    CLUTTER_NOTE (BACKEND, "Cogl doesn't support swap buffers throttling");
 | 
			
		||||
 | 
			
		||||
  if (cogl_clutter_winsys_has_feature (COGL_WINSYS_FEATURE_SWAP_BUFFERS_EVENT))
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_NOTE (BACKEND, "Cogl supports swap buffers complete events");
 | 
			
		||||
 
 | 
			
		||||
@@ -951,6 +951,7 @@ typedef enum
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ClutterFeatureFlags:
 | 
			
		||||
 * @CLUTTER_FEATURE_SWAP_THROTTLE: Set if backend throttles buffer swaps.
 | 
			
		||||
 * @CLUTTER_FEATURE_STAGE_STATIC: Set if stage size if fixed (i.e framebuffer)
 | 
			
		||||
 * @CLUTTER_FEATURE_STAGE_CURSOR: Set if stage has a graphical cursor.
 | 
			
		||||
 * @CLUTTER_FEATURE_SHADERS_GLSL: Set if the backend supports GLSL shaders.
 | 
			
		||||
@@ -965,6 +966,7 @@ typedef enum
 | 
			
		||||
 */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  CLUTTER_FEATURE_SWAP_THROTTLE          = (1 << 3),
 | 
			
		||||
  CLUTTER_FEATURE_STAGE_STATIC           = (1 << 6),
 | 
			
		||||
  CLUTTER_FEATURE_STAGE_CURSOR           = (1 << 8),
 | 
			
		||||
  CLUTTER_FEATURE_SHADERS_GLSL           = (1 << 9),
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,23 @@ void clutter_stage_capture_into (ClutterStage          *stage,
 | 
			
		||||
                                 cairo_rectangle_int_t *rect,
 | 
			
		||||
                                 uint8_t               *data);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_stage_paint_to_framebuffer (ClutterStage                *stage,
 | 
			
		||||
                                         CoglFramebuffer             *framebuffer,
 | 
			
		||||
                                         const cairo_rectangle_int_t *rect,
 | 
			
		||||
                                         float                        scale,
 | 
			
		||||
                                         ClutterPaintFlag             paint_flags);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
gboolean clutter_stage_paint_to_buffer (ClutterStage                 *stage,
 | 
			
		||||
                                        const cairo_rectangle_int_t  *rect,
 | 
			
		||||
                                        float                         scale,
 | 
			
		||||
                                        uint8_t                      *data,
 | 
			
		||||
                                        int                           stride,
 | 
			
		||||
                                        CoglPixelFormat               format,
 | 
			
		||||
                                        ClutterPaintFlag              paint_flags,
 | 
			
		||||
                                        GError                      **error);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_stage_clear_stage_views (ClutterStage *stage);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -100,8 +100,6 @@ struct _ClutterOffscreenEffectPrivate
 | 
			
		||||
  int target_height;
 | 
			
		||||
 | 
			
		||||
  gint old_opacity_override;
 | 
			
		||||
 | 
			
		||||
  gulong purge_handler_id;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (ClutterOffscreenEffect,
 | 
			
		||||
@@ -160,12 +158,6 @@ ensure_pipeline_filter_for_scale (ClutterOffscreenEffect *self,
 | 
			
		||||
                                   filter, filter);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
video_memory_purged (ClutterOffscreenEffect *self)
 | 
			
		||||
{
 | 
			
		||||
  g_clear_pointer (&self->priv->offscreen, cogl_object_unref);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
update_fbo (ClutterEffect *effect,
 | 
			
		||||
            int            target_width,
 | 
			
		||||
@@ -174,26 +166,8 @@ update_fbo (ClutterEffect *effect,
 | 
			
		||||
{
 | 
			
		||||
  ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (effect);
 | 
			
		||||
  ClutterOffscreenEffectPrivate *priv = self->priv;
 | 
			
		||||
  ClutterActor *stage_actor;
 | 
			
		||||
 | 
			
		||||
  stage_actor = clutter_actor_get_stage (priv->actor);
 | 
			
		||||
  if (stage_actor != priv->stage)
 | 
			
		||||
    {
 | 
			
		||||
      g_clear_signal_handler (&priv->purge_handler_id, priv->stage);
 | 
			
		||||
 | 
			
		||||
      priv->stage = stage_actor;
 | 
			
		||||
 | 
			
		||||
      if (priv->stage)
 | 
			
		||||
        {
 | 
			
		||||
          priv->purge_handler_id =
 | 
			
		||||
            g_signal_connect_object (priv->stage,
 | 
			
		||||
                                     "gl-video-memory-purged",
 | 
			
		||||
                                     G_CALLBACK (video_memory_purged),
 | 
			
		||||
                                     self,
 | 
			
		||||
                                     G_CONNECT_SWAPPED);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  priv->stage = clutter_actor_get_stage (priv->actor);
 | 
			
		||||
  if (priv->stage == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      CLUTTER_NOTE (MISC, "The actor '%s' is not part of a stage",
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,6 @@ typedef enum _ClutterPaintFlag
 | 
			
		||||
{
 | 
			
		||||
  CLUTTER_PAINT_FLAG_NONE = 0,
 | 
			
		||||
  CLUTTER_PAINT_FLAG_NO_CURSORS = 1 << 0,
 | 
			
		||||
  CLUTTER_PAINT_FLAG_FORCE_CURSORS = 1 << 1,
 | 
			
		||||
} ClutterPaintFlag;
 | 
			
		||||
 | 
			
		||||
#define CLUTTER_TYPE_PAINT_CONTEXT (clutter_paint_context_get_type ())
 | 
			
		||||
 
 | 
			
		||||
@@ -313,12 +313,6 @@ us (uint64_t us)
 | 
			
		||||
  return us;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline uint32_t
 | 
			
		||||
ms (uint32_t ms)
 | 
			
		||||
{
 | 
			
		||||
  return ms;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline uint64_t
 | 
			
		||||
ms2us (uint64_t ms)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -172,7 +172,6 @@ enum
 | 
			
		||||
  AFTER_UPDATE,
 | 
			
		||||
  PAINT_VIEW,
 | 
			
		||||
  PRESENTED,
 | 
			
		||||
  GL_VIDEO_MEMORY_PURGED,
 | 
			
		||||
 | 
			
		||||
  LAST_SIGNAL
 | 
			
		||||
};
 | 
			
		||||
@@ -2012,22 +2011,6 @@ clutter_stage_class_init (ClutterStageClass *klass)
 | 
			
		||||
                  CLUTTER_TYPE_STAGE_VIEW,
 | 
			
		||||
                  G_TYPE_POINTER);
 | 
			
		||||
 | 
			
		||||
 /**
 | 
			
		||||
   * ClutterStage::gl-video-memory-purged: (skip)
 | 
			
		||||
   * @stage: the stage that received the event
 | 
			
		||||
   *
 | 
			
		||||
   * Signals that the underlying GL driver has had its texture memory purged
 | 
			
		||||
   * so anything presently held in texture memory is now invalidated, and
 | 
			
		||||
   * likely corrupt. It needs redrawing.
 | 
			
		||||
   */
 | 
			
		||||
  stage_signals[GL_VIDEO_MEMORY_PURGED] =
 | 
			
		||||
    g_signal_new (I_("gl-video-memory-purged"),
 | 
			
		||||
                  G_TYPE_FROM_CLASS (gobject_class),
 | 
			
		||||
                  G_SIGNAL_RUN_LAST,
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  klass->activate = clutter_stage_real_activate;
 | 
			
		||||
  klass->deactivate = clutter_stage_real_deactivate;
 | 
			
		||||
  klass->delete_event = clutter_stage_real_delete_event;
 | 
			
		||||
@@ -3641,6 +3624,102 @@ clutter_stage_presented (ClutterStage     *stage,
 | 
			
		||||
  g_signal_emit (stage, stage_signals[PRESENTED], 0, view, frame_info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
capture_view (ClutterStage          *stage,
 | 
			
		||||
              gboolean               paint,
 | 
			
		||||
              ClutterStageView      *view,
 | 
			
		||||
              ClutterCapture        *capture)
 | 
			
		||||
{
 | 
			
		||||
  cairo_surface_t *image;
 | 
			
		||||
  uint8_t *data;
 | 
			
		||||
  int stride;
 | 
			
		||||
  cairo_rectangle_int_t *rect;
 | 
			
		||||
  float view_scale;
 | 
			
		||||
  float texture_width;
 | 
			
		||||
  float texture_height;
 | 
			
		||||
 | 
			
		||||
  rect = &capture->rect;
 | 
			
		||||
 | 
			
		||||
  view_scale = clutter_stage_view_get_scale (view);
 | 
			
		||||
  texture_width = roundf (rect->width * view_scale);
 | 
			
		||||
  texture_height = roundf (rect->height * view_scale);
 | 
			
		||||
  image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                      texture_width, texture_height);
 | 
			
		||||
  cairo_surface_set_device_scale (image, view_scale, view_scale);
 | 
			
		||||
 | 
			
		||||
  data = cairo_image_surface_get_data (image);
 | 
			
		||||
  stride = cairo_image_surface_get_stride (image);
 | 
			
		||||
 | 
			
		||||
  capture_view_into (stage, paint, view, rect, data, stride);
 | 
			
		||||
  capture->image = image;
 | 
			
		||||
 | 
			
		||||
  cairo_surface_mark_dirty (capture->image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * clutter_stage_capture:
 | 
			
		||||
 * @stage: a #ClutterStage
 | 
			
		||||
 * @paint: whether to pain the frame
 | 
			
		||||
 * @rect: a #cairo_rectangle_int_t in stage coordinates
 | 
			
		||||
 * @out_captures: (out) (array length=out_n_captures): an array of
 | 
			
		||||
 *   #ClutterCapture
 | 
			
		||||
 * @out_n_captures: (out): the number of captures in @out_captures
 | 
			
		||||
 *
 | 
			
		||||
 * Captures the stage pixels of @rect into @captures. @rect is in stage
 | 
			
		||||
 * coordinates.
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: %TRUE if a #ClutterCapture has been created, %FALSE otherwise
 | 
			
		||||
 */
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_stage_capture (ClutterStage          *stage,
 | 
			
		||||
                       gboolean               paint,
 | 
			
		||||
                       cairo_rectangle_int_t *rect,
 | 
			
		||||
                       ClutterCapture       **out_captures,
 | 
			
		||||
                       int                   *out_n_captures)
 | 
			
		||||
{
 | 
			
		||||
  ClutterStagePrivate *priv = stage->priv;
 | 
			
		||||
  GList *views = _clutter_stage_window_get_views (priv->impl);
 | 
			
		||||
  GList *l;
 | 
			
		||||
  ClutterCapture *captures;
 | 
			
		||||
  int n_captures;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
 | 
			
		||||
 | 
			
		||||
  captures = g_new0 (ClutterCapture, g_list_length (views));
 | 
			
		||||
  n_captures = 0;
 | 
			
		||||
 | 
			
		||||
  for (l = views; l; l = l->next)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterStageView *view = l->data;
 | 
			
		||||
      ClutterCapture *capture;
 | 
			
		||||
      cairo_rectangle_int_t view_layout;
 | 
			
		||||
      cairo_region_t *region;
 | 
			
		||||
 | 
			
		||||
      clutter_stage_view_get_layout (view, &view_layout);
 | 
			
		||||
      region = cairo_region_create_rectangle (&view_layout);
 | 
			
		||||
      cairo_region_intersect_rectangle (region, rect);
 | 
			
		||||
 | 
			
		||||
      capture = &captures[n_captures];
 | 
			
		||||
      cairo_region_get_extents (region, &capture->rect);
 | 
			
		||||
      cairo_region_destroy (region);
 | 
			
		||||
 | 
			
		||||
      if (capture->rect.width == 0 || capture->rect.height == 0)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      capture_view (stage, paint, view, capture);
 | 
			
		||||
 | 
			
		||||
      n_captures++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (n_captures == 0)
 | 
			
		||||
    g_clear_pointer (&captures, g_free);
 | 
			
		||||
 | 
			
		||||
  *out_captures = captures;
 | 
			
		||||
  *out_n_captures = n_captures;
 | 
			
		||||
 | 
			
		||||
  return n_captures > 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
clutter_stage_get_capture_final_size (ClutterStage          *stage,
 | 
			
		||||
                                      cairo_rectangle_int_t *rect,
 | 
			
		||||
 
 | 
			
		||||
@@ -219,22 +219,11 @@ gboolean clutter_stage_get_capture_final_size (ClutterStage          *stage,
 | 
			
		||||
                                               float                 *scale);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
void clutter_stage_paint_to_framebuffer (ClutterStage                *stage,
 | 
			
		||||
                                         CoglFramebuffer             *framebuffer,
 | 
			
		||||
                                         const cairo_rectangle_int_t *rect,
 | 
			
		||||
                                         float                        scale,
 | 
			
		||||
                                         ClutterPaintFlag             paint_flags);
 | 
			
		||||
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
gboolean clutter_stage_paint_to_buffer (ClutterStage                 *stage,
 | 
			
		||||
                                        const cairo_rectangle_int_t  *rect,
 | 
			
		||||
                                        float                         scale,
 | 
			
		||||
                                        uint8_t                      *data,
 | 
			
		||||
                                        int                           stride,
 | 
			
		||||
                                        CoglPixelFormat               format,
 | 
			
		||||
                                        ClutterPaintFlag              paint_flags,
 | 
			
		||||
                                        GError                      **error);
 | 
			
		||||
 | 
			
		||||
gboolean clutter_stage_capture (ClutterStage          *stage,
 | 
			
		||||
                                gboolean               paint,
 | 
			
		||||
                                cairo_rectangle_int_t *rect,
 | 
			
		||||
                                ClutterCapture       **out_captures,
 | 
			
		||||
                                int                   *out_n_captures);
 | 
			
		||||
CLUTTER_EXPORT
 | 
			
		||||
ClutterStageView * clutter_stage_get_view_at (ClutterStage *stage,
 | 
			
		||||
                                              float         x,
 | 
			
		||||
 
 | 
			
		||||
@@ -5326,7 +5326,7 @@ clutter_text_set_selection_bound (ClutterText *self,
 | 
			
		||||
 | 
			
		||||
  if (priv->selection_bound != selection_bound)
 | 
			
		||||
    {
 | 
			
		||||
      gint len = clutter_text_buffer_get_length (get_buffer (self));
 | 
			
		||||
      gint len = clutter_text_buffer_get_length (get_buffer (self));;
 | 
			
		||||
 | 
			
		||||
      if (selection_bound < 0 || selection_bound >= len)
 | 
			
		||||
        priv->selection_bound = -1;
 | 
			
		||||
 
 | 
			
		||||
@@ -351,14 +351,6 @@ _cogl_bitmap_needs_short_temp_buffer (CoglPixelFormat format)
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,13 +40,13 @@
 | 
			
		||||
#define UNPACK_2(b) (((b) * ((1 << (sizeof (component_type) * 8)) - 1) + \
 | 
			
		||||
                      1) / 3)
 | 
			
		||||
#define UNPACK_4(b) (((b) * ((1 << (sizeof (component_type) * 8)) - 1) + \
 | 
			
		||||
                      7) / 0xf)
 | 
			
		||||
                      7) / 15)
 | 
			
		||||
#define UNPACK_5(b) (((b) * ((1 << (sizeof (component_type) * 8)) - 1) + \
 | 
			
		||||
                      0xf) / 0x1f)
 | 
			
		||||
                      15) / 31)
 | 
			
		||||
#define UNPACK_6(b) (((b) * ((1 << (sizeof (component_type) * 8)) - 1) + \
 | 
			
		||||
                      0x1f) / 0x3f)
 | 
			
		||||
                      31) / 63)
 | 
			
		||||
#define UNPACK_10(b) (((b) * ((1 << (sizeof (component_type) * 8)) - 1) + \
 | 
			
		||||
                       0x1ff) / 0x3ff)
 | 
			
		||||
                       511) / 1023)
 | 
			
		||||
 | 
			
		||||
inline static void
 | 
			
		||||
G_PASTE (_cogl_unpack_a_8_, component_size) (const uint8_t *src,
 | 
			
		||||
@@ -207,8 +207,8 @@ G_PASTE (_cogl_unpack_rgb_565_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint16_t v = *(const uint16_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[0] = UNPACK_5 (v >> 11);
 | 
			
		||||
      dst[1] = UNPACK_6 ((v >> 5) & 0x3f);
 | 
			
		||||
      dst[2] = UNPACK_5 (v & 0x1f);
 | 
			
		||||
      dst[1] = UNPACK_6 ((v >> 5) & 63);
 | 
			
		||||
      dst[2] = UNPACK_5 (v & 31);
 | 
			
		||||
      dst[3] = UNPACK_BYTE (255);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
@@ -225,9 +225,9 @@ G_PASTE (_cogl_unpack_rgba_4444_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint16_t v = *(const uint16_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[0] = UNPACK_4 (v >> 12);
 | 
			
		||||
      dst[1] = UNPACK_4 ((v >> 8) & 0xf);
 | 
			
		||||
      dst[2] = UNPACK_4 ((v >> 4) & 0xf);
 | 
			
		||||
      dst[3] = UNPACK_4 (v & 0xf);
 | 
			
		||||
      dst[1] = UNPACK_4 ((v >> 8) & 15);
 | 
			
		||||
      dst[2] = UNPACK_4 ((v >> 4) & 15);
 | 
			
		||||
      dst[3] = UNPACK_4 (v & 15);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
    }
 | 
			
		||||
@@ -243,8 +243,8 @@ G_PASTE (_cogl_unpack_rgba_5551_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint16_t v = *(const uint16_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[0] = UNPACK_5 (v >> 11);
 | 
			
		||||
      dst[1] = UNPACK_5 ((v >> 6) & 0x1f);
 | 
			
		||||
      dst[2] = UNPACK_5 ((v >> 1) & 0x1f);
 | 
			
		||||
      dst[1] = UNPACK_5 ((v >> 6) & 31);
 | 
			
		||||
      dst[2] = UNPACK_5 ((v >> 1) & 31);
 | 
			
		||||
      dst[3] = UNPACK_1 (v & 1);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
@@ -261,8 +261,8 @@ G_PASTE (_cogl_unpack_rgba_1010102_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint32_t v = *(const uint32_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[0] = UNPACK_10 (v >> 22);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 12) & 0x3ff);
 | 
			
		||||
      dst[2] = UNPACK_10 ((v >> 2) & 0x3ff);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 12) & 1023);
 | 
			
		||||
      dst[2] = UNPACK_10 ((v >> 2) & 1023);
 | 
			
		||||
      dst[3] = UNPACK_2 (v & 3);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
@@ -279,8 +279,8 @@ G_PASTE (_cogl_unpack_bgra_1010102_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint32_t v = *(const uint32_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[2] = UNPACK_10 (v >> 22);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 12) & 0x3ff);
 | 
			
		||||
      dst[0] = UNPACK_10 ((v >> 2) & 0x3ff);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 12) & 1023);
 | 
			
		||||
      dst[0] = UNPACK_10 ((v >> 2) & 1023);
 | 
			
		||||
      dst[3] = UNPACK_2 (v & 3);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
@@ -297,9 +297,9 @@ G_PASTE (_cogl_unpack_argb_2101010_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint32_t v = *(const uint32_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[3] = UNPACK_2 (v >> 30);
 | 
			
		||||
      dst[0] = UNPACK_10 ((v >> 20) & 0x3ff);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 10) & 0x3ff);
 | 
			
		||||
      dst[2] = UNPACK_10 (v & 0x3ff);
 | 
			
		||||
      dst[0] = UNPACK_10 ((v >> 20) & 1023);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 10) & 1023);
 | 
			
		||||
      dst[2] = UNPACK_10 (v & 1023);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
    }
 | 
			
		||||
@@ -315,22 +315,14 @@ G_PASTE (_cogl_unpack_abgr_2101010_, component_size) (const uint8_t *src,
 | 
			
		||||
      uint32_t v = *(const uint32_t *) src;
 | 
			
		||||
 | 
			
		||||
      dst[3] = UNPACK_2 (v >> 30);
 | 
			
		||||
      dst[2] = UNPACK_10 ((v >> 20) & 0x3ff);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 10) & 0x3ff);
 | 
			
		||||
      dst[0] = UNPACK_10 (v & 0x3ff);
 | 
			
		||||
      dst[2] = UNPACK_10 ((v >> 20) & 1023);
 | 
			
		||||
      dst[1] = UNPACK_10 ((v >> 10) & 1023);
 | 
			
		||||
      dst[0] = UNPACK_10 (v & 1023);
 | 
			
		||||
      dst += 4;
 | 
			
		||||
      src += 2;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline static void
 | 
			
		||||
G_PASTE (_cogl_unpack_argb_fp_16161616_, component_size) (const uint8_t *src,
 | 
			
		||||
                                                          component_type *dst,
 | 
			
		||||
                                                          int width)
 | 
			
		||||
{
 | 
			
		||||
  g_warning ("Not implemented");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#undef UNPACK_1
 | 
			
		||||
#undef UNPACK_2
 | 
			
		||||
#undef UNPACK_4
 | 
			
		||||
@@ -404,16 +396,6 @@ G_PASTE (_cogl_unpack_, component_size) (CoglPixelFormat format,
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
      G_PASTE (_cogl_unpack_abgr_2101010_, component_size) (src, dst, width);
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
      G_PASTE (_cogl_unpack_argb_fp_16161616_, component_size) (src, dst, width);
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_16:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_32:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
 | 
			
		||||
@@ -432,10 +414,10 @@ G_PASTE (_cogl_unpack_, component_size) (CoglPixelFormat format,
 | 
			
		||||
 | 
			
		||||
#define PACK_1(b) PACK_SIZE (b, 1)
 | 
			
		||||
#define PACK_2(b) PACK_SIZE (b, 3)
 | 
			
		||||
#define PACK_4(b) PACK_SIZE (b, 0xf)
 | 
			
		||||
#define PACK_5(b) PACK_SIZE (b, 0x1f)
 | 
			
		||||
#define PACK_6(b) PACK_SIZE (b, 0x3f)
 | 
			
		||||
#define PACK_10(b) PACK_SIZE (b, 0x3ff)
 | 
			
		||||
#define PACK_4(b) PACK_SIZE (b, 15)
 | 
			
		||||
#define PACK_5(b) PACK_SIZE (b, 31)
 | 
			
		||||
#define PACK_6(b) PACK_SIZE (b, 63)
 | 
			
		||||
#define PACK_10(b) PACK_SIZE (b, 1023)
 | 
			
		||||
 | 
			
		||||
inline static void
 | 
			
		||||
G_PASTE (_cogl_pack_a_8_, component_size) (const component_type *src,
 | 
			
		||||
@@ -701,14 +683,6 @@ G_PASTE (_cogl_pack_abgr_2101010_, component_size) (const component_type *src,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline static void
 | 
			
		||||
G_PASTE (_cogl_pack_argb_fp_16161616_, component_size) (const component_type *src,
 | 
			
		||||
                                                        uint8_t *dst,
 | 
			
		||||
                                                        int width)
 | 
			
		||||
{
 | 
			
		||||
  g_warning ("Not implemented");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#undef PACK_SIZE
 | 
			
		||||
#undef PACK_1
 | 
			
		||||
#undef PACK_2
 | 
			
		||||
@@ -783,16 +757,6 @@ G_PASTE (_cogl_pack_, component_size) (CoglPixelFormat format,
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
      G_PASTE (_cogl_pack_abgr_2101010_, component_size) (src, dst, width);
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
      G_PASTE (_cogl_pack_argb_fp_16161616_, component_size) (src, dst, width);
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_16:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_32:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,6 @@
 | 
			
		||||
 | 
			
		||||
#include "cogl-config.h"
 | 
			
		||||
 | 
			
		||||
#include "cogl-mutter.h"
 | 
			
		||||
#include "cogl-object.h"
 | 
			
		||||
#include "cogl-private.h"
 | 
			
		||||
#include "cogl-profile.h"
 | 
			
		||||
@@ -465,10 +464,3 @@ cogl_context_is_hardware_accelerated (CoglContext *context)
 | 
			
		||||
{
 | 
			
		||||
  return context->driver_vtable->is_hardware_accelerated (context);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
cogl_context_format_supports_upload (CoglContext *ctx,
 | 
			
		||||
                                     CoglPixelFormat format)
 | 
			
		||||
{
 | 
			
		||||
  return ctx->texture_driver->format_supports_upload (ctx, format);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -325,7 +325,7 @@ foreach_clamped_region (CoglMetaTexture *meta_texture,
 | 
			
		||||
      if (*tx_1 < 0)
 | 
			
		||||
        {
 | 
			
		||||
          clamp_data.start = *tx_1;
 | 
			
		||||
          clamp_data.end = MIN (0, *tx_2);
 | 
			
		||||
          clamp_data.end = MIN (0, *tx_2);;
 | 
			
		||||
          cogl_meta_texture_foreach_in_region (meta_texture,
 | 
			
		||||
                                               half_texel_width, *ty_1,
 | 
			
		||||
                                               half_texel_width, *ty_2,
 | 
			
		||||
@@ -377,7 +377,7 @@ foreach_clamped_region (CoglMetaTexture *meta_texture,
 | 
			
		||||
      if (*ty_1 < 0)
 | 
			
		||||
        {
 | 
			
		||||
          clamp_data.start = *ty_1;
 | 
			
		||||
          clamp_data.end = MIN (0, *ty_2);
 | 
			
		||||
          clamp_data.end = MIN (0, *ty_2);;
 | 
			
		||||
          cogl_meta_texture_foreach_in_region (meta_texture,
 | 
			
		||||
                                               *tx_1, half_texel_height,
 | 
			
		||||
                                               *tx_2, half_texel_height,
 | 
			
		||||
@@ -396,7 +396,7 @@ foreach_clamped_region (CoglMetaTexture *meta_texture,
 | 
			
		||||
      /* Handle any bottom clamped region */
 | 
			
		||||
      if (*ty_2 > max_t_coord)
 | 
			
		||||
        {
 | 
			
		||||
          clamp_data.start = MAX (max_t_coord, *ty_1);
 | 
			
		||||
          clamp_data.start = MAX (max_t_coord, *ty_1);;
 | 
			
		||||
          clamp_data.end = *ty_2;
 | 
			
		||||
          cogl_meta_texture_foreach_in_region (meta_texture,
 | 
			
		||||
                                               *tx_1,
 | 
			
		||||
 
 | 
			
		||||
@@ -48,8 +48,4 @@ void cogl_renderer_set_custom_winsys (CoglRenderer                *renderer,
 | 
			
		||||
                                      CoglCustomWinsysVtableGetter winsys_vtable_getter,
 | 
			
		||||
                                      void                        *user_data);
 | 
			
		||||
 | 
			
		||||
COGL_EXPORT
 | 
			
		||||
gboolean cogl_context_format_supports_upload (CoglContext     *ctx,
 | 
			
		||||
                                              CoglPixelFormat  format);
 | 
			
		||||
 | 
			
		||||
#endif /* __COGL_MUTTER_H___ */
 | 
			
		||||
 
 | 
			
		||||
@@ -245,62 +245,6 @@ static const CoglPixelFormatInfo format_info_table[] = {
 | 
			
		||||
    .aligned = 0,
 | 
			
		||||
    .bpp = { 4 },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_RGBA_FP_16161616,
 | 
			
		||||
    .format_str = "RGBA_FP_16161616",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_BGRA_FP_16161616,
 | 
			
		||||
    .format_str = "BGRA_FP_16161616",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_ARGB_FP_16161616,
 | 
			
		||||
    .format_str = "ARGB_FP_16161616",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_ABGR_FP_16161616,
 | 
			
		||||
    .format_str = "ABGR_FP_16161616",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE,
 | 
			
		||||
    .format_str = "RGBA_FP_16161616_PRE",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE,
 | 
			
		||||
    .format_str = "BGRA_FP_16161616_PRE",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE,
 | 
			
		||||
    .format_str = "ARGB_FP_16161616_PRE",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE,
 | 
			
		||||
    .format_str = "ABGR_FP_16161616_PRE",
 | 
			
		||||
    .n_planes = 1,
 | 
			
		||||
    .bpp = { 8 },
 | 
			
		||||
    .aligned = 1
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    .cogl_format = COGL_PIXEL_FORMAT_DEPTH_16,
 | 
			
		||||
    .format_str = "DEPTH_16",
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,7 @@ G_BEGIN_DECLS
 | 
			
		||||
 * 7     = YUV: undefined bpp, undefined alignment
 | 
			
		||||
 * 9     = 2 bpp, aligned
 | 
			
		||||
 * 10    = depth, aligned (8, 16, 24, 32, 32f)
 | 
			
		||||
 * 11    = 8 bpp fp16
 | 
			
		||||
 * 11    = undefined
 | 
			
		||||
 * 12    = 3 bpp, not aligned
 | 
			
		||||
 * 13    = 4 bpp, not aligned (e.g. 2101010)
 | 
			
		||||
 * 14-15 = undefined
 | 
			
		||||
@@ -168,14 +168,6 @@ G_BEGIN_DECLS
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_BGRA_1010102_PRE: Premultiplied BGRA, 32 bits, 10 bpc
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_ARGB_2101010_PRE: Premultiplied ARGB, 32 bits, 10 bpc
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_ABGR_2101010_PRE: Premultiplied ABGR, 32 bits, 10 bpc
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_RGBA_FP_16161616: RGBA half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_BGRA_FP_16161616: BGRA half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_ARGB_FP_16161616: ARGB half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_ABGR_FP_16161616: ABGR half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE: Premultiplied RGBA half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE: Premultiplied BGRA half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE: Premultiplied ARGB half floating point, 64 bit
 | 
			
		||||
 * @COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE: Premultiplied ABGR half floating point, 64 bit
 | 
			
		||||
 *
 | 
			
		||||
 * Pixel formats used by Cogl. For the formats with a byte per
 | 
			
		||||
 * component, the order of the components specify the order in
 | 
			
		||||
@@ -224,11 +216,6 @@ typedef enum /*< prefix=COGL_PIXEL_FORMAT >*/
 | 
			
		||||
  COGL_PIXEL_FORMAT_ARGB_2101010  = (13 | COGL_A_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ABGR_2101010  = (13 | COGL_A_BIT | COGL_BGR_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
 | 
			
		||||
  COGL_PIXEL_FORMAT_RGBA_FP_16161616 = (11 | COGL_A_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_BGRA_FP_16161616 = (11 | COGL_A_BIT | COGL_BGR_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ARGB_FP_16161616 = (11 | COGL_A_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ABGR_FP_16161616 = (11 | COGL_A_BIT | COGL_BGR_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
 | 
			
		||||
  COGL_PIXEL_FORMAT_RGBA_8888_PRE = (3 | COGL_A_BIT | COGL_PREMULT_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_BGRA_8888_PRE = (3 | COGL_A_BIT | COGL_PREMULT_BIT | COGL_BGR_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ARGB_8888_PRE = (3 | COGL_A_BIT | COGL_PREMULT_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
@@ -241,11 +228,6 @@ typedef enum /*< prefix=COGL_PIXEL_FORMAT >*/
 | 
			
		||||
  COGL_PIXEL_FORMAT_ARGB_2101010_PRE = (COGL_PIXEL_FORMAT_ARGB_2101010 | COGL_PREMULT_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ABGR_2101010_PRE = (COGL_PIXEL_FORMAT_ABGR_2101010 | COGL_PREMULT_BIT),
 | 
			
		||||
 | 
			
		||||
  COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE = (11 | COGL_A_BIT | COGL_PREMULT_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE = (11 | COGL_A_BIT | COGL_PREMULT_BIT | COGL_BGR_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE = (11 | COGL_A_BIT | COGL_PREMULT_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE = (11 | COGL_A_BIT | COGL_PREMULT_BIT | COGL_BGR_BIT | COGL_AFIRST_BIT),
 | 
			
		||||
 | 
			
		||||
  COGL_PIXEL_FORMAT_DEPTH_16  = (9 | COGL_DEPTH_BIT),
 | 
			
		||||
  COGL_PIXEL_FORMAT_DEPTH_32  = (3 | COGL_DEPTH_BIT),
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -46,8 +46,6 @@ typedef enum
 | 
			
		||||
  COGL_PRIVATE_FEATURE_EXT_PACKED_DEPTH_STENCIL,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_OES_PACKED_DEPTH_STENCIL,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_BGRA8888,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_UNPACK_SUBIMAGE,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_SAMPLER_OBJECTS,
 | 
			
		||||
  COGL_PRIVATE_FEATURE_READ_PIXELS_ANY_FORMAT,
 | 
			
		||||
 
 | 
			
		||||
@@ -128,11 +128,6 @@ struct _CoglTextureDriver
 | 
			
		||||
                      int width,
 | 
			
		||||
                      int height);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  gboolean
 | 
			
		||||
  (* format_supports_upload) (CoglContext *ctx,
 | 
			
		||||
                              CoglPixelFormat format);
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * The driver may impose constraints on what formats can be used to store
 | 
			
		||||
   * texture data read from textures. For example GLES currently only supports
 | 
			
		||||
 
 | 
			
		||||
@@ -428,6 +428,10 @@ typedef enum _CoglWinsysFeature
 | 
			
		||||
   * framebuffers at the same time. */
 | 
			
		||||
  COGL_WINSYS_FEATURE_MULTIPLE_ONSCREEN,
 | 
			
		||||
 | 
			
		||||
  /* Available if onscreen framebuffer swaps can be automatically
 | 
			
		||||
   * throttled to the vblank frequency. */
 | 
			
		||||
  COGL_WINSYS_FEATURE_SWAP_THROTTLE,
 | 
			
		||||
 | 
			
		||||
  /* Available if its possible to query a counter that
 | 
			
		||||
   * increments at each vblank. */
 | 
			
		||||
  COGL_WINSYS_FEATURE_VBLANK_COUNTER,
 | 
			
		||||
 
 | 
			
		||||
@@ -288,31 +288,6 @@ _cogl_driver_pixel_format_to_gl (CoglContext     *context,
 | 
			
		||||
      gltype = GL_UNSIGNED_SHORT_5_5_5_1;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
      glintformat = GL_RGBA;
 | 
			
		||||
      glformat = GL_RGBA;
 | 
			
		||||
      gltype = GL_HALF_FLOAT;
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
      glintformat = GL_RGBA;
 | 
			
		||||
      glformat = GL_BGRA;
 | 
			
		||||
      gltype = GL_HALF_FLOAT;
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
      glintformat = GL_RGBA;
 | 
			
		||||
      glformat = GL_BGRA;
 | 
			
		||||
      gltype = GL_HALF_FLOAT;
 | 
			
		||||
      break;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
      glintformat = GL_RGBA;
 | 
			
		||||
      glformat = GL_RGBA;
 | 
			
		||||
      gltype = GL_HALF_FLOAT;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_16:
 | 
			
		||||
      glintformat = GL_DEPTH_COMPONENT16;
 | 
			
		||||
      glformat = GL_DEPTH_COMPONENT;
 | 
			
		||||
@@ -531,14 +506,6 @@ _cogl_driver_update_features (CoglContext *ctx,
 | 
			
		||||
                    COGL_FEATURE_ID_TEXTURE_RG,
 | 
			
		||||
                    TRUE);
 | 
			
		||||
 | 
			
		||||
  COGL_FLAGS_SET (private_features,
 | 
			
		||||
                  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102, TRUE);
 | 
			
		||||
 | 
			
		||||
  if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 3, 0))
 | 
			
		||||
    COGL_FLAGS_SET (private_features,
 | 
			
		||||
                    COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT,
 | 
			
		||||
                    TRUE);
 | 
			
		||||
 | 
			
		||||
  /* Cache features */
 | 
			
		||||
  for (i = 0; i < G_N_ELEMENTS (private_features); i++)
 | 
			
		||||
    ctx->private_features[i] |= private_features[i];
 | 
			
		||||
 
 | 
			
		||||
@@ -396,64 +396,6 @@ _cogl_texture_driver_size_supported (CoglContext *ctx,
 | 
			
		||||
  return new_width != 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
_cogl_texture_driver_upload_supported (CoglContext *ctx,
 | 
			
		||||
                                       CoglPixelFormat format)
 | 
			
		||||
{
 | 
			
		||||
  switch (format)
 | 
			
		||||
    {
 | 
			
		||||
    case COGL_PIXEL_FORMAT_A_8:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_G_8:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RG_88:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGB_888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGR_888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGB_565:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_4444:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_4444_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_5551:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_5551_PRE:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
      if (_cogl_has_private_feature
 | 
			
		||||
          (ctx, COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT))
 | 
			
		||||
        return TRUE;
 | 
			
		||||
      else
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_16:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_32:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ANY:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_YUV:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_assert_not_reached ();
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CoglPixelFormat
 | 
			
		||||
_cogl_texture_driver_find_best_gl_get_data_format
 | 
			
		||||
                                            (CoglContext *context,
 | 
			
		||||
@@ -477,6 +419,5 @@ _cogl_texture_driver_gl =
 | 
			
		||||
    _cogl_texture_driver_prep_gl_for_pixels_download,
 | 
			
		||||
    _cogl_texture_driver_gl_get_tex_image,
 | 
			
		||||
    _cogl_texture_driver_size_supported,
 | 
			
		||||
    _cogl_texture_driver_upload_supported,
 | 
			
		||||
    _cogl_texture_driver_find_best_gl_get_data_format
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
@@ -56,12 +56,6 @@
 | 
			
		||||
#ifndef GL_RG8
 | 
			
		||||
#define GL_RG8 0x822B
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef GL_UNSIGNED_INT_2_10_10_10_REV_EXT
 | 
			
		||||
#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef GL_HALF_FLOAT_OES
 | 
			
		||||
#define GL_HALF_FLOAT_OES 0x8D61
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
_cogl_driver_pixel_format_from_gl_internal (CoglContext *context,
 | 
			
		||||
@@ -144,44 +138,21 @@ _cogl_driver_pixel_format_to_gl (CoglContext     *context,
 | 
			
		||||
      required_format = COGL_PIXEL_FORMAT_RGB_888;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
 | 
			
		||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
 | 
			
		||||
      if (_cogl_has_private_feature
 | 
			
		||||
          (context,  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102))
 | 
			
		||||
        {
 | 
			
		||||
          glintformat = GL_RGBA;
 | 
			
		||||
          glformat = GL_RGBA;
 | 
			
		||||
          gltype = GL_UNSIGNED_INT_2_10_10_10_REV_EXT;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 | 
			
		||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
 | 
			
		||||
      if (_cogl_has_private_feature
 | 
			
		||||
          (context,  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102))
 | 
			
		||||
        {
 | 
			
		||||
          glintformat = GL_RGBA;
 | 
			
		||||
          glformat = GL_RGBA;
 | 
			
		||||
          gltype = GL_UNSIGNED_INT_2_10_10_10_REV_EXT;
 | 
			
		||||
          required_format = COGL_PIXEL_FORMAT_RGBA_1010102;
 | 
			
		||||
          required_format |= (format & COGL_PREMULT_BIT);
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
      G_GNUC_FALLTHROUGH;
 | 
			
		||||
      /* Just one 32-bit ordering supported */
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 | 
			
		||||
      glintformat = GL_RGBA;
 | 
			
		||||
      glformat = GL_RGBA;
 | 
			
		||||
      gltype = GL_UNSIGNED_BYTE;
 | 
			
		||||
@@ -210,26 +181,6 @@ _cogl_driver_pixel_format_to_gl (CoglContext     *context,
 | 
			
		||||
      gltype = GL_UNSIGNED_SHORT_5_5_5_1;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
      g_warning ("Unhandled 16 bpc pixel format used");
 | 
			
		||||
 | 
			
		||||
      G_GNUC_FALLTHROUGH;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
      if (!_cogl_has_private_feature
 | 
			
		||||
          (context, COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT))
 | 
			
		||||
        g_warning ("Missing 16 bpc half float extension");
 | 
			
		||||
 | 
			
		||||
      glintformat = GL_RGBA;
 | 
			
		||||
      glformat = GL_RGBA;
 | 
			
		||||
      gltype = GL_HALF_FLOAT_OES;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_16:
 | 
			
		||||
      glintformat = GL_DEPTH_COMPONENT;
 | 
			
		||||
      glformat = GL_DEPTH_COMPONENT;
 | 
			
		||||
@@ -404,14 +355,6 @@ _cogl_driver_update_features (CoglContext *context,
 | 
			
		||||
    COGL_FLAGS_SET (private_features,
 | 
			
		||||
                    COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_BGRA8888, TRUE);
 | 
			
		||||
 | 
			
		||||
  if (_cogl_check_extension ("GL_EXT_texture_type_2_10_10_10_REV", gl_extensions))
 | 
			
		||||
    COGL_FLAGS_SET (private_features,
 | 
			
		||||
                    COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102, TRUE);
 | 
			
		||||
 | 
			
		||||
  if (_cogl_check_extension ("GL_OES_texture_half_float", gl_extensions))
 | 
			
		||||
    COGL_FLAGS_SET (private_features,
 | 
			
		||||
                    COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT, TRUE);
 | 
			
		||||
 | 
			
		||||
  if (_cogl_check_extension ("GL_EXT_unpack_subimage", gl_extensions))
 | 
			
		||||
    COGL_FLAGS_SET (private_features,
 | 
			
		||||
                    COGL_PRIVATE_FEATURE_UNPACK_SUBIMAGE, TRUE);
 | 
			
		||||
 
 | 
			
		||||
@@ -439,75 +439,6 @@ _cogl_texture_driver_size_supported (CoglContext *ctx,
 | 
			
		||||
  return width <= max_size && height <= max_size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
_cogl_texture_driver_upload_supported (CoglContext *ctx,
 | 
			
		||||
                                       CoglPixelFormat format)
 | 
			
		||||
{
 | 
			
		||||
  switch (format)
 | 
			
		||||
    {
 | 
			
		||||
    case COGL_PIXEL_FORMAT_A_8:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_G_8:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RG_88:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGB_888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGR_888:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 | 
			
		||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
 | 
			
		||||
      if (_cogl_has_private_feature
 | 
			
		||||
          (ctx,  COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_RGBA1010102))
 | 
			
		||||
        return TRUE;
 | 
			
		||||
      else
 | 
			
		||||
        return FALSE;
 | 
			
		||||
#else
 | 
			
		||||
      return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_8888:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_8888_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGB_565:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_4444:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_4444_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_5551:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_5551_PRE:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_BGRA_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ARGB_FP_16161616_PRE:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ABGR_FP_16161616_PRE:
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_RGBA_FP_16161616_PRE:
 | 
			
		||||
      if (_cogl_has_private_feature
 | 
			
		||||
          (ctx, COGL_PRIVATE_FEATURE_TEXTURE_FORMAT_HALF_FLOAT))
 | 
			
		||||
        return TRUE;
 | 
			
		||||
      else
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_16:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_32:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_ANY:
 | 
			
		||||
    case COGL_PIXEL_FORMAT_YUV:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_assert_not_reached ();
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CoglPixelFormat
 | 
			
		||||
_cogl_texture_driver_find_best_gl_get_data_format
 | 
			
		||||
                                            (CoglContext *context,
 | 
			
		||||
@@ -532,6 +463,5 @@ _cogl_texture_driver_gles =
 | 
			
		||||
    _cogl_texture_driver_prep_gl_for_pixels_download,
 | 
			
		||||
    _cogl_texture_driver_gl_get_tex_image,
 | 
			
		||||
    _cogl_texture_driver_size_supported,
 | 
			
		||||
    _cogl_texture_driver_upload_supported,
 | 
			
		||||
    _cogl_texture_driver_find_best_gl_get_data_format
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,7 @@ COGL_WINSYS_FEATURE_BEGIN (255, 255,
 | 
			
		||||
                           "SGI\0",
 | 
			
		||||
                           "swap_control\0",
 | 
			
		||||
                           0,
 | 
			
		||||
                           0)
 | 
			
		||||
                           COGL_WINSYS_FEATURE_SWAP_THROTTLE)
 | 
			
		||||
COGL_WINSYS_FEATURE_FUNCTION (int, glXSwapInterval,
 | 
			
		||||
                              (int interval))
 | 
			
		||||
COGL_WINSYS_FEATURE_END ()
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,7 @@
 | 
			
		||||
 | 
			
		||||
        For a X11 grab to be taken into account under Wayland, the client must
 | 
			
		||||
        also either send a specific X11 ClientMessage to the root window or be
 | 
			
		||||
        among the applications allowed in key “xwayland-grab-access-rules”.
 | 
			
		||||
        among the applications white-listed in key “xwayland-grab-access-rules”.
 | 
			
		||||
      </description>
 | 
			
		||||
    </key>
 | 
			
		||||
 | 
			
		||||
@@ -91,9 +91,8 @@
 | 
			
		||||
 | 
			
		||||
        Wildcards “*” and jokers “?” in the values are supported.
 | 
			
		||||
 | 
			
		||||
        Values starting with “!” are denied, which has precedence over
 | 
			
		||||
        the list of values allowed, to revoke applications from the default
 | 
			
		||||
	system list.
 | 
			
		||||
        Values starting with “!” are blacklisted, which has precedence over
 | 
			
		||||
        the whitelist, to revoke applications from the default system list.
 | 
			
		||||
 | 
			
		||||
        The default system list includes the following applications:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								meson.build
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								meson.build
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
project('mutter', 'c',
 | 
			
		||||
  version: '3.37.90',
 | 
			
		||||
  meson_version: '>= 0.51.0',
 | 
			
		||||
  version: '3.37.3',
 | 
			
		||||
  meson_version: '>= 0.50.0',
 | 
			
		||||
  license: 'GPLv2+'
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +24,7 @@ uprof_req = '>= 0.3'
 | 
			
		||||
pango_req = '>= 1.2.0'
 | 
			
		||||
cairo_req = '>= 1.10.0'
 | 
			
		||||
pangocairo_req = '>= 1.20'
 | 
			
		||||
gsettings_desktop_schemas_req = '>= 3.37.2'
 | 
			
		||||
gsettings_desktop_schemas_req = '>= 3.33.0'
 | 
			
		||||
json_glib_req = '>= 0.12.0'
 | 
			
		||||
upower_glib_req = '>= 0.99.0'
 | 
			
		||||
xcomposite_req = '>= 0.4'
 | 
			
		||||
@@ -42,7 +42,7 @@ udev_req = '>= 228'
 | 
			
		||||
gudev_req = '>= 232'
 | 
			
		||||
 | 
			
		||||
# wayland version requirements
 | 
			
		||||
wayland_server_req = '>= 1.18'
 | 
			
		||||
wayland_server_req = '>= 1.13.0'
 | 
			
		||||
wayland_protocols_req = '>= 1.19'
 | 
			
		||||
 | 
			
		||||
# native backend version requirements
 | 
			
		||||
@@ -53,7 +53,7 @@ gbm_req = '>= 10.3'
 | 
			
		||||
libpipewire_req = '>= 0.3.0'
 | 
			
		||||
 | 
			
		||||
# profiler requirements
 | 
			
		||||
sysprof_req = '>= 3.37.2'
 | 
			
		||||
sysprof_req = '>= 3.35.2'
 | 
			
		||||
 | 
			
		||||
gnome = import('gnome')
 | 
			
		||||
pkg = import('pkgconfig')
 | 
			
		||||
@@ -279,20 +279,7 @@ endif
 | 
			
		||||
 | 
			
		||||
have_profiler = get_option('profiler')
 | 
			
		||||
if have_profiler
 | 
			
		||||
  # libsysprof-capture support
 | 
			
		||||
  sysprof_dep = dependency('sysprof-capture-4',
 | 
			
		||||
    required: true,
 | 
			
		||||
    default_options: [
 | 
			
		||||
      'enable_examples=false',
 | 
			
		||||
      'enable_gtk=false',
 | 
			
		||||
      'enable_tests=false',
 | 
			
		||||
      'enable_tools=false',
 | 
			
		||||
      'libsysprof=false',
 | 
			
		||||
      'with_sysprofd=none',
 | 
			
		||||
      'help=false',
 | 
			
		||||
    ],
 | 
			
		||||
    fallback: ['sysprof', 'libsysprof_capture_dep'],
 | 
			
		||||
  )
 | 
			
		||||
  sysprof_dep = dependency('sysprof-capture-3', version: sysprof_req)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
required_functions = [
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										172
									
								
								po/ca.po
									
									
									
									
									
								
							
							
						
						
									
										172
									
								
								po/ca.po
									
									
									
									
									
								
							@@ -12,7 +12,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity 2.24\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2020-05-26 13:44+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2019-08-06 00:49+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-06-17 10:25+0200\n"
 | 
			
		||||
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
 | 
			
		||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
 | 
			
		||||
@@ -261,16 +261,16 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:8
 | 
			
		||||
msgid ""
 | 
			
		||||
"This key will initiate the “overlay”, which is a combination window overview"
 | 
			
		||||
" and application launching system. The default is intended to be the "
 | 
			
		||||
"“Windows key” on PC hardware. It’s expected that this binding either the "
 | 
			
		||||
"default or set to the empty string."
 | 
			
		||||
"This key will initiate the “overlay”, which is a combination window overview "
 | 
			
		||||
"and application launching system. The default is intended to be the “Windows "
 | 
			
		||||
"key” on PC hardware. It’s expected that this binding either the default or "
 | 
			
		||||
"set to the empty string."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Aquesta tecla iniciarà l'«overlay» (superposador), el qual és una combinació"
 | 
			
		||||
" de visualització de finestres i sistema de llançament d'aplicacions. El "
 | 
			
		||||
"Aquesta tecla iniciarà l'«overlay» (superposador), el qual és una combinació "
 | 
			
		||||
"de visualització de finestres i sistema de llançament d'aplicacions. El "
 | 
			
		||||
"valor predeterminat és la «tecla Windows» en maquinari basat en ordinadors "
 | 
			
		||||
"PC. El valor d'aquesta vinculació s'espera que sigui el predeterminat o text"
 | 
			
		||||
" en blanc."
 | 
			
		||||
"PC. El valor d'aquesta vinculació s'espera que sigui el predeterminat o text "
 | 
			
		||||
"en blanc."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:20
 | 
			
		||||
msgid "Attach modal dialogs"
 | 
			
		||||
@@ -282,9 +282,9 @@ msgid ""
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with "
 | 
			
		||||
"the parent window."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Quan sigui «true» (cert), en lloc de tenir barres de títol independents, els"
 | 
			
		||||
" diàlegs modals apareixeran adjuntats a la barra de títol de la finestra "
 | 
			
		||||
"mare i es mouran juntament amb aquesta."
 | 
			
		||||
"Quan sigui «true» (cert), en lloc de tenir barres de títol independents, els "
 | 
			
		||||
"diàlegs modals apareixeran adjuntats a la barra de títol de la finestra mare "
 | 
			
		||||
"i es mouran juntament amb aquesta."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:30
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
@@ -299,9 +299,9 @@ msgid ""
 | 
			
		||||
"area. Dropping windows on the top screen edge maximizes them completely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Si s'habilita, es maximitzaran les finestres verticalment i es "
 | 
			
		||||
"redimensionaran horitzontalment per cobrir la meitat de l'àrea disponible en"
 | 
			
		||||
" deixar-les anar a les vores verticals de la pantalla. Si es deixen anar a "
 | 
			
		||||
"la vora superior de la pantalla es maximitzaran completament."
 | 
			
		||||
"redimensionaran horitzontalment per cobrir la meitat de l'àrea disponible en "
 | 
			
		||||
"deixar-les anar a les vores verticals de la pantalla. Si es deixen anar a la "
 | 
			
		||||
"vora superior de la pantalla es maximitzaran completament."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:40
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
@@ -310,8 +310,8 @@ msgstr "Els espais de treball es gestionen dinàmicament"
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:41
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspaces are managed dynamically or whether there’s a "
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in "
 | 
			
		||||
"org.gnome.desktop.wm.preferences)."
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org."
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Determina si els espais de treball es gestionen dinàmicament o hi ha un "
 | 
			
		||||
"nombre determinat d'espais de treball (determinat per la clau «num-"
 | 
			
		||||
@@ -348,8 +348,8 @@ msgstr "Retarda el canvi del focus fins que s'aturi el punter"
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:69
 | 
			
		||||
msgid ""
 | 
			
		||||
"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
 | 
			
		||||
"focus will not be changed immediately when entering a window, but only after"
 | 
			
		||||
" the pointer stops moving."
 | 
			
		||||
"focus will not be changed immediately when entering a window, but only after "
 | 
			
		||||
"the pointer stops moving."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Si és «true» (cert), i el mode del focus és «sloppy» o «mouse», no es "
 | 
			
		||||
"canviarà el focus immediatament quan s'entri a una finestra, només es "
 | 
			
		||||
@@ -365,8 +365,8 @@ msgid ""
 | 
			
		||||
"not enough, invisible borders will be added to meet this value."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"La quantitat total de contorn arrossegable. Si els contorns visibles del "
 | 
			
		||||
"tema no són suficients, s'afegiran contorns invisibles per aconseguir aquest"
 | 
			
		||||
" valor."
 | 
			
		||||
"tema no són suficients, s'afegiran contorns invisibles per aconseguir aquest "
 | 
			
		||||
"valor."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:89
 | 
			
		||||
msgid "Auto maximize nearly monitor sized windows"
 | 
			
		||||
@@ -399,7 +399,6 @@ msgid "Enable experimental features"
 | 
			
		||||
msgstr "Habilita les funcionalitats experimentals"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:108
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
"To enable experimental features, add the feature keyword to the list. "
 | 
			
		||||
"Whether the feature requires restarting the compositor depends on the given "
 | 
			
		||||
@@ -413,14 +412,6 @@ msgid ""
 | 
			
		||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
 | 
			
		||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Per habilitar les característiques experimentals afegiu la paraula clau de "
 | 
			
		||||
"la característica a la llista. Si la característica requereix reiniciar el "
 | 
			
		||||
"compositor depèn de la característica donada. Qualsevol característica "
 | 
			
		||||
"experimental no es requereix per estar disponible o configurable. No espereu"
 | 
			
		||||
" afegir res en aquest ajustament per ser una prova futura. Actualment les "
 | 
			
		||||
"paraules clau possibles • • “inici del monitor d'escala” framebuffer — fa "
 | 
			
		||||
"que el «mutter-start» estigui disponible per defecte als monitors lògics en "
 | 
			
		||||
"un espai de reinici de píxels lògic mentre que cal «ICE»"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:134
 | 
			
		||||
msgid "Modifier to use to locate the pointer"
 | 
			
		||||
@@ -430,32 +421,19 @@ msgstr "Modificar a usar per localitzar el punter"
 | 
			
		||||
msgid "This key will initiate the “locate pointer” action."
 | 
			
		||||
msgstr "Aquesta clau inicialitzarà l'acció «locate pointer»."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:142
 | 
			
		||||
msgid "Timeout for check-alive ping"
 | 
			
		||||
msgstr "Temps d'espera per a la comprovació «ping alive»"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:143
 | 
			
		||||
msgid ""
 | 
			
		||||
"Number of milliseconds a client has to respond to a ping request in order to"
 | 
			
		||||
" not be detected as frozen. Using 0 will disable the alive check completely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Nombre de mil·lisegons en què un client ha de respondre a una sol·licitud de"
 | 
			
		||||
" «ping» per no ser detectat com a congelat. L'ús de 0 inhabilitarà "
 | 
			
		||||
"completament la comprovació."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:165
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:155
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr "Selecció de finestra entre les emergents d'una pestanya"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:170
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:160
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Cancel·lació de les finestres emergents a les pestanyes"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:175
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:165
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Canvia configuracions de monitor"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:180
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:170
 | 
			
		||||
msgid "Rotates the built-in monitor configuration"
 | 
			
		||||
msgstr "Gira la configuració del monitor integrada"
 | 
			
		||||
 | 
			
		||||
@@ -513,12 +491,9 @@ msgstr "Torna a habilitar les dreceres"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
 | 
			
		||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Permetre la captura amb Xwayland per bloquejar el focus del teclat amb "
 | 
			
		||||
"Xwayland"
 | 
			
		||||
msgstr "Permetre la captura amb Xwayland per bloquejar el focus del teclat amb Xwayland"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
 | 
			
		||||
"with a grab when running in Xwayland. This option is to support X11 clients "
 | 
			
		||||
@@ -530,25 +505,16 @@ msgid ""
 | 
			
		||||
"specific X11 ClientMessage to the root window or be among the applications "
 | 
			
		||||
"white-listed in key “xwayland-grab-access-rules”."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Permet que tots els esdeveniments de teclat s'encaminin a les finestres X11 "
 | 
			
		||||
"«sobredirigir redirecció» amb una captura en executar-se a Xwayland. Aquesta"
 | 
			
		||||
" opció és per donar suport als clients X11 que mapan una finestra «override "
 | 
			
		||||
"redirect» (que no rep el focus del teclat) i emeten un teclat per forçar "
 | 
			
		||||
"tots els esdeveniments del teclat a aquesta finestra. Aquesta opció "
 | 
			
		||||
"s'utilitza rarament i no té cap efecte en les finestres regulars de "
 | 
			
		||||
"l'enviament de X11 que poden rebre el focus del teclat segons el client "
 | 
			
		||||
"arrel"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
 | 
			
		||||
msgid "Xwayland applications allowed to issue keyboard grabs"
 | 
			
		||||
msgstr "Les aplicacions Xwayland poden capturar el teclat"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
"List the resource names or resource class of X11 windows either allowed or "
 | 
			
		||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or"
 | 
			
		||||
" resource class of a given X11 window can be obtained using the command "
 | 
			
		||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
 | 
			
		||||
"resource class of a given X11 window can be obtained using the command "
 | 
			
		||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
 | 
			
		||||
"Values starting with “!” are blacklisted, which has precedence over the "
 | 
			
		||||
"whitelist, to revoke applications from the default system list. The default "
 | 
			
		||||
@@ -557,52 +523,46 @@ msgid ""
 | 
			
		||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
 | 
			
		||||
"shortcuts”."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Llista els noms dels recursos o la classe de recursos de les finestres X11 "
 | 
			
		||||
"ja sigui permet o no permet emetre captures de teclat X11 sota Xwayland. El "
 | 
			
		||||
"nom dels recursos o la classe dels recursos d'una finestra X11 donada es pot"
 | 
			
		||||
" obtenir usant l'ordre «xprop WMCLASS». Els usuaris de les targetes "
 | 
			
		||||
"salvatges «*» i els bromistes «?» als valors que comencen amb «EFABD» tenen "
 | 
			
		||||
"prioritat sobre la llista blancaESS les aplicacions de dreceres del sistema "
 | 
			
		||||
"per defecte."
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: This string refers to a button that switches between
 | 
			
		||||
#. * different modes.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2631
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2531
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Mode de commutació (grup %d)"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
 | 
			
		||||
#. * mapping through the available outputs.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2654
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2554
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Commuta el monitor"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:2656
 | 
			
		||||
#: src/backends/meta-input-settings.c:2556
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Mostra l'ajuda en pantalla"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:226
 | 
			
		||||
#: src/backends/meta-monitor.c:223
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Pantalla integrada"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:255
 | 
			
		||||
#: src/backends/meta-monitor.c:252
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Desconeguda"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:257
 | 
			
		||||
#: src/backends/meta-monitor.c:254
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Pantalla desconeguda"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:265
 | 
			
		||||
#: src/backends/meta-monitor.c:262
 | 
			
		||||
#, c-format
 | 
			
		||||
msgctxt ""
 | 
			
		||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell "
 | 
			
		||||
"15\"'"
 | 
			
		||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:273
 | 
			
		||||
#: src/backends/meta-monitor.c:270
 | 
			
		||||
#, c-format
 | 
			
		||||
msgctxt ""
 | 
			
		||||
"This is a monitor vendor name followed by product/model name where size in "
 | 
			
		||||
@@ -611,13 +571,13 @@ msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this string will appear in Sysprof
 | 
			
		||||
#: src/backends/meta-profiler.c:79
 | 
			
		||||
#: src/backends/meta-profiler.c:82
 | 
			
		||||
msgid "Compositor"
 | 
			
		||||
msgstr "Compositor"
 | 
			
		||||
 | 
			
		||||
#. This probably means that a non-WM compositor like xcompmgr is running;
 | 
			
		||||
#. * we have no way to get it to exit
 | 
			
		||||
#: src/compositor/compositor.c:545
 | 
			
		||||
#: src/compositor/compositor.c:510
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
@@ -629,52 +589,52 @@ msgstr ""
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Esdeveniment de campana"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:190
 | 
			
		||||
#: src/core/main.c:185
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Inhabilita la connexió al gestor de sessions"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:196
 | 
			
		||||
#: src/core/main.c:191
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Reemplaça el gestor de finestres en execució"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:202
 | 
			
		||||
#: src/core/main.c:197
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especifica l'ID de gestió de sessió"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:207
 | 
			
		||||
#: src/core/main.c:202
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Visualització X per usar"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:213
 | 
			
		||||
#: src/core/main.c:208
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicialitza la sessió des del fitxer desat"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:219
 | 
			
		||||
#: src/core/main.c:214
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Fes que les crides a l'X siguin síncrones"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:226
 | 
			
		||||
#: src/core/main.c:221
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Funciona com a compositor de Wayland"
 | 
			
		||||
 | 
			
		||||
# Notes:
 | 
			
		||||
# Afegeix una nota
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
# Camins:
 | 
			
		||||
# ../src/core/main.c:223
 | 
			
		||||
#: src/core/main.c:232
 | 
			
		||||
#: src/core/main.c:227
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Funciona com a compositor imbricat"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:238
 | 
			
		||||
#: src/core/main.c:233
 | 
			
		||||
msgid "Run wayland compositor without starting Xwayland"
 | 
			
		||||
msgstr "Executa el compositor wayland sense iniciar Xwayland"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:246
 | 
			
		||||
#: src/core/main.c:241
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Funciona com a servidor de pantalla completa, en comptes d'imbricat"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:252
 | 
			
		||||
#: src/core/main.c:247
 | 
			
		||||
msgid "Run with X11 backend"
 | 
			
		||||
msgstr "Executa amb un rerefons X11"
 | 
			
		||||
 | 
			
		||||
@@ -710,7 +670,8 @@ msgid ""
 | 
			
		||||
"mutter %s\n"
 | 
			
		||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
 | 
			
		||||
"This is free software; see the source for copying conditions.\n"
 | 
			
		||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
 | 
			
		||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
 | 
			
		||||
"PARTICULAR PURPOSE.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Mutter %s\n"
 | 
			
		||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., i d'altres\n"
 | 
			
		||||
@@ -727,45 +688,45 @@ msgstr "Escriu versió"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Connector del Mutter a utilitzar"
 | 
			
		||||
 | 
			
		||||
#: src/core/prefs.c:1911
 | 
			
		||||
#: src/core/prefs.c:1849
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espai de treball %d"
 | 
			
		||||
 | 
			
		||||
#: src/core/util.c:119
 | 
			
		||||
#: src/core/util.c:121
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter es va compilar sense compatibilitat per al mode detallat\n"
 | 
			
		||||
 | 
			
		||||
#: src/wayland/meta-wayland-tablet-pad.c:568
 | 
			
		||||
#: src/wayland/meta-wayland-tablet-pad.c:567
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch: Mode %d"
 | 
			
		||||
msgstr "Mode de commutació: mode %d"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:676
 | 
			
		||||
#: src/x11/meta-x11-display.c:671
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display “%s” already has a window manager; try using the --replace option to"
 | 
			
		||||
" replace the current window manager."
 | 
			
		||||
"Display “%s” already has a window manager; try using the --replace option to "
 | 
			
		||||
"replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"La pantalla «%s» ja té un gestor de finestres; proveu l'opció --replace per "
 | 
			
		||||
"reemplaçar el gestor de finestres actual."
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:1089
 | 
			
		||||
#: src/x11/meta-x11-display.c:1032
 | 
			
		||||
msgid "Failed to initialize GDK\n"
 | 
			
		||||
msgstr "S'ha produït un error en inicialitzar GDK\n"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:1113
 | 
			
		||||
#: src/x11/meta-x11-display.c:1056
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display “%s”\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"S'ha produït un error en obrir la pantalla del sistema de finestres X «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:1196
 | 
			
		||||
#: src/x11/meta-x11-display.c:1140
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "El monitor %d en la pantalla «%s»' no és vàlida\n"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-selection-input-stream.c:460
 | 
			
		||||
#: src/x11/meta-x11-selection-input-stream.c:445
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Format %s not supported"
 | 
			
		||||
msgstr "El format %s no és compatible"
 | 
			
		||||
@@ -778,7 +739,8 @@ msgstr ""
 | 
			
		||||
"Aquestes finestres no implementen «desa la configuració actual» i s'hauran "
 | 
			
		||||
"de reiniciar manualment la pròxima vegada que entreu."
 | 
			
		||||
 | 
			
		||||
#: src/x11/window-props.c:548
 | 
			
		||||
#: src/x11/window-props.c:569
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (a %s)"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								po/fr.po
									
									
									
									
									
								
							@@ -20,8 +20,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2020-08-04 08:31+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2020-08-10 12:54+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2020-03-01 13:19+0100\n"
 | 
			
		||||
"Last-Translator: Guillaume Bernard <associations@guillaume-bernard.fr>\n"
 | 
			
		||||
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
 | 
			
		||||
"Language: fr\n"
 | 
			
		||||
@@ -536,7 +536,7 @@ msgid ""
 | 
			
		||||
"which can receive keyboard focus under normal circumstances. For a X11 grab "
 | 
			
		||||
"to be taken into account under Wayland, the client must also either send a "
 | 
			
		||||
"specific X11 ClientMessage to the root window or be among the applications "
 | 
			
		||||
"allowed in key “xwayland-grab-access-rules”."
 | 
			
		||||
"white-listed in key “xwayland-grab-access-rules”."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Permettre à tous les évènements clavier d’être routés vers les fenêtres X11 "
 | 
			
		||||
"« override redirect » avec capture lors du fonctionnement avec Xwayland. "
 | 
			
		||||
@@ -547,7 +547,7 @@ msgstr ""
 | 
			
		||||
"fenêtres X11 normales qui peuvent recevoir le focus du clavier dans des "
 | 
			
		||||
"circonstances normales. Pour qu’une capture X11 soit prise en compte sous "
 | 
			
		||||
"Wayland, le client doit aussi soit envoyer un ClientMessage X11 spécifique à "
 | 
			
		||||
"la fenêtre racine, soit figurer parmi la liste des applications autorisées dans "
 | 
			
		||||
"la fenêtre racine, soit figurer parmi la liste blanche des applications dans "
 | 
			
		||||
"la clé « xwayland-grab-access-rules »."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
 | 
			
		||||
@@ -560,9 +560,9 @@ msgid ""
 | 
			
		||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
 | 
			
		||||
"resource class of a given X11 window can be obtained using the command "
 | 
			
		||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
 | 
			
		||||
"Values starting with “!” are denied, which has precedence over the list of "
 | 
			
		||||
"values allowed, to revoke applications from the default system list. The "
 | 
			
		||||
"default system list includes the following applications: "
 | 
			
		||||
"Values starting with “!” are blacklisted, which has precedence over the "
 | 
			
		||||
"whitelist, to revoke applications from the default system list. The default "
 | 
			
		||||
"system list includes the following applications: "
 | 
			
		||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
 | 
			
		||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
 | 
			
		||||
"shortcuts”."
 | 
			
		||||
@@ -571,8 +571,8 @@ msgstr ""
 | 
			
		||||
"autorisées ou non à émettre des captures clavier sous Xwayland. Le nom ou la "
 | 
			
		||||
"classe de ressource d’une fenêtre X11 donnée peut être obtenue à l’aide de "
 | 
			
		||||
"la commande « xprop WM_CLASS ». Les caractères joker « * » et « ? » sont "
 | 
			
		||||
"acceptées dans les valeurs. Les valeurs commençant par « ! » sont bloquées, "
 | 
			
		||||
"en priorité par rapport à la liste des applications autorisées, pour révoquer les applications "
 | 
			
		||||
"acceptées dans les valeurs. Les valeurs commençant par « ! » sont en liste "
 | 
			
		||||
"noire, qui a priorité sur la liste blanche, pour révoquer les applications "
 | 
			
		||||
"de la liste système par défaut. Celle-ci contient les applications "
 | 
			
		||||
"suivantes : « @XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@ ». Les utilisateurs "
 | 
			
		||||
"peuvent casser une capture existante en utilisant le raccourci clavier "
 | 
			
		||||
@@ -581,7 +581,7 @@ msgstr ""
 | 
			
		||||
#. TRANSLATORS: This string refers to a button that switches between
 | 
			
		||||
#. * different modes.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2698
 | 
			
		||||
#: src/backends/meta-input-settings.c:2567
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Changement de mode (groupe %d)"
 | 
			
		||||
@@ -589,34 +589,34 @@ msgstr "Changement de mode (groupe %d)"
 | 
			
		||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
 | 
			
		||||
#. * mapping through the available outputs.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2721
 | 
			
		||||
#: src/backends/meta-input-settings.c:2590
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Changer de moniteur"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:2723
 | 
			
		||||
#: src/backends/meta-input-settings.c:2592
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Afficher l’aide à l’écran"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:235
 | 
			
		||||
#: src/backends/meta-monitor.c:223
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Affichage intégré"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:264
 | 
			
		||||
#: src/backends/meta-monitor.c:252
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Inconnu"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:266
 | 
			
		||||
#: src/backends/meta-monitor.c:254
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Affichage inconnu"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:274
 | 
			
		||||
#: src/backends/meta-monitor.c:262
 | 
			
		||||
#, c-format
 | 
			
		||||
msgctxt ""
 | 
			
		||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:282
 | 
			
		||||
#: src/backends/meta-monitor.c:270
 | 
			
		||||
#, c-format
 | 
			
		||||
msgctxt ""
 | 
			
		||||
"This is a monitor vendor name followed by product/model name where size in "
 | 
			
		||||
@@ -631,7 +631,7 @@ msgstr "Compositeur"
 | 
			
		||||
 | 
			
		||||
#. This probably means that a non-WM compositor like xcompmgr is running;
 | 
			
		||||
#. * we have no way to get it to exit
 | 
			
		||||
#: src/compositor/compositor.c:516
 | 
			
		||||
#: src/compositor/compositor.c:533
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
@@ -742,7 +742,7 @@ msgstr "Greffon de Mutter à utiliser"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espace de travail %d"
 | 
			
		||||
 | 
			
		||||
#: src/core/util.c:119
 | 
			
		||||
#: src/core/util.c:122
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n"
 | 
			
		||||
 | 
			
		||||
@@ -788,7 +788,7 @@ msgstr ""
 | 
			
		||||
"configuration actuelle » et devront être redémarrées manuellement à la "
 | 
			
		||||
"prochaine connexion."
 | 
			
		||||
 | 
			
		||||
#: src/x11/window-props.c:548
 | 
			
		||||
#: src/x11/window-props.c:569
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (sur %s)"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										184
									
								
								po/uk.po
									
									
									
									
									
								
							
							
						
						
									
										184
									
								
								po/uk.po
									
									
									
									
									
								
							@@ -7,8 +7,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2020-08-04 08:31+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2020-08-08 18:00+0300\n"
 | 
			
		||||
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2020-03-03 19:30+0200\n"
 | 
			
		||||
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 | 
			
		||||
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
 | 
			
		||||
"Language: uk\n"
 | 
			
		||||
@@ -17,7 +17,7 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<"
 | 
			
		||||
"=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 | 
			
		||||
"X-Generator: Lokalize 20.07.70\n"
 | 
			
		||||
"X-Generator: Lokalize 20.03.70\n"
 | 
			
		||||
"X-Project-Style: gnome\n"
 | 
			
		||||
 | 
			
		||||
#: data/50-mutter-navigation.xml:6
 | 
			
		||||
@@ -255,6 +255,11 @@ msgstr ""
 | 
			
		||||
"Модифікатор, що використовується для розширених дій віконного менеджера"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:8
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "This key will initiate the \"overlay\", which is a combination window "
 | 
			
		||||
#| "overview and application launching system. The default is intended to be "
 | 
			
		||||
#| "the \"Windows key\" on PC hardware. It's expected that this binding "
 | 
			
		||||
#| "either the default or set to the empty string."
 | 
			
		||||
msgid ""
 | 
			
		||||
"This key will initiate the “overlay”, which is a combination window overview "
 | 
			
		||||
"and application launching system. The default is intended to be the “Windows "
 | 
			
		||||
@@ -298,6 +303,10 @@ msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr "Робочі простори організовуються динамічно"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:41
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Determines whether workspaces are managed dynamically or whether there's "
 | 
			
		||||
#| "a static number of workspaces (determined by the num-workspaces key in "
 | 
			
		||||
#| "org.gnome.desktop.wm.preferences)."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspaces are managed dynamically or whether there’s a "
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org."
 | 
			
		||||
@@ -336,6 +345,10 @@ msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
msgstr "Затримувати зміни фокусу, поки вказівник не перестане рухатись"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:69
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
 | 
			
		||||
#| "the focus will not be changed immediately when entering a window, but "
 | 
			
		||||
#| "only after the pointer stops moving."
 | 
			
		||||
msgid ""
 | 
			
		||||
"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
 | 
			
		||||
"focus will not be changed immediately when entering a window, but only after "
 | 
			
		||||
@@ -350,6 +363,9 @@ msgid "Draggable border width"
 | 
			
		||||
msgstr "Перетяжна ширина меж"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:80
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "The amount of total draggable borders. If the theme's visible borders are "
 | 
			
		||||
#| "not enough, invisible borders will be added to meet this value."
 | 
			
		||||
msgid ""
 | 
			
		||||
"The amount of total draggable borders. If the theme’s visible borders are "
 | 
			
		||||
"not enough, invisible borders will be added to meet this value."
 | 
			
		||||
@@ -397,21 +413,21 @@ msgid ""
 | 
			
		||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
 | 
			
		||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Щоб увімкнути експериментальну можливість, додайте до списку ключове слово "
 | 
			
		||||
"можливості. Те, чи потребуватиме вмикання можливості перезапуску "
 | 
			
		||||
"композитора, залежить від типу можливості. Експериментальні можливості не "
 | 
			
		||||
"обов'язково завжди доступні чи придатні до налаштовування. Не слід "
 | 
			
		||||
"очікувати, що у майбутніх версіях обов'язково буде збережено якусь із "
 | 
			
		||||
"експериментальних можливостей. У поточній версії передбачено такі ключові "
 | 
			
		||||
"слова: • «scale-monitor-framebuffer» — наказує mutter типово розташовувати "
 | 
			
		||||
"логічні монітори у координатному просторі логічних пікселів, масштабуючи "
 | 
			
		||||
"буфери кадрів моніторів, замість вмісту вікон. Призначено для роботи із "
 | 
			
		||||
"моніторами із високою роздільною здатністю. Не потребує перезапуску "
 | 
			
		||||
"композитора. • «rt-scheduler» — наказати mutter надсилати до системи запит "
 | 
			
		||||
"щодо низькопріоритетного планування режиму реального часу. Для виконуваного "
 | 
			
		||||
"файла або запису користувача має бути встановлено CAP_SYS_NICE. Потребує "
 | 
			
		||||
"перезапуску композитора. • «autostart-xwayland» — лінива ініціалізація "
 | 
			
		||||
"Xwayland, якщо виявлено клієнти X11. Потребує перезапуску композитора."
 | 
			
		||||
"Щоб увімкнути експериментальну можливість, додайте до списку ключове слово"
 | 
			
		||||
" можливості. Те, чи потребуватиме вмикання можливості перезапуску"
 | 
			
		||||
" композитора, залежить від типу можливості. Експериментальні можливості не"
 | 
			
		||||
" обов'язково завжди доступні чи придатні до налаштовування. Не слід"
 | 
			
		||||
" очікувати, що у майбутніх версіях обов'язково буде збережено якусь із"
 | 
			
		||||
" експериментальних можливостей. У поточній версії передбачено такі ключові"
 | 
			
		||||
" слова: • «scale-monitor-framebuffer» — наказує mutter типово розташовувати"
 | 
			
		||||
" логічні монітори у координатному просторі логічних пікселів, масштабуючи"
 | 
			
		||||
" буфери кадрів моніторів, замість вмісту вікон. Призначено для роботи із"
 | 
			
		||||
" моніторами із високою роздільною здатністю. Не потребує перезапуску"
 | 
			
		||||
" композитора. • «rt-scheduler» — наказати mutter надсилати до системи запит"
 | 
			
		||||
" щодо низькопріоритетного планування режиму реального часу. Для виконуваного"
 | 
			
		||||
" файла або запису користувача має бути встановлено CAP_SYS_NICE. Потребує"
 | 
			
		||||
" перезапуску композитора. • «autostart-xwayland» — лінива ініціалізація"
 | 
			
		||||
" Xwayland, якщо виявлено клієнти X11. Потребує перезапуску композитора."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:134
 | 
			
		||||
msgid "Modifier to use to locate the pointer"
 | 
			
		||||
@@ -430,9 +446,9 @@ msgid ""
 | 
			
		||||
"Number of milliseconds a client has to respond to a ping request in order to "
 | 
			
		||||
"not be detected as frozen. Using 0 will disable the alive check completely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Проміжок часу у мілісекундах, протягом якого клієнт має відповісти на луна-"
 | 
			
		||||
"запит, щоб вважатися працездатним. Скористайтеся значенням 0, щоб повністю "
 | 
			
		||||
"вимкнути перевірку працездатності."
 | 
			
		||||
"Проміжок часу у мілісекундах, протягом якого клієнт має відповісти на"
 | 
			
		||||
" луна-запит, щоб вважатися працездатним. Скористайтеся значенням 0, щоб"
 | 
			
		||||
" повністю вимкнути перевірку працездатності."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:165
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
@@ -443,6 +459,7 @@ msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Скасувати контекстні вкладки"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.gschema.xml.in:175
 | 
			
		||||
#| msgid "Switch applications"
 | 
			
		||||
msgid "Switch monitor configurations"
 | 
			
		||||
msgstr "Перемкнути налаштування монітора"
 | 
			
		||||
 | 
			
		||||
@@ -508,16 +525,6 @@ msgstr ""
 | 
			
		||||
"Дозволити захопленням у X11 блокувати зміну фокусування клавіатури з Xwayland"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Allow all keyboard events to be routed to X11 “override redirect” windows "
 | 
			
		||||
#| "with a grab when running in Xwayland. This option is to support X11 "
 | 
			
		||||
#| "clients which map an “override redirect” window (which do not receive "
 | 
			
		||||
#| "keyboard focus) and issue a keyboard grab to force all keyboard events to "
 | 
			
		||||
#| "that window. This option is seldom used and has no effect on regular X11 "
 | 
			
		||||
#| "windows which can receive keyboard focus under normal circumstances. For "
 | 
			
		||||
#| "a X11 grab to be taken into account under Wayland, the client must also "
 | 
			
		||||
#| "either send a specific X11 ClientMessage to the root window or be among "
 | 
			
		||||
#| "the applications white-listed in key “xwayland-grab-access-rules”."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
 | 
			
		||||
"with a grab when running in Xwayland. This option is to support X11 clients "
 | 
			
		||||
@@ -527,20 +534,20 @@ msgid ""
 | 
			
		||||
"which can receive keyboard focus under normal circumstances. For a X11 grab "
 | 
			
		||||
"to be taken into account under Wayland, the client must also either send a "
 | 
			
		||||
"specific X11 ClientMessage to the root window or be among the applications "
 | 
			
		||||
"allowed in key “xwayland-grab-access-rules”."
 | 
			
		||||
"white-listed in key “xwayland-grab-access-rules”."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Дозволяє маршрутизацію усіх подій клавіатури до вікон X11 із "
 | 
			
		||||
"«перевизначенням переспрямовування», які захоплюють клавіатуру, коли їх "
 | 
			
		||||
"запущено у Xwayland. Цей параметр призначено для реалізації підтримки "
 | 
			
		||||
"клієнтів X11, які здійснюють відображення вікна із «перевизначенням "
 | 
			
		||||
"переспрямовування» (вікна, яке не отримує фокусування клавіатури) і видають "
 | 
			
		||||
"сигнал щодо захоплення клавіатури, щоб примусово переспрямувати усі події з "
 | 
			
		||||
"клавіатури у відповідне вікно. Використання цього параметра є рідкісним. "
 | 
			
		||||
"Воно не впливає на звичайні вікна X11, які можуть отримувати фокусування "
 | 
			
		||||
"клавіатури за звичних обставин. Щоб захоплення клавіатури X11 бралося до "
 | 
			
		||||
"уваги у Wayland, клієнтська програма також має або надіслати специфічне "
 | 
			
		||||
"ClientMessage X11 до кореневого вікна, або мати свій пункт у списку"
 | 
			
		||||
" дозволених програм ключа «xwayland-grab-access-rules»."
 | 
			
		||||
"Дозволяє маршрутизацію усіх подій клавіатури до вікон X11 із «перевизначенням"
 | 
			
		||||
" переспрямовування», які захоплюють клавіатуру, коли їх запущено у Xwayland."
 | 
			
		||||
" Цей параметр призначено для реалізації підтримки клієнтів X11, які"
 | 
			
		||||
" здійснюють відображення вікна із «перевизначенням переспрямовування» (вікна,"
 | 
			
		||||
" яке не отримує фокусування клавіатури) і видають сигнал щодо захоплення"
 | 
			
		||||
" клавіатури, щоб примусово переспрямувати усі події з клавіатури у відповідне"
 | 
			
		||||
" вікно. Використання цього параметра є рідкісним. Воно не впливає на звичайні"
 | 
			
		||||
" вікна X11, які можуть отримувати фокусування клавіатури за звичних обставин."
 | 
			
		||||
" Щоб захоплення клавіатури X11 бралося до уваги у Wayland, клієнтська"
 | 
			
		||||
" програма також має або надіслати специфічне ClientMessage X11 до кореневого"
 | 
			
		||||
" вікна, або мати свій пункт у «білому» списку ключа"
 | 
			
		||||
" «xwayland-grab-access-rules»."
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
 | 
			
		||||
msgid "Xwayland applications allowed to issue keyboard grabs"
 | 
			
		||||
@@ -548,46 +555,35 @@ msgstr ""
 | 
			
		||||
"Програми Xwayland, яким дозволено надсилати запит щодо захоплення клавіатури"
 | 
			
		||||
 | 
			
		||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "List the resource names or resource class of X11 windows either allowed "
 | 
			
		||||
#| "or not allowed to issue X11 keyboard grabs under Xwayland. The resource "
 | 
			
		||||
#| "name or resource class of a given X11 window can be obtained using the "
 | 
			
		||||
#| "command “xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are "
 | 
			
		||||
#| "supported. Values starting with “!” are blacklisted, which has precedence "
 | 
			
		||||
#| "over the whitelist, to revoke applications from the default system list. "
 | 
			
		||||
#| "The default system list includes the following applications: "
 | 
			
		||||
#| "“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab "
 | 
			
		||||
#| "by using the specific keyboard shortcut defined by the keybinding key "
 | 
			
		||||
#| "“restore-shortcuts”."
 | 
			
		||||
msgid ""
 | 
			
		||||
"List the resource names or resource class of X11 windows either allowed or "
 | 
			
		||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
 | 
			
		||||
"resource class of a given X11 window can be obtained using the command "
 | 
			
		||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
 | 
			
		||||
"Values starting with “!” are denied, which has precedence over the list of "
 | 
			
		||||
"values allowed, to revoke applications from the default system list. The "
 | 
			
		||||
"default system list includes the following applications: "
 | 
			
		||||
"Values starting with “!” are blacklisted, which has precedence over the "
 | 
			
		||||
"whitelist, to revoke applications from the default system list. The default "
 | 
			
		||||
"system list includes the following applications: "
 | 
			
		||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
 | 
			
		||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
 | 
			
		||||
"shortcuts”."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Список назв ресурсів або клас ресурсів вікон X11, яким дозволено або "
 | 
			
		||||
"заборонено видавати запити на захоплення фокусу клавіатури X11 у Xwayland. "
 | 
			
		||||
"Назву ресурсу або клас ресурсу певного вікна X11 можна визначити за "
 | 
			
		||||
"допомогою команди «xprop WM_CLASS». Передбачено підтримку символів-"
 | 
			
		||||
"замінників «*» і «?» у записах. Значення, які починатимуться з «!», буде "
 | 
			
		||||
"додано до списку заборонених, який матиме пріоритет над списком дозволених"
 | 
			
		||||
" значень, щоб "
 | 
			
		||||
"програми можна було вилучати із типового загальносистемного списку. Типовий "
 | 
			
		||||
"загальносистемний список містить записи таких програм: "
 | 
			
		||||
"«@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@». Користувачі можуть усувати наявне "
 | 
			
		||||
"захоплення фокуса за допомогою певного клавіатурного скорочення, яке "
 | 
			
		||||
"визначається ключем «restore-shortcuts»."
 | 
			
		||||
"Список назв ресурсів або клас ресурсів вікон X11, яким дозволено або"
 | 
			
		||||
" заборонено видавати запити на захоплення фокусу клавіатури X11 у Xwayland."
 | 
			
		||||
" Назву ресурсу або клас ресурсу певного вікна X11 можна визначити за"
 | 
			
		||||
" допомогою команди «xprop WM_CLASS». Передбачено підтримку"
 | 
			
		||||
" символів-замінників «*» і «?» у записах. Значення, які починатимуться з «!»,"
 | 
			
		||||
" буде додано до «чорного» списку, який матиме пріоритет над «білим» списком,"
 | 
			
		||||
" щоб програми можна було вилучати із типового загальносистемного списку."
 | 
			
		||||
" Типовий загальносистемний список містить записи таких програм:"
 | 
			
		||||
" «@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@». Користувачі можуть усувати наявне"
 | 
			
		||||
" захоплення фокуса за допомогою певного клавіатурного скорочення, яке"
 | 
			
		||||
" визначається ключем «restore-"
 | 
			
		||||
"shortcuts»."
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: This string refers to a button that switches between
 | 
			
		||||
#. * different modes.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2698
 | 
			
		||||
#: src/backends/meta-input-settings.c:2567
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Mode Switch (Group %d)"
 | 
			
		||||
msgstr "Перемкнути режим (група %d)"
 | 
			
		||||
@@ -595,35 +591,38 @@ msgstr "Перемкнути режим (група %d)"
 | 
			
		||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
 | 
			
		||||
#. * mapping through the available outputs.
 | 
			
		||||
#.
 | 
			
		||||
#: src/backends/meta-input-settings.c:2721
 | 
			
		||||
#: src/backends/meta-input-settings.c:2590
 | 
			
		||||
#| msgid "Switch system controls"
 | 
			
		||||
msgid "Switch monitor"
 | 
			
		||||
msgstr "Перемкнути монітор"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-input-settings.c:2723
 | 
			
		||||
#: src/backends/meta-input-settings.c:2592
 | 
			
		||||
msgid "Show on-screen help"
 | 
			
		||||
msgstr "Показати довідку на екрані"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:235
 | 
			
		||||
#: src/backends/meta-monitor.c:223
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Вбудований екран"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:264
 | 
			
		||||
#: src/backends/meta-monitor.c:252
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Невідомо"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:266
 | 
			
		||||
#: src/backends/meta-monitor.c:254
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Невідомий екран"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:274
 | 
			
		||||
#: src/backends/meta-monitor.c:262
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid "%s %s"
 | 
			
		||||
msgctxt ""
 | 
			
		||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
 | 
			
		||||
#: src/backends/meta-monitor.c:282
 | 
			
		||||
#: src/backends/meta-monitor.c:270
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid "%s %s"
 | 
			
		||||
msgctxt ""
 | 
			
		||||
"This is a monitor vendor name followed by product/model name where size in "
 | 
			
		||||
"inches could not be calculated, e.g. Dell U2414H"
 | 
			
		||||
@@ -632,13 +631,17 @@ msgstr "%s %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this string will appear in Sysprof
 | 
			
		||||
#: src/backends/meta-profiler.c:79
 | 
			
		||||
#| msgid "Compositing Manager"
 | 
			
		||||
msgid "Compositor"
 | 
			
		||||
msgstr "Композитор"
 | 
			
		||||
 | 
			
		||||
#. This probably means that a non-WM compositor like xcompmgr is running;
 | 
			
		||||
#. * we have no way to get it to exit
 | 
			
		||||
#: src/compositor/compositor.c:516
 | 
			
		||||
#: src/compositor/compositor.c:533
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Another compositing manager is already running on screen %i on display "
 | 
			
		||||
#| "\"%s\"."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display “%s”."
 | 
			
		||||
msgstr "Уже запущено інший композитний менеджер на екрані %i через показ «%s»."
 | 
			
		||||
@@ -676,6 +679,7 @@ msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "запустити як композитор wayland"
 | 
			
		||||
 | 
			
		||||
#: src/core/main.c:232
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Запустити як вкладений композитор"
 | 
			
		||||
 | 
			
		||||
@@ -718,6 +722,12 @@ msgstr "_Зачекати"
 | 
			
		||||
 | 
			
		||||
#: src/core/mutter.c:38
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "mutter %s\n"
 | 
			
		||||
#| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
 | 
			
		||||
#| "This is free software; see the source for copying conditions.\n"
 | 
			
		||||
#| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
 | 
			
		||||
#| "PARTICULAR PURPOSE.\n"
 | 
			
		||||
msgid ""
 | 
			
		||||
"mutter %s\n"
 | 
			
		||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
 | 
			
		||||
@@ -744,7 +754,7 @@ msgstr "Додатки Clutter для використання"
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Робочий простір %d"
 | 
			
		||||
 | 
			
		||||
#: src/core/util.c:119
 | 
			
		||||
#: src/core/util.c:122
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter зібрано без підтримки докладного режиму\n"
 | 
			
		||||
 | 
			
		||||
@@ -755,6 +765,9 @@ msgstr "Перемикання режимів: режим %d"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:676
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Display \"%s\" already has a window manager; try using the --replace "
 | 
			
		||||
#| "option to replace the current window manager."
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display “%s” already has a window manager; try using the --replace option to "
 | 
			
		||||
"replace the current window manager."
 | 
			
		||||
@@ -768,11 +781,13 @@ msgstr "Не вдалося ініціалізувати GDK\n"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:1113
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgid "Failed to open X Window System display “%s”\n"
 | 
			
		||||
msgstr "Не вдалось відкрити дисплей віконної системи X «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: src/x11/meta-x11-display.c:1196
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgid "Screen %d on display “%s” is invalid\n"
 | 
			
		||||
msgstr "Екран %d на дисплеї «%s» не правильний\n"
 | 
			
		||||
 | 
			
		||||
@@ -782,14 +797,17 @@ msgid "Format %s not supported"
 | 
			
		||||
msgstr "Підтримки формату %s не передбачено"
 | 
			
		||||
 | 
			
		||||
#: src/x11/session.c:1821
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "These windows do not support "save current setup" and will have "
 | 
			
		||||
#| "to be restarted manually next time you log in."
 | 
			
		||||
msgid ""
 | 
			
		||||
"These windows do not support “save current setup” and will have to be "
 | 
			
		||||
"restarted manually next time you log in."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ці вікна не підтримують «збереження поточних параметрів», і при наступному "
 | 
			
		||||
"входженні їх треба запустити власноруч."
 | 
			
		||||
"Ці вікна не підтримують «збереження поточних параметрів», і при "
 | 
			
		||||
"наступному входженні їх треба запустити власноруч."
 | 
			
		||||
 | 
			
		||||
#: src/x11/window-props.c:548
 | 
			
		||||
#: src/x11/window-props.c:569
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (на %s)"
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,6 @@ struct _MetaBackendClass
 | 
			
		||||
  MetaMonitorManager * (* create_monitor_manager) (MetaBackend *backend,
 | 
			
		||||
                                                   GError     **error);
 | 
			
		||||
  MetaCursorRenderer * (* create_cursor_renderer) (MetaBackend *backend);
 | 
			
		||||
  MetaCursorTracker * (* create_cursor_tracker) (MetaBackend *backend);
 | 
			
		||||
  MetaRenderer * (* create_renderer) (MetaBackend *backend,
 | 
			
		||||
                                      GError     **error);
 | 
			
		||||
  MetaInputSettings * (* create_input_settings) (MetaBackend *backend);
 | 
			
		||||
 
 | 
			
		||||
@@ -592,14 +592,6 @@ meta_backend_real_is_lid_closed (MetaBackend *backend)
 | 
			
		||||
  return priv->lid_is_closed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorTracker *
 | 
			
		||||
meta_backend_real_create_cursor_tracker (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  return g_object_new (META_TYPE_CURSOR_TRACKER,
 | 
			
		||||
                       "backend", backend,
 | 
			
		||||
                       NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_backend_is_lid_closed (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
@@ -753,7 +745,6 @@ meta_backend_class_init (MetaBackendClass *klass)
 | 
			
		||||
  klass->ungrab_device = meta_backend_real_ungrab_device;
 | 
			
		||||
  klass->select_stage_events = meta_backend_real_select_stage_events;
 | 
			
		||||
  klass->is_lid_closed = meta_backend_real_is_lid_closed;
 | 
			
		||||
  klass->create_cursor_tracker = meta_backend_real_create_cursor_tracker;
 | 
			
		||||
 | 
			
		||||
  signals[KEYMAP_CHANGED] =
 | 
			
		||||
    g_signal_new ("keymap-changed",
 | 
			
		||||
@@ -997,8 +988,7 @@ meta_backend_initable_init (GInitable     *initable,
 | 
			
		||||
  if (!priv->renderer)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  priv->cursor_tracker =
 | 
			
		||||
    META_BACKEND_GET_CLASS (backend)->create_cursor_tracker (backend);
 | 
			
		||||
  priv->cursor_tracker = g_object_new (META_TYPE_CURSOR_TRACKER, NULL);
 | 
			
		||||
 | 
			
		||||
  priv->dnd = g_object_new (META_TYPE_DND, NULL);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -58,8 +58,6 @@ struct _MetaCursorRendererPrivate
 | 
			
		||||
  float current_y;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *displayed_cursor;
 | 
			
		||||
  MetaCursorSprite *overlay_cursor;
 | 
			
		||||
 | 
			
		||||
  MetaOverlay *stage_overlay;
 | 
			
		||||
  gboolean handled_by_backend;
 | 
			
		||||
  gulong after_paint_handler_id;
 | 
			
		||||
@@ -125,16 +123,18 @@ align_cursor_position (MetaCursorRenderer *renderer,
 | 
			
		||||
  graphene_rect_offset (rect, view_layout.x, view_layout.y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer,
 | 
			
		||||
                                           MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
static void
 | 
			
		||||
queue_redraw (MetaCursorRenderer *renderer,
 | 
			
		||||
              MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
  ClutterActor *stage = meta_backend_get_stage (priv->backend);
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  graphene_rect_t rect = GRAPHENE_RECT_INIT_ZERO;
 | 
			
		||||
 | 
			
		||||
  g_set_object (&priv->overlay_cursor, cursor_sprite);
 | 
			
		||||
  /* During early initialization, we can have no stage */
 | 
			
		||||
  if (!stage)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    {
 | 
			
		||||
@@ -145,12 +145,11 @@ meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer,
 | 
			
		||||
  if (!priv->stage_overlay)
 | 
			
		||||
    priv->stage_overlay = meta_stage_create_cursor_overlay (META_STAGE (stage));
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
  if (cursor_sprite && !priv->handled_by_backend)
 | 
			
		||||
    texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  else
 | 
			
		||||
    texture = NULL;
 | 
			
		||||
 | 
			
		||||
  meta_overlay_set_visible (priv->stage_overlay, !priv->handled_by_backend);
 | 
			
		||||
  meta_stage_update_cursor_overlay (META_STAGE (stage), priv->stage_overlay,
 | 
			
		||||
                                    texture, &rect);
 | 
			
		||||
}
 | 
			
		||||
@@ -242,9 +241,6 @@ meta_cursor_renderer_finalize (GObject *object)
 | 
			
		||||
 | 
			
		||||
  g_clear_signal_handler (&priv->after_paint_handler_id, stage);
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&priv->displayed_cursor);
 | 
			
		||||
  g_clear_object (&priv->overlay_cursor);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_cursor_renderer_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -338,6 +334,7 @@ meta_cursor_renderer_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
  gboolean handled_by_backend;
 | 
			
		||||
  gboolean should_redraw = FALSE;
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_prepare_at (cursor_sprite,
 | 
			
		||||
@@ -348,9 +345,16 @@ meta_cursor_renderer_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
    META_CURSOR_RENDERER_GET_CLASS (renderer)->update_cursor (renderer,
 | 
			
		||||
                                                              cursor_sprite);
 | 
			
		||||
  if (handled_by_backend != priv->handled_by_backend)
 | 
			
		||||
    priv->handled_by_backend = handled_by_backend;
 | 
			
		||||
    {
 | 
			
		||||
      priv->handled_by_backend = handled_by_backend;
 | 
			
		||||
      should_redraw = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_update_stage_overlay (renderer, cursor_sprite);
 | 
			
		||||
  if (!handled_by_backend)
 | 
			
		||||
    should_redraw = TRUE;
 | 
			
		||||
 | 
			
		||||
  if (should_redraw)
 | 
			
		||||
    queue_redraw (renderer, cursor_sprite);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaCursorRenderer *
 | 
			
		||||
@@ -369,7 +373,7 @@ meta_cursor_renderer_set_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
 | 
			
		||||
  if (priv->displayed_cursor == cursor_sprite)
 | 
			
		||||
    return;
 | 
			
		||||
  g_set_object (&priv->displayed_cursor, cursor_sprite);
 | 
			
		||||
  priv->displayed_cursor = cursor_sprite;
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_update_cursor (renderer, cursor_sprite);
 | 
			
		||||
}
 | 
			
		||||
@@ -390,6 +394,8 @@ meta_cursor_renderer_set_position (MetaCursorRenderer *renderer,
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  g_assert (meta_is_wayland_compositor ());
 | 
			
		||||
 | 
			
		||||
  priv->current_x = x;
 | 
			
		||||
  priv->current_y = y;
 | 
			
		||||
 | 
			
		||||
@@ -413,19 +419,7 @@ meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  return priv->overlay_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_cursor_renderer_is_overlay_visible (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv =
 | 
			
		||||
    meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  if (!priv->stage_overlay)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  return meta_overlay_is_visible (priv->stage_overlay);
 | 
			
		||||
  return priv->displayed_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
@@ -67,8 +67,6 @@ void meta_cursor_renderer_force_update (MetaCursorRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite * meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
gboolean meta_cursor_renderer_is_overlay_visible (MetaCursorRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_renderer_add_hw_cursor_inhibitor (MetaCursorRenderer    *renderer,
 | 
			
		||||
                                                   MetaHwCursorInhibitor *inhibitor);
 | 
			
		||||
 | 
			
		||||
@@ -84,7 +82,4 @@ graphene_rect_t meta_cursor_renderer_calculate_rect (MetaCursorRenderer *rendere
 | 
			
		||||
void meta_cursor_renderer_emit_painted (MetaCursorRenderer *renderer,
 | 
			
		||||
                                        MetaCursorSprite   *cursor_sprite);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_renderer_update_stage_overlay (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                MetaCursorSprite   *cursor_sprite);
 | 
			
		||||
 | 
			
		||||
#endif /* META_CURSOR_RENDERER_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -24,17 +24,34 @@
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-cursor.h"
 | 
			
		||||
#include "backends/meta-cursor-renderer.h"
 | 
			
		||||
#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
 | 
			
		||||
#include "meta/meta-cursor-tracker.h"
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorTrackerClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
struct _MetaCursorTracker {
 | 
			
		||||
  GObject parent_instance;
 | 
			
		||||
 | 
			
		||||
  void (* set_force_track_position) (MetaCursorTracker *tracker,
 | 
			
		||||
                                     gboolean           is_enabled);
 | 
			
		||||
  MetaCursorSprite * (* get_sprite) (MetaCursorTracker *tracker);
 | 
			
		||||
  gboolean is_showing;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *effective_cursor; /* May be NULL when hidden */
 | 
			
		||||
  MetaCursorSprite *displayed_cursor;
 | 
			
		||||
 | 
			
		||||
  /* Wayland clients can set a NULL buffer as their cursor
 | 
			
		||||
   * explicitly, which means that we shouldn't display anything.
 | 
			
		||||
   * So, we can't simply store a NULL in window_cursor to
 | 
			
		||||
   * determine an unset window cursor; we need an extra boolean.
 | 
			
		||||
   */
 | 
			
		||||
  gboolean has_window_cursor;
 | 
			
		||||
  MetaCursorSprite *window_cursor;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *root_cursor;
 | 
			
		||||
 | 
			
		||||
  /* The cursor from the X11 server. */
 | 
			
		||||
  MetaCursorSpriteXfixes *xfixes_cursor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
gboolean meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
 | 
			
		||||
					    XEvent            *xevent);
 | 
			
		||||
 | 
			
		||||
void     meta_cursor_tracker_set_window_cursor   (MetaCursorTracker *tracker,
 | 
			
		||||
                                                  MetaCursorSprite  *cursor_sprite);
 | 
			
		||||
void     meta_cursor_tracker_unset_window_cursor (MetaCursorTracker *tracker);
 | 
			
		||||
@@ -45,14 +62,6 @@ void     meta_cursor_tracker_update_position (MetaCursorTracker *tracker,
 | 
			
		||||
                                              float              new_x,
 | 
			
		||||
                                              float              new_y);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_tracker_track_position (MetaCursorTracker *tracker);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_tracker_untrack_position (MetaCursorTracker *tracker);
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite * meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker);
 | 
			
		||||
 | 
			
		||||
MetaBackend * meta_cursor_tracker_get_backend (MetaCursorTracker *tracker);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_tracker_notify_cursor_changed (MetaCursorTracker *tracker);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -36,51 +36,16 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-backend-private.h"
 | 
			
		||||
#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
 | 
			
		||||
#include "cogl/cogl.h"
 | 
			
		||||
#include "core/display-private.h"
 | 
			
		||||
#include "clutter/clutter.h"
 | 
			
		||||
#include "meta-marshal.h"
 | 
			
		||||
#include "meta/main.h"
 | 
			
		||||
#include "meta/meta-x11-errors.h"
 | 
			
		||||
#include "meta/util.h"
 | 
			
		||||
#include "x11/meta-x11-display-private.h"
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  PROP_0,
 | 
			
		||||
 | 
			
		||||
  PROP_BACKEND,
 | 
			
		||||
 | 
			
		||||
  N_PROPS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static GParamSpec *obj_props[N_PROPS];
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaCursorTrackerPrivate
 | 
			
		||||
{
 | 
			
		||||
  MetaBackend *backend;
 | 
			
		||||
 | 
			
		||||
  gboolean is_showing;
 | 
			
		||||
 | 
			
		||||
  int track_position_count;
 | 
			
		||||
 | 
			
		||||
  float x;
 | 
			
		||||
  float y;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *effective_cursor; /* May be NULL when hidden */
 | 
			
		||||
  MetaCursorSprite *displayed_cursor;
 | 
			
		||||
 | 
			
		||||
  /* Wayland clients can set a NULL buffer as their cursor
 | 
			
		||||
   * explicitly, which means that we shouldn't display anything.
 | 
			
		||||
   * So, we can't simply store a NULL in window_cursor to
 | 
			
		||||
   * determine an unset window cursor; we need an extra boolean.
 | 
			
		||||
   */
 | 
			
		||||
  gboolean has_window_cursor;
 | 
			
		||||
  MetaCursorSprite *window_cursor;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *root_cursor;
 | 
			
		||||
} MetaCursorTrackerPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorTracker, meta_cursor_tracker,
 | 
			
		||||
                            G_TYPE_OBJECT)
 | 
			
		||||
G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
@@ -92,12 +57,6 @@ enum
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL];
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_tracker_notify_cursor_changed (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  g_signal_emit (tracker, signals[CURSOR_CHANGED], 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cursor_texture_updated (MetaCursorSprite  *cursor,
 | 
			
		||||
                        MetaCursorTracker *tracker)
 | 
			
		||||
@@ -108,28 +67,26 @@ cursor_texture_updated (MetaCursorSprite  *cursor,
 | 
			
		||||
static gboolean
 | 
			
		||||
update_displayed_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
  MetaDisplay *display = meta_get_display ();
 | 
			
		||||
  MetaCursorSprite *cursor = NULL;
 | 
			
		||||
 | 
			
		||||
  if (display && meta_display_windows_are_interactable (display) &&
 | 
			
		||||
      priv->has_window_cursor)
 | 
			
		||||
    cursor = priv->window_cursor;
 | 
			
		||||
      tracker->has_window_cursor)
 | 
			
		||||
    cursor = tracker->window_cursor;
 | 
			
		||||
  else
 | 
			
		||||
    cursor = priv->root_cursor;
 | 
			
		||||
    cursor = tracker->root_cursor;
 | 
			
		||||
 | 
			
		||||
  if (priv->displayed_cursor == cursor)
 | 
			
		||||
  if (tracker->displayed_cursor == cursor)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (priv->displayed_cursor)
 | 
			
		||||
  if (tracker->displayed_cursor)
 | 
			
		||||
    {
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (priv->displayed_cursor,
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (tracker->displayed_cursor,
 | 
			
		||||
                                            cursor_texture_updated,
 | 
			
		||||
                                            tracker);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_set_object (&priv->displayed_cursor, cursor);
 | 
			
		||||
  g_set_object (&tracker->displayed_cursor, cursor);
 | 
			
		||||
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    {
 | 
			
		||||
@@ -143,25 +100,22 @@ update_displayed_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
static gboolean
 | 
			
		||||
update_effective_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
  MetaCursorSprite *cursor = NULL;
 | 
			
		||||
 | 
			
		||||
  if (priv->is_showing)
 | 
			
		||||
    cursor = priv->displayed_cursor;
 | 
			
		||||
  if (tracker->is_showing)
 | 
			
		||||
    cursor = tracker->displayed_cursor;
 | 
			
		||||
 | 
			
		||||
  return g_set_object (&priv->effective_cursor, cursor);
 | 
			
		||||
  return g_set_object (&tracker->effective_cursor, cursor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
change_cursor_renderer (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
  MetaCursorRenderer *cursor_renderer =
 | 
			
		||||
    meta_backend_get_cursor_renderer (priv->backend);
 | 
			
		||||
    meta_backend_get_cursor_renderer (backend);
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_set_cursor (cursor_renderer, priv->effective_cursor);
 | 
			
		||||
  meta_cursor_renderer_set_cursor (cursor_renderer, tracker->effective_cursor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -179,83 +133,22 @@ sync_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_real_set_force_track_position (MetaCursorTracker *tracker,
 | 
			
		||||
                                                   gboolean           is_enabled)
 | 
			
		||||
meta_cursor_tracker_init (MetaCursorTracker *self)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorSprite *
 | 
			
		||||
meta_cursor_tracker_real_get_sprite (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  return priv->displayed_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_init (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  priv->is_showing = TRUE;
 | 
			
		||||
  priv->x = -1.0;
 | 
			
		||||
  priv->y = -1.0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_get_property (GObject    *object,
 | 
			
		||||
                                  guint       prop_id,
 | 
			
		||||
                                  GValue     *value,
 | 
			
		||||
                                  GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker *tracker = META_CURSOR_TRACKER (object);
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_BACKEND:
 | 
			
		||||
      g_value_set_object (value, priv->backend);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_set_property (GObject      *object,
 | 
			
		||||
                                  guint         prop_id,
 | 
			
		||||
                                  const GValue *value,
 | 
			
		||||
                                  GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker *tracker = META_CURSOR_TRACKER (object);
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_BACKEND:
 | 
			
		||||
      priv->backend = g_value_get_object (value);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  self->is_showing = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker *tracker = META_CURSOR_TRACKER (object);
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
  MetaCursorTracker *self = META_CURSOR_TRACKER (object);
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&priv->effective_cursor);
 | 
			
		||||
  g_clear_object (&priv->displayed_cursor);
 | 
			
		||||
  g_clear_object (&priv->root_cursor);
 | 
			
		||||
  if (self->effective_cursor)
 | 
			
		||||
    g_object_unref (self->effective_cursor);
 | 
			
		||||
  if (self->displayed_cursor)
 | 
			
		||||
    g_object_unref (self->displayed_cursor);
 | 
			
		||||
  if (self->root_cursor)
 | 
			
		||||
    g_object_unref (self->root_cursor);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
@@ -265,25 +158,8 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  object_class->get_property = meta_cursor_tracker_get_property;
 | 
			
		||||
  object_class->set_property = meta_cursor_tracker_set_property;
 | 
			
		||||
  object_class->finalize = meta_cursor_tracker_finalize;
 | 
			
		||||
 | 
			
		||||
  klass->set_force_track_position =
 | 
			
		||||
    meta_cursor_tracker_real_set_force_track_position;
 | 
			
		||||
  klass->get_sprite =
 | 
			
		||||
    meta_cursor_tracker_real_get_sprite;
 | 
			
		||||
 | 
			
		||||
  obj_props[PROP_BACKEND] =
 | 
			
		||||
    g_param_spec_object ("backend",
 | 
			
		||||
                         "backend",
 | 
			
		||||
                         "MetaBackend",
 | 
			
		||||
                         META_TYPE_BACKEND,
 | 
			
		||||
                         G_PARAM_READWRITE |
 | 
			
		||||
                         G_PARAM_CONSTRUCT_ONLY |
 | 
			
		||||
                         G_PARAM_STATIC_STRINGS);
 | 
			
		||||
  g_object_class_install_properties (object_class, N_PROPS, obj_props);
 | 
			
		||||
 | 
			
		||||
  signals[CURSOR_CHANGED] = g_signal_new ("cursor-changed",
 | 
			
		||||
                                          G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
                                          G_SIGNAL_RUN_LAST,
 | 
			
		||||
@@ -343,16 +219,50 @@ set_window_cursor (MetaCursorTracker *tracker,
 | 
			
		||||
                   gboolean           has_cursor,
 | 
			
		||||
                   MetaCursorSprite  *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&priv->window_cursor);
 | 
			
		||||
  g_clear_object (&tracker->window_cursor);
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    priv->window_cursor = g_object_ref (cursor_sprite);
 | 
			
		||||
  priv->has_window_cursor = has_cursor;
 | 
			
		||||
    tracker->window_cursor = g_object_ref (cursor_sprite);
 | 
			
		||||
  tracker->has_window_cursor = has_cursor;
 | 
			
		||||
  sync_cursor (tracker);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
 | 
			
		||||
                                   XEvent            *xevent)
 | 
			
		||||
{
 | 
			
		||||
  MetaX11Display *x11_display = meta_get_display ()->x11_display;
 | 
			
		||||
  XFixesCursorNotifyEvent *notify_event;
 | 
			
		||||
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  notify_event = (XFixesCursorNotifyEvent *)xevent;
 | 
			
		||||
  if (notify_event->subtype != XFixesDisplayCursorNotify)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&tracker->xfixes_cursor);
 | 
			
		||||
  g_signal_emit (tracker, signals[CURSOR_CHANGED], 0);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ensure_xfixes_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = meta_get_display ();
 | 
			
		||||
  g_autoptr (GError) error = NULL;
 | 
			
		||||
 | 
			
		||||
  if (tracker->xfixes_cursor)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  tracker->xfixes_cursor = meta_cursor_sprite_xfixes_new (display, &error);
 | 
			
		||||
  if (!tracker->xfixes_cursor)
 | 
			
		||||
    g_warning ("Failed to create XFIXES cursor: %s", error->message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * meta_cursor_tracker_get_sprite:
 | 
			
		||||
 *
 | 
			
		||||
@@ -363,13 +273,27 @@ meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorSprite *cursor_sprite;
 | 
			
		||||
 | 
			
		||||
  cursor_sprite = META_CURSOR_TRACKER_GET_CLASS (tracker)->get_sprite (tracker);
 | 
			
		||||
  g_return_val_if_fail (META_IS_CURSOR_TRACKER (tracker), NULL);
 | 
			
		||||
 | 
			
		||||
  if (!cursor_sprite)
 | 
			
		||||
    return NULL;
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    {
 | 
			
		||||
      cursor_sprite = tracker->displayed_cursor;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      ensure_xfixes_cursor (tracker);
 | 
			
		||||
      cursor_sprite = META_CURSOR_SPRITE (tracker->xfixes_cursor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
  return meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    {
 | 
			
		||||
      meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
      return meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -388,7 +312,15 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (META_IS_CURSOR_TRACKER (tracker));
 | 
			
		||||
 | 
			
		||||
  cursor_sprite = META_CURSOR_TRACKER_GET_CLASS (tracker)->get_sprite (tracker);
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    {
 | 
			
		||||
      cursor_sprite = tracker->displayed_cursor;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      ensure_xfixes_cursor (tracker);
 | 
			
		||||
      cursor_sprite = META_CURSOR_SPRITE (tracker->xfixes_cursor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_get_hotspot (cursor_sprite, x, y);
 | 
			
		||||
@@ -426,12 +358,9 @@ void
 | 
			
		||||
meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker,
 | 
			
		||||
                                     MetaCursorSprite  *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&priv->root_cursor);
 | 
			
		||||
  g_clear_object (&tracker->root_cursor);
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    priv->root_cursor = g_object_ref (cursor_sprite);
 | 
			
		||||
    tracker->root_cursor = g_object_ref (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  sync_cursor (tracker);
 | 
			
		||||
}
 | 
			
		||||
@@ -441,27 +370,15 @@ meta_cursor_tracker_update_position (MetaCursorTracker *tracker,
 | 
			
		||||
                                     float              new_x,
 | 
			
		||||
                                     float              new_y)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
  MetaCursorRenderer *cursor_renderer =
 | 
			
		||||
    meta_backend_get_cursor_renderer (priv->backend);
 | 
			
		||||
  gboolean position_changed;
 | 
			
		||||
    meta_backend_get_cursor_renderer (backend);
 | 
			
		||||
 | 
			
		||||
  if (priv->x != new_x || priv->y != new_y)
 | 
			
		||||
    {
 | 
			
		||||
      position_changed = TRUE;
 | 
			
		||||
      priv->x = new_x;
 | 
			
		||||
      priv->y = new_y;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      position_changed = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
  g_assert (meta_is_wayland_compositor ());
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_set_position (cursor_renderer, new_x, new_y);
 | 
			
		||||
 | 
			
		||||
  if (position_changed)
 | 
			
		||||
    g_signal_emit (tracker, signals[CURSOR_MOVED], 0, new_x, new_y);
 | 
			
		||||
  g_signal_emit (tracker, signals[CURSOR_MOVED], 0, new_x, new_y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -521,59 +438,19 @@ meta_cursor_tracker_get_pointer (MetaCursorTracker   *tracker,
 | 
			
		||||
    get_pointer_position_gdk (x, y, (int*)mods);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_tracker_track_position (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  priv->track_position_count++;
 | 
			
		||||
  if (priv->track_position_count == 1)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursorTrackerClass *klass =
 | 
			
		||||
        META_CURSOR_TRACKER_GET_CLASS (tracker);
 | 
			
		||||
 | 
			
		||||
      klass->set_force_track_position (tracker, TRUE);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_tracker_untrack_position (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (priv->track_position_count > 0);
 | 
			
		||||
 | 
			
		||||
  priv->track_position_count--;
 | 
			
		||||
  if (priv->track_position_count == 0)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursorTrackerClass *klass =
 | 
			
		||||
        META_CURSOR_TRACKER_GET_CLASS (tracker);
 | 
			
		||||
 | 
			
		||||
      klass->set_force_track_position (tracker, FALSE);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_cursor_tracker_get_pointer_visible (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  return priv->is_showing;
 | 
			
		||||
  return tracker->is_showing;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker,
 | 
			
		||||
                                         gboolean           visible)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  if (visible == priv->is_showing)
 | 
			
		||||
  if (visible == tracker->is_showing)
 | 
			
		||||
    return;
 | 
			
		||||
  priv->is_showing = visible;
 | 
			
		||||
  tracker->is_showing = visible;
 | 
			
		||||
 | 
			
		||||
  sync_cursor (tracker);
 | 
			
		||||
 | 
			
		||||
@@ -583,17 +460,5 @@ meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker,
 | 
			
		||||
MetaCursorSprite *
 | 
			
		||||
meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  return priv->displayed_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaBackend *
 | 
			
		||||
meta_cursor_tracker_get_backend (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerPrivate *priv =
 | 
			
		||||
    meta_cursor_tracker_get_instance_private (tracker);
 | 
			
		||||
 | 
			
		||||
  return priv->backend;
 | 
			
		||||
  return tracker->displayed_cursor;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -189,7 +189,10 @@ meta_cursor_sprite_prepare_at (MetaCursorSprite *sprite,
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_realize_texture (MetaCursorSprite *sprite)
 | 
			
		||||
{
 | 
			
		||||
  META_CURSOR_SPRITE_GET_CLASS (sprite)->realize_texture (sprite);
 | 
			
		||||
  MetaCursorSpriteClass *klass = META_CURSOR_SPRITE_GET_CLASS (sprite);
 | 
			
		||||
 | 
			
		||||
  if (klass->realize_texture)
 | 
			
		||||
    klass->realize_texture (sprite);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 
 | 
			
		||||
@@ -317,7 +317,7 @@ handle_start_element (GMarkupParseContext  *context,
 | 
			
		||||
          }
 | 
			
		||||
        else if (g_str_equal (element_name, "monitor"))
 | 
			
		||||
          {
 | 
			
		||||
            parser->current_monitor_config = g_new0 (MetaMonitorConfig, 1);
 | 
			
		||||
            parser->current_monitor_config = g_new0 (MetaMonitorConfig, 1);;
 | 
			
		||||
 | 
			
		||||
            parser->state = STATE_MONITOR;
 | 
			
		||||
          }
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,7 @@ create_mode (CrtcModeSpec *spec,
 | 
			
		||||
  crtc_mode_info->refresh_rate = spec->refresh_rate;
 | 
			
		||||
 | 
			
		||||
  return g_object_new (META_TYPE_CRTC_MODE,
 | 
			
		||||
                       "id", (uint64_t) mode_id,
 | 
			
		||||
                       "id", mode_id,
 | 
			
		||||
                       "info", crtc_mode_info,
 | 
			
		||||
                       NULL);
 | 
			
		||||
}
 | 
			
		||||
@@ -205,7 +205,7 @@ append_monitor (MetaMonitorManager *manager,
 | 
			
		||||
  *modes = g_list_concat (*modes, new_modes);
 | 
			
		||||
 | 
			
		||||
  crtc = g_object_new (META_TYPE_CRTC_DUMMY,
 | 
			
		||||
                       "id", (uint64_t) g_list_length (*crtcs) + 1,
 | 
			
		||||
                       "id", g_list_length (*crtcs) + 1,
 | 
			
		||||
                       "gpu", gpu,
 | 
			
		||||
                       NULL);
 | 
			
		||||
  *crtcs = g_list_append (*crtcs, crtc);
 | 
			
		||||
@@ -237,7 +237,7 @@ append_monitor (MetaMonitorManager *manager,
 | 
			
		||||
  output_info->n_possible_crtcs = 1;
 | 
			
		||||
 | 
			
		||||
  output = g_object_new (META_TYPE_OUTPUT_DUMMY,
 | 
			
		||||
                         "id", (uint64_t) number,
 | 
			
		||||
                         "id", number,
 | 
			
		||||
                         "gpu", gpu,
 | 
			
		||||
                         "info", output_info,
 | 
			
		||||
                         NULL);
 | 
			
		||||
@@ -291,7 +291,7 @@ append_tiled_monitor (MetaMonitorManager *manager,
 | 
			
		||||
      MetaCrtc *crtc;
 | 
			
		||||
 | 
			
		||||
      crtc = g_object_new (META_TYPE_CRTC_DUMMY,
 | 
			
		||||
                           "id", (uint64_t) g_list_length (*crtcs) + i + 1,
 | 
			
		||||
                           "id", g_list_length (*crtcs) + i + 1,
 | 
			
		||||
                           "gpu", gpu,
 | 
			
		||||
                           NULL);
 | 
			
		||||
      new_crtcs = g_list_append (new_crtcs, crtc);
 | 
			
		||||
@@ -358,7 +358,7 @@ append_tiled_monitor (MetaMonitorManager *manager,
 | 
			
		||||
      output_info->n_possible_crtcs = n_tiles;
 | 
			
		||||
 | 
			
		||||
      output = g_object_new (META_TYPE_OUTPUT_DUMMY,
 | 
			
		||||
                             "id", (uint64_t) number,
 | 
			
		||||
                             "id", number,
 | 
			
		||||
                             "gpu", gpu,
 | 
			
		||||
                             "info", output_info,
 | 
			
		||||
                             NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -1186,7 +1186,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
 | 
			
		||||
    {
 | 
			
		||||
      MetaCrtcMode *mode = l->data;
 | 
			
		||||
      const MetaCrtcModeInfo *crtc_mode_info =
 | 
			
		||||
        meta_crtc_mode_get_info (mode);
 | 
			
		||||
        meta_crtc_mode_get_info (mode);;
 | 
			
		||||
 | 
			
		||||
      g_variant_builder_add (&mode_builder, "(uxuudu)",
 | 
			
		||||
                             i, /* ID */
 | 
			
		||||
 
 | 
			
		||||
@@ -36,17 +36,6 @@ enum
 | 
			
		||||
 | 
			
		||||
static int handle_signals[N_HANDLE_SIGNALS];
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  PROP_0,
 | 
			
		||||
 | 
			
		||||
  PROP_IS_RECORDING,
 | 
			
		||||
 | 
			
		||||
  N_PROPS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static GParamSpec *obj_props[N_PROPS];
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  CONTROLLER_NEW_HANDLE,
 | 
			
		||||
@@ -61,8 +50,6 @@ typedef struct _MetaRemoteAccessHandlePrivate
 | 
			
		||||
  gboolean has_stopped;
 | 
			
		||||
 | 
			
		||||
  gboolean disable_animations;
 | 
			
		||||
 | 
			
		||||
  gboolean is_recording;
 | 
			
		||||
} MetaRemoteAccessHandlePrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaRemoteAccessHandle,
 | 
			
		||||
@@ -190,48 +177,6 @@ meta_remote_access_controller_new (MetaRemoteDesktop *remote_desktop,
 | 
			
		||||
  return remote_access_controller;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_remote_access_handle_get_property (GObject    *object,
 | 
			
		||||
                                        guint       prop_id,
 | 
			
		||||
                                        GValue     *value,
 | 
			
		||||
                                        GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
  MetaRemoteAccessHandle *handle = META_REMOTE_ACCESS_HANDLE (object);
 | 
			
		||||
  MetaRemoteAccessHandlePrivate *priv =
 | 
			
		||||
    meta_remote_access_handle_get_instance_private (handle);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_IS_RECORDING:
 | 
			
		||||
      g_value_set_boolean (value, priv->is_recording);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_remote_access_handle_set_property (GObject      *object,
 | 
			
		||||
                                        guint         prop_id,
 | 
			
		||||
                                        const GValue *value,
 | 
			
		||||
                                        GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
  MetaRemoteAccessHandle *handle = META_REMOTE_ACCESS_HANDLE (object);
 | 
			
		||||
  MetaRemoteAccessHandlePrivate *priv =
 | 
			
		||||
    meta_remote_access_handle_get_instance_private (handle);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_IS_RECORDING:
 | 
			
		||||
      priv->is_recording = g_value_get_boolean (value);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_remote_access_handle_init (MetaRemoteAccessHandle *handle)
 | 
			
		||||
{
 | 
			
		||||
@@ -240,11 +185,6 @@ meta_remote_access_handle_init (MetaRemoteAccessHandle *handle)
 | 
			
		||||
static void
 | 
			
		||||
meta_remote_access_handle_class_init (MetaRemoteAccessHandleClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  object_class->get_property = meta_remote_access_handle_get_property;
 | 
			
		||||
  object_class->set_property = meta_remote_access_handle_set_property;
 | 
			
		||||
 | 
			
		||||
  handle_signals[HANDLE_STOPPED] =
 | 
			
		||||
    g_signal_new ("stopped",
 | 
			
		||||
                  G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
@@ -252,16 +192,6 @@ meta_remote_access_handle_class_init (MetaRemoteAccessHandleClass *klass)
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  obj_props[PROP_IS_RECORDING] =
 | 
			
		||||
    g_param_spec_boolean ("is-recording",
 | 
			
		||||
                          "is-recording",
 | 
			
		||||
                          "Is a screen recording",
 | 
			
		||||
                          FALSE,
 | 
			
		||||
                          G_PARAM_READWRITE |
 | 
			
		||||
                          G_PARAM_CONSTRUCT_ONLY |
 | 
			
		||||
                          G_PARAM_STATIC_STRINGS);
 | 
			
		||||
  g_object_class_install_properties (object_class, N_PROPS, obj_props);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
 
 | 
			
		||||
@@ -343,7 +343,6 @@ meta_screen_cast_area_stream_src_enable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
        g_signal_connect_after (cursor_tracker, "cursor-changed",
 | 
			
		||||
                                G_CALLBACK (cursor_changed),
 | 
			
		||||
                                area_src);
 | 
			
		||||
      meta_cursor_tracker_track_position (cursor_tracker);
 | 
			
		||||
      G_GNUC_FALLTHROUGH;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      add_view_painted_watches (area_src,
 | 
			
		||||
@@ -351,7 +350,6 @@ meta_screen_cast_area_stream_src_enable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      inhibit_hw_cursor (area_src);
 | 
			
		||||
      meta_cursor_tracker_track_position (cursor_tracker);
 | 
			
		||||
      add_view_painted_watches (area_src,
 | 
			
		||||
                                META_STAGE_WATCH_AFTER_ACTOR_PAINT);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -365,7 +363,6 @@ meta_screen_cast_area_stream_src_disable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastAreaStreamSrc *area_src =
 | 
			
		||||
    META_SCREEN_CAST_AREA_STREAM_SRC (src);
 | 
			
		||||
  MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src);
 | 
			
		||||
  MetaBackend *backend = get_backend (area_src);
 | 
			
		||||
  MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
 | 
			
		||||
  ClutterStage *stage;
 | 
			
		||||
@@ -392,16 +389,6 @@ meta_screen_cast_area_stream_src_disable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
                          cursor_tracker);
 | 
			
		||||
 | 
			
		||||
  g_clear_handle_id (&area_src->maybe_record_idle_id, g_source_remove);
 | 
			
		||||
 | 
			
		||||
  switch (meta_screen_cast_stream_get_cursor_mode (stream))
 | 
			
		||||
    {
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_METADATA:
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      meta_cursor_tracker_untrack_position (cursor_tracker);
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -431,7 +418,6 @@ meta_screen_cast_area_stream_src_record_to_buffer (MetaScreenCastStreamSrc  *src
 | 
			
		||||
      paint_flags |= CLUTTER_PAINT_FLAG_NO_CURSORS;
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      paint_flags |= CLUTTER_PAINT_FLAG_FORCE_CURSORS;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -472,7 +458,6 @@ meta_screen_cast_area_stream_src_record_to_framebuffer (MetaScreenCastStreamSrc
 | 
			
		||||
      paint_flags |= CLUTTER_PAINT_FLAG_NO_CURSORS;
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      paint_flags |= CLUTTER_PAINT_FLAG_FORCE_CURSORS;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  clutter_stage_paint_to_framebuffer (stage, framebuffer,
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,6 @@ meta_screen_cast_area_stream_new (MetaScreenCastSession     *session,
 | 
			
		||||
                                  MetaRectangle             *area,
 | 
			
		||||
                                  ClutterStage              *stage,
 | 
			
		||||
                                  MetaScreenCastCursorMode   cursor_mode,
 | 
			
		||||
                                  MetaScreenCastFlag         flags,
 | 
			
		||||
                                  GError                   **error)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastAreaStream *area_stream;
 | 
			
		||||
@@ -106,7 +105,6 @@ meta_screen_cast_area_stream_new (MetaScreenCastSession     *session,
 | 
			
		||||
                                "session", session,
 | 
			
		||||
                                "connection", connection,
 | 
			
		||||
                                "cursor-mode", cursor_mode,
 | 
			
		||||
                                "flags", flags,
 | 
			
		||||
                                NULL);
 | 
			
		||||
  if (!area_stream)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,6 @@ MetaScreenCastAreaStream * meta_screen_cast_area_stream_new (MetaScreenCastSessi
 | 
			
		||||
                                                             MetaRectangle             *area,
 | 
			
		||||
                                                             ClutterStage              *stage,
 | 
			
		||||
                                                             MetaScreenCastCursorMode   cursor_mode,
 | 
			
		||||
                                                             MetaScreenCastFlag         flags,
 | 
			
		||||
                                                             GError                   **error);
 | 
			
		||||
 | 
			
		||||
ClutterStage * meta_screen_cast_area_stream_get_stage (MetaScreenCastAreaStream *area_stream);
 | 
			
		||||
 
 | 
			
		||||
@@ -343,7 +343,6 @@ meta_screen_cast_monitor_stream_src_enable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
        g_signal_connect_after (cursor_tracker, "cursor-changed",
 | 
			
		||||
                                G_CALLBACK (cursor_changed),
 | 
			
		||||
                                monitor_src);
 | 
			
		||||
      meta_cursor_tracker_track_position (cursor_tracker);
 | 
			
		||||
      G_GNUC_FALLTHROUGH;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      add_view_painted_watches (monitor_src,
 | 
			
		||||
@@ -351,7 +350,6 @@ meta_screen_cast_monitor_stream_src_enable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      inhibit_hw_cursor (monitor_src);
 | 
			
		||||
      meta_cursor_tracker_track_position (cursor_tracker);
 | 
			
		||||
      add_view_painted_watches (monitor_src,
 | 
			
		||||
                                META_STAGE_WATCH_AFTER_PAINT);
 | 
			
		||||
      break;
 | 
			
		||||
@@ -365,7 +363,6 @@ meta_screen_cast_monitor_stream_src_disable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastMonitorStreamSrc *monitor_src =
 | 
			
		||||
    META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
 | 
			
		||||
  MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src);
 | 
			
		||||
  MetaBackend *backend = get_backend (monitor_src);
 | 
			
		||||
  MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
 | 
			
		||||
  ClutterStage *stage;
 | 
			
		||||
@@ -390,79 +387,6 @@ meta_screen_cast_monitor_stream_src_disable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
                          cursor_tracker);
 | 
			
		||||
  g_clear_signal_handler (&monitor_src->cursor_changed_handler_id,
 | 
			
		||||
                          cursor_tracker);
 | 
			
		||||
 | 
			
		||||
  switch (meta_screen_cast_stream_get_cursor_mode (stream))
 | 
			
		||||
    {
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_METADATA:
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      meta_cursor_tracker_untrack_position (cursor_tracker);
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
maybe_paint_cursor_sprite (MetaScreenCastMonitorStreamSrc *monitor_src,
 | 
			
		||||
                           uint8_t                        *data)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (monitor_src);
 | 
			
		||||
  MetaBackend *backend = get_backend (monitor_src);
 | 
			
		||||
  MetaCursorRenderer *cursor_renderer =
 | 
			
		||||
    meta_backend_get_cursor_renderer (backend);
 | 
			
		||||
  MetaCursorSprite *cursor_sprite;
 | 
			
		||||
  CoglTexture *sprite_texture;
 | 
			
		||||
  int sprite_width, sprite_height, sprite_stride;
 | 
			
		||||
  float sprite_scale;
 | 
			
		||||
  uint8_t *sprite_data;
 | 
			
		||||
  cairo_surface_t *sprite_surface;
 | 
			
		||||
  graphene_rect_t sprite_rect;
 | 
			
		||||
  int width, height, stride;
 | 
			
		||||
  cairo_surface_t *surface;
 | 
			
		||||
  cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
  cursor_sprite = meta_cursor_renderer_get_cursor (cursor_renderer);
 | 
			
		||||
  if (!cursor_sprite)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (meta_cursor_renderer_is_overlay_visible (cursor_renderer))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  sprite_rect = meta_cursor_renderer_calculate_rect (cursor_renderer,
 | 
			
		||||
                                                     cursor_sprite);
 | 
			
		||||
  sprite_texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  sprite_width = cogl_texture_get_width (sprite_texture);
 | 
			
		||||
  sprite_height = cogl_texture_get_height (sprite_texture);
 | 
			
		||||
  sprite_stride = sprite_width * 4;
 | 
			
		||||
  sprite_scale = meta_cursor_sprite_get_texture_scale (cursor_sprite);
 | 
			
		||||
  sprite_data = g_new0 (uint8_t, sprite_stride * sprite_height);
 | 
			
		||||
  cogl_texture_get_data (sprite_texture,
 | 
			
		||||
                         CLUTTER_CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                         sprite_stride,
 | 
			
		||||
                         sprite_data);
 | 
			
		||||
  sprite_surface = cairo_image_surface_create_for_data (sprite_data,
 | 
			
		||||
                                                        CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                                        sprite_width,
 | 
			
		||||
                                                        sprite_height,
 | 
			
		||||
                                                        sprite_stride);
 | 
			
		||||
  cairo_surface_set_device_scale (sprite_surface, sprite_scale, sprite_scale);
 | 
			
		||||
 | 
			
		||||
  stride = meta_screen_cast_stream_src_get_stride (src);
 | 
			
		||||
  width = meta_screen_cast_stream_src_get_width (src);
 | 
			
		||||
  height = meta_screen_cast_stream_src_get_height (src);
 | 
			
		||||
  surface = cairo_image_surface_create_for_data (data,
 | 
			
		||||
                                                 CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                                 width, height, stride);
 | 
			
		||||
 | 
			
		||||
  cr = cairo_create (surface);
 | 
			
		||||
  cairo_set_source_surface (cr, sprite_surface,
 | 
			
		||||
                            sprite_rect.origin.x,
 | 
			
		||||
                            sprite_rect.origin.y);
 | 
			
		||||
  cairo_paint (cr);
 | 
			
		||||
  cairo_destroy (cr);
 | 
			
		||||
  cairo_surface_destroy (sprite_surface);
 | 
			
		||||
  cairo_surface_destroy (surface);
 | 
			
		||||
  g_free (sprite_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -472,7 +396,6 @@ meta_screen_cast_monitor_stream_src_record_to_buffer (MetaScreenCastStreamSrc  *
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastMonitorStreamSrc *monitor_src =
 | 
			
		||||
    META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
 | 
			
		||||
  MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src);
 | 
			
		||||
  ClutterStage *stage;
 | 
			
		||||
  MetaMonitor *monitor;
 | 
			
		||||
  MetaLogicalMonitor *logical_monitor;
 | 
			
		||||
@@ -482,16 +405,6 @@ meta_screen_cast_monitor_stream_src_record_to_buffer (MetaScreenCastStreamSrc  *
 | 
			
		||||
  stage = get_stage (monitor_src);
 | 
			
		||||
  clutter_stage_capture_into (stage, FALSE, &logical_monitor->rect, data);
 | 
			
		||||
 | 
			
		||||
  switch (meta_screen_cast_stream_get_cursor_mode (stream))
 | 
			
		||||
    {
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      maybe_paint_cursor_sprite (monitor_src, data);
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_METADATA:
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,6 @@ meta_screen_cast_monitor_stream_new (MetaScreenCastSession     *session,
 | 
			
		||||
                                     MetaMonitor               *monitor,
 | 
			
		||||
                                     ClutterStage              *stage,
 | 
			
		||||
                                     MetaScreenCastCursorMode   cursor_mode,
 | 
			
		||||
                                     MetaScreenCastFlag         flags,
 | 
			
		||||
                                     GError                   **error)
 | 
			
		||||
{
 | 
			
		||||
  MetaGpu *gpu = meta_monitor_get_gpu (monitor);
 | 
			
		||||
@@ -131,7 +130,6 @@ meta_screen_cast_monitor_stream_new (MetaScreenCastSession     *session,
 | 
			
		||||
                                   "session", session,
 | 
			
		||||
                                   "connection", connection,
 | 
			
		||||
                                   "cursor-mode", cursor_mode,
 | 
			
		||||
                                   "flags", flags,
 | 
			
		||||
                                   "monitor", monitor,
 | 
			
		||||
                                   NULL);
 | 
			
		||||
  if (!monitor_stream)
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,6 @@ MetaScreenCastMonitorStream * meta_screen_cast_monitor_stream_new (MetaScreenCas
 | 
			
		||||
                                                                   MetaMonitor               *monitor,
 | 
			
		||||
                                                                   ClutterStage              *stage,
 | 
			
		||||
                                                                   MetaScreenCastCursorMode   cursor_mode,
 | 
			
		||||
                                                                   MetaScreenCastFlag         flags,
 | 
			
		||||
                                                                   GError                   **error);
 | 
			
		||||
 | 
			
		||||
ClutterStage * meta_screen_cast_monitor_stream_get_stage (MetaScreenCastMonitorStream *monitor_stream);
 | 
			
		||||
 
 | 
			
		||||
@@ -310,8 +310,6 @@ handle_record_monitor (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
    meta_backend_get_monitor_manager (backend);
 | 
			
		||||
  MetaMonitor *monitor;
 | 
			
		||||
  MetaScreenCastCursorMode cursor_mode;
 | 
			
		||||
  gboolean is_recording;
 | 
			
		||||
  MetaScreenCastFlag flags;
 | 
			
		||||
  ClutterStage *stage;
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  MetaScreenCastMonitorStream *monitor_stream;
 | 
			
		||||
@@ -358,21 +356,13 @@ handle_record_monitor (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!g_variant_lookup (properties_variant, "is-recording", "b", &is_recording))
 | 
			
		||||
    is_recording = FALSE;
 | 
			
		||||
 | 
			
		||||
  stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
 | 
			
		||||
 | 
			
		||||
  flags = META_SCREEN_CAST_FLAG_NONE;
 | 
			
		||||
  if (is_recording)
 | 
			
		||||
    flags |= META_SCREEN_CAST_FLAG_IS_RECORDING;
 | 
			
		||||
 | 
			
		||||
  monitor_stream = meta_screen_cast_monitor_stream_new (session,
 | 
			
		||||
                                                        connection,
 | 
			
		||||
                                                        monitor,
 | 
			
		||||
                                                        stage,
 | 
			
		||||
                                                        cursor_mode,
 | 
			
		||||
                                                        flags,
 | 
			
		||||
                                                        &error);
 | 
			
		||||
  if (!monitor_stream)
 | 
			
		||||
    {
 | 
			
		||||
@@ -408,8 +398,6 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
  GDBusConnection *connection;
 | 
			
		||||
  MetaWindow *window;
 | 
			
		||||
  MetaScreenCastCursorMode cursor_mode;
 | 
			
		||||
  gboolean is_recording;
 | 
			
		||||
  MetaScreenCastFlag flags;
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  MetaDisplay *display;
 | 
			
		||||
  GVariant *window_id_variant = NULL;
 | 
			
		||||
@@ -466,21 +454,13 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!g_variant_lookup (properties_variant, "is-recording", "b", &is_recording))
 | 
			
		||||
    is_recording = FALSE;
 | 
			
		||||
 | 
			
		||||
  interface_skeleton = G_DBUS_INTERFACE_SKELETON (skeleton);
 | 
			
		||||
  connection = g_dbus_interface_skeleton_get_connection (interface_skeleton);
 | 
			
		||||
 | 
			
		||||
  flags = META_SCREEN_CAST_FLAG_NONE;
 | 
			
		||||
  if (is_recording)
 | 
			
		||||
    flags |= META_SCREEN_CAST_FLAG_IS_RECORDING;
 | 
			
		||||
 | 
			
		||||
  window_stream = meta_screen_cast_window_stream_new (session,
 | 
			
		||||
                                                      connection,
 | 
			
		||||
                                                      window,
 | 
			
		||||
                                                      cursor_mode,
 | 
			
		||||
                                                      flags,
 | 
			
		||||
                                                      &error);
 | 
			
		||||
  if (!window_stream)
 | 
			
		||||
    {
 | 
			
		||||
@@ -521,8 +501,6 @@ handle_record_area (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
  MetaBackend *backend;
 | 
			
		||||
  ClutterStage *stage;
 | 
			
		||||
  MetaScreenCastCursorMode cursor_mode;
 | 
			
		||||
  gboolean is_recording;
 | 
			
		||||
  MetaScreenCastFlag flags;
 | 
			
		||||
  g_autoptr (GError) error = NULL;
 | 
			
		||||
  MetaRectangle rect;
 | 
			
		||||
  MetaScreenCastAreaStream *area_stream;
 | 
			
		||||
@@ -552,18 +530,11 @@ handle_record_area (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!g_variant_lookup (properties_variant, "is-recording", "b", &is_recording))
 | 
			
		||||
    is_recording = FALSE;
 | 
			
		||||
 | 
			
		||||
  interface_skeleton = G_DBUS_INTERFACE_SKELETON (skeleton);
 | 
			
		||||
  connection = g_dbus_interface_skeleton_get_connection (interface_skeleton);
 | 
			
		||||
  backend = meta_screen_cast_get_backend (session->screen_cast);
 | 
			
		||||
  stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
 | 
			
		||||
 | 
			
		||||
  flags = META_SCREEN_CAST_FLAG_NONE;
 | 
			
		||||
  if (is_recording)
 | 
			
		||||
    flags |= META_SCREEN_CAST_FLAG_IS_RECORDING;
 | 
			
		||||
 | 
			
		||||
  rect = (MetaRectangle) {
 | 
			
		||||
    .x = x,
 | 
			
		||||
    .y = y,
 | 
			
		||||
@@ -575,7 +546,6 @@ handle_record_area (MetaDBusScreenCastSession *skeleton,
 | 
			
		||||
                                                  &rect,
 | 
			
		||||
                                                  stage,
 | 
			
		||||
                                                  cursor_mode,
 | 
			
		||||
                                                  flags,
 | 
			
		||||
                                                  &error);
 | 
			
		||||
  if (!area_stream)
 | 
			
		||||
    {
 | 
			
		||||
@@ -677,37 +647,12 @@ meta_screen_cast_session_class_init (MetaScreenCastSessionClass *klass)
 | 
			
		||||
  object_class->finalize = meta_screen_cast_session_finalize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_screen_cast_session_is_recording (MetaScreenCastSession *session)
 | 
			
		||||
{
 | 
			
		||||
  GList *l;
 | 
			
		||||
 | 
			
		||||
  if (!session->streams)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  for (l = session->streams; l; l = l->next)
 | 
			
		||||
    {
 | 
			
		||||
      MetaScreenCastStream *stream = l->data;
 | 
			
		||||
      MetaScreenCastFlag flags;
 | 
			
		||||
 | 
			
		||||
      flags = meta_screen_cast_stream_get_flags (stream);
 | 
			
		||||
      if (!(flags & META_SCREEN_CAST_FLAG_IS_RECORDING))
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaScreenCastSessionHandle *
 | 
			
		||||
meta_screen_cast_session_handle_new (MetaScreenCastSession *session)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastSessionHandle *handle;
 | 
			
		||||
  gboolean is_recording;
 | 
			
		||||
 | 
			
		||||
  is_recording = meta_screen_cast_session_is_recording (session);
 | 
			
		||||
  handle = g_object_new (META_TYPE_SCREEN_CAST_SESSION_HANDLE,
 | 
			
		||||
                         "is-recording", is_recording,
 | 
			
		||||
                         NULL);
 | 
			
		||||
  handle = g_object_new (META_TYPE_SCREEN_CAST_SESSION_HANDLE, NULL);
 | 
			
		||||
  handle->session = session;
 | 
			
		||||
 | 
			
		||||
  return handle;
 | 
			
		||||
 
 | 
			
		||||
@@ -1058,24 +1058,6 @@ meta_screen_cast_stream_src_get_stride (MetaScreenCastStreamSrc *src)
 | 
			
		||||
  return priv->video_stride;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
meta_screen_cast_stream_src_get_width (MetaScreenCastStreamSrc *src)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastStreamSrcPrivate *priv =
 | 
			
		||||
    meta_screen_cast_stream_src_get_instance_private (src);
 | 
			
		||||
 | 
			
		||||
  return priv->stream_width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
meta_screen_cast_stream_src_get_height (MetaScreenCastStreamSrc *src)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastStreamSrcPrivate *priv =
 | 
			
		||||
    meta_screen_cast_stream_src_get_instance_private (src);
 | 
			
		||||
 | 
			
		||||
  return priv->stream_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaScreenCastStream *
 | 
			
		||||
meta_screen_cast_stream_src_get_stream (MetaScreenCastStreamSrc *src)
 | 
			
		||||
{
 | 
			
		||||
@@ -1119,7 +1101,7 @@ meta_screen_cast_stream_src_set_property (GObject      *object,
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_STREAM:
 | 
			
		||||
      priv->stream = g_value_get_object (value);
 | 
			
		||||
      break;
 | 
			
		||||
      break;;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -80,10 +80,6 @@ gboolean meta_screen_cast_stream_src_pending_follow_up_frame (MetaScreenCastStre
 | 
			
		||||
 | 
			
		||||
int meta_screen_cast_stream_src_get_stride (MetaScreenCastStreamSrc *src);
 | 
			
		||||
 | 
			
		||||
int meta_screen_cast_stream_src_get_width (MetaScreenCastStreamSrc *src);
 | 
			
		||||
 | 
			
		||||
int meta_screen_cast_stream_src_get_height (MetaScreenCastStreamSrc *src);
 | 
			
		||||
 | 
			
		||||
MetaScreenCastStream * meta_screen_cast_stream_src_get_stream (MetaScreenCastStreamSrc *src);
 | 
			
		||||
 | 
			
		||||
gboolean meta_screen_cast_stream_src_draw_cursor_into (MetaScreenCastStreamSrc  *src,
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,6 @@
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-screen-cast-session.h"
 | 
			
		||||
 | 
			
		||||
#include "meta-private-enum-types.h"
 | 
			
		||||
 | 
			
		||||
#define META_SCREEN_CAST_STREAM_DBUS_IFACE "org.gnome.Mutter.ScreenCast.Stream"
 | 
			
		||||
#define META_SCREEN_CAST_STREAM_DBUS_PATH "/org/gnome/Mutter/ScreenCast/Stream"
 | 
			
		||||
 | 
			
		||||
@@ -38,7 +36,6 @@ enum
 | 
			
		||||
  PROP_SESSION,
 | 
			
		||||
  PROP_CONNECTION,
 | 
			
		||||
  PROP_CURSOR_MODE,
 | 
			
		||||
  PROP_FLAGS,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
@@ -58,7 +55,6 @@ typedef struct _MetaScreenCastStreamPrivate
 | 
			
		||||
  char *object_path;
 | 
			
		||||
 | 
			
		||||
  MetaScreenCastCursorMode cursor_mode;
 | 
			
		||||
  MetaScreenCastFlag flags;
 | 
			
		||||
 | 
			
		||||
  MetaScreenCastStreamSrc *src;
 | 
			
		||||
} MetaScreenCastStreamPrivate;
 | 
			
		||||
@@ -191,15 +187,6 @@ meta_screen_cast_stream_get_cursor_mode (MetaScreenCastStream *stream)
 | 
			
		||||
  return priv->cursor_mode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaScreenCastFlag
 | 
			
		||||
meta_screen_cast_stream_get_flags (MetaScreenCastStream *stream)
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastStreamPrivate *priv =
 | 
			
		||||
    meta_screen_cast_stream_get_instance_private (stream);
 | 
			
		||||
 | 
			
		||||
  return priv->flags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_screen_cast_stream_set_property (GObject      *object,
 | 
			
		||||
                                      guint         prop_id,
 | 
			
		||||
@@ -221,9 +208,6 @@ meta_screen_cast_stream_set_property (GObject      *object,
 | 
			
		||||
    case PROP_CURSOR_MODE:
 | 
			
		||||
      priv->cursor_mode = g_value_get_uint (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_FLAGS:
 | 
			
		||||
      priv->flags = g_value_get_flags (value);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
    }
 | 
			
		||||
@@ -250,9 +234,6 @@ meta_screen_cast_stream_get_property (GObject    *object,
 | 
			
		||||
    case PROP_CURSOR_MODE:
 | 
			
		||||
      g_value_set_uint (value, priv->cursor_mode);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_FLAGS:
 | 
			
		||||
      g_value_set_flags (value, priv->flags);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
    }
 | 
			
		||||
@@ -356,17 +337,6 @@ meta_screen_cast_stream_class_init (MetaScreenCastStreamClass *klass)
 | 
			
		||||
                                                      G_PARAM_CONSTRUCT_ONLY |
 | 
			
		||||
                                                      G_PARAM_STATIC_STRINGS));
 | 
			
		||||
 | 
			
		||||
  g_object_class_install_property (object_class,
 | 
			
		||||
                                   PROP_FLAGS,
 | 
			
		||||
                                   g_param_spec_flags ("flags",
 | 
			
		||||
                                                       "flags",
 | 
			
		||||
                                                       "Screen cast flags",
 | 
			
		||||
                                                       META_TYPE_SCREEN_CAST_FLAG,
 | 
			
		||||
                                                       META_SCREEN_CAST_FLAG_NONE,
 | 
			
		||||
                                                       G_PARAM_READWRITE |
 | 
			
		||||
                                                       G_PARAM_CONSTRUCT_ONLY |
 | 
			
		||||
                                                       G_PARAM_STATIC_STRINGS));
 | 
			
		||||
 | 
			
		||||
  signals[CLOSED] = g_signal_new ("closed",
 | 
			
		||||
                                  G_TYPE_FROM_CLASS (klass),
 | 
			
		||||
                                  G_SIGNAL_RUN_LAST,
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,4 @@ void meta_screen_cast_stream_transform_position (MetaScreenCastStream *stream,
 | 
			
		||||
 | 
			
		||||
MetaScreenCastCursorMode meta_screen_cast_stream_get_cursor_mode (MetaScreenCastStream *stream);
 | 
			
		||||
 | 
			
		||||
MetaScreenCastFlag meta_screen_cast_stream_get_flags (MetaScreenCastStream *stream);
 | 
			
		||||
 | 
			
		||||
#endif /* META_SCREEN_CAST_STREAM_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,6 @@
 | 
			
		||||
#include "backends/meta-screen-cast-window-stream-src.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-backend-private.h"
 | 
			
		||||
#include "backends/meta-cursor-tracker-private.h"
 | 
			
		||||
#include "backends/meta-screen-cast-session.h"
 | 
			
		||||
#include "backends/meta-screen-cast-window.h"
 | 
			
		||||
#include "backends/meta-screen-cast-window-stream.h"
 | 
			
		||||
@@ -307,8 +306,6 @@ static void
 | 
			
		||||
meta_screen_cast_window_stream_src_stop (MetaScreenCastWindowStreamSrc *window_src)
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (window_src);
 | 
			
		||||
  MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src);
 | 
			
		||||
  MetaBackend *backend = get_backend (window_src);
 | 
			
		||||
  MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
 | 
			
		||||
 | 
			
		||||
@@ -323,16 +320,6 @@ meta_screen_cast_window_stream_src_stop (MetaScreenCastWindowStreamSrc *window_s
 | 
			
		||||
                          cursor_tracker);
 | 
			
		||||
  g_clear_signal_handler (&window_src->cursor_changed_handler_id,
 | 
			
		||||
                          cursor_tracker);
 | 
			
		||||
 | 
			
		||||
  switch (meta_screen_cast_stream_get_cursor_mode (stream))
 | 
			
		||||
    {
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_METADATA:
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_EMBEDDED:
 | 
			
		||||
      meta_cursor_tracker_untrack_position (cursor_tracker);
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -451,7 +438,6 @@ meta_screen_cast_window_stream_src_enable (MetaScreenCastStreamSrc *src)
 | 
			
		||||
        g_signal_connect_after (cursor_tracker, "cursor-changed",
 | 
			
		||||
                                G_CALLBACK (cursor_changed),
 | 
			
		||||
                                window_src);
 | 
			
		||||
      meta_cursor_tracker_track_position (cursor_tracker);
 | 
			
		||||
      break;
 | 
			
		||||
    case META_SCREEN_CAST_CURSOR_MODE_HIDDEN:
 | 
			
		||||
      break;
 | 
			
		||||
 
 | 
			
		||||
@@ -84,7 +84,6 @@ meta_screen_cast_window_stream_new (MetaScreenCastSession     *session,
 | 
			
		||||
                                    GDBusConnection           *connection,
 | 
			
		||||
                                    MetaWindow                *window,
 | 
			
		||||
                                    MetaScreenCastCursorMode   cursor_mode,
 | 
			
		||||
                                    MetaScreenCastFlag         flags,
 | 
			
		||||
                                    GError                   **error)
 | 
			
		||||
{
 | 
			
		||||
  return g_initable_new (META_TYPE_SCREEN_CAST_WINDOW_STREAM,
 | 
			
		||||
@@ -93,7 +92,6 @@ meta_screen_cast_window_stream_new (MetaScreenCastSession     *session,
 | 
			
		||||
                         "session", session,
 | 
			
		||||
                         "connection", connection,
 | 
			
		||||
                         "cursor-mode", cursor_mode,
 | 
			
		||||
                         "flags", flags,
 | 
			
		||||
                         "window", window,
 | 
			
		||||
                         NULL);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,6 @@ MetaScreenCastWindowStream * meta_screen_cast_window_stream_new (MetaScreenCastS
 | 
			
		||||
                                                                 GDBusConnection           *connection,
 | 
			
		||||
                                                                 MetaWindow                *window,
 | 
			
		||||
                                                                 MetaScreenCastCursorMode   cursor_mode,
 | 
			
		||||
                                                                 MetaScreenCastFlag         flags,
 | 
			
		||||
                                                                 GError                   **error);
 | 
			
		||||
 | 
			
		||||
MetaWindow  * meta_screen_cast_window_stream_get_window (MetaScreenCastWindowStream *window_stream);
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@
 | 
			
		||||
 | 
			
		||||
#define META_SCREEN_CAST_DBUS_SERVICE "org.gnome.Mutter.ScreenCast"
 | 
			
		||||
#define META_SCREEN_CAST_DBUS_PATH "/org/gnome/Mutter/ScreenCast"
 | 
			
		||||
#define META_SCREEN_CAST_API_VERSION 4
 | 
			
		||||
#define META_SCREEN_CAST_API_VERSION 3
 | 
			
		||||
 | 
			
		||||
struct _MetaScreenCast
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -37,12 +37,6 @@ typedef enum _MetaScreenCastCursorMode
 | 
			
		||||
  META_SCREEN_CAST_CURSOR_MODE_METADATA = 2,
 | 
			
		||||
} MetaScreenCastCursorMode;
 | 
			
		||||
 | 
			
		||||
typedef enum _MetaScreenCastFlag
 | 
			
		||||
{
 | 
			
		||||
  META_SCREEN_CAST_FLAG_NONE = 0,
 | 
			
		||||
  META_SCREEN_CAST_FLAG_IS_RECORDING = 1 << 0,
 | 
			
		||||
} MetaScreenCastFlag;
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_SCREEN_CAST (meta_screen_cast_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (MetaScreenCast, meta_screen_cast,
 | 
			
		||||
                      META, SCREEN_CAST,
 | 
			
		||||
 
 | 
			
		||||
@@ -64,8 +64,8 @@ void meta_settings_enable_experimental_feature (MetaSettings           *settings
 | 
			
		||||
                                                MetaExperimentalFeature feature);
 | 
			
		||||
 | 
			
		||||
void meta_settings_get_xwayland_grab_patterns (MetaSettings  *settings,
 | 
			
		||||
                                               GPtrArray    **allow_list_patterns,
 | 
			
		||||
                                               GPtrArray    **deny_list_patterns);
 | 
			
		||||
                                               GPtrArray    **whitelist_patterns,
 | 
			
		||||
                                               GPtrArray    **blacklist_patterns);
 | 
			
		||||
 | 
			
		||||
gboolean meta_settings_are_xwayland_grabs_allowed (MetaSettings *settings);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -66,8 +66,8 @@ struct _MetaSettings
 | 
			
		||||
  gboolean experimental_features_overridden;
 | 
			
		||||
 | 
			
		||||
  gboolean xwayland_allow_grabs;
 | 
			
		||||
  GPtrArray *xwayland_grab_allow_list_patterns;
 | 
			
		||||
  GPtrArray *xwayland_grab_deny_list_patterns;
 | 
			
		||||
  GPtrArray *xwayland_grab_whitelist_patterns;
 | 
			
		||||
  GPtrArray *xwayland_grab_blacklist_patterns;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaSettings, meta_settings, G_TYPE_OBJECT)
 | 
			
		||||
@@ -321,12 +321,12 @@ static void
 | 
			
		||||
xwayland_grab_list_add_item (MetaSettings *settings,
 | 
			
		||||
                             char         *item)
 | 
			
		||||
{
 | 
			
		||||
  /* If first character is '!', it's a denied value */
 | 
			
		||||
  /* If first character is '!', it's a blacklisted item */
 | 
			
		||||
  if (item[0] != '!')
 | 
			
		||||
    g_ptr_array_add (settings->xwayland_grab_allow_list_patterns,
 | 
			
		||||
    g_ptr_array_add (settings->xwayland_grab_whitelist_patterns,
 | 
			
		||||
                     g_pattern_spec_new (item));
 | 
			
		||||
  else if (item[1] != 0)
 | 
			
		||||
    g_ptr_array_add (settings->xwayland_grab_deny_list_patterns,
 | 
			
		||||
    g_ptr_array_add (settings->xwayland_grab_blacklist_patterns,
 | 
			
		||||
                     g_pattern_spec_new (&item[1]));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -356,14 +356,14 @@ update_xwayland_grab_access_rules (MetaSettings *settings)
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  /* Free previous patterns and create new arrays */
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_allow_list_patterns,
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_whitelist_patterns,
 | 
			
		||||
                   g_ptr_array_unref);
 | 
			
		||||
  settings->xwayland_grab_allow_list_patterns =
 | 
			
		||||
  settings->xwayland_grab_whitelist_patterns =
 | 
			
		||||
    g_ptr_array_new_with_free_func ((GDestroyNotify) g_pattern_spec_free);
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_deny_list_patterns,
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_blacklist_patterns,
 | 
			
		||||
                   g_ptr_array_unref);
 | 
			
		||||
  settings->xwayland_grab_deny_list_patterns =
 | 
			
		||||
  settings->xwayland_grab_blacklist_patterns =
 | 
			
		||||
    g_ptr_array_new_with_free_func ((GDestroyNotify) g_pattern_spec_free);
 | 
			
		||||
 | 
			
		||||
  /* Add system defaults values */
 | 
			
		||||
@@ -405,11 +405,11 @@ wayland_settings_changed (GSettings    *wayland_settings,
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_settings_get_xwayland_grab_patterns (MetaSettings  *settings,
 | 
			
		||||
                                          GPtrArray    **allow_list_patterns,
 | 
			
		||||
                                          GPtrArray    **deny_list_patterns)
 | 
			
		||||
                                          GPtrArray    **whitelist_patterns,
 | 
			
		||||
                                          GPtrArray    **blacklist_patterns)
 | 
			
		||||
{
 | 
			
		||||
  *allow_list_patterns = settings->xwayland_grab_allow_list_patterns;
 | 
			
		||||
  *deny_list_patterns = settings->xwayland_grab_deny_list_patterns;
 | 
			
		||||
  *whitelist_patterns = settings->xwayland_grab_whitelist_patterns;
 | 
			
		||||
  *blacklist_patterns = settings->xwayland_grab_blacklist_patterns;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
@@ -437,9 +437,9 @@ meta_settings_dispose (GObject *object)
 | 
			
		||||
  g_clear_object (&settings->mutter_settings);
 | 
			
		||||
  g_clear_object (&settings->interface_settings);
 | 
			
		||||
  g_clear_object (&settings->wayland_settings);
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_allow_list_patterns,
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_whitelist_patterns,
 | 
			
		||||
                   g_ptr_array_unref);
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_deny_list_patterns,
 | 
			
		||||
  g_clear_pointer (&settings->xwayland_grab_blacklist_patterns,
 | 
			
		||||
                   g_ptr_array_unref);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_settings_parent_class)->dispose (object);
 | 
			
		||||
 
 | 
			
		||||
@@ -54,11 +54,6 @@ void              meta_stage_update_cursor_overlay   (MetaStage       *stage,
 | 
			
		||||
                                                      CoglTexture     *texture,
 | 
			
		||||
                                                      graphene_rect_t *rect);
 | 
			
		||||
 | 
			
		||||
void meta_overlay_set_visible (MetaOverlay *overlay,
 | 
			
		||||
                               gboolean     is_visible);
 | 
			
		||||
 | 
			
		||||
gboolean meta_overlay_is_visible (MetaOverlay *overlay);
 | 
			
		||||
 | 
			
		||||
void meta_stage_set_active (MetaStage *stage,
 | 
			
		||||
                            gboolean   is_active);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@
 | 
			
		||||
#include "backends/meta-stage-private.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-backend-private.h"
 | 
			
		||||
#include "backends/meta-cursor-tracker-private.h"
 | 
			
		||||
#include "clutter/clutter-mutter.h"
 | 
			
		||||
#include "meta/meta-backend.h"
 | 
			
		||||
#include "meta/meta-monitor-manager.h"
 | 
			
		||||
@@ -51,9 +50,7 @@ struct _MetaStageWatch
 | 
			
		||||
 | 
			
		||||
struct _MetaOverlay
 | 
			
		||||
{
 | 
			
		||||
  MetaStage *stage;
 | 
			
		||||
 | 
			
		||||
  gboolean is_visible;
 | 
			
		||||
  gboolean enabled;
 | 
			
		||||
 | 
			
		||||
  CoglPipeline *pipeline;
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
@@ -67,8 +64,6 @@ struct _MetaStage
 | 
			
		||||
{
 | 
			
		||||
  ClutterStage parent;
 | 
			
		||||
 | 
			
		||||
  MetaBackend *backend;
 | 
			
		||||
 | 
			
		||||
  GPtrArray *watchers[N_WATCH_MODES];
 | 
			
		||||
 | 
			
		||||
  GList *overlays;
 | 
			
		||||
@@ -78,15 +73,12 @@ struct _MetaStage
 | 
			
		||||
G_DEFINE_TYPE (MetaStage, meta_stage, CLUTTER_TYPE_STAGE);
 | 
			
		||||
 | 
			
		||||
static MetaOverlay *
 | 
			
		||||
meta_overlay_new (MetaStage *stage)
 | 
			
		||||
meta_overlay_new (void)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBackend *clutter_backend =
 | 
			
		||||
    meta_backend_get_clutter_backend (stage->backend);
 | 
			
		||||
  CoglContext *ctx = clutter_backend_get_cogl_context (clutter_backend);
 | 
			
		||||
  MetaOverlay *overlay;
 | 
			
		||||
  CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
 | 
			
		||||
 | 
			
		||||
  overlay = g_slice_new0 (MetaOverlay);
 | 
			
		||||
  overlay->stage = stage;
 | 
			
		||||
  overlay->pipeline = cogl_pipeline_new (ctx);
 | 
			
		||||
 | 
			
		||||
  return overlay;
 | 
			
		||||
@@ -111,9 +103,15 @@ meta_overlay_set (MetaOverlay     *overlay,
 | 
			
		||||
      overlay->texture = texture;
 | 
			
		||||
 | 
			
		||||
      if (texture)
 | 
			
		||||
        cogl_pipeline_set_layer_texture (overlay->pipeline, 0, texture);
 | 
			
		||||
        {
 | 
			
		||||
          cogl_pipeline_set_layer_texture (overlay->pipeline, 0, texture);
 | 
			
		||||
          overlay->enabled = TRUE;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        cogl_pipeline_set_layer_texture (overlay->pipeline, 0, NULL);
 | 
			
		||||
        {
 | 
			
		||||
          cogl_pipeline_set_layer_texture (overlay->pipeline, 0, NULL);
 | 
			
		||||
          overlay->enabled = FALSE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  overlay->current_rect = *rect;
 | 
			
		||||
@@ -125,13 +123,10 @@ meta_overlay_paint (MetaOverlay         *overlay,
 | 
			
		||||
{
 | 
			
		||||
  CoglFramebuffer *framebuffer;
 | 
			
		||||
 | 
			
		||||
  if (!overlay->texture)
 | 
			
		||||
  if (!overlay->enabled)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (!overlay->is_visible &&
 | 
			
		||||
      !(clutter_paint_context_get_paint_flags (paint_context) &
 | 
			
		||||
        CLUTTER_PAINT_FLAG_FORCE_CURSORS))
 | 
			
		||||
    return;
 | 
			
		||||
  g_assert (meta_is_wayland_compositor ());
 | 
			
		||||
 | 
			
		||||
  framebuffer = clutter_paint_context_get_framebuffer (paint_context);
 | 
			
		||||
  cogl_framebuffer_draw_rectangle (framebuffer,
 | 
			
		||||
@@ -198,6 +193,7 @@ meta_stage_paint (ClutterActor        *actor,
 | 
			
		||||
{
 | 
			
		||||
  MetaStage *stage = META_STAGE (actor);
 | 
			
		||||
  ClutterStageView *view;
 | 
			
		||||
  GList *l;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor, paint_context);
 | 
			
		||||
 | 
			
		||||
@@ -210,26 +206,11 @@ meta_stage_paint (ClutterActor        *actor,
 | 
			
		||||
 | 
			
		||||
  g_signal_emit (stage, signals[ACTORS_PAINTED], 0);
 | 
			
		||||
 | 
			
		||||
  if ((clutter_paint_context_get_paint_flags (paint_context) &
 | 
			
		||||
       CLUTTER_PAINT_FLAG_FORCE_CURSORS))
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursorTracker *cursor_tracker =
 | 
			
		||||
        meta_backend_get_cursor_tracker (stage->backend);
 | 
			
		||||
 | 
			
		||||
      meta_cursor_tracker_track_position (cursor_tracker);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!(clutter_paint_context_get_paint_flags (paint_context) &
 | 
			
		||||
        CLUTTER_PAINT_FLAG_NO_CURSORS))
 | 
			
		||||
    g_list_foreach (stage->overlays, (GFunc) meta_overlay_paint, paint_context);
 | 
			
		||||
 | 
			
		||||
  if ((clutter_paint_context_get_paint_flags (paint_context) &
 | 
			
		||||
       CLUTTER_PAINT_FLAG_FORCE_CURSORS))
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursorTracker *cursor_tracker =
 | 
			
		||||
        meta_backend_get_cursor_tracker (stage->backend);
 | 
			
		||||
 | 
			
		||||
      meta_cursor_tracker_untrack_position (cursor_tracker);
 | 
			
		||||
      for (l = stage->overlays; l; l = l->next)
 | 
			
		||||
        meta_overlay_paint (l->data, paint_context);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (view)
 | 
			
		||||
@@ -324,7 +305,6 @@ meta_stage_new (MetaBackend *backend)
 | 
			
		||||
  MetaMonitorManager *monitor_manager;
 | 
			
		||||
 | 
			
		||||
  stage = g_object_new (META_TYPE_STAGE, NULL);
 | 
			
		||||
  stage->backend = backend;
 | 
			
		||||
 | 
			
		||||
  monitor_manager = meta_backend_get_monitor_manager (backend);
 | 
			
		||||
  g_signal_connect (monitor_manager, "power-save-mode-changed",
 | 
			
		||||
@@ -366,7 +346,7 @@ queue_redraw_for_overlay (MetaStage   *stage,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Draw the overlay at the new position */
 | 
			
		||||
  if (overlay->is_visible && overlay->texture)
 | 
			
		||||
  if (overlay->enabled)
 | 
			
		||||
    queue_redraw_clutter_rect (stage, overlay, &overlay->current_rect);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -375,7 +355,7 @@ meta_stage_create_cursor_overlay (MetaStage *stage)
 | 
			
		||||
{
 | 
			
		||||
  MetaOverlay *overlay;
 | 
			
		||||
 | 
			
		||||
  overlay = meta_overlay_new (stage);
 | 
			
		||||
  overlay = meta_overlay_new ();
 | 
			
		||||
  stage->overlays = g_list_prepend (stage->overlays, overlay);
 | 
			
		||||
 | 
			
		||||
  return overlay;
 | 
			
		||||
@@ -401,27 +381,12 @@ meta_stage_update_cursor_overlay (MetaStage       *stage,
 | 
			
		||||
                                  CoglTexture     *texture,
 | 
			
		||||
                                  graphene_rect_t *rect)
 | 
			
		||||
{
 | 
			
		||||
  g_assert (meta_is_wayland_compositor () || texture == NULL);
 | 
			
		||||
 | 
			
		||||
  meta_overlay_set (overlay, texture, rect);
 | 
			
		||||
  queue_redraw_for_overlay (stage, overlay);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_overlay_set_visible (MetaOverlay *overlay,
 | 
			
		||||
                          gboolean     is_visible)
 | 
			
		||||
{
 | 
			
		||||
  if (overlay->is_visible == is_visible)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  overlay->is_visible = is_visible;
 | 
			
		||||
  queue_redraw_for_overlay (overlay->stage, overlay);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_overlay_is_visible (MetaOverlay *overlay)
 | 
			
		||||
{
 | 
			
		||||
  return overlay->is_visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_stage_set_active (MetaStage *stage,
 | 
			
		||||
                       gboolean   is_active)
 | 
			
		||||
 
 | 
			
		||||
@@ -554,7 +554,7 @@ on_udev_device_added (MetaUdev          *udev,
 | 
			
		||||
 | 
			
		||||
  device_path = g_udev_device_get_device_file (device);
 | 
			
		||||
 | 
			
		||||
  gpus = meta_backend_get_gpus (backend);
 | 
			
		||||
  gpus = meta_backend_get_gpus (backend);;
 | 
			
		||||
  for (l = gpus; l; l = l->next)
 | 
			
		||||
    {
 | 
			
		||||
      MetaGpuKms *gpu_kms = l->data;
 | 
			
		||||
 
 | 
			
		||||
@@ -291,7 +291,7 @@ meta_crtc_kms_new (MetaGpuKms  *gpu_kms,
 | 
			
		||||
  primary_plane = meta_kms_device_get_primary_plane_for (kms_device,
 | 
			
		||||
                                                         kms_crtc);
 | 
			
		||||
  crtc_kms = g_object_new (META_TYPE_CRTC_KMS,
 | 
			
		||||
                           "id", (uint64_t) meta_kms_crtc_get_id (kms_crtc),
 | 
			
		||||
                           "id", meta_kms_crtc_get_id (kms_crtc),
 | 
			
		||||
                           "gpu", gpu,
 | 
			
		||||
                           NULL);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -183,6 +183,16 @@ timespec_to_nanoseconds (const struct timespec *ts)
 | 
			
		||||
  return ((int64_t) ts->tv_sec) * one_billion + ts->tv_nsec;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_gpu_kms_wait_for_flip (MetaGpuKms *gpu_kms,
 | 
			
		||||
                            GError    **error)
 | 
			
		||||
{
 | 
			
		||||
  if (meta_kms_device_dispatch_sync (gpu_kms->kms_device, error) < 0)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaKmsDevice *
 | 
			
		||||
meta_gpu_kms_get_kms_device (MetaGpuKms *gpu_kms)
 | 
			
		||||
{
 | 
			
		||||
@@ -506,7 +516,7 @@ init_outputs (MetaGpuKms *gpu_kms)
 | 
			
		||||
      GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
      connector_state = meta_kms_connector_get_current_state (kms_connector);
 | 
			
		||||
      if (!connector_state || connector_state->non_desktop)
 | 
			
		||||
      if (!connector_state)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      old_output =
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,9 @@ gboolean meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms,
 | 
			
		||||
gboolean meta_gpu_kms_is_boot_vga (MetaGpuKms *gpu_kms);
 | 
			
		||||
gboolean meta_gpu_kms_is_platform_device (MetaGpuKms *gpu_kms);
 | 
			
		||||
 | 
			
		||||
gboolean meta_gpu_kms_wait_for_flip (MetaGpuKms *gpu_kms,
 | 
			
		||||
                                     GError    **error);
 | 
			
		||||
 | 
			
		||||
MetaKmsDevice * meta_gpu_kms_get_kms_device (MetaGpuKms *gpu_kms);
 | 
			
		||||
 | 
			
		||||
int meta_gpu_kms_get_fd (MetaGpuKms *gpu_kms);
 | 
			
		||||
 
 | 
			
		||||
@@ -206,9 +206,6 @@ state_set_properties (MetaKmsConnectorState *state,
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_ENUM) &&
 | 
			
		||||
               strcmp (prop->name, "panel orientation") == 0)
 | 
			
		||||
        set_panel_orientation (state, prop, drm_connector->prop_values[i]);
 | 
			
		||||
      if ((prop->flags & DRM_MODE_PROP_RANGE) &&
 | 
			
		||||
          strcmp (prop->name, "non-desktop") == 0)
 | 
			
		||||
        state->non_desktop = drm_connector->prop_values[i];
 | 
			
		||||
 | 
			
		||||
      drmModeFreeProperty (prop);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,6 @@ typedef struct _MetaKmsConnectorState
 | 
			
		||||
  GBytes *edid_data;
 | 
			
		||||
 | 
			
		||||
  gboolean has_scaling;
 | 
			
		||||
  gboolean non_desktop;
 | 
			
		||||
 | 
			
		||||
  CoglSubpixelOrder subpixel_order;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -174,6 +174,53 @@ meta_kms_device_predict_states_in_impl (MetaKmsDevice *device,
 | 
			
		||||
  meta_kms_impl_device_predict_states (impl_device, update);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gpointer
 | 
			
		||||
dispatch_in_impl (MetaKmsImpl  *impl,
 | 
			
		||||
                  gpointer      user_data,
 | 
			
		||||
                  GError      **error)
 | 
			
		||||
{
 | 
			
		||||
  MetaKmsImplDevice *impl_device = META_KMS_IMPL_DEVICE (user_data);
 | 
			
		||||
  gboolean ret;
 | 
			
		||||
 | 
			
		||||
  ret = meta_kms_impl_device_dispatch (impl_device, error);
 | 
			
		||||
  return GINT_TO_POINTER (ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gpointer
 | 
			
		||||
dispatch_idle_in_impl (MetaKmsImpl  *impl,
 | 
			
		||||
                       gpointer      user_data,
 | 
			
		||||
                       GError      **error)
 | 
			
		||||
{
 | 
			
		||||
  meta_kms_impl_dispatch_idle (impl);
 | 
			
		||||
 | 
			
		||||
  return GINT_TO_POINTER (TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
meta_kms_device_dispatch_sync (MetaKmsDevice  *device,
 | 
			
		||||
                               GError        **error)
 | 
			
		||||
{
 | 
			
		||||
  int callback_count;
 | 
			
		||||
 | 
			
		||||
  if (!meta_kms_run_impl_task_sync (device->kms,
 | 
			
		||||
                                    dispatch_idle_in_impl,
 | 
			
		||||
                                    device->impl_device,
 | 
			
		||||
                                    error))
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  callback_count = meta_kms_flush_callbacks (device->kms);
 | 
			
		||||
  if (callback_count > 0)
 | 
			
		||||
    return TRUE;
 | 
			
		||||
 | 
			
		||||
  if (!meta_kms_run_impl_task_sync (device->kms,
 | 
			
		||||
                                    dispatch_in_impl,
 | 
			
		||||
                                    device->impl_device,
 | 
			
		||||
                                    error))
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  return meta_kms_flush_callbacks (device->kms);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_kms_device_add_fake_plane_in_impl (MetaKmsDevice    *device,
 | 
			
		||||
                                        MetaKmsPlaneType  plane_type,
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,9 @@ MetaKmsPlane * meta_kms_device_get_primary_plane_for (MetaKmsDevice *device,
 | 
			
		||||
MetaKmsPlane * meta_kms_device_get_cursor_plane_for (MetaKmsDevice *device,
 | 
			
		||||
                                                     MetaKmsCrtc   *crtc);
 | 
			
		||||
 | 
			
		||||
int meta_kms_device_dispatch_sync (MetaKmsDevice  *device,
 | 
			
		||||
                                   GError        **error);
 | 
			
		||||
 | 
			
		||||
MetaKmsDevice * meta_kms_device_new (MetaKms            *kms,
 | 
			
		||||
                                     const char         *path,
 | 
			
		||||
                                     MetaKmsDeviceFlag   flags,
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,8 @@ void meta_kms_queue_callback (MetaKms         *kms,
 | 
			
		||||
                              gpointer         user_data,
 | 
			
		||||
                              GDestroyNotify   user_data_destroy);
 | 
			
		||||
 | 
			
		||||
int meta_kms_flush_callbacks (MetaKms *kms);
 | 
			
		||||
 | 
			
		||||
gpointer meta_kms_run_impl_task_sync (MetaKms              *kms,
 | 
			
		||||
                                      MetaKmsImplTaskFunc   func,
 | 
			
		||||
                                      gpointer              user_data,
 | 
			
		||||
 
 | 
			
		||||
@@ -318,6 +318,17 @@ meta_kms_queue_callback (MetaKms         *kms,
 | 
			
		||||
    kms->callback_source_id = g_idle_add (callback_idle, kms);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
meta_kms_flush_callbacks (MetaKms *kms)
 | 
			
		||||
{
 | 
			
		||||
  int callback_count;
 | 
			
		||||
 | 
			
		||||
  callback_count = flush_callbacks (kms);
 | 
			
		||||
  g_clear_handle_id (&kms->callback_source_id, g_source_remove);
 | 
			
		||||
 | 
			
		||||
  return callback_count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gpointer
 | 
			
		||||
meta_kms_run_impl_task_sync (MetaKms              *kms,
 | 
			
		||||
                             MetaKmsImplTaskFunc   func,
 | 
			
		||||
@@ -472,7 +483,7 @@ update_states_in_impl (MetaKmsImpl  *impl,
 | 
			
		||||
                       gpointer      user_data,
 | 
			
		||||
                       GError      **error)
 | 
			
		||||
{
 | 
			
		||||
  MetaKms *kms = meta_kms_impl_get_kms (impl);
 | 
			
		||||
  MetaKms *kms = meta_kms_impl_get_kms (impl);;
 | 
			
		||||
 | 
			
		||||
  meta_kms_update_states_in_impl (kms);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1063,6 +1063,11 @@ notify_view_crtc_presented (MetaRendererView *view,
 | 
			
		||||
  MetaCrtc *crtc;
 | 
			
		||||
  MetaRendererNativeGpuData *renderer_gpu_data;
 | 
			
		||||
 | 
			
		||||
  /* Only keep the frame info for the fastest CRTC in use, which may not be
 | 
			
		||||
   * the first one to complete a flip. By only telling the compositor about the
 | 
			
		||||
   * fastest monitor(s) we direct it to produce new frames fast enough to
 | 
			
		||||
   * satisfy all monitors.
 | 
			
		||||
   */
 | 
			
		||||
  frame_info = g_queue_peek_tail (&onscreen->pending_frame_infos);
 | 
			
		||||
 | 
			
		||||
  crtc = META_CRTC (meta_crtc_kms_from_kms_crtc (kms_crtc));
 | 
			
		||||
@@ -2195,6 +2200,13 @@ meta_renderer_native_init_egl_context (CoglContext *cogl_context,
 | 
			
		||||
                  COGL_WINSYS_FEATURE_MULTIPLE_ONSCREEN,
 | 
			
		||||
                  TRUE);
 | 
			
		||||
 | 
			
		||||
  /* COGL_WINSYS_FEATURE_SWAP_THROTTLE is always true for this renderer
 | 
			
		||||
   * because we have the call to wait_for_pending_flips on every frame.
 | 
			
		||||
   */
 | 
			
		||||
  COGL_FLAGS_SET (cogl_context->winsys_features,
 | 
			
		||||
                  COGL_WINSYS_FEATURE_SWAP_THROTTLE,
 | 
			
		||||
                  TRUE);
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_EGL_DEVICE
 | 
			
		||||
  if (renderer_gpu_data->mode == META_RENDERER_NATIVE_MODE_EGL_DEVICE)
 | 
			
		||||
    COGL_FLAGS_SET (cogl_context->features,
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,6 @@
 | 
			
		||||
#include "backends/meta-backend-private.h"
 | 
			
		||||
#include "backends/meta-dnd-private.h"
 | 
			
		||||
#include "backends/x11/meta-cursor-renderer-x11.h"
 | 
			
		||||
#include "backends/x11/meta-cursor-tracker-x11.h"
 | 
			
		||||
#include "backends/x11/meta-gpu-xrandr.h"
 | 
			
		||||
#include "backends/x11/meta-input-settings-x11.h"
 | 
			
		||||
#include "backends/x11/meta-monitor-manager-xrandr.h"
 | 
			
		||||
@@ -123,14 +122,6 @@ meta_backend_x11_cm_create_cursor_renderer (MetaBackend *backend)
 | 
			
		||||
                       NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorTracker *
 | 
			
		||||
meta_backend_x11_cm_create_cursor_tracker (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  return g_object_new (META_TYPE_CURSOR_TRACKER_X11,
 | 
			
		||||
                       "backend", backend,
 | 
			
		||||
                       NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaInputSettings *
 | 
			
		||||
meta_backend_x11_cm_create_input_settings (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
@@ -445,7 +436,6 @@ meta_backend_x11_cm_class_init (MetaBackendX11CmClass *klass)
 | 
			
		||||
  backend_class->create_renderer = meta_backend_x11_cm_create_renderer;
 | 
			
		||||
  backend_class->create_monitor_manager = meta_backend_x11_cm_create_monitor_manager;
 | 
			
		||||
  backend_class->create_cursor_renderer = meta_backend_x11_cm_create_cursor_renderer;
 | 
			
		||||
  backend_class->create_cursor_tracker = meta_backend_x11_cm_create_cursor_tracker;
 | 
			
		||||
  backend_class->create_input_settings = meta_backend_x11_cm_create_input_settings;
 | 
			
		||||
  backend_class->update_screen_size = meta_backend_x11_cm_update_screen_size;
 | 
			
		||||
  backend_class->select_stage_events = meta_backend_x11_cm_select_stage_events;
 | 
			
		||||
 
 | 
			
		||||
@@ -244,7 +244,7 @@ meta_crtc_xrandr_new (MetaGpuXrandr      *gpu_xrandr,
 | 
			
		||||
  all_transforms =
 | 
			
		||||
    meta_monitor_transform_from_xrandr_all (xrandr_crtc->rotations);
 | 
			
		||||
  crtc_xrandr = g_object_new (META_TYPE_CRTC_XRANDR,
 | 
			
		||||
                              "id", (uint64_t) crtc_id,
 | 
			
		||||
                              "id", crtc_id,
 | 
			
		||||
                              "gpu", gpu,
 | 
			
		||||
                              "all-transforms", all_transforms,
 | 
			
		||||
                              NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
      priv->server_cursor_visible = has_server_cursor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
  if (!priv->server_cursor_visible && cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  return priv->server_cursor_visible;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,188 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2020 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.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/x11/meta-cursor-tracker-x11.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
 | 
			
		||||
#include "clutter/clutter-private.h"
 | 
			
		||||
#include "meta/meta-x11-errors.h"
 | 
			
		||||
#include "x11/meta-x11-display-private.h"
 | 
			
		||||
 | 
			
		||||
#define UPDATE_POSITION_TIMEOUT_MS (ms (100))
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorTrackerX11
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker parent;
 | 
			
		||||
 | 
			
		||||
  gboolean is_force_track_position_enabled;
 | 
			
		||||
  guint update_position_timeout_id;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSpriteXfixes *xfixes_cursor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaCursorTrackerX11, meta_cursor_tracker_x11,
 | 
			
		||||
               META_TYPE_CURSOR_TRACKER)
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
ensure_xfixes_cursor (MetaCursorTrackerX11 *tracker_x11);
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_cursor_tracker_x11_handle_xevent (MetaCursorTrackerX11 *tracker_x11,
 | 
			
		||||
                                       XEvent               *xevent)
 | 
			
		||||
{
 | 
			
		||||
  MetaX11Display *x11_display = meta_get_display ()->x11_display;
 | 
			
		||||
  XFixesCursorNotifyEvent *notify_event;
 | 
			
		||||
 | 
			
		||||
  if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  notify_event = (XFixesCursorNotifyEvent *)xevent;
 | 
			
		||||
  if (notify_event->subtype != XFixesDisplayCursorNotify)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&tracker_x11->xfixes_cursor);
 | 
			
		||||
  meta_cursor_tracker_notify_cursor_changed (META_CURSOR_TRACKER (tracker_x11));
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
update_position (MetaCursorTrackerX11 *tracker_x11)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker *tracker = META_CURSOR_TRACKER (tracker_x11);
 | 
			
		||||
  int x, y;
 | 
			
		||||
 | 
			
		||||
  meta_cursor_tracker_get_pointer (tracker, &x, &y, NULL);
 | 
			
		||||
  meta_cursor_tracker_update_position (tracker, x, y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
ensure_xfixes_cursor (MetaCursorTrackerX11 *tracker_x11)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = meta_get_display ();
 | 
			
		||||
  g_autoptr (GError) error = NULL;
 | 
			
		||||
 | 
			
		||||
  if (tracker_x11->xfixes_cursor)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  tracker_x11->xfixes_cursor = meta_cursor_sprite_xfixes_new (display, &error);
 | 
			
		||||
  if (!tracker_x11->xfixes_cursor)
 | 
			
		||||
    g_warning ("Failed to create XFIXES cursor: %s", error->message);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
update_cursor_timeout (gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerX11 *tracker_x11 = user_data;
 | 
			
		||||
  MetaCursorTracker *tracker = META_CURSOR_TRACKER (tracker_x11);
 | 
			
		||||
  MetaBackend *backend = meta_cursor_tracker_get_backend (tracker);
 | 
			
		||||
  MetaCursorRenderer *cursor_renderer =
 | 
			
		||||
    meta_backend_get_cursor_renderer (backend);
 | 
			
		||||
  gboolean cursor_changed;
 | 
			
		||||
  MetaCursorSprite *cursor_sprite;
 | 
			
		||||
 | 
			
		||||
  update_position (tracker_x11);
 | 
			
		||||
 | 
			
		||||
  cursor_changed = ensure_xfixes_cursor (tracker_x11);
 | 
			
		||||
 | 
			
		||||
  if (tracker_x11->xfixes_cursor)
 | 
			
		||||
    cursor_sprite = META_CURSOR_SPRITE (tracker_x11->xfixes_cursor);
 | 
			
		||||
  else
 | 
			
		||||
    cursor_sprite = NULL;
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_update_stage_overlay (cursor_renderer, cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  if (cursor_changed)
 | 
			
		||||
    meta_cursor_tracker_notify_cursor_changed (tracker);
 | 
			
		||||
 | 
			
		||||
  return G_SOURCE_CONTINUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_x11_set_force_track_position (MetaCursorTracker *tracker,
 | 
			
		||||
                                                  gboolean           is_enabled)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerX11 *tracker_x11 = META_CURSOR_TRACKER_X11 (tracker);
 | 
			
		||||
 | 
			
		||||
  if (tracker_x11->is_force_track_position_enabled == is_enabled)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  tracker_x11->is_force_track_position_enabled = is_enabled;
 | 
			
		||||
 | 
			
		||||
  if (is_enabled)
 | 
			
		||||
    {
 | 
			
		||||
      tracker_x11->update_position_timeout_id =
 | 
			
		||||
        g_timeout_add (UPDATE_POSITION_TIMEOUT_MS,
 | 
			
		||||
                       update_cursor_timeout,
 | 
			
		||||
                       tracker_x11);
 | 
			
		||||
      update_position (tracker_x11);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      g_clear_handle_id (&tracker_x11->update_position_timeout_id,
 | 
			
		||||
                         g_source_remove);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorSprite *
 | 
			
		||||
meta_cursor_tracker_x11_get_sprite (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerX11 *tracker_x11 = META_CURSOR_TRACKER_X11 (tracker);
 | 
			
		||||
 | 
			
		||||
  ensure_xfixes_cursor (META_CURSOR_TRACKER_X11 (tracker));
 | 
			
		||||
  if (tracker_x11->xfixes_cursor)
 | 
			
		||||
    return META_CURSOR_SPRITE (tracker_x11->xfixes_cursor);
 | 
			
		||||
  else
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_x11_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTrackerX11 *tracker_x11 = META_CURSOR_TRACKER_X11 (object);
 | 
			
		||||
 | 
			
		||||
  g_clear_handle_id (&tracker_x11->update_position_timeout_id, g_source_remove);
 | 
			
		||||
  g_clear_object (&tracker_x11->xfixes_cursor);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_cursor_tracker_x11_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_x11_init (MetaCursorTrackerX11 *tracker_x11)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_tracker_x11_class_init (MetaCursorTrackerX11Class *klass)
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
  MetaCursorTrackerClass *tracker_class = META_CURSOR_TRACKER_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  object_class->dispose = meta_cursor_tracker_x11_dispose;
 | 
			
		||||
 | 
			
		||||
  tracker_class->set_force_track_position =
 | 
			
		||||
    meta_cursor_tracker_x11_set_force_track_position;
 | 
			
		||||
  tracker_class->get_sprite =
 | 
			
		||||
    meta_cursor_tracker_x11_get_sprite;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2020 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.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef META_CURSOR_TRACKER_X11_H
 | 
			
		||||
#define META_CURSOR_TRACKER_X11_H
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-cursor-tracker-private.h"
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_CURSOR_TRACKER_X11 (meta_cursor_tracker_x11_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (MetaCursorTrackerX11, meta_cursor_tracker_x11,
 | 
			
		||||
                      META, CURSOR_TRACKER_X11,
 | 
			
		||||
                      MetaCursorTracker)
 | 
			
		||||
 | 
			
		||||
gboolean meta_cursor_tracker_x11_handle_xevent (MetaCursorTrackerX11 *tracker_x11,
 | 
			
		||||
                                                XEvent               *xevent);
 | 
			
		||||
 | 
			
		||||
#endif /* META_CURSOR_TRACKER_X11_H */
 | 
			
		||||
@@ -154,7 +154,7 @@ meta_gpu_xrandr_read_current (MetaGpu  *gpu,
 | 
			
		||||
 | 
			
		||||
      crtc_mode_name = get_xmode_name (xmode);
 | 
			
		||||
      mode = g_object_new (META_TYPE_CRTC_MODE,
 | 
			
		||||
                           "id", (uint64_t) xmode->id,
 | 
			
		||||
                           "id", xmode->id,
 | 
			
		||||
                           "name", crtc_mode_name,
 | 
			
		||||
                           "info", crtc_mode_info,
 | 
			
		||||
                           NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -871,7 +871,7 @@ meta_output_xrandr_new (MetaGpuXrandr *gpu_xrandr,
 | 
			
		||||
  output_info_init_backlight_limits_xrandr (output_info, xdisplay, output_id);
 | 
			
		||||
 | 
			
		||||
  output = g_object_new (META_TYPE_OUTPUT_XRANDR,
 | 
			
		||||
                         "id", (uint64_t) output_id,
 | 
			
		||||
                         "id", output_id,
 | 
			
		||||
                         "gpu", gpu_xrandr,
 | 
			
		||||
                         "info", output_info,
 | 
			
		||||
                         NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -1113,7 +1113,6 @@ meta_compositor_real_after_paint (MetaCompositor   *compositor,
 | 
			
		||||
{
 | 
			
		||||
  MetaCompositorPrivate *priv =
 | 
			
		||||
    meta_compositor_get_instance_private (compositor);
 | 
			
		||||
  ClutterActor *stage_actor = meta_backend_get_stage (priv->backend);
 | 
			
		||||
  CoglGraphicsResetStatus status;
 | 
			
		||||
  GList *l;
 | 
			
		||||
 | 
			
		||||
@@ -1125,8 +1124,7 @@ meta_compositor_real_after_paint (MetaCompositor   *compositor,
 | 
			
		||||
 | 
			
		||||
    case COGL_GRAPHICS_RESET_STATUS_PURGED_CONTEXT_RESET:
 | 
			
		||||
      g_signal_emit_by_name (priv->display, "gl-video-memory-purged");
 | 
			
		||||
      g_signal_emit_by_name (stage_actor, "gl-video-memory-purged");
 | 
			
		||||
      clutter_actor_queue_redraw (stage_actor);
 | 
			
		||||
      clutter_actor_queue_redraw (meta_backend_get_stage (priv->backend));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
 
 | 
			
		||||
@@ -912,7 +912,7 @@ meta_background_get_texture (MetaBackground         *self,
 | 
			
		||||
                                     (1 - self->blend_factor),
 | 
			
		||||
                                     (1 - self->blend_factor),
 | 
			
		||||
                                     (1 - self->blend_factor),
 | 
			
		||||
                                     (1 - self->blend_factor));
 | 
			
		||||
                                     (1 - self->blend_factor));;
 | 
			
		||||
          cogl_pipeline_set_layer_texture (pipeline, 0, texture1);
 | 
			
		||||
          cogl_pipeline_set_layer_wrap_mode (pipeline, 0, get_wrap_mode (self->style));
 | 
			
		||||
          cogl_pipeline_set_layer_max_mipmap_level (pipeline, 0, mipmap_level);
 | 
			
		||||
 
 | 
			
		||||
@@ -1223,7 +1223,7 @@ handle_updates (MetaWindowActorX11 *actor_x11)
 | 
			
		||||
      meta_surface_actor_x11_handle_updates (surface_x11);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (META_IS_SURFACE_ACTOR_X11 (surface) &&
 | 
			
		||||
  if (!META_IS_SURFACE_ACTOR_X11 (surface) ||
 | 
			
		||||
      !meta_surface_actor_x11_is_visible (META_SURFACE_ACTOR_X11 (surface)))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -758,7 +758,7 @@ try_flip_window_position (MetaWindow                       *window,
 | 
			
		||||
                          int                              *rel_y,
 | 
			
		||||
                          MetaRectangle                    *intersection)
 | 
			
		||||
{
 | 
			
		||||
  MetaPlacementRule flipped_rule = *placement_rule;
 | 
			
		||||
  MetaPlacementRule flipped_rule = *placement_rule;;
 | 
			
		||||
  MetaRectangle flipped_rect;
 | 
			
		||||
  MetaRectangle flipped_intersection;
 | 
			
		||||
  int flipped_rel_x;
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ struct _MetaPlayRequest
 | 
			
		||||
  MetaSoundPlayer *player;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const char * const cache_allow_list[] = {
 | 
			
		||||
const char * const cache_whitelist[] = {
 | 
			
		||||
  "bell-window-system",
 | 
			
		||||
  "desktop-switch-left",
 | 
			
		||||
  "desktop-switch-right",
 | 
			
		||||
@@ -251,7 +251,7 @@ meta_sound_player_play_from_theme (MetaSoundPlayer *player,
 | 
			
		||||
  ca_proplist_create (&props);
 | 
			
		||||
  build_ca_proplist (props, CA_PROP_EVENT_ID, name, description);
 | 
			
		||||
 | 
			
		||||
  if (g_strv_contains (cache_allow_list, name))
 | 
			
		||||
  if (g_strv_contains (cache_whitelist, name))
 | 
			
		||||
    ca_proplist_sets (props, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent");
 | 
			
		||||
  else
 | 
			
		||||
    ca_proplist_sets (props, CA_PROP_CANBERRA_CACHE_CONTROL, "volatile");
 | 
			
		||||
 
 | 
			
		||||
@@ -362,7 +362,6 @@ struct _MetaWindow
 | 
			
		||||
  /* Computed whether to skip taskbar or not */
 | 
			
		||||
  guint skip_taskbar : 1;
 | 
			
		||||
  guint skip_pager : 1;
 | 
			
		||||
  guint skip_from_window_list : 1;
 | 
			
		||||
 | 
			
		||||
  /* TRUE if client set these */
 | 
			
		||||
  guint wm_state_above : 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -730,8 +730,7 @@ is_desktop_or_dock_foreach (MetaWindow *window,
 | 
			
		||||
 | 
			
		||||
  *result =
 | 
			
		||||
    window->type == META_WINDOW_DESKTOP ||
 | 
			
		||||
    window->type == META_WINDOW_DOCK ||
 | 
			
		||||
    window->skip_from_window_list;
 | 
			
		||||
    window->type == META_WINDOW_DOCK;
 | 
			
		||||
  if (*result)
 | 
			
		||||
    return FALSE; /* stop as soon as we find one */
 | 
			
		||||
  else
 | 
			
		||||
@@ -1138,7 +1137,6 @@ _meta_window_shared_new (MetaDisplay         *display,
 | 
			
		||||
 | 
			
		||||
  window->skip_taskbar = FALSE;
 | 
			
		||||
  window->skip_pager = FALSE;
 | 
			
		||||
  window->skip_from_window_list = FALSE;
 | 
			
		||||
  window->wm_state_above = FALSE;
 | 
			
		||||
  window->wm_state_below = FALSE;
 | 
			
		||||
  window->wm_state_demands_attention = FALSE;
 | 
			
		||||
@@ -2835,7 +2833,7 @@ meta_window_maximize_internal (MetaWindow        *window,
 | 
			
		||||
    window->maximized_vertically   || maximize_vertically;
 | 
			
		||||
 | 
			
		||||
  /* Update the edge constraints */
 | 
			
		||||
  update_edge_constraints (window);
 | 
			
		||||
  update_edge_constraints (window);;
 | 
			
		||||
 | 
			
		||||
  meta_window_recalc_features (window);
 | 
			
		||||
  set_net_wm_state (window);
 | 
			
		||||
@@ -5611,15 +5609,15 @@ meta_window_recalc_skip_features (MetaWindow *window)
 | 
			
		||||
      if (window->transient_for != NULL)
 | 
			
		||||
        window->skip_taskbar = TRUE;
 | 
			
		||||
      else
 | 
			
		||||
        window->skip_taskbar = window->skip_from_window_list;
 | 
			
		||||
        window->skip_taskbar = FALSE;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case META_WINDOW_NORMAL:
 | 
			
		||||
      {
 | 
			
		||||
        gboolean skip_taskbar_hint, skip_pager_hint;
 | 
			
		||||
        meta_window_get_default_skip_hints (window, &skip_taskbar_hint, &skip_pager_hint);
 | 
			
		||||
        window->skip_taskbar = skip_taskbar_hint | window->skip_from_window_list;
 | 
			
		||||
        window->skip_pager = skip_pager_hint | window->skip_from_window_list;
 | 
			
		||||
        window->skip_taskbar = skip_taskbar_hint;
 | 
			
		||||
        window->skip_pager = skip_pager_hint;
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -249,8 +249,6 @@ mutter_sources = [
 | 
			
		||||
  'backends/x11/meta-crtc-xrandr.h',
 | 
			
		||||
  'backends/x11/meta-cursor-renderer-x11.c',
 | 
			
		||||
  'backends/x11/meta-cursor-renderer-x11.h',
 | 
			
		||||
  'backends/x11/meta-cursor-tracker-x11.c',
 | 
			
		||||
  'backends/x11/meta-cursor-tracker-x11.h',
 | 
			
		||||
  'backends/x11/meta-event-x11.c',
 | 
			
		||||
  'backends/x11/meta-event-x11.h',
 | 
			
		||||
  'backends/x11/meta-gpu-xrandr.c',
 | 
			
		||||
@@ -506,7 +504,6 @@ if have_wayland
 | 
			
		||||
    'wayland/meta-wayland-buffer.c',
 | 
			
		||||
    'wayland/meta-wayland-buffer.h',
 | 
			
		||||
    'wayland/meta-wayland.c',
 | 
			
		||||
    'wayland/meta-wayland-client.c',
 | 
			
		||||
    'wayland/meta-wayland-cursor-surface.c',
 | 
			
		||||
    'wayland/meta-wayland-cursor-surface.h',
 | 
			
		||||
    'wayland/meta-wayland-data-device.c',
 | 
			
		||||
@@ -722,18 +719,6 @@ endif
 | 
			
		||||
 | 
			
		||||
mutter_built_sources = []
 | 
			
		||||
 | 
			
		||||
if have_remote_desktop
 | 
			
		||||
  mutter_private_enum_types = gnome.mkenums('meta-private-enum-types',
 | 
			
		||||
    sources: [
 | 
			
		||||
      'backends/meta-screen-cast.h',
 | 
			
		||||
    ],
 | 
			
		||||
    c_template: 'meta-private-enum-types.c.in',
 | 
			
		||||
    h_template: 'meta-private-enum-types.h.in',
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  mutter_built_sources += mutter_private_enum_types
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
dbus_display_config_built_sources = gnome.gdbus_codegen('meta-dbus-display-config',
 | 
			
		||||
    'org.gnome.Mutter.DisplayConfig.xml',
 | 
			
		||||
    interface_prefix: 'org.gnome.Mutter.',
 | 
			
		||||
@@ -763,13 +748,9 @@ if have_profiler
 | 
			
		||||
    'backends/meta-profiler.h',
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
  if sysprof_dep.type_name() == 'pkgconfig'
 | 
			
		||||
    sysprof_dbus_interfaces_dir = join_paths(sysprof_dep.get_pkgconfig_variable('datadir'), 'dbus-1', 'interfaces')
 | 
			
		||||
  else
 | 
			
		||||
    sysprof_dbus_interfaces_dir = join_paths(meson.source_root(), 'subprojects', 'sysprof', 'src')
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  sysprof_dbus_interfaces_dir = join_paths(sysprof_dep.get_pkgconfig_variable('datadir'), 'dbus-1', 'interfaces')
 | 
			
		||||
  sysprof3_dbus_file = join_paths(sysprof_dbus_interfaces_dir, 'org.gnome.Sysprof3.Profiler.xml')
 | 
			
		||||
 | 
			
		||||
  dbus_sysprof3_profiler_built_sources = gnome.gdbus_codegen('meta-dbus-sysprof3-profiler',
 | 
			
		||||
      sysprof3_dbus_file,
 | 
			
		||||
      interface_prefix: 'org.gnome.',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,40 +0,0 @@
 | 
			
		||||
/*** BEGIN file-header ***/
 | 
			
		||||
#include "meta-private-enum-types.h"
 | 
			
		||||
/*** END file-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN file-production ***/
 | 
			
		||||
 | 
			
		||||
/* enumerations from "@filename@" */
 | 
			
		||||
#include "@filename@"
 | 
			
		||||
 | 
			
		||||
/*** END file-production ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-header ***/
 | 
			
		||||
GType
 | 
			
		||||
@enum_name@_get_type (void)
 | 
			
		||||
{
 | 
			
		||||
  static volatile gsize g_enum_type_id__volatile = 0;
 | 
			
		||||
 | 
			
		||||
  if (g_once_init_enter (&g_enum_type_id__volatile))
 | 
			
		||||
    {
 | 
			
		||||
      static const G@Type@Value values[] = {
 | 
			
		||||
/*** END value-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-production ***/
 | 
			
		||||
        { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
 | 
			
		||||
/*** END value-production ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-tail ***/
 | 
			
		||||
        { 0, NULL, NULL }
 | 
			
		||||
      };
 | 
			
		||||
      GType g_enum_type_id;
 | 
			
		||||
 | 
			
		||||
      g_enum_type_id =
 | 
			
		||||
        g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
 | 
			
		||||
 | 
			
		||||
      g_once_init_leave (&g_enum_type_id__volatile, g_enum_type_id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return g_enum_type_id__volatile;
 | 
			
		||||
}
 | 
			
		||||
/*** END value-tail ***/
 | 
			
		||||
@@ -1,25 +0,0 @@
 | 
			
		||||
/*** BEGIN file-header ***/
 | 
			
		||||
#ifndef META_PRIVATE_ENUM_TYPES_H
 | 
			
		||||
#define META_PRIVATE_ENUM_TYPES_H
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/*** END file-header ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN file-production ***/
 | 
			
		||||
/* enumerations from "@basename@" */
 | 
			
		||||
/*** END file-production ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN file-tail ***/
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* !__MUTTER_ENUM_TYPES_H__ */
 | 
			
		||||
/*** END file-tail ***/
 | 
			
		||||
 | 
			
		||||
/*** BEGIN value-header ***/
 | 
			
		||||
GType @enum_name@_get_type (void) G_GNUC_CONST;
 | 
			
		||||
#define META_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
 | 
			
		||||
 | 
			
		||||
/*** END value-header ***/
 | 
			
		||||
@@ -45,12 +45,6 @@ mutter_public_headers = [
 | 
			
		||||
  'workspace.h',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
if have_wayland
 | 
			
		||||
  mutter_public_headers += [
 | 
			
		||||
    'meta-wayland-client.h',
 | 
			
		||||
  ]
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if have_x11
 | 
			
		||||
  mutter_public_headers += [
 | 
			
		||||
    'meta-x11-display.h',
 | 
			
		||||
 
 | 
			
		||||
@@ -32,10 +32,11 @@
 | 
			
		||||
#define META_TYPE_CURSOR_TRACKER (meta_cursor_tracker_get_type ())
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (MetaCursorTracker,
 | 
			
		||||
                          meta_cursor_tracker,
 | 
			
		||||
                          META, CURSOR_TRACKER,
 | 
			
		||||
                          GObject)
 | 
			
		||||
G_DECLARE_FINAL_TYPE (MetaCursorTracker,
 | 
			
		||||
                      meta_cursor_tracker,
 | 
			
		||||
                      META, CURSOR_TRACKER,
 | 
			
		||||
                      GObject)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
MetaCursorTracker *meta_cursor_tracker_get_for_display (MetaDisplay *display);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,67 +0,0 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2019 Sergio Costas (rastersoft@gmail.com)
 | 
			
		||||
 *
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef META_WAYLAND_CLIENT_H
 | 
			
		||||
#define META_WAYLAND_CLIENT_H
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
#include <gio/gio.h>
 | 
			
		||||
 | 
			
		||||
#include "meta/display.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_WAYLAND_CLIENT (meta_wayland_client_get_type ())
 | 
			
		||||
META_EXPORT
 | 
			
		||||
G_DECLARE_FINAL_TYPE (MetaWaylandClient, meta_wayland_client, META, WAYLAND_CLIENT, GObject)
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
MetaWaylandClient *meta_wayland_client_new (GSubprocessLauncher  *launcher,
 | 
			
		||||
                                            GError              **error);
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
GSubprocess *meta_wayland_client_spawn (MetaWaylandClient  *client,
 | 
			
		||||
                                        MetaDisplay        *display,
 | 
			
		||||
                                        GError            **error,
 | 
			
		||||
                                        const char         *argv0,
 | 
			
		||||
                                        ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
GSubprocess *meta_wayland_client_spawnv (MetaWaylandClient   *client,
 | 
			
		||||
                                         MetaDisplay         *display,
 | 
			
		||||
                                         const char * const  *argv,
 | 
			
		||||
                                         GError             **error);
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
gboolean meta_wayland_client_owns_window (MetaWaylandClient *client,
 | 
			
		||||
                                          MetaWindow        *window);
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
void meta_wayland_client_hide_from_window_list (MetaWaylandClient *client,
 | 
			
		||||
                                                MetaWindow        *window);
 | 
			
		||||
 | 
			
		||||
META_EXPORT
 | 
			
		||||
void meta_wayland_client_show_in_window_list (MetaWaylandClient *client,
 | 
			
		||||
                                              MetaWindow        *window);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* META_WAYLAND_CLIENT_H */
 | 
			
		||||
@@ -79,9 +79,6 @@
 | 
			
		||||
 | 
			
		||||
	* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
 | 
			
		||||
	                     Available since API version 2.
 | 
			
		||||
	* "is-recording" (b): Whether this is a screen recording. May be
 | 
			
		||||
			      be used for choosing appropriate visual feedback.
 | 
			
		||||
			      Default: false. Available since API version 4.
 | 
			
		||||
 | 
			
		||||
	Available cursor mode values:
 | 
			
		||||
 | 
			
		||||
@@ -108,9 +105,6 @@
 | 
			
		||||
 | 
			
		||||
	* "window-id" (t): Id of the window to record.
 | 
			
		||||
	* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see RecordMonitor).
 | 
			
		||||
	* "is-recording" (b): Whether this is a screen recording. May be
 | 
			
		||||
			      be used for choosing panel icon.
 | 
			
		||||
			      Default: false. Available since API version 4.
 | 
			
		||||
 | 
			
		||||
    -->
 | 
			
		||||
    <method name="RecordWindow">
 | 
			
		||||
@@ -135,9 +129,6 @@
 | 
			
		||||
 | 
			
		||||
	* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
 | 
			
		||||
	                     Available since API version 2.
 | 
			
		||||
	* "is-recording" (b): Whether this is a screen recording. May be
 | 
			
		||||
			      be used for choosing panel icon.
 | 
			
		||||
			      Default: false. Available since API version 4.
 | 
			
		||||
 | 
			
		||||
	Available cursor mode values:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
clutter_tests_conform_c_args = [
 | 
			
		||||
  '-DG_LOG_DOMAIN="Clutter-Conform"',
 | 
			
		||||
  '-DCOGL_DISABLE_DEPRECATION_WARNINGS',
 | 
			
		||||
  '-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
 | 
			
		||||
]
 | 
			
		||||
clutter_tests_conform_c_args += clutter_debug_c_args
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ clutter_tests_interactive_c_args = [
 | 
			
		||||
  '-DGLIB_DISABLE_DEPRECATION_WARNINGS',
 | 
			
		||||
  '-DCOGL_DISABLE_DEPRECATION_WARNINGS',
 | 
			
		||||
  '-DCLUTTER_DISABLE_DEPRECATION_WARNINGS',
 | 
			
		||||
  '-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
 | 
			
		||||
]
 | 
			
		||||
clutter_tests_interactive_c_args += clutter_debug_c_args
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user