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