Compare commits

..

1 Commits

Author SHA1 Message Date
Carlos Garnacho
5aeb8ff6a6 ci: Make the coverage build happen in the coverage target
Use a specific build for it, instead of making the default test-mutter
target prepare that in advance, just in case. Bypasses errors with
recent meson when making coverage builds (although it'd still happen if
the stage were run manually).
2020-07-23 13:55:01 +02:00
230 changed files with 3429 additions and 4746 deletions

1
.gitignore vendored
View File

@@ -103,4 +103,3 @@ doc/reference/meta.types
.dirstamp
**/tags.*
build/
subprojects/sysprof/

View File

@@ -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:

View File

@@ -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

42
NEWS
View File

@@ -1,45 +1,3 @@
3.37.91
=======
* Fix initial state of display mode OSD [Jian-Hong; #1362]
* Fixed crashes [Jonas Å., Robert; !1407, !1411]
* Misc. bug fixes and cleanups [Jonas Å., Christian; !1404, !1364, #1331]
Contributors:
Jonas Ådahl, Robert Mader, Jian-Hong Pan, Christian Rauch
Translators:
Fran Dieguez [gl], Daniel Mustieles [es], Florentina Mușat [ro],
Kukuh Syafaat [id], Piotr Drąg [pl], Emin Tufan Çetin [tr], Марко Костић [sr],
Akarshan Biswas [bn_IN], Matej Urbančič [sl], Boyuan Yang [zh_CN],
Goran Vidović [hr], Rafael Fontenelle [pt_BR]
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]

View File

@@ -1093,6 +1093,7 @@ static GQuark quark_scroll = 0;
static GQuark quark_stage = 0;
static GQuark quark_destroy = 0;
static GQuark quark_client = 0;
static GQuark quark_delete = 0;
static GQuark quark_touch = 0;
static GQuark quark_touchpad = 0;
static GQuark quark_proximity = 0;
@@ -6002,6 +6003,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
quark_stage = g_quark_from_static_string ("stage");
quark_destroy = g_quark_from_static_string ("destroy");
quark_client = g_quark_from_static_string ("client");
quark_delete = g_quark_from_static_string ("delete");
quark_touch = g_quark_from_static_string ("touch");
quark_touchpad = g_quark_from_static_string ("touchpad");
quark_proximity = g_quark_from_static_string ("proximity");
@@ -10293,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
@@ -12703,6 +12673,10 @@ clutter_actor_event (ClutterActor *actor,
signal_num = -1;
detail = quark_pad;
break;
case CLUTTER_DELETE:
signal_num = -1;
detail = quark_delete;
break;
case CLUTTER_DESTROY_NOTIFY:
signal_num = -1;
detail = quark_destroy;
@@ -16209,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)
@@ -16348,19 +16327,15 @@ clutter_actor_is_effectively_on_stage_view (ClutterActor *self,
}
/**
* clutter_actor_pick_frame_clock: (skip)
* clutter_actor_pick_frame_clock:
* @self: a #ClutterActor
* @out_actor: (nullable): a pointer to an #ClutterActor
*
* Pick the most suitable frame clock for driving animations for this actor.
*
* The #ClutterActor used for picking the frame clock is written @out_actor.
*
* Returns: (transfer none): a #ClutterFrameClock
*/
ClutterFrameClock *
clutter_actor_pick_frame_clock (ClutterActor *self,
ClutterActor **out_actor)
clutter_actor_pick_frame_clock (ClutterActor *self)
{
ClutterActorPrivate *priv = self->priv;
float max_refresh_rate = 0.0;
@@ -16370,7 +16345,7 @@ clutter_actor_pick_frame_clock (ClutterActor *self,
if (!priv->stage_views)
{
if (priv->parent)
return clutter_actor_pick_frame_clock (priv->parent, out_actor);
return clutter_actor_pick_frame_clock (priv->parent);
else
return NULL;
}
@@ -16389,15 +16364,9 @@ clutter_actor_pick_frame_clock (ClutterActor *self,
}
if (best_view)
{
if (out_actor)
*out_actor = self;
return clutter_stage_view_get_frame_clock (best_view);
}
return clutter_stage_view_get_frame_clock (best_view);
else
{
return NULL;
}
return NULL;
}
/**

View File

@@ -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,
@@ -935,6 +930,9 @@ GList * clutter_actor_peek_stage_views (ClutterActor *self);
CLUTTER_EXPORT
void clutter_actor_invalidate_transform (ClutterActor *self);
CLUTTER_EXPORT
ClutterFrameClock * clutter_actor_pick_frame_clock (ClutterActor *self);
G_END_DECLS
#endif /* __CLUTTER_ACTOR_H__ */

View File

@@ -93,8 +93,6 @@ struct _ClutterBackendClass
ClutterSeat * (* get_default_seat) (ClutterBackend *backend);
gboolean (* is_display_server) (ClutterBackend *backend);
/* signals */
void (* resolution_changed) (ClutterBackend *backend);
void (* font_changed) (ClutterBackend *backend);
@@ -144,8 +142,6 @@ void clutter_backend_set_fallback_resource_scale (ClutterBackend *backend,
float clutter_backend_get_fallback_resource_scale (ClutterBackend *backend);
gboolean clutter_backend_is_display_server (ClutterBackend *backend);
G_END_DECLS
#endif /* __CLUTTER_BACKEND_PRIVATE_H__ */

View File

@@ -58,6 +58,13 @@
#include <cogl/cogl.h>
#ifdef CLUTTER_INPUT_X11
#include "x11/clutter-backend-x11.h"
#endif
#ifdef CLUTTER_WINDOWING_EGL
#include "egl/clutter-backend-eglnative.h"
#endif
#ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT
#include <cogl/cogl-wayland-server.h>
#include <wayland-server.h>
@@ -415,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");
@@ -424,8 +439,23 @@ clutter_backend_real_get_features (ClutterBackend *backend)
return flags;
}
static const char *allowed_backends;
static ClutterBackend * (* custom_backend_func) (void);
static const struct {
const char *name;
ClutterBackend * (* create_backend) (void);
} available_backends[] = {
#ifdef CLUTTER_WINDOWING_X11
{ CLUTTER_WINDOWING_X11, clutter_backend_x11_new },
#endif
#ifdef CLUTTER_WINDOWING_EGL
{ CLUTTER_WINDOWING_EGL, clutter_backend_egl_native_new },
#endif
{ NULL, NULL },
};
void
clutter_set_custom_backend_func (ClutterBackend *(* func) (void))
{
@@ -435,13 +465,58 @@ clutter_set_custom_backend_func (ClutterBackend *(* func) (void))
ClutterBackend *
_clutter_create_backend (void)
{
const char *backends_list;
ClutterBackend *retval;
gboolean allow_any;
char **backends;
int i;
g_return_val_if_fail (custom_backend_func, NULL);
if (custom_backend_func)
{
retval = custom_backend_func ();
retval = custom_backend_func ();
if (!retval)
g_error ("Failed to create custom backend.");
if (!retval)
g_error ("Failed to create custom backend.");
return retval;
}
if (allowed_backends == NULL)
allowed_backends = "*";
allow_any = strstr (allowed_backends, "*") != NULL;
backends_list = g_getenv ("CLUTTER_BACKEND");
if (backends_list == NULL)
backends_list = allowed_backends;
backends = g_strsplit (backends_list, ",", 0);
retval = NULL;
for (i = 0; retval == NULL && backends[i] != NULL; i++)
{
const char *backend = backends[i];
gboolean is_any = g_str_equal (backend, "*");
int j;
for (j = 0; available_backends[j].name != NULL; j++)
{
if ((is_any && allow_any) ||
(is_any && strstr (allowed_backends, available_backends[j].name)) ||
g_str_equal (backend, available_backends[j].name))
{
retval = available_backends[j].create_backend ();
if (retval != NULL)
break;
}
}
}
g_strfreev (backends);
if (retval == NULL)
g_error ("No default Clutter backend found.");
return retval;
}
@@ -971,9 +1046,3 @@ clutter_backend_get_fallback_resource_scale (ClutterBackend *backend)
{
return backend->fallback_resource_scale;
}
gboolean
clutter_backend_is_display_server (ClutterBackend *backend)
{
return CLUTTER_BACKEND_GET_CLASS (backend)->is_display_server (backend);
}

View File

@@ -857,6 +857,7 @@ typedef enum /*< flags prefix=CLUTTER_EVENT >*/
* @CLUTTER_STAGE_STATE: Stage state change event
* @CLUTTER_DESTROY_NOTIFY: Destroy notification event
* @CLUTTER_CLIENT_MESSAGE: Client message event
* @CLUTTER_DELETE: Stage delete event
* @CLUTTER_TOUCH_BEGIN: A new touch event sequence has started;
* event added in 1.10
* @CLUTTER_TOUCH_UPDATE: A touch event sequence has been updated;
@@ -894,6 +895,7 @@ typedef enum /*< prefix=CLUTTER >*/
CLUTTER_STAGE_STATE,
CLUTTER_DESTROY_NOTIFY,
CLUTTER_CLIENT_MESSAGE,
CLUTTER_DELETE,
CLUTTER_TOUCH_BEGIN,
CLUTTER_TOUCH_UPDATE,
CLUTTER_TOUCH_END,
@@ -949,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.
@@ -963,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),

View File

@@ -407,6 +407,7 @@ clutter_event_get_position (const ClutterEvent *event,
case CLUTTER_STAGE_STATE:
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_CLIENT_MESSAGE:
case CLUTTER_DELETE:
case CLUTTER_EVENT_LAST:
case CLUTTER_PROXIMITY_IN:
case CLUTTER_PROXIMITY_OUT:
@@ -480,6 +481,7 @@ clutter_event_set_coords (ClutterEvent *event,
case CLUTTER_STAGE_STATE:
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_CLIENT_MESSAGE:
case CLUTTER_DELETE:
case CLUTTER_EVENT_LAST:
case CLUTTER_PROXIMITY_IN:
case CLUTTER_PROXIMITY_OUT:
@@ -1103,6 +1105,7 @@ clutter_event_set_device (ClutterEvent *event,
case CLUTTER_STAGE_STATE:
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_CLIENT_MESSAGE:
case CLUTTER_DELETE:
case CLUTTER_EVENT_LAST:
break;
@@ -1199,6 +1202,7 @@ clutter_event_get_device (const ClutterEvent *event)
case CLUTTER_STAGE_STATE:
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_CLIENT_MESSAGE:
case CLUTTER_DELETE:
case CLUTTER_EVENT_LAST:
break;
@@ -1721,6 +1725,7 @@ clutter_event_get_axes (const ClutterEvent *event,
case CLUTTER_STAGE_STATE:
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_CLIENT_MESSAGE:
case CLUTTER_DELETE:
case CLUTTER_ENTER:
case CLUTTER_LEAVE:
case CLUTTER_KEY_PRESS:

View File

@@ -514,7 +514,7 @@ clutter_frame_clock_destroy (ClutterFrameClock *frame_clock)
static void
clutter_frame_clock_dispose (GObject *object)
{
ClutterFrameClock *frame_clock = CLUTTER_FRAME_CLOCK (object);
ClutterFrameClock *frame_clock = CLUTTER_FRAME_CLOCK (object);
if (frame_clock->source)
{

View File

@@ -67,7 +67,13 @@
#include "clutter-settings-private.h"
#include "clutter-stage-manager.h"
#include "clutter-stage-private.h"
#include "clutter-backend-private.h"
#ifdef CLUTTER_WINDOWING_X11
#include "x11/clutter-backend-x11.h"
#endif
#ifdef CLUTTER_WINDOWING_EGL
#include "egl/clutter-backend-eglnative.h"
#endif
#include <cogl/cogl.h>
#include <cogl-pango/cogl-pango.h>
@@ -82,6 +88,7 @@ static gboolean clutter_is_initialized = FALSE;
static gboolean clutter_show_fps = FALSE;
static gboolean clutter_fatal_warnings = FALSE;
static gboolean clutter_disable_mipmap_text = FALSE;
static gboolean clutter_use_fuzzy_picking = FALSE;
static gboolean clutter_enable_accessibility = TRUE;
static gboolean clutter_sync_to_vblank = TRUE;
@@ -89,6 +96,9 @@ static guint clutter_default_fps = 60;
static ClutterTextDirection clutter_text_direction = CLUTTER_TEXT_DIRECTION_LTR;
static guint clutter_main_loop_level = 0;
static GSList *main_loops = NULL;
/* debug flags */
guint clutter_debug_flags = 0;
guint clutter_paint_debug_flags = 0;
@@ -175,6 +185,16 @@ clutter_config_read_from_key_file (GKeyFile *keyfile)
else
clutter_disable_mipmap_text = bool_value;
bool_value =
g_key_file_get_boolean (keyfile, ENVIRONMENT_GROUP,
"UseFuzzyPicking",
&key_error);
if (key_error != NULL)
g_clear_error (&key_error);
else
clutter_use_fuzzy_picking = bool_value;
bool_value =
g_key_file_get_boolean (keyfile, ENVIRONMENT_GROUP,
"EnableAccessibility",
@@ -429,6 +449,76 @@ clutter_get_text_direction (void)
return dir;
}
/**
* clutter_main_quit:
*
* Terminates the Clutter mainloop.
*/
void
clutter_main_quit (void)
{
if (main_loops == NULL)
{
g_critical ("Calling clutter_main_quit() without calling clutter_main() "
"is not allowed. If you are using another main loop, use the "
"appropriate API to terminate it.");
return;
}
CLUTTER_NOTE (MISC, "Terminating main loop level %d", clutter_main_loop_level);
g_main_loop_quit (main_loops->data);
}
/**
* clutter_main_level:
*
* Retrieves the depth of the Clutter mainloop.
*
* Return value: The level of the mainloop.
*/
gint
clutter_main_level (void)
{
return clutter_main_loop_level;
}
/**
* clutter_main:
*
* Starts the Clutter mainloop.
*/
void
clutter_main (void)
{
GMainLoop *loop;
if (!_clutter_context_is_initialized ())
{
g_warning ("Called clutter_main() but Clutter wasn't initialised. "
"You must call clutter_init() first.");
return;
}
clutter_main_loop_level++;
CLUTTER_NOTE (MISC, "Entering main loop level %d", clutter_main_loop_level);
loop = g_main_loop_new (NULL, TRUE);
main_loops = g_slist_prepend (main_loops, loop);
if (g_main_loop_is_running (main_loops->data))
g_main_loop_run (loop);
main_loops = g_slist_remove (main_loops, loop);
g_main_loop_unref (loop);
CLUTTER_NOTE (MISC, "Leaving main loop level %d", clutter_main_loop_level);
clutter_main_loop_level--;
}
gboolean
_clutter_threads_dispatch (gpointer data)
{
@@ -833,6 +923,9 @@ static GOptionEntry clutter_args[] = {
{ "clutter-disable-mipmapped-text", 0, 0, G_OPTION_ARG_NONE,
&clutter_disable_mipmap_text,
N_("Disable mipmapping on text"), NULL },
{ "clutter-use-fuzzy-picking", 0, 0, G_OPTION_ARG_NONE,
&clutter_use_fuzzy_picking,
N_("Use 'fuzzy' picking"), NULL },
#ifdef CLUTTER_ENABLE_DEBUG
{ "clutter-debug", 0, 0, G_OPTION_ARG_CALLBACK, clutter_arg_debug_cb,
N_("Clutter debugging flags to set"), "FLAGS" },
@@ -914,6 +1007,10 @@ pre_parse_hook (GOptionContext *context,
if (env_string)
clutter_disable_mipmap_text = TRUE;
env_string = g_getenv ("CLUTTER_FUZZY_PICK");
if (env_string)
clutter_use_fuzzy_picking = TRUE;
return _clutter_backend_pre_parse (backend, error);
}
@@ -1572,11 +1669,6 @@ _clutter_process_event_details (ClutterActor *stage,
ClutterEvent *event)
{
ClutterInputDevice *device = clutter_event_get_device (event);
ClutterMainContext *clutter_context;
ClutterBackend *backend;
clutter_context = _clutter_context_get_default ();
backend = clutter_context->backend;
switch (event->type)
{
@@ -1662,6 +1754,7 @@ _clutter_process_event_details (ClutterActor *stage,
break;
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_DELETE:
event->any.source = stage;
if (_clutter_event_process_filters (event))
@@ -1672,7 +1765,8 @@ _clutter_process_event_details (ClutterActor *stage,
break;
case CLUTTER_MOTION:
if (clutter_backend_is_display_server (backend) &&
#ifdef CLUTTER_WINDOWING_X11
if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11) &&
!(event->any.flags & CLUTTER_EVENT_FLAG_SYNTHETIC))
{
if (_clutter_is_input_pointer_a11y_enabled (device))
@@ -1683,6 +1777,7 @@ _clutter_process_event_details (ClutterActor *stage,
_clutter_input_pointer_a11y_on_motion_event (device, x, y);
}
}
#endif /* CLUTTER_WINDOWING_X11 */
/* only the stage gets motion events if they are enabled */
if (!clutter_stage_get_motion_events_enabled (CLUTTER_STAGE (stage)) &&
event->any.source == NULL)
@@ -1713,7 +1808,8 @@ _clutter_process_event_details (ClutterActor *stage,
G_GNUC_FALLTHROUGH;
case CLUTTER_BUTTON_PRESS:
case CLUTTER_BUTTON_RELEASE:
if (clutter_backend_is_display_server (backend))
#ifdef CLUTTER_WINDOWING_X11
if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
{
if (_clutter_is_input_pointer_a11y_enabled (device) && (event->type != CLUTTER_MOTION))
{
@@ -1722,6 +1818,7 @@ _clutter_process_event_details (ClutterActor *stage,
event->type == CLUTTER_BUTTON_PRESS);
}
}
#endif /* CLUTTER_WINDOWING_X11 */
case CLUTTER_SCROLL:
case CLUTTER_TOUCHPAD_PINCH:
case CLUTTER_TOUCHPAD_SWIPE:
@@ -2345,6 +2442,58 @@ _clutter_context_get_pick_mode (void)
return context->pick_mode;
}
/**
* clutter_check_windowing_backend:
* @backend_type: the name of the backend to check
*
* Checks the run-time name of the Clutter windowing system backend, using
* the symbolic macros like %CLUTTER_WINDOWING_X11.
*
* This function should be used in conjuction with the compile-time macros
* inside applications and libraries that are using the platform-specific
* windowing system API, to ensure that they are running on the correct
* windowing system; for instance:
*
* |[
* #ifdef CLUTTER_WINDOWING_X11
* if (clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
* {
* // it is safe to use the clutter_x11_* API
* }
* else
* #endif
* g_error ("Unknown Clutter backend.");
* ]|
*
* Return value: %TRUE if the current Clutter windowing system backend is
* the one checked, and %FALSE otherwise
*
* Since: 1.10
*/
gboolean
clutter_check_windowing_backend (const char *backend_type)
{
ClutterMainContext *context = _clutter_context_get_default ();
g_return_val_if_fail (backend_type != NULL, FALSE);
backend_type = g_intern_string (backend_type);
#ifdef CLUTTER_WINDOWING_EGL
if (backend_type == I_(CLUTTER_WINDOWING_EGL) &&
CLUTTER_IS_BACKEND_EGL_NATIVE (context->backend))
return TRUE;
else
#endif
#ifdef CLUTTER_WINDOWING_X11
if (backend_type == I_(CLUTTER_WINDOWING_X11) &&
CLUTTER_IS_BACKEND_X11 (context->backend))
return TRUE;
else
#endif
return FALSE;
}
/**
* clutter_add_debug_flags: (skip)
*

View File

@@ -136,6 +136,14 @@ GOptionGroup * clutter_get_option_group (void);
CLUTTER_EXPORT
GOptionGroup * clutter_get_option_group_without_init (void);
/* Mainloop */
CLUTTER_EXPORT
void clutter_main (void);
CLUTTER_EXPORT
void clutter_main_quit (void);
CLUTTER_EXPORT
gint clutter_main_level (void);
CLUTTER_EXPORT
void clutter_do_event (ClutterEvent *event);
@@ -186,6 +194,9 @@ ClutterTextDirection clutter_get_default_text_direction (void);
CLUTTER_EXPORT
guint clutter_get_default_frame_rate (void);
CLUTTER_EXPORT
gboolean clutter_check_windowing_backend (const char *backend_type);
CLUTTER_EXPORT
void clutter_add_debug_flags (ClutterDebugFlag debug_flags,
ClutterDrawDebugFlag draw_flags,

View File

@@ -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);
@@ -68,10 +85,6 @@ gboolean clutter_actor_has_damage (ClutterActor *actor);
CLUTTER_EXPORT
gboolean clutter_actor_has_transitions (ClutterActor *actor);
CLUTTER_EXPORT
ClutterFrameClock * clutter_actor_pick_frame_clock (ClutterActor *self,
ClutterActor **out_actor);
#undef __CLUTTER_H_INSIDE__
#endif /* __CLUTTER_MUTTER_H__ */

View File

@@ -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",

View File

@@ -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 ())

View File

@@ -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)
{

View File

@@ -40,18 +40,6 @@
#define CLUTTER_IS_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_SETTINGS))
#define CLUTTER_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_SETTINGS, ClutterSettingsClass))
typedef struct
{
cairo_antialias_t cairo_antialias;
gint clutter_font_antialias;
cairo_hint_style_t cairo_hint_style;
const char *clutter_font_hint_style;
cairo_subpixel_order_t cairo_subpixel_order;
const char *clutter_font_subpixel_order;
} FontSettings;
/**
* ClutterSettings:
*
@@ -65,7 +53,6 @@ struct _ClutterSettings
GObject parent_instance;
ClutterBackend *backend;
GSettings *xsettings;
gint double_click_time;
gint double_click_distance;
@@ -280,159 +267,6 @@ settings_update_fontmap (ClutterSettings *self,
#endif /* HAVE_PANGO_FT2 */
}
static void
get_font_gsettings (GSettings *xsettings,
FontSettings *output)
{
/* org.gnome.settings-daemon.GsdFontAntialiasingMode */
static const struct
{
cairo_antialias_t cairo_antialias;
gint clutter_font_antialias;
}
antialiasings[] =
{
/* none=0 */ {CAIRO_ANTIALIAS_NONE, 0},
/* grayscale=1 */ {CAIRO_ANTIALIAS_GRAY, 1},
/* rgba=2 */ {CAIRO_ANTIALIAS_SUBPIXEL, 1},
};
/* org.gnome.settings-daemon.GsdFontHinting */
static const struct
{
cairo_hint_style_t cairo_hint_style;
const char *clutter_font_hint_style;
}
hintings[] =
{
/* none=0 */ {CAIRO_HINT_STYLE_NONE, "hintnone"},
/* slight=1 */ {CAIRO_HINT_STYLE_SLIGHT, "hintslight"},
/* medium=2 */ {CAIRO_HINT_STYLE_MEDIUM, "hintmedium"},
/* full=3 */ {CAIRO_HINT_STYLE_FULL, "hintfull"},
};
/* org.gnome.settings-daemon.GsdFontRgbaOrder */
static const struct
{
cairo_subpixel_order_t cairo_subpixel_order;
const char *clutter_font_subpixel_order;
}
rgba_orders[] =
{
/* rgba=0 */ {CAIRO_SUBPIXEL_ORDER_RGB, "rgb"}, /* XXX what is 'rgba'? */
/* rgb=1 */ {CAIRO_SUBPIXEL_ORDER_RGB, "rgb"},
/* bgr=2 */ {CAIRO_SUBPIXEL_ORDER_BGR, "bgr"},
/* vrgb=3 */ {CAIRO_SUBPIXEL_ORDER_VRGB, "vrgb"},
/* vbgr=4 */ {CAIRO_SUBPIXEL_ORDER_VBGR, "vbgr"},
};
guint i;
i = g_settings_get_enum (xsettings, "hinting");
if (i < G_N_ELEMENTS (hintings))
{
output->cairo_hint_style = hintings[i].cairo_hint_style;
output->clutter_font_hint_style = hintings[i].clutter_font_hint_style;
}
else
{
output->cairo_hint_style = CAIRO_HINT_STYLE_DEFAULT;
output->clutter_font_hint_style = NULL;
}
i = g_settings_get_enum (xsettings, "antialiasing");
if (i < G_N_ELEMENTS (antialiasings))
{
output->cairo_antialias = antialiasings[i].cairo_antialias;
output->clutter_font_antialias = antialiasings[i].clutter_font_antialias;
}
else
{
output->cairo_antialias = CAIRO_ANTIALIAS_DEFAULT;
output->clutter_font_antialias = -1;
}
i = g_settings_get_enum (xsettings, "rgba-order");
if (i < G_N_ELEMENTS (rgba_orders))
{
output->cairo_subpixel_order = rgba_orders[i].cairo_subpixel_order;
output->clutter_font_subpixel_order = rgba_orders[i].clutter_font_subpixel_order;
}
else
{
output->cairo_subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
output->clutter_font_subpixel_order = NULL;
}
if (output->cairo_antialias == CAIRO_ANTIALIAS_GRAY)
output->clutter_font_subpixel_order = "none";
}
static void
init_font_options (ClutterSettings *self)
{
GSettings *xsettings = self->xsettings;
cairo_font_options_t *options = cairo_font_options_create ();
FontSettings fs;
get_font_gsettings (xsettings, &fs);
cairo_font_options_set_hint_style (options, fs.cairo_hint_style);
cairo_font_options_set_antialias (options, fs.cairo_antialias);
cairo_font_options_set_subpixel_order (options, fs.cairo_subpixel_order);
clutter_backend_set_font_options (self->backend, options);
cairo_font_options_destroy (options);
}
static gboolean
on_xsettings_change_event (GSettings *xsettings,
gpointer keys,
gint n_keys,
gpointer user_data)
{
ClutterSettings *self = CLUTTER_SETTINGS (user_data);
FontSettings fs;
gint hinting;
get_font_gsettings (xsettings, &fs);
hinting = fs.cairo_hint_style == CAIRO_HINT_STYLE_NONE ? 0 : 1;
g_object_set (self,
"font-hinting", hinting,
"font-hint-style", fs.clutter_font_hint_style,
"font-antialias", fs.clutter_font_antialias,
"font-subpixel-order", fs.clutter_font_subpixel_order,
NULL);
return FALSE;
}
static void
load_initial_settings (ClutterSettings *self)
{
static const gchar xsettings_path[] =
"org.gnome.settings-daemon.plugins.xsettings";
GSettingsSchemaSource *source = g_settings_schema_source_get_default ();
GSettingsSchema *schema;
schema = g_settings_schema_source_lookup (source, xsettings_path, TRUE);
if (!schema)
{
g_warning ("Failed to find schema: %s", xsettings_path);
}
else
{
self->xsettings = g_settings_new_full (schema, NULL, NULL);
if (self->xsettings)
{
init_font_options (self);
g_signal_connect (self->xsettings, "change-event",
G_CALLBACK (on_xsettings_change_event),
self);
}
}
}
static void
clutter_settings_finalize (GObject *gobject)
{
@@ -442,8 +276,6 @@ clutter_settings_finalize (GObject *gobject)
g_free (self->xft_hint_style);
g_free (self->xft_rgba);
g_clear_object (&self->xsettings);
G_OBJECT_CLASS (clutter_settings_parent_class)->finalize (gobject);
}
@@ -908,8 +740,6 @@ _clutter_settings_set_backend (ClutterSettings *settings,
g_assert (CLUTTER_IS_BACKEND (backend));
settings->backend = backend;
load_initial_settings (settings);
}
#define SETTINGS_GROUP "Settings"

View File

@@ -86,13 +86,6 @@ typedef struct _ClutterStageViewPrivate
G_DEFINE_TYPE_WITH_PRIVATE (ClutterStageView, clutter_stage_view, G_TYPE_OBJECT)
void
clutter_stage_view_destroy (ClutterStageView *view)
{
g_object_run_dispose (G_OBJECT (view));
g_object_unref (view);
}
void
clutter_stage_view_get_layout (ClutterStageView *view,
cairo_rectangle_int_t *rect)
@@ -1267,6 +1260,7 @@ clutter_stage_view_dispose (GObject *object)
int i;
g_clear_pointer (&priv->name, g_free);
g_clear_pointer (&priv->framebuffer, cogl_object_unref);
g_clear_pointer (&priv->shadow.framebuffer, cogl_object_unref);
for (i = 0; i < G_N_ELEMENTS (priv->shadow.dma_buf.handles); i++)
@@ -1285,18 +1279,6 @@ clutter_stage_view_dispose (GObject *object)
G_OBJECT_CLASS (clutter_stage_view_parent_class)->dispose (object);
}
static void
clutter_stage_view_finalize (GObject *object)
{
ClutterStageView *view = CLUTTER_STAGE_VIEW (object);
ClutterStageViewPrivate *priv =
clutter_stage_view_get_instance_private (view);
g_clear_pointer (&priv->framebuffer, cogl_object_unref);
G_OBJECT_CLASS (clutter_stage_view_parent_class)->dispose (object);
}
static void
clutter_stage_view_init (ClutterStageView *view)
{
@@ -1321,7 +1303,6 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass)
object_class->set_property = clutter_stage_view_set_property;
object_class->constructed = clutter_stage_view_constructed;
object_class->dispose = clutter_stage_view_dispose;
object_class->finalize = clutter_stage_view_finalize;
obj_props[PROP_NAME] =
g_param_spec_string ("name",

View File

@@ -52,9 +52,6 @@ struct _ClutterStageViewClass
cairo_rectangle_int_t *dst_rect);
};
CLUTTER_EXPORT
void clutter_stage_view_destroy (ClutterStageView *view);
CLUTTER_EXPORT
void clutter_stage_view_get_layout (ClutterStageView *view,
cairo_rectangle_int_t *rect);

View File

@@ -172,7 +172,6 @@ enum
AFTER_UPDATE,
PAINT_VIEW,
PRESENTED,
GL_VIDEO_MEMORY_PURGED,
LAST_SIGNAL
};
@@ -545,6 +544,23 @@ queue_full_redraw (ClutterStage *stage)
clutter_stage_add_redraw_clip (stage, NULL);
}
static gboolean
stage_is_default (ClutterStage *stage)
{
ClutterStageManager *stage_manager;
ClutterStageWindow *impl;
stage_manager = clutter_stage_manager_get_default ();
if (stage != clutter_stage_manager_get_default_stage (stage_manager))
return FALSE;
impl = _clutter_stage_get_window (stage);
if (impl != _clutter_stage_get_default_window ())
return FALSE;
return TRUE;
}
static void
clutter_stage_allocate (ClutterActor *self,
const ClutterActorBox *box)
@@ -1574,6 +1590,18 @@ _clutter_stage_do_pick (ClutterStage *stage,
return actor;
}
static gboolean
clutter_stage_real_delete_event (ClutterStage *stage,
ClutterEvent *event)
{
if (stage_is_default (stage))
clutter_main_quit ();
else
clutter_actor_destroy (CLUTTER_ACTOR (stage));
return CLUTTER_EVENT_STOP;
}
static void
clutter_stage_real_apply_transform (ClutterActor *stage,
CoglMatrix *matrix)
@@ -1849,6 +1877,37 @@ clutter_stage_class_init (ClutterStageClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 0);
/**
* ClutterStage::delete-event:
* @stage: the stage that received the event
* @event: a #ClutterEvent of type %CLUTTER_DELETE
*
* The ::delete-event signal is emitted when the user closes a
* #ClutterStage window using the window controls.
*
* Clutter by default will call clutter_main_quit() if @stage is
* the default stage, and clutter_actor_destroy() for any other
* stage.
*
* It is possible to override the default behaviour by connecting
* a new handler and returning %TRUE there.
*
* This signal is emitted only on Clutter backends that
* embed #ClutterStage in native windows. It is not emitted for
* backends that use a static frame buffer.
*
* Since: 1.2
*/
stage_signals[DELETE_EVENT] =
g_signal_new (I_("delete-event"),
G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ClutterStageClass, delete_event),
_clutter_boolean_handled_accumulator, NULL,
_clutter_marshal_BOOLEAN__BOXED,
G_TYPE_BOOLEAN, 1,
CLUTTER_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
/**
* ClutterStage::before-update:
* @stage: the #ClutterStage
@@ -1952,24 +2011,9 @@ 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;
}
static void
@@ -2416,6 +2460,18 @@ clutter_stage_event (ClutterStage *stage,
g_return_val_if_fail (CLUTTER_IS_STAGE (stage), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
if (event->type == CLUTTER_DELETE)
{
gboolean retval = FALSE;
g_signal_emit_by_name (stage, "event", event, &retval);
if (!retval)
g_signal_emit_by_name (stage, "delete-event", event, &retval);
return retval;
}
if (event->type != CLUTTER_STAGE_STATE)
return FALSE;
@@ -2591,6 +2647,29 @@ G_DEFINE_BOXED_TYPE (ClutterPerspective, clutter_perspective,
clutter_perspective_copy,
clutter_perspective_free);
/**
* clutter_stage_new:
*
* Creates a new, non-default stage. A non-default stage is a new
* top-level actor which can be used as another container.
*
* The ability to support multiple stages depends on the current
* backend. Use clutter_feature_available() and
* %CLUTTER_FEATURE_STAGE_MULTIPLE to check at runtime whether a
* backend supports multiple stages.
*
* Return value: a new stage, or %NULL if the default backend does
* not support multiple stages. Use clutter_actor_destroy() to
* programmatically close the returned stage.
*
* Since: 0.8
*/
ClutterActor *
clutter_stage_new (void)
{
return g_object_new (CLUTTER_TYPE_STAGE, NULL);
}
/**
* clutter_stage_ensure_viewport:
* @stage: a #ClutterStage
@@ -3545,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,

View File

@@ -64,6 +64,7 @@ struct _ClutterStage
* ClutterStageClass:
* @activate: handler for the #ClutterStage::activate signal
* @deactivate: handler for the #ClutterStage::deactivate signal
* @delete_event: handler for the #ClutterStage::delete-event signal
*
* The #ClutterStageClass structure contains only private data
*
@@ -80,13 +81,16 @@ struct _ClutterStageClass
void (* activate) (ClutterStage *stage);
void (* deactivate) (ClutterStage *stage);
gboolean (* delete_event) (ClutterStage *stage,
ClutterEvent *event);
void (* paint_view) (ClutterStage *stage,
ClutterStageView *view,
const cairo_region_t *redraw_clip);
/*< private >*/
/* padding for future expansion */
gpointer _padding_dummy[31];
gpointer _padding_dummy[30];
};
/**
@@ -132,6 +136,9 @@ GType clutter_perspective_get_type (void) G_GNUC_CONST;
CLUTTER_EXPORT
GType clutter_stage_get_type (void) G_GNUC_CONST;
CLUTTER_EXPORT
ClutterActor * clutter_stage_new (void);
CLUTTER_EXPORT
void clutter_stage_get_perspective (ClutterStage *stage,
ClutterPerspective *perspective);
@@ -212,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,

View File

@@ -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;

View File

@@ -103,7 +103,6 @@
#include "clutter-frame-clock.h"
#include "clutter-main.h"
#include "clutter-marshal.h"
#include "clutter-mutter.h"
#include "clutter-private.h"
#include "clutter-scriptable.h"
#include "clutter-timeline-private.h"
@@ -114,8 +113,6 @@ struct _ClutterTimelinePrivate
ClutterFrameClock *custom_frame_clock;
ClutterFrameClock *frame_clock;
ClutterActor *frame_clock_actor;
gulong frame_clock_actor_stage_views_handler_id;
ClutterActor *actor;
gulong actor_destroy_handler_id;
@@ -385,40 +382,19 @@ on_stage_stage_views_changed (ClutterActor *stage,
update_frame_clock (timeline);
}
static void
on_frame_clock_actor_stage_views_changed (ClutterActor *frame_clock_actor,
ClutterTimeline *timeline)
{
update_frame_clock (timeline);
}
static void
update_frame_clock (ClutterTimeline *timeline)
{
ClutterTimelinePrivate *priv = timeline->priv;
ClutterFrameClock *frame_clock = NULL;
ClutterActor *stage;
ClutterActor *frame_clock_actor;
if (!priv->actor)
goto out;
if (priv->frame_clock_actor)
{
g_clear_signal_handler (&priv->frame_clock_actor_stage_views_handler_id,
priv->frame_clock_actor);
g_clear_weak_pointer (&priv->frame_clock_actor);
}
frame_clock = clutter_actor_pick_frame_clock (priv->actor, &frame_clock_actor);
frame_clock = clutter_actor_pick_frame_clock (priv->actor);
if (frame_clock)
{
g_set_weak_pointer (&priv->frame_clock_actor, frame_clock_actor);
priv->frame_clock_actor_stage_views_handler_id =
g_signal_connect (frame_clock_actor, "stage-views-changed",
G_CALLBACK (on_frame_clock_actor_stage_views_changed),
timeline);
g_clear_signal_handler (&priv->stage_stage_views_handler_id, priv->stage);
goto out;
}
@@ -760,13 +736,6 @@ clutter_timeline_dispose (GObject *object)
priv->actor = NULL;
}
if (priv->frame_clock_actor)
{
g_clear_signal_handler (&priv->frame_clock_actor_stage_views_handler_id,
priv->frame_clock_actor);
g_clear_weak_pointer (&priv->frame_clock_actor);
}
if (priv->progress_notify != NULL)
{
priv->progress_notify (priv->progress_data);

View File

@@ -58,8 +58,6 @@ typedef struct _ClutterStageViewCoglPrivate
ClutterDamageHistory *damage_history;
guint notify_presented_handle_id;
CoglFrameClosure *frame_cb_closure;
} ClutterStageViewCoglPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (ClutterStageViewCogl, clutter_stage_view_cogl,
@@ -759,49 +757,32 @@ frame_cb (CoglOnscreen *onscreen,
}
static void
clutter_stage_view_cogl_dispose (GObject *object)
on_framebuffer_set (ClutterStageView *view)
{
ClutterStageViewCogl *view_cogl = CLUTTER_STAGE_VIEW_COGL (object);
ClutterStageViewCoglPrivate *view_priv =
clutter_stage_view_cogl_get_instance_private (view_cogl);
ClutterStageView *view = CLUTTER_STAGE_VIEW (view_cogl);
g_clear_handle_id (&view_priv->notify_presented_handle_id, g_source_remove);
g_clear_pointer (&view_priv->damage_history, clutter_damage_history_free);
if (view_priv->frame_cb_closure)
{
CoglFramebuffer *framebuffer;
framebuffer = clutter_stage_view_get_onscreen (view);
cogl_onscreen_remove_frame_callback (COGL_ONSCREEN (framebuffer),
view_priv->frame_cb_closure);
view_priv->frame_cb_closure = NULL;
}
G_OBJECT_CLASS (clutter_stage_view_cogl_parent_class)->dispose (object);
}
static void
clutter_stage_view_cogl_constructed (GObject *object)
{
ClutterStageViewCogl *view_cogl = CLUTTER_STAGE_VIEW_COGL (object);
ClutterStageViewCoglPrivate *view_priv =
clutter_stage_view_cogl_get_instance_private (view_cogl);
ClutterStageView *view = CLUTTER_STAGE_VIEW (view_cogl);
CoglFramebuffer *framebuffer;
framebuffer = clutter_stage_view_get_onscreen (view);
if (framebuffer && cogl_is_onscreen (framebuffer))
{
view_priv->frame_cb_closure =
cogl_onscreen_add_frame_callback (COGL_ONSCREEN (framebuffer),
frame_cb,
view,
NULL);
cogl_onscreen_add_frame_callback (COGL_ONSCREEN (framebuffer),
frame_cb,
view,
NULL);
}
}
G_OBJECT_CLASS (clutter_stage_view_cogl_parent_class)->constructed (object);
static void
clutter_stage_view_cogl_finalize (GObject *object)
{
ClutterStageViewCogl *view_cogl = CLUTTER_STAGE_VIEW_COGL (object);
ClutterStageViewCoglPrivate *view_priv =
clutter_stage_view_cogl_get_instance_private (view_cogl);
g_clear_handle_id (&view_priv->notify_presented_handle_id, g_source_remove);
clutter_damage_history_free (view_priv->damage_history);
G_OBJECT_CLASS (clutter_stage_view_cogl_parent_class)->finalize (object);
}
static void
@@ -811,6 +792,9 @@ clutter_stage_view_cogl_init (ClutterStageViewCogl *view_cogl)
clutter_stage_view_cogl_get_instance_private (view_cogl);
view_priv->damage_history = clutter_damage_history_new ();
g_signal_connect (view_cogl, "notify::framebuffer",
G_CALLBACK (on_framebuffer_set), NULL);
}
static void
@@ -818,6 +802,5 @@ clutter_stage_view_cogl_class_init (ClutterStageViewCoglClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = clutter_stage_view_cogl_constructed;
object_class->dispose = clutter_stage_view_cogl_dispose;
object_class->finalize = clutter_stage_view_cogl_finalize;
}

View File

@@ -0,0 +1,297 @@
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2010,2011 Intel Corporation.
* 2011 Giovanni Campagna <scampa.giovanni@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
* Authors:
* Matthew Allum
* Emmanuele Bassi
* Robert Bragg
* Neil Roberts
*/
#include "clutter-build-config.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include "clutter-backend-eglnative.h"
/* This is a Cogl based backend */
#include "cogl/clutter-stage-cogl.h"
#include "clutter-debug.h"
#include "clutter-private.h"
#include "clutter-main.h"
#include "clutter-stage-private.h"
#include "clutter-settings-private.h"
#ifdef COGL_HAS_EGL_SUPPORT
#include "clutter-egl.h"
#endif
G_DEFINE_TYPE (ClutterBackendEglNative, clutter_backend_egl_native, CLUTTER_TYPE_BACKEND);
static void
clutter_backend_egl_native_dispose (GObject *gobject)
{
ClutterBackendEglNative *backend_egl_native = CLUTTER_BACKEND_EGL_NATIVE (gobject);
g_clear_object (&backend_egl_native->xsettings);
if (backend_egl_native->event_timer != NULL)
{
g_timer_destroy (backend_egl_native->event_timer);
backend_egl_native->event_timer = NULL;
}
G_OBJECT_CLASS (clutter_backend_egl_native_parent_class)->dispose (gobject);
}
static void
clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->dispose = clutter_backend_egl_native_dispose;
}
typedef struct
{
cairo_antialias_t cairo_antialias;
gint clutter_font_antialias;
cairo_hint_style_t cairo_hint_style;
const char *clutter_font_hint_style;
cairo_subpixel_order_t cairo_subpixel_order;
const char *clutter_font_subpixel_order;
} FontSettings;
static void
get_font_gsettings (GSettings *xsettings,
FontSettings *output)
{
/* org.gnome.settings-daemon.GsdFontAntialiasingMode */
static const struct
{
cairo_antialias_t cairo_antialias;
gint clutter_font_antialias;
}
antialiasings[] =
{
/* none=0 */ {CAIRO_ANTIALIAS_NONE, 0},
/* grayscale=1 */ {CAIRO_ANTIALIAS_GRAY, 1},
/* rgba=2 */ {CAIRO_ANTIALIAS_SUBPIXEL, 1},
};
/* org.gnome.settings-daemon.GsdFontHinting */
static const struct
{
cairo_hint_style_t cairo_hint_style;
const char *clutter_font_hint_style;
}
hintings[] =
{
/* none=0 */ {CAIRO_HINT_STYLE_NONE, "hintnone"},
/* slight=1 */ {CAIRO_HINT_STYLE_SLIGHT, "hintslight"},
/* medium=2 */ {CAIRO_HINT_STYLE_MEDIUM, "hintmedium"},
/* full=3 */ {CAIRO_HINT_STYLE_FULL, "hintfull"},
};
/* org.gnome.settings-daemon.GsdFontRgbaOrder */
static const struct
{
cairo_subpixel_order_t cairo_subpixel_order;
const char *clutter_font_subpixel_order;
}
rgba_orders[] =
{
/* rgba=0 */ {CAIRO_SUBPIXEL_ORDER_RGB, "rgb"}, /* XXX what is 'rgba'? */
/* rgb=1 */ {CAIRO_SUBPIXEL_ORDER_RGB, "rgb"},
/* bgr=2 */ {CAIRO_SUBPIXEL_ORDER_BGR, "bgr"},
/* vrgb=3 */ {CAIRO_SUBPIXEL_ORDER_VRGB, "vrgb"},
/* vbgr=4 */ {CAIRO_SUBPIXEL_ORDER_VBGR, "vbgr"},
};
guint i;
i = g_settings_get_enum (xsettings, "hinting");
if (i < G_N_ELEMENTS (hintings))
{
output->cairo_hint_style = hintings[i].cairo_hint_style;
output->clutter_font_hint_style = hintings[i].clutter_font_hint_style;
}
else
{
output->cairo_hint_style = CAIRO_HINT_STYLE_DEFAULT;
output->clutter_font_hint_style = NULL;
}
i = g_settings_get_enum (xsettings, "antialiasing");
if (i < G_N_ELEMENTS (antialiasings))
{
output->cairo_antialias = antialiasings[i].cairo_antialias;
output->clutter_font_antialias = antialiasings[i].clutter_font_antialias;
}
else
{
output->cairo_antialias = CAIRO_ANTIALIAS_DEFAULT;
output->clutter_font_antialias = -1;
}
i = g_settings_get_enum (xsettings, "rgba-order");
if (i < G_N_ELEMENTS (rgba_orders))
{
output->cairo_subpixel_order = rgba_orders[i].cairo_subpixel_order;
output->clutter_font_subpixel_order = rgba_orders[i].clutter_font_subpixel_order;
}
else
{
output->cairo_subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
output->clutter_font_subpixel_order = NULL;
}
if (output->cairo_antialias == CAIRO_ANTIALIAS_GRAY)
output->clutter_font_subpixel_order = "none";
}
static void
init_font_options (ClutterBackendEglNative *backend_egl_native)
{
GSettings *xsettings = backend_egl_native->xsettings;
cairo_font_options_t *options = cairo_font_options_create ();
FontSettings fs;
get_font_gsettings (xsettings, &fs);
cairo_font_options_set_hint_style (options, fs.cairo_hint_style);
cairo_font_options_set_antialias (options, fs.cairo_antialias);
cairo_font_options_set_subpixel_order (options, fs.cairo_subpixel_order);
clutter_backend_set_font_options (CLUTTER_BACKEND (backend_egl_native),
options);
cairo_font_options_destroy (options);
}
static gboolean
on_xsettings_change_event (GSettings *xsettings,
gpointer keys,
gint n_keys,
gpointer user_data)
{
/*
* A simpler alternative to this function that does not update the screen
* immediately (like macOS :P):
*
* init_font_options (CLUTTER_BACKEND_EGL_NATIVE (user_data));
*
* which has the added benefit of eliminating the need for all the
* FontSettings.clutter_ fields. However the below approach is better for
* testing settings and more consistent with the existing x11 backend...
*/
ClutterSettings *csettings = clutter_settings_get_default ();
FontSettings fs;
gint hinting;
get_font_gsettings (xsettings, &fs);
hinting = fs.cairo_hint_style == CAIRO_HINT_STYLE_NONE ? 0 : 1;
g_object_set (csettings,
"font-hinting", hinting,
"font-hint-style", fs.clutter_font_hint_style,
"font-antialias", fs.clutter_font_antialias,
"font-subpixel-order", fs.clutter_font_subpixel_order,
NULL);
return FALSE;
}
static void
clutter_backend_egl_native_init (ClutterBackendEglNative *backend_egl_native)
{
static const gchar xsettings_path[] = "org.gnome.settings-daemon.plugins.xsettings";
GSettingsSchemaSource *source = g_settings_schema_source_get_default ();
GSettingsSchema *schema = g_settings_schema_source_lookup (source,
xsettings_path,
TRUE);
if (!schema)
{
g_warning ("Failed to find schema: %s", xsettings_path);
}
else
{
backend_egl_native->xsettings = g_settings_new_full (schema, NULL, NULL);
if (backend_egl_native->xsettings)
{
init_font_options (backend_egl_native);
g_signal_connect (backend_egl_native->xsettings, "change-event",
G_CALLBACK (on_xsettings_change_event),
backend_egl_native);
}
}
backend_egl_native->event_timer = g_timer_new ();
}
ClutterBackend *
clutter_backend_egl_native_new (void)
{
return g_object_new (CLUTTER_TYPE_BACKEND_EGL_NATIVE, NULL);
}
/**
* clutter_egl_get_egl_display:
*
* Retrieves the EGL display used by Clutter, if it supports the
* EGL windowing system and if it is running using an EGL backend.
*
* Return value: the EGL display used by Clutter, or 0
*
* Since: 1.6
*/
EGLDisplay
clutter_egl_get_egl_display (void)
{
ClutterBackend *backend;
if (!_clutter_context_is_initialized ())
{
g_critical ("The Clutter backend has not been initialized yet");
return 0;
}
backend = clutter_get_default_backend ();
if (!CLUTTER_IS_BACKEND_EGL_NATIVE (backend))
{
g_critical ("The Clutter backend is not an EGL backend");
return 0;
}
#ifdef COGL_HAS_EGL_SUPPORT
return cogl_egl_context_get_egl_display (backend->cogl_context);
#else
return 0;
#endif
}

View File

@@ -0,0 +1,78 @@
/* Clutter.
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2006, 2007 OpenedHand
* Copyright (C) 2010 Intel Corp
* 2011 Giovanni Campagna <scampa.giovanni@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors:
* Matthew Allum
* Robert Bragg
*/
#ifndef __CLUTTER_BACKEND_EGL_NATIVE_H__
#define __CLUTTER_BACKEND_EGL_NATIVE_H__
#include <glib-object.h>
#include <gio/gio.h>
#include <cogl/cogl.h>
#include <cogl/cogl-egl.h>
#include <clutter/clutter-event.h>
#include <clutter/clutter-backend.h>
#include "clutter-backend-private.h"
G_BEGIN_DECLS
#define CLUTTER_TYPE_BACKEND_EGL_NATIVE (clutter_backend_egl_native_get_type ())
#define CLUTTER_BACKEND_EGL_NATIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_BACKEND_EGL_NATIVE, ClutterBackendEglNative))
#define CLUTTER_IS_BACKEND_EGL_NATIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_BACKEND_EGL_NATIVE))
#define CLUTTER_BACKEND_EGL_NATIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BACKEND_EGL_NATIVE, ClutterBackendEglNativeClass))
#define CLUTTER_IS_BACKEND_EGL_NATIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BACKEND_EGL_NATIVE))
#define CLUTTER_BACKEND_EGL_NATIVE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BACKEND_EGL_NATIVE, ClutterBackendEglNativeClass))
typedef struct _ClutterBackendEglNative ClutterBackendEglNative;
typedef struct _ClutterBackendEglNativeClass ClutterBackendEglNativeClass;
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBackendEglNative, g_object_unref)
struct _ClutterBackendEglNative
{
ClutterBackend parent_instance;
/* event source */
GSource *event_source;
/* event timer */
GTimer *event_timer;
/* "xsettings" is still the defacto place for Xft settings, even in Wayland */
GSettings *xsettings;
};
struct _ClutterBackendEglNativeClass
{
ClutterBackendClass parent_class;
};
CLUTTER_EXPORT
GType clutter_backend_egl_native_get_type (void) G_GNUC_CONST;
ClutterBackend *clutter_backend_egl_native_new (void);
G_END_DECLS
#endif /* __CLUTTER_BACKEND_EGL_NATIVE_H__ */

View File

@@ -0,0 +1,59 @@
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Authored By Matthew Allum <mallum@openedhand.com>
*
* Copyright (C) 2006 OpenedHand
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*
*/
/**
* SECTION:clutter-egl
* @short_description: EGL specific API
*
* The EGL backend for Clutter provides some EGL specific API
*
* You need to include `clutter-egl.h` to have access to the functions documented here.
*/
#ifndef __CLUTTER_EGL_H__
#define __CLUTTER_EGL_H__
#include <glib.h>
#include "clutter-egl-headers.h"
#include <clutter/clutter.h>
G_BEGIN_DECLS
/**
* clutter_egl_get_egl_display:
*
* Retrieves the #EGLDisplay used by Clutter.
*
* Return value: the EGL display
*
* Since: 1.6
*/
CLUTTER_EXPORT
EGLDisplay clutter_egl_get_egl_display (void);
G_END_DECLS
#endif /* __CLUTTER_EGL_H__ */

View File

@@ -257,6 +257,13 @@ if have_x11
clutter_backend_nonintrospected_sources += clutter_x11_nonintrospected_sources
endif
if have_native_backend
clutter_native_nonintrospected_sources = [
'egl/clutter-backend-eglnative.c',
]
clutter_backend_nonintrospected_sources += clutter_native_nonintrospected_sources
endif
if have_wayland
clutter_wayland_private_headers = [
'wayland/clutter-wayland-compositor.h',

View File

@@ -98,6 +98,7 @@ static const gchar *atom_names[] = {
/* various flags corresponding to pre init setup calls */
static gboolean clutter_enable_xinput = TRUE;
static gboolean clutter_enable_argb = FALSE;
static gboolean clutter_enable_stereo = FALSE;
static Display *_foreign_dpy = NULL;
@@ -239,6 +240,13 @@ clutter_backend_x11_pre_parse (ClutterBackend *backend,
env_string = NULL;
}
env_string = g_getenv ("CLUTTER_DISABLE_ARGB_VISUAL");
if (env_string)
{
clutter_enable_argb = FALSE;
env_string = NULL;
}
env_string = g_getenv ("CLUTTER_DISABLE_XINPUT");
if (env_string)
{
@@ -542,12 +550,15 @@ clutter_backend_x11_get_renderer (ClutterBackend *backend,
static gboolean
check_onscreen_template (CoglRenderer *renderer,
CoglSwapChain *swap_chain,
CoglOnscreenTemplate *onscreen_template,
gboolean enable_argb,
gboolean enable_stereo,
GError **error)
{
GError *internal_error = NULL;
cogl_swap_chain_set_has_alpha (swap_chain, enable_argb);
cogl_onscreen_template_set_stereo_enabled (onscreen_template,
clutter_enable_stereo);
@@ -562,15 +573,17 @@ check_onscreen_template (CoglRenderer *renderer,
*/
if (cogl_renderer_check_onscreen_template (renderer, onscreen_template, &internal_error))
{
clutter_enable_argb = enable_argb;
clutter_enable_stereo = enable_stereo;
return TRUE;
}
else
{
if (enable_stereo) /* More possibilities to try */
if (enable_argb || enable_stereo) /* More possibilities to try */
CLUTTER_NOTE (BACKEND,
"Creation of a CoglDisplay with, stereo=%s failed: %s",
"Creation of a CoglDisplay with alpha=%s, stereo=%s failed: %s",
enable_argb ? "enabled" : "disabled",
enable_stereo ? "enabled" : "disabled",
internal_error != NULL
? internal_error->message
@@ -598,7 +611,8 @@ clutter_backend_x11_get_display (ClutterBackend *backend,
CoglDisplay *display = NULL;
gboolean res = FALSE;
CLUTTER_NOTE (BACKEND, "Creating CoglDisplay, stereo=%s",
CLUTTER_NOTE (BACKEND, "Creating CoglDisplay, alpha=%s, stereo=%s",
clutter_enable_argb ? "enabled" : "disabled",
clutter_enable_stereo ? "enabled" : "disabled");
onscreen_template = cogl_onscreen_template_new (swap_chain);
@@ -606,13 +620,22 @@ clutter_backend_x11_get_display (ClutterBackend *backend,
/* It's possible that the current renderer doesn't support transparency
* or doesn't support stereo, so we try the different combinations.
*/
if (clutter_enable_stereo)
res = check_onscreen_template (renderer, onscreen_template,
TRUE, error);
if (clutter_enable_argb && clutter_enable_stereo)
res = check_onscreen_template (renderer, swap_chain, onscreen_template,
TRUE, TRUE, error);
/* Prioritize stereo over alpha */
if (!res && clutter_enable_stereo)
res = check_onscreen_template (renderer, swap_chain, onscreen_template,
FALSE, TRUE, error);
if (!res && clutter_enable_argb)
res = check_onscreen_template (renderer, swap_chain, onscreen_template,
TRUE, FALSE, error);
if (!res)
res = check_onscreen_template (renderer, onscreen_template,
FALSE, error);
res = check_onscreen_template (renderer, swap_chain, onscreen_template,
FALSE, FALSE, error);
if (res)
display = cogl_display_new (renderer, onscreen_template);
@@ -906,6 +929,99 @@ clutter_x11_remove_filter (ClutterX11FilterFunc func,
}
}
/**
* clutter_x11_has_composite_extension:
*
* Retrieves whether Clutter is running on an X11 server with the
* XComposite extension
*
* Return value: %TRUE if the XComposite extension is available
*/
gboolean
clutter_x11_has_composite_extension (void)
{
static gboolean have_composite = FALSE, done_check = FALSE;
int error = 0, event = 0;
Display *dpy;
if (done_check)
return have_composite;
if (!_clutter_context_is_initialized ())
{
g_critical ("X11 backend has not been initialised");
return FALSE;
}
dpy = clutter_x11_get_default_display();
if (dpy == NULL)
return FALSE;
if (XCompositeQueryExtension (dpy, &event, &error))
{
int major = 0, minor = 0;
if (XCompositeQueryVersion (dpy, &major, &minor))
{
if (major >= 0 && minor >= 3)
have_composite = TRUE;
}
}
done_check = TRUE;
return have_composite;
}
/**
* clutter_x11_set_use_argb_visual:
* @use_argb: %TRUE if ARGB visuals should be requested by default
*
* Sets whether the Clutter X11 backend should request ARGB visuals by default
* or not.
*
* By default, Clutter requests RGB visuals.
*
* If no ARGB visuals are found, the X11 backend will fall back to
* requesting a RGB visual instead.
*
* ARGB visuals are required for the #ClutterStage:use-alpha property to work.
*
* This function can only be called once, and before clutter_init() is
* called.
*
* Since: 1.2
*/
void
clutter_x11_set_use_argb_visual (gboolean use_argb)
{
if (_clutter_context_is_initialized ())
{
g_warning ("%s() can only be used before calling clutter_init()",
G_STRFUNC);
return;
}
CLUTTER_NOTE (BACKEND, "ARGB visuals are %s",
use_argb ? "enabled" : "disabled");
clutter_enable_argb = use_argb;
}
/**
* clutter_x11_get_use_argb_visual:
*
* Retrieves whether the Clutter X11 backend is using ARGB visuals by default
*
* Return value: %TRUE if ARGB visuals are queried by default
*
* Since: 1.2
*/
gboolean
clutter_x11_get_use_argb_visual (void)
{
return clutter_enable_argb;
}
/**
* clutter_x11_set_use_stereo_stage:
* @use_stereo: %TRUE if the stereo stages should be used if possible.

View File

@@ -8,6 +8,12 @@ static const struct {
} _clutter_settings_map[] = {
{ "Net/DoubleClickDistance", "double-click-distance" },
{ "Net/DndDragThreshold", "dnd-drag-threshold" },
{ "Gtk/FontName", "font-name" },
{ "Xft/Antialias", "font-antialias" },
{ "Xft/Hinting", "font-hinting" },
{ "Xft/HintStyle", "font-hint-style" },
{ "Xft/RGBA", "font-subpixel-order" },
{ "Fontconfig/Timestamp", "fontconfig-timestamp" },
};
static const gint _n_clutter_settings_map = G_N_ELEMENTS (_clutter_settings_map);

View File

@@ -109,6 +109,14 @@ CLUTTER_EXPORT
void clutter_x11_remove_filter (ClutterX11FilterFunc func,
gpointer data);
CLUTTER_EXPORT
gboolean clutter_x11_has_composite_extension (void);
CLUTTER_EXPORT
void clutter_x11_set_use_argb_visual (gboolean use_argb);
CLUTTER_EXPORT
gboolean clutter_x11_get_use_argb_visual (void);
CLUTTER_EXPORT
void clutter_x11_set_use_stereo_stage (gboolean use_stereo);
CLUTTER_EXPORT

View File

@@ -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;
}

View File

@@ -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:

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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___ */

View File

@@ -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",

View File

@@ -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),

View File

@@ -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,

View File

@@ -37,6 +37,8 @@ struct _CoglSwapChain
{
CoglObject _parent;
gboolean has_alpha;
int length;
};

View File

@@ -59,6 +59,13 @@ cogl_swap_chain_new (void)
return _cogl_swap_chain_object_new (swap_chain);
}
void
cogl_swap_chain_set_has_alpha (CoglSwapChain *swap_chain,
gboolean has_alpha)
{
swap_chain->has_alpha = has_alpha;
}
void
cogl_swap_chain_set_length (CoglSwapChain *swap_chain,
int length)

View File

@@ -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

View File

@@ -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,

View File

@@ -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];

View File

@@ -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
};

View File

@@ -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);

View File

@@ -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
};

View File

@@ -50,6 +50,7 @@ typedef struct _CoglGLXDisplay
CoglGLXCachedConfig glx_cached_configs[COGL_GLX_N_CACHED_CONFIGS];
gboolean found_fbconfig;
gboolean fbconfig_has_rgba_visual;
gboolean is_direct;
gboolean have_vblank_counter;
gboolean can_vblank_wait;

View File

@@ -223,7 +223,7 @@ egl_attributes_from_framebuffer_config (CoglDisplay *display,
attributes[i++] = 1;
attributes[i++] = EGL_ALPHA_SIZE;
attributes[i++] = EGL_DONT_CARE;
attributes[i++] = config->swap_chain->has_alpha ? 1 : EGL_DONT_CARE;
attributes[i++] = EGL_DEPTH_SIZE;
attributes[i++] = 1;

View File

@@ -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 ()

View File

@@ -885,7 +885,7 @@ glx_attributes_from_framebuffer_config (CoglDisplay *display,
attributes[i++] = GLX_BLUE_SIZE;
attributes[i++] = 1;
attributes[i++] = GLX_ALPHA_SIZE;
attributes[i++] = GLX_DONT_CARE;
attributes[i++] = config->swap_chain->has_alpha ? 1 : GLX_DONT_CARE;
attributes[i++] = GLX_DEPTH_SIZE;
attributes[i++] = 1;
attributes[i++] = GLX_STENCIL_SIZE;
@@ -944,8 +944,40 @@ find_fbconfig (CoglDisplay *display,
goto done;
}
COGL_NOTE (WINSYS, "Using the first available FBConfig");
*config_ret = configs[0];
if (config->swap_chain->has_alpha)
{
int i;
for (i = 0; i < n_configs; i++)
{
XVisualInfo *vinfo;
vinfo = glx_renderer->glXGetVisualFromFBConfig (xlib_renderer->xdpy,
configs[i]);
if (vinfo == NULL)
continue;
if (vinfo->depth == 32 &&
(vinfo->red_mask | vinfo->green_mask | vinfo->blue_mask)
!= 0xffffffff)
{
COGL_NOTE (WINSYS, "Found an ARGB FBConfig [index:%d]", i);
*config_ret = configs[i];
goto done;
}
}
g_set_error_literal (error, COGL_WINSYS_ERROR,
COGL_WINSYS_ERROR_CREATE_CONTEXT,
"Unable to find fbconfig with rgba visual");
ret = FALSE;
goto done;
}
else
{
COGL_NOTE (WINSYS, "Using the first available FBConfig");
*config_ret = configs[0];
}
done:
XFree (configs);
@@ -1027,6 +1059,8 @@ create_context (CoglDisplay *display, GError **error)
CoglXlibRenderer *xlib_renderer =
_cogl_xlib_renderer_get_data (display->renderer);
CoglGLXRenderer *glx_renderer = display->renderer->winsys;
gboolean support_transparent_windows =
display->onscreen_template->config.swap_chain->has_alpha;
GLXFBConfig config;
GError *fbconfig_error = NULL;
XSetWindowAttributes attrs;
@@ -1050,6 +1084,7 @@ create_context (CoglDisplay *display, GError **error)
}
glx_display->fbconfig = config;
glx_display->fbconfig_has_rgba_visual = support_transparent_windows;
COGL_NOTE (WINSYS, "Creating GLX Context (display: %p)",
xlib_renderer->xdpy);

View File

@@ -162,7 +162,7 @@ on_paint (ClutterActor *actor,
/* Comment this out if you want visual feedback for what this test paints */
#if 1
clutter_test_quit ();
clutter_main_quit ();
#endif
}
@@ -191,7 +191,7 @@ test_multitexture (TestUtilsGTestFixture *fixture,
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
/* We force continuous redrawing incase someone comments out the
* clutter_test_quit and wants visual feedback for the test since we
* clutter_main_quit and wants visual feedback for the test since we
* wont be doing anything else that will trigger redrawing. */
idle_source = g_idle_add (queue_redraw, stage);
@@ -199,7 +199,7 @@ test_multitexture (TestUtilsGTestFixture *fixture,
clutter_actor_show (stage);
clutter_test_main ();
clutter_main ();
g_clear_handle_id (&idle_source, g_source_remove);

View File

@@ -137,7 +137,7 @@ on_paint (ClutterActor *actor,
/* Comment this out if you want visual feedback of what this test
* paints.
*/
clutter_test_quit ();
clutter_main_quit ();
}
static gboolean
@@ -165,7 +165,7 @@ test_readpixels (TestUtilsGTestFixture *fixture,
g_signal_connect_after (stage, "paint", G_CALLBACK (on_paint), NULL);
clutter_actor_show (stage);
clutter_test_main ();
clutter_main ();
g_clear_handle_id (&idle_source, g_source_remove);

View File

@@ -92,7 +92,7 @@ on_paint (ClutterActor *actor,
/* Comment this out if you want visual feedback for what this test paints */
#if 1
clutter_test_quit ();
clutter_main_quit ();
#endif
}
@@ -129,7 +129,7 @@ test_texture_mipmaps (TestUtilsGTestFixture *fixture,
clutter_actor_show (stage);
clutter_test_main ();
clutter_main ();
g_clear_handle_id (&idle_source, g_source_remove);

View File

@@ -183,7 +183,7 @@ on_paint (ClutterActor *actor,
update_pixmap (state);
else if (big_updated)
/* If we successfully got the update then the test is over */
clutter_test_quit ();
clutter_main_quit ();
}
state->frame_count++;
@@ -226,7 +226,7 @@ test_texture_pixmap_x11 (TestUtilsGTestFixture *fixture,
clutter_actor_show (state.stage);
clutter_test_main ();
clutter_main ();
g_clear_signal_handler (&paint_handler, state.stage);

View File

@@ -375,7 +375,7 @@ on_paint (ClutterActor *actor,
/* Comment this out if you want visual feedback of what this test
* paints.
*/
clutter_test_quit ();
clutter_main_quit ();
}
static gboolean
@@ -403,7 +403,7 @@ test_viewport (TestUtilsGTestFixture *fixture,
g_signal_connect_after (stage, "paint", G_CALLBACK (on_paint), NULL);
clutter_actor_show (stage);
clutter_test_main ();
clutter_main ();
g_clear_handle_id (&idle_source, g_source_remove);

View File

@@ -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:

View File

@@ -1,6 +1,6 @@
project('mutter', 'c',
version: '3.37.91',
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 = [

File diff suppressed because it is too large Load Diff

172
po/ca.po
View File

@@ -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. Its 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. Its 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 theres 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)"

View File

@@ -13,8 +13,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-13 10:31+0200\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-02-24 13:15+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es_ES\n"
@@ -22,7 +22,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 3.36.0\n"
"X-Generator: Gtranslator 3.34.0\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
@@ -518,16 +518,6 @@ msgstr ""
"Permitir capturas con X11 para bloquear el foco del teclado con 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 "
@@ -537,7 +527,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 ""
"Permitir que los eventos del teclado se dirijan a ventanas X11 “override "
"redirect” con una pulsación cuando se ejecutan en Xwayland. Esta opción es "
@@ -555,25 +545,14 @@ msgid "Xwayland applications allowed to issue keyboard grabs"
msgstr "Aplicaciones de Xwayland que pueden capturar el teclado"
#: 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”."
@@ -591,7 +570,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 "Cambiar modo (grupo %d)"
@@ -599,34 +578,34 @@ msgstr "Cambiar modo (grupo %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 "Cambiar monitor"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Mostrar la ayuda en pantalla"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Pantalla integrada"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Desconocida"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Pantalla desconocida"
#: 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 "
@@ -641,7 +620,7 @@ 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:516
#: src/compositor/compositor.c:533
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display “%s”."
@@ -752,7 +731,7 @@ msgstr "Complemento de mutter que usar"
msgid "Workspace %d"
msgstr "Área de trabajo %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"
@@ -797,7 +776,7 @@ msgstr ""
"Estas ventanas no soportan «guardar la configuración actual» y tendrán que "
"reiniciarse manualmente la próxima vez que inicie una sesión."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (on %s)"

View File

@@ -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 quune 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 dune fenêtre X11 donnée peut être obtenue à laide 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 laide à 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)"

View File

@@ -9,22 +9,21 @@
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
# Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
# Fran Dieguez <frandieguez@gnome.org>, 2012-2020.
#
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019.
msgid ""
msgstr ""
"Project-Id-Version: gl\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-13 00:46+0200\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-02-26 21:56+0100\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <proxecto@trasno.gal>\n"
"Language-Team: Galician\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Gtranslator 3.36.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.3\n"
"X-Project-Style: gnome\n"
#: data/50-mutter-navigation.xml:6
@@ -515,16 +514,6 @@ msgstr ""
"Permitir os capturadores de X11 bloquear o foco do teclado con 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 "
@@ -534,7 +523,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 ""
"Permite que todos os eventos de teclado se redirixan a xanelas X11 "
"«invalidar redirección» con un capturador ao executarse en Xwayland. Esta "
@@ -544,7 +533,7 @@ msgstr ""
"esta xanela. Esta opción é rara vez usada e non ten efecto en xanelas X11 "
"normais que poden recibir o foco do teclado baixo circunstancias normais. "
"Para que a captura de X11 se leve a cabo baixo Wayland, o cliente debe "
"enviar un ClientMessage de X11 específico á xanela pai ou estar na lista "
"enviar un ClienteMessage de X11 específico á xanela pai ou estar na lista "
"branca de aplicacións na chave «xwayland-grab-access-rules»."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
@@ -552,25 +541,14 @@ msgid "Xwayland applications allowed to issue keyboard grabs"
msgstr "Aplicaciones de Xwayland que poden capturar o teclado"
#: 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”."
@@ -589,7 +567,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 "Modo conmutador (Grupo %d)"
@@ -597,34 +575,34 @@ msgstr "Modo conmutador (Grupo %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 "Cambiar monitor"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Mostrar axuda en pantalla"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Pantalla embebida"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Descoñecido"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Pantalla descoñecida"
#: 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 "
@@ -639,7 +617,7 @@ 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:516
#: src/compositor/compositor.c:533
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display “%s”."
@@ -749,7 +727,7 @@ msgstr "Engadido de mutter que usar"
msgid "Workspace %d"
msgstr "Espazo de traballo %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter foi compilado sen compatibilidade para o modo detallado\n"
@@ -794,7 +772,7 @@ msgstr ""
"Estas xanelas non soportan «save current setup» e terán que reiniciarse "
"manualmente a próxima vez que inicie a sesión."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (en %s)"

View File

@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity 0\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-23 13:27+0200\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-03-01 16:54+0100\n"
"Last-Translator: gogo <linux.hr@protonmail.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
"Language: hr\n"
@@ -16,7 +16,7 @@ msgstr ""
"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-Launchpad-Export-Date: 2008-05-28 13:28+0000\n"
"X-Generator: Poedit 2.4.1\n"
"X-Generator: Poedit 2.0.6\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
@@ -512,7 +512,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 ""
"Dopusti svim događajima tipkovnice da budu usmjereni u X11 “override "
"redirect” prozore i obuhvaćeni kada su pokrenuti u Xwaylandu. Ova mogućnost "
@@ -535,9 +535,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”."
@@ -555,7 +555,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 "Način prebacivanja (Grupa %d)"
@@ -563,34 +563,34 @@ msgstr "Način prebacivanja (Grupa %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 "Prebaci zaslon"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Prikaži zaslonsku pomoć"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Ugrađeni zaslon"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Nepoznat"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Nepoznat zaslon"
#: 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 "
@@ -605,7 +605,7 @@ msgstr "Kompozitor"
#. 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”."
@@ -714,7 +714,7 @@ msgstr "Mutter priključak koji se koristi"
msgid "Workspace %d"
msgstr "Radni prostor %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter je kompiliran bez podrške za opširan način rada\n"
@@ -759,7 +759,7 @@ msgstr ""
"Ovi prozori ne podržavaju mogućnost \"spremi trenutne postavke\" i moraju se "
"ručno ponovno pokrenuti sljedeći puta kada se prijavite."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"

View File

@@ -11,15 +11,15 @@ 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-14 18:32+0700\n"
"POT-Creation-Date: 2020-02-23 17:44+0000\n"
"PO-Revision-Date: 2020-02-25 17:48+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.1\n"
"X-Generator: Poedit 2.3\n"
"Plural-Forms: nplurals=2; plural= n!=1;\n"
#: data/50-mutter-navigation.xml:6
@@ -517,7 +517,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 ""
"Izinkan semua peristiwa papan tik dialihkan ke jendela X11 \"override "
"redirect\" dengan perambanan saat berjalan di Xwayland. Opsi ini adalah "
@@ -527,7 +527,8 @@ msgstr ""
"dan tidak berpengaruh pada jendela X11 biasa yang dapat menerima fokus papan "
"tik dalam keadaan normal. Agar pengambilan X11 diperhitungkan di bawah "
"Wayland, klien juga harus mengirim PesanKlien X11 tertentu ke jendela root "
"atau di antara aplikasi yang diizinkan di kunci “xwayland-grab-access-rules”."
"atau di antara aplikasi yang masuk dalam daftar putih “xwayland-grab-access-"
"rules”."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
msgid "Xwayland applications allowed to issue keyboard grabs"
@@ -541,9 +542,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”."
@@ -553,7 +554,7 @@ msgstr ""
"X11 di bawah Xwayland. Nama sumber daya atau kelas sumber daya dari jendela "
"X11 yang diberikan dapat diperoleh memakai perintah \"xprop WM_CLASS\". "
"Wildcard \"*\" dan joker \"?\" dalam nilai didukung. Nilai yang dimulai "
"dengan \"!\" ditolak, yang punya preseden atas daftar nilai yang diizinkan, "
"dengan \"!\" masuk daftar hitam, yang punya preseden atas daftar putih, "
"untuk mencabut aplikasi dari daftar sistem bawaan. Daftar sistem bawaan "
"termasuk aplikasi-aplikasi berikut: \"@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@"
"\". Pengguna dapat memutus pengambilalihan yang ada dengan memakai pintasan "
@@ -563,7 +564,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 "Tukar Mode: (Grup %d)"
@@ -571,34 +572,34 @@ msgstr "Tukar Mode: (Grup %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 "Berpindah monitor"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Tampilkan bantuan pada layar"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Tampilan bawaan"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Tak Dikenal"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Tampilan Tak Dikenal"
#: 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 "
@@ -613,7 +614,7 @@ msgstr "Kompositor"
#. 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”."
@@ -722,7 +723,7 @@ msgstr "Pengaya Mutter yang dipakai"
msgid "Workspace %d"
msgstr "Area kerja %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Muter dikompilasi tanpa dukungan mode riuh\n"
@@ -767,7 +768,7 @@ msgstr ""
"Jendela ini tidak mendukung \"menyimpan setelan aktif saat ini\" dan mesti "
"dijalankan ulang secara manual kala berikut Anda log masuk."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (pada %s)"

View File

@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter\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-15 11:44+0200\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-02-29 13:15+0100\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <community-poland@mozilla.org>\n"
"Language: pl\n"
@@ -529,7 +529,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 ""
"Zezwolenie na przekierowanie wszystkich zdarzeń klawiatury do okien "
"„przekierowania zastąpienia” X11 za pomocą przechwycenia podczas działania "
@@ -540,8 +540,8 @@ msgstr ""
"zwykłe okna X11, które mogą otrzymywać aktywność klawiatury w zwykłych "
"okolicznościach. Aby przechwycenie X11 zostało uwzględnione w systemie "
"Wayland, klient musi także wysłać konkretny komunikat ClientMessage systemu "
"X11 do głównego okna lub być na liście dozwolonych programów w kluczu "
"„xwayland-grab-access-rules”."
"X11 do głównego okna lub być na liście programów w kluczu „xwayland-grab-"
"access-rules”."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
msgid "Xwayland applications allowed to issue keyboard grabs"
@@ -553,9 +553,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”."
@@ -565,16 +565,15 @@ msgstr ""
"nazwę zasobu lub klasę zasobów danego okna X11 za pomocą polecenia „xprop "
"WM_CLASS”. W wartościach obsługiwane są wieloznaczniki „*” i „?”. Wartości "
"zaczynające się od znaku „!” nie mają zezwolenia, co ma pierwszeństwo przed "
"listą dozwolonych wartości, aby usunąć je z domyślnej listy systemu. "
"Domyślna lista systemu zawiera te programy: "
"„@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@”. Użytkownicy mogą przerwać istniejące "
"przechwycenie za pomocą skrótu klawiszowego określonego w kluczu „restore-"
"shortcuts”."
"zezwoleniami, aby usunąć je z domyślnej listy systemu. Domyślna lista "
"systemu zawiera te programy: „@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@”. "
"Użytkownicy mogą przerwać istniejące przechwycenie za pomocą skrótu "
"klawiszowego określonego w kluczu „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 "Przełącznik trybu (%d. grupa)"
@@ -582,34 +581,34 @@ msgstr "Przełącznik trybu (%d. grupa)"
#. 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 "Przełączenie monitora"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Ekran pomocy"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Wbudowany ekran"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Nieznany"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Nieznany ekran"
#: 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 "
@@ -624,7 +623,7 @@ msgstr "Menedżer składania"
#. 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”."
@@ -732,7 +731,7 @@ msgstr "Używana wtyczka menedżera Mutter"
msgid "Workspace %d"
msgstr "%d. obszar roboczy"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Menedżer Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
@@ -778,7 +777,7 @@ msgstr ""
"Te okna nie obsługują opcji zapisu obecnego stanu („save current setup”), "
"więc przy następnym zalogowaniu będą musiały zostać uruchomione ręcznie."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"

View File

@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter\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-23 15:25-0300\n"
"POT-Creation-Date: 2020-04-27 14:06+0000\n"
"PO-Revision-Date: 2020-07-17 17:56-0300\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n"
@@ -527,16 +527,6 @@ msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
msgstr "Permitir as capturas do X11 travar o foco do teclado com 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 "
@@ -546,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 ""
"Permita que todos os eventos do teclado sejam roteados para as janelas "
"“override redirect” do X11 com uma captura ao executar no Xwayland. Esta "
@@ -557,32 +547,21 @@ msgstr ""
"receber o foco do teclado em circunstâncias normais. Para que uma captura de "
"X11 seja levada em conta no Wayland, o cliente também deve enviar uma "
"ClientMessage específica do X11 para a janela raiz ou estar entre os "
"aplicativos permitidos na chave “xwayland-grab-access-rules”."
"aplicativos na lista branca na chave “xwayland-grab-access-rules”."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
msgid "Xwayland applications allowed to issue keyboard grabs"
msgstr "Aplicativos Xwayland com permissão para emitir capturas de teclado"
#: 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”."
@@ -591,8 +570,8 @@ msgstr ""
"permissão para emitir capturas de teclado X11 no Xwayland. O nome do recurso "
"ou a classe de recurso de uma determinada janela X11 podem ser obtidos "
"usando o comando “xprop WM_CLASS”. Há suporte a curingas “*” e “?” nos "
"valores. Os valores que começam com “!” são negados, que tem precedência "
"sobre a lista de valores permitidos, para revogar aplicativos da lista "
"valores. Os valores que começam com “!” são colocados em uma lista negra, "
"que tem precedência sobre a lista branca, para revogar aplicativos da lista "
"padrão do sistema. A lista de sistema padrão inclui os seguintes "
"aplicativos: “@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@”. Os usuários podem "
"quebrar uma captura existente usando o atalho de teclado específico definido "
@@ -601,7 +580,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:2631
#, c-format
msgid "Mode Switch (Group %d)"
msgstr "Alternador de modo (Grupo %d)"
@@ -609,34 +588,34 @@ msgstr "Alternador de modo (Grupo %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:2654
msgid "Switch monitor"
msgstr "Trocar monitor"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2656
msgid "Show on-screen help"
msgstr "Mostrar ajuda na tela"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:226
msgid "Built-in display"
msgstr "Tela embutida"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:255
msgid "Unknown"
msgstr "Desconhecido"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:257
msgid "Unknown Display"
msgstr "Monitor desconhecido"
#: src/backends/meta-monitor.c:274
#: src/backends/meta-monitor.c:265
#, 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:273
#, c-format
msgctxt ""
"This is a monitor vendor name followed by product/model name where size in "
@@ -651,7 +630,7 @@ 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:516
#: src/compositor/compositor.c:533
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display “%s”."
@@ -762,7 +741,7 @@ msgstr "Plug-in do Mutter para usar"
msgid "Workspace %d"
msgstr "Espaço de trabalho %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "O Mutter foi compilado sem suporte para modo detalhado\n"
@@ -807,7 +786,7 @@ msgstr ""
"Estas janelas não oferecem suporte para a opção “salvar configuração atual” "
"e precisarão ser reiniciadas manualmente quando você reiniciar a sessão."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (em %s)"

View File

@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity.HEAD.ro\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-14 15:47+0300\n"
"Last-Translator: Florentina Mușat <florentina.musat.28@gmail.com>\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-03-19 11:58+0100\n"
"Last-Translator: Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>\n"
"Language-Team: Gnome Romanian Translation Team <gnomero-list@lists."
"sourceforge.net>\n"
"Language: ro\n"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && n"
"%100<=19) ? 1 : 2);\n"
"X-Generator: Poedit 2.4\n"
"X-Generator: Poedit 2.3\n"
"X-Project-Style: gnome\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -527,7 +527,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 ""
"Permite ca toate evenimentele de tastatură să fie rutate la ferestrele de "
"„redirecționare suprascriere” X11 cu o blocare când se rulează Xwayland. "
@@ -551,9 +551,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”."
@@ -562,17 +562,18 @@ msgstr ""
"sau nepermise să emită capturi de tastatură X11 în Xwayland. Numele resursei "
"sau clasa resursei a unei ferestre X11 date pot fi obținute utilizând "
"comanda „xprop WM_CLASS*. Metacaracterele „*” și jokerii „?” în valori sunt "
"suportați. Valorile care încep cu „!” sunt respinse, care are prioritate "
"peste lista de valori permise, pentru a revoca aplicații din lista de sistem "
"implicită. Lista de sistem implicită include următoarele aplicații: "
"„@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Utilizatorii pot să întrerupă o "
"captură existentă prin utilizarea scurtăturii de tastatură specifice "
"definite de tasta de stabilire a combinațiilor de taste „restore-shortcuts”."
"suportați. Valorile care încep cu „!” sunt adăugate în lista de interziceri, "
"care are prioritate peste lista de permisiuni, pentru a revoca aplicații din "
"lista de sistem implicită. Lista de sistem implicită include următoarele "
"aplicații: „@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Utilizatorii pot să "
"întrerupă o captură existentă prin utilizarea scurtăturii de tastatură "
"specifice definite de tasta de stabilire a combinațiilor de taste „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 "Comutator de mod (grupul %d)"
@@ -580,34 +581,34 @@ msgstr "Comutator de mod (grupul %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 "Comută monitorul"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Arată ajutorul virtual"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Afișaj integrat"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Necunoscut"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Afișaj necunoscut"
#: 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 "
@@ -622,7 +623,7 @@ msgstr "Compunător"
#. 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”."
@@ -733,7 +734,7 @@ msgstr "Modul Mutter de utilizat"
msgid "Workspace %d"
msgstr "Spațiu de lucru %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
@@ -779,7 +780,7 @@ msgstr ""
"Aceste ferestre nu suportă „salvează configurarea curentă” și vor trebui "
"repornite manual următoarea dată când vă veți autentifica."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (pe %s)"

View File

@@ -10,8 +10,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-19 05:29+0000\n"
"PO-Revision-Date: 2020-08-19 21:41+0200\n"
"POT-Creation-Date: 2020-02-29 19:52+0000\n"
"PO-Revision-Date: 2020-02-29 21:23+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: sl_SI\n"
@@ -21,7 +21,7 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 2.3\n"
"X-Generator: Poedit 2.2.4\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
@@ -516,16 +516,15 @@ 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 ""
"Upošteva zajeme s tipkovnico, ki jih sprožijo programi s preusmeritvijo "
"»override redirect« X11, zagnani v okolju Xwayland. Možnost je namenjena "
"podpori odjemalcem X11, ki preslikajo okno s to »preglasitvijo "
"preusmeritve« (program ne prenese žarišča na tipkovnico) in vsili dogodke "
"Upošteva zajeme s tipkovnico, ki jih sprožijo programi X11, zagnani v okolju "
"Xwayland. možnost je namenjena podpori odjemalcem X11, ki preslikajo okno s "
"\"preglasitvijo preusmeritve\" (ne dobi žarišča tipkovnice) in vsili dogodke "
"tipkovnice v to okno. Možnost se uporablja redko ne vpliva na običajna okna "
"X11, ki lahko v običajnih okoliščinah pridobijo žarišča. Da bo zajem X11 "
"upoštevan v okolju Waylandu, mora odjemalec poslati tudi določeno sporočilo "
"odjemalcu X11 v korensko okno ali pa mora biti med programi na belem seznamu "
"odjemalcu X11 v korensko okno ali pa mora biti med mrogrami na belem seznamu "
"v ključu \"xwayland-grab-access-rules\"."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
@@ -538,9 +537,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”."
@@ -548,9 +547,9 @@ msgstr ""
"Seznam imen ali razredov virov oken X11, ki lahko sprožijo zajeme v okolju "
"Xwayland. Ime oziroma razred vira podanega okna X11 je mogoče pridobiti z "
"ukazom »xprop WM_CLASS«. Uporaba pomožnih znakov » * « in » ? « je podprta. "
"Vrednosti, ki se začnejo z znakom » ! « so uvrščene na črni seznam. Ta "
"Vrednosti, ki se začnejo z znakom » ! « so uvrščeni na črni seznam. Ta "
"seznam je obravnavan prednostno pred belim seznamom in prekliče zajeme na "
"seznamu sistema. Privzeti seznam vključuje programe: "
"seznamu sistema. Privzeti seznam vključuje ključ: "
"»@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@« Uporabniki lahko prekinejo obstoječi "
"zajem z uporabo posebne tipkovne bližnjice, določene s tipkovnim ključem "
"»restore-shortcuts«."
@@ -558,7 +557,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 "Preklop načina (skupina %d)"
@@ -566,34 +565,34 @@ msgstr "Preklop načina (skupina %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 "Nadzornik preklopa"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Pokaži zaslonsko pomoč"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:226
msgid "Built-in display"
msgstr "Vgrajen zaslon"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:255
msgid "Unknown"
msgstr "Neznano"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:257
msgid "Unknown Display"
msgstr "Neznan zaslon"
#: src/backends/meta-monitor.c:274
#: src/backends/meta-monitor.c:265
#, 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:273
#, c-format
msgctxt ""
"This is a monitor vendor name followed by product/model name where size in "
@@ -608,7 +607,7 @@ msgstr "Sestavljalnik"
#. 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”."
@@ -717,7 +716,7 @@ msgstr "Vstavek Mutter za uporabo"
msgid "Workspace %d"
msgstr "Delovna površina %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Program Mutter je kodno preveden brez podpore za podrobni način izpisovanja\n"
@@ -764,7 +763,7 @@ msgstr ""
"Ta okna ne podpirajo možnosti »shranjevanja trenutnih nastavitev«, zato jih "
"bo treba ob naslednji prijavi zagnati ročno."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"

View File

@@ -6,24 +6,22 @@
# Данило Шеган <danilo@prevod.org>, 2005.
# Милош Поповић <gpopac@gmail.com>, 2010.
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2017.
# Марко М. Костић <marko.m.kostic@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter\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-19 07:28+0200\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-03-08 21:20+0100\n"
"Last-Translator: Марко М. Костић <marko.m.kostic@gmail.com>\n"
"Language-Team: Serbian <gnome-sr@googlegroups.org>\n"
"Language-Team: српски <gnome-sr@googlegroups.org>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n"
"X-Generator: Gtranslator 3.36.0\n"
"X-Generator: Poedit 2.3\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
@@ -511,16 +509,6 @@ msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
msgstr "Дозволи Икс11 грабљења да закључају фокус тастатуре у Икс-вејланду"
#: 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 "
@@ -530,7 +518,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 ""
"Дозволи да се сви догађаји тастатуре преусмере на Икс11 \"override redirect"
"\" прозоре са грабљењем када се извршавају унутар Икс-вејленда. Ова опција "
@@ -539,34 +527,23 @@ msgstr ""
"које присили све догађаје са тастатуре на овај прозор. Ова опција се ретко "
"користи и нема утицаја на обичне Икс11 прозоре који могу бити у фокусу "
"тастатуре у обичним околностима. Да би се Икс11 грабљење узело у обзир под "
"Вејлендом, клијент такође мора или послати одређену Икс11 клијентску поруку "
"у корени прозор или мора бити одобрени програм у кључу \"xwayland-grab-"
"access-rules\"."
"Вејлендом, клијент такође мра или послати одређену Икс11 клијентску поруку у "
"корени прозор или мора бити одобрени програм у кључу \"xwayland-grab-access-"
"rules\"."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
msgid "Xwayland applications allowed to issue keyboard grabs"
msgstr "Икс-вејленд програми којима је дозвољено да раде грабљења на тастатури"
#: 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”."
@@ -575,9 +552,9 @@ msgstr ""
"или забрањено да раде грабљења на тастатури под Икс-вејлендом. Назив ресурса "
"или класа ресурса датог Икс11 прозора се може наћи преко наредбе \"xprop "
"WM_CLASS\". Џокер знакови „*“ и „?“ унутар вредности су подржани. Вредности "
"које почињу са „!“ се одбацују, овај списак има предност у односу на списак "
"дозвољених вредности, за опозив програма за подразумеваног системског "
"списка. Подразумевани системски списак садржи следеће програме: "
"које почињу са „!“ се стављају на црни списак, који има предност у односу на "
"бели списак, за опозив програма за подразумеваног системског списка. "
"Подразумевани системски списак садржи следеће програме: "
"\"@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@\" Корисници могу сломити постојеће "
"грабљење тако што ће употребити посебну пречицу на тастатури која је "
"наведена у кључу за везивање тастера са називом \"restore-shortcuts\"."
@@ -585,7 +562,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 "Режим прекидача (група %d)"
@@ -593,34 +570,34 @@ 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 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
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 "
@@ -635,7 +612,7 @@ 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”."
@@ -744,7 +721,7 @@ msgstr "Прикључци Матера за коришћење"
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 "Матер је преведен без подршке за опширан режим\n"
@@ -789,7 +766,7 @@ msgstr ""
"Ови прозори не подржавају могућност „сачувај тренутна подешавања“ па ћете "
"морати ручно да их поново покренете када се следећи пут пријавите."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (на %s)"

View File

@@ -14,8 +14,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-16 21:04+0300\n"
"POT-Creation-Date: 2020-02-23 17:41+0000\n"
"PO-Revision-Date: 2020-02-24 17:57+0300\n"
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
"Language: tr\n"
@@ -442,8 +442,7 @@ msgid ""
"not be detected as frozen. Using 0 will disable the alive check completely."
msgstr ""
"İstemcinin donuk olarak saptanmaması için ping istemini yanıtlaması gereken "
"milisaniye sayısı. 0 kullanmak canlılık denetimini tümüyle devre dışı "
"bırakır."
"milisaniye sayısı. 0 kullanmak canlılık denetimini tümüyle devre dışı bırakır."
#: data/org.gnome.mutter.gschema.xml.in:165
msgid "Select window from tab popup"
@@ -527,7 +526,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 ""
"Xwayland içinde çalışırken tüm klavye etkinlikleri yakalamalı X11 “override "
"redirect” pencerelerine yönlendirilecek. Bu seçenek, “override redirect” "
@@ -537,7 +536,7 @@ msgstr ""
"koşullar altında klavye odağı alan sıradan X11 pencerelerinde etkisi yoktur. "
"Bir X11 yakalamasının Wayland altında hesaba katılması için istemci ya kök "
"pencereye belirli X11 ClientMessageı göndermeli ya da “xwayland-grab-access-"
"rules” anahtarındaki izin verilen uygulamalar arasında olmalıdır."
"rules” anahtarındaki beyaz listeli uygulamalar arasında olmalıdır."
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
msgid "Xwayland applications allowed to issue keyboard grabs"
@@ -549,9 +548,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”."
@@ -561,8 +560,8 @@ msgstr ""
"listele. Verilen bir X11 penceresinin kaynak adı veya kaynak sınıfı “xprop "
"WM_CLASS” komutuyla elde edilebilir. Değerlerde “*” joker karakteri ve “?” "
"değiştirilebilir damga kullanımı desteklenmektedir. “!” ile başlayan "
"değerler engellenmiştir; bunların, uygulamaları öntanımlı sistem listesinden "
"kaldırmada, izinli listesinden üstünlüğü vardır. Öntanımlı sistem listesi şu "
"değerler, uygulamaları öntanımlı sistem listesinden feshetmek için beyaz "
"listeden önceliği olan kara listeye alınmıştır. Öntanımlı sistem listesi şu "
"uygulamaları içerir: “@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Kullanıcılar, "
"“restore-shortcuts” anahtar bağlama anahtarıyla tanımlanmış özel klavye "
"kısayolunu kullanarak var olan yakalamayı kırabilir."
@@ -570,7 +569,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 "Kip anahtarı (Küme %d)"
@@ -578,34 +577,34 @@ msgstr "Kip anahtarı (Küme %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 "Monitör değiştir"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2592
msgid "Show on-screen help"
msgstr "Ekranda yardımı göster"
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:223
msgid "Built-in display"
msgstr "Yerleşik ekran"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:252
msgid "Unknown"
msgstr "Bilinmiyor"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:254
msgid "Unknown Display"
msgstr "Bilinmeyen Ekran"
#: 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 "
@@ -620,7 +619,7 @@ msgstr "Dizgici"
#. 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”."
@@ -670,7 +669,7 @@ msgstr "Xwaylandi çalıştırmadan Wayland dizgici çalıştır"
#: src/core/main.c:246
msgid "Run as a full display server, rather than nested"
msgstr "İç içe değil, tam ekran sunucusu olarak çalıştır"
msgstr "İç içe değil tam ekran sunucusu olarak çalıştır"
#: src/core/main.c:252
msgid "Run with X11 backend"
@@ -730,7 +729,7 @@ msgstr "Kullanılacak Mutter eklentisi"
msgid "Workspace %d"
msgstr "Çalışma Alanı %d"
#: src/core/util.c:119
#: src/core/util.c:122
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n"
@@ -776,7 +775,7 @@ msgstr ""
"Bu pencereler, “geçerli ayarları kaydet” özelliğini desteklemiyor ve bir "
"dahaki girişinizde elle yeniden başlatılmak zorundadır."
#: src/x11/window-props.c:548
#: src/x11/window-props.c:569
#, c-format
msgid "%s (on %s)"
msgstr "%s (%s üzerinde)"

184
po/uk.po
View File

@@ -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 theres 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 themes 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 &quot;save current setup&quot; 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)"

View File

@@ -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-16 11:50+0800\n"
"POT-Creation-Date: 2019-08-31 12:39+0000\n"
"PO-Revision-Date: 2019-09-11 00:10+0800\n"
"Last-Translator: Dingzhong Chen <wsxy162@gmail.com>\n"
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n"
@@ -29,7 +29,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.4.1\n"
"X-Generator: Gtranslator 3.32.1\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
@@ -412,31 +412,19 @@ msgstr "用来定位指针的修饰键"
msgid "This key will initiate the “locate pointer” action."
msgstr "此按键将启动“定位指针”操作。"
#: data/org.gnome.mutter.gschema.xml.in:142
msgid "Timeout for check-alive ping"
msgstr "检测活动的 ping 超时"
#: 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 ""
"为了不被检测为冻结,客户端必须响应 ping 请求的毫秒数。使用 0 将完全禁用活动检"
"测。"
#: data/org.gnome.mutter.gschema.xml.in:165
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Select window from tab popup"
msgstr "从 Tab 轮换弹出界面选择窗口"
#: data/org.gnome.mutter.gschema.xml.in:170
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Cancel tab popup"
msgstr "取消 Tab 轮换弹出"
#: data/org.gnome.mutter.gschema.xml.in:175
#: data/org.gnome.mutter.gschema.xml.in:165
msgid "Switch monitor configurations"
msgstr "切换显示器配置"
#: data/org.gnome.mutter.gschema.xml.in:180
#: data/org.gnome.mutter.gschema.xml.in:170
msgid "Rotates the built-in monitor configuration"
msgstr "旋转内置显示器配置"
@@ -506,14 +494,14 @@ 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 ""
"当运行在 Xwayland 下时,允许通过捕获,发送所有的键盘事件到 X11“覆盖重定向”窗"
"口。此选项是为了支持(收不到键盘焦点的)“覆盖重定向”窗口所映射的 X11 客户端,"
"并发起键盘捕获强制所有键盘事件进到那个窗口。此选项比较少用,并且对常规 X11 窗"
"口没有影响,这些窗口在正常情况下可以收到键盘焦点。在 Wayland 下,为了 X11 捕"
"获能够工作,客户端也必须发送一个指定的 X11 ClientMessage 到根窗口,或是包含"
"进“xwayland-grab-access-rules”键成为其中一个允许的应用程序。"
"进“xwayland-grab-access-rules”键成为其中一个白名单应用程序。"
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
msgid "Xwayland applications allowed to issue keyboard grabs"
@@ -525,24 +513,24 @@ 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”."
msgstr ""
"Xwayland 下允许或不允许发起 X11 键盘捕获的 X11 窗口,其资源名或资源类的列表。"
"给定 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:2531
#, c-format
msgid "Mode Switch (Group %d)"
msgstr "模式切换(组别 %d"
@@ -550,34 +538,34 @@ 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:2554
msgid "Switch monitor"
msgstr "切换显示器"
#: src/backends/meta-input-settings.c:2723
#: src/backends/meta-input-settings.c:2556
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 "未知的 Display"
#: 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 "
@@ -586,13 +574,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 "合成器"
#. 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:509
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display “%s”."
@@ -602,47 +590,47 @@ msgstr "显示器 %2$s 的屏幕 %1$i 上已有另外一个混成窗口管理器
msgid "Bell event"
msgstr "响铃事件"
#: src/core/main.c:190
#: src/core/main.c:186
msgid "Disable connection to session manager"
msgstr "禁止连接到会话管理器"
#: src/core/main.c:196
#: src/core/main.c:192
msgid "Replace the running window manager"
msgstr "替换正在运行的窗口管理器"
#: src/core/main.c:202
#: src/core/main.c:198
msgid "Specify session management ID"
msgstr "指定会话管理 ID"
#: src/core/main.c:207
#: src/core/main.c:203
msgid "X Display to use"
msgstr "要使用的 X Display"
#: src/core/main.c:213
#: src/core/main.c:209
msgid "Initialize session from savefile"
msgstr "从保存文件中初始化会话"
#: src/core/main.c:219
#: src/core/main.c:215
msgid "Make X calls synchronous"
msgstr "使 X 调用同步"
#: src/core/main.c:226
#: src/core/main.c:222
msgid "Run as a wayland compositor"
msgstr "以 wayland 合成器运行"
#: src/core/main.c:232
#: src/core/main.c:228
msgid "Run as a nested compositor"
msgstr "以嵌套合成器运行"
#: src/core/main.c:238
#: src/core/main.c:234
msgid "Run wayland compositor without starting Xwayland"
msgstr "运行 wayland 合成器但不启动 Xwayland"
#: src/core/main.c:246
#: src/core/main.c:242
msgid "Run as a full display server, rather than nested"
msgstr "以完整显示服务器方式运行,而不是以嵌套方式"
#: src/core/main.c:252
#: src/core/main.c:248
msgid "Run with X11 backend"
msgstr "以 X11 后端运行"
@@ -692,12 +680,12 @@ msgstr "打印版本"
msgid "Mutter plugin to use"
msgstr "要使用的 Mutter 插件"
#: src/core/prefs.c:1911
#: src/core/prefs.c:1849
#, c-format
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"
@@ -706,7 +694,7 @@ msgstr "Mutter 编译的时候没有加入详细模式的支持\n"
msgid "Mode Switch: Mode %d"
msgstr "模式切换:%d 模式"
#: src/x11/meta-x11-display.c:676
#: src/x11/meta-x11-display.c:679
#, c-format
msgid ""
"Display “%s” already has a window manager; try using the --replace option to "
@@ -715,21 +703,21 @@ msgstr ""
"Display“%s”已经有一个窗口管理器请尝试使用 --replace 选项替换当前的窗口管理"
"器。"
#: src/x11/meta-x11-display.c:1089
#: src/x11/meta-x11-display.c:1040
msgid "Failed to initialize GDK\n"
msgstr "初始化 GDK 失败\n"
#: src/x11/meta-x11-display.c:1113
#: src/x11/meta-x11-display.c:1064
#, c-format
msgid "Failed to open X Window System display “%s”\n"
msgstr "无法打开 X Window System 显示器“%s”\n"
#: src/x11/meta-x11-display.c:1196
#: src/x11/meta-x11-display.c:1147
#, c-format
msgid "Screen %d on display “%s” is invalid\n"
msgstr "显示“%2$s”上的屏幕 %1$d 无效\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 "不支持 %s 格式"
@@ -740,7 +728,7 @@ msgid ""
"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"

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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 */

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -750,7 +750,6 @@ meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_mana
int x;
GList *monitors;
GList *l;
MetaMonitorsConfig *monitors_config;
primary_monitor = find_primary_monitor (monitor_manager);
if (!primary_monitor)
@@ -794,15 +793,10 @@ meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_mana
x += logical_monitor_config->layout.width;
}
monitors_config = meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
if (monitors_config)
meta_monitors_config_set_switch_config (monitors_config, META_MONITOR_SWITCH_CONFIG_ALL_LINEAR);
return monitors_config;
return meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
}
MetaMonitorsConfig *
@@ -1084,7 +1078,6 @@ create_for_switch_config_all_mirror (MetaMonitorConfigManager *config_manager)
GList *modes;
GList *monitors;
GList *l;
MetaMonitorsConfig *monitors_config;
monitors = meta_monitor_manager_get_monitors (monitor_manager);
monitor = monitors->data;
@@ -1177,15 +1170,10 @@ create_for_switch_config_all_mirror (MetaMonitorConfigManager *config_manager)
logical_monitor_configs = g_list_append (NULL, logical_monitor_config);
layout_mode = meta_monitor_manager_get_default_layout_mode (monitor_manager);
monitors_config = meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
if (monitors_config)
meta_monitors_config_set_switch_config (monitors_config, META_MONITOR_SWITCH_CONFIG_ALL_MIRROR);
return monitors_config;
return meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
}
static MetaMonitorsConfig *
@@ -1197,7 +1185,6 @@ create_for_switch_config_external (MetaMonitorConfigManager *config_manager)
MetaLogicalMonitorLayoutMode layout_mode;
GList *monitors;
GList *l;
MetaMonitorsConfig *monitors_config;
layout_mode = meta_monitor_manager_get_default_layout_mode (monitor_manager);
@@ -1225,15 +1212,10 @@ create_for_switch_config_external (MetaMonitorConfigManager *config_manager)
x += logical_monitor_config->layout.width;
}
monitors_config = meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
if (monitors_config)
meta_monitors_config_set_switch_config (monitors_config, META_MONITOR_SWITCH_CONFIG_EXTERNAL);
return monitors_config;
return meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
}
static MetaMonitorsConfig *
@@ -1244,7 +1226,6 @@ create_for_switch_config_builtin (MetaMonitorConfigManager *config_manager)
GList *logical_monitor_configs;
MetaLogicalMonitorConfig *primary_logical_monitor_config;
MetaMonitor *monitor;
MetaMonitorsConfig *monitors_config;
monitor = meta_monitor_manager_get_laptop_panel (monitor_manager);
if (!monitor)
@@ -1262,15 +1243,10 @@ create_for_switch_config_builtin (MetaMonitorConfigManager *config_manager)
logical_monitor_configs = g_list_append (NULL,
primary_logical_monitor_config);
monitors_config = meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
if (monitors_config)
meta_monitors_config_set_switch_config (monitors_config, META_MONITOR_SWITCH_CONFIG_BUILTIN);
return monitors_config;
return meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE);
}
MetaMonitorsConfig *
@@ -1303,6 +1279,9 @@ meta_monitor_config_manager_create_for_switch_config (MetaMonitorConfigManager
return NULL;
}
if (config)
meta_monitors_config_set_switch_config (config, config_type);
return config;
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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 */

View File

@@ -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

View File

@@ -143,7 +143,7 @@ meta_renderer_real_rebuild_views (MetaRenderer *renderer)
meta_backend_get_monitor_manager (backend);
GList *logical_monitors, *l;
g_list_free_full (priv->views, (GDestroyNotify) clutter_stage_view_destroy);
g_list_free_full (priv->views, g_object_unref);
priv->views = NULL;
logical_monitors =

View File

@@ -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,

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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 */

View File

@@ -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;

View File

@@ -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);
}

Some files were not shown because too many files have changed in this diff Show More