Compare commits

..

32 Commits

Author SHA1 Message Date
Armin Krezović
25fd9e005b Fix cursor size update on non-wayland 2017-08-28 10:50:44 +08:00
Armin Krezović
114bfc04ef Move workspace related code from MetaDisplay to MetaWorkspaceManager 2017-08-28 10:50:44 +08:00
Armin Krezović
26dde9dfe0 Add MetaWorkspaceManager skeleton 2017-08-28 10:50:44 +08:00
Armin Krezović
25c9ce2dad Rename errors.[ch] to meta-x11-errors.[ch]
Also rename meta_error_trap_* to meta_x11_error_trap_* and
move meta-x11-errors.c to src/x11
2017-08-28 10:50:44 +08:00
Armin Krezović
7d2ef2d821 Add --no-x11 flag so mutter wayland can be started without X11 2017-08-28 10:50:44 +08:00
Armin Krezović
1838ec08a2 Use MetaMonitorManager insted of MetaDisplay where possible
This drops display's monitors-changed signal and makes all
the code rely on MetaMonitorManager.
2017-08-28 10:50:44 +08:00
Armin Krezović
9a405fb943 Fix XDND handling to work without GDK and MetaX11Display
This fixes mutter --nested --wayland without X11
2017-08-28 10:50:44 +08:00
Armin Krezović
7515c80d7a Split GDK initialization from MetaUI
Get rid of the deprecated gdk_display_get_default_screen ()
2017-08-28 10:50:44 +08:00
Armin Krezović
6ff46b5f64 Don't use gtk_settings callback to set shell_shows_app_menu
GTK+ won't be initialized if X11 is not available

Instead, when setting gtk-shell-shows-app-menu,
meta_prefs_set_show_fallback_app_menu should be
called as well.
2017-08-28 10:50:44 +08:00
Armin Krezović
703f05f6e3 Make stack tracker work without X11 2017-08-28 10:50:44 +08:00
Armin Krezović
d2c2fe6e09 Move workarea hint setting to MetaX11Display 2017-08-28 10:50:44 +08:00
Armin Krezović
e2c02c6014 Make bell and libstartup-notification bits work without X11 2017-08-28 10:50:44 +08:00
Armin Krezović
c0e6128182 Make workspace management work without X11 2017-08-28 10:50:44 +08:00
Armin Krezović
4c40b7591d Prepare for making MetaX11Display conditional
- Stop using CurrentTime, introduce META_CURRENT_TIME
- Add signals for signaling when MetaX11Display is opened
  or closed down
- Use g_get_monotonic_time () instead of relying on an
  X server running and making roundtrip to it
2017-08-28 10:50:44 +08:00
Armin Krezović
6c0e889a85 Get rid of MetaScreen 2017-08-28 10:50:44 +08:00
Armin Krezović
046712a28b Stop using MetaScreen where it is unnecessary 2017-08-28 10:50:44 +08:00
Armin Krezović
91c9d5182d Move workspace handing to MetaDisplay/MetaX11Display 2017-08-28 10:50:44 +08:00
Armin Krezović
e0105ee425 Move UI and key grabs to MetaX11Display 2017-08-28 10:50:44 +08:00
Armin Krezović
773aab96bf Move mouse window tracking to MetaDisplay 2017-08-28 10:50:44 +08:00
Armin Krezović
f53a605c4f Move xinerama management to MetaX11Display 2017-08-28 10:50:44 +08:00
Armin Krezović
383f2ed815 Move MetaScreen monitor API to MetaDisplay 2017-08-28 10:50:38 +08:00
Armin Krezović
38a8559fbe Move rest of non-X11 specific objects from MetaScreen
This moves following objects from MetaScreen to MetaDisplay

- workareas_later and in_fullscreen_later signals and functions
- startup_sequences signals and functions
- tile_preview functions
2017-08-26 21:10:38 +02:00
Armin Krezović
b24136d0d5 Move X11 event, icon cache and property handling to MetaX11Display 2017-08-26 20:54:39 +02:00
Armin Krezović
90826dd660 Move X11 helper windows and xprops to MetaX11Display 2017-08-26 20:51:28 +02:00
Armin Krezović
467a6fa8fc Move stack tracking and guard_window outside of MetaScreen
stack, stack_tracker to MetaDisplay
guard_window to MetaX11Display
2017-08-26 19:03:51 +02:00
Armin Krezović
3974925819 Move groups and window/group prop hooks to MetaX11Display 2017-08-26 18:58:29 +02:00
Armin Krezović
b157d34417 Move alarm and xids management to MetaX11Display 2017-08-26 18:56:44 +02:00
Armin Krezović
a2d13e76cc Move screen size and cursor setting to MetaDisplay
Split X11 specific parts into MetaX11Display
2017-08-26 18:49:51 +02:00
Armin Krezović
a72a2381de Move X11 extension queries to MetaX11Display
Also split extension queries into their own functions
2017-08-26 18:28:53 +02:00
Armin Krezović
2d0a1b8179 Switch meta_error_trap functions to MetaX11Display
They are X11 specific functions, used for X11 code. They have been
improved per jadahl's suggestion to use gdk_x11_lookup_xdisplay and
gdk_x11_display_error_trap_* functions, instead of current code.
2017-08-26 18:27:50 +02:00
Armin Krezović
1d97da1631 Start populating MetaX11Display
- Moved xdisplay, name and various atoms from MetaDisplay
- Moved xroot, screen_name, default_depth and default_xvisual
  from MetaScreen

- Moved some X11 specific functions from screen.c and display.c
  to meta-x11-display.c
2017-08-26 18:26:30 +02:00
Armin Krezović
88b5580af7 Add MetaX11Display skeleton
Also reorder meta_display_open () and meta_display_close ()
to sort X11 and non-X11 specific members.
2017-08-26 18:24:46 +02:00
223 changed files with 11133 additions and 18475 deletions

4
.gitignore vendored
View File

@@ -55,7 +55,6 @@ mutter-restart-helper
mutter-test-client mutter-test-client
mutter-test-runner mutter-test-runner
mutter-test-unit-tests mutter-test-unit-tests
mutter-test-headless-start-test
mutter-all.test mutter-all.test
org.gnome.mutter.gschema.valid org.gnome.mutter.gschema.valid
org.gnome.mutter.gschema.xml org.gnome.mutter.gschema.xml
@@ -72,8 +71,6 @@ src/stamp-meta-enum-types.h
src/meta-dbus-display-config.[ch] src/meta-dbus-display-config.[ch]
src/meta-dbus-idle-monitor.[ch] src/meta-dbus-idle-monitor.[ch]
src/meta-dbus-login1.[ch] src/meta-dbus-login1.[ch]
src/meta-dbus-remote-desktop.[ch]
src/meta-dbus-screen-cast.[ch]
src/gtk-primary-selection-protocol.c src/gtk-primary-selection-protocol.c
src/gtk-primary-selection-server-protocol.h src/gtk-primary-selection-server-protocol.h
src/gtk-shell-protocol.c src/gtk-shell-protocol.c
@@ -115,4 +112,3 @@ ltsugar.m4
ltversion.m4 ltversion.m4
lt~obsolete.m4 lt~obsolete.m4
.dirstamp .dirstamp
**/tags.*

80
NEWS
View File

@@ -1,83 +1,3 @@
3.26.2
======
* Work with clients that require older linux_dmabuf protocol [Daniel; #788558]
* Prevent crash when closing maximized windows [Jonni; #788666]
* Use the correct monitor for HiDPI scaling of shell chrome [Jonas; #788820]
* Fix unredirection of fullscreen windows [Rui, Jonas; #788493]
* Fix list of supported monitor scales on X11 [Jonas; #788901]
* Fix handling of trackball settings on wayland [Carlos; #787804]
* Enable XWayland core dumps [Daniel; #789086]
* Fixes of misc. multi-monitor regressions and crashes [Jonas, Marco; #788607,
#788860, #789153, #786929, #789501]
* Misc. bug fixes [Florian, Jonas, Michael, Marco, Carlos; #788572, #788569,
#784314, #789227, #789223, #782344, #789552, #789553, #789300]
Contributors:
Jonas Ådahl, Jeremy Bicha, Michael Catanzaro, Carlos Garnacho, Rui Matos,
Florian Müllner, Daniel Stone, Marco Trevisan, Daniel van Vugt,
Jonni Westphalen
Translations:
Xavi Ivars [ca@valencia]
3.26.1
======
* Fix crash when respawning shortcut inhibitor dialog [Olivier; #787568]
* Fix crash during monitor configuration migration [Carlos, Jonas; #787668]
* Fix multihead regressions in X11 session [Jonas; #787477]
* Fix screen rotation regressions [Hans; #787836]
* Fix keybindings not being resolved with non-latin layouts [Jonas; #787016]
* Support snap packages for sandboxed app IDs [Marco; #788217]
* Fix crash when reconnecting tablet device [Jason; #787649]
* Support running headless [Jonas; #730551, #787637]
* Support _NET_RESTACK_WINDOW and ConfigureRequest siblings [Vasilis; #786365]
* Fix monitor layout not being remembered across sessions [Jonas; #787629]
* Make sure to export _NET_NUMBER_OF_DESKTOPS [Florian; #760651]
* Allow resizing of tiled windows [Georges, Florian; #645153]
* Export tiling information to clients [Georges; #751857]
* Misc. bug fixes [Jonas, Florian, Jeremy, Rico; #787570, #787715, #787953,
#788049, #788199, #788292, #788197]
Contributors:
Jonas Ådahl, Andrea Azzarone, Georges Basile Stavracas Neto, Hans de Goede,
Olivier Fourdan, Carlos Garnacho, Jason Gerecke, Vasilis Liaskovitis,
Rui Matos, Florian Müllner, Jeremy Soller, Marco Trevisan, Rico Tzschichholz
Translations:
Matej Urbančič [sl], gogo [hr], Cheng-Chia Tseng [zh_TW]
3.26.0
======
Contributors:
Florian Müllner
Translations:
Trần Ngọc Quân [vi], Inaki Larranaga Murgoitio [eu], Jordi Mas [ca],
Anders Jonsson [sv], Alexander Shopov [bg], Ask Hjorth Larsen [da],
Jean-Baptiste Holcroft [fr], A S Alam [pa]
3.25.92
=======
* Add screencast and remote desktop support [Jonas; #784199]
* Support running with no attached monitors [Jonas; #730551]
* Add a vertical gradient effect to background actor [Alessandro; #786618]
* Misc. bug fixes [Mario, Daniel, Piotr, Jonas, Bastien; #786619, #786677,
#772218, #786918, #760670]
Contributors:
Jonas Ådahl, Alessandro Bono, Piotr Drąg, Bastien Nocera,
Mario Sanchez Prada, Daniel Stone
Translations:
Marek Cernocky [cs], Aurimas Černius [lt], Piotr Drąg [pl],
Fran Dieguez [gl], gogo [hr], Dušan Kazik [sk], Milo Casagrande [it],
Jordi Mas [ca], Cheng-Chia Tseng [zh_TW], Марко Костић [sr],
Милош Поповић [sr@latin], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
Ask Hjorth Larsen [da], Piotr Drąg [it, lt], Jiri Grönroos [fi],
Emin Tufan Çetin [tr], Wolfgang Stöggl [de], Kukuh Syafaat [id],
Yuras Shumovich [be], Changwoo Ryu [ko], Alexander Shopov [bg],
Rafael Fontenelle [pt_BR], Balázs Úr [hu]
3.25.91 3.25.91
======= =======
* Reduce memory use of suspended instances [Jonas; #786299] * Reduce memory use of suspended instances [Jonas; #786299]

View File

@@ -4828,6 +4828,7 @@ clutter_actor_set_scale_factor (ClutterActor *self,
g_assert (pspec != NULL); g_assert (pspec != NULL);
g_assert (scale_p != NULL); g_assert (scale_p != NULL);
if (*scale_p != factor)
_clutter_actor_create_transition (self, pspec, *scale_p, factor); _clutter_actor_create_transition (self, pspec, *scale_p, factor);
} }
@@ -10263,6 +10264,7 @@ clutter_actor_set_position (ClutterActor *self,
cur_position.x = clutter_actor_get_x (self); cur_position.x = clutter_actor_get_x (self);
cur_position.y = clutter_actor_get_y (self); cur_position.y = clutter_actor_get_y (self);
if (!clutter_point_equals (&cur_position, &new_position))
_clutter_actor_create_transition (self, obj_props[PROP_POSITION], _clutter_actor_create_transition (self, obj_props[PROP_POSITION],
&cur_position, &cur_position,
&new_position); &new_position);

View File

@@ -40,12 +40,6 @@ gboolean _clutter_get_sync_to_vblank (void);
CLUTTER_AVAILABLE_IN_MUTTER CLUTTER_AVAILABLE_IN_MUTTER
int64_t clutter_stage_get_frame_counter (ClutterStage *stage); int64_t clutter_stage_get_frame_counter (ClutterStage *stage);
CLUTTER_AVAILABLE_IN_MUTTER
void clutter_stage_capture_into (ClutterStage *stage,
gboolean paint,
cairo_rectangle_int_t *rect,
uint8_t *data);
#undef __CLUTTER_H_INSIDE__ #undef __CLUTTER_H_INSIDE__
#endif /* __CLUTTER_MUTTER_H__ */ #endif /* __CLUTTER_MUTTER_H__ */

View File

@@ -267,6 +267,7 @@ clutter_stage_view_set_property (GObject *object,
priv->layout = *layout; priv->layout = *layout;
break; break;
case PROP_FRAMEBUFFER: case PROP_FRAMEBUFFER:
g_clear_pointer (&priv->framebuffer, cogl_object_unref);
priv->framebuffer = g_value_dup_boxed (value); priv->framebuffer = g_value_dup_boxed (value);
#ifndef G_DISABLE_CHECKS #ifndef G_DISABLE_CHECKS
if (priv->framebuffer) if (priv->framebuffer)
@@ -284,6 +285,7 @@ clutter_stage_view_set_property (GObject *object,
#endif #endif
break; break;
case PROP_OFFSCREEN: case PROP_OFFSCREEN:
g_clear_pointer (&priv->offscreen, cogl_object_unref);
priv->offscreen = g_value_dup_boxed (value); priv->offscreen = g_value_dup_boxed (value);
break; break;
case PROP_SCALE: case PROP_SCALE:
@@ -355,7 +357,7 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass)
"Framebuffer used as intermediate buffer", "Framebuffer used as intermediate buffer",
COGL_TYPE_HANDLE, COGL_TYPE_HANDLE,
G_PARAM_READWRITE | G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS); G_PARAM_STATIC_STRINGS);
obj_props[PROP_SCALE] = obj_props[PROP_SCALE] =

View File

@@ -4810,93 +4810,3 @@ clutter_stage_capture (ClutterStage *stage,
return TRUE; return TRUE;
} }
static void
capture_view_into (ClutterStage *stage,
gboolean paint,
ClutterStageView *view,
cairo_rectangle_int_t *rect,
uint8_t *data,
int stride)
{
CoglFramebuffer *framebuffer;
ClutterBackend *backend;
CoglContext *context;
CoglBitmap *bitmap;
cairo_rectangle_int_t view_layout;
framebuffer = clutter_stage_view_get_framebuffer (view);
if (paint)
{
_clutter_stage_maybe_setup_viewport (stage, view);
cogl_push_framebuffer (framebuffer);
clutter_stage_do_paint_view (stage, view, rect);
}
backend = clutter_get_default_backend ();
context = clutter_backend_get_cogl_context (backend);
bitmap = cogl_bitmap_new_for_data (context,
rect->width, rect->height,
CLUTTER_CAIRO_FORMAT_ARGB32,
stride,
data);
clutter_stage_view_get_layout (view, &view_layout);
cogl_framebuffer_read_pixels_into_bitmap (framebuffer,
rect->x - view_layout.x,
rect->y - view_layout.y,
COGL_READ_PIXELS_COLOR_BUFFER,
bitmap);
if (paint)
cogl_pop_framebuffer ();
cogl_object_unref (bitmap);
}
static ClutterStageView *
get_view_at_rect (ClutterStage *stage,
cairo_rectangle_int_t *rect)
{
ClutterStagePrivate *priv = stage->priv;
GList *views = _clutter_stage_window_get_views (priv->impl);
GList *l;
for (l = views; l; l = l->next)
{
ClutterStageView *view = l->data;
cairo_rectangle_int_t view_layout;
cairo_region_t *region;
cairo_rectangle_int_t view_capture_rect;
clutter_stage_view_get_layout (view, &view_layout);
region = cairo_region_create_rectangle (&view_layout);
cairo_region_intersect_rectangle (region, rect);
cairo_region_get_extents (region, &view_capture_rect);
cairo_region_destroy (region);
if (view_capture_rect.width == 0 || view_capture_rect.height == 0)
continue;
g_assert (view_capture_rect.width == rect->width &&
view_capture_rect.height == rect->height);
return view;
}
return NULL;
}
void
clutter_stage_capture_into (ClutterStage *stage,
gboolean paint,
cairo_rectangle_int_t *rect,
uint8_t *data)
{
ClutterStageView *view;
int bpp = 4;
view = get_view_at_rect (stage, rect);
capture_view_into (stage, paint, view, rect, data, rect->width * bpp);
}

View File

@@ -115,19 +115,6 @@ clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virtual_d
klass->notify_keyval (virtual_device, time_us, keyval, key_state); klass->notify_keyval (virtual_device, time_us, keyval, key_state);
} }
void
clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
uint64_t time_us,
ClutterScrollDirection direction,
ClutterScrollSource scroll_source)
{
ClutterVirtualInputDeviceClass *klass =
CLUTTER_VIRTUAL_INPUT_DEVICE_GET_CLASS (virtual_device);
klass->notify_discrete_scroll (virtual_device, time_us,
direction, scroll_source);
}
/** /**
* clutter_virtual_input_device_get_manager: * clutter_virtual_input_device_get_manager:
* @virtual_device: a virtual device * @virtual_device: a virtual device

View File

@@ -76,11 +76,6 @@ struct _ClutterVirtualInputDeviceClass
uint64_t time_us, uint64_t time_us,
uint32_t keyval, uint32_t keyval,
ClutterKeyState key_state); ClutterKeyState key_state);
void (*notify_discrete_scroll) (ClutterVirtualInputDevice *virtual_device,
uint64_t time_us,
ClutterScrollDirection direction,
ClutterScrollSource scroll_source);
}; };
CLUTTER_AVAILABLE_IN_ALL CLUTTER_AVAILABLE_IN_ALL
@@ -113,13 +108,6 @@ void clutter_virtual_input_device_notify_keyval (ClutterVirtualInputDevice *virt
uint32_t keyval, uint32_t keyval,
ClutterKeyState key_state); ClutterKeyState key_state);
CLUTTER_AVAILABLE_IN_ALL
void clutter_virtual_input_device_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
uint64_t time_us,
ClutterScrollDirection direction,
ClutterScrollSource scroll_source);
CLUTTER_AVAILABLE_IN_ALL CLUTTER_AVAILABLE_IN_ALL
ClutterDeviceManager * clutter_virtual_input_device_get_manager (ClutterVirtualInputDevice *virtual_device); ClutterDeviceManager * clutter_virtual_input_device_get_manager (ClutterVirtualInputDevice *virtual_device);

View File

@@ -59,6 +59,9 @@
#include "clutter-device-manager-evdev.h" #include "clutter-device-manager-evdev.h"
#define DISCRETE_SCROLL_STEP 10.0
/* /*
* Clutter makes the assumption that two core devices have ID's 2 and 3 (core * Clutter makes the assumption that two core devices have ID's 2 and 3 (core
* pointer and core keyboard). * pointer and core keyboard).
@@ -397,6 +400,120 @@ notify_relative_tool_motion (ClutterInputDevice *input_device,
queue_event (event); queue_event (event);
} }
static ClutterScrollDirection
discrete_to_direction (gdouble discrete_x,
gdouble discrete_y)
{
if (discrete_x > 0)
return CLUTTER_SCROLL_RIGHT;
else if (discrete_x < 0)
return CLUTTER_SCROLL_LEFT;
else if (discrete_y > 0)
return CLUTTER_SCROLL_DOWN;
else if (discrete_y < 0)
return CLUTTER_SCROLL_UP;
else
return CLUTTER_SCROLL_SMOOTH;
}
static void
notify_discrete_scroll (ClutterInputDevice *input_device,
guint64 time_us,
ClutterScrollDirection direction,
ClutterScrollSource scroll_source,
gboolean emulated)
{
ClutterInputDeviceEvdev *device_evdev;
ClutterSeatEvdev *seat;
ClutterStage *stage;
ClutterEvent *event = NULL;
if (direction == CLUTTER_SCROLL_SMOOTH)
return;
/* We can drop the event on the floor if no stage has been
* associated with the device yet. */
stage = _clutter_input_device_get_stage (input_device);
if (stage == NULL)
return;
device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
seat = _clutter_input_device_evdev_get_seat (device_evdev);
event = clutter_event_new (CLUTTER_SCROLL);
_clutter_evdev_event_set_time_usec (event, time_us);
event->scroll.time = us2ms (time_us);
event->scroll.stage = CLUTTER_STAGE (stage);
event->scroll.device = seat->core_pointer;
_clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
event->scroll.direction = direction;
event->scroll.x = seat->pointer_x;
event->scroll.y = seat->pointer_y;
clutter_event_set_device (event, seat->core_pointer);
clutter_event_set_source_device (event, input_device);
event->scroll.scroll_source = scroll_source;
_clutter_event_set_pointer_emulated (event, emulated);
queue_event (event);
}
static void
notify_scroll (ClutterInputDevice *input_device,
guint64 time_us,
gdouble dx,
gdouble dy,
ClutterScrollSource source,
ClutterScrollFinishFlags flags,
gboolean emulated)
{
ClutterInputDeviceEvdev *device_evdev;
ClutterSeatEvdev *seat;
ClutterStage *stage;
ClutterEvent *event = NULL;
gdouble scroll_factor;
/* We can drop the event on the floor if no stage has been
* associated with the device yet. */
stage = _clutter_input_device_get_stage (input_device);
if (stage == NULL)
return;
device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
seat = _clutter_input_device_evdev_get_seat (device_evdev);
event = clutter_event_new (CLUTTER_SCROLL);
_clutter_evdev_event_set_time_usec (event, time_us);
event->scroll.time = us2ms (time_us);
event->scroll.stage = CLUTTER_STAGE (stage);
event->scroll.device = seat->core_pointer;
_clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
/* libinput pointer axis events are in pointer motion coordinate space.
* To convert to Xi2 discrete step coordinate space, multiply the factor
* 1/10. */
event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
scroll_factor = 1.0 / DISCRETE_SCROLL_STEP;
clutter_event_set_scroll_delta (event,
scroll_factor * dx,
scroll_factor * dy);
event->scroll.x = seat->pointer_x;
event->scroll.y = seat->pointer_y;
clutter_event_set_device (event, seat->core_pointer);
clutter_event_set_source_device (event, input_device);
event->scroll.scroll_source = source;
event->scroll.finish_flags = flags;
_clutter_event_set_pointer_emulated (event, emulated);
queue_event (event);
}
static void static void
notify_touch_event (ClutterInputDevice *input_device, notify_touch_event (ClutterInputDevice *input_device,
ClutterEventType evtype, ClutterEventType evtype,
@@ -1036,6 +1153,40 @@ process_base_event (ClutterDeviceManagerEvdev *manager_evdev,
return handled; return handled;
} }
static void
check_notify_discrete_scroll (ClutterDeviceManagerEvdev *manager_evdev,
ClutterInputDevice *device,
guint64 time_us,
ClutterScrollSource scroll_source)
{
ClutterInputDeviceEvdev *device_evdev =
CLUTTER_INPUT_DEVICE_EVDEV (device);
ClutterSeatEvdev *seat = _clutter_input_device_evdev_get_seat (device_evdev);
int i, n_xscrolls, n_yscrolls;
n_xscrolls = floor (fabs (seat->accum_scroll_dx) / DISCRETE_SCROLL_STEP);
n_yscrolls = floor (fabs (seat->accum_scroll_dy) / DISCRETE_SCROLL_STEP);
for (i = 0; i < n_xscrolls; i++)
{
notify_discrete_scroll (device, time_us,
seat->accum_scroll_dx > 0 ?
CLUTTER_SCROLL_RIGHT : CLUTTER_SCROLL_LEFT,
scroll_source, TRUE);
}
for (i = 0; i < n_yscrolls; i++)
{
notify_discrete_scroll (device, time_us,
seat->accum_scroll_dy > 0 ?
CLUTTER_SCROLL_DOWN : CLUTTER_SCROLL_UP,
scroll_source, TRUE);
}
seat->accum_scroll_dx = fmodf (seat->accum_scroll_dx, DISCRETE_SCROLL_STEP);
seat->accum_scroll_dy = fmodf (seat->accum_scroll_dy, DISCRETE_SCROLL_STEP);
}
static ClutterScrollSource static ClutterScrollSource
translate_scroll_source (enum libinput_pointer_axis_source source) translate_scroll_source (enum libinput_pointer_axis_source source)
{ {
@@ -1183,68 +1334,6 @@ seat_from_device (ClutterInputDevice *device)
return _clutter_input_device_evdev_get_seat (device_evdev); return _clutter_input_device_evdev_get_seat (device_evdev);
} }
static void
notify_continuous_axis (ClutterSeatEvdev *seat,
ClutterInputDevice *device,
uint64_t time_us,
ClutterScrollSource scroll_source,
struct libinput_event_pointer *axis_event)
{
gdouble dx = 0.0, dy = 0.0;
ClutterScrollFinishFlags finish_flags = CLUTTER_SCROLL_FINISHED_NONE;
if (libinput_event_pointer_has_axis (axis_event,
LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL))
{
dx = libinput_event_pointer_get_axis_value (
axis_event, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL);
if (fabs (dx) < DBL_EPSILON)
finish_flags |= CLUTTER_SCROLL_FINISHED_HORIZONTAL;
}
if (libinput_event_pointer_has_axis (axis_event,
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL))
{
dy = libinput_event_pointer_get_axis_value (
axis_event, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
if (fabs (dy) < DBL_EPSILON)
finish_flags |= CLUTTER_SCROLL_FINISHED_VERTICAL;
}
clutter_seat_evdev_notify_scroll_continuous (seat, device, time_us,
dx, dy,
scroll_source, finish_flags);
}
static void
notify_discrete_axis (ClutterSeatEvdev *seat,
ClutterInputDevice *device,
uint64_t time_us,
ClutterScrollSource scroll_source,
struct libinput_event_pointer *axis_event)
{
gdouble discrete_dx = 0.0, discrete_dy = 0.0;
if (libinput_event_pointer_has_axis (axis_event,
LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL))
{
discrete_dx = libinput_event_pointer_get_axis_value_discrete (
axis_event, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL);
}
if (libinput_event_pointer_has_axis (axis_event,
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL))
{
discrete_dy = libinput_event_pointer_get_axis_value_discrete (
axis_event, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
}
clutter_seat_evdev_notify_discrete_scroll (seat, device,
time_us,
discrete_dx, discrete_dy,
scroll_source);
}
static gboolean static gboolean
process_device_event (ClutterDeviceManagerEvdev *manager_evdev, process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
struct libinput_event *event) struct libinput_event *event)
@@ -1371,12 +1460,17 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
case LIBINPUT_EVENT_POINTER_AXIS: case LIBINPUT_EVENT_POINTER_AXIS:
{ {
gdouble dx = 0.0, dy = 0.0;
gdouble discrete_x = 0.0, discrete_y = 0.0;
guint64 time_us; guint64 time_us;
gboolean wheel = FALSE;
enum libinput_pointer_axis axis;
enum libinput_pointer_axis_source source; enum libinput_pointer_axis_source source;
struct libinput_event_pointer *axis_event = struct libinput_event_pointer *axis_event =
libinput_event_get_pointer_event (event); libinput_event_get_pointer_event (event);
ClutterSeatEvdev *seat; ClutterSeatEvdev *seat;
ClutterScrollSource scroll_source; ClutterScrollSource scroll_source;
ClutterScrollFinishFlags finish_flags = 0;
device = libinput_device_get_user_data (libinput_device); device = libinput_device_get_user_data (libinput_device);
seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device));
@@ -1390,20 +1484,63 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
backwards-compat with existing clients, we just send multiples of backwards-compat with existing clients, we just send multiples of
the click count. */ the click count. */
switch (scroll_source) if (source == LIBINPUT_POINTER_AXIS_SOURCE_WHEEL)
wheel = TRUE;
axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL;
if (libinput_event_pointer_has_axis (axis_event, axis))
{ {
case CLUTTER_SCROLL_SOURCE_WHEEL: discrete_y = libinput_event_pointer_get_axis_value_discrete (axis_event, axis);
notify_discrete_axis (seat, device, time_us, scroll_source, dy = libinput_event_pointer_get_axis_value (axis_event, axis);
axis_event);
break; if (wheel)
case CLUTTER_SCROLL_SOURCE_FINGER: seat->accum_scroll_dy = 0;
case CLUTTER_SCROLL_SOURCE_CONTINUOUS: else if (fabs (dy) < DBL_EPSILON)
case CLUTTER_SCROLL_SOURCE_UNKNOWN: {
notify_continuous_axis (seat, device, time_us, scroll_source, finish_flags |= CLUTTER_SCROLL_FINISHED_VERTICAL;
axis_event); seat->accum_scroll_dy = 0;
break;
} }
else
seat->accum_scroll_dy += dy;
}
axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL;
if (libinput_event_pointer_has_axis (axis_event, axis))
{
discrete_x = libinput_event_pointer_get_axis_value_discrete (axis_event, axis);
dx = libinput_event_pointer_get_axis_value (axis_event, axis);
if (wheel)
seat->accum_scroll_dx = 0;
else if (fabs (dx) < DBL_EPSILON)
{
finish_flags |= CLUTTER_SCROLL_FINISHED_HORIZONTAL;
seat->accum_scroll_dx = 0;
}
else
seat->accum_scroll_dx += dx;
}
if (wheel)
{
notify_scroll (device, time_us,
discrete_x * DISCRETE_SCROLL_STEP,
discrete_y * DISCRETE_SCROLL_STEP,
scroll_source, finish_flags, TRUE);
notify_discrete_scroll (device, time_us,
discrete_to_direction (discrete_x, discrete_y),
scroll_source, FALSE);
}
else
{
notify_scroll (device, time_us, dx, dy,
scroll_source, finish_flags, FALSE);
check_notify_discrete_scroll (manager_evdev, device,
time_us, scroll_source);
}
break; break;
} }
case LIBINPUT_EVENT_TOUCH_DOWN: case LIBINPUT_EVENT_TOUCH_DOWN:

View File

@@ -29,7 +29,6 @@
#include "clutter-seat-evdev.h" #include "clutter-seat-evdev.h"
#include <linux/input.h> #include <linux/input.h>
#include <math.h>
#include "clutter-event-private.h" #include "clutter-event-private.h"
#include "clutter-input-device-evdev.h" #include "clutter-input-device-evdev.h"
@@ -43,8 +42,6 @@
#define AUTOREPEAT_VALUE 2 #define AUTOREPEAT_VALUE 2
#define DISCRETE_SCROLL_STEP 10.0
void void
clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat, clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat,
struct libinput_seat *libinput_seat) struct libinput_seat *libinput_seat)
@@ -572,194 +569,6 @@ clutter_seat_evdev_notify_button (ClutterSeatEvdev *seat,
queue_event (event); queue_event (event);
} }
static void
notify_scroll (ClutterInputDevice *input_device,
guint64 time_us,
gdouble dx,
gdouble dy,
ClutterScrollSource scroll_source,
ClutterScrollFinishFlags flags,
gboolean emulated)
{
ClutterInputDeviceEvdev *device_evdev;
ClutterSeatEvdev *seat;
ClutterStage *stage;
ClutterEvent *event = NULL;
gdouble scroll_factor;
/* We can drop the event on the floor if no stage has been
* associated with the device yet. */
stage = _clutter_input_device_get_stage (input_device);
if (stage == NULL)
return;
device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
seat = _clutter_input_device_evdev_get_seat (device_evdev);
event = clutter_event_new (CLUTTER_SCROLL);
_clutter_evdev_event_set_time_usec (event, time_us);
event->scroll.time = us2ms (time_us);
event->scroll.stage = CLUTTER_STAGE (stage);
event->scroll.device = seat->core_pointer;
_clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
/* libinput pointer axis events are in pointer motion coordinate space.
* To convert to Xi2 discrete step coordinate space, multiply the factor
* 1/10. */
event->scroll.direction = CLUTTER_SCROLL_SMOOTH;
scroll_factor = 1.0 / DISCRETE_SCROLL_STEP;
clutter_event_set_scroll_delta (event,
scroll_factor * dx,
scroll_factor * dy);
event->scroll.x = seat->pointer_x;
event->scroll.y = seat->pointer_y;
clutter_event_set_device (event, seat->core_pointer);
clutter_event_set_source_device (event, input_device);
event->scroll.scroll_source = scroll_source;
event->scroll.finish_flags = flags;
_clutter_event_set_pointer_emulated (event, emulated);
queue_event (event);
}
static void
notify_discrete_scroll (ClutterInputDevice *input_device,
uint64_t time_us,
ClutterScrollDirection direction,
ClutterScrollSource scroll_source,
gboolean emulated)
{
ClutterInputDeviceEvdev *device_evdev;
ClutterSeatEvdev *seat;
ClutterStage *stage;
ClutterEvent *event = NULL;
if (direction == CLUTTER_SCROLL_SMOOTH)
return;
/* We can drop the event on the floor if no stage has been
* associated with the device yet. */
stage = _clutter_input_device_get_stage (input_device);
if (stage == NULL)
return;
device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device);
seat = _clutter_input_device_evdev_get_seat (device_evdev);
event = clutter_event_new (CLUTTER_SCROLL);
_clutter_evdev_event_set_time_usec (event, time_us);
event->scroll.time = us2ms (time_us);
event->scroll.stage = CLUTTER_STAGE (stage);
event->scroll.device = seat->core_pointer;
_clutter_xkb_translate_state (event, seat->xkb, seat->button_state);
event->scroll.direction = direction;
event->scroll.x = seat->pointer_x;
event->scroll.y = seat->pointer_y;
clutter_event_set_device (event, seat->core_pointer);
clutter_event_set_source_device (event, input_device);
event->scroll.scroll_source = scroll_source;
_clutter_event_set_pointer_emulated (event, emulated);
queue_event (event);
}
static void
check_notify_discrete_scroll (ClutterSeatEvdev *seat,
ClutterInputDevice *device,
uint64_t time_us,
ClutterScrollSource scroll_source)
{
int i, n_xscrolls, n_yscrolls;
n_xscrolls = floor (fabs (seat->accum_scroll_dx) / DISCRETE_SCROLL_STEP);
n_yscrolls = floor (fabs (seat->accum_scroll_dy) / DISCRETE_SCROLL_STEP);
for (i = 0; i < n_xscrolls; i++)
{
notify_discrete_scroll (device, time_us,
seat->accum_scroll_dx > 0 ?
CLUTTER_SCROLL_RIGHT : CLUTTER_SCROLL_LEFT,
scroll_source, TRUE);
}
for (i = 0; i < n_yscrolls; i++)
{
notify_discrete_scroll (device, time_us,
seat->accum_scroll_dy > 0 ?
CLUTTER_SCROLL_DOWN : CLUTTER_SCROLL_UP,
scroll_source, TRUE);
}
seat->accum_scroll_dx = fmodf (seat->accum_scroll_dx, DISCRETE_SCROLL_STEP);
seat->accum_scroll_dy = fmodf (seat->accum_scroll_dy, DISCRETE_SCROLL_STEP);
}
void
clutter_seat_evdev_notify_scroll_continuous (ClutterSeatEvdev *seat,
ClutterInputDevice *input_device,
uint64_t time_us,
double dx,
double dy,
ClutterScrollSource scroll_source,
ClutterScrollFinishFlags finish_flags)
{
if (finish_flags & CLUTTER_SCROLL_FINISHED_HORIZONTAL)
seat->accum_scroll_dx = 0;
else
seat->accum_scroll_dx += dx;
if (finish_flags & CLUTTER_SCROLL_FINISHED_VERTICAL)
seat->accum_scroll_dy = 0;
else
seat->accum_scroll_dy += dy;
notify_scroll (input_device, time_us, dx, dy, scroll_source,
finish_flags, FALSE);
check_notify_discrete_scroll (seat, input_device, time_us, scroll_source);
}
static ClutterScrollDirection
discrete_to_direction (double discrete_dx,
double discrete_dy)
{
if (discrete_dx > 0)
return CLUTTER_SCROLL_RIGHT;
else if (discrete_dx < 0)
return CLUTTER_SCROLL_LEFT;
else if (discrete_dy > 0)
return CLUTTER_SCROLL_DOWN;
else if (discrete_dy < 0)
return CLUTTER_SCROLL_UP;
else
g_assert_not_reached ();
}
void
clutter_seat_evdev_notify_discrete_scroll (ClutterSeatEvdev *seat,
ClutterInputDevice *input_device,
uint64_t time_us,
double discrete_dx,
double discrete_dy,
ClutterScrollSource scroll_source)
{
notify_scroll (input_device, time_us,
discrete_dx * DISCRETE_SCROLL_STEP,
discrete_dy * DISCRETE_SCROLL_STEP,
scroll_source, CLUTTER_SCROLL_FINISHED_NONE,
TRUE);
notify_discrete_scroll (input_device, time_us,
discrete_to_direction (discrete_dx, discrete_dy),
scroll_source, FALSE);
}
void void
clutter_seat_evdev_free (ClutterSeatEvdev *seat) clutter_seat_evdev_free (ClutterSeatEvdev *seat)
{ {

View File

@@ -106,21 +106,6 @@ void clutter_seat_evdev_notify_button (ClutterSeatEvdev *seat,
uint32_t button, uint32_t button,
uint32_t state); uint32_t state);
void clutter_seat_evdev_notify_scroll_continuous (ClutterSeatEvdev *seat,
ClutterInputDevice *input_device,
uint64_t time_us,
double dx,
double dy,
ClutterScrollSource source,
ClutterScrollFinishFlags flags);
void clutter_seat_evdev_notify_discrete_scroll (ClutterSeatEvdev *seat,
ClutterInputDevice *input_device,
uint64_t time_us,
double discrete_dx,
double discrete_dy,
ClutterScrollSource source);
void clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat, void clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat,
struct libinput_seat *libinput_seat); struct libinput_seat *libinput_seat);

View File

@@ -156,9 +156,6 @@ clutter_virtual_input_device_evdev_notify_relative_motion (ClutterVirtualInputDe
ClutterVirtualInputDeviceEvdev *virtual_evdev = ClutterVirtualInputDeviceEvdev *virtual_evdev =
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
if (time_us == CLUTTER_CURRENT_TIME)
time_us = g_get_monotonic_time ();
clutter_seat_evdev_notify_relative_motion (virtual_evdev->seat, clutter_seat_evdev_notify_relative_motion (virtual_evdev->seat,
virtual_evdev->device, virtual_evdev->device,
time_us, time_us,
@@ -175,9 +172,6 @@ clutter_virtual_input_device_evdev_notify_absolute_motion (ClutterVirtualInputDe
ClutterVirtualInputDeviceEvdev *virtual_evdev = ClutterVirtualInputDeviceEvdev *virtual_evdev =
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
if (time_us == CLUTTER_CURRENT_TIME)
time_us = g_get_monotonic_time ();
clutter_seat_evdev_notify_absolute_motion (virtual_evdev->seat, clutter_seat_evdev_notify_absolute_motion (virtual_evdev->seat,
virtual_evdev->device, virtual_evdev->device,
time_us, time_us,
@@ -195,9 +189,6 @@ clutter_virtual_input_device_evdev_notify_button (ClutterVirtualInputDevice *vir
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
int button_count; int button_count;
if (time_us == CLUTTER_CURRENT_TIME)
time_us = g_get_monotonic_time ();
if (get_button_type (button) != EVDEV_BUTTON_TYPE_BUTTON) if (get_button_type (button) != EVDEV_BUTTON_TYPE_BUTTON)
{ {
g_warning ("Unknown/invalid virtual device button 0x%x pressed", g_warning ("Unknown/invalid virtual device button 0x%x pressed",
@@ -231,9 +222,6 @@ clutter_virtual_input_device_evdev_notify_key (ClutterVirtualInputDevice *virtua
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device); CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
int key_count; int key_count;
if (time_us == CLUTTER_CURRENT_TIME)
time_us = g_get_monotonic_time ();
if (get_button_type (key) != EVDEV_BUTTON_TYPE_KEY) if (get_button_type (key) != EVDEV_BUTTON_TYPE_KEY)
{ {
g_warning ("Unknown/invalid virtual device key 0x%x pressed\n", key); g_warning ("Unknown/invalid virtual device key 0x%x pressed\n", key);
@@ -355,9 +343,6 @@ clutter_virtual_input_device_evdev_notify_keyval (ClutterVirtualInputDevice *vir
int key_count; int key_count;
guint keycode = 0, level = 0, evcode = 0; guint keycode = 0, level = 0, evcode = 0;
if (time_us == CLUTTER_CURRENT_TIME)
time_us = g_get_monotonic_time ();
if (!pick_keycode_for_keyval_in_current_group (virtual_device, if (!pick_keycode_for_keyval_in_current_group (virtual_device,
keyval, &keycode, &level)) keyval, &keycode, &level))
{ {
@@ -397,57 +382,6 @@ clutter_virtual_input_device_evdev_notify_keyval (ClutterVirtualInputDevice *vir
apply_level_modifiers (virtual_device, time_us, level, key_state); apply_level_modifiers (virtual_device, time_us, level, key_state);
} }
static void
direction_to_discrete (ClutterScrollDirection direction,
double *discrete_dx,
double *discrete_dy)
{
switch (direction)
{
case CLUTTER_SCROLL_UP:
*discrete_dx = 0.0;
*discrete_dy = -1.0;
break;
case CLUTTER_SCROLL_DOWN:
*discrete_dx = 0.0;
*discrete_dy = 1.0;
break;
case CLUTTER_SCROLL_LEFT:
*discrete_dx = -1.0;
*discrete_dy = 0.0;
break;
case CLUTTER_SCROLL_RIGHT:
*discrete_dx = 1.0;
*discrete_dy = 0.0;
break;
case CLUTTER_SCROLL_SMOOTH:
g_assert_not_reached ();
break;
}
}
static void
clutter_virtual_input_device_evdev_notify_discrete_scroll (ClutterVirtualInputDevice *virtual_device,
uint64_t time_us,
ClutterScrollDirection direction,
ClutterScrollSource scroll_source)
{
ClutterVirtualInputDeviceEvdev *virtual_evdev =
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
double discrete_dx = 0.0, discrete_dy = 0.0;
if (time_us == CLUTTER_CURRENT_TIME)
time_us = g_get_monotonic_time ();
direction_to_discrete (direction, &discrete_dx, &discrete_dy);
clutter_seat_evdev_notify_discrete_scroll (virtual_evdev->seat,
virtual_evdev->device,
time_us,
discrete_dx, discrete_dy,
scroll_source);
}
static void static void
clutter_virtual_input_device_evdev_get_property (GObject *object, clutter_virtual_input_device_evdev_get_property (GObject *object,
guint prop_id, guint prop_id,
@@ -551,7 +485,6 @@ clutter_virtual_input_device_evdev_class_init (ClutterVirtualInputDeviceEvdevCla
virtual_input_device_class->notify_button = clutter_virtual_input_device_evdev_notify_button; virtual_input_device_class->notify_button = clutter_virtual_input_device_evdev_notify_button;
virtual_input_device_class->notify_key = clutter_virtual_input_device_evdev_notify_key; virtual_input_device_class->notify_key = clutter_virtual_input_device_evdev_notify_key;
virtual_input_device_class->notify_keyval = clutter_virtual_input_device_evdev_notify_keyval; virtual_input_device_class->notify_keyval = clutter_virtual_input_device_evdev_notify_keyval;
virtual_input_device_class->notify_discrete_scroll = clutter_virtual_input_device_evdev_notify_discrete_scroll;
obj_props[PROP_SEAT] = g_param_spec_pointer ("seat", obj_props[PROP_SEAT] = g_param_spec_pointer ("seat",
P_("ClutterSeatEvdev"), P_("ClutterSeatEvdev"),

View File

@@ -14,6 +14,7 @@ static const struct {
{ "Xft/HintStyle", "font-hint-style" }, { "Xft/HintStyle", "font-hint-style" },
{ "Xft/RGBA", "font-subpixel-order" }, { "Xft/RGBA", "font-subpixel-order" },
{ "Fontconfig/Timestamp", "fontconfig-timestamp" }, { "Fontconfig/Timestamp", "fontconfig-timestamp" },
{ "Gdk/UnscaledDPI", "unscaled-font-dpi" },
}; };
static const gint _n_clutter_settings_map = G_N_ELEMENTS (_clutter_settings_map); static const gint _n_clutter_settings_map = G_N_ELEMENTS (_clutter_settings_map);

View File

@@ -407,8 +407,7 @@ test_scale_center (TestState *state)
g_assert (scale_x == 4.0); g_assert (scale_x == 4.0);
g_assert (scale_y == 2.0); g_assert (scale_y == 2.0);
g_assert (gravity == CLUTTER_GRAVITY_NONE); g_assert (gravity == CLUTTER_GRAVITY_NONE);
assert_notifications (NOTIFY_SCALE_X | NOTIFY_SCALE_Y assert_notifications (NOTIFY_SCALE_CENTER_X | NOTIFY_SCALE_CENTER_Y
| NOTIFY_SCALE_CENTER_X | NOTIFY_SCALE_CENTER_Y
| NOTIFY_SCALE_GRAVITY); | NOTIFY_SCALE_GRAVITY);
assert_coords (state, 100 + 10 - 10 * 4, 200 + 20 - 20 * 2, assert_coords (state, 100 + 10 - 10 * 4, 200 + 20 - 20 * 2,
100 + 10 + (RECT_WIDTH - 10) * 4, 100 + 10 + (RECT_WIDTH - 10) * 4,

View File

@@ -1,8 +1,8 @@
AC_PREREQ(2.62) AC_PREREQ(2.62)
m4_define([mutter_major_version], [3]) m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [26]) m4_define([mutter_minor_version], [25])
m4_define([mutter_micro_version], [2]) m4_define([mutter_micro_version], [91])
m4_define([mutter_version], m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version]) [mutter_major_version.mutter_minor_version.mutter_micro_version])
@@ -225,10 +225,10 @@ AC_MSG_CHECKING([gudev])
if test x$with_gudev = xno ; then if test x$with_gudev = xno ; then
AC_MSG_RESULT([disabled]) AC_MSG_RESULT([disabled])
else else
if $PKG_CONFIG --exists "gudev-1.0 >= 232"; then if $PKG_CONFIG --exists gudev-1.0; then
have_gudev=yes have_gudev=yes
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
MUTTER_PC_MODULES="$MUTTER_PC_MODULES gudev-1.0 >= 232" MUTTER_PC_MODULES="$MUTTER_PC_MODULES gudev-1.0"
AC_DEFINE([HAVE_LIBGUDEV], 1, [Building with gudev for device type detection]) AC_DEFINE([HAVE_LIBGUDEV], 1, [Building with gudev for device type detection])
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
@@ -238,21 +238,6 @@ else
fi fi
fi fi
AC_ARG_ENABLE(remote-desktop,
AS_HELP_STRING([--enable-remote-desktop], [enable support for remote desktop and screen cast]),
enable_remote_desktop=yes,
enable_remote_desktop=no
)
AS_IF([test "$enable_remote_desktop" = "yes"], [
MUTTER_PC_MODULES="$MUTTER_PC_MODULES libpipewire-0.1 >= 0.1.4"
PKG_CHECK_EXISTS([libpipewire-0.1], [
pw_micro=`$PKG_CONFIG --modversion libpipewire-0.1 | cut -d. -f3`
AC_DEFINE_UNQUOTED([PIPEWIRE_VERSION_MICRO],[$pw_micro], [Pipewire micro version used])
])
AC_DEFINE([HAVE_REMOTE_DESKTOP],[1], [Defined if screen cast and remote desktop support is enabled])
])
AM_CONDITIONAL([HAVE_REMOTE_DESKTOP],[test "$enable_remote_desktop" = "yes"])
INTROSPECTION_VERSION=0.9.5 INTROSPECTION_VERSION=0.9.5
GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION]) GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION])
@@ -528,7 +513,6 @@ mutter-$VERSION
Wayland: ${have_wayland} Wayland: ${have_wayland}
Native (KMS) backend: ${have_native_backend} Native (KMS) backend: ${have_native_backend}
EGLDevice: ${enable_egl_device} EGLDevice: ${enable_egl_device}
Remote desktop: ${enable_remote_desktop}
" "

View File

@@ -120,10 +120,6 @@
framebuffers instead of window content, framebuffers instead of window content,
to manage HiDPI monitors. Does not to manage HiDPI monitors. Does not
require a restart. require a restart.
• “remote-desktop” — enables remote desktop support. To support
remote desktop with screen sharing,
“screen-cast” must also be enabled.
• “screen-cast” — enables screen cast support.
</description> </description>
</key> </key>

View File

@@ -13,18 +13,18 @@ src/compositor/meta-background.c
src/core/bell.c src/core/bell.c
src/core/core.c src/core/core.c
src/core/display.c src/core/display.c
src/core/errors.c
src/core/keybindings.c src/core/keybindings.c
src/core/main.c src/core/main.c
src/core/meta-close-dialog-default.c src/core/meta-close-dialog-default.c
src/core/mutter.c src/core/mutter.c
src/core/prefs.c src/core/prefs.c
src/core/screen.c
src/core/util.c src/core/util.c
src/core/window.c src/core/window.c
src/ui/frames.c src/ui/frames.c
src/ui/theme.c src/ui/theme.c
src/wayland/meta-wayland-tablet-pad.c src/wayland/meta-wayland-tablet-pad.c
src/x11/meta-x11-display.c
src/x11/meta-x11-errors.c
src/x11/session.c src/x11/session.c
src/x11/window-props.c src/x11/window-props.c
src/x11/xprops.c src/x11/xprops.c

View File

@@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: mutter.master\n" "Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-04-21 21:33+0000\n"
"PO-Revision-Date: 2017-09-01 18:44+0300\n" "PO-Revision-Date: 2017-04-23 16:56+0300\n"
"Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n" "Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n" "Language: be\n"
@@ -409,10 +409,7 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Каб уключыць эксперыментальныя функцыі, дадайце адпаведнае ключавое слова ў " "Каб уключыць эксперыментальныя функцыі, дадайце адпаведнае ключавое слова ў "
"гэты ліст. Некаторыя функцыі могуць патрабаваць перазапуску кампазітара. " "гэты ліст. Некаторыя функцыі могуць патрабаваць перазапуску кампазітара. "
@@ -421,27 +418,16 @@ msgstr ""
"\"scale-monitor-framebuffer\" - прымушае mutter прадвызначана размяшчаць " "\"scale-monitor-framebuffer\" - прымушае mutter прадвызначана размяшчаць "
"лагічныя маніторы ў лагічнай прасторы каардынат пікселаў, пры гэтым " "лагічныя маніторы ў лагічнай прасторы каардынат пікселаў, пры гэтым "
"маштабаваць кадравы буфер, а не змесціва акна, для падтрымкі HiDPI " "маштабаваць кадравы буфер, а не змесціва акна, для падтрымкі HiDPI "
"манітораў. Не патрабуе перазапуску. • \"remote-desktop\" - уключае падтрымку " "манітораў. Не патрабуе перазапуску."
"аддаленых манітораў. Для падтрымкі аддаленых манітораў з супольным доступам "
"да экрана трэба таксама ўключыць \"screen-cast\". • \"screen-cast\" - "
"уключае падтрымку скрынкасту."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Выбраць акно з выплыўнога акенца" msgstr "Выбраць акно з выплыўнога акенца"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Закрыць выплыўное акенца" msgstr "Закрыць выплыўное акенца"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "Пераключыць канфігурацыі манітора"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "Паварочвае убудаваны манітор"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Перайсці ў віртуальны тэрмінал 1" msgstr "Перайсці ў віртуальны тэрмінал 1"
@@ -490,14 +476,10 @@ msgstr "Перайсці ў віртуальны тэрмінал 11"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Перайсці ў віртуальны тэрмінал 12" msgstr "Перайсці ў віртуальны тэрмінал 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "Уключыць назад клавіятурныя скароты"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1848
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Пераключыць рэжым (група %d)" msgstr "Пераключыць рэжым (група %d)"
@@ -505,37 +487,37 @@ msgstr "Пераключыць рэжым (група %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1870
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Пераключыць манітор" msgstr "Пераключыць манітор"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1872
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Паказаць экранную даведку" msgstr "Паказаць экранную даведку"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:783
msgid "Built-in display" msgid "Built-in display"
msgstr "Убудаваны дысплей" msgstr "Убудаваны дысплей"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:806
msgid "Unknown" msgid "Unknown"
msgstr "Невядомы" msgstr "Невядомы"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:808
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Невядомы дысплей" msgstr "Невядомы дысплей"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:816
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:474
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
@@ -546,6 +528,31 @@ msgstr ""
msgid "Bell event" msgid "Bell event"
msgstr "Падзея з сігналам" msgstr "Падзея з сігналам"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "\"%s\" не адказвае на запыты."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "Праграма не адказвае на запыты."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Вы можаце альбо крыху пачакаць адказу, альбо змусіць праграму да выхаду."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Змусіць да выхаду"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Пачакаць"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
@@ -587,31 +594,6 @@ msgstr "Запусціць у якасці ўложанага кампазіта
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Запусціць у якасці паўнавартаснага сервера дысплея, я не як уложаны " msgstr "Запусціць у якасці паўнавартаснага сервера дысплея, я не як уложаны "
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "\"%s\" не адказвае на запыты."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "Праграма не адказвае на запыты."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Вы можаце альбо крыху пачакаць адказу, альбо змусіць праграму да выхаду."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "_Змусіць да выхаду"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "_Пачакаць"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, c-format
msgid "" msgid ""

990
po/bg.po

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
# Jesús Moreno <jmmolas@wanadoo.es>, 2002. # Jesús Moreno <jmmolas@wanadoo.es>, 2002.
# Jordi Mallach <jordi@sindominio.net>, 2003, 2004, 2005, 2006, 2007, 2008. # Jordi Mallach <jordi@sindominio.net>, 2003, 2004, 2005, 2006, 2007, 2008.
# David Planella <david.planella@gmail.com>, 2008, 2009, 2011, 2012. # David Planella <david.planella@gmail.com>, 2008, 2009, 2011, 2012.
# Jordi Serratosa <jordis@softcatala.cat>, 2012, 2017. # Jordi Serratosa <jordis@softcatala.cat>, 2012.
# Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014, 2016. # Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014, 2016.
# #
msgid "" msgid ""
@@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: metacity 2.24\n" "Project-Id-Version: metacity 2.24\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-25 13:23+0200\n" "PO-Revision-Date: 2017-08-25 13:23+0200\n"
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n" "Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n" "Language-Team: Catalan <tradgnome@softcatala.org>\n"
@@ -240,7 +240,7 @@ msgstr ""
#: data/50-mutter-windows.xml:31 #: data/50-mutter-windows.xml:31
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
msgstr "Alça la finestra si està coberta per una altra; altrament, baixa-la" msgstr "Alça la finestra si està coberta per una altra, o sinó baixa-la"
#: data/50-mutter-windows.xml:33 #: data/50-mutter-windows.xml:33
msgid "Raise window above other windows" msgid "Raise window above other windows"
@@ -306,7 +306,7 @@ msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:30 #: data/org.gnome.mutter.gschema.xml.in:30
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
"Habilita la tessel·lització a les vores en deixar anar les finestres a les " "Habilita la tesselització a les vores en deixar anar les finestres a les "
"vores de la pantalla" "vores de la pantalla"
#: data/org.gnome.mutter.gschema.xml.in:31 #: data/org.gnome.mutter.gschema.xml.in:31
@@ -424,25 +424,22 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Selecció de finestra entre les emergents d'una pestanya" msgstr "Selecció de finestra entre les emergents d'una pestanya"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Cancel·lació de les finestres emergents a les pestanyes" msgstr "Cancel·lació de les finestres emergents a les pestanyes"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Canvia configuracions de monitor" msgstr "Canvia configuracions de monitor"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Gira la configuració del monitor integrada" msgstr "Gira la configuració del monitor integrada"

File diff suppressed because it is too large Load Diff

View File

@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-31 00:11+0200\n" "PO-Revision-Date: 2017-08-22 18:29+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n" "Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: čeština <gnome-cs-list@gnome.org>>\n" "Language-Team: čeština <gnome-cs-list@gnome.org>>\n"
"Language: cs\n" "Language: cs\n"
@@ -413,37 +413,32 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Chcete-li povolit experimentální funkce, přidejte klíčové slovo funkce do " "Chcete-li povolit experimentální funkce, přidejte klíčové slovo funkce do "
"seznamu. Zda funkce vyžaduje restartování kompozitoru, závisí na dané " "seznamu. Zda funkce vyžaduje restartování kompozitoru, závisí na dané "
"funkci. Ne u každé experimentální funkce je vyžadováno, aby byla stále " "funkci. Ne u každé experimentální funkce je vyžadováno, aby byla stále "
"dostupná nebo konfigurovatelná. Neočekávejte, že by bylo v tomto nastavení " "dostupná nebo konfigurovatelná. Neočekávejte, že by bylo v tomto nastavení "
"přidáno něco, co by do budoucna přineslo vylepšení. V současné době jsou " "přidáno něco, co by do budoucna přineslo vylepšení. V současné době jsou "
"možná tato klíčová slova: • „scale-monitor-framebuffer“ zajistí, aby byl " "možná tato klíčová slova: • „scale-monitor-framebuffer“ zajistí, "
"mutter výchozí pro logické uspořádání monitorů v logickém souřadnicovém " "aby byl mutter výchozí pro logické uspořádání monitorů v logickém "
"prostoru pixelů, zatímco škáluje přímo v grafické vyrovnávací paměti, " "souřadnicovém prostoru pixelů, zatímco škáluje přímo v grafické vyrovnávací "
"namísto v obsahu oken, aby se postaral o správu montorů s HiDPI. Nevyžaduje " "paměti, namísto v obsahu oken, aby se postaral o správu montorů s HiDPI. "
"restart. • „remote-desktop“ zapne podporu pro vzdálenou pracovní plochu. " "Nevyžaduje restart."
"Pro podporu vzdálené plochy se sdílením obrazovky musít být zapnuto také "
"„screen-cast“. • „screen-cast“ zapne podporu pro vysílání obsahu obrazovky."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Vybrat okno z překryvné nabídky tabulátoru" msgstr "Vybrat okno z překryvné nabídky tabulátoru"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Zrušit překryvné okno tabulátoru" msgstr "Zrušit překryvné okno tabulátoru"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Přepnout nastavení monitoru" msgstr "Přepnout nastavení monitoru"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Postupně mění vestavěná nastavení monitoru" msgstr "Postupně mění vestavěná nastavení monitoru"

701
po/da.po

File diff suppressed because it is too large Load Diff

119
po/de.po
View File

@@ -5,7 +5,7 @@
# Hendrik Richter <hendrikr@gnome.org>, 2005, 2006, 2007, 2008. # Hendrik Richter <hendrikr@gnome.org>, 2005, 2006, 2007, 2008.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013, 2016-2017. # Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013, 2016-2017.
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011, 2012. # Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011, 2012.
# Wolfgang Stöggl <c72578@yahoo.de> 2011, 2017. # Wolfgang Stöggl <c72578@yahoo.de> 2011.
# Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>, 2012. # Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>, 2012.
# #
msgid "" msgid ""
@@ -13,16 +13,16 @@ msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-05-10 19:07+0000\n"
"PO-Revision-Date: 2017-08-30 17:07+0200\n" "PO-Revision-Date: 2017-05-12 17:35+0200\n"
"Last-Translator: Wolfgang Stoeggl <c72578@yahoo.de>\n" "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n" "Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de\n" "Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.3\n" "X-Generator: Poedit 2.0.1\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
msgid "Navigation" msgid "Navigation"
@@ -134,7 +134,7 @@ msgstr "Systemsteuerungen sofort umschalten"
#: data/50-mutter-navigation.xml:108 #: data/50-mutter-navigation.xml:108
msgid "Switch directly to previous system control" msgid "Switch directly to previous system control"
msgstr "Direkt zur vorherigen Systemsteuerungen wechseln" msgstr "Direkt zur vorherigen Systemsteuerungen wechselen"
#: data/50-mutter-navigation.xml:111 #: data/50-mutter-navigation.xml:111
msgid "Hide all normal windows" msgid "Hide all normal windows"
@@ -412,6 +412,7 @@ msgid "Enable experimental features"
msgstr "Experimentelle Funktionsmerkmale aktivieren" msgstr "Experimentelle Funktionsmerkmale aktivieren"
#: data/org.gnome.mutter.gschema.xml.in:108 #: data/org.gnome.mutter.gschema.xml.in:108
#, fuzzy
msgid "" msgid ""
"To enable experimental features, add the feature keyword to the list. " "To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
@@ -420,43 +421,23 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Um experimentelle Funktionsmerkmale zu aktivieren, fügen Sie das " "Um experimentelle Funktionsmerkmale zu aktivieren, fügen Sie das "
"entsprechende Schlüsselwort zur Liste hinzu. Möglicherweise muss der " "entsprechende Schlüsselwort zur Liste hinzu. Möglicherweise muss der "
"Compositor neu gestartet werden, um es zu aktivieren, dies ist vom " "Compositor neu gestartet werden, um es zu aktivieren. Für diese "
"Funktionsmerkmal abhängig. Für diese experimentellen Funktionsmerkmale gilt, " "experimentellen Funktionsmerkmale gilt, dass sie nicht unbedingt dauerhaft "
"dass sie nicht unbedingt dauerhaft verfügbar sein werden, oder Einstellungen " "verfügbar sein werden, oder Einstellungen möglich sind. Derzeit mögliche "
"möglich sind. Derzeit mögliche Schlüsselwörter: • »scale-monitor-" "Schlüsselwörter: • scale-monitor-framebuffer” — "
"framebuffer« weist Mutter an, in der Voreinstellung logische Bildschirme "
"in einem logischen Pixel-Koordinatensystem anzuordnen, wobei die Bildschirm-"
"Framebuffer anstelle der Fensterinhalte skaliert werden, um HiDPI-"
"Bildschirme besser versorgen zu können. Dafür ist kein Neustart "
"erforderlich. • »remote-desktop« aktiviert Remotedesktop-Unterstützung. Um "
"das Teilen von Bildschirmen mittels Remotedesktop zu unterstützen, muss "
"»screen-cast« ebenfalls aktiviert sein. • »screen-cast« aktiviert »screen "
"cast«-Unterstützung."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Fenster aus Tab-Anzeige auswählen" msgstr "Fenster aus Tab-Anzeige auswählen"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Tab-Anzeige abbrechen" msgstr "Tab-Anzeige abbrechen"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "Bildschirmkonfigurationen wechseln"
# Ich denke nicht, dass »rotate« hier die Bildschirmdrehung meint, sondern eher eine Liste aus Konfigurationen rotiert (d.h. umgewälzt) wird.
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "Wechselt die Konfiguration des eingebauten Bildschirms"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Zum virtuellen Terminal 1 wechseln" msgstr "Zum virtuellen Terminal 1 wechseln"
@@ -505,14 +486,10 @@ msgstr "Zum virtuellen Terminal 11 wechseln"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Zum virtuellen Terminal 12 wechseln" msgstr "Zum virtuellen Terminal 12 wechseln"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "Tastenkombinationen erneut aktivieren"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1848
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Moduswechsel (Gruppe %d)" msgstr "Moduswechsel (Gruppe %d)"
@@ -520,37 +497,37 @@ msgstr "Moduswechsel (Gruppe %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1870
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Bildschirm wechseln" msgstr "Bildschirm wechseln"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1872
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Bildschirmhilfe anzeigen" msgstr "Bildschirmhilfe anzeigen"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:783
msgid "Built-in display" msgid "Built-in display"
msgstr "Eingebaute Anzeige" msgstr "Eingebaute Anzeige"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:806
msgid "Unknown" msgid "Unknown"
msgstr "Unbekannt" msgstr "Unbekannt"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:808
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Unbekannte Anzeige" msgstr "Unbekannte Anzeige"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:816
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:474
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
@@ -562,6 +539,32 @@ msgstr ""
msgid "Bell event" msgid "Bell event"
msgstr "Klangereignis" msgstr "Klangereignis"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "»%s« antwortet nicht."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "Die Anwendung antwortet nicht."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Sie können der Anwendung noch etwas Zeit geben oder ein sofortiges Beenden "
"erzwingen."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Beenden erzwingen"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Warten"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
@@ -603,32 +606,6 @@ msgstr "Als eingebetteten Compositor ausführen"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Als vollwertigen Display-Server verwenden (nicht eingebettet)" msgstr "Als vollwertigen Display-Server verwenden (nicht eingebettet)"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "»%s« antwortet nicht."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "Die Anwendung antwortet nicht."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Sie können der Anwendung noch etwas Zeit geben oder ein sofortiges Beenden "
"erzwingen."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "_Beenden erzwingen"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "_Warten"
# CHECK # CHECK
# c-format # c-format
#: src/core/mutter.c:39 #: src/core/mutter.c:39

156
po/eu.po
View File

@@ -8,10 +8,10 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-21 04:46+0000\n" "POT-Creation-Date: 2017-02-16 01:44+0000\n"
"PO-Revision-Date: 2017-08-27 16:47+0200\n" "PO-Revision-Date: 2017-02-16 22:07+0100\n"
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n" "Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n"
"Language-Team: Basque <librezale@librezale.eus>\n" "Language-Team: Basque <librezale@librezale.eus>\n"
"Language: eu\n" "Language: eu\n"
@@ -270,6 +270,11 @@ msgid "Modifier to use for extended window management operations"
msgstr "Aldatzailea leihoak kudeatzeko eragiketa hedatuetan erabiltzeko" msgstr "Aldatzailea leihoak kudeatzeko eragiketa hedatuetan erabiltzeko"
#: data/org.gnome.mutter.gschema.xml.in:8 #: 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 "" msgid ""
"This key will initiate the “overlay”, which is a combination window overview " "This key will initiate the “overlay”, which is a combination window overview "
"and application launching system. The default is intended to be the “Windows " "and application launching system. The default is intended to be the “Windows "
@@ -315,6 +320,10 @@ msgid "Workspaces are managed dynamically"
msgstr "Laneko areak dinamikoki kudeatzen dira" msgstr "Laneko areak dinamikoki kudeatzen dira"
#: data/org.gnome.mutter.gschema.xml.in:41 #: 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 "" msgid ""
"Determines whether workspaces are managed dynamically or whether theres a " "Determines whether workspaces are managed dynamically or whether theres a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
@@ -353,6 +362,10 @@ msgid "Delay focus changes until the pointer stops moving"
msgstr "Atzeratu fokuaren aldaketa erakuslea mugitzeari utzi arte" msgstr "Atzeratu fokuaren aldaketa erakuslea mugitzeari utzi arte"
#: data/org.gnome.mutter.gschema.xml.in:69 #: 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 "" msgid ""
"If set to true, and the focus mode is either “sloppy” or “mouse” then the " "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 " "focus will not be changed immediately when entering a window, but only after "
@@ -367,6 +380,9 @@ msgid "Draggable border width"
msgstr "Ertz arrastragarriaren zabalera" msgstr "Ertz arrastragarriaren zabalera"
#: data/org.gnome.mutter.gschema.xml.in:80 #: 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 "" msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the themes visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
@@ -398,50 +414,14 @@ msgstr ""
"TRUE (egia) denean, leiho berriak beti jarriko dira monitorearen pantaila " "TRUE (egia) denean, leiho berriak beti jarriko dira monitorearen pantaila "
"aktiboaren zentroan." "aktiboaren zentroan."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "Gaitu eginbide esperimentalak"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart."
msgstr ""
"Eginbide esperimentalak gaitzeko, gehitu eginbidearen gakoa zerrendari. "
"Eginbideak osatzailea berrabiaraztea behar duen edo ez emandako eginbidearen "
"arabera dago. Ez da derrigorrezkoa edozer eginbide esperimental eskuragarri "
"edo konfiguragarria egotea. Ez uste ezarpen honetan edozer gehitzeak "
"etorkizuneko "
"proba izango denik. Gako erabilgarriak: "
"• “scale-monitor-framebuffer” — honek mutter monitoreen diseinu logikoetara "
"lehenesten du espazioaren koordenatuko pixel logikoetan (leihoaren edukiaren "
"ordez "
"monitorearen framebufferra eskalatzean) HiDPI monitoreak kudeatzeko. Ez du "
"berrabiaraztea eskatzen."
#: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Hautatu leihoa laster-fitxatik" msgstr "Hautatu leihoa laster-fitxatik"
#: data/org.gnome.mutter.gschema.xml.in:146 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Utzi laster-fitxa" msgstr "Utzi laster-fitxa"
#: data/org.gnome.mutter.gschema.xml.in:151
#| msgid "Switch monitor"
msgid "Switch monitor configurations"
msgstr "Aldatu monitorearen konfigurazioak"
#: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration"
msgstr "Biratu barneko monitorearen konfigurazioa"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Aldatu 1. TBra" msgstr "Aldatu 1. TBra"
@@ -490,65 +470,92 @@ msgstr "Aldatu 11. TBra"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Aldatu 12. TBra" msgstr "Aldatu 12. TBra"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "Gaitu berriro laster-teklak"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1759
#, c-format #, c-format
#| msgid "Mode Switch: Mode %d"
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Modu aldaketa (%d taldea)" msgstr "Modu aldaketa (%d taldea)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1781
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Aldatu monitorea" msgstr "Aldatu monitorea"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1783
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Erakutsi pantailako laguntza" msgstr "Erakutsi pantailako laguntza"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:675
msgid "Built-in display" msgid "Built-in display"
msgstr "Bertako pantaila" msgstr "Bertako pantaila"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:698
msgid "Unknown" msgid "Unknown"
msgstr "Ezezaguna" msgstr "Ezezaguna"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:700
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Pantaila ezezaguna" msgstr "Pantaila ezezaguna"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:708
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:471
#, c-format #, c-format
#| msgid ""
#| "Another compositing manager is already running on screen %i on display "
#| "\"%s\"."
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
msgstr "" msgstr ""
"Dagoeneko beste konposatze-kudeatzailea ari da exekutatzen “%2$s“ pantailako " "Dagoeneko beste konposatze-kudeatzailea ari da exekutatzen “%2$s“ "
"%1$i. monitorean." "pantailako %1$i. monitorean."
#: src/core/bell.c:194 #: src/core/bell.c:194
msgid "Bell event" msgid "Bell event"
msgstr "Soinuaren gertaera" msgstr "Soinuaren gertaera"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "'%s'(e)k ez du erantzuten."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "Aplikazioak ez du erantzuten."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu "
"aplikazioa erabat ixtea."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Behartu ixtera"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Itxaron"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
#| msgid "Failed to open X Window System display '%s'\n"
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
msgstr "Huts egin du X Window sistemaren “%s“ pantaila irekitzean\n" msgstr "Huts egin du X Window sistemaren “%s“ pantaila irekitzean\n"
@@ -588,34 +595,14 @@ msgstr "Exekutatu habiaratutako konposatzaile gisa"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Exekutatu pantaila-zerbitzari oso bezala, habiaratuta baino" msgstr "Exekutatu pantaila-zerbitzari oso bezala, habiaratuta baino"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "'%s'(e)k ez du erantzuten."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "Aplikazioak ez du erantzuten."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu "
"aplikazioa erabat ixtea."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "_Behartu ixtera"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "_Itxaron"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, 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 "" msgid ""
"mutter %s\n" "mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
@@ -644,6 +631,9 @@ msgstr "%d. laneko area"
#: src/core/screen.c:580 #: src/core/screen.c:580
#, c-format #, c-format
#| msgid ""
#| "Display \"%s\" already has a window manager; try using the --replace "
#| "option to replace the current window manager."
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display “%s” already has a window manager; try using the --replace option to "
"replace the current window manager." "replace the current window manager."
@@ -653,6 +643,7 @@ msgstr ""
#: src/core/screen.c:665 #: src/core/screen.c:665
#, c-format #, c-format
#| msgid "Screen %d on display '%s' is invalid\n"
msgid "Screen %d on display “%s” is invalid\n" msgid "Screen %d on display “%s” is invalid\n"
msgstr "“%2$s“ bistaratzeko %1$d pantaila ez da baliozkoa\n" msgstr "“%2$s“ bistaratzeko %1$d pantaila ez da baliozkoa\n"
@@ -666,6 +657,9 @@ msgid "Mode Switch: Mode %d"
msgstr "Modu aldaketa: %d modua" msgstr "Modu aldaketa: %d modua"
#: src/x11/session.c:1815 #: src/x11/session.c:1815
#| msgid ""
#| "These windows do not support &quot;save current setup&quot; and will have "
#| "to be restarted manually next time you log in."
msgid "" msgid ""
"These windows do not support “save current setup” and will have to be " "These windows do not support “save current setup” and will have to be "
"restarted manually next time you log in." "restarted manually next time you log in."

457
po/fi.po
View File

@@ -12,10 +12,10 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2015-03-13 11:15+0000\n"
"PO-Revision-Date: 2017-08-30 19:16+0300\n" "PO-Revision-Date: 2015-03-13 17:52+0200\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n" "Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
"Language-Team: suomi <gnome-fi-laatu@lists.sourceforge.net>\n" "Language-Team: suomi <gnome-fi-laatu@lists.sourceforge.net>\n"
"Language: fi\n" "Language: fi\n"
@@ -24,288 +24,282 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-POT-Import-Date: 2012-02-19 15:25:23+0000\n" "X-POT-Import-Date: 2012-02-19 15:25:23+0000\n"
"X-Generator: Poedit 1.8.7.1\n" "X-Generator: Gtranslator 2.91.6\n"
#: data/50-mutter-navigation.xml:6 #: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation" msgid "Navigation"
msgstr "Navigointi" msgstr "Navigointi"
#: data/50-mutter-navigation.xml:9 #: ../data/50-mutter-navigation.xml.in.h:2
msgid "Move window to workspace 1" msgid "Move window to workspace 1"
msgstr "Siirrä ikkuna työtilaan 1" msgstr "Siirrä ikkuna työtilaan 1"
#: data/50-mutter-navigation.xml:12 #: ../data/50-mutter-navigation.xml.in.h:3
msgid "Move window to workspace 2" msgid "Move window to workspace 2"
msgstr "Siirrä ikkuna työtilaan 2" msgstr "Siirrä ikkuna työtilaan 2"
#: data/50-mutter-navigation.xml:15 #: ../data/50-mutter-navigation.xml.in.h:4
msgid "Move window to workspace 3" msgid "Move window to workspace 3"
msgstr "Siirrä ikkuna työtilaan 3" msgstr "Siirrä ikkuna työtilaan 3"
#: data/50-mutter-navigation.xml:18 #: ../data/50-mutter-navigation.xml.in.h:5
msgid "Move window to workspace 4" msgid "Move window to workspace 4"
msgstr "Siirrä ikkuna työtilaan 4" msgstr "Siirrä ikkuna työtilaan 4"
#: data/50-mutter-navigation.xml:21 #: ../data/50-mutter-navigation.xml.in.h:6
msgid "Move window to last workspace" msgid "Move window to last workspace"
msgstr "Siirrä ikkuna viimeiseen työtilaan" msgstr "Siirrä ikkuna viimeiseen työtilaan"
#: data/50-mutter-navigation.xml:24 #: ../data/50-mutter-navigation.xml.in.h:7
msgid "Move window one workspace to the left" msgid "Move window one workspace to the left"
msgstr "Siirrä ikkunaa yksi työtila vasemmalle" msgstr "Siirrä ikkunaa yksi työtila vasemmalle"
#: data/50-mutter-navigation.xml:27 #: ../data/50-mutter-navigation.xml.in.h:8
msgid "Move window one workspace to the right" msgid "Move window one workspace to the right"
msgstr "Siirrä ikkunaa yksi työtila oikealle" msgstr "Siirrä ikkunaa yksi työtila oikealle"
#: data/50-mutter-navigation.xml:30 #: ../data/50-mutter-navigation.xml.in.h:9
msgid "Move window one workspace up" msgid "Move window one workspace up"
msgstr "Siirrä ikkunaa yksi työtila ylös" msgstr "Siirrä ikkunaa yksi työtila ylös"
#: data/50-mutter-navigation.xml:33 #: ../data/50-mutter-navigation.xml.in.h:10
msgid "Move window one workspace down" msgid "Move window one workspace down"
msgstr "Siirrä ikkunaa yksi työtila alas" msgstr "Siirrä ikkunaa yksi työtila alas"
#: data/50-mutter-navigation.xml:36 #: ../data/50-mutter-navigation.xml.in.h:11
msgid "Move window one monitor to the left" msgid "Move window one monitor to the left"
msgstr "Siirrä ikkuna yhden näytön verran vasemmalle" msgstr "Siirrä ikkuna yhden näytön verran vasemmalle"
#: data/50-mutter-navigation.xml:39 #: ../data/50-mutter-navigation.xml.in.h:12
msgid "Move window one monitor to the right" msgid "Move window one monitor to the right"
msgstr "Siirrä ikkuna yhden näytön verran oikealle" msgstr "Siirrä ikkuna yhden näytön verran oikealle"
#: data/50-mutter-navigation.xml:42 #: ../data/50-mutter-navigation.xml.in.h:13
msgid "Move window one monitor up" msgid "Move window one monitor up"
msgstr "Siirrä ikkuna yhden näytön verran ylös" msgstr "Siirrä ikkuna yhden näytön verran ylös"
#: data/50-mutter-navigation.xml:45 #: ../data/50-mutter-navigation.xml.in.h:14
msgid "Move window one monitor down" msgid "Move window one monitor down"
msgstr "Siirrä ikkuna yhden näytön verran alas" msgstr "Siirrä ikkuna yhden näytön verran alas"
#: data/50-mutter-navigation.xml:49 #: ../data/50-mutter-navigation.xml.in.h:15
msgid "Switch applications" msgid "Switch applications"
msgstr "Vaihda sovelluksia" msgstr "Vaihda sovelluksia"
#: data/50-mutter-navigation.xml:54 #: ../data/50-mutter-navigation.xml.in.h:16
msgid "Switch to previous application" msgid "Switch to previous application"
msgstr "Vaihda edelliseen sovellukseen" msgstr "Vaihda edelliseen sovellukseen"
#: data/50-mutter-navigation.xml:58 #: ../data/50-mutter-navigation.xml.in.h:17
msgid "Switch windows" msgid "Switch windows"
msgstr "Vaihda ikkunoita" msgstr "Vaihda ikkunoita"
#: data/50-mutter-navigation.xml:63 #: ../data/50-mutter-navigation.xml.in.h:18
msgid "Switch to previous window" msgid "Switch to previous window"
msgstr "Vaihda edelliseen ikkunaan" msgstr "Vaihda edelliseen ikkunaan"
#: data/50-mutter-navigation.xml:67 #: ../data/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "Vaihda sovelluksen ikkunoiden välillä" msgstr "Vaihda sovelluksen ikkunoiden välillä"
#: data/50-mutter-navigation.xml:72 #: ../data/50-mutter-navigation.xml.in.h:20
msgid "Switch to previous window of an application" msgid "Switch to previous window of an application"
msgstr "Vaihda sovelluksen edelliseen ikkunaan" msgstr "Vaihda sovelluksen edelliseen ikkunaan"
#: data/50-mutter-navigation.xml:76 #: ../data/50-mutter-navigation.xml.in.h:21
#, fuzzy #, fuzzy
msgid "Switch system controls" msgid "Switch system controls"
msgstr "Vaihda järjestelmän kontrolleja" msgstr "Vaihda järjestelmän kontrolleja"
#: data/50-mutter-navigation.xml:81 #: ../data/50-mutter-navigation.xml.in.h:22
#, fuzzy #, fuzzy
msgid "Switch to previous system control" msgid "Switch to previous system control"
msgstr "Vaihda järjestelmän kontrolleja" msgstr "Vaihda järjestelmän kontrolleja"
#: data/50-mutter-navigation.xml:85 #: ../data/50-mutter-navigation.xml.in.h:23
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "Vaihda ikkunoita suoraan" msgstr "Vaihda ikkunoita suoraan"
#: data/50-mutter-navigation.xml:90 #: ../data/50-mutter-navigation.xml.in.h:24
msgid "Switch directly to previous window" msgid "Switch directly to previous window"
msgstr "Vaihda suoraan edelliseen ikkunaan" msgstr "Vaihda suoraan edelliseen ikkunaan"
#: data/50-mutter-navigation.xml:94 #: ../data/50-mutter-navigation.xml.in.h:25
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "Vaihda sovelluksen ikkunoiden välillä suoraan" msgstr "Vaihda sovelluksen ikkunoiden välillä suoraan"
#: data/50-mutter-navigation.xml:99 #: ../data/50-mutter-navigation.xml.in.h:26
#, fuzzy #, fuzzy
#| msgid "Switch windows of an application" #| msgid "Switch windows of an application"
msgid "Switch directly to previous window of an app" msgid "Switch directly to previous window of an app"
msgstr "Vaihda sovelluksen ikkunoiden välillä" msgstr "Vaihda sovelluksen ikkunoiden välillä"
#: data/50-mutter-navigation.xml:103 #: ../data/50-mutter-navigation.xml.in.h:27
#, fuzzy #, fuzzy
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "Vaihda järjestelmän kontrolleja suoraan" msgstr "Vaihda järjestelmän kontrolleja suoraan"
#: data/50-mutter-navigation.xml:108 #: ../data/50-mutter-navigation.xml.in.h:28
#, fuzzy #, fuzzy
msgid "Switch directly to previous system control" msgid "Switch directly to previous system control"
msgstr "Vaihda järjestelmän kontrolleja" msgstr "Vaihda järjestelmän kontrolleja"
#: data/50-mutter-navigation.xml:111 #: ../data/50-mutter-navigation.xml.in.h:29
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "Piilota kaikki tavalliset ikkunat" msgstr "Piilota kaikki tavalliset ikkunat"
#: data/50-mutter-navigation.xml:114 #: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "Siirry työtilaan 1" msgstr "Siirry työtilaan 1"
#: data/50-mutter-navigation.xml:117 #: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "Siirry työtilaan 2" msgstr "Siirry työtilaan 2"
#: data/50-mutter-navigation.xml:120 #: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "Siirry työtilaan 3" msgstr "Siirry työtilaan 3"
#: data/50-mutter-navigation.xml:123 #: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "Siirry työtilaan 4" msgstr "Siirry työtilaan 4"
#: data/50-mutter-navigation.xml:126 #: ../data/50-mutter-navigation.xml.in.h:34
msgid "Switch to last workspace" msgid "Switch to last workspace"
msgstr "Siirry viimeiseen työtilaan" msgstr "Siirry viimeiseen työtilaan"
#: data/50-mutter-navigation.xml:129 #: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "Siirrä vasemmalla olevaan työtilaan" msgstr "Siirrä vasemmalla olevaan työtilaan"
#: data/50-mutter-navigation.xml:132 #: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "Siirrä oikealla olevaan työtilaan" msgstr "Siirrä oikealla olevaan työtilaan"
#: data/50-mutter-navigation.xml:135 #: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "Siirrä yllä olevaan työtilaan" msgstr "Siirrä yllä olevaan työtilaan"
#: data/50-mutter-navigation.xml:138 #: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "Siirrä alla olevaan työtilaan" msgstr "Siirrä alla olevaan työtilaan"
#: data/50-mutter-system.xml:6 #: ../data/50-mutter-system.xml.in.h:1
msgid "System" msgid "System"
msgstr "Järjestelmä" msgstr "Järjestelmä"
#: data/50-mutter-system.xml:8 #: ../data/50-mutter-system.xml.in.h:2
msgid "Show the run command prompt" msgid "Show the run command prompt"
msgstr "Näytä komennonsuorituskehote" msgstr "Näytä komennonsuorituskehote"
#: data/50-mutter-system.xml:10 #: ../data/50-mutter-system.xml.in.h:3
msgid "Show the activities overview" msgid "Show the activities overview"
msgstr "Näytä toimintojen yleisnäkymä" msgstr "Näytä toimintojen yleisnäkymä"
#: data/50-mutter-windows.xml:6 #: ../data/50-mutter-windows.xml.in.h:1
msgid "Windows" msgid "Windows"
msgstr "Ikkunat" msgstr "Ikkunat"
#: data/50-mutter-windows.xml:8 #: ../data/50-mutter-windows.xml.in.h:2
msgid "Activate the window menu" msgid "Activate the window menu"
msgstr "Aktivoi ikkunavalikko" msgstr "Aktivoi ikkunavalikko"
#: data/50-mutter-windows.xml:10 #: ../data/50-mutter-windows.xml.in.h:3
msgid "Toggle fullscreen mode" msgid "Toggle fullscreen mode"
msgstr "Vaihda koko näytön tilaan tai pois" msgstr "Vaihda koko näytön tilaan tai pois"
#: data/50-mutter-windows.xml:12 #: ../data/50-mutter-windows.xml.in.h:4
#, fuzzy #, fuzzy
msgid "Toggle maximization state" msgid "Toggle maximization state"
msgstr "Vaihda suurennustilaa" msgstr "Vaihda suurennustilaa"
#: data/50-mutter-windows.xml:14 #: ../data/50-mutter-windows.xml.in.h:5
msgid "Maximize window" msgid "Maximize window"
msgstr "Suurenna ikkuna" msgstr "Suurenna ikkuna"
#: data/50-mutter-windows.xml:16 #: ../data/50-mutter-windows.xml.in.h:6
msgid "Restore window" msgid "Restore window"
msgstr "Palauta ikkunan koko" msgstr "Palauta ikkunan koko"
#: data/50-mutter-windows.xml:18 #: ../data/50-mutter-windows.xml.in.h:7
#, fuzzy #, fuzzy
msgid "Toggle shaded state" msgid "Toggle shaded state"
msgstr "Vaihda rullaustilaa" msgstr "Vaihda rullaustilaa"
#: data/50-mutter-windows.xml:20 #: ../data/50-mutter-windows.xml.in.h:8
msgid "Close window" msgid "Close window"
msgstr "Sulje ikkuna" msgstr "Sulje ikkuna"
#: data/50-mutter-windows.xml:22 #: ../data/50-mutter-windows.xml.in.h:9
msgid "Hide window" msgid "Hide window"
msgstr "Piilota ikkuna" msgstr "Piilota ikkuna"
#: data/50-mutter-windows.xml:24 #: ../data/50-mutter-windows.xml.in.h:10
msgid "Move window" msgid "Move window"
msgstr "Siirrä ikkunaa" msgstr "Siirrä ikkunaa"
#: data/50-mutter-windows.xml:26 #: ../data/50-mutter-windows.xml.in.h:11
msgid "Resize window" msgid "Resize window"
msgstr "Muuta ikkunan kokoa" msgstr "Muuta ikkunan kokoa"
#: data/50-mutter-windows.xml:29 #: ../data/50-mutter-windows.xml.in.h:12
#, fuzzy #, fuzzy
msgid "Toggle window on all workspaces or one" msgid "Toggle window on all workspaces or one"
msgstr "Valitse onko ikkuna yhdessä vai kaikissa työtiloissa" msgstr "Valitse onko ikkuna yhdessä vai kaikissa työtiloissa"
#: data/50-mutter-windows.xml:31 #: ../data/50-mutter-windows.xml.in.h:13
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
msgstr "Nosta ikkuna, jos se on peittynyt, muuten laske se" msgstr "Nosta ikkuna, jos se on peittynyt, muuten laske se"
#: data/50-mutter-windows.xml:33 #: ../data/50-mutter-windows.xml.in.h:14
msgid "Raise window above other windows" msgid "Raise window above other windows"
msgstr "Nosta ikkuna muiden päälle" msgstr "Nosta ikkuna muiden päälle"
#: data/50-mutter-windows.xml:35 #: ../data/50-mutter-windows.xml.in.h:15
msgid "Lower window below other windows" msgid "Lower window below other windows"
msgstr "Laske ikkuna muiden alle" msgstr "Laske ikkuna muiden alle"
#: data/50-mutter-windows.xml:37 #: ../data/50-mutter-windows.xml.in.h:16
msgid "Maximize window vertically" msgid "Maximize window vertically"
msgstr "Suurenna ikkuna pystysuunnassa" msgstr "Suurenna ikkuna pystysuunnassa"
#: data/50-mutter-windows.xml:39 #: ../data/50-mutter-windows.xml.in.h:17
msgid "Maximize window horizontally" msgid "Maximize window horizontally"
msgstr "Suurenna ikkuna vaakasuunnassa" msgstr "Suurenna ikkuna vaakasuunnassa"
#: data/50-mutter-windows.xml:43 #: ../data/50-mutter-windows.xml.in.h:18
msgid "View split on left" msgid "View split on left"
msgstr "" msgstr ""
#: data/50-mutter-windows.xml:47 #: ../data/50-mutter-windows.xml.in.h:19
msgid "View split on right" msgid "View split on right"
msgstr "" msgstr ""
#: data/mutter.desktop.in:4 #: ../data/mutter.desktop.in.h:1
msgid "Mutter" msgid "Mutter"
msgstr "Mutter" msgstr "Mutter"
#: data/org.gnome.mutter.gschema.xml.in:7 #: ../data/org.gnome.mutter.gschema.xml.in.h:1
msgid "Modifier to use for extended window management operations" msgid "Modifier to use for extended window management operations"
msgstr "Muunnosnäppäin laajennettuja ikkunoidenhallintatoimintoja varten" msgstr "Muunnosnäppäin laajennettuja ikkunoidenhallintatoimintoja varten"
#: data/org.gnome.mutter.gschema.xml.in:8 #: ../data/org.gnome.mutter.gschema.xml.in.h:2
#, fuzzy
#| 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 "" msgid ""
"This key will initiate the overlay, which is a combination window overview " "This key will initiate the \"overlay\", which is a combination window "
"and application launching system. The default is intended to be the “Windows " "overview and application launching system. The default is intended to be the "
"key on PC hardware. Its expected that this binding either the default or " "\"Windows key\" on PC hardware. It's expected that this binding either the "
"set to the empty string." "default or set to the empty string."
msgstr "" msgstr ""
"Tämä avain asettaa ”overlay”-tilan (peite), joka on yhdistelmä " "Tämä avain asettaa ”overlay”-tilan (peite), joka on yhdistelmä "
"ikkunoidenhallintaa ja sovellusten käynnistämisjärjestelmää. Oletuksena " "ikkunoidenhallintaa ja sovellusten käynnistämisjärjestelmää. Oletuksena "
"käytetään ”Windows”-näppäintä PC-tietokoneissa. Odotuksena on, että tämä " "käytetään ”Windows”-näppäintä PC-tietokoneissa. Odotuksena on, että tämä "
"näppäinsidos on joko oletus tai sen arvona on tyhjä." "näppäinsidos on joko oletus tai sen arvona on tyhjä."
#: data/org.gnome.mutter.gschema.xml.in:20 #: ../data/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs" msgid "Attach modal dialogs"
msgstr "Liitä modaalisia valintaikkunoita" msgstr "Liitä modaalisia valintaikkunoita"
#: data/org.gnome.mutter.gschema.xml.in:21 #: ../data/org.gnome.mutter.gschema.xml.in.h:4
msgid "" msgid ""
"When true, instead of having independent titlebars, modal dialogs appear " "When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with " "attached to the titlebar of the parent window and are moved together with "
@@ -315,33 +309,33 @@ msgstr ""
"liitetään pääikkunan otsikkopalkkiin ja niitä siirretään yhdessä pääikkunan " "liitetään pääikkunan otsikkopalkkiin ja niitä siirretään yhdessä pääikkunan "
"kanssa." "kanssa."
#: data/org.gnome.mutter.gschema.xml.in:30 #: ../data/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:31 #: ../data/org.gnome.mutter.gschema.xml.in.h:6
msgid "" msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them " "If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available " "vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely." "area. Dropping windows on the top screen edge maximizes them completely."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:40 #: ../data/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "Työtilat hallitaan dynaamisesti" msgstr "Työtilat hallitaan dynaamisesti"
#: data/org.gnome.mutter.gschema.xml.in:41 #: ../data/org.gnome.mutter.gschema.xml.in.h:8
msgid "" msgid ""
"Determines whether workspaces are managed dynamically or whether theres a " "Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)." "gnome.desktop.wm.preferences)."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:50 #: ../data/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary" msgid "Workspaces only on primary"
msgstr "Työtilat vain ensisijaisella" msgstr "Työtilat vain ensisijaisella"
#: data/org.gnome.mutter.gschema.xml.in:51 #: ../data/org.gnome.mutter.gschema.xml.in.h:10
msgid "" msgid ""
"Determines whether workspace switching should happen for windows on all " "Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor." "monitors or only for windows on the primary monitor."
@@ -349,289 +343,222 @@ msgstr ""
"Määrittää tapahtuuko työtilan vaihto ikkunoille kaikilla näytöillä vaiko " "Määrittää tapahtuuko työtilan vaihto ikkunoille kaikilla näytöillä vaiko "
"vain ikkunoille ensisijaisella näytöllä." "vain ikkunoille ensisijaisella näytöllä."
#: data/org.gnome.mutter.gschema.xml.in:59 #: ../data/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup" msgid "No tab popup"
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:60 #: ../data/org.gnome.mutter.gschema.xml.in.h:12
msgid "" msgid ""
"Determines whether the use of popup and highlight frame should be disabled " "Determines whether the use of popup and highlight frame should be disabled "
"for window cycling." "for window cycling."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:68 #: ../data/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving" msgid "Delay focus changes until the pointer stops moving"
msgstr "" msgstr ""
"Viivästytä kohdistuksen vaihtumista, kunnes osoitin lopettaa liikkumisen" "Viivästytä kohdistuksen vaihtumista, kunnes osoitin lopettaa liikkumisen"
#: data/org.gnome.mutter.gschema.xml.in:69 #: ../data/org.gnome.mutter.gschema.xml.in.h:14
msgid "" msgid ""
"If set to true, and the focus mode is either sloppy or mouse then the " "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"focus will not be changed immediately when entering a window, but only after " "the focus will not be changed immediately when entering a window, but only "
"the pointer stops moving." "after the pointer stops moving."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:79 #: ../data/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width" msgid "Draggable border width"
msgstr "Raahattava reunaleveys" msgstr "Raahattava reunaleveys"
#: data/org.gnome.mutter.gschema.xml.in:80 #: ../data/org.gnome.mutter.gschema.xml.in.h:16
#, fuzzy
#| 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 "" msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
msgstr "" msgstr ""
"Raahattavien reunojen määrä yhteensä. Mikäli teeman näkyvät reunat eivät " "Raahattavien reunojen määrä yhteensä. Mikäli teeman näkyvät reunat eivät "
"riitä, näkymätöntä reunaa lisätään täyttämään tämä arvo." "riitä, näkymätöntä reunaa lisätään täyttämään tämä arvo."
#: data/org.gnome.mutter.gschema.xml.in:89 #: ../data/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows" msgid "Auto maximize nearly monitor sized windows"
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:90 #: ../data/org.gnome.mutter.gschema.xml.in.h:18
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, new windows that are initially the size of the monitor "
"automatically get maximized." "automatically get maximized."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:98 #: ../data/org.gnome.mutter.gschema.xml.in.h:19
msgid "Place new windows in the center" msgid "Place new windows in the center"
msgstr "Aseta uudet ikkunat keskelle näyttöä" msgstr "Aseta uudet ikkunat keskelle näyttöä"
#: data/org.gnome.mutter.gschema.xml.in:99 #: ../data/org.gnome.mutter.gschema.xml.in.h:20
msgid "" msgid ""
"When true, the new windows will always be put in the center of the active " "When true, the new windows will always be put in the center of the active "
"screen of the monitor." "screen of the monitor."
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:107 #: ../data/org.gnome.mutter.gschema.xml.in.h:21
msgid "Enable experimental features"
msgstr "Ota käyttöön kokeelliset ominaisuudet"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:145
#, fuzzy #, fuzzy
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Poista ikkuna päältä" msgstr "Poista ikkuna päältä"
#: data/org.gnome.mutter.gschema.xml.in:150 #: ../data/org.gnome.mutter.gschema.xml.in.h:22
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "" msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:155 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#, fuzzy
#| msgid "Switch applications"
msgid "Switch monitor configurations"
msgstr "Vaihda sovelluksia"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr ""
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Siirry virtuaalikonsoliin 1" msgstr "Siirry virtuaalikonsoliin 1"
#: data/org.gnome.mutter.wayland.gschema.xml.in:10 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
msgid "Switch to VT 2" msgid "Switch to VT 2"
msgstr "Siirry virtuaalikonsoliin 2" msgstr "Siirry virtuaalikonsoliin 2"
#: data/org.gnome.mutter.wayland.gschema.xml.in:14 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
msgid "Switch to VT 3" msgid "Switch to VT 3"
msgstr "Siirry virtuaalikonsoliin 3" msgstr "Siirry virtuaalikonsoliin 3"
#: data/org.gnome.mutter.wayland.gschema.xml.in:18 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
msgid "Switch to VT 4" msgid "Switch to VT 4"
msgstr "Siirry virtuaalikonsoliin 4" msgstr "Siirry virtuaalikonsoliin 4"
#: data/org.gnome.mutter.wayland.gschema.xml.in:22 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
msgid "Switch to VT 5" msgid "Switch to VT 5"
msgstr "Siirry virtuaalikonsoliin 5" msgstr "Siirry virtuaalikonsoliin 5"
#: data/org.gnome.mutter.wayland.gschema.xml.in:26 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
msgid "Switch to VT 6" msgid "Switch to VT 6"
msgstr "Siirry virtuaalikonsoliin 6" msgstr "Siirry virtuaalikonsoliin 6"
#: data/org.gnome.mutter.wayland.gschema.xml.in:30 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
msgid "Switch to VT 7" msgid "Switch to VT 7"
msgstr "Siirry virtuaalikonsoliin 7" msgstr "Siirry virtuaalikonsoliin 7"
#: data/org.gnome.mutter.wayland.gschema.xml.in:34 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8" msgid "Switch to VT 8"
msgstr "Siirry virtuaalikonsoliin 8" msgstr "Siirry virtuaalikonsoliin 8"
#: data/org.gnome.mutter.wayland.gschema.xml.in:38 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9" msgid "Switch to VT 9"
msgstr "Siirry virtuaalikonsoliin 9" msgstr "Siirry virtuaalikonsoliin 9"
#: data/org.gnome.mutter.wayland.gschema.xml.in:42 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10" msgid "Switch to VT 10"
msgstr "Siirry virtuaalikonsoliin 10" msgstr "Siirry virtuaalikonsoliin 10"
#: data/org.gnome.mutter.wayland.gschema.xml.in:46 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11" msgid "Switch to VT 11"
msgstr "Siirry virtuaalikonsoliin 11" msgstr "Siirry virtuaalikonsoliin 11"
#: data/org.gnome.mutter.wayland.gschema.xml.in:50 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Siirry virtuaalikonsoliin 12" msgstr "Siirry virtuaalikonsoliin 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54 #: ../src/backends/meta-monitor-manager.c:364
msgid "Re-enable shortcuts"
msgstr ""
#. TRANSLATORS: This string refers to a button that switches between
#. * different modes.
#.
#: src/backends/meta-input-settings.c:2151
#, c-format
msgid "Mode Switch (Group %d)"
msgstr ""
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs.
#.
#: src/backends/meta-input-settings.c:2174
#, fuzzy
msgid "Switch monitor"
msgstr "Vaihda järjestelmän kontrolleja"
#: src/backends/meta-input-settings.c:2176
msgid "Show on-screen help"
msgstr ""
#: src/backends/meta-monitor-manager.c:903
msgid "Built-in display" msgid "Built-in display"
msgstr "Sisäänrakennettu näyttö" msgstr "Sisäänrakennettu näyttö"
#: src/backends/meta-monitor-manager.c:926 #: ../src/backends/meta-monitor-manager.c:391
msgid "Unknown" msgid "Unknown"
msgstr "Tuntematon" msgstr "Tuntematon"
#: src/backends/meta-monitor-manager.c:928 #: ../src/backends/meta-monitor-manager.c:393
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Tuntematon näyttö" msgstr "Tuntematon näyttö"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: ../src/backends/meta-monitor-manager.c:401
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: ../src/compositor/compositor.c:456
#, fuzzy, c-format #, c-format
#| msgid ""
#| "Another compositing manager is already running on screen %i on display "
#| "\"%s\"."
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "" msgstr ""
"Näytön ”%2$s” ruudullä %1$d on jo käynnissä toinen ikkunoidenladontaohjelman." "Näytön ”%2$s” ruudullä %1$d on jo käynnissä toinen ikkunoidenladontaohjelman."
#: src/core/bell.c:194 #: ../src/core/bell.c:185
msgid "Bell event" msgid "Bell event"
msgstr "Äänimerkki" msgstr "Äänimerkki"
#: src/core/display.c:608 #: ../src/core/delete.c:127
#, c-format
msgid "Failed to open X Window System display “%s”\n"
msgstr "X-ikkunointijärjestelmän näytön “%s” avaaminen epäonnistui\n"
#: src/core/main.c:189
msgid "Disable connection to session manager"
msgstr "Estä yhteys sessionhallintaan"
#: src/core/main.c:195
msgid "Replace the running window manager"
msgstr "Vaihda käytössä oleva ikkunanhallinta"
#: src/core/main.c:201
msgid "Specify session management ID"
msgstr "Anna sessionhallinnan ID"
#: src/core/main.c:206
msgid "X Display to use"
msgstr "Käytettävä X-näyttö"
#: src/core/main.c:212
msgid "Initialize session from savefile"
msgstr "Alusta sessio tiedostosta"
#: src/core/main.c:218
msgid "Make X calls synchronous"
msgstr "Käytä synkronisia X-kutsuja"
#: src/core/main.c:225
msgid "Run as a wayland compositor"
msgstr "Suorita wayland-koostajana"
#: src/core/main.c:231
#, fuzzy
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Suorita wayland-koostajana"
#: src/core/main.c:239
msgid "Run as a full display server, rather than nested"
msgstr ""
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format #, c-format
msgid "“%s” is not responding." msgid "“%s” is not responding."
msgstr "\"%s\" ei vastaa." msgstr "\"%s\" ei vastaa."
#: src/core/meta-close-dialog-default.c:149 #: ../src/core/delete.c:129
msgid "Application is not responding." msgid "Application is not responding."
msgstr "Sovellus ei vastaa." msgstr "Sovellus ei vastaa."
#: src/core/meta-close-dialog-default.c:154 #: ../src/core/delete.c:134
msgid "" msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
msgstr "" msgstr ""
"Voit odottaa sovellusta vielä hetken tai sulkea sovelluksen väkisin heti." "Voit odottaa sovellusta vielä hetken tai sulkea sovelluksen väkisin heti."
#: src/core/meta-close-dialog-default.c:161 #: ../src/core/delete.c:141
msgid "_Force Quit"
msgstr "Sulje _väkisin"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait" msgid "_Wait"
msgstr "_Odota" msgstr "_Odota"
#: src/core/mutter.c:39 #: ../src/core/delete.c:141
#, fuzzy, c-format msgid "_Force Quit"
#| msgid "" msgstr "Sulje _väkisin"
#| "mutter %s\n"
#| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" #: ../src/core/display.c:562
#| "This is free software; see the source for copying conditions.\n" #, c-format
#| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " msgid "Failed to open X Window System display '%s'\n"
#| "PARTICULAR PURPOSE.\n" msgstr "X-ikkunointijärjestelmän näytön ”%s” avaaminen epäonnistui\n"
#: ../src/core/main.c:176
msgid "Disable connection to session manager"
msgstr "Estä yhteys sessionhallintaan"
#: ../src/core/main.c:182
msgid "Replace the running window manager"
msgstr "Vaihda käytössä oleva ikkunanhallinta"
#: ../src/core/main.c:188
msgid "Specify session management ID"
msgstr "Anna sessionhallinnan ID"
#: ../src/core/main.c:193
msgid "X Display to use"
msgstr "Käytettävä X-näyttö"
#: ../src/core/main.c:199
msgid "Initialize session from savefile"
msgstr "Alusta sessio tiedostosta"
#: ../src/core/main.c:205
msgid "Make X calls synchronous"
msgstr "Käytä synkronisia X-kutsuja"
#: ../src/core/main.c:212
msgid "Run as a wayland compositor"
msgstr "Suorita wayland-koostajana"
#: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested"
msgstr ""
#: ../src/core/mutter.c:39
#, c-format
msgid "" msgid ""
"mutter %s\n" "mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
"This is free software; see the source for copying conditions.\n" "This is free software; see the source for copying conditions.\n"
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
"PARTICULAR PURPOSE.\n" "PARTICULAR PURPOSE.\n"
@@ -642,59 +569,49 @@ msgstr ""
"Ei MINKÄÄNLAISTA takuuta: ei edes takuuta MYYNTIKELPOISUUDESTA tai\n" "Ei MINKÄÄNLAISTA takuuta: ei edes takuuta MYYNTIKELPOISUUDESTA tai\n"
"SOPIVUUDESTA JOHONKIN KÄYTTÖÖN.\n" "SOPIVUUDESTA JOHONKIN KÄYTTÖÖN.\n"
#: src/core/mutter.c:53 #: ../src/core/mutter.c:53
msgid "Print version" msgid "Print version"
msgstr "Näytä versio" msgstr "Näytä versio"
#: src/core/mutter.c:59 #: ../src/core/mutter.c:59
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Käytettävä Mutter-liitännäinen" msgstr "Käytettävä Mutter-liitännäinen"
#: src/core/prefs.c:1997 #: ../src/core/prefs.c:2004
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Työtila %d" msgstr "Työtila %d"
#: src/core/screen.c:580 #: ../src/core/screen.c:525
#, fuzzy, c-format #, c-format
#| msgid "" #| msgid ""
#| "Display \"%s\" already has a window manager; try using the --replace " #| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "option to replace the current window manager." #| "replace option to replace the current window manager.\n"
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display \"%s\" already has a window manager; try using the --replace option "
"replace the current window manager." "to replace the current window manager."
msgstr "" msgstr ""
"Näytöllä ”%s” on jo ikkunointiohjelma: kokeile valitsinta --replace, jos " "Näytöllä ”%s” on jo ikkunointiohjelma: kokeile valitsinta --replace, jos "
"haluat korvata nykyisen ikkunointiohjelman." "haluat korvata nykyisen ikkunointiohjelman."
#: src/core/screen.c:665 #: ../src/core/screen.c:607
#, fuzzy, c-format #, c-format
#| msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgid "Screen %d on display “%s” is invalid\n"
msgstr "Näytön ”%2$s” ruutu %1$d ei ole kelvollinen\n" msgstr "Näytön ”%2$s” ruutu %1$d ei ole kelvollinen\n"
#: src/core/util.c:120 #: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter on käännetty ilman tukea monisanaisille ilmoituksille\n" msgstr "Mutter on käännetty ilman tukea monisanaisille ilmoituksille\n"
#: src/wayland/meta-wayland-tablet-pad.c:563 #: ../src/x11/session.c:1815
#, c-format
msgid "Mode Switch: Mode %d"
msgstr ""
#: src/x11/session.c:1815
#, fuzzy
#| msgid ""
#| "These windows do not support &quot;save current setup&quot; and will have "
#| "to be restarted manually next time you log in."
msgid "" msgid ""
"These windows do not support save current setup and will have to be " "These windows do not support &quot;save current setup&quot; and will have to "
"restarted manually next time you log in." "be restarted manually next time you log in."
msgstr "" msgstr ""
"Nämä ikkunat eivät ymmärrä ”tallenna nykyinen tila”-komentoa, ja ne täytyy " "Nämä ikkunat eivät ymmärrä ”tallenna nykyinen tila”-komentoa, ja ne täytyy "
"käynnistää käsin uudelleen kun kirjaudut seuraavan kerran sisään." "käynnistää käsin uudelleen kun kirjaudut seuraavan kerran sisään."
#: src/x11/window-props.c:559 #: ../src/x11/window-props.c:549
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s @ %s" msgstr "%s @ %s"

244
po/fr.po
View File

@@ -14,22 +14,19 @@
# Claude Paroz <claude@2xlibre.net>, 2008-2017. # Claude Paroz <claude@2xlibre.net>, 2008-2017.
# Bruno Brouard <annoa.b@gmail.com>, 2011-12. # Bruno Brouard <annoa.b@gmail.com>, 2011-12.
# Charles Monzat <superboa@hotmail.fr>, 2016. # Charles Monzat <superboa@hotmail.fr>, 2016.
# Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2017.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-13 15:47+0000\n"
"PO-Revision-Date: 2017-09-05 10:52+0100\n" "PO-Revision-Date: 2017-08-15 09:16+0200\n"
"Last-Translator: Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>\n" "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
"Language-Team: French <traduc@traduc.org>\n" "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\n" "Language: fr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 2.0\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
msgid "Navigation" msgid "Navigation"
@@ -37,19 +34,19 @@ msgstr "Navigation"
#: data/50-mutter-navigation.xml:9 #: data/50-mutter-navigation.xml:9
msgid "Move window to workspace 1" msgid "Move window to workspace 1"
msgstr "Déplacer la fenêtre vers lespace de travail 1" msgstr "Déplacer la fenêtre vers l'espace de travail 1"
#: data/50-mutter-navigation.xml:12 #: data/50-mutter-navigation.xml:12
msgid "Move window to workspace 2" msgid "Move window to workspace 2"
msgstr "Déplacer la fenêtre vers lespace de travail 2" msgstr "Déplacer la fenêtre vers l'espace de travail 2"
#: data/50-mutter-navigation.xml:15 #: data/50-mutter-navigation.xml:15
msgid "Move window to workspace 3" msgid "Move window to workspace 3"
msgstr "Déplacer la fenêtre vers lespace de travail 3" msgstr "Déplacer la fenêtre vers l'espace de travail 3"
#: data/50-mutter-navigation.xml:18 #: data/50-mutter-navigation.xml:18
msgid "Move window to workspace 4" msgid "Move window to workspace 4"
msgstr "Déplacer la fenêtre vers lespace de travail 4" msgstr "Déplacer la fenêtre vers l'espace de travail 4"
#: data/50-mutter-navigation.xml:21 #: data/50-mutter-navigation.xml:21
msgid "Move window to last workspace" msgid "Move window to last workspace"
@@ -57,43 +54,43 @@ msgstr "Déplacer la fenêtre vers le dernier espace de travail"
#: data/50-mutter-navigation.xml:24 #: data/50-mutter-navigation.xml:24
msgid "Move window one workspace to the left" msgid "Move window one workspace to the left"
msgstr "Déplacer la fenêtre dun espace de travail vers la gauche" msgstr "Déplacer la fenêtre d'un espace de travail vers la gauche"
#: data/50-mutter-navigation.xml:27 #: data/50-mutter-navigation.xml:27
msgid "Move window one workspace to the right" msgid "Move window one workspace to the right"
msgstr "Déplacer la fenêtre dun espace de travail vers la droite" msgstr "Déplacer la fenêtre d'un espace de travail vers la droite"
#: data/50-mutter-navigation.xml:30 #: data/50-mutter-navigation.xml:30
msgid "Move window one workspace up" msgid "Move window one workspace up"
msgstr "Déplacer la fenêtre dun espace de travail vers le haut" msgstr "Déplacer la fenêtre d'un espace de travail vers le haut"
#: data/50-mutter-navigation.xml:33 #: data/50-mutter-navigation.xml:33
msgid "Move window one workspace down" msgid "Move window one workspace down"
msgstr "Déplacer la fenêtre dun espace de travail vers le bas" msgstr "Déplacer la fenêtre d'un espace de travail vers le bas"
#: data/50-mutter-navigation.xml:36 #: data/50-mutter-navigation.xml:36
msgid "Move window one monitor to the left" msgid "Move window one monitor to the left"
msgstr "Déplacer la fenêtre dun écran vers la gauche" msgstr "Déplacer la fenêtre d'un écran vers la gauche"
#: data/50-mutter-navigation.xml:39 #: data/50-mutter-navigation.xml:39
msgid "Move window one monitor to the right" msgid "Move window one monitor to the right"
msgstr "Déplacer la fenêtre dun écran vers la droite" msgstr "Déplacer la fenêtre d'un écran vers la droite"
#: data/50-mutter-navigation.xml:42 #: data/50-mutter-navigation.xml:42
msgid "Move window one monitor up" msgid "Move window one monitor up"
msgstr "Déplacer la fenêtre dun écran vers le haut" msgstr "Déplacer la fenêtre d'un écran vers le haut"
#: data/50-mutter-navigation.xml:45 #: data/50-mutter-navigation.xml:45
msgid "Move window one monitor down" msgid "Move window one monitor down"
msgstr "Déplacer la fenêtre dun écran vers le bas" msgstr "Déplacer la fenêtre d'un écran vers le bas"
#: data/50-mutter-navigation.xml:49 #: data/50-mutter-navigation.xml:49
msgid "Switch applications" msgid "Switch applications"
msgstr "Changer dapplication" msgstr "Changer d'application"
#: data/50-mutter-navigation.xml:54 #: data/50-mutter-navigation.xml:54
msgid "Switch to previous application" msgid "Switch to previous application"
msgstr "Passer à lapplication précédente" msgstr "Passer à l'application précédente"
#: data/50-mutter-navigation.xml:58 #: data/50-mutter-navigation.xml:58
msgid "Switch windows" msgid "Switch windows"
@@ -105,11 +102,11 @@ msgstr "Passer à la fenêtre précédente"
#: data/50-mutter-navigation.xml:67 #: data/50-mutter-navigation.xml:67
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "Changer de fenêtre dune application" msgstr "Changer de fenêtre d'une application"
#: data/50-mutter-navigation.xml:72 #: data/50-mutter-navigation.xml:72
msgid "Switch to previous window of an application" msgid "Switch to previous window of an application"
msgstr "Passer à la fenêtre précédente dune application" msgstr "Passer à la fenêtre précédente d'une application"
#: data/50-mutter-navigation.xml:76 #: data/50-mutter-navigation.xml:76
msgid "Switch system controls" msgid "Switch system controls"
@@ -129,11 +126,11 @@ msgstr "Passer directement à la fenêtre précédente"
#: data/50-mutter-navigation.xml:94 #: data/50-mutter-navigation.xml:94
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "Changer de fenêtre dune application directement" msgstr "Changer de fenêtre d'une application directement"
#: data/50-mutter-navigation.xml:99 #: data/50-mutter-navigation.xml:99
msgid "Switch directly to previous window of an app" msgid "Switch directly to previous window of an app"
msgstr "Passer directement à la fenêtre précédente dune application" msgstr "Passer directement à la fenêtre précédente d'une application"
#: data/50-mutter-navigation.xml:103 #: data/50-mutter-navigation.xml:103
msgid "Switch system controls directly" msgid "Switch system controls directly"
@@ -149,19 +146,19 @@ msgstr "Masquer toutes les fenêtres normales"
#: data/50-mutter-navigation.xml:114 #: data/50-mutter-navigation.xml:114
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "Passer à lespace de travail 1" msgstr "Passer à l'espace de travail 1"
#: data/50-mutter-navigation.xml:117 #: data/50-mutter-navigation.xml:117
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "Passer à lespace de travail 2" msgstr "Passer à l'espace de travail 2"
#: data/50-mutter-navigation.xml:120 #: data/50-mutter-navigation.xml:120
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "Passer à lespace de travail 3" msgstr "Passer à l'espace de travail 3"
#: data/50-mutter-navigation.xml:123 #: data/50-mutter-navigation.xml:123
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "Passer à lespace de travail 4" msgstr "Passer à l'espace de travail 4"
#: data/50-mutter-navigation.xml:126 #: data/50-mutter-navigation.xml:126
msgid "Switch to last workspace" msgid "Switch to last workspace"
@@ -169,19 +166,19 @@ msgstr "Passer au dernier espace de travail"
#: data/50-mutter-navigation.xml:129 #: data/50-mutter-navigation.xml:129
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "Déplacer vers lespace de travail de gauche" msgstr "Déplacer vers l'espace de travail de gauche"
#: data/50-mutter-navigation.xml:132 #: data/50-mutter-navigation.xml:132
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "Déplacer vers lespace de travail de droite" msgstr "Déplacer vers l'espace de travail de droite"
#: data/50-mutter-navigation.xml:135 #: data/50-mutter-navigation.xml:135
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "Déplacer vers lespace de travail du dessus" msgstr "Déplacer vers l'espace de travail du dessus"
#: data/50-mutter-navigation.xml:138 #: data/50-mutter-navigation.xml:138
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "Déplacer vers lespace de travail du dessous" msgstr "Déplacer vers l'espace de travail du dessous"
#: data/50-mutter-system.xml:6 #: data/50-mutter-system.xml:6
msgid "System" msgid "System"
@@ -193,7 +190,7 @@ msgstr "Afficher la fenêtre pour lancer une commande"
#: data/50-mutter-system.xml:10 #: data/50-mutter-system.xml:10
msgid "Show the activities overview" msgid "Show the activities overview"
msgstr "Afficher laperçu des activités" msgstr "Afficher l'aperçu des activités"
#: data/50-mutter-windows.xml:6 #: data/50-mutter-windows.xml:6
msgid "Windows" msgid "Windows"
@@ -209,7 +206,7 @@ msgstr "Basculer le mode plein écran"
#: data/50-mutter-windows.xml:12 #: data/50-mutter-windows.xml:12
msgid "Toggle maximization state" msgid "Toggle maximization state"
msgstr "Basculer létat dagrandissement" msgstr "Basculer l'état d'agrandissement"
#: data/50-mutter-windows.xml:14 #: data/50-mutter-windows.xml:14
msgid "Maximize window" msgid "Maximize window"
@@ -221,7 +218,7 @@ msgstr "Restaurer la fenêtre"
#: data/50-mutter-windows.xml:18 #: data/50-mutter-windows.xml:18
msgid "Toggle shaded state" msgid "Toggle shaded state"
msgstr "Basculer létat de repli" msgstr "Basculer l'état de repli"
#: data/50-mutter-windows.xml:20 #: data/50-mutter-windows.xml:20
msgid "Close window" msgid "Close window"
@@ -246,7 +243,7 @@ msgstr "Placer la fenêtre sur tous les espaces de travail, ou sur un seul"
#: data/50-mutter-windows.xml:31 #: data/50-mutter-windows.xml:31
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
msgstr "" msgstr ""
"Mettre la fenêtre au premier plan si elle est cachée, sinon à larrière-plan" "Mettre la fenêtre au premier plan si elle est cachée, sinon à l'arrière-plan"
#: data/50-mutter-windows.xml:33 #: data/50-mutter-windows.xml:33
msgid "Raise window above other windows" msgid "Raise window above other windows"
@@ -287,8 +284,8 @@ msgid ""
"key” on PC hardware. Its expected that this binding either the default or " "key” on PC hardware. Its expected that this binding either the default or "
"set to the empty string." "set to the empty string."
msgstr "" msgstr ""
"Cette touche initie l« overlay », une combinaison daperçu des fenêtres et " "Cette touche initie l'« overlay », une combinaison d'aperçu des fenêtres et "
"dun système de lancement dapplications. La touche par défaut sur le " "d'un système de lancement d'applications. La touche par défaut sur le "
"matériel PC est la touche Windows. En principe, ce raccourci est configuré " "matériel PC est la touche Windows. En principe, ce raccourci est configuré "
"sur le réglage par défaut ou sur la chaîne vide." "sur le réglage par défaut ou sur la chaîne vide."
@@ -302,13 +299,13 @@ msgid ""
"attached to the titlebar of the parent window and are moved together with " "attached to the titlebar of the parent window and are moved together with "
"the parent window." "the parent window."
msgstr "" msgstr ""
"Si vrai, au lieu davoir des barres de titre indépendantes, les boîtes de " "Si vrai, au lieu d'avoir des barres de titre indépendantes, les boîtes de "
"dialogue apparaissent attachées à la barre de titre de la fenêtre parente et " "dialogue apparaissent attachées à la barre de titre de la fenêtre parente et "
"sont déplacées ensembles avec elle." "sont déplacées ensembles avec elle."
#: data/org.gnome.mutter.gschema.xml.in:30 #: data/org.gnome.mutter.gschema.xml.in:30
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Activer lempilage des fenêtres déposées sur les bords de lécran" msgstr "Activer l'empilage des fenêtres déposées sur les bords de l'écran"
#: data/org.gnome.mutter.gschema.xml.in:31 #: data/org.gnome.mutter.gschema.xml.in:31
msgid "" msgid ""
@@ -316,10 +313,10 @@ msgid ""
"vertically and resizes them horizontally to cover half of the available " "vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely." "area. Dropping windows on the top screen edge maximizes them completely."
msgstr "" msgstr ""
"Si activé, le dépôt des fenêtres sur les bords verticaux de lécran les " "Si activé, le dépôt des fenêtres sur les bords verticaux de l'écran les "
"maximise verticalement et les redimensionne horizontalement pour recouvrir " "maximise verticalement et les redimensionne horizontalement pour recouvrir "
"la moitié de la zone disponible. Le dépôt des fenêtres sur le bord supérieur " "la moitié de la zone disponible. Le dépôt des fenêtres sur le bord supérieur "
"de lécran les maximise complètement." "de l'écran les maximise complètement."
#: data/org.gnome.mutter.gschema.xml.in:40 #: data/org.gnome.mutter.gschema.xml.in:40
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
@@ -332,20 +329,20 @@ msgid ""
"gnome.desktop.wm.preferences)." "gnome.desktop.wm.preferences)."
msgstr "" msgstr ""
"Détermine si les espaces de travail sont gérés de manière dynamique ou si le " "Détermine si les espaces de travail sont gérés de manière dynamique ou si le "
"nombre despaces de travail est fixe (déterminé par la clé num-workspaces " "nombre d'espaces de travail est fixe (déterminé par la clé num-workspaces "
"dans org.gnome.desktop.wm.preferences)." "dans org.gnome.desktop.wm.preferences)."
#: data/org.gnome.mutter.gschema.xml.in:50 #: data/org.gnome.mutter.gschema.xml.in:50
msgid "Workspaces only on primary" msgid "Workspaces only on primary"
msgstr "Espaces de travail seulement sur lécran principal" msgstr "Espaces de travail seulement sur l'écran principal"
#: data/org.gnome.mutter.gschema.xml.in:51 #: data/org.gnome.mutter.gschema.xml.in:51
msgid "" msgid ""
"Determines whether workspace switching should happen for windows on all " "Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor." "monitors or only for windows on the primary monitor."
msgstr "" msgstr ""
"Détermine si le changement despace de travail doit se produire pour les " "Détermine si le changement d'espace de travail doit se produire pour les "
"fenêtres de tous les écrans ou seulement pour les fenêtres de lécran " "fenêtres de tous les écrans ou seulement pour les fenêtres de l'écran "
"principal." "principal."
#: data/org.gnome.mutter.gschema.xml.in:59 #: data/org.gnome.mutter.gschema.xml.in:59
@@ -357,12 +354,12 @@ msgid ""
"Determines whether the use of popup and highlight frame should be disabled " "Determines whether the use of popup and highlight frame should be disabled "
"for window cycling." "for window cycling."
msgstr "" msgstr ""
"Détermine si lutilisation de fenêtres surgissantes et de mise en valeur " "Détermine si l'utilisation de fenêtres surgissantes et de mise en valeur "
"doit être désactivée pour la consultation des fenêtres." "doit être désactivée pour la consultation des fenêtres."
#: data/org.gnome.mutter.gschema.xml.in:68 #: data/org.gnome.mutter.gschema.xml.in:68
msgid "Delay focus changes until the pointer stops moving" msgid "Delay focus changes until the pointer stops moving"
msgstr "Attend larrêt du pointeur avant le changement de focus" msgstr "Attend l'arrêt du pointeur avant le changement de focus"
#: data/org.gnome.mutter.gschema.xml.in:69 #: data/org.gnome.mutter.gschema.xml.in:69
msgid "" msgid ""
@@ -372,7 +369,7 @@ msgid ""
msgstr "" msgstr ""
"Si défini à true et que le mode de focus est soit « sloppy » ou « souris », " "Si défini à true et que le mode de focus est soit « sloppy » ou « souris », "
"alors le focus ne sera pas changé immédiatement en passant sur une fenêtre, " "alors le focus ne sera pas changé immédiatement en passant sur une fenêtre, "
"mais seulement après que le pointeur sarrête." "mais seulement après que le pointeur s'arrête."
#: data/org.gnome.mutter.gschema.xml.in:79 #: data/org.gnome.mutter.gschema.xml.in:79
msgid "Draggable border width" msgid "Draggable border width"
@@ -383,7 +380,7 @@ msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the themes visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
msgstr "" msgstr ""
"La taille totale des bordures que lon peut déplacer. Si les bordures " "La taille totale des bordures que l'on peut déplacer. Si les bordures "
"visibles du thème ne sont pas suffisantes, des bordures invisibles sont " "visibles du thème ne sont pas suffisantes, des bordures invisibles sont "
"ajoutées pour arriver à cette valeur." "ajoutées pour arriver à cette valeur."
@@ -391,15 +388,15 @@ msgstr ""
msgid "Auto maximize nearly monitor sized windows" msgid "Auto maximize nearly monitor sized windows"
msgstr "" msgstr ""
"Maximiser automatiquement les fenêtres dont la taille est proche de celle de " "Maximiser automatiquement les fenêtres dont la taille est proche de celle de "
"lécran" "l'écran"
#: data/org.gnome.mutter.gschema.xml.in:90 #: data/org.gnome.mutter.gschema.xml.in:90
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, new windows that are initially the size of the monitor "
"automatically get maximized." "automatically get maximized."
msgstr "" msgstr ""
"Si activé, les nouvelles fenêtres qui ont presque la taille de lécran à " "Si activé, les nouvelles fenêtres qui ont presque la taille de l'écran à "
"louverture seront maximisées automatiquement." "l'ouverture seront maximisées automatiquement."
#: data/org.gnome.mutter.gschema.xml.in:98 #: data/org.gnome.mutter.gschema.xml.in:98
msgid "Place new windows in the center" msgid "Place new windows in the center"
@@ -411,120 +408,108 @@ msgid ""
"screen of the monitor." "screen of the monitor."
msgstr "" msgstr ""
"Si true (vrai), les nouvelles fenêtres seront toujours placées au centre de " "Si true (vrai), les nouvelles fenêtres seront toujours placées au centre de "
"lécran actif du moniteur." "l'écran actif du moniteur."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:107
msgid "Enable experimental features" msgid "Enable experimental features"
msgstr "Activer les fonctionnalités expérimentales" msgstr "Activer les fonctionnalités expérimentales"
#: data/org.gnome.mutter.gschema.xml.in:108 #: data/org.gnome.mutter.gschema.xml.in:108
#| msgid ""
#| "To enable experimental features, add the feature keyword to the list. "
#| "Whether the feature requires restarting the compositor depends on the "
#| "given feature. Any experimental feature is not required to still be "
#| "available, or configurable. Dont expect adding anything in this setting "
#| "to be future proof. Currently possible keywords: • “monitor-config-"
#| "manager” — use the new monitor configuration system, aimed to replace the "
#| "old one. This enables a higher level configuration API to be used by "
#| "configuration applications, as well as the ability to configure per "
#| "logical monitor scale. • “scale-monitor-framebuffer” — makes mutter "
#| "default to layout logical monitors in a logical pixel coordinate space, "
#| "while scaling monitor framebuffers instead of window content, to manage "
#| "HiDPI monitors. Does not require a restart. Also enabling “monitor-config-"
#| "manager” is required for this feature to be enabled."
msgid "" msgid ""
"To enable experimental features, add the feature keyword to the list. " "To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or " "feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future " "configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “monitor-config-manager” — use the new "
"mutter default to layout logical monitors in a logical pixel coordinate " "monitor configuration system, aimed to replace the old one. This enables a "
"space, while scaling monitor framebuffers instead of window content, to " "higher level configuration API to be used by configuration applications, as "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "well as the ability to configure per logical monitor scale. • “scale-monitor-"
"enables remote desktop support. To support remote desktop with screen " "framebuffer” — makes mutter default to layout logical monitors in a logical "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " "pixel coordinate space, while scaling monitor framebuffers instead of window "
"screen cast support." "content, to manage HiDPI monitors. Does not require a restart. Also enabling "
"“monitor-config-manager” is required for this feature to be enabled."
msgstr "" msgstr ""
"Pour activer les fonctionnalités expérimentales, ajoutez le mot-clé de la " "Pour activer les fonctionnalités expérimentales, ajoutez le mot-clé de la "
"fonctionnalité dans la liste. Selon la fonctionnalité, il peut être " "fonctionnalité dans la liste. Selon la fonctionnalité, il peut être nécessaire "
"nécessaire de redémarrer le compositeur. Chaque fonctionnalité expérimentale " "de redémarrer le compositeur. Chaque fonctionnalité expérimentale peut "
"peut disparaître ou ne plus être configurable. Ne vous attendez pas à ce que" "disparaître ou ne plus être configurable. N'attendez pas à ce que le contenu de "
" le " "ce réglage soit stable dans le temps. Les mots-clés actuellement possibles "
"contenu de ce réglage soit stable dans le temps. Les mots-clés actuellement " "sont : • « monitor-config-manager » — utiliser le nouveau système de "
"possibles sont : • « scale-monitor-framebuffer » — demande à mutter " "configuration de moniteur qui remplacera l'ancien à terme. Cela active une "
"dutiliser par défaut une disposition par moniteur logique dans un espace de " "API de configuration de plus haut niveau exploitable par les applications de "
"coordonnées de pixels logique, tout en mettant à léchelle les " "configuration. Il permet aussi de configurer par échelle de moniteur logique. "
"« framebuffers » de moniteur au lieu des contenus de fenêtre pour pouvoir " "• « scale-monitor-framebuffer » — demande à mutter d'utiliser par défaut une "
"gérer les moniteurs à haute densité. Cela ne cessite pas de redémarrage. " "disposition par moniteur logique dans un espace de coordonnées de pixels logique, "
"• « remote-desktop » — active la prise en charge du bureau à distance. Pour " "tout en mettant à l'échelle les « framebuffers » de moniteur au lieu des contenus "
"la prise en charge du bureau distant avec partage de lécran, « screen-cast » " "de fenêtre pour pouvoir gérer les moniteurs à haute densité. Cela ne nécessite "
"doit aussi être activé. • « screen-cast » — active la diffusion de lécran. " "pas de redémarrage. L'activation de « monitor-config-manager » est requis pour "
"que cette fonctionnalité soit activée."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "" msgstr ""
"Sélectionner la fenêtre dans la vue qui apparaît suite à un appui sur la " "Sélectionner la fenêtre dans la vue qui apparaît suite à un appui sur la "
"touche tab" "touche tab"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Fermer la vue qui apparaît suite à un appui sur la touche tab" msgstr "Fermer la vue qui apparaît suite à un appui sur la touche tab"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:161
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Changer de configuration de moniteur" msgstr "Changer de configuration de moniteur"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:166
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Passe à la prochaine configuration intégrée de moniteur" msgstr "Passe à la prochaine configuration intégrée de moniteur"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Passer à lémulateur de terminal 1" msgstr "Passer à l'émulateur de terminal 1"
#: data/org.gnome.mutter.wayland.gschema.xml.in:10 #: data/org.gnome.mutter.wayland.gschema.xml.in:10
msgid "Switch to VT 2" msgid "Switch to VT 2"
msgstr "Passer à lémulateur de terminal 2" msgstr "Passer à l'émulateur de terminal 2"
#: data/org.gnome.mutter.wayland.gschema.xml.in:14 #: data/org.gnome.mutter.wayland.gschema.xml.in:14
msgid "Switch to VT 3" msgid "Switch to VT 3"
msgstr "Passer à lémulateur de terminal 3" msgstr "Passer à l'émulateur de terminal 3"
#: data/org.gnome.mutter.wayland.gschema.xml.in:18 #: data/org.gnome.mutter.wayland.gschema.xml.in:18
msgid "Switch to VT 4" msgid "Switch to VT 4"
msgstr "Passer à lémulateur de terminal 4" msgstr "Passer à l'émulateur de terminal 4"
#: data/org.gnome.mutter.wayland.gschema.xml.in:22 #: data/org.gnome.mutter.wayland.gschema.xml.in:22
msgid "Switch to VT 5" msgid "Switch to VT 5"
msgstr "Passer à lémulateur de terminal 5" msgstr "Passer à l'émulateur de terminal 5"
#: data/org.gnome.mutter.wayland.gschema.xml.in:26 #: data/org.gnome.mutter.wayland.gschema.xml.in:26
msgid "Switch to VT 6" msgid "Switch to VT 6"
msgstr "Passer à lémulateur de terminal 6" msgstr "Passer à l'émulateur de terminal 6"
#: data/org.gnome.mutter.wayland.gschema.xml.in:30 #: data/org.gnome.mutter.wayland.gschema.xml.in:30
msgid "Switch to VT 7" msgid "Switch to VT 7"
msgstr "Passer à lémulateur de terminal 7" msgstr "Passer à l'émulateur de terminal 7"
#: data/org.gnome.mutter.wayland.gschema.xml.in:34 #: data/org.gnome.mutter.wayland.gschema.xml.in:34
msgid "Switch to VT 8" msgid "Switch to VT 8"
msgstr "Passer à lémulateur de terminal 8" msgstr "Passer à l'émulateur de terminal 8"
#: data/org.gnome.mutter.wayland.gschema.xml.in:38 #: data/org.gnome.mutter.wayland.gschema.xml.in:38
msgid "Switch to VT 9" msgid "Switch to VT 9"
msgstr "Passer à lémulateur de terminal 9" msgstr "Passer à l'émulateur de terminal 9"
#: data/org.gnome.mutter.wayland.gschema.xml.in:42 #: data/org.gnome.mutter.wayland.gschema.xml.in:42
msgid "Switch to VT 10" msgid "Switch to VT 10"
msgstr "Passer à lémulateur de terminal 10" msgstr "Passer à l'émulateur de terminal 10"
#: data/org.gnome.mutter.wayland.gschema.xml.in:46 #: data/org.gnome.mutter.wayland.gschema.xml.in:46
msgid "Switch to VT 11" msgid "Switch to VT 11"
msgstr "Passer à lémulateur de terminal 11" msgstr "Passer à l'émulateur de terminal 11"
#: data/org.gnome.mutter.wayland.gschema.xml.in:50 #: data/org.gnome.mutter.wayland.gschema.xml.in:50
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Passer à lémulateur de terminal 12" msgstr "Passer à l'émulateur de terminal 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54 #: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts" msgid "Re-enable shortcuts"
@@ -533,38 +518,38 @@ msgstr "Réactiver les raccourcis"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:2118
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Changement de mode (groupe %d)" msgstr "Changement de mode (groupe %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:2141
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Changer de moniteur" msgstr "Changer de moniteur"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:2143
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Afficher laide à lécran" msgstr "Afficher l'aide à l'écran"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:927
msgid "Built-in display" msgid "Built-in display"
msgstr "Affichage intégré" msgstr "Affichage intégré"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:950
msgid "Unknown" msgid "Unknown"
msgstr "Inconnu" msgstr "Inconnu"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:952
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Affichage inconnu" msgstr "Affichage inconnu"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:960
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
@@ -576,8 +561,8 @@ msgstr "%s %s"
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
msgstr "" msgstr ""
"Un autre gestionnaire de composition est déjà lancé sur lécran %i de " "Un autre gestionnaire de composition est déjà lancé sur l'écran %i de "
"laffichage « %s »." "l'affichage « %s »."
#: src/core/bell.c:194 #: src/core/bell.c:194
msgid "Bell event" msgid "Bell event"
@@ -586,7 +571,7 @@ msgstr "Évènement sonore"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
msgstr "Impossible douvrir laffichage « %s » du système X Window\n" msgstr "Impossible d'ouvrir l'affichage « %s » du système X Window\n"
#: src/core/main.c:189 #: src/core/main.c:189
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
@@ -598,7 +583,7 @@ msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
#: src/core/main.c:201 #: src/core/main.c:201
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Indiquer lID de gestion de sessions" msgstr "Indiquer l'ID de gestion de sessions"
#: src/core/main.c:206 #: src/core/main.c:206
msgid "X Display to use" msgid "X Display to use"
@@ -622,7 +607,7 @@ msgstr "Lancer comme un compositeur imbriqué"
#: src/core/main.c:239 #: src/core/main.c:239
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Lancer comme un serveur daffichage complet, plutôt quimbriqué" msgstr "Lancer comme un serveur d'affichage complet, plutôt qu'imbriqué"
#. Translators: %s is a window title #. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147 #: src/core/meta-close-dialog-default.c:147
@@ -632,14 +617,14 @@ msgstr "« %s » ne répond pas."
#: src/core/meta-close-dialog-default.c:149 #: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding." msgid "Application is not responding."
msgstr "Lapplication ne répond pas." msgstr "L'application ne répond pas."
#: src/core/meta-close-dialog-default.c:154 #: src/core/meta-close-dialog-default.c:154
msgid "" msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
msgstr "" msgstr ""
"Vous pouvez patienter un instant pour continuer ou forcer lapplication à " "Vous pouvez patienter un instant pour continuer ou forcer l'application à "
"quitter définitivement." "quitter définitivement."
#: src/core/meta-close-dialog-default.c:161 #: src/core/meta-close-dialog-default.c:161
@@ -663,8 +648,8 @@ msgstr ""
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., et autres.\n" "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., et autres.\n"
"Ceci est un logiciel libre ; consultez le code source pour les\n" "Ceci est un logiciel libre ; consultez le code source pour les\n"
"conditions de copie.\n" "conditions de copie.\n"
"Il ny a AUCUNE garantie ; même pas de VALEUR MARCHANDE ou\n" "Il n'y a AUCUNE garantie ; même pas de VALEUR MARCHANDE ou\n"
"dADÉQUATION À UN USAGE PARTICULIER.\n" "d'ADÉQUATION À UN USAGE PARTICULIER.\n"
#: src/core/mutter.c:53 #: src/core/mutter.c:53
msgid "Print version" msgid "Print version"
@@ -685,13 +670,13 @@ msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display “%s” already has a window manager; try using the --replace option to "
"replace the current window manager." "replace the current window manager."
msgstr "" msgstr ""
"Laffichage « %s » a déjà un gestionnaire de fenêtres ; essayez dutiliser " "L'affichage « %s » a déjà un gestionnaire de fenêtres ; essayez d'utiliser "
"loption --replace pour remplacer le gestionnaire de fenêtres actuel." "l'option --replace pour remplacer le gestionnaire de fenêtres actuel."
#: src/core/screen.c:665 #: src/core/screen.c:665
#, c-format #, c-format
msgid "Screen %d on display “%s” is invalid\n" msgid "Screen %d on display “%s” is invalid\n"
msgstr "Lécran %d sur laffichage « %s » nest pas valide\n" msgstr "L'écran %d sur l'affichage « %s » n'est pas valide\n"
#: src/core/util.c:120 #: src/core/util.c:120
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
@@ -707,7 +692,7 @@ msgid ""
"These windows do not support “save current setup” and will have to be " "These windows do not support “save current setup” and will have to be "
"restarted manually next time you log in." "restarted manually next time you log in."
msgstr "" msgstr ""
"Ces fenêtres ne prennent pas en charge « lenregistrement de la " "Ces fenêtres ne prennent pas en charge « l'enregistrement de la "
"configuration actuelle » et devront être redémarrées manuellement à la " "configuration actuelle » et devront être redémarrées manuellement à la "
"prochaine connexion." "prochaine connexion."
@@ -715,4 +700,3 @@ msgstr ""
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (sur %s)" msgstr "%s (sur %s)"

View File

@@ -15,8 +15,8 @@ msgstr ""
"Project-Id-Version: gl\n" "Project-Id-Version: gl\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n" "&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-30 22:29+0200\n" "PO-Revision-Date: 2017-08-23 12:21+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n" "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: Galician\n" "Language-Team: Galician\n"
"Language: gl\n" "Language: gl\n"
@@ -416,11 +416,15 @@ msgstr "Activar as características experimentais"
#| "Whether the feature requires restarting the compositor depends on the " #| "Whether the feature requires restarting the compositor depends on the "
#| "given feature. Any experimental feature is not required to still be " #| "given feature. Any experimental feature is not required to still be "
#| "available, or configurable. Dont expect adding anything in this setting " #| "available, or configurable. Dont expect adding anything in this setting "
#| "to be future proof. Currently possible keywords: • “scale-monitor-" #| "to be future proof. Currently possible keywords: • “monitor-config-"
#| "framebuffer” — makes mutter default to layout logical monitors in a " #| "manager” — use the new monitor configuration system, aimed to replace the "
#| "logical pixel coordinate space, while scaling monitor framebuffers " #| "old one. This enables a higher level configuration API to be used by "
#| "instead of window content, to manage HiDPI monitors. Does not require a " #| "configuration applications, as well as the ability to configure per "
#| "restart." #| "logical monitor scale. • “scale-monitor-framebuffer” — makes mutter "
#| "default to layout logical monitors in a logical pixel coordinate space, "
#| "while scaling monitor framebuffers instead of window content, to manage "
#| "HiDPI monitors. Does not require a restart. Also enabling “monitor-config-"
#| "manager” is required for this feature to be enabled."
msgid "" msgid ""
"To enable experimental features, add the feature keyword to the list. " "To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
@@ -429,38 +433,31 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Para activar as características experimentais, engada a palabra chave da " "Para activar as características experimentais, engada a palabra chave da "
"característica á lista. Depende da característica que se deba reiniciar ou " "característica á lista. Depende da característica que se deba reiniciar ou "
"non o compositor. Calquera característica experimental pode non estar " "non o compositor. Calquera característica experimental pode non estar "
"dispoñíbel ou ser configurábel. Non agarde que o que se engada neste " "dispoñíbel ou ser configurábel. Non agarde que o que se engada neste "
"escenario sirva como proba futura. As palabras chave actualmente dispoñíbeis " "escenario sirva como proba futura. As palabras chave actualmente dispoñíbeis "
"son: «scale-monitor-framebuffer»fai que mutter de maneira predeterminada " "son: scale-monitor-framebufferconvirte a mutter na maneira "
"dispoña os monitores lóxicos nun espacio lóxico de coordenadas de píxeles, " "predeterminada de dispor monitores lóxicos nun espacio lóxico de coordenadas "
"mentres escala framebuffers de monitores no lugar do contido de xanela, para " "de íxeles, a escalar framebuffers de monitores framebuffers no lugar do "
"administrar monitores HiDPI. Non require un reinicio. «remote-desktop» — " "contido de xnalea, para administrar monitores HiDPI. Non require un reinicio."
"permite a compatibilidade con compartición de pantalla. Para admitir o "
"escritorio remoto con compartición de pantalla tamén debe activar «screen-"
"cast». • «screen-cast» — permite a compatibilidade coa retransmisión de "
"pantalla."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Seleccionar xanela da lapela emerxente" msgstr "Seleccionar xanela da lapela emerxente"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Cancelar lapela emerxente" msgstr "Cancelar lapela emerxente"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Cambiar preferencias do monitor" msgstr "Cambiar preferencias do monitor"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Rota a configuración do monitor embebido" msgstr "Rota a configuración do monitor embebido"

View File

@@ -6,8 +6,8 @@ msgstr ""
"Project-Id-Version: metacity 0\n" "Project-Id-Version: metacity 0\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-09-22 20:51+0200\n" "PO-Revision-Date: 2017-08-23 17:40+0200\n"
"Last-Translator: gogo <trebelnik2@gmail.com>\n" "Last-Translator: gogo <trebelnik2@gmail.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n" "Language-Team: Croatian <lokalizacija@linux.hr>\n"
"Language: hr\n" "Language: hr\n"
@@ -193,15 +193,15 @@ msgstr "Aktiviraj izbornik prozora"
#: data/50-mutter-windows.xml:10 #: data/50-mutter-windows.xml:10
msgid "Toggle fullscreen mode" msgid "Toggle fullscreen mode"
msgstr "Uklj/Isklj cjelozaslonski prikaz" msgstr "Postavi preko cijelog zaslona"
#: data/50-mutter-windows.xml:12 #: data/50-mutter-windows.xml:12
msgid "Toggle maximization state" msgid "Toggle maximization state"
msgstr "Uklj/Isklj uvećanje prozora" msgstr "Promijeni stanje maksimizacije"
#: data/50-mutter-windows.xml:14 #: data/50-mutter-windows.xml:14
msgid "Maximize window" msgid "Maximize window"
msgstr "Uvećaj prozor" msgstr "Maksimiziraj prozor"
#: data/50-mutter-windows.xml:16 #: data/50-mutter-windows.xml:16
msgid "Restore window" msgid "Restore window"
@@ -209,7 +209,7 @@ msgstr "Vrati prozor"
#: data/50-mutter-windows.xml:18 #: data/50-mutter-windows.xml:18
msgid "Toggle shaded state" msgid "Toggle shaded state"
msgstr "Uklj/Isklj stanje zasjenjenosti" msgstr "Promijeni stanje zasjenjenosti"
#: data/50-mutter-windows.xml:20 #: data/50-mutter-windows.xml:20
msgid "Close window" msgid "Close window"
@@ -233,7 +233,7 @@ msgstr "Uklj/Isklj prozor na svim radnim prostorima"
#: data/50-mutter-windows.xml:31 #: data/50-mutter-windows.xml:31
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
msgstr "Podigni prekriven prozor, u suprotnome smanji" msgstr "Podigni prekriven prozor, inače smanji"
#: data/50-mutter-windows.xml:33 #: data/50-mutter-windows.xml:33
msgid "Raise window above other windows" msgid "Raise window above other windows"
@@ -241,7 +241,7 @@ msgstr "Podigni prozor iznad ostalih prozora"
#: data/50-mutter-windows.xml:35 #: data/50-mutter-windows.xml:35
msgid "Lower window below other windows" msgid "Lower window below other windows"
msgstr "Spusti prozor ispod ostalih prozora" msgstr "Spustiti prozor ispod ostalih prozora"
#: data/50-mutter-windows.xml:37 #: data/50-mutter-windows.xml:37
msgid "Maximize window vertically" msgid "Maximize window vertically"
@@ -407,10 +407,7 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Za omogućavanje eksperimentalnih značajki, dodajte ključnu riječ značajke na " "Za omogućavanje eksperimentalnih značajki, dodajte ključnu riječ značajke na "
"popis. Zahtijeva li značajka ponovno pokretanje kompozitora ovisi o zadanoj " "popis. Zahtijeva li značajka ponovno pokretanje kompozitora ovisi o zadanoj "
@@ -420,24 +417,21 @@ msgstr ""
"monitor-framebuffer” — čini mutter zadanim izlazu logičkih zaslona u " "monitor-framebuffer” — čini mutter zadanim izlazu logičkih zaslona u "
"logičnom koordinatnom prostoru piksela, dok međuspremnik okvira mijenja " "logičnom koordinatnom prostoru piksela, dok međuspremnik okvira mijenja "
"veličinu zaslona umjesto sadržaja prozora, upravlja kako bi upravljao " "veličinu zaslona umjesto sadržaja prozora, upravlja kako bi upravljao "
"(HiDPI) zaslonima visoke razlučivosti. Ne zahtijeva ponovno pokretanje." "(HiDPI) zaslonima visoke razlučivosti. Ne zahtijeva ponovno pokretanje."
"“remote-desktop” — omogućava podršku za udaljene radne površine. Za podršku "
"udaljene radne površine s dijeljenjem zaslona, “screen-cast” mora isto biti "
"omogućen. • “screen-cast” — omogućuje podršku emitiranja zaslona."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Odaberi prozor iz skočnog prozora" msgstr "Odaberi prozor iz skočnog prozora"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Prekini skočni prozor" msgstr "Prekini skočni prozor"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Prebacivanje podešavanja zaslona" msgstr "Prebacivanje podešavanja zaslona"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Rotiraj ugrađeno podešavanje zaslona" msgstr "Rotiraj ugrađeno podešavanje zaslona"

View File

@@ -12,15 +12,15 @@ msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-02 10:05+0000\n"
"PO-Revision-Date: 2017-09-05 17:35+0200\n" "PO-Revision-Date: 2017-08-09 08:51+0200\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n" "Last-Translator: Meskó Balázs <meskobalazs@fedoraproject.org>\n"
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n" "Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
"Language: hu\n" "Language: hu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.2\n" "X-Generator: Poedit 2.0.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
@@ -404,60 +404,48 @@ msgid "Enable experimental features"
msgstr "Kísérleti funkciók engedélyezése" msgstr "Kísérleti funkciók engedélyezése"
#: data/org.gnome.mutter.gschema.xml.in:108 #: data/org.gnome.mutter.gschema.xml.in:108
#| msgid ""
#| "To enable experimental features, add the feature keyword to the list. "
#| "Whether the feature requires restarting the compositor depends on the "
#| "given feature. Any experimental feature is not required to still be "
#| "available, or configurable. Dont expect adding anything in this setting "
#| "to be future proof. Currently possible keywords: • “monitor-config-"
#| "manager” — use the new monitor configuration system, aimed to replace the "
#| "old one. This enables a higher level configuration API to be used by "
#| "configuration applications, as well as the ability to configure per "
#| "logical monitor scale. • “scale-monitor-framebuffer” — makes mutter "
#| "default to layout logical monitors in a logical pixel coordinate space, "
#| "while scaling monitor framebuffers instead of window content, to manage "
#| "HiDPI monitors. Does not require a restart. Also enabling “monitor-config-"
#| "manager” is required for this feature to be enabled."
msgid "" msgid ""
"To enable experimental features, add the feature keyword to the list. " "To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or " "feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future " "configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “monitor-config-manager” — use the new "
"mutter default to layout logical monitors in a logical pixel coordinate " "monitor configuration system, aimed to replace the old one. This enables a "
"space, while scaling monitor framebuffers instead of window content, to " "higher level configuration API to be used by configuration applications, as "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "well as the ability to configure per logical monitor scale. • “scale-monitor-"
"enables remote desktop support. To support remote desktop with screen " "framebuffer” — makes mutter default to layout logical monitors in a logical "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " "pixel coordinate space, while scaling monitor framebuffers instead of window "
"screen cast support." "content, to manage HiDPI monitors. Does not require a restart. Also enabling "
"“monitor-config-manager” is required for this feature to be enabled."
msgstr "" msgstr ""
"A kísérleti funkciók engedélyezéséhez adja hozzá a funkció kulcsszavát a " "A kísérleti funkciók engedélyezéséhez adja hozzá a funkció kulcsszavát a "
"listához. A funkció a betűszedő újraindítását igényelheti az adott funkciótól " "listához. A funkció a betűszedő újraindítását igényelheti az adott "
"függően. Egyik kísérleti funkciónál sem szükséges, hogy továbbra is elérhető " "funkciótól függően. Egyik kísérleti funkciónál sem szükséges, hogy továbbra "
"vagy beállítható legyen. Ne várja el azt, hogy ha bármit hozzáad ehhez a " "is elérhető vagy beállítható legyen. Ne várja el azt, hogy ha bármit hozzáad "
"beállításhoz, akkor az a jövőben is elérhető lesz. Jelenleg lehetséges " "ehhez a beállításhoz, akkor az a jövőben is elérhető lesz. Jelenleg "
"kulcsszavak: • „scale-monitor-framebuffer” alapértelmezetté teszi a mutter " "lehetséges kulcsszavak: • „monitor-config-manager” az új monitor "
"programot a logikai monitorok elrendezéséhez egy logikai " "konfigurációs rendszer használata, amely a régi leváltására készül. Ez egy "
"képpontkoordináta-térben, miközben átméretezi a monitor keretpufferét az " "magasabb szintű konfigurációs API-t biztosít a beállító alkalmazásoknak, "
"ablaktartalom helyett azért, hogy kezelje a HiDPI monitorokat. Nem igényel " "valamint lehetővé teszi a logikai monitorok különálló méretezését. • „scale-"
"újraindítást. • „remote-desktop” — engedélyezi a távoli asztal támogatást. A " "monitor-framebuffer” — alapértelmezetté teszi a mutter programot a logikai "
"távoli asztal képernyőmegosztással való támogatásához a „screen-cast” " "monitorok elrendezéséhez egy logikai képpontkoordináta-térben, miközben "
"funkciónak is engedélyezve kell lennie. • „screen-cast” — engedélyezi a " "átméretezi a monitor keretpufferét az ablaktartalom helyett azért, hogy "
"képernyőrögzítés támogatását." "kezelje a HiDPI monitorokat. Nem igényel újraindítást. Ezen funkció "
"bekapcsolásához a „monitor-config-manager” engedélyezése is szükséges."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Ablakok kiválasztása tab billentyűre felugró ablakból" msgstr "Ablakok kiválasztása tab billentyűre felugró ablakból"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Tab felugró kikapcsolása" msgstr "Tab felugró kikapcsolása"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:161
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Monitorkonfiguráció átváltása" msgstr "Monitorkonfiguráció átváltása"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:166
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Cserélgeti a beépített monitorkonfigurációkat" msgstr "Cserélgeti a beépített monitorkonfigurációkat"
@@ -516,7 +504,7 @@ msgstr "Gyorsbillentyűk újraengedélyezése"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:2118
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Módkapcsoló (%d. csoport)" msgstr "Módkapcsoló (%d. csoport)"
@@ -524,30 +512,30 @@ msgstr "Módkapcsoló (%d. csoport)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:2141
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Monitorváltás" msgstr "Monitorváltás"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:2143
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Képernyősúgó megjelenítése" msgstr "Képernyősúgó megjelenítése"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:927
msgid "Built-in display" msgid "Built-in display"
msgstr "Beépített kijelző" msgstr "Beépített kijelző"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:950
msgid "Unknown" msgid "Unknown"
msgstr "Ismeretlen" msgstr "Ismeretlen"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:952
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Ismeretlen kijelző" msgstr "Ismeretlen kijelző"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:960
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
@@ -697,4 +685,3 @@ msgstr ""
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (ezen: %s)" msgstr "%s (ezen: %s)"

View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-30 10:46+0700\n" "PO-Revision-Date: 2017-08-21 13:42+0700\n"
"Last-Translator: Kukuh Syafaat <syafaatkukuh@gmail.com>\n" "Last-Translator: Kukuh Syafaat <syafaatkukuh@gmail.com>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" "Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n" "Language: id\n"
@@ -411,10 +411,7 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Untuk mengaktifkan fitur eksperimental, tambahkan kata kunci fitur ke dalam " "Untuk mengaktifkan fitur eksperimental, tambahkan kata kunci fitur ke dalam "
"daftar. Apakah fitur memerlukan nyala ulang kompositor tergantung pada fitur " "daftar. Apakah fitur memerlukan nyala ulang kompositor tergantung pada fitur "
@@ -424,24 +421,21 @@ msgstr ""
"mungkin: • “scale-monitor-framebuffer” — membuat bawaan mutter untuk tata " "mungkin: • “scale-monitor-framebuffer” — membuat bawaan mutter untuk tata "
"letak monitor logikal dalam ruang koordinat pixel logikal, sambil " "letak monitor logikal dalam ruang koordinat pixel logikal, sambil "
"menskalakan framebuffer monitor alih-alih konten jendela, untuk mengelola " "menskalakan framebuffer monitor alih-alih konten jendela, untuk mengelola "
"monitor HiDPI. Tidak perlu mulai ulang. • “remote-desktop” — aktifkan " "monitor HiDPI. Tidak perlu mulai ulang."
"dukungan destop jauh. Untuk mendukung destop jauh dengan berbagi layar, "
"“screen-cast” juga harus diaktifkan. • “screen-cast” — aktifkan dukungan "
"screen cast."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Pilih jendela dari popup tab" msgstr "Pilih jendela dari popup tab"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Batalkan popup tab" msgstr "Batalkan popup tab"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Tukar konfigurasi monitor bawaan" msgstr "Tukar konfigurasi monitor bawaan"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Memutar konfigurasi monitor bawaan" msgstr "Memutar konfigurasi monitor bawaan"

View File

@@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 06:41+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-29 10:21+0200\n" "PO-Revision-Date: 2017-08-24 09:45+0200\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n" "Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <tp@lists.linux.it>\n" "Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n" "Language: it\n"
@@ -423,10 +423,7 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Per abilitare le funzionalità sperimentali, aggiungere la parola chiave di " "Per abilitare le funzionalità sperimentali, aggiungere la parola chiave di "
"tale funzionalità nella lista. Se la funzionalità desiderata richiede il " "tale funzionalità nella lista. Se la funzionalità desiderata richiede il "
@@ -437,24 +434,21 @@ msgstr ""
"modo che mutter disponga gli schermi logici secondo uno spazio logico di " "modo che mutter disponga gli schermi logici secondo uno spazio logico di "
"coordinate pixel, applicando il ridimensionamento ai framebuffer invece che " "coordinate pixel, applicando il ridimensionamento ai framebuffer invece che "
"al contenuto della finestra, per gestire schermi HiDPI (non richiede il " "al contenuto della finestra, per gestire schermi HiDPI (non richiede il "
"riavvio). • \"remote-desktop\" — Abilita il supporto al desktop remoto. Per " "riavvio)."
"supportare il desktop remoto con la condivisione dello schermo, è necessario "
"abilitare anche \"screen-cast\". • “screen-cast” — Abilita il supporto alla "
"registrazione dello schermo."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Seleziona finestra dal tab popup" msgstr "Seleziona finestra dal tab popup"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Annulla tab popup" msgstr "Annulla tab popup"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Cambia le configurazioni del monitor" msgstr "Cambia le configurazioni del monitor"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Passa da una configurazione integrata all'altra del monitor" msgstr "Passa da una configurazione integrata all'altra del monitor"

112
po/ko.po
View File

@@ -18,8 +18,8 @@ msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-02-28 06:20+0000\n"
"PO-Revision-Date: 2017-09-02 12:57+0900\n" "PO-Revision-Date: 2017-03-04 03:25+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n" "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n" "Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"Language: ko\n" "Language: ko\n"
@@ -397,50 +397,14 @@ msgid ""
"screen of the monitor." "screen of the monitor."
msgstr "참이면, 새로운 창은 항상 사용 중인 모니터 화면의 중앙에 놓습니다." msgstr "참이면, 새로운 창은 항상 사용 중인 모니터 화면의 중앙에 놓습니다."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "실험적인 기능 사용"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
"실험적인 기능을 사용하려면, 해당 기능 키워드를 목록에 추가하십시오. 기능에 따"
"라 컴포지터를 다시 시작해야 할 수도 있습니다. 실험적인 기능은 사용할 수 없을 "
"수도 있고, 설정할 수 없을 수도 있습니다. 이 설정에 추가한 사항이 앞으로 버전"
"에서도 동작할 거라고 기대하지 마십시오. 현재 가능한 값은: • “scale-monitor-"
"framebuffer” — 머터에서 논리적인 모니터를 논리적인 픽셀 좌표계로 배치합니다. "
"창의 내용의 크기를 조정하지 않고 모니터 프레임버퍼 크기를 조정합니다. 재시작"
"은 필요하지 않습니다. • “remote-desktop” — 원격 데스크톱 기능을 사용합니다. "
"원격 데스크톱을 화면 공유와 같이 사용하려면, “screen-cast” 설정도 켜져 있어"
"야 합니다. • “screen-cast” — 화면 전송 기능을 사용합니다."
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "탭 팝업에서 창 선택" msgstr "탭 팝업에서 창 선택"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "탭 팝업 취소" msgstr "탭 팝업 취소"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "모니터 설정 전환"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "내장된 모니터 설정을 돌아가면서 전환합니다"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "가상 터미널 1로 이동" msgstr "가상 터미널 1로 이동"
@@ -489,14 +453,10 @@ msgstr "가상 터미널 11로 이동"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "가상 터미널 12로 이동" msgstr "가상 터미널 12로 이동"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "바로 가기 다시 사용하기"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1800
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "모드 전환 (그룹 %d)" msgstr "모드 전환 (그룹 %d)"
@@ -504,37 +464,37 @@ msgstr "모드 전환 (그룹 %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1822
msgid "Switch monitor" msgid "Switch monitor"
msgstr "모니터 전환" msgstr "모니터 전환"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1824
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "화면 도움말 표시" msgstr "화면 도움말 표시"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:675
msgid "Built-in display" msgid "Built-in display"
msgstr "내장 디스플레이" msgstr "내장 디스플레이"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:698
msgid "Unknown" msgid "Unknown"
msgstr "알 수 없음" msgstr "알 수 없음"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:700
msgid "Unknown Display" msgid "Unknown Display"
msgstr "알 수 없는 디스플레이" msgstr "알 수 없는 디스플레이"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:708
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:471
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
@@ -546,6 +506,30 @@ msgstr ""
msgid "Bell event" msgid "Bell event"
msgstr "삑소리 이벤트" msgstr "삑소리 이벤트"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "“%s” 창이 반응하지 않습니다."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "프로그램이 반응하지 않습니다."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "좀 더 기다리거나 해당 프로그램을 강제로 끝낼 수 있습니다."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "강제로 끝내기(_F)"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "기다리기(_W)"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
@@ -587,30 +571,6 @@ msgstr "내장 컴포지터로 실행합니다"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "전체 디스플레이 서버로 실행, 내장 프로그램 아님" msgstr "전체 디스플레이 서버로 실행, 내장 프로그램 아님"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "“%s” 창이 반응하지 않습니다."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "프로그램이 반응하지 않습니다."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "좀 더 기다리거나 해당 프로그램을 강제로 끝낼 수 있습니다."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "강제로 끝내기(_F)"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "기다리기(_W)"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, c-format
msgid "" msgid ""

View File

@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: lt\n" "Project-Id-Version: lt\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 06:41+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-29 15:57+0300\n" "PO-Revision-Date: 2017-08-22 23:17+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n" "Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n" "Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n" "Language: lt\n"
@@ -411,11 +411,15 @@ msgstr "Įjungti eksperimentines savybes"
#| "Whether the feature requires restarting the compositor depends on the " #| "Whether the feature requires restarting the compositor depends on the "
#| "given feature. Any experimental feature is not required to still be " #| "given feature. Any experimental feature is not required to still be "
#| "available, or configurable. Dont expect adding anything in this setting " #| "available, or configurable. Dont expect adding anything in this setting "
#| "to be future proof. Currently possible keywords: • “scale-monitor-" #| "to be future proof. Currently possible keywords: • “monitor-config-"
#| "framebuffer” — makes mutter default to layout logical monitors in a " #| "manager” — use the new monitor configuration system, aimed to replace the "
#| "logical pixel coordinate space, while scaling monitor framebuffers " #| "old one. This enables a higher level configuration API to be used by "
#| "instead of window content, to manage HiDPI monitors. Does not require a " #| "configuration applications, as well as the ability to configure per "
#| "restart." #| "logical monitor scale. • “scale-monitor-framebuffer” — makes mutter "
#| "default to layout logical monitors in a logical pixel coordinate space, "
#| "while scaling monitor framebuffers instead of window content, to manage "
#| "HiDPI monitors. Does not require a restart. Also enabling “monitor-config-"
#| "manager” is required for this feature to be enabled."
msgid "" msgid ""
"To enable experimental features, add the feature keyword to the list. " "To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
@@ -424,10 +428,7 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Norėdami įjungti eksperimentines savybes, pridėkite į sąrašą raktinį žodį. " "Norėdami įjungti eksperimentines savybes, pridėkite į sąrašą raktinį žodį. "
"Ar savybė reikalauja kompozitoriaus paleidimo iš naujo priklauso nuo " "Ar savybė reikalauja kompozitoriaus paleidimo iš naujo priklauso nuo "
@@ -437,24 +438,21 @@ msgstr ""
"framebuffer“ — mutter numatytai išdėsto loginius monitorius loginėje " "framebuffer“ — mutter numatytai išdėsto loginius monitorius loginėje "
"pikselių koordinačių erdvėje, tuo pat ištempiant monitorių kadrų buferius " "pikselių koordinačių erdvėje, tuo pat ištempiant monitorių kadrų buferius "
"vietoje langų turinio, tokiu būdu valdant didelio tankio monitorius. " "vietoje langų turinio, tokiu būdu valdant didelio tankio monitorius. "
"Nereikalauja paleisti iš naujo. • „remote-desktop“ įjungia nutolusio " "Nereikalauja paleisti iš naujo."
"darbalaukio palaikymą. Norint nutolusio darbalaukio su dalinimusi ekranu, "
"taip pat reikia įjungti „screen-cast“. • „screen-cast“ įjungia ekrano "
"transliacijos palaikymą."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Pasirinkti langą iš tab iššokimo" msgstr "Pasirinkti langą iš tab iššokimo"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Atšaukti tab iššokimą" msgstr "Atšaukti tab iššokimą"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Perjungti monitorių konfigūracijas" msgstr "Perjungti monitorių konfigūracijas"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Suka integruotas monitorių konfigūracijas" msgstr "Suka integruotas monitorių konfigūracijas"

169
po/lv.po
View File

@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: lv\n" "Project-Id-Version: lv\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n" "&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-02-28 06:20+0000\n"
"PO-Revision-Date: 2017-09-03 19:25+0200\n" "PO-Revision-Date: 2017-03-18 12:09+0200\n"
"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n" "Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian <lata-l10n@googlegroups.com>\n" "Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
"Language: lv\n" "Language: lv\n"
@@ -274,6 +274,11 @@ msgid "Modifier to use for extended window management operations"
msgstr "Modifikators, kuru lietot paplašinātām loga pārvaldības darbībām" msgstr "Modifikators, kuru lietot paplašinātām loga pārvaldības darbībām"
#: data/org.gnome.mutter.gschema.xml.in:8 #: 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 "" msgid ""
"This key will initiate the “overlay”, which is a combination window overview " "This key will initiate the “overlay”, which is a combination window overview "
"and application launching system. The default is intended to be the “Windows " "and application launching system. The default is intended to be the “Windows "
@@ -318,6 +323,10 @@ msgid "Workspaces are managed dynamically"
msgstr "Darbvirsmas tiek pārvaldītas dinamiski" msgstr "Darbvirsmas tiek pārvaldītas dinamiski"
#: data/org.gnome.mutter.gschema.xml.in:41 #: 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 "" msgid ""
"Determines whether workspaces are managed dynamically or whether theres a " "Determines whether workspaces are managed dynamically or whether theres a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
@@ -356,20 +365,27 @@ msgid "Delay focus changes until the pointer stops moving"
msgstr "Aizkavēt fokusa izmaiņas, līdz rādītājs pārstāj kustēties" msgstr "Aizkavēt fokusa izmaiņas, līdz rādītājs pārstāj kustēties"
#: data/org.gnome.mutter.gschema.xml.in:69 #: 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 "" msgid ""
"If set to true, and the focus mode is either “sloppy” or “mouse” then the " "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 " "focus will not be changed immediately when entering a window, but only after "
"the pointer stops moving." "the pointer stops moving."
msgstr "" msgstr ""
"Ja patiess un fokusēšanas režīms ir vai nu “sloppy” (paviršs) vai " "Ja patiess un fokusēšanas režīms ir vai nu “sloppy” (paviršs) vai “mouse”"
"“mouse” (pele), tad fokuss nemainīsies uzreiz pēc ieiešanas logā, bet tikai " " (pele), tad fokuss nemainīsies uzreiz pēc ieiešanas logā, bet tikai pēc tam,"
"pēc tam, kad rādītājs beidzis kustēties." " kad rādītājs beidzis kustēties."
#: data/org.gnome.mutter.gschema.xml.in:79 #: data/org.gnome.mutter.gschema.xml.in:79
msgid "Draggable border width" msgid "Draggable border width"
msgstr "Velkams malas platums" msgstr "Velkams malas platums"
#: data/org.gnome.mutter.gschema.xml.in:80 #: 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 "" msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the themes visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
@@ -400,63 +416,14 @@ msgid ""
msgstr "" msgstr ""
"Ja patiess, jaunie logi vienmēr tiks novietoti monitora aktīvā ekrāna vidū." "Ja patiess, jaunie logi vienmēr tiks novietoti monitora aktīvā ekrāna vidū."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "Ieslēgt eksperimentālās iespējas"
#: data/org.gnome.mutter.gschema.xml.in:108
#| msgid ""
#| "To enable experimental features, add the feature keyword to the list. "
#| "Whether the feature requires restarting the compositor depends on the "
#| "given feature. Any experimental feature is not required to still be "
#| "available, or configurable. Dont expect adding anything in this setting "
#| "to be future proof. Currently possible keywords: • “scale-monitor-"
#| "framebuffer” — makes mutter default to layout logical monitors in a "
#| "logical pixel coordinate space, while scaling monitor framebuffers "
#| "instead of window content, to manage HiDPI monitors. Does not require a "
#| "restart."
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
"Lai ieslēgtu eksperimentālās iespējas, pievienojiet iespējas atslēgvārdu "
"sarakstam. Vai iespējai būs nepieciešama kompozitora pārstartēšana, būs "
"atkarīga no dotās iespējas. Jebkura eksperimentāla iespēja var būt "
"nepieejama vai nekonfigurējama. Negaidiet, ka jebkura no šīm iespējām "
"nākotnē strādās. Pašlaik pieejamie atslēgvārdi: • “scale-monitor-"
"framebuffer” — liek mutter pēc noklusējuma izkārtot loģiskos monitorus "
"loģisko pikseļu koordināšu telpā, kamēr mērogo monitora kadru buferus, nevis "
"loga saturu, lai pārvaldītu HiDPI monitorus. Pārstartēšana nav nepieciešama."
" • “remote-desktop” — "
"ieslēdz attālinātās darbvirsmas atbalstu. Lai atbalstītu attālināto"
" darbvirsmu ar ekrāna koplietošanu, jābūt arī ieslēgtam “screen-cast”. •"
" “screen-cast” — ieslēdz ekrānraides atbalstu."
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Izvēlēties logu no tabulatora izvēlnes" msgstr "Izvēlēties logu no tabulatora izvēlnes"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Atcelt logu rādīšanu" msgstr "Atcelt logu rādīšanu"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "Pārslēgt monitoru konfigurācijas"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "Pagriež iebūvētā monitora konfigurāciju"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Pārslēgties uz VT 1" msgstr "Pārslēgties uz VT 1"
@@ -505,53 +472,53 @@ msgstr "Pārslēgties uz VT 11"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Pārslēgties uz VT 12" msgstr "Pārslēgties uz VT 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "Atkal ieslēdz saīsnes"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1800
#, c-format #, c-format
#| msgid "Mode Switch: Mode %d"
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Režīma slēdzis (grupa %d)" msgstr "Režīma slēdzis (grupa %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1822
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Pārslēgt monitoru" msgstr "Pārslēgt monitoru"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1824
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Rādīt palīdzību uz ekrāna" msgstr "Rādīt palīdzību uz ekrāna"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:675
msgid "Built-in display" msgid "Built-in display"
msgstr "Iebūvēts displejs" msgstr "Iebūvēts displejs"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:698
msgid "Unknown" msgid "Unknown"
msgstr "Nezināms" msgstr "Nezināms"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:700
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Nezināms displejs" msgstr "Nezināms displejs"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:708
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:471
#, c-format #, c-format
#| msgid ""
#| "Another compositing manager is already running on screen %i on display "
#| "\"%s\"."
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
msgstr "Cits kompozīcijas pārvaldnieks jau darbojas ekrānā %d displejā “%s”." msgstr "Cits kompozīcijas pārvaldnieks jau darbojas ekrānā %d displejā “%s”."
@@ -560,8 +527,35 @@ msgstr "Cits kompozīcijas pārvaldnieks jau darbojas ekrānā %d displejā “%
msgid "Bell event" msgid "Bell event"
msgstr "Zvana notikums" msgstr "Zvana notikums"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "“%s” nereaģē."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "Lietotne nereaģē."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Var uzgaidīt neilgu brīdi, līdz tā atgūstas, vai arī aizvērt to piespiedu "
"kārtā."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "Aizvērt _piespiedu kārtā"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Gaidīt"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
#| msgid "Failed to open X Window System display '%s'\n"
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
msgstr "Neizdevās atvērt X logu sistēmas displeju “%s”\n" msgstr "Neizdevās atvērt X logu sistēmas displeju “%s”\n"
@@ -601,34 +595,14 @@ msgstr "Palaist kā ligzdotu kompozitoru"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Palaist kā pilnu attēlošanas serveri, nevis iegultu" msgstr "Palaist kā pilnu attēlošanas serveri, nevis iegultu"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "“%s” nereaģē."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "Lietotne nereaģē."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Var uzgaidīt neilgu brīdi, līdz tā atgūstas, vai arī aizvērt to piespiedu "
"kārtā."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "Aizvērt _piespiedu kārtā"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "_Gaidīt"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, 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 "" msgid ""
"mutter %s\n" "mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
@@ -657,6 +631,9 @@ msgstr "Darbvieta %d"
#: src/core/screen.c:580 #: src/core/screen.c:580
#, c-format #, c-format
#| msgid ""
#| "Display \"%s\" already has a window manager; try using the --replace "
#| "option to replace the current window manager."
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display “%s” already has a window manager; try using the --replace option to "
"replace the current window manager." "replace the current window manager."
@@ -666,6 +643,7 @@ msgstr ""
#: src/core/screen.c:665 #: src/core/screen.c:665
#, c-format #, c-format
#| msgid "Screen %d on display '%s' is invalid\n"
msgid "Screen %d on display “%s” is invalid\n" msgid "Screen %d on display “%s” is invalid\n"
msgstr "Ekrāna %d displejs “%s“ nav derīgs\n" msgstr "Ekrāna %d displejs “%s“ nav derīgs\n"
@@ -679,6 +657,9 @@ msgid "Mode Switch: Mode %d"
msgstr "Režīma slēdzis: režīms %d" msgstr "Režīma slēdzis: režīms %d"
#: src/x11/session.c:1815 #: src/x11/session.c:1815
#| msgid ""
#| "These windows do not support &quot;save current setup&quot; and will have "
#| "to be restarted manually next time you log in."
msgid "" msgid ""
"These windows do not support “save current setup” and will have to be " "These windows do not support “save current setup” and will have to be "
"restarted manually next time you log in." "restarted manually next time you log in."

487
po/pa.po
View File

@@ -8,295 +8,290 @@
# A S Alam <aalam@users.sf.net>, 2006. # A S Alam <aalam@users.sf.net>, 2006.
# A S Alam <aalam@users.sf.net>, 2007, 2009, 2010, 2011. # A S Alam <aalam@users.sf.net>, 2007, 2009, 2010, 2011.
# ASB <aalam@users.sf.net>, 2007. # ASB <aalam@users.sf.net>, 2007.
# Amanpreet Singh Alam <aalam@users.sf.net>, 2009, 2012, 2013, 2014, 2015, 2017. # Amanpreet Singh Alam <aalam@users.sf.net>, 2009, 2012, 2013, 2014, 2015.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: metacity.gnome-2-26\n" "Project-Id-Version: metacity.gnome-2-26\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2015-03-13 23:12+0000\n"
"PO-Revision-Date: 2017-09-10 18:24-0600\n" "PO-Revision-Date: 2015-03-13 19:14-0500\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n" "Last-Translator: A S Alam <aalam@users.sf.net>\n"
"Language-Team: Punjabi <punjabi-users@lists.sf.net>\n" "Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"Language: pa\n" "Language: pa\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 2.0\n" "X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"\n" "\n"
#: data/50-mutter-navigation.xml:6 #: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation" msgid "Navigation"
msgstr "ਨੇਵੀਗੇਸ਼ਨ" msgstr "ਨੇਵੀਗੇਸ਼ਨ"
#: data/50-mutter-navigation.xml:9 #: ../data/50-mutter-navigation.xml.in.h:2
msgid "Move window to workspace 1" msgid "Move window to workspace 1"
msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ਵਿੱਚ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ਵਿੱਚ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:12 #: ../data/50-mutter-navigation.xml.in.h:3
msgid "Move window to workspace 2" msgid "Move window to workspace 2"
msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ੨ ਵਿੱਚ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ੨ ਵਿੱਚ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:15 #: ../data/50-mutter-navigation.xml.in.h:4
msgid "Move window to workspace 3" msgid "Move window to workspace 3"
msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ੩ ਵਿੱਚ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ੩ ਵਿੱਚ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:18 #: ../data/50-mutter-navigation.xml.in.h:5
msgid "Move window to workspace 4" msgid "Move window to workspace 4"
msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ਵਿੱਚ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਵਰਕਸਪੇਸ ਵਿੱਚ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:21 #: ../data/50-mutter-navigation.xml.in.h:6
msgid "Move window to last workspace" msgid "Move window to last workspace"
msgstr "ਵਿੰਡੋ ਨੂੰ ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:24 #: ../data/50-mutter-navigation.xml.in.h:7
msgid "Move window one workspace to the left" msgid "Move window one workspace to the left"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਖੱਬੇ ਵੱਲ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਖੱਬੇ ਵੱਲ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:27 #: ../data/50-mutter-navigation.xml.in.h:8
msgid "Move window one workspace to the right" msgid "Move window one workspace to the right"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਸੱਜੇ ਵੱਲ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਸੱਜੇ ਵੱਲ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:30 #: ../data/50-mutter-navigation.xml.in.h:9
msgid "Move window one workspace up" msgid "Move window one workspace up"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਉੱਤੇ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਉੱਤੇ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:33 #: ../data/50-mutter-navigation.xml.in.h:10
msgid "Move window one workspace down" msgid "Move window one workspace down"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਹੇਠਾਂ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਵਰਕਸਪੇਸ ਹੇਠਾਂ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:36 #: ../data/50-mutter-navigation.xml.in.h:11
msgid "Move window one monitor to the left" msgid "Move window one monitor to the left"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਖੱਬੇ ਵੱਲ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਖੱਬੇ ਵੱਲ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:39 #: ../data/50-mutter-navigation.xml.in.h:12
msgid "Move window one monitor to the right" msgid "Move window one monitor to the right"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਸੱਜੇ ਵੱਲ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਸੱਜੇ ਵੱਲ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:42 #: ../data/50-mutter-navigation.xml.in.h:13
msgid "Move window one monitor up" msgid "Move window one monitor up"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਉੱਤੇ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਉੱਤੇ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:45 #: ../data/50-mutter-navigation.xml.in.h:14
msgid "Move window one monitor down" msgid "Move window one monitor down"
msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਹੇਠਾਂ ਲਿਜਾਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਇੱਕ ਮਾਨੀਟਰ ਹੇਠਾਂ ਲਿਜਾਓ"
#: data/50-mutter-navigation.xml:49 #: ../data/50-mutter-navigation.xml.in.h:15
msgid "Switch applications" msgid "Switch applications"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬਦਲੋ" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:54 #: ../data/50-mutter-navigation.xml.in.h:16
msgid "Switch to previous application" msgid "Switch to previous application"
msgstr "ਪਿਛਲੀ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਬਦਲੋ" msgstr "ਪਿਛਲੀ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:58 #: ../data/50-mutter-navigation.xml.in.h:17
msgid "Switch windows" msgid "Switch windows"
msgstr "ਵਿੰਡੋਜ਼ ਬਦਲੋ" msgstr "ਵਿੰਡੋਜ਼ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:63 #: ../data/50-mutter-navigation.xml.in.h:18
msgid "Switch to previous window" msgid "Switch to previous window"
msgstr "ਪਿਛਲੀ ਵਿੰਡੋ ਲਈ ਬਦਲੋ" msgstr "ਪਿਛਲੀ ਵਿੰਡੋ ਲਈ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:67 #: ../data/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੀਆਂ ਵਿੰਡੋਜ਼ ਬਦਲੋ" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੀਆਂ ਵਿੰਡੋਜ਼ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:72 #: ../data/50-mutter-navigation.xml.in.h:20
msgid "Switch to previous window of an application" msgid "Switch to previous window of an application"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਪਿਛਲੀ ਵਿੰਡੋ ਵਿੱਚ ਜਾਓ" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਪਿਛਲੀ ਵਿੰਡੋ ਵਿੱਚ ਜਾਓ"
#: data/50-mutter-navigation.xml:76 #: ../data/50-mutter-navigation.xml.in.h:21
msgid "Switch system controls" msgid "Switch system controls"
msgstr "ਸਿਸਟਮ ਕੰਟਰੋਲ ਬਦਲੋ" msgstr "ਸਿਸਟਮ ਕੰਟਰੋਲ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:81 #: ../data/50-mutter-navigation.xml.in.h:22
msgid "Switch to previous system control" msgid "Switch to previous system control"
msgstr "ਪਿਛਲੇ ਸਿਸਟਮ ਕੰਟਰੋਲ ਬਦਲੋ" msgstr "ਪਿਛਲੇ ਸਿਸਟਮ ਕੰਟਰੋਲ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:85 #: ../data/50-mutter-navigation.xml.in.h:23
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "ਵਿੰਡੋਜ਼ ਸਿੱਧੀਆਂ ਬਦਲੋ" msgstr "ਵਿੰਡੋਜ਼ ਸਿੱਧੀਆਂ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:90 #: ../data/50-mutter-navigation.xml.in.h:24
msgid "Switch directly to previous window" msgid "Switch directly to previous window"
msgstr "ਸਿੱਧਾ ਪਿਛਲੀ ਵਿੰਡੋ ਲਈ ਬਦਲੋ" msgstr "ਸਿੱਧਾ ਪਿਛਲੀ ਵਿੰਡੋ ਲਈ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:94 #: ../data/50-mutter-navigation.xml.in.h:25
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਵਿੰਡੋਜ਼ ਸਿੱਧੀ ਬਦਲੋ" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਵਿੰਡੋਜ਼ ਸਿੱਧੀ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:99 #: ../data/50-mutter-navigation.xml.in.h:26
msgid "Switch directly to previous window of an app" msgid "Switch directly to previous window of an app"
msgstr "ਸਿੱਧਾ ਐਪ ਦੀ ਪਿਛਲੀ ਵਿੰਡੋ ਲਈ ਬਦਲੋ" msgstr "ਸਿੱਧਾ ਐਪ ਦੀ ਪਿਛਲੀ ਵਿੰਡੋ ਲਈ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:103 #: ../data/50-mutter-navigation.xml.in.h:27
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "ਸਿਸਟਮ ਕੰਟਰੋਲ ਸਿੱਧੇ ਬਦਲੋ" msgstr "ਸਿਸਟਮ ਕੰਟਰੋਲ ਸਿੱਧੇ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:108 #: ../data/50-mutter-navigation.xml.in.h:28
msgid "Switch directly to previous system control" msgid "Switch directly to previous system control"
msgstr "ਸਿੱਧਾ ਪਿਛਲੇ ਸਿਸਟਮ ਕੰਟਰੋਲ ਲਈ ਬਦਲੋ" msgstr "ਸਿੱਧਾ ਪਿਛਲੇ ਸਿਸਟਮ ਕੰਟਰੋਲ ਲਈ ਬਦਲੋ"
#: data/50-mutter-navigation.xml:111 #: ../data/50-mutter-navigation.xml.in.h:29
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "ਸਭ ਸਧਾਰਨ ਵਿੰਡੋਜ਼ ਓਹਲੇ ਕਰੋ" msgstr "ਸਭ ਸਧਾਰਨ ਵਿੰਡੋਜ਼ ਓਹਲੇ ਕਰੋ"
#: data/50-mutter-navigation.xml:114 #: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "ਵਰਕਸਪੇਸ ਵਿੱਚ ਜਾਓ" msgstr "ਵਰਕਸਪੇਸ ਵਿੱਚ ਜਾਓ"
#: data/50-mutter-navigation.xml:117 #: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "ਵਰਕਸਪੇਸ ੨ ਵਿੱਚ ਜਾਓ" msgstr "ਵਰਕਸਪੇਸ ੨ ਵਿੱਚ ਜਾਓ"
#: data/50-mutter-navigation.xml:120 #: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "ਵਰਕਸਪੇਸ ੩ ਵਿੱਚ ਜਾਓ" msgstr "ਵਰਕਸਪੇਸ ੩ ਵਿੱਚ ਜਾਓ"
#: data/50-mutter-navigation.xml:123 #: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "ਵਰਕਸਪੇਸ ਵਿੱਚ ਜਾਓ" msgstr "ਵਰਕਸਪੇਸ ਵਿੱਚ ਜਾਓ"
#: data/50-mutter-navigation.xml:126 #: ../data/50-mutter-navigation.xml.in.h:34
msgid "Switch to last workspace" msgid "Switch to last workspace"
msgstr "ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਜਾਓ" msgstr "ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਜਾਓ"
#: data/50-mutter-navigation.xml:129 #: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "ਖੱਬੇ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ" msgstr "ਖੱਬੇ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ"
#: data/50-mutter-navigation.xml:132 #: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "ਸੱਜੇ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ" msgstr "ਸੱਜੇ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ"
#: data/50-mutter-navigation.xml:135 #: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "ਉੱਤੇ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ" msgstr "ਉੱਤੇ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ"
#: data/50-mutter-navigation.xml:138 #: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "ਹੇਠਾਂ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ" msgstr "ਹੇਠਾਂ ਵਰਕਸਪੇਸ 'ਚ ਭੇਜੋ"
#: data/50-mutter-system.xml:6 #: ../data/50-mutter-system.xml.in.h:1
msgid "System" msgid "System"
msgstr "ਸਿਸਟਮ" msgstr "ਸਿਸਟਮ"
#: data/50-mutter-system.xml:8 #: ../data/50-mutter-system.xml.in.h:2
msgid "Show the run command prompt" msgid "Show the run command prompt"
msgstr "ਕਮਾਂਡ ਚਲਾਉ ਪਰੋਉਟ ਵੇਖੋ" msgstr "ਕਮਾਂਡ ਚਲਾਉ ਪਰੋਉਟ ਵੇਖੋ"
#: data/50-mutter-system.xml:10 #: ../data/50-mutter-system.xml.in.h:3
msgid "Show the activities overview" msgid "Show the activities overview"
msgstr "ਸਰਗਰਮੀ ਸੰਖੇਪ ਜਾਣਕਾਰੀ ਵੇਖੋ" msgstr "ਸਰਗਰਮੀ ਸੰਖੇਪ ਜਾਣਕਾਰੀ ਵੇਖੋ"
#: data/50-mutter-windows.xml:6 #: ../data/50-mutter-windows.xml.in.h:1
msgid "Windows" msgid "Windows"
msgstr "ਵਿੰਡੋਜ਼" msgstr "ਵਿੰਡੋਜ਼"
#: data/50-mutter-windows.xml:8 #: ../data/50-mutter-windows.xml.in.h:2
msgid "Activate the window menu" msgid "Activate the window menu"
msgstr "ਐਕਟਿਵੇਟ ਵਿੰਡੋ ਮੇਨੂ" msgstr "ਐਕਟਿਵੇਟ ਵਿੰਡੋ ਮੇਨੂ"
#: data/50-mutter-windows.xml:10 #: ../data/50-mutter-windows.xml.in.h:3
msgid "Toggle fullscreen mode" msgid "Toggle fullscreen mode"
msgstr "ਪੂਰੀ ਸਕਰੀਨ ਮੋਡ ਬਦਲੋ" msgstr "ਪੂਰੀ ਸਕਰੀਨ ਮੋਡ ਬਦਲੋ"
#: data/50-mutter-windows.xml:12 #: ../data/50-mutter-windows.xml.in.h:4
msgid "Toggle maximization state" msgid "Toggle maximization state"
msgstr "ਅਧਿਕਤਮ ਸਥਿਤੀ ਬਦਲੋ" msgstr "ਅਧਿਕਤਮ ਸਥਿਤੀ ਬਦਲੋ"
#: data/50-mutter-windows.xml:14 #: ../data/50-mutter-windows.xml.in.h:5
msgid "Maximize window" msgid "Maximize window"
msgstr "ਵਿੰਡੋ ਵੱਧੋ-ਵੱਧ" msgstr "ਵਿੰਡੋ ਵੱਧੋ-ਵੱਧ"
#: data/50-mutter-windows.xml:16 #: ../data/50-mutter-windows.xml.in.h:6
msgid "Restore window" msgid "Restore window"
msgstr "ਵਿੰਡੋ ਮੁੜ-ਸਟੋਰ" msgstr "ਵਿੰਡੋ ਮੁੜ-ਸਟੋਰ"
#: data/50-mutter-windows.xml:18 #: ../data/50-mutter-windows.xml.in.h:7
msgid "Toggle shaded state" msgid "Toggle shaded state"
msgstr "ਰੰਗਤ ਸਥਿਤੀ ਬਦਲੋ" msgstr "ਰੰਗਤ ਸਥਿਤੀ ਬਦਲੋ"
#: data/50-mutter-windows.xml:20 #: ../data/50-mutter-windows.xml.in.h:8
msgid "Close window" msgid "Close window"
msgstr "ਵਿੰਡੋ ਬੰਦ ਕਰੋ" msgstr "ਵਿੰਡੋ ਬੰਦ ਕਰੋ"
#: data/50-mutter-windows.xml:22 #: ../data/50-mutter-windows.xml.in.h:9
msgid "Hide window" msgid "Hide window"
msgstr "ਵਿੰਡੋ ਓਹਲੇ" msgstr "ਵਿੰਡੋ ਓਹਲੇ"
#: data/50-mutter-windows.xml:24 #: ../data/50-mutter-windows.xml.in.h:10
msgid "Move window" msgid "Move window"
msgstr "ਵਿੰਡੋ ਹਿਲਾਓ" msgstr "ਵਿੰਡੋ ਹਿਲਾਓ"
#: data/50-mutter-windows.xml:26 #: ../data/50-mutter-windows.xml.in.h:11
msgid "Resize window" msgid "Resize window"
msgstr "ਵਿੰਡੋ ਮੁੜ-ਅਕਾਰ" msgstr "ਵਿੰਡੋ ਮੁੜ-ਅਕਾਰ"
#: data/50-mutter-windows.xml:29 #: ../data/50-mutter-windows.xml.in.h:12
msgid "Toggle window on all workspaces or one" msgid "Toggle window on all workspaces or one"
msgstr "ਵਿੰਡੋ ਸਭ ਵਰਕਸਪੇਸ ਜਾਂ ਇੱਕ ਵਿੱਚ ਬਦਲੋ" msgstr "ਵਿੰਡੋ ਸਭ ਵਰਕਸਪੇਸ ਜਾਂ ਇੱਕ ਵਿੱਚ ਬਦਲੋ"
#: data/50-mutter-windows.xml:31 #: ../data/50-mutter-windows.xml.in.h:13
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
msgstr "ਵਿੰਡੋ ਉਭਾਰੋ, ਜੇ ਢੱਕੀ ਹੈ, ਨਹੀਂ ਤਾਂ ਹੇਠਾਂ ਭੇਜੋ" msgstr "ਵਿੰਡੋ ਉਭਾਰੋ, ਜੇ ਢੱਕੀ ਹੈ, ਨਹੀਂ ਤਾਂ ਹੇਠਾਂ ਭੇਜੋ"
#: data/50-mutter-windows.xml:33 #: ../data/50-mutter-windows.xml.in.h:14
msgid "Raise window above other windows" msgid "Raise window above other windows"
msgstr "ਵਿੰਡੋ ਨੂੰ ਹੋਰ ਵਿੰਡੋਜ਼ ਤੋਂ ਉੱਤੇ ਲਿਆਓ" msgstr "ਵਿੰਡੋ ਨੂੰ ਹੋਰ ਵਿੰਡੋਜ਼ ਤੋਂ ਉੱਤੇ ਲਿਆਓ"
#: data/50-mutter-windows.xml:35 #: ../data/50-mutter-windows.xml.in.h:15
msgid "Lower window below other windows" msgid "Lower window below other windows"
msgstr "ਵਿੰਡੋ ਨੂੰ ਹੋਰ ਵਿੰਡੋ ਤੋਂ ਹੇਠਾਂ ਲੈ ਜਾਉ" msgstr "ਵਿੰਡੋ ਨੂੰ ਹੋਰ ਵਿੰਡੋ ਤੋਂ ਹੇਠਾਂ ਲੈ ਜਾਉ"
#: data/50-mutter-windows.xml:37 #: ../data/50-mutter-windows.xml.in.h:16
msgid "Maximize window vertically" msgid "Maximize window vertically"
msgstr "ਵਿੰਡੋ ਖੜਵੇਂ ਰੂਪ ਵਿੱਚ ਵੱਧੋ-ਵੱਧ" msgstr "ਵਿੰਡੋ ਖੜਵੇਂ ਰੂਪ ਵਿੱਚ ਵੱਧੋ-ਵੱਧ"
#: data/50-mutter-windows.xml:39 #: ../data/50-mutter-windows.xml.in.h:17
msgid "Maximize window horizontally" msgid "Maximize window horizontally"
msgstr "ਵਿੰਡੋ ਲੇਟਵੇਂ ਰੂਪ ਵਿੱਚ ਵੱਧੋ-ਵੱਧ" msgstr "ਵਿੰਡੋ ਲੇਟਵੇਂ ਰੂਪ ਵਿੱਚ ਵੱਧੋ-ਵੱਧ"
#: data/50-mutter-windows.xml:43 #: ../data/50-mutter-windows.xml.in.h:18
msgid "View split on left" msgid "View split on left"
msgstr "ਖੱਬੇ ਪਾਸੇ ਵੰਡ ਵੇਖੋ" msgstr "ਖੱਬੇ ਪਾਸੇ ਵੰਡ ਵੇਖੋ"
#: data/50-mutter-windows.xml:47 #: ../data/50-mutter-windows.xml.in.h:19
msgid "View split on right" msgid "View split on right"
msgstr "ਸੱਜੇ ਪਾਸੇ ਵੰਡ ਵੇਖੋ" msgstr "ਸੱਜੇ ਪਾਸੇ ਵੰਡ ਵੇਖੋ"
#: data/mutter.desktop.in:4 #: ../data/mutter.desktop.in.h:1
msgid "Mutter" msgid "Mutter"
msgstr "ਮੱਟਰ" msgstr "ਮੱਟਰ"
#: data/org.gnome.mutter.gschema.xml.in:7 #: ../data/org.gnome.mutter.gschema.xml.in.h:1
msgid "Modifier to use for extended window management operations" msgid "Modifier to use for extended window management operations"
msgstr "ਵਾਧੂ ਵਿੰਡੋ ਪਰਬੰਧ ਓਪਰੇਸ਼ਨਾਂ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਮੋਡੀਫਾਇਰ" msgstr "ਵਾਧੂ ਵਿੰਡੋ ਪਰਬੰਧ ਓਪਰੇਸ਼ਨਾਂ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਮੋਡੀਫਾਇਰ"
#: data/org.gnome.mutter.gschema.xml.in:8 #: ../data/org.gnome.mutter.gschema.xml.in.h:2
#| 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 "" msgid ""
"This key will initiate the overlay, which is a combination window overview " "This key will initiate the \"overlay\", which is a combination window "
"and application launching system. The default is intended to be the “Windows " "overview and application launching system. The default is intended to be the "
"key on PC hardware. Its expected that this binding either the default or " "\"Windows key\" on PC hardware. It's expected that this binding either the "
"set to the empty string." "default or set to the empty string."
msgstr "" msgstr ""
"ਇਹ ਸਵਿੱਚ ਓਵਰਲੇ ਸ਼ੁਰੂ ਕਰਦੀ ਹੈ, ਜੋ ਕਿ ਵਿੰਡੋ ਸੰਖੇਪ ਤੇ ਐਪਲੀਕੇਸ਼ਨ ਚਲਾਉਣ ਸਿਸਟਮ ਦੀ" "ਇਹ ਸਵਿੱਚ \"ਓਵਰਲੇ\" ਸ਼ੁਰੂ ਕਰਦੀ ਹੈ, ਜੋ ਕਿ ਵਿੰਡੋ ਸੰਖੇਪ ਤੇ ਐਪਲੀਕੇਸ਼ਨ ਚਲਾਉਣ ਸਿਸਟਮ "
" ਜੋੜ ਹੈ। " "ਦੀ ਜੋੜ ਹੈ। "
"ਡਿਫਾਲਟ ਇਹ PC ਹਾਰਡਵੇਅਰ ਉੱਤੇ ਵਿੰਡੋਜ਼ ਸਵਿੱਚ ਨਾਲ ਵਰਤਣ ਲਈ ਹੈ। ਇਹ ਉਮੀਦ ਕੀਤੀ ਜਾਂਦੀ" "ਡਿਫਾਲਟ ਇਹ PC ਹਾਰਡਵੇਅਰ ਉੱਤੇ \"ਵਿੰਡੋਜ਼ ਸਵਿੱਚ\" ਨਾਲ ਵਰਤਣ ਲਈ ਹੈ। ਇਹ ਉਮੀਦ ਕੀਤੀ "
" ਹੈ ਕਿ " "ਜਾਂਦੀ ਹੈ ਕਿ "
"ਜਾਂ ਤਾਂ ਡਿਫਾਲਟ ਬਾਈਡਿੰਗ ਰੱਖੀ ਜਾਵੇ ਜਾਂ ਖਾਲੀ ਲਾਈਨ ਵਰਤੀ ਜਾਵੇ।" "ਜਾਂ ਤਾਂ ਡਿਫਾਲਟ ਬਾਈਡਿੰਗ ਰੱਖੀ ਜਾਵੇ ਜਾਂ ਖਾਲੀ ਲਾਈਨ ਵਰਤੀ ਜਾਵੇ।"
#: data/org.gnome.mutter.gschema.xml.in:20 #: ../data/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs" msgid "Attach modal dialogs"
msgstr "ਮਾਡਲ ਡਾਈਲਾਗ ਅਟੈਚਮੈਂਟ" msgstr "ਮਾਡਲ ਡਾਈਲਾਗ ਅਟੈਚਮੈਂਟ"
#: data/org.gnome.mutter.gschema.xml.in:21 #: ../data/org.gnome.mutter.gschema.xml.in.h:4
msgid "" msgid ""
"When true, instead of having independent titlebars, modal dialogs appear " "When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with " "attached to the titlebar of the parent window and are moved together with "
@@ -306,11 +301,11 @@ msgstr ""
"ਟਾਈਟਲ ਬਾਰ ਨਾਲ " "ਟਾਈਟਲ ਬਾਰ ਨਾਲ "
"ਜੁੜਿਆ ਉਭਰੇਗਾ ਤੇ ਮੁੱਢਲੀ ਵਿੰਡੋ ਨਾਲ ਹੀ ਹਿੱਲੇਗਾ।" "ਜੁੜਿਆ ਉਭਰੇਗਾ ਤੇ ਮੁੱਢਲੀ ਵਿੰਡੋ ਨਾਲ ਹੀ ਹਿੱਲੇਗਾ।"
#: data/org.gnome.mutter.gschema.xml.in:30 #: ../data/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "ਕੋਨਾ ਟਿਲਿੰਗ ਚਾਲੂ, ਜਦੋਂ ਵਿੰਡੋਜ਼ ਨੂੰ ਸਕਰੀਨ ਕੋਨਿਆਂ ਤੋਂ ਡਰਾਪ ਕਰਨਾ ਹੋਵੇ" msgstr "ਕੋਨਾ ਟਿਲਿੰਗ ਚਾਲੂ, ਜਦੋਂ ਵਿੰਡੋਜ਼ ਨੂੰ ਸਕਰੀਨ ਕੋਨਿਆਂ ਤੋਂ ਡਰਾਪ ਕਰਨਾ ਹੋਵੇ"
#: data/org.gnome.mutter.gschema.xml.in:31 #: ../data/org.gnome.mutter.gschema.xml.in.h:6
msgid "" msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them " "If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available " "vertically and resizes them horizontally to cover half of the available "
@@ -322,17 +317,13 @@ msgstr ""
"ਕਰਦਾ ਹੈ। ਵਿੰਡੋਜ਼ " "ਕਰਦਾ ਹੈ। ਵਿੰਡੋਜ਼ "
"ਨੂੰ ਉੱਤੇ ਸਕਰੀਨ ਬਾਹੀ ਵਿੱਚ ਲੈ ਕੇ ਜਾਣ ਨਾਲ ਉਹ ਪੂਰੀ ਤਰ੍ਹਾਂ ਵੱਧ ਤੋਂ ਵੱਧ ਹੁੰਦਾ ਹੈ।" "ਨੂੰ ਉੱਤੇ ਸਕਰੀਨ ਬਾਹੀ ਵਿੱਚ ਲੈ ਕੇ ਜਾਣ ਨਾਲ ਉਹ ਪੂਰੀ ਤਰ੍ਹਾਂ ਵੱਧ ਤੋਂ ਵੱਧ ਹੁੰਦਾ ਹੈ।"
#: data/org.gnome.mutter.gschema.xml.in:40 #: ../data/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "ਵਰਕਸਪੇਸ ਦਾ ਪਰਬੰਧ ਚਲਵੇਂ ਰੂਪ ਵਿੱਚ ਕੀਤਾ ਜਾਂਦਾ ਹੈ" msgstr "ਵਰਕਸਪੇਸ ਦਾ ਪਰਬੰਧ ਚਲਵੇਂ ਰੂਪ ਵਿੱਚ ਕੀਤਾ ਜਾਂਦਾ ਹੈ"
#: data/org.gnome.mutter.gschema.xml.in:41 #: ../data/org.gnome.mutter.gschema.xml.in.h:8
#| 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 "" msgid ""
"Determines whether workspaces are managed dynamically or whether theres a " "Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)." "gnome.desktop.wm.preferences)."
msgstr "" msgstr ""
@@ -340,11 +331,11 @@ msgstr ""
"(ਜੋ ਕਿ org." "(ਜੋ ਕਿ org."
"gnome.desktop.wm.preferences ਵਿੱਚ num-workspaces ਕੁੰਜੀ ਰਾਹੀਂ ਦੱਸੀ ਜਾਂਦੀ ਹੈ)।" "gnome.desktop.wm.preferences ਵਿੱਚ num-workspaces ਕੁੰਜੀ ਰਾਹੀਂ ਦੱਸੀ ਜਾਂਦੀ ਹੈ)।"
#: data/org.gnome.mutter.gschema.xml.in:50 #: ../data/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary" msgid "Workspaces only on primary"
msgstr "ਵਰਕਸਪੇਸ ਕੇਵਲ ਪ੍ਰਾਇਮਰੀ ਉੱਤੇ ਹੀ" msgstr "ਵਰਕਸਪੇਸ ਕੇਵਲ ਪ੍ਰਾਇਮਰੀ ਉੱਤੇ ਹੀ"
#: data/org.gnome.mutter.gschema.xml.in:51 #: ../data/org.gnome.mutter.gschema.xml.in.h:10
msgid "" msgid ""
"Determines whether workspace switching should happen for windows on all " "Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor." "monitors or only for windows on the primary monitor."
@@ -352,11 +343,11 @@ msgstr ""
"ਕੀ ਵਰਕਸਪੇਸ ਬਦਲਣਾ ਸਭ ਮਾਨੀਟਰ ਦੀਆਂ ਵਿੰਡੋ ਲਈ ਹੋਵੇ ਜਾਂ ਕੇਵਲ ਪ੍ਰਾਇਮਰੀ ਮਾਨੀਟਰ ਦੀਆਂ " "ਕੀ ਵਰਕਸਪੇਸ ਬਦਲਣਾ ਸਭ ਮਾਨੀਟਰ ਦੀਆਂ ਵਿੰਡੋ ਲਈ ਹੋਵੇ ਜਾਂ ਕੇਵਲ ਪ੍ਰਾਇਮਰੀ ਮਾਨੀਟਰ ਦੀਆਂ "
"ਵਿੰਡੋ ਲਈ ਹੀ " "ਵਿੰਡੋ ਲਈ ਹੀ "
#: data/org.gnome.mutter.gschema.xml.in:59 #: ../data/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup" msgid "No tab popup"
msgstr "ਕੋਈ ਟੈਬ ਪੋਪਅੱਪ ਨਹੀਂ" msgstr "ਕੋਈ ਟੈਬ ਪੋਪਅੱਪ ਨਹੀਂ"
#: data/org.gnome.mutter.gschema.xml.in:60 #: ../data/org.gnome.mutter.gschema.xml.in.h:12
msgid "" msgid ""
"Determines whether the use of popup and highlight frame should be disabled " "Determines whether the use of popup and highlight frame should be disabled "
"for window cycling." "for window cycling."
@@ -364,45 +355,38 @@ msgstr ""
"ਜਾਣੋ ਕਿ ਕੀ ਪੋਪਅੱਪ ਅਤੇ ਹਾਈਲਾਈਟ ਫਰੇਮ ਦੀ ਵਰਤੋਂ ਨੂੰ ਵਿੰਡੋਜ਼ ਦੇ ਚੱਕਰ ਦੌਰਾਨ ਬੰਦ " "ਜਾਣੋ ਕਿ ਕੀ ਪੋਪਅੱਪ ਅਤੇ ਹਾਈਲਾਈਟ ਫਰੇਮ ਦੀ ਵਰਤੋਂ ਨੂੰ ਵਿੰਡੋਜ਼ ਦੇ ਚੱਕਰ ਦੌਰਾਨ ਬੰਦ "
"ਕਰਨਾ ਹੈ।" "ਕਰਨਾ ਹੈ।"
#: data/org.gnome.mutter.gschema.xml.in:68 #: ../data/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving" msgid "Delay focus changes until the pointer stops moving"
msgstr "ਪੁਆਇੰਟਰ ਦੇ ਰੁਕਣ ਤੱਕ ਫੋਕਸ ਬਦਲਣ ਨੂੰ ਰੋਕੋ" msgstr "ਪੁਆਇੰਟਰ ਦੇ ਰੁਕਣ ਤੱਕ ਫੋਕਸ ਬਦਲਣ ਨੂੰ ਰੋਕੋ"
#: data/org.gnome.mutter.gschema.xml.in:69 #: ../data/org.gnome.mutter.gschema.xml.in.h:14
#| 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 "" msgid ""
"If set to true, and the focus mode is either sloppy or mouse then the " "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"focus will not be changed immediately when entering a window, but only after " "the focus will not be changed immediately when entering a window, but only "
"the pointer stops moving." "after the pointer stops moving."
msgstr "" msgstr ""
"ਜੇ ਇਹ ਸਹੀਂ ਹੋਵੇ ਤਾਂ ਫੋਕਸ ਢੰਗ ਜਾਂ ਤਾਂ ਸਲੋਪੀ ਜਾਂ ਮਾਊਂਸ ਹੁੰਦਾ ਹੈ ਤਾਂ ਫੋਕਸ" "ਜੇ ਇਹ ਸਹੀਂ ਹੋਵੇ ਤਾਂ ਫੋਕਸ ਢੰਗ ਜਾਂ ਤਾਂ \"ਸਲੋਪੀ\" ਜਾਂ \"ਮਾਊਂਸ\" ਹੁੰਦਾ ਹੈ ਤਾਂ "
" ਹੋਇਆ ਵਿੰਡੋ " "ਫੋਕਸ ਹੋਇਆ ਵਿੰਡੋ "
"auto_raise_delay ਕੁੰਜੀ ਵਲੋਂ ਦਿੱਤੇ ਇੱਕ ਅੰਤਰਾਲ ਬਾਅਦ ਆਟੋਮੈਟਿਕ ਹੀ ਉਭਾਰਿਆ ਜਾਵੇਗਾ।" "auto_raise_delay ਕੁੰਜੀ ਵਲੋਂ ਦਿੱਤੇ ਇੱਕ ਅੰਤਰਾਲ ਬਾਅਦ ਆਟੋਮੈਟਿਕ ਹੀ ਉਭਾਰਿਆ ਜਾਵੇਗਾ।"
#: data/org.gnome.mutter.gschema.xml.in:79 #: ../data/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width" msgid "Draggable border width"
msgstr "ਡਰੈਗ ਹੋਣ ਯੋਗ ਬਾਰਡਰ ਚੌੜਾਈ" msgstr "ਡਰੈਗ ਹੋਣ ਯੋਗ ਬਾਰਡਰ ਚੌੜਾਈ"
#: data/org.gnome.mutter.gschema.xml.in:80 #: ../data/org.gnome.mutter.gschema.xml.in.h:16
#| 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 "" msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
msgstr "" msgstr ""
"ਕੁੱਲ ਡਰੈਗ ਹੋਣ ਯੋਗ ਬਾਰਡਰ ਦੀ ਮਾਤਰਾ। ਜੇ ਥੀਮ ਦੇ ਦਿੱਖ ਬਾਰਡਰ ਲੋੜ ਮੁਤਾਬਕ ਨਾ ਹੋਣ ਤਾਂ " "ਕੁੱਲ ਡਰੈਗ ਹੋਣ ਯੋਗ ਬਾਰਡਰ ਦੀ ਮਾਤਰਾ। ਜੇ ਥੀਮ ਦੇ ਦਿੱਖ ਬਾਰਡਰ ਲੋੜ ਮੁਤਾਬਕ ਨਾ ਹੋਣ ਤਾਂ "
"ਅਦਿੱਖ ਬਾਰਡਰ " "ਅਦਿੱਖ ਬਾਰਡਰ "
"ਨੂੰ ਇਹ ਮੁੱਲ ਦੇ ਬਰਾਬਰ ਕਰਨ ਲਈ ਵਧਾਇਆ ਜਾਵੇਗਾ।" "ਨੂੰ ਇਹ ਮੁੱਲ ਦੇ ਬਰਾਬਰ ਕਰਨ ਲਈ ਵਧਾਇਆ ਜਾਵੇਗਾ।"
#: data/org.gnome.mutter.gschema.xml.in:89 #: ../data/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows" msgid "Auto maximize nearly monitor sized windows"
msgstr "ਲਗਭਗ ਮਾਨੀਟਰ ਆਕਾਰ ਦੀਆਂ ਵਿੰਡੋਜ਼ ਆਪਣੇ-ਆਪ ਵੱਧੋ-ਵੱਧੋ" msgstr "ਲਗਭਗ ਮਾਨੀਟਰ ਆਕਾਰ ਦੀਆਂ ਵਿੰਡੋਜ਼ ਆਪਣੇ-ਆਪ ਵੱਧੋ-ਵੱਧੋ"
#: data/org.gnome.mutter.gschema.xml.in:90 #: ../data/org.gnome.mutter.gschema.xml.in.h:18
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, new windows that are initially the size of the monitor "
"automatically get maximized." "automatically get maximized."
@@ -411,11 +395,11 @@ msgstr ""
"ਹਨ, ਆਪਣੇ-ਆਪ ਵੱਧ ਤੋਂ " "ਹਨ, ਆਪਣੇ-ਆਪ ਵੱਧ ਤੋਂ "
"ਵੱਧ ਹੋ ਜਾਣਗੀਆਂ।" "ਵੱਧ ਹੋ ਜਾਣਗੀਆਂ।"
#: data/org.gnome.mutter.gschema.xml.in:98 #: ../data/org.gnome.mutter.gschema.xml.in.h:19
msgid "Place new windows in the center" msgid "Place new windows in the center"
msgstr "ਨਵੀਆਂ ਵਿੰਡੋ ਕੇਂਦਰ ਵਿੱਚ ਰੱਖੋ" msgstr "ਨਵੀਆਂ ਵਿੰਡੋ ਕੇਂਦਰ ਵਿੱਚ ਰੱਖੋ"
#: data/org.gnome.mutter.gschema.xml.in:99 #: ../data/org.gnome.mutter.gschema.xml.in.h:20
msgid "" msgid ""
"When true, the new windows will always be put in the center of the active " "When true, the new windows will always be put in the center of the active "
"screen of the monitor." "screen of the monitor."
@@ -423,205 +407,112 @@ msgstr ""
"ਜੇ ਸਹੀਂ ਹੈ ਤਾਂ ਨਵੀਂ ਵਿੰਡੋਜ਼ ਨੂੰ ਹਮੇਸ਼ਾ ਮਾਨੀਟਰ ਦੀ ਸਰਗਰਮ ਸਕਰੀਮ ਦੇ ਕੇਂਦਰ ਵਿੱਚ " "ਜੇ ਸਹੀਂ ਹੈ ਤਾਂ ਨਵੀਂ ਵਿੰਡੋਜ਼ ਨੂੰ ਹਮੇਸ਼ਾ ਮਾਨੀਟਰ ਦੀ ਸਰਗਰਮ ਸਕਰੀਮ ਦੇ ਕੇਂਦਰ ਵਿੱਚ "
"ਰੱਖਿਆ ਜਾਵੇਗਾ।" "ਰੱਖਿਆ ਜਾਵੇਗਾ।"
#: data/org.gnome.mutter.gschema.xml.in:107 #: ../data/org.gnome.mutter.gschema.xml.in.h:21
msgid "Enable experimental features"
msgstr "ਤਜਰਬੇ ਅਧੀਨ ਫ਼ੀਚਰਾਂ ਨੂੰ ਸਮਰੱਥ ਕਰੋ"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "ਟੈਬ ਪੋਪਅੱਪ ਤੋਂ ਵਿੰਡੋ ਚੁਣੋ" msgstr "ਟੈਬ ਪੋਪਅੱਪ ਤੋਂ ਵਿੰਡੋ ਚੁਣੋ"
#: data/org.gnome.mutter.gschema.xml.in:150 #: ../data/org.gnome.mutter.gschema.xml.in.h:22
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "ਟੈਬ ਪੋਪਅੱਪ ਰੱਦ ਕਰੋ" msgstr "ਟੈਬ ਪੋਪਅੱਪ ਰੱਦ ਕਰੋ"
#: data/org.gnome.mutter.gschema.xml.in:155 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#| msgid "Switch applications"
msgid "Switch monitor configurations"
msgstr "ਮਾਨੀਟਰ ਸੰਰਚਨਾ ਨੂੰ ਬਦਲੋ"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "ਬਿਲਟ-ਇਨ ਮਾਨੀਟਰ ਸੰਰਚਨਾ ਨੂੰ ਘੁੰਮਾਓ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "VT 1 ਲਈ ਬਦਲੋ" msgstr "VT 1 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:10 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
msgid "Switch to VT 2" msgid "Switch to VT 2"
msgstr "VT 2 ਲਈ ਬਦਲੋ" msgstr "VT 2 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:14 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
msgid "Switch to VT 3" msgid "Switch to VT 3"
msgstr "VT 3 ਲਈ ਬਦਲੋ" msgstr "VT 3 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:18 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
msgid "Switch to VT 4" msgid "Switch to VT 4"
msgstr "VT 4 ਲਈ ਬਦਲੋ" msgstr "VT 4 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:22 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
msgid "Switch to VT 5" msgid "Switch to VT 5"
msgstr "VT 5 ਲਈ ਬਦਲੋ" msgstr "VT 5 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:26 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
msgid "Switch to VT 6" msgid "Switch to VT 6"
msgstr "VT 6 ਲਈ ਬਦਲੋ" msgstr "VT 6 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:30 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
msgid "Switch to VT 7" msgid "Switch to VT 7"
msgstr "VT 7 ਲਈ ਬਦਲੋ" msgstr "VT 7 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:34 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8" msgid "Switch to VT 8"
msgstr "VT 8 ਲਈ ਬਦਲੋ" msgstr "VT 8 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:38 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9" msgid "Switch to VT 9"
msgstr "VT 9 ਲਈ ਬਦਲੋ" msgstr "VT 9 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:42 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10" msgid "Switch to VT 10"
msgstr "VT 10 ਲਈ ਬਦਲੋ" msgstr "VT 10 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:46 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11" msgid "Switch to VT 11"
msgstr "VT 11 ਲਈ ਬਦਲੋ" msgstr "VT 11 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:50 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "VT 12 ਲਈ ਬਦਲੋ" msgstr "VT 12 ਲਈ ਬਦਲੋ"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54 #: ../src/backends/meta-monitor-manager.c:364
msgid "Re-enable shortcuts"
msgstr "ਸ਼ਾਰਟਕੱਟ ਮੁੜ-ਸਮਰੱਥ ਕਰੋ"
#. TRANSLATORS: This string refers to a button that switches between
#. * different modes.
#.
#: src/backends/meta-input-settings.c:2151
#, c-format
msgid "Mode Switch (Group %d)"
msgstr "ਮੋਡ ਬਦਲੋ (ਗਰੁੱਪ %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs.
#.
#: src/backends/meta-input-settings.c:2174
#| msgid "Switch system controls"
msgid "Switch monitor"
msgstr "ਮਾਨੀਟਰ ਨੂੰ ਬਦਲੋ"
#: src/backends/meta-input-settings.c:2176
msgid "Show on-screen help"
msgstr "ਆਨ-ਸਕਰੀਨ ਮਦਦ ਵੇਖੋ"
#: src/backends/meta-monitor-manager.c:903
msgid "Built-in display" msgid "Built-in display"
msgstr "ਬਿਲਟ-ਇਨ ਡਿਸਪਲੇਅ" msgstr "ਬਿਲਟ-ਇਨ ਡਿਸਪਲੇਅ"
#: src/backends/meta-monitor-manager.c:926 #: ../src/backends/meta-monitor-manager.c:391
msgid "Unknown" msgid "Unknown"
msgstr "ਅਣਜਾਣ" msgstr "ਅਣਜਾਣ"
#: src/backends/meta-monitor-manager.c:928 #: ../src/backends/meta-monitor-manager.c:393
msgid "Unknown Display" msgid "Unknown Display"
msgstr "ਅਣਜਾਣ ਡਿਸਪਲੇਅ" msgstr "ਅਣਜਾਣ ਡਿਸਪਲੇਅ"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: ../src/backends/meta-monitor-manager.c:401
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: ../src/compositor/compositor.c:456
#, c-format #, c-format
#| msgid ""
#| "Another compositing manager is already running on screen %i on display "
#| "\"%s\"."
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "" msgstr ""
"ਇੱਕ ਹੋਰ ਕੰਪੋਜ਼ਟਿੰਗ ਮੈਨੇਜਰ %i ਸਕਰੀਨ ਉੱਤੇ ਡਿਸਪਲੇਅ ”%s” ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਿਹਾ" "ਇੱਕ ਹੋਰ ਕੰਪੋਜ਼ਟਿੰਗ ਮੈਨੇਜਰ %i ਸਕਰੀਨ ਉੱਤੇ ਡਿਸਪਲੇਅ \"%s\" ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਚੱਲ "
" ਹੈ।" "ਰਿਹਾ ਹੈ।"
#: src/core/bell.c:194 #: ../src/core/bell.c:185
msgid "Bell event" msgid "Bell event"
msgstr "ਘੰਟੀ ਈਵੈਂਟ" msgstr "ਘੰਟੀ ਈਵੈਂਟ"
#: src/core/display.c:608 #: ../src/core/delete.c:127
#, 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/core/main.c:189
msgid "Disable connection to session manager"
msgstr "ਸ਼ੈਸ਼ਨ ਮੈਨੇਜਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਅਯੋਗ"
#: src/core/main.c:195
msgid "Replace the running window manager"
msgstr "ਚੱਲ ਰਹੇ ਵਿੰਡੋ ਮੈਨੇਜਰ ਨੂੰ ਬਦਲੋ"
#: src/core/main.c:201
msgid "Specify session management ID"
msgstr "ਸ਼ੈਸ਼ਨ ਪਰਬੰਧਨ ID ਦਿਓ"
#: src/core/main.c:206
msgid "X Display to use"
msgstr "ਵਰਤਣ ਲਈ X ਡਿਸਪਲੇਅ"
#: src/core/main.c:212
msgid "Initialize session from savefile"
msgstr "ਸੰਭਾਲੀ ਫਾਇਲ ਤੋਂ ਸ਼ੈਸ਼ਨ ਸ਼ੁਰੂ"
#: src/core/main.c:218
msgid "Make X calls synchronous"
msgstr "X ਕਾਲ ਸੈਕਰੋਨਸ ਬਣਾਓ"
#: src/core/main.c:225
msgid "Run as a wayland compositor"
msgstr "ਵੇਲੈਂਡ ਕੰਪੋਜ਼ਰ ਵਜੋਂ ਚਲਾਓ"
#: src/core/main.c:231
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "ਨੈਸਟਡ ਕੰਪੋਜ਼ਰ ਵਜੋਂ ਚਲਾਓ"
#: src/core/main.c:239
msgid "Run as a full display server, rather than nested"
msgstr "ਅੰਦਰੂਨੀ ਰੂਪ ਵਿੱਚ ਚਲਾਉਣ ਦੀ ਬਜਾਏ ਪੂਰੇ ਡਿਸਪਲੇਅ ਸਰਵਰ ਵਜੋਂ ਚਲਾਓ"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format #, c-format
msgid "“%s” is not responding." msgid "“%s” is not responding."
msgstr "\"%s\" ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ।" msgstr "\"%s\" ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ।"
#: src/core/meta-close-dialog-default.c:149 #: ../src/core/delete.c:129
msgid "Application is not responding." msgid "Application is not responding."
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ।" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ।"
#: src/core/meta-close-dialog-default.c:154 #: ../src/core/delete.c:134
msgid "" msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
@@ -629,88 +520,110 @@ msgstr ""
"ਤੁਸੀਂ ਇਸ ਲਈ ਕੁਝ ਸਮੇਂ ਵਾਸਤੇ ਉਡੀਕ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਕਾਰਜ ਨੂੰ ਧੱਕੇ ਨਾਲ ਬੰਦ ਕਰ ਸਕਦੇ " "ਤੁਸੀਂ ਇਸ ਲਈ ਕੁਝ ਸਮੇਂ ਵਾਸਤੇ ਉਡੀਕ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਕਾਰਜ ਨੂੰ ਧੱਕੇ ਨਾਲ ਬੰਦ ਕਰ ਸਕਦੇ "
"ਹੋ।" "ਹੋ।"
#: src/core/meta-close-dialog-default.c:161 #: ../src/core/delete.c:141
msgid "_Force Quit"
msgstr "ਧੱਕੇ ਨਾਲ ਬੰਦ(_F)"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait" msgid "_Wait"
msgstr "ਉਡੀਕੋ(_W)" msgstr "ਉਡੀਕੋ(_W)"
#: src/core/mutter.c:39 #: ../src/core/delete.c:141
msgid "_Force Quit"
msgstr "ਧੱਕੇ ਨਾਲ ਬੰਦ(_F)"
#: ../src/core/display.c:562
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X ਵਿੰਡੋ ਸਿਸਟਮ ਡਿਸਪਲੇਅ '%s' ਨੂੰ ਖੋਲਣ ਵਿੱਚ ਅਸਮਰਥ\n"
#: ../src/core/main.c:176
msgid "Disable connection to session manager"
msgstr "ਸ਼ੈਸ਼ਨ ਮੈਨੇਜਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਅਯੋਗ"
#: ../src/core/main.c:182
msgid "Replace the running window manager"
msgstr "ਚੱਲ ਰਹੇ ਵਿੰਡੋ ਮੈਨੇਜਰ ਨੂੰ ਬਦਲੋ"
#: ../src/core/main.c:188
msgid "Specify session management ID"
msgstr "ਸ਼ੈਸ਼ਨ ਪਰਬੰਧਨ ID ਦਿਓ"
#: ../src/core/main.c:193
msgid "X Display to use"
msgstr "ਵਰਤਣ ਲਈ X ਡਿਸਪਲੇਅ"
#: ../src/core/main.c:199
msgid "Initialize session from savefile"
msgstr "ਸੰਭਾਲੀ ਫਾਇਲ ਤੋਂ ਸ਼ੈਸ਼ਨ ਸ਼ੁਰੂ"
#: ../src/core/main.c:205
msgid "Make X calls synchronous"
msgstr "X ਕਾਲ ਸੈਕਰੋਨਸ ਬਣਾਓ"
#: ../src/core/main.c:212
msgid "Run as a wayland compositor"
msgstr "ਵੇਲੈਂਡ ਕੰਪੋਜ਼ਰ ਵਜੋਂ ਚਲਾਓ"
#: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested"
msgstr "ਅੰਦਰੂਨੀ ਰੂਪ ਵਿੱਚ ਚਲਾਉਣ ਦੀ ਬਜਾਏ ਪੂਰੇ ਡਿਸਪਲੇਅ ਸਰਵਰ ਵਜੋਂ ਚਲਾਓ"
#: ../src/core/mutter.c:39
#, c-format #, 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 "" msgid ""
"mutter %s\n" "mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
"This is free software; see the source for copying conditions.\n" "This is free software; see the source for copying conditions.\n"
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
"PARTICULAR PURPOSE.\n" "PARTICULAR PURPOSE.\n"
msgstr "" msgstr ""
"ਮੱਟਰ %s\n" "ਮੱਟਰ %s\n"
"ਹੱਕ ਰਾਖਵੇਂ ਹਨ © ੨੦੦੧-%d ਹਾਵੇਨ ਪੈਨਿੰਗਟੋਨ, ਰੈੱਡ ਹੈੱਟ, ਅਤੇ ਹੋਰ\n" "ਹੱਕ ਰਾਖਵੇਂ ਹਨ(C) ੨੦੦੧-%d ਹਾਵੇਨ ਪੈਨਿੰਗਟੋਨ, ਰੈੱਡ ਹੈੱਟ, ਅਤੇ ਹੋਰ\n"
"ਇਹ ਮੁਫਤ ਸਾਫਟਵੇਅਰ ਹੈ; ਉਤਾਰਾ ਹਾਲਤਾਂ ਲਈ ਸਰੋਤ ਵੇਖੋ।\n" "ਇਹ ਮੁਫਤ ਸਾਫਟਵੇਅਰ ਹੈ; ਉਤਾਰਾ ਹਾਲਤਾਂ ਲਈ ਸਰੋਤ ਵੇਖੋ।\n"
"ਇਸ ਦੀ ਕੋਈ ਗਰੰਟੀ ਨਹੀ; ਇਥੋਂ ਤੱਕ ਕਿ ਖਰੀਦਦਾਰੀ ਜਾਂ ਖਾਸ ਮਕਸਦ ਦੀ ਪੂਰਤੀ ਲਈ ਵੀ।\n" "ਇਸ ਦੀ ਕੋਈ ਗਰੰਟੀ ਨਹੀ; ਇਥੋਂ ਤੱਕ ਕਿ ਖਰੀਦਦਾਰੀ ਜਾਂ ਖਾਸ ਮਕਸਦ ਦੀ ਪੂਰਤੀ ਲਈ ਵੀ।\n"
#: src/core/mutter.c:53 #: ../src/core/mutter.c:53
msgid "Print version" msgid "Print version"
msgstr "ਵਰਜਨ ਛਾਪੋ" msgstr "ਵਰਜਨ ਛਾਪੋ"
#: src/core/mutter.c:59 #: ../src/core/mutter.c:59
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "ਵਰਤਣ ਲਈ ਮੁੱਟਰ ਪਲੱਗਇਨ" msgstr "ਵਰਤਣ ਲਈ ਮੁੱਟਰ ਪਲੱਗਇਨ"
#: src/core/prefs.c:1997 #: ../src/core/prefs.c:2004
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "ਵਰਕਸਪੇਸ %d" msgstr "ਵਰਕਸਪੇਸ %d"
#: src/core/screen.c:580 #: ../src/core/screen.c:525
#, c-format #, c-format
#| msgid "" #| msgid ""
#| "Display \"%s\" already has a window manager; try using the --replace " #| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "option to replace the current window manager." #| "replace option to replace the current window manager.\n"
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display \"%s\" already has a window manager; try using the --replace option "
"replace the current window manager." "to replace the current window manager."
msgstr "" msgstr ""
"ਡਿਸਪਲੇਅ ”%s” ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਵਿੰਡੋ ਮੈਨੇਜਰ ਮੌਜੂਦ ਹੈ; ਮੌਜੂਦਾ ਵਿੰਡੋ ਮੈਨੇਜਰ ਨੂੰ" "ਡਿਸਪਲੇਅ \"%s\" ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਵਿੰਡੋ ਮੈਨੇਜਰ ਮੌਜੂਦ ਹੈ; ਮੌਜੂਦਾ ਵਿੰਡੋ ਮੈਨੇਜਰ ਨੂੰ "
"ਬਦਲਣ ਲਈ --replace " "ਬਦਲਣ ਲਈ --replace "
"ਚੋਣ ਵਰਤ ਕੇ ਦੇਖੋ।" "ਚੋਣ ਵਰਤ ਕੇ ਦੇਖੋ।"
#: src/core/screen.c:665 #: ../src/core/screen.c:607
#, c-format #, c-format
#| msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgid "Screen %d on display “%s” is invalid\n" msgstr "ਡਿਸਪਲੇਅ '%2$s' ਉੱਤੇ ਸਕਰੀਨ %1$d ਗਲਤ ਹੈ\n"
msgstr "ਡਿਸਪਲੇਅ ”%2$s” ਉੱਤੇ ਸਕਰੀਨ %1$d ਗਲਤ ਹੈ\n"
#: src/core/util.c:120 #: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "ਮੱਟਰ, ਵਰਬੋਜ਼ ਮੋਡ ਲਈ ਸਹਾਰੇ ਤੋਂ ਬਿਨਾਂ ਕੰਪਾਇਲ ਹੋਇਆ\n" msgstr "ਮੱਟਰ, ਵਰਬੋਜ਼ ਮੋਡ ਲਈ ਸਹਾਰੇ ਤੋਂ ਬਿਨਾਂ ਕੰਪਾਇਲ ਹੋਇਆ\n"
#: src/wayland/meta-wayland-tablet-pad.c:563 #: ../src/x11/session.c:1815
#, c-format
msgid "Mode Switch: Mode %d"
msgstr "ਮੋਡ ਬਦਲੋ: ਮੋਡ %d"
#: src/x11/session.c:1815
#| msgid ""
#| "These windows do not support &quot;save current setup&quot; and will have "
#| "to be restarted manually next time you log in."
msgid "" msgid ""
"These windows do not support save current setup and will have to be " "These windows do not support &quot;save current setup&quot; and will have to "
"restarted manually next time you log in." "be restarted manually next time you log in."
msgstr "" msgstr ""
"ਇਹ ਵਿੰਡੋ ਮੌਜੂਦਾ ਸੈਟਅੱਪ ਸੰਭਾਲੋ ਵਾਸਤੇ ਸਹਾਇਕ ਨਹੀਂ ਅਤੇ ਅਗਲੀ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ" "ਇਹ ਵਿੰਡੋ &quot;ਮੌਜੂਦਾ ਸੈਟਅੱਪ ਸੰਭਾਲੋ&quot; ਵਾਸਤੇ ਸਹਾਇਕ ਨਹੀਂ ਅਤੇ ਅਗਲੀ ਵਾਰ ਜਦੋਂ "
" ਲਾਗਇਨ " "ਤੁਸੀਂ ਲਾਗਇਨ "
"ਕਰੋਗੇ ਤਾਂ ਮੁੜ ਸ਼ੁਰੂ ਕਰਨਾ ਪਵੇਗਾ।" "ਕਰੋਗੇ ਤਾਂ ਮੁੜ ਸ਼ੁਰੂ ਕਰਨਾ ਪਵੇਗਾ।"
#: src/x11/window-props.c:559 #: ../src/x11/window-props.c:549
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (%s ਉੱਤੇ)" msgstr "%s (%s ਉੱਤੇ)"

View File

@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-21 04:46+0000\n"
"PO-Revision-Date: 2017-08-29 18:14+0200\n" "PO-Revision-Date: 2017-08-23 04:15+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <community-poland@mozilla.org>\n" "Language-Team: Polish <community-poland@mozilla.org>\n"
"Language: pl\n" "Language: pl\n"
@@ -422,10 +422,7 @@ msgid ""
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate " "mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to " "space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "manage HiDPI monitors. Does not require a restart."
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr "" msgstr ""
"Aby włączyć eksperymentalne funkcje, należy dodać słowo kluczowe funkcji do " "Aby włączyć eksperymentalne funkcje, należy dodać słowo kluczowe funkcji do "
"tej listy. Niektóre funkcje wymagają ponownego uruchomienia menedżera okien. " "tej listy. Niektóre funkcje wymagają ponownego uruchomienia menedżera okien. "
@@ -435,23 +432,20 @@ msgstr ""
"monitorami o wysokiej rozdzielczości domyślnie układa logiczne monitory " "monitorami o wysokiej rozdzielczości domyślnie układa logiczne monitory "
"w przestrzeni współrzędnych logicznych pikseli, jednocześnie skalując bufory " "w przestrzeni współrzędnych logicznych pikseli, jednocześnie skalując bufory "
"ramki monitorów zamiast zawartości okien. Nie wymaga ponownego uruchomienia." "ramki monitorów zamiast zawartości okien. Nie wymaga ponownego uruchomienia."
"• „remote-desktop” — włącza obsługę zdalnego pulpitu. Aby dodać "
"udostępnianie ekranu, należy włączyć także opcję „screen-cast”. • "
"„screen-cast” — włącza obsługę nagrywania ekranu."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:141
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Wybór okna z wyskakującego okna dla tabulacji" msgstr "Wybór okna z wyskakującego okna dla tabulacji"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:146
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Anulowanie wyskakującego okna dla tabulacji" msgstr "Anulowanie wyskakującego okna dla tabulacji"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Przełączenie konfiguracji monitorów" msgstr "Przełączenie konfiguracji monitorów"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Obrócenie wbudowanego monitora" msgstr "Obrócenie wbudowanego monitora"

View File

@@ -21,8 +21,8 @@ msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n" "&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-02-22 19:28+0000\n"
"PO-Revision-Date: 2017-09-03 11:06-0200\n" "PO-Revision-Date: 2017-02-25 17:53-0200\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -33,250 +33,6 @@ msgstr ""
"X-Generator: Virtaal 1.0.0-beta1\n" "X-Generator: Virtaal 1.0.0-beta1\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
msgstr "Navegação"
#: data/50-mutter-navigation.xml:9
msgid "Move window to workspace 1"
msgstr "Mover a janela para o espaço de trabalho 1"
#: data/50-mutter-navigation.xml:12
msgid "Move window to workspace 2"
msgstr "Mover a janela para o espaço de trabalho 2"
#: data/50-mutter-navigation.xml:15
msgid "Move window to workspace 3"
msgstr "Mover a janela para o espaço de trabalho 3"
#: data/50-mutter-navigation.xml:18
msgid "Move window to workspace 4"
msgstr "Mover a janela para o espaço de trabalho 4"
#: data/50-mutter-navigation.xml:21
msgid "Move window to last workspace"
msgstr "Mover a janela para o último espaço de trabalho"
#: data/50-mutter-navigation.xml:24
msgid "Move window one workspace to the left"
msgstr "Mover a janela um espaço de trabalho à esquerda"
#: data/50-mutter-navigation.xml:27
msgid "Move window one workspace to the right"
msgstr "Mover a janela um espaço de trabalho à direita"
#: data/50-mutter-navigation.xml:30
msgid "Move window one workspace up"
msgstr "Mover a janela um espaço de trabalho acima"
#: data/50-mutter-navigation.xml:33
msgid "Move window one workspace down"
msgstr "Mover a janela um espaço de trabalho abaixo"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#: data/50-mutter-navigation.xml:36
msgid "Move window one monitor to the left"
msgstr "Mover janela para o monitor da esquerda"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#: data/50-mutter-navigation.xml:39
msgid "Move window one monitor to the right"
msgstr "Mover janela para o monitor da direita"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#: data/50-mutter-navigation.xml:42
msgid "Move window one monitor up"
msgstr "Mover janela para o monitor acima"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#: data/50-mutter-navigation.xml:45
msgid "Move window one monitor down"
msgstr "Mover janela para o monitor abaixo"
#: data/50-mutter-navigation.xml:49
msgid "Switch applications"
msgstr "Alternar aplicativos"
#: data/50-mutter-navigation.xml:54
msgid "Switch to previous application"
msgstr "Alternar para o aplicativo anterior"
#: data/50-mutter-navigation.xml:58
msgid "Switch windows"
msgstr "Alternar janelas"
#: data/50-mutter-navigation.xml:63
msgid "Switch to previous window"
msgstr "Alternar para a janela anterior"
#: data/50-mutter-navigation.xml:67
msgid "Switch windows of an application"
msgstr "Alternar as janelas de um aplicativo"
#: data/50-mutter-navigation.xml:72
msgid "Switch to previous window of an application"
msgstr "Alternar para a janela anterior de um aplicativo"
#: data/50-mutter-navigation.xml:76
msgid "Switch system controls"
msgstr "Alternar controles do sistema"
#: data/50-mutter-navigation.xml:81
msgid "Switch to previous system control"
msgstr "Alternar para o controle de sistema anterior"
#: data/50-mutter-navigation.xml:85
msgid "Switch windows directly"
msgstr "Alternar as janelas diretamente"
#: data/50-mutter-navigation.xml:90
msgid "Switch directly to previous window"
msgstr "Alternar diretamente para a janela anterior"
#: data/50-mutter-navigation.xml:94
msgid "Switch windows of an app directly"
msgstr "Alternar as janelas de um aplicativo diretamente"
#: data/50-mutter-navigation.xml:99
msgid "Switch directly to previous window of an app"
msgstr "Alternar diretamente para a janela anterior de um aplicativo"
#: data/50-mutter-navigation.xml:103
msgid "Switch system controls directly"
msgstr "Alternar os controles de sistema diretamente"
#: data/50-mutter-navigation.xml:108
msgid "Switch directly to previous system control"
msgstr "Alternar diretamente para o controle de sistema anterior"
#: data/50-mutter-navigation.xml:111
msgid "Hide all normal windows"
msgstr "Ocultar todas as janelas normais"
#: data/50-mutter-navigation.xml:114
msgid "Switch to workspace 1"
msgstr "Trocar para o espaço de trabalho 1"
#: data/50-mutter-navigation.xml:117
msgid "Switch to workspace 2"
msgstr "Trocar para o espaço de trabalho 2"
#: data/50-mutter-navigation.xml:120
msgid "Switch to workspace 3"
msgstr "Trocar para o espaço de trabalho 3"
#: data/50-mutter-navigation.xml:123
msgid "Switch to workspace 4"
msgstr "Trocar para o espaço de trabalho 4"
#: data/50-mutter-navigation.xml:126
msgid "Switch to last workspace"
msgstr "Trocar para o último espaço de trabalho"
#: data/50-mutter-navigation.xml:129
msgid "Move to workspace left"
msgstr "Move para o espaço de trabalho à esquerda"
#: data/50-mutter-navigation.xml:132
msgid "Move to workspace right"
msgstr "Move para o espaço de trabalho à direita"
#: data/50-mutter-navigation.xml:135
msgid "Move to workspace above"
msgstr "Mover para o espaço de trabalho acima"
#: data/50-mutter-navigation.xml:138
msgid "Move to workspace below"
msgstr "Mover para o espaço de trabalho abaixo"
#: data/50-mutter-system.xml:6
msgid "System"
msgstr "Sistema"
#: data/50-mutter-system.xml:8
msgid "Show the run command prompt"
msgstr "Mostrar o prompt de comando de execução"
#: data/50-mutter-system.xml:10
msgid "Show the activities overview"
msgstr "Mostrar o panorama de atividades"
#: data/50-mutter-windows.xml:6
msgid "Windows"
msgstr "Janelas"
#: data/50-mutter-windows.xml:8
msgid "Activate the window menu"
msgstr "Ativar o menu da janela"
#: data/50-mutter-windows.xml:10
msgid "Toggle fullscreen mode"
msgstr "Alternar modo de tela inteira"
#: data/50-mutter-windows.xml:12
msgid "Toggle maximization state"
msgstr "Alternar estado de maximização"
#: data/50-mutter-windows.xml:14
msgid "Maximize window"
msgstr "Maximizar a janela"
#: data/50-mutter-windows.xml:16
msgid "Restore window"
msgstr "Restaurar janela"
#: data/50-mutter-windows.xml:18
msgid "Toggle shaded state"
msgstr "Alternar estado sombreado"
#: data/50-mutter-windows.xml:20
msgid "Close window"
msgstr "Fechar janela"
#: data/50-mutter-windows.xml:22
msgid "Hide window"
msgstr "Ocultar janela"
#: data/50-mutter-windows.xml:24
msgid "Move window"
msgstr "Mover janela"
#: data/50-mutter-windows.xml:26
msgid "Resize window"
msgstr "Redimensionar janela"
#: data/50-mutter-windows.xml:29
msgid "Toggle window on all workspaces or one"
msgstr "Alternar a janela em todos os espaços de trabalho ou em apenas um"
#: data/50-mutter-windows.xml:31
msgid "Raise window if covered, otherwise lower it"
msgstr "Elevar a janela se estiver coberta; caso contrário, a abaixa"
#: data/50-mutter-windows.xml:33
msgid "Raise window above other windows"
msgstr "Elevar a janela para frente das outras"
#: data/50-mutter-windows.xml:35
msgid "Lower window below other windows"
msgstr "Colocar a janela atrás das outras"
#: data/50-mutter-windows.xml:37
msgid "Maximize window vertically"
msgstr "Maximizar a janela verticalmente"
#: data/50-mutter-windows.xml:39
msgid "Maximize window horizontally"
msgstr "Maximizar a janela horizontalmente"
#: data/50-mutter-windows.xml:43
msgid "View split on left"
msgstr "Visualizar divisão à esquerda"
#: data/50-mutter-windows.xml:47
msgid "View split on right"
msgstr "Visualizar divisão à direita"
#: data/mutter.desktop.in:4 #: data/mutter.desktop.in:4
msgid "Mutter" msgid "Mutter"
msgstr "Mutter" msgstr "Mutter"
@@ -287,6 +43,11 @@ msgstr ""
"Modificador a ser usado para operações de gerenciamento de janelas estendido" "Modificador a ser usado para operações de gerenciamento de janelas estendido"
#: data/org.gnome.mutter.gschema.xml.in:8 #: 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 "" msgid ""
"This key will initiate the “overlay”, which is a combination window overview " "This key will initiate the “overlay”, which is a combination window overview "
"and application launching system. The default is intended to be the “Windows " "and application launching system. The default is intended to be the “Windows "
@@ -294,8 +55,8 @@ msgid ""
"set to the empty string." "set to the empty string."
msgstr "" msgstr ""
"Esta chave irá iniciar a “sobreposição”, que é a combinação de visão de " "Esta chave irá iniciar a “sobreposição”, que é a combinação de visão de "
"janela e sistema de lançamento de aplicativos. O padrão pretendido é a " "janela e sistema de lançamento de aplicativos. O padrão pretendido é a "
"tecla Windows” no hardware do computador. É esperada para esta associação " "tecla Windows” no hardware do computador. É esperada para esta associação "
"tanto o padrão quanto a definição de uma string vazia." "tanto o padrão quanto a definição de uma string vazia."
#: data/org.gnome.mutter.gschema.xml.in:20 #: data/org.gnome.mutter.gschema.xml.in:20
@@ -333,6 +94,10 @@ msgid "Workspaces are managed dynamically"
msgstr "Áreas de trabalho são gerenciadas dinamicamente" msgstr "Áreas de trabalho são gerenciadas dinamicamente"
#: data/org.gnome.mutter.gschema.xml.in:41 #: 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 "" msgid ""
"Determines whether workspaces are managed dynamically or whether theres a " "Determines whether workspaces are managed dynamically or whether theres a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
@@ -371,6 +136,10 @@ msgid "Delay focus changes until the pointer stops moving"
msgstr "Atrasar alterações de foco até que o ponteiro pare de mover" msgstr "Atrasar alterações de foco até que o ponteiro pare de mover"
#: data/org.gnome.mutter.gschema.xml.in:69 #: 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 "" msgid ""
"If set to true, and the focus mode is either “sloppy” or “mouse” then the " "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 " "focus will not be changed immediately when entering a window, but only after "
@@ -385,6 +154,9 @@ msgid "Draggable border width"
msgstr "Largura da borda arrastável" msgstr "Largura da borda arrastável"
#: data/org.gnome.mutter.gschema.xml.in:80 #: 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 "" msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the themes visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
@@ -417,54 +189,14 @@ msgstr ""
"Quando verdadeiro, as novas janelas serão sempre colocadas no centro da tela " "Quando verdadeiro, as novas janelas serão sempre colocadas no centro da tela "
"ativa do monitor." "ativa do monitor."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "Habilitar recursos experimentais"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
"Para habilitar recursos experimentais, adicione a palavra-chave do recurso à "
"lista. Se o recurso exige ou não reiniciar o compositor, depende do recurso "
"dado. Qualquer recurso experimental não precisa estar disponível ou ser "
"configurável. Não espere que adicionar alguma coisa nesta configuração seja "
"a prova de futuro. Atualmente, palavras-chaves possíveis: • “scale-monitor-"
"framebuffer” — torna o mutter padrão para a disposição de monitores lógicos "
"em um espaço lógico coordenado por pixels, ao dimensionar buffers de quadros "
"de monitor em vez de conteúdo de janela, para gerenciar monitores HiDPI. Não "
"exige uma reinicialização. • “remote-desktop” — habilita suporte remoto. "
"Para oferecer suporte a desktop remoto com compartilhamento de tela, “screen-"
"cast” também deve estar habilitado. • “screen-cast” — habilita suporte a "
"gravação de tela."
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Selecione a janela a partir da aba instantânea" msgstr "Selecione a janela a partir da aba instantânea"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Cancelar aba instantânea" msgstr "Cancelar aba instantânea"
#: data/org.gnome.mutter.gschema.xml.in:155
#| msgid "Switch monitor"
msgid "Switch monitor configurations"
msgstr "Trocar configurações de monitor"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "Gira a configuração de monitor embutido"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Trocar para o VT 1" msgstr "Trocar para o VT 1"
@@ -513,53 +245,53 @@ msgstr "Trocar para o VT 11"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Trocar para o VT 12" msgstr "Trocar para o VT 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "Reabilita atalhos"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1800
#, c-format #, c-format
#| msgid "Mode Switch: Mode %d"
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Alternador de modo (Grupo %d)" msgstr "Alternador de modo (Grupo %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1822
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Trocar monitor" msgstr "Trocar monitor"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1824
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Mostrar ajuda na tela" msgstr "Mostrar ajuda na tela"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:675
msgid "Built-in display" msgid "Built-in display"
msgstr "Tela embutida" msgstr "Tela embutida"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:698
msgid "Unknown" msgid "Unknown"
msgstr "Desconhecido" msgstr "Desconhecido"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:700
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Monitor desconhecido" msgstr "Monitor desconhecido"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:708
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s de %s" msgstr "%s de %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:471
#, c-format #, c-format
#| msgid ""
#| "Another compositing manager is already running on screen %i on display "
#| "\"%s\"."
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
msgstr "Outro compositor de janelas está em execução na tela %i na área “%s”." msgstr "Outro compositor de janelas está em execução na tela %i na área “%s”."
@@ -568,8 +300,35 @@ msgstr "Outro compositor de janelas está em execução na tela %i na área “%
msgid "Bell event" msgid "Bell event"
msgstr "Evento de som" msgstr "Evento de som"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "“%s” não está respondendo."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "O aplicativo não está respondendo."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Você pode escolher aguardar um pouco e continuar ou forçar o aplicativo a "
"sair completamente."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Forçar sair"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Esperar"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
#| msgid "Failed to open X Window System display '%s'\n"
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
msgstr "Falha ao abrir a exibição “%s” do sistema de janelas X\n" msgstr "Falha ao abrir a exibição “%s” do sistema de janelas X\n"
@@ -609,34 +368,14 @@ msgstr "Executar como um compositor aninhado"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Executar como um servidor de tela cheia, ao invés de aninhado" msgstr "Executar como um servidor de tela cheia, ao invés de aninhado"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "“%s” não está respondendo."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "O aplicativo não está respondendo."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Você pode escolher aguardar um pouco e continuar ou forçar o aplicativo a "
"sair completamente."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "_Forçar sair"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "_Esperar"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, 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 "" msgid ""
"mutter %s\n" "mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" "Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
@@ -666,6 +405,9 @@ msgstr "Espaço de trabalho %d"
#: src/core/screen.c:580 #: src/core/screen.c:580
#, c-format #, c-format
#| msgid ""
#| "Display \"%s\" already has a window manager; try using the --replace "
#| "option to replace the current window manager."
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display “%s” already has a window manager; try using the --replace option to "
"replace the current window manager." "replace the current window manager."
@@ -675,6 +417,7 @@ msgstr ""
#: src/core/screen.c:665 #: src/core/screen.c:665
#, c-format #, c-format
#| msgid "Screen %d on display '%s' is invalid\n"
msgid "Screen %d on display “%s” is invalid\n" msgid "Screen %d on display “%s” is invalid\n"
msgstr "A tela %d na exibição “%s” é inválida\n" msgstr "A tela %d na exibição “%s” é inválida\n"
@@ -688,6 +431,9 @@ msgid "Mode Switch: Mode %d"
msgstr "Alternador de modo: Modo %d" msgstr "Alternador de modo: Modo %d"
#: src/x11/session.c:1815 #: src/x11/session.c:1815
#| msgid ""
#| "These windows do not support &quot;save current setup&quot; and will have "
#| "to be restarted manually next time you log in."
msgid "" msgid ""
"These windows do not support “save current setup” and will have to be " "These windows do not support “save current setup” and will have to be "
"restarted manually next time you log in." "restarted manually next time you log in."
@@ -700,6 +446,191 @@ msgstr ""
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (em %s)" msgstr "%s (em %s)"
#~ msgid "Navigation"
#~ msgstr "Navegação"
#~ msgid "Move window to workspace 1"
#~ msgstr "Mover a janela para o espaço de trabalho 1"
#~ msgid "Move window to workspace 2"
#~ msgstr "Mover a janela para o espaço de trabalho 2"
#~ msgid "Move window to workspace 3"
#~ msgstr "Mover a janela para o espaço de trabalho 3"
#~ msgid "Move window to workspace 4"
#~ msgstr "Mover a janela para o espaço de trabalho 4"
#~ msgid "Move window to last workspace"
#~ msgstr "Mover a janela para o último espaço de trabalho"
#~ msgid "Move window one workspace to the left"
#~ msgstr "Mover a janela um espaço de trabalho à esquerda"
#~ msgid "Move window one workspace to the right"
#~ msgstr "Mover a janela um espaço de trabalho à direita"
#~ msgid "Move window one workspace up"
#~ msgstr "Mover a janela um espaço de trabalho acima"
#~ msgid "Move window one workspace down"
#~ msgstr "Mover a janela um espaço de trabalho abaixo"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#~ msgid "Move window one monitor to the left"
#~ msgstr "Mover janela para o monitor da esquerda"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#~ msgid "Move window one monitor to the right"
#~ msgstr "Mover janela para o monitor da direita"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#~ msgid "Move window one monitor up"
#~ msgstr "Mover janela para o monitor acima"
# Em conformidade com a tradução do gsettings-desktop-schemas --Enrico
#~ msgid "Move window one monitor down"
#~ msgstr "Mover janela para o monitor abaixo"
#~ msgid "Switch applications"
#~ msgstr "Alternar aplicativos"
#~ msgid "Switch to previous application"
#~ msgstr "Alternar para o aplicativo anterior"
#~ msgid "Switch windows"
#~ msgstr "Alternar janelas"
#~ msgid "Switch to previous window"
#~ msgstr "Alternar para a janela anterior"
#~ msgid "Switch windows of an application"
#~ msgstr "Alternar as janelas de um aplicativo"
#~ msgid "Switch to previous window of an application"
#~ msgstr "Alternar para a janela anterior de um aplicativo"
#~| msgid "Switch system controls directly"
#~ msgid "Switch system controls"
#~ msgstr "Alternar controles do sistema"
#~ msgid "Switch to previous system control"
#~ msgstr "Alternar para o controle de sistema anterior"
#~ msgid "Switch windows directly"
#~ msgstr "Alternar as janelas diretamente"
#~ msgid "Switch directly to previous window"
#~ msgstr "Alternar diretamente para a janela anterior"
#~ msgid "Switch windows of an app directly"
#~ msgstr "Alternar as janelas de um aplicativo diretamente"
#~ msgid "Switch directly to previous window of an app"
#~ msgstr "Alternar diretamente para a janela anterior de um aplicativo"
#~ msgid "Switch system controls directly"
#~ msgstr "Alternar os controles de sistema diretamente"
#~ msgid "Switch directly to previous system control"
#~ msgstr "Alternar diretamente para o controle de sistema anterior"
#~ msgid "Hide all normal windows"
#~ msgstr "Ocultar todas as janelas normais"
#~ msgid "Switch to workspace 1"
#~ msgstr "Trocar para o espaço de trabalho 1"
#~ msgid "Switch to workspace 2"
#~ msgstr "Trocar para o espaço de trabalho 2"
#~ msgid "Switch to workspace 3"
#~ msgstr "Trocar para o espaço de trabalho 3"
#~ msgid "Switch to workspace 4"
#~ msgstr "Trocar para o espaço de trabalho 4"
#~ msgid "Switch to last workspace"
#~ msgstr "Trocar para o último espaço de trabalho"
#~ msgid "Move to workspace left"
#~ msgstr "Move para o espaço de trabalho à esquerda"
#~ msgid "Move to workspace right"
#~ msgstr "Move para o espaço de trabalho à direita"
#~ msgid "Move to workspace above"
#~ msgstr "Mover para o espaço de trabalho acima"
#~ msgid "Move to workspace below"
#~ msgstr "Mover para o espaço de trabalho abaixo"
#~ msgid "System"
#~ msgstr "Sistema"
#~ msgid "Show the run command prompt"
#~ msgstr "Mostrar o prompt de comando de execução"
#~ msgid "Show the activities overview"
#~ msgstr "Mostrar o panorama de atividades"
#~ msgid "Windows"
#~ msgstr "Janelas"
#~ msgid "Activate the window menu"
#~ msgstr "Ativar o menu da janela"
#~ msgid "Toggle fullscreen mode"
#~ msgstr "Alternar modo de tela inteira"
#~ msgid "Toggle maximization state"
#~ msgstr "Alternar estado de maximização"
#~ msgid "Maximize window"
#~ msgstr "Maximizar a janela"
#~ msgid "Restore window"
#~ msgstr "Restaurar janela"
#~ msgid "Toggle shaded state"
#~ msgstr "Alternar estado sombreado"
#~ msgid "Close window"
#~ msgstr "Fechar janela"
#~ msgid "Hide window"
#~ msgstr "Ocultar janela"
#~ msgid "Move window"
#~ msgstr "Mover janela"
#~ msgid "Resize window"
#~ msgstr "Redimensionar janela"
#~ msgid "Toggle window on all workspaces or one"
#~ msgstr "Alternar a janela em todos os espaços de trabalho ou em apenas um"
#~ msgid "Raise window if covered, otherwise lower it"
#~ msgstr "Elevar a janela se estiver coberta; caso contrário, a abaixa"
#~ msgid "Raise window above other windows"
#~ msgstr "Elevar a janela para frente das outras"
#~ msgid "Lower window below other windows"
#~ msgstr "Colocar a janela atrás das outras"
#~ msgid "Maximize window vertically"
#~ msgstr "Maximizar a janela verticalmente"
#~ msgid "Maximize window horizontally"
#~ msgstr "Maximizar a janela horizontalmente"
#~ msgid "View split on left"
#~ msgstr "Visualizar divisão à esquerda"
#~ msgid "View split on right"
#~ msgstr "Visualizar divisão à direita"
#~ msgid "background texture could not be created from file" #~ msgid "background texture could not be created from file"
#~ msgstr "textura de plano de fundo não pôde ser criado de arquivo" #~ msgstr "textura de plano de fundo não pôde ser criado de arquivo"

View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-09-08 11:30+0200\n" "POT-Creation-Date: 2017-08-07 10:01+0200\n"
"PO-Revision-Date: 2017-09-08 11:36+0200\n" "PO-Revision-Date: 2017-08-07 10:02+0200\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: sl_SI\n" "Language: sl_SI\n"
@@ -409,38 +409,40 @@ msgid ""
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or " "feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future " "configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “monitor-config-manager” — use the new "
"mutter default to layout logical monitors in a logical pixel coordinate " "monitor configuration system, aimed to replace the old one. This enables a "
"space, while scaling monitor framebuffers instead of window content, to " "higher level configuration API to be used by configuration applications, as "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "well as the ability to configure per logical monitor scale. • “scale-monitor-"
"enables remote desktop support. To support remote desktop with screen " "framebuffer” — makes mutter default to layout logical monitors in a logical "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " "pixel coordinate space, while scaling monitor framebuffers instead of window "
"screen cast support." "content, to manage HiDPI monitors. Does not require a restart. Also enabling "
"“monitor-config-manager” is required for this feature to be enabled."
msgstr "" msgstr ""
"Za omogočanje preizkusnih možnosti, dodajte na seznam ključne besedo " "Za omogočanje preizkusnih možnosti, dodajte ključno besedo možnosti na "
"možnosti. Ali vpisana možnost zahteva ponovni zagon sestavljalnika, je " "seznam. Ali zahteva možnost ponovni zagon sestavljalnika, je odvisno od "
"odvisno od posamezne možnosti. Te možnosti niso zahtevane niti nastavljive. " "posamezne možnosti. Te možnosti niso zahtevane niti nastavljive. Trenutno so "
"Trenutno so na voljo ključne besede: • »scale-monitor-framebuffer« določi " "na voljo ključne besede: • »monitor-config-manager« uporablja nov sistem "
"privzeto rabo sistema mutter za logične zaslone v logičnem točkovnem " "nastavitev, ki naj bi zamenjal obstoječega. Omogoča večjo nastavljivost API, "
"koordinatnem prostoru, pri čemer prilagaja predpomnilnik in ne vsebine za " "za uporabo pri prigramih za nastavitve lastnosti zaslona. • »scale-monitor-"
"upravljanje z zasloni HiDPI. Možnost ne zahteva ponovnega zagona. • »remote-" "framebuffer« določi privzeto rabo sistema mutter za logične zaslone v "
"desktop« omogoči podporo oddaljenim namizjem. Za souporabo zaslona mora " "logičnem točkovnem koordinatnem prostoru, pri čemer prilagaja predpomnilnik "
"biti omogočena tudi možnost »screen-cast«. • »screen-cast« omogoči podporo " "in ne vsebine za upravljanje z zasloni HiDPI. Možnost ne zahteva ponovnega "
"objavljanja na zaslon." "zagona. Za omogočanje te možnosti, mora biti omogočena tudi možnost »monitor-"
"config-manager«."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Izbor okna iz pojavnega zavihka" msgstr "Izbor okna iz pojavnega zavihka"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Prekliči pojavni zavihek" msgstr "Prekliči pojavni zavihek"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:161
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Nastavitve nadzornika preklopa" msgstr "Nastavitve nadzornika preklopa"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:166
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Zavrti vgrajene nastavitve zaslona" msgstr "Zavrti vgrajene nastavitve zaslona"
@@ -499,7 +501,7 @@ msgstr "Ponovno omogoči tipkovne bližnjice"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:2118
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Preklop načina (skupina %d)" msgstr "Preklop načina (skupina %d)"
@@ -507,30 +509,30 @@ msgstr "Preklop načina (skupina %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:2141
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Nadzornik preklopa" msgstr "Nadzornik preklopa"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:2143
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Pokaži zaslonsko pomoč" msgstr "Pokaži zaslonsko pomoč"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:927
msgid "Built-in display" msgid "Built-in display"
msgstr "Vgrajen zaslon" msgstr "Vgrajen zaslon"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:950
msgid "Unknown" msgid "Unknown"
msgstr "Neznano" msgstr "Neznano"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:952
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Neznan zaslon" msgstr "Neznan zaslon"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:960
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"

View File

@@ -9,20 +9,19 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"product=mutter&keywords=I18N+L10N&component=general\n" "&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-13 15:47+0000\n"
"PO-Revision-Date: 2017-08-29 20:46+0200\n" "PO-Revision-Date: 2017-08-15 20:40+0200\n"
"Last-Translator: Марко М. Костић <marko.m.kostic@gmail.com>\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: српски <gnome-sr@googlegroups.org>\n" "Language-Team: српски <gnome-sr@googlegroups.org>\n"
"Language: sr\n" "Language: sr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : "
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
"X-Generator: Poedit 2.0.3\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
msgid "Navigation" msgid "Navigation"
@@ -182,7 +181,7 @@ msgstr "Систем"
#: data/50-mutter-system.xml:8 #: data/50-mutter-system.xml:8
msgid "Show the run command prompt" msgid "Show the run command prompt"
msgstr "Приказује упит за извршавање наредбе" msgstr "Приказује промпт за покретање наредбе"
#: data/50-mutter-system.xml:10 #: data/50-mutter-system.xml:10
msgid "Show the activities overview" msgid "Show the activities overview"
@@ -198,11 +197,11 @@ msgstr "Активира мени прозора"
#: data/50-mutter-windows.xml:10 #: data/50-mutter-windows.xml:10
msgid "Toggle fullscreen mode" msgid "Toggle fullscreen mode"
msgstr "Искључује или укључује приказ преко целог екрана" msgstr "Искључује/укључује приказ преко целог екрана"
#: data/50-mutter-windows.xml:12 #: data/50-mutter-windows.xml:12
msgid "Toggle maximization state" msgid "Toggle maximization state"
msgstr "Искључује или укључује стање увећања" msgstr "Искључује/укључује стање увећања"
#: data/50-mutter-windows.xml:14 #: data/50-mutter-windows.xml:14
msgid "Maximize window" msgid "Maximize window"
@@ -214,7 +213,7 @@ msgstr "Враћа величину прозора"
#: data/50-mutter-windows.xml:18 #: data/50-mutter-windows.xml:18
msgid "Toggle shaded state" msgid "Toggle shaded state"
msgstr "Искључује или укључује стање засенчености" msgstr "Искључује/укључује стање засенчености"
#: data/50-mutter-windows.xml:20 #: data/50-mutter-windows.xml:20
msgid "Close window" msgid "Close window"
@@ -411,40 +410,43 @@ msgid ""
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or " "feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future " "configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “monitor-config-manager” — use the new "
"mutter default to layout logical monitors in a logical pixel coordinate " "monitor configuration system, aimed to replace the old one. This enables a "
"space, while scaling monitor framebuffers instead of window content, to " "higher level configuration API to be used by configuration applications, as "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "well as the ability to configure per logical monitor scale. • “scale-monitor-"
"enables remote desktop support. To support remote desktop with screen " "framebuffer” — makes mutter default to layout logical monitors in a logical "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " "pixel coordinate space, while scaling monitor framebuffers instead of window "
"screen cast support." "content, to manage HiDPI monitors. Does not require a restart. Also enabling "
"“monitor-config-manager” is required for this feature to be enabled."
msgstr "" msgstr ""
"Да укључите пробне функције, додајте кључну реч функције на списак. Да ли " "Да укључите експерименталне функције, додајте кључну реч функције на списак. "
"функција захтева поновно покретање састављача зависи од дате функције. Није " "Да ли функција захтева поновно покретање састављача зависи од дате функције. "
"потребно да нека пробна могућност буде и даље доступна или подесива. Немојте " "Није потребно да нека експериментална функција буде и даље доступна или "
"очекивати да додавање било чега у овом подешавању буде отпорно на будуће " "подесива. Немојте очекивати да додавање било чега у овом подешавању буде "
"измене. Тренутно могуће кључне речи су: • „scale-monitor-framebuffer“ — чини " "будући доказ. Тренутно могуће кључне речи су: • „monitor-config-manager“ — "
"да матер подразумевано распоређује логичке екране у логичком координантном " "користи нови систем подешавања монитора, који треба да замени стари. Ово "
"простору пиксела, приликом промене величине спремишта кадрова екрана уместо " "омогућава да АПИ подешавања вишег нивоа буде коришћен програмима подешавања, "
"садржаја прозора, зарад управљања екранима високе резолуције. Не захтева " "као и могућност подешавања скале монитора на нивоу логике. • „scale-monitor-"
"поновно покретање. • “remote-desktop” — омогућава удаљену техничку подршку. " "framebuffer“ — чини да матер пређе на распоред логичких монитора у логичком "
"Да бисте подржали удаљену техничку подршку са дељењем екрана, “screen-cast” " "координатном простору пиксела, док врши сразмеравање оквира монитора уместо "
"такође мора бити омогућен. • “screen-cast” — омогућава подршку за " "садржаја прозора, за управљање ХиДПИ мониторима. Не захтева поновно "
"пројектовање екрана." "покретање. Такође је потребно укључити „monitor-config-manager“ да би ова "
"функција била укључена."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Бира прозор из језичка искакања" msgstr "Бира прозор из језичка искакања"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Отказивање језичка искакања" msgstr "Отказивање језичка искакања"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:161
#| msgid "Switch monitor"
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Мења подешавања монитора" msgstr "Мења подешавања монитора"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:166
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Заокреће уграђена подешавања монитора" msgstr "Заокреће уграђена подешавања монитора"
@@ -503,7 +505,7 @@ msgstr "Поново укључивање пречица"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:2118
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Режим прекидача (група %d)" msgstr "Режим прекидача (група %d)"
@@ -511,30 +513,30 @@ msgstr "Режим прекидача (група %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:2141
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Промени монитор" msgstr "Промени монитор"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:2143
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Прикажи помоћ на екрану" msgstr "Прикажи помоћ на екрану"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:927
msgid "Built-in display" msgid "Built-in display"
msgstr "Уграђени дисплеј" msgstr "Уграђени дисплеј"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:950
msgid "Unknown" msgid "Unknown"
msgstr "Непознато" msgstr "Непознато"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:952
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Непознат дисплеј" msgstr "Непознат дисплеј"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:960
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"

View File

@@ -9,20 +9,19 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"product=mutter&keywords=I18N+L10N&component=general\n" "&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:15+0000\n" "POT-Creation-Date: 2017-08-13 15:47+0000\n"
"PO-Revision-Date: 2017-08-29 20:46+0200\n" "PO-Revision-Date: 2017-08-15 20:40+0200\n"
"Last-Translator: Marko M. Kostić <marko.m.kostic@gmail.com>\n" "Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
"Language-Team: srpski <gnome-sr@googlegroups.org>\n" "Language-Team: srpski <gnome-sr@googlegroups.org>\n"
"Language: sr\n" "Language: sr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : "
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
"X-Generator: Poedit 2.0.3\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
msgid "Navigation" msgid "Navigation"
@@ -182,7 +181,7 @@ msgstr "Sistem"
#: data/50-mutter-system.xml:8 #: data/50-mutter-system.xml:8
msgid "Show the run command prompt" msgid "Show the run command prompt"
msgstr "Prikazuje upit za izvršavanje naredbe" msgstr "Prikazuje prompt za pokretanje naredbe"
#: data/50-mutter-system.xml:10 #: data/50-mutter-system.xml:10
msgid "Show the activities overview" msgid "Show the activities overview"
@@ -198,11 +197,11 @@ msgstr "Aktivira meni prozora"
#: data/50-mutter-windows.xml:10 #: data/50-mutter-windows.xml:10
msgid "Toggle fullscreen mode" msgid "Toggle fullscreen mode"
msgstr "Isključuje ili uključuje prikaz preko celog ekrana" msgstr "Isključuje/uključuje prikaz preko celog ekrana"
#: data/50-mutter-windows.xml:12 #: data/50-mutter-windows.xml:12
msgid "Toggle maximization state" msgid "Toggle maximization state"
msgstr "Isključuje ili uključuje stanje uvećanja" msgstr "Isključuje/uključuje stanje uvećanja"
#: data/50-mutter-windows.xml:14 #: data/50-mutter-windows.xml:14
msgid "Maximize window" msgid "Maximize window"
@@ -214,7 +213,7 @@ msgstr "Vraća veličinu prozora"
#: data/50-mutter-windows.xml:18 #: data/50-mutter-windows.xml:18
msgid "Toggle shaded state" msgid "Toggle shaded state"
msgstr "Isključuje ili uključuje stanje zasenčenosti" msgstr "Isključuje/uključuje stanje zasenčenosti"
#: data/50-mutter-windows.xml:20 #: data/50-mutter-windows.xml:20
msgid "Close window" msgid "Close window"
@@ -411,40 +410,43 @@ msgid ""
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or " "feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future " "configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “monitor-config-manager” — use the new "
"mutter default to layout logical monitors in a logical pixel coordinate " "monitor configuration system, aimed to replace the old one. This enables a "
"space, while scaling monitor framebuffers instead of window content, to " "higher level configuration API to be used by configuration applications, as "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "well as the ability to configure per logical monitor scale. • “scale-monitor-"
"enables remote desktop support. To support remote desktop with screen " "framebuffer” — makes mutter default to layout logical monitors in a logical "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " "pixel coordinate space, while scaling monitor framebuffers instead of window "
"screen cast support." "content, to manage HiDPI monitors. Does not require a restart. Also enabling "
"“monitor-config-manager” is required for this feature to be enabled."
msgstr "" msgstr ""
"Da uključite probne funkcije, dodajte ključnu reč funkcije na spisak. Da li " "Da uključite eksperimentalne funkcije, dodajte ključnu reč funkcije na spisak. "
"funkcija zahteva ponovno pokretanje sastavljača zavisi od date funkcije. Nije " "Da li funkcija zahteva ponovno pokretanje sastavljača zavisi od date funkcije. "
"potrebno da neka probna mogućnost bude i dalje dostupna ili podesiva. Nemojte " "Nije potrebno da neka eksperimentalna funkcija bude i dalje dostupna ili "
"očekivati da dodavanje bilo čega u ovom podešavanju bude otporno na buduće " "podesiva. Nemojte očekivati da dodavanje bilo čega u ovom podešavanju bude "
"izmene. Trenutno moguće ključne reči su: • „scale-monitor-framebuffer“ — čini " "budući dokaz. Trenutno moguće ključne reči su: • „monitor-config-manager“ — "
"da mater podrazumevano raspoređuje logičke ekrane u logičkom koordinantnom " "koristi novi sistem podešavanja monitora, koji treba da zameni stari. Ovo "
"prostoru piksela, prilikom promene veličine spremišta kadrova ekrana umesto " "omogućava da API podešavanja višeg nivoa bude korišćen programima podešavanja, "
"sadržaja prozora, zarad upravljanja ekranima visoke rezolucije. Ne zahteva " "kao i mogućnost podešavanja skale monitora na nivou logike. • „scale-monitor-"
"ponovno pokretanje. • “remote-desktop” — omogućava udaljenu tehničku podršku. " "framebuffer“ — čini da mater pređe na raspored logičkih monitora u logičkom "
"Da biste podržali udaljenu tehničku podršku sa deljenjem ekrana, “screen-cast " "koordinatnom prostoru piksela, dok vrši srazmeravanje okvira monitora umesto "
"takođe mora biti omogućen. • “screen-cast” — omogućava podršku za " "sadržaja prozora, za upravljanje HiDPI monitorima. Ne zahteva ponovno "
"projektovanje ekrana." "pokretanje. Takođe je potrebno uključiti „monitor-config-manager“ da bi ova "
"funkcija bila uključena."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Bira prozor iz jezička iskakanja" msgstr "Bira prozor iz jezička iskakanja"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Otkazivanje jezička iskakanja" msgstr "Otkazivanje jezička iskakanja"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:161
#| msgid "Switch monitor"
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Menja podešavanja monitora" msgstr "Menja podešavanja monitora"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:166
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Zaokreće ugrađena podešavanja monitora" msgstr "Zaokreće ugrađena podešavanja monitora"
@@ -503,7 +505,7 @@ msgstr "Ponovo uključivanje prečica"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:2118
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Režim prekidača (grupa %d)" msgstr "Režim prekidača (grupa %d)"
@@ -511,30 +513,30 @@ msgstr "Režim prekidača (grupa %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:2141
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Promeni monitor" msgstr "Promeni monitor"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:2143
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Prikaži pomoć na ekranu" msgstr "Prikaži pomoć na ekranu"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:927
msgid "Built-in display" msgid "Built-in display"
msgstr "Ugrađeni displej" msgstr "Ugrađeni displej"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:950
msgid "Unknown" msgid "Unknown"
msgstr "Nepoznato" msgstr "Nepoznato"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:952
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Nepoznat displej" msgstr "Nepoznat displej"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:960
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"

124
po/sv.po
View File

@@ -9,17 +9,17 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-09-04 14:39+0000\n" "POT-Creation-Date: 2017-02-16 21:09+0000\n"
"PO-Revision-Date: 2017-09-05 00:14+0200\n" "PO-Revision-Date: 2017-02-21 01:20+0100\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.3\n" "X-Generator: Poedit 1.8.11\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
msgid "Navigation" msgid "Navigation"
@@ -397,54 +397,14 @@ msgstr ""
"När satt till \"true\", kommer nya fönster alltid att placeras centrerat på " "När satt till \"true\", kommer nya fönster alltid att placeras centrerat på "
"den aktiva skärmen." "den aktiva skärmen."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "Aktivera experimentella funktioner"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
"För att aktivera experimentella funktioner, lägg till funktionens nyckelord "
"till listan. Huruvida funktionen kräver att kompositionshanteraren startas "
"om beror på den angivna funktionen. En experimentell funktion har inget krav "
"på sig att fortfarande vara tillgänglig eller konfigurerbar. Förvänta dig "
"inte att något som läggs till i denna inställning garanterat kommer att "
"fungera i framtiden. För närvarande möjliga nyckelord: • ”scale-monitor-"
"framebuffer” — gör så att mutter som standard använder en layout med logiska "
"skärmar i en rymd av logiska bildpunktskoordinater, medan skärmars "
"rambuffert skalas i stället för fönsterinnehållet, för att hantera HiDPI-"
"skärmar. Kräver inte en omstart. • ”remote-desktop” — aktiverar stöd för "
"fjärrskrivbord. För stöd för fjärrskrivbord med skärmdelning måste “screen-"
"cast” också vara aktiverat. • “screen-cast” — aktiverar stöd för "
"skärminspelning."
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Välj fönster från flik-popup" msgstr "Välj fönster från flik-popup"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Avbryt flik-popup" msgstr "Avbryt flik-popup"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "Växla skärmkonfiguration"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "Roterar den inbyggda skärmkonfigurationen"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Växla till VT 1" msgstr "Växla till VT 1"
@@ -493,14 +453,10 @@ msgstr "Växla till VT 11"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Växla till VT 12" msgstr "Växla till VT 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "Återaktivera genvägar"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:1800
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Lägesväxel (grupp %d)" msgstr "Lägesväxel (grupp %d)"
@@ -508,37 +464,37 @@ msgstr "Lägesväxel (grupp %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:1822
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Växla skärm" msgstr "Växla skärm"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1824
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Visa hjälp på skärmen" msgstr "Visa hjälp på skärmen"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:675
msgid "Built-in display" msgid "Built-in display"
msgstr "Inbyggd display" msgstr "Inbyggd display"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:698
msgid "Unknown" msgid "Unknown"
msgstr "Okänd" msgstr "Okänd"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:700
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Okänd display" msgstr "Okänd display"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:708
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:471
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
@@ -548,6 +504,32 @@ msgstr "En annan kompositionshanterare körs redan på skärm %i på display ”
msgid "Bell event" msgid "Bell event"
msgstr "Ljudsignalhändelse" msgstr "Ljudsignalhändelse"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "”%s” svarar inte."
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "Programmet svarar inte."
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Du kan välja att vänta en kort stund på det för att fortsätta eller tvinga "
"programmet att helt avslutas."
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Tvinga avslut"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Vänta"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
@@ -589,32 +571,6 @@ msgstr "Kör som en nästlad kompositionshanterare"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Kör som en full display-tjänst, i stället för nästlad" msgstr "Kör som en full display-tjänst, i stället för nästlad"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "”%s” svarar inte."
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "Programmet svarar inte."
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Du kan välja att vänta en kort stund på det för att fortsätta eller tvinga "
"programmet att helt avslutas."
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "_Tvinga avslut"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "_Vänta"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, c-format
msgid "" msgid ""

View File

@@ -7,18 +7,18 @@
# İlker DAĞLI <ilker@ilkerdagli.info>, 2011. # İlker DAĞLI <ilker@ilkerdagli.info>, 2011.
# Muhammed EKEN <gnome@m-eken.com>, 2011. # Muhammed EKEN <gnome@m-eken.com>, 2011.
# Furkan Ahmet Kara <furkanahmetkara.fk@gmail.com>, 2017. # Furkan Ahmet Kara <furkanahmetkara.fk@gmail.com>, 2017.
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2014, 2015, 2016, 2017.
# Emin Tufan Çetin <etcetin@gmail.com>, 2017. # Emin Tufan Çetin <etcetin@gmail.com>, 2017.
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2014, 2015, 2016, 2017.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter master\n" "Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-29 16:09+0000\n" "POT-Creation-Date: 2017-08-13 15:47+0000\n"
"PO-Revision-Date: 2017-08-29 23:17+0300\n" "PO-Revision-Date: 2017-08-13 18:55+0300\n"
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n" "Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
"Language-Team: Türkçe <gnome-turk@gnome.org>\n" "Language-Team: Turkish <gnometurk@gnome.org>\n"
"Language: tr\n" "Language: tr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -386,15 +386,15 @@ msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:89 #: data/org.gnome.mutter.gschema.xml.in:89
msgid "Auto maximize nearly monitor sized windows" msgid "Auto maximize nearly monitor sized windows"
msgstr "Ekran boyutuna yakın pencereleri kendiliğinden ekranı kaplattır" msgstr "Ekran boyutuna yakın pencereleri otomatik ekranı kaplat"
#: data/org.gnome.mutter.gschema.xml.in:90 #: data/org.gnome.mutter.gschema.xml.in:90
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, new windows that are initially the size of the monitor "
"automatically get maximized." "automatically get maximized."
msgstr "" msgstr ""
"Etkinleştirildiğinde ekran boyutunda başlayan yeni pencereler kendiliğinden " "Etkinleştirildiğinde ekran boyutunda başlayan yeni pencereler otomatik "
"ekranı kaplar." "olarak ekranı kaplar."
#: data/org.gnome.mutter.gschema.xml.in:98 #: data/org.gnome.mutter.gschema.xml.in:98
msgid "Place new windows in the center" msgid "Place new windows in the center"
@@ -413,32 +413,19 @@ msgid "Enable experimental features"
msgstr "Deneysel özellikleri etkinleştir" msgstr "Deneysel özellikleri etkinleştir"
#: data/org.gnome.mutter.gschema.xml.in:108 #: data/org.gnome.mutter.gschema.xml.in:108
#| msgid ""
#| "To enable experimental features, add the feature keyword to the list. "
#| "Whether the feature requires restarting the compositor depends on the "
#| "given feature. Any experimental feature is not required to still be "
#| "available, or configurable. Dont expect adding anything in this setting "
#| "to be future proof. Currently possible keywords: • “monitor-config-"
#| "manager” — use the new monitor configuration system, aimed to replace the "
#| "old one. This enables a higher level configuration API to be used by "
#| "configuration applications, as well as the ability to configure per "
#| "logical monitor scale. • “scale-monitor-framebuffer” — makes mutter "
#| "default to layout logical monitors in a logical pixel coordinate space, "
#| "while scaling monitor framebuffers instead of window content, to manage "
#| "HiDPI monitors. Does not require a restart. Also enabling “monitor-config-"
#| "manager” is required for this feature to be enabled."
msgid "" msgid ""
"To enable experimental features, add the feature keyword to the list. " "To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given " "Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or " "feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future " "configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes " "proof. Currently possible keywords: • “monitor-config-manager” — use the new "
"mutter default to layout logical monitors in a logical pixel coordinate " "monitor configuration system, aimed to replace the old one. This enables a "
"space, while scaling monitor framebuffers instead of window content, to " "higher level configuration API to be used by configuration applications, as "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — " "well as the ability to configure per logical monitor scale. • “scale-monitor-"
"enables remote desktop support. To support remote desktop with screen " "framebuffer” — makes mutter default to layout logical monitors in a logical "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables " "pixel coordinate space, while scaling monitor framebuffers instead of window "
"screen cast support." "content, to manage HiDPI monitors. Does not require a restart. Also enabling "
"“monitor-config-manager” is required for this feature to be enabled."
msgstr "" msgstr ""
"Deneysel özellikleri etkinleştirmek için özelliğin anahtar sözcüğünü listeye " "Deneysel özellikleri etkinleştirmek için özelliğin anahtar sözcüğünü listeye "
"ekleyin. Özelliğin yeniden başlatmayı gerektirip gerektirmeyeceği verilen " "ekleyin. Özelliğin yeniden başlatmayı gerektirip gerektirmeyeceği verilen "
@@ -448,29 +435,26 @@ msgstr ""
"anda kullanılabilir anahtar sözcükler: • “monitor-config-manager” — " "anda kullanılabilir anahtar sözcükler: • “monitor-config-manager” — "
"eskisinin yerini alması amaçlanan yeni monitör yapılandırma sistemini " "eskisinin yerini alması amaçlanan yeni monitör yapılandırma sistemini "
"kullan. Bu, yapılandırma uygulamaları tarafından kullanılmak üzere daha " "kullan. Bu, yapılandırma uygulamaları tarafından kullanılmak üzere daha "
"yüksek düzeyde bir yapılandırma APIsini etkinleştirir ve ayrıca mantıksal " "yüksek düzeyde bir yapılandırma API'sini etkinleştirir ve ayrıca mantıksal "
"monitör ölçeğinde yapılandırma yapmaya olanak tanır.• “scale-monitor-" "monitör ölçeğinde yapılandırma yapmaya olanak tanır.• “scale-monitor-"
"framebuffer” — mutterin HiDPI monitörleri yönetmesi için pencere içeriği " "framebuffer” — mutterin HiDPI monitörleri yönetmesi için pencere içeriği "
"yerine monitör çerçeve arabelleğini ölçeklendirirken, mantıksal monitörleri " "yerine monitör çerçeve arabelleğini ölçeklendirirken, mantıksal monitörleri "
"mantıksal piksel koordinat aralığına yerleştirmesini öntanımlı yapar." "mantıksal piksel koordinat aralığına yerleştirmesini öntanımlı yapar."
"Yeniden başlatma gerektirmez. • “remote-desktop” — uzak masaüstü desteğini "
"etkinleştirir. Uzak masaüstünü ekran paylaşmayla desteklemek için “screen-"
"cast” mutlaka etkinleştirilmelidir. • “screen-cast” — ekran kaydı desteğini "
"etkinleştirir."
#: data/org.gnome.mutter.gschema.xml.in:145 #: data/org.gnome.mutter.gschema.xml.in:151
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Pencereyi, sekme açılır penceresinden seç" msgstr "Pencereyi, sekme açılır penceresinden seç"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:156
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Sekmeyi yeni pencerede açmayı iptal et" msgstr "Sekmeyi yeni pencerede açmayı iptal et"
#: data/org.gnome.mutter.gschema.xml.in:155 #: data/org.gnome.mutter.gschema.xml.in:161
msgid "Switch monitor configurations" msgid "Switch monitor configurations"
msgstr "Monitör yapılandırmaları arasında geçiş yap" msgstr "Monitör yapılandırmaları arasında geçiş yap"
#: data/org.gnome.mutter.gschema.xml.in:160 #: data/org.gnome.mutter.gschema.xml.in:166
#| msgid "Switch monitor configurations"
msgid "Rotates the built-in monitor configuration" msgid "Rotates the built-in monitor configuration"
msgstr "Yerleşik monitör yapılandırmaları arasında geçiş yapar" msgstr "Yerleşik monitör yapılandırmaları arasında geçiş yapar"
@@ -524,12 +508,12 @@ msgstr "VT 12ye geç"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54 #: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts" msgid "Re-enable shortcuts"
msgstr "Kısayolları yeniden etkinleştir" msgstr ""
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2151 #: src/backends/meta-input-settings.c:2118
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "Kip anahtarı (Group %d)" msgstr "Kip anahtarı (Group %d)"
@@ -537,30 +521,30 @@ msgstr "Kip anahtarı (Group %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2174 #: src/backends/meta-input-settings.c:2141
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Monitör değiştir" msgstr "Monitör değiştir"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:2143
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Ekranda yardımı göster" msgstr "Ekranda yardımı göster"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:927
msgid "Built-in display" msgid "Built-in display"
msgstr "Yerleşik ekran" msgstr "Yerleşik ekran"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:950
msgid "Unknown" msgid "Unknown"
msgstr "Bilinmiyor" msgstr "Bilinmiyor"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:952
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Bilinmeyen Ekran" msgstr "Bilinmeyen Ekran"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:960
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
@@ -628,19 +612,19 @@ msgstr "“%s” yanıt vermiyor."
#: src/core/meta-close-dialog-default.c:149 #: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding." msgid "Application is not responding."
msgstr "Uygulama yanıt vermiyor" msgstr "Uygulama cevap vermiyor"
#: src/core/meta-close-dialog-default.c:154 #: src/core/meta-close-dialog-default.c:154
msgid "" msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
msgstr "" msgstr ""
"Uygulamanın devam etmesi için bir süre beklemeyi seçebilir veya tümüyle " "Uygulamanın devam etmesi için bir müddet bekleyi seçebilirsiniz ya da "
ıkması için zorlayabilirsiniz." "uygulamanın tamamen çıkması için onu zorlayabilirsiniz."
#: src/core/meta-close-dialog-default.c:161 #: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Zorla Çık" msgstr "_Sonlandır"
#: src/core/meta-close-dialog-default.c:161 #: src/core/meta-close-dialog-default.c:161
msgid "_Wait" msgid "_Wait"
@@ -704,7 +688,7 @@ msgid ""
"restarted manually next time you log in." "restarted manually next time you log in."
msgstr "" msgstr ""
"Bu pencereler, “geçerli ayarları kaydet” özelliğini desteklemiyor ve bir " "Bu pencereler, “geçerli ayarları kaydet” özelliğini desteklemiyor ve bir "
"dahaki girişinizde elle yeniden başlatılmak zorundadır." "dahaki girişinizde elle yeniden başlatılmak zorunda."
#: src/x11/window-props.c:559 #: src/x11/window-props.c:559
#, c-format #, c-format

249
po/vi.po
View File

@@ -3,15 +3,15 @@
# This file is distributed under the same license as the Metacity package. # This file is distributed under the same license as the Metacity package.
# Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2002-2004, 2007, 2008, 2011-2013. # Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2002-2004, 2007, 2008, 2011-2013.
# Clytie Siddall <clytie@riverland.net.au>, 2005-2009. # Clytie Siddall <clytie@riverland.net.au>, 2005-2009.
# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016, 2017. # Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: metacity master\n" "Project-Id-Version: metacity master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-09-07 15:44+0000\n" "POT-Creation-Date: 2016-09-08 21:37+0000\n"
"PO-Revision-Date: 2017-09-09 08:26+0700\n" "PO-Revision-Date: 2016-09-09 08:14+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <gnome-vi-list@gnome.org>\n" "Language-Team: Vietnamese <gnome-vi-list@gnome.org>\n"
"Language: vi\n" "Language: vi\n"
@@ -59,7 +59,7 @@ msgstr "Chuyển cửa sổ lên một không gian làm việc"
#: data/50-mutter-navigation.xml:33 #: data/50-mutter-navigation.xml:33
msgid "Move window one workspace down" msgid "Move window one workspace down"
msgstr "Chuyển cửa sổ xuống một không gian làm việc" msgstr "Chuyển cửa sổ xuống vùng một làm việc"
#: data/50-mutter-navigation.xml:36 #: data/50-mutter-navigation.xml:36
msgid "Move window one monitor to the left" msgid "Move window one monitor to the left"
@@ -271,14 +271,14 @@ msgstr "Phím bổ trợ dùng cho chức năng quản lý cửa sổ mở rộn
#: data/org.gnome.mutter.gschema.xml.in:8 #: data/org.gnome.mutter.gschema.xml.in:8
msgid "" msgid ""
"This key will initiate the overlay, which is a combination window overview " "This key will initiate the \"overlay\", which is a combination window "
"and application launching system. The default is intended to be the “Windows " "overview and application launching system. The default is intended to be the "
"key on PC hardware. Its expected that this binding either the default or " "\"Windows key\" on PC hardware. It's expected that this binding either the "
"set to the empty string." "default or set to the empty string."
msgstr "" msgstr ""
"Phím này khởi tạo “overlay”, nơi mà tổ hợp tổng quát cửa sổ và hệ thống chạy " "Phím này kích hoạt \"overlay\", một tổ hợp tổng quát cửa sổ và hệ thống chạy "
"ứng dụng. Mặc định là \"phím Windows\" trên phần cứng PC. Nó được kỳ vọng " "ứng dụng. Mặc định là \"phím Windows\" trên phần cứng PC. Chứa một tổ hợp "
"rằng tổ hợp hoặc mặc định, hoặc chuỗi rỗng." "phím, hoặc mặc định, hoặc chuỗi rỗng."
#: data/org.gnome.mutter.gschema.xml.in:20 #: data/org.gnome.mutter.gschema.xml.in:20
msgid "Attach modal dialogs" msgid "Attach modal dialogs"
@@ -314,13 +314,13 @@ msgstr "Không gian làm việc được quản lý động"
#: data/org.gnome.mutter.gschema.xml.in:41 #: data/org.gnome.mutter.gschema.xml.in:41
msgid "" msgid ""
"Determines whether workspaces are managed dynamically or whether theres a " "Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)." "gnome.desktop.wm.preferences)."
msgstr "" msgstr ""
"Xác định không gian làm việc được quản lý động, hay cố định số không gian " "Xác định không gian làm việc được quản lý động, hay cố định số không gian "
"làm việc (xác định bởi khóa num-workspaces trong org.gnome.desktop.wm." "làm việc, xác định bởi khóa num-workspaces trong org.gnome.desktop.wm."
"preferences)." "preferences."
#: data/org.gnome.mutter.gschema.xml.in:50 #: data/org.gnome.mutter.gschema.xml.in:50
msgid "Workspaces only on primary" msgid "Workspaces only on primary"
@@ -350,13 +350,13 @@ msgstr "Khoảng chờ con trỏ dừng di chuyển trước khi thay đổi ti
#: data/org.gnome.mutter.gschema.xml.in:69 #: data/org.gnome.mutter.gschema.xml.in:69
msgid "" msgid ""
"If set to true, and the focus mode is either sloppy or mouse then the " "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"focus will not be changed immediately when entering a window, but only after " "the focus will not be changed immediately when entering a window, but only "
"the pointer stops moving." "after the pointer stops moving."
msgstr "" msgstr ""
"Nếu bật, và chế độ kích hoạtsloppy hay mouse thì sự kích hoạt sẽ " "Nếu bật, và chế độ tiêu điểm\"sloppy\" hay \"mouse\" thì cửa sổ có tiêu "
"không thay đổi tức thì khi vào cửa sổ, chỉ sau khi con trỏ ngừng di " "điểm sẽ được thay đổi tức thì khi vào cửa sổ, nhưng chỉ sau khi chuột ngừng "
"chuyển." "di chuyển."
#: data/org.gnome.mutter.gschema.xml.in:79 #: data/org.gnome.mutter.gschema.xml.in:79
msgid "Draggable border width" msgid "Draggable border width"
@@ -364,7 +364,7 @@ msgstr "Độ rộng biên có thể kéo"
#: data/org.gnome.mutter.gschema.xml.in:80 #: data/org.gnome.mutter.gschema.xml.in:80
msgid "" msgid ""
"The amount of total draggable borders. If the themes visible borders are " "The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
msgstr "" msgstr ""
"Kích thước biên có thể kéo. Nếu biên thấy được của chủ đề không đủ, biên vô " "Kích thước biên có thể kéo. Nếu biên thấy được của chủ đề không đủ, biên vô "
@@ -389,55 +389,17 @@ msgid ""
"When true, the new windows will always be put in the center of the active " "When true, the new windows will always be put in the center of the active "
"screen of the monitor." "screen of the monitor."
msgstr "" msgstr ""
"Nếu chọn, các cửa sổ mới sẽ luôn được đặt tại trung tâm của màn hình đang " "Nếu đúng, các cửa sổ mới sẽ luôn được đặt tại trung tâm của màn hình đang "
"hoạt động của màn hình." "hoạt động của màn hình."
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "Bật các tính băng thử nghiệm"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
"Để bật các tính năng thử nghiệm, thêm các từ khóa tính năng vào danh sách. "
"Việc tính năng mới có yêu cầu khởi động lại hay không là phụ thuộc vào tính "
"năng đã cho. Bất kỳ tính năng thử nghiệp nào không được yêu cầu vẫn sẵn "
"sàng, hoặc cấu hình được. Đừng cho rằng thêm bất kỳ thứ gì trong cài đặt này "
"thử nghiệm trong tương lai. Các từ khóa hiện có thể là: • “scale-monitor-"
"framebuffer” — làm cho mutter default to layout logical monitors trong một "
"không gian tọa độ điểm ảnh lôgíc, trong khi while scaling monitor "
"framebuffers instead of window content, để quản lý các màn hình HiDPI. Không "
"yêu cầu khởi động lại. • “remote-desktop” — cho phép điều khiển màn hình từ "
"xa. Để hỗ trợ điều khiển màn hình từ xa bằng cách chia sẻ màn hình, “screen-"
"cast” cũng phải được bật. • “screen-cast” — bật hỗ trợ chia sẻ màn hình."
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Chọn cửa sổ từ thanh nổi lên" msgstr "Chọn cửa sổ từ thanh nổi lên"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Hủy thanh nổi lên" msgstr "Hủy thanh nổi lên"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "Chuyển các cấu hình màn hình"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "Quay cấu hình màn hình tích hợp"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Chuyển sang VT 1" msgstr "Chuyển sang VT 1"
@@ -486,114 +448,58 @@ msgstr "Chuyển sang VT 11"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "Chuyển sang VT 12" msgstr "Chuyển sang VT 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54 #: src/backends/meta-input-settings.c:1707
msgid "Re-enable shortcuts"
msgstr "Bật-lại phím tắt"
#. TRANSLATORS: This string refers to a button that switches between
#. * different modes.
#.
#: src/backends/meta-input-settings.c:2151
#, c-format
msgid "Mode Switch (Group %d)"
msgstr "Chuyển chế độ(Nhóm %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs.
#.
#: src/backends/meta-input-settings.c:2174
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Chuyển màn hình" msgstr "Chuyển màn hình"
#: src/backends/meta-input-settings.c:2176 #: src/backends/meta-input-settings.c:1709
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "Hiển thị trợ giúp trên-màn-hình" msgstr "Hiển thị trợ giúp trên-màn-hình"
#: src/backends/meta-monitor-manager.c:903 #: src/backends/meta-monitor-manager.c:514
msgid "Built-in display" msgid "Built-in display"
msgstr "Màn hình tích hợp" msgstr "Màn hình tích hợp"
#: src/backends/meta-monitor-manager.c:926 #: src/backends/meta-monitor-manager.c:537
msgid "Unknown" msgid "Unknown"
msgstr "Không rõ" msgstr "Không rõ"
#: src/backends/meta-monitor-manager.c:928 #: src/backends/meta-monitor-manager.c:539
msgid "Unknown Display" msgid "Unknown Display"
msgstr "Không hiểu màn hình" msgstr "Không hiểu màn hình"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:936 #: src/backends/meta-monitor-manager.c:547
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:463
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "" msgstr ""
"Bộ quản lý cửa sổ đã đang chạy trên Màn hình %i trên bộ trình bày “%s”." "Bộ quản lý cửa sổ đã đang chạy trên Màn hình %i trên bộ trình bày \"%s\"."
#: src/core/bell.c:194 #: src/core/bell.c:194
msgid "Bell event" msgid "Bell event"
msgstr "Sự kiện chuông" msgstr "Sự kiện chuông"
#: src/core/display.c:608 #: src/core/delete.c:127
#, c-format
msgid "Failed to open X Window System display “%s”\n"
msgstr "Gặp lỗi khi mở bộ trình bày Hệ thống Cửa sổ X “%s”\n"
#: src/core/main.c:189
msgid "Disable connection to session manager"
msgstr "Vô hiệu hóa kết nối với bộ quản lý phiên làm việc"
#: src/core/main.c:195
msgid "Replace the running window manager"
msgstr "Thay thế bộ quản lý cửa sổ đang chạy"
#: src/core/main.c:201
msgid "Specify session management ID"
msgstr "Ghi rõ mã số quản lý phiên làm việc"
#: src/core/main.c:206
msgid "X Display to use"
msgstr "Bộ trình bày X cần dùng"
#: src/core/main.c:212
msgid "Initialize session from savefile"
msgstr "Khởi động phiên làm việc từ tập tin lưu"
#: src/core/main.c:218
msgid "Make X calls synchronous"
msgstr "Khiến các cú gọi X đồng bộ với nhau"
#: src/core/main.c:225
msgid "Run as a wayland compositor"
msgstr "Chạy như là một “wayland compositor”"
#: src/core/main.c:231
msgid "Run as a nested compositor"
msgstr "Chạy như là một “nested compositor”"
#: src/core/main.c:239
msgid "Run as a full display server, rather than nested"
msgstr "Chạy như là một dịch vụ hiển thị đầy đủ, thay cho lồng nhau"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format #, c-format
msgid "“%s” is not responding." msgid "“%s” is not responding."
msgstr "“%s” không trả lời." msgstr "“%s” không trả lời."
#: src/core/meta-close-dialog-default.c:149 #: src/core/delete.c:129
msgid "Application is not responding." msgid "Application is not responding."
msgstr "Ứng dụng không trả lời." msgstr "Ứng dụng không trả lời."
#: src/core/meta-close-dialog-default.c:154 #: src/core/delete.c:134
msgid "" msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
@@ -601,19 +507,60 @@ msgstr ""
"Bạn có thể chọn chờ một lúc cho nó tiếp tục hoặc buộc chấm dứt hoàn toàn ứng " "Bạn có thể chọn chờ một lúc cho nó tiếp tục hoặc buộc chấm dứt hoàn toàn ứng "
"dụng." "dụng."
#: src/core/meta-close-dialog-default.c:161 #: src/core/delete.c:141
msgid "_Wait"
msgstr "_Chờ"
#: src/core/delete.c:141
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Buộc thoát" msgstr "_Buộc thoát"
#: src/core/meta-close-dialog-default.c:161 #: src/core/display.c:590
msgid "_Wait" #, c-format
msgstr "_Chờ" msgid "Failed to open X Window System display '%s'\n"
msgstr "Gặp lỗi khi mở bộ trình bày Hệ thống Cửa sổ X \"%s\".\n"
#: src/core/main.c:182
msgid "Disable connection to session manager"
msgstr "Vô hiệu hóa kết nối với bộ quản lý phiên làm việc"
#: src/core/main.c:188
msgid "Replace the running window manager"
msgstr "Thay thế bộ quản lý cửa sổ đang chạy"
#: src/core/main.c:194
msgid "Specify session management ID"
msgstr "Ghi rõ mã số quản lý phiên làm việc"
#: src/core/main.c:199
msgid "X Display to use"
msgstr "Bộ trình bày X cần dùng"
#: src/core/main.c:205
msgid "Initialize session from savefile"
msgstr "Khởi động phiên làm việc từ tập tin lưu"
#: src/core/main.c:211
msgid "Make X calls synchronous"
msgstr "Khiến các cú gọi X đồng bộ với nhau"
#: src/core/main.c:218
msgid "Run as a wayland compositor"
msgstr "Chạy như là một “wayland compositor”"
#: src/core/main.c:224
msgid "Run as a nested compositor"
msgstr "Chạy như là một “nested compositor”"
#: src/core/main.c:232
msgid "Run as a full display server, rather than nested"
msgstr "Chạy như là một dịch vụ hiển thị đầy đủ, thay cho lồng nhau"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, c-format
msgid "" msgid ""
"mutter %s\n" "mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n" "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
"This is free software; see the source for copying conditions.\n" "This is free software; see the source for copying conditions.\n"
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A " "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
"PARTICULAR PURPOSE.\n" "PARTICULAR PURPOSE.\n"
@@ -638,38 +585,38 @@ msgstr "Phần bổ sung Mutter cần dùng"
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Không gian làm việc %d" msgstr "Không gian làm việc %d"
#: src/core/screen.c:580 #: src/core/screen.c:521
#, c-format #, c-format
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display \"%s\" already has a window manager; try using the --replace option "
"replace the current window manager." "to replace the current window manager."
msgstr "" msgstr ""
"Màn hình “%s” đã có bộ quản lý cửa sổ rồi; hãy thử dùng tùy chọn --replace " "Màn hình \"%s\" đã có bộ quản lý cửa sổ rồi; hãy thử dùng tùy chọn --"
"để thay thế bộ quản lý cửa sổ đang dùng." "replace” để thay thế bộ quản lý cửa sổ đang dùng."
#: src/core/screen.c:665 #: src/core/screen.c:606
#, c-format #, c-format
msgid "Screen %d on display %s is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Màn hình %d trên bộ trình bày “%s” không hợp lệ.\n" msgstr "Màn hình %d trên bộ trình bày \"%s\" không hợp lệ.\n"
#: src/core/util.c:120 #: src/core/util.c:120
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter đã được biên dịch không hỗ trợ chế độ chi tiết\n" msgstr "Mutter đã được biên dịch không hỗ trợ chế độ chi tiết\n"
#: src/wayland/meta-wayland-tablet-pad.c:563 #: src/wayland/meta-wayland-tablet-pad.c:595
#, c-format #, c-format
msgid "Mode Switch: Mode %d" msgid "Mode Switch: Mode %d"
msgstr "Chuyển chế độ: Chế độ %d" msgstr "Chuyển chế độ: Chế độ %d"
#: src/x11/session.c:1815 #: src/x11/session.c:1815
msgid "" msgid ""
"These windows do not support save current setup and will have to be " "These windows do not support &quot;save current setup&quot; and will have to "
"restarted manually next time you log in." "be restarted manually next time you log in."
msgstr "" msgstr ""
"Những cửa sổ này không hỗ trợ lưu cài đặt hiện tại” và sẽ phải khởi động " "Những cửa sổ này không hỗ trợ &quot;lưu cài đặt hiện thời&quot; và sẽ phải "
"lại bằng tay lần kế bạn đăng nhập." "khởi động lại bằng tay lần kế bạn đăng nhập."
#: src/x11/window-props.c:559 #: src/x11/window-props.c:548
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (trên %s)" msgstr "%s (trên %s)"

View File

@@ -10,16 +10,16 @@ msgstr ""
"Project-Id-Version: metacity 3.3.4\n" "Project-Id-Version: metacity 3.3.4\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-09-29 14:36+0000\n" "POT-Creation-Date: 2017-02-28 06:20+0000\n"
"PO-Revision-Date: 2017-10-01 22:57+0800\n" "PO-Revision-Date: 2017-03-01 10:24+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n" "Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n" "Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
"Language: zh_TW\n" "Language: zh_TW\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.0.3\n" "X-Generator: Poedit 1.8.12\n"
#: data/50-mutter-navigation.xml:6 #: data/50-mutter-navigation.xml:6
msgid "Navigation" msgid "Navigation"
@@ -383,48 +383,14 @@ msgid ""
"screen of the monitor." "screen of the monitor."
msgstr "當設定為「true」時新視窗會永遠置於使用中螢幕畫面的正中央。" msgstr "當設定為「true」時新視窗會永遠置於使用中螢幕畫面的正中央。"
#: data/org.gnome.mutter.gschema.xml.in:107 #: data/org.gnome.mutter.gschema.xml.in:120
msgid "Enable experimental features"
msgstr "啟用試驗性功能"
#: data/org.gnome.mutter.gschema.xml.in:108
msgid ""
"To enable experimental features, add the feature keyword to the list. "
"Whether the feature requires restarting the compositor depends on the given "
"feature. Any experimental feature is not required to still be available, or "
"configurable. Dont expect adding anything in this setting to be future "
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
"mutter default to layout logical monitors in a logical pixel coordinate "
"space, while scaling monitor framebuffers instead of window content, to "
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
"enables remote desktop support. To support remote desktop with screen "
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
"screen cast support."
msgstr ""
"若要啟用實驗性功能,請將功能關鍵字加入列表中。置於該功能是否須要重新啟動混成"
"器則視給予的功能而定。任何實驗性功能不一定能用、或是可以調整設定。請不要預期"
"在此設定中加入的任何東西未來都能存在。目前可用的關鍵字有: • “scale-monitor-"
"framebuffer” — 讓 mutter 預設採用邏輯像素座標空間的配置邏輯螢幕,而縮放螢幕 "
"framebuffer 則取代視窗內容以管理 HiDPI 螢幕。不須要重新啟動。 • “remote-"
"desktop” — 啟用遠端桌面支援。若要支援遠端桌面的螢幕分享則必須也啟用“screen-"
"cast”。• “screen-cast” — 啟用螢幕投放支援。"
#: data/org.gnome.mutter.gschema.xml.in:145
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "從分頁彈出項選擇視窗" msgstr "從分頁彈出項選擇視窗"
#: data/org.gnome.mutter.gschema.xml.in:150 #: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "取消分頁彈出項" msgstr "取消分頁彈出項"
#: data/org.gnome.mutter.gschema.xml.in:155
msgid "Switch monitor configurations"
msgstr "切換螢幕組態"
#: data/org.gnome.mutter.gschema.xml.in:160
msgid "Rotates the built-in monitor configuration"
msgstr "旋轉切換內建螢幕組態"
#: data/org.gnome.mutter.wayland.gschema.xml.in:6 #: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "切換至 VT 1" msgstr "切換至 VT 1"
@@ -473,14 +439,10 @@ msgstr "切換至 VT 11"
msgid "Switch to VT 12" msgid "Switch to VT 12"
msgstr "切換至 VT 12" msgstr "切換至 VT 12"
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
msgid "Re-enable shortcuts"
msgstr "重新啟用快捷鍵"
#. TRANSLATORS: This string refers to a button that switches between #. TRANSLATORS: This string refers to a button that switches between
#. * different modes. #. * different modes.
#. #.
#: src/backends/meta-input-settings.c:2157 #: src/backends/meta-input-settings.c:1800
#, c-format #, c-format
msgid "Mode Switch (Group %d)" msgid "Mode Switch (Group %d)"
msgstr "模式切換( 群組 %d)" msgstr "模式切換( 群組 %d)"
@@ -488,30 +450,30 @@ msgstr "模式切換( 群組 %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs. #. * mapping through the available outputs.
#. #.
#: src/backends/meta-input-settings.c:2180 #: src/backends/meta-input-settings.c:1822
msgid "Switch monitor" msgid "Switch monitor"
msgstr "切換螢幕" msgstr "切換監視器"
#: src/backends/meta-input-settings.c:2182 #: src/backends/meta-input-settings.c:1824
msgid "Show on-screen help" msgid "Show on-screen help"
msgstr "顯示螢幕求助" msgstr "顯示螢幕求助"
#: src/backends/meta-monitor-manager.c:894 #: src/backends/meta-monitor-manager.c:675
msgid "Built-in display" msgid "Built-in display"
msgstr "內建顯示" msgstr "內建顯示"
#: src/backends/meta-monitor-manager.c:917 #: src/backends/meta-monitor-manager.c:698
msgid "Unknown" msgid "Unknown"
msgstr "不明" msgstr "不明"
#: src/backends/meta-monitor-manager.c:919 #: src/backends/meta-monitor-manager.c:700
msgid "Unknown Display" msgid "Unknown Display"
msgstr "不明的顯示器" msgstr "不明的顯示器"
#. TRANSLATORS: this is a monitor vendor name, followed by a #. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"' #. * size in inches, like 'Dell 15"'
#. #.
#: src/backends/meta-monitor-manager.c:927 #: src/backends/meta-monitor-manager.c:708
#, c-format #, c-format
msgid "%s %s" msgid "%s %s"
msgstr "%s %s" msgstr "%s %s"
@@ -519,7 +481,7 @@ msgstr "%s %s"
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel # FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: src/compositor/compositor.c:476 #: src/compositor/compositor.c:471
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display “%s”." "Another compositing manager is already running on screen %i on display “%s”."
@@ -529,6 +491,30 @@ msgstr "在畫面「%2$s」中的第 %1$i 個螢幕中已啟動另一個組合
msgid "Bell event" msgid "Bell event"
msgstr "響鈴事件" msgstr "響鈴事件"
#. Translators: %s is a window title
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "“%s”沒有回應。"
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "應用程式沒有回應。"
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "您可以選擇稍等一下,或者強制程式立即結束。"
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "強制結束(_F)"
#: src/core/delete.c:141
msgid "_Wait"
msgstr "等待(_W)"
#: src/core/display.c:608 #: src/core/display.c:608
#, c-format #, c-format
msgid "Failed to open X Window System display “%s”\n" msgid "Failed to open X Window System display “%s”\n"
@@ -570,30 +556,6 @@ msgstr "以巢狀組合器執行"
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "以完全顯示伺服器執行,而非巢狀" msgstr "以完全顯示伺服器執行,而非巢狀"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:147
#, c-format
msgid "“%s” is not responding."
msgstr "「%s」沒有回應。"
#: src/core/meta-close-dialog-default.c:149
msgid "Application is not responding."
msgstr "應用程式沒有回應。"
#: src/core/meta-close-dialog-default.c:154
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "您可以選擇稍等一下讓它繼續,或者強制完全退出程式。"
#: src/core/meta-close-dialog-default.c:161
msgid "_Force Quit"
msgstr "強制退出(_F)"
#: src/core/meta-close-dialog-default.c:161
msgid "_Wait"
msgstr "等待(_W)"
#: src/core/mutter.c:39 #: src/core/mutter.c:39
#, c-format #, c-format
msgid "" msgid ""
@@ -604,8 +566,8 @@ msgid ""
"PARTICULAR PURPOSE.\n" "PARTICULAR PURPOSE.\n"
msgstr "" msgstr ""
"mutter %s\n" "mutter %s\n"
"著作權所有 (C) 2001-%d Havoc Pennington, Red Hat, Inc. 及其它開發者\n" "權所有 (C) 2001-%d Havoc Pennington, Red Hat, Inc. 及其它開發者\n"
"本程式是自由軟體;有關著作權的詳情請參考源程式碼。\n" "本程式是自由軟體;有關權的詳情請參考源程式碼。\n"
"本程式不負任何擔保責任;亦無對適售性或特定目的適用性所為的默示性擔保。\n" "本程式不負任何擔保責任;亦無對適售性或特定目的適用性所為的默示性擔保。\n"
#: src/core/mutter.c:53 #: src/core/mutter.c:53
@@ -622,7 +584,7 @@ msgstr "要使用的 Mutter 外掛程式"
msgid "Workspace %d" msgid "Workspace %d"
msgstr "工作區 %d" msgstr "工作區 %d"
#: src/core/screen.c:582 #: src/core/screen.c:580
#, c-format #, c-format
msgid "" msgid ""
"Display “%s” already has a window manager; try using the --replace option to " "Display “%s” already has a window manager; try using the --replace option to "
@@ -631,7 +593,7 @@ msgstr ""
"畫面「%s」已經有了視窗管理員請嘗試使用 --replace 選項來替換目前的視窗管理" "畫面「%s」已經有了視窗管理員請嘗試使用 --replace 選項來替換目前的視窗管理"
"員。" "員。"
#: src/core/screen.c:667 #: src/core/screen.c:665
#, c-format #, c-format
msgid "Screen %d on display “%s” is invalid\n" msgid "Screen %d on display “%s” is invalid\n"
msgstr "畫面「%2$s」中的第 %1$d 個螢幕無效\n" msgstr "畫面「%2$s」中的第 %1$d 個螢幕無效\n"

View File

@@ -2,13 +2,6 @@
if HAVE_WAYLAND if HAVE_WAYLAND
test_programs = \
mutter-test-client \
mutter-test-runner \
mutter-test-unit-tests \
mutter-test-headless-start-test \
$(NULL)
if BUILDOPT_INSTALL_TESTS if BUILDOPT_INSTALL_TESTS
stackingdir = $(pkgdatadir)/tests/stacking stackingdir = $(pkgdatadir)/tests/stacking
dist_stacking_DATA = \ dist_stacking_DATA = \
@@ -26,9 +19,9 @@ installedtestsdir = $(datadir)/installed-tests/mutter
installedtests_DATA = mutter-all.test installedtests_DATA = mutter-all.test
installedtestsbindir = $(libexecdir)/installed-tests/mutter installedtestsbindir = $(libexecdir)/installed-tests/mutter
installedtestsbin_PROGRAMS = $(test_programs) installedtestsbin_PROGRAMS = mutter-test-client mutter-test-runner mutter-test-unit-tests
else else
noinst_PROGRAMS += $(test_programs) noinst_PROGRAMS += mutter-test-client mutter-test-runner mutter-test-unit-tests
endif endif
EXTRA_DIST += tests/mutter-all.test.in EXTRA_DIST += tests/mutter-all.test.in
@@ -36,15 +29,10 @@ EXTRA_DIST += tests/mutter-all.test.in
mutter_test_client_SOURCES = tests/test-client.c mutter_test_client_SOURCES = tests/test-client.c
mutter_test_client_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la mutter_test_client_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
mutter_test_runner_SOURCES = \ mutter_test_runner_SOURCES = tests/test-runner.c
tests/test-utils.c \
tests/test-utils.h \
tests/test-runner.c
mutter_test_runner_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la mutter_test_runner_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
mutter_test_unit_tests_SOURCES = \ mutter_test_unit_tests_SOURCES = \
tests/test-utils.c \
tests/test-utils.h \
tests/unit-tests.c \ tests/unit-tests.c \
tests/meta-backend-test.c \ tests/meta-backend-test.c \
tests/meta-backend-test.h \ tests/meta-backend-test.h \
@@ -61,16 +49,7 @@ mutter_test_unit_tests_SOURCES = \
$(NULL) $(NULL)
mutter_test_unit_tests_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la mutter_test_unit_tests_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
mutter_test_headless_start_test_SOURCES = \ .PHONY: run-tests run-test-runner-tests run-unit-tests
tests/headless-start-test.c \
tests/meta-backend-test.c \
tests/meta-backend-test.h \
tests/meta-monitor-manager-test.c \
tests/meta-monitor-manager-test.h \
$(NULL)
mutter_test_headless_start_test_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API_VERSION).la
.PHONY: run-tests run-test-runner-tests run-unit-tests run-headless-start-test
run-test-runner-tests: mutter-test-client mutter-test-runner run-test-runner-tests: mutter-test-client mutter-test-runner
./mutter-test-runner $(dist_stacking_DATA) ./mutter-test-runner $(dist_stacking_DATA)
@@ -78,10 +57,7 @@ run-test-runner-tests: mutter-test-client mutter-test-runner
run-unit-tests: mutter-test-unit-tests run-unit-tests: mutter-test-unit-tests
./mutter-test-unit-tests ./mutter-test-unit-tests
run-headless-start-test: mutter-test-headless-start-test run-tests: run-test-runner-tests run-unit-tests
./mutter-test-headless-start-test
run-tests: run-test-runner-tests run-unit-tests run-headless-start-test
endif endif

View File

@@ -53,13 +53,6 @@ mutter_built_sources = \
meta-enum-types.c \ meta-enum-types.c \
$(NULL) $(NULL)
if HAVE_REMOTE_DESKTOP
mutter_built_sources += \
$(dbus_remote_desktop_built_sources) \
$(dbus_screen_cast_built_sources) \
$(NULL)
endif
if HAVE_WAYLAND if HAVE_WAYLAND
mutter_built_sources += \ mutter_built_sources += \
pointer-gestures-unstable-v1-protocol.c \ pointer-gestures-unstable-v1-protocol.c \
@@ -181,8 +174,6 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
meta/boxes.h \ meta/boxes.h \
core/meta-border.c \ core/meta-border.c \
core/meta-border.h \ core/meta-border.h \
core/meta-fraction.c \
core/meta-fraction.h \
compositor/clutter-utils.c \ compositor/clutter-utils.c \
compositor/clutter-utils.h \ compositor/clutter-utils.h \
compositor/cogl-utils.c \ compositor/cogl-utils.c \
@@ -256,12 +247,13 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
core/edge-resistance.h \ core/edge-resistance.h \
core/events.c \ core/events.c \
core/events.h \ core/events.h \
core/errors.c \
meta/errors.h \
core/frame.c \ core/frame.c \
core/frame.h \ core/frame.h \
core/meta-gesture-tracker.c \ core/meta-gesture-tracker.c \
core/meta-gesture-tracker-private.h \ core/meta-gesture-tracker-private.h \
core/meta-workspace-manager.c \
core/meta-workspace-manager-private.h \
meta/meta-workspace-manager.h \
core/keybindings.c \ core/keybindings.c \
core/keybindings-private.h \ core/keybindings-private.h \
core/main-private.h \ core/main-private.h \
@@ -270,9 +262,6 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
core/place.h \ core/place.h \
core/prefs.c \ core/prefs.c \
meta/prefs.h \ meta/prefs.h \
core/screen.c \
core/screen-private.h \
meta/screen.h \
core/startup-notification.c \ core/startup-notification.c \
core/startup-notification-private.h \ core/startup-notification-private.h \
meta/types.h \ meta/types.h \
@@ -299,6 +288,11 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
ui/theme-private.h \ ui/theme-private.h \
ui/ui.c \ ui/ui.c \
x11/atomnames.h \ x11/atomnames.h \
x11/meta-x11-display.c \
x11/meta-x11-display-private.h \
meta/meta-x11-display.h \
x11/meta-x11-errors.c \
meta/meta-x11-errors.h \
x11/events.c \ x11/events.c \
x11/events.h \ x11/events.h \
x11/group-private.h \ x11/group-private.h \
@@ -320,29 +314,6 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
x11/mutter-Xatomtype.h \ x11/mutter-Xatomtype.h \
$(NULL) $(NULL)
if HAVE_REMOTE_DESKTOP
libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES += \
backends/meta-dbus-session-watcher.c \
backends/meta-dbus-session-watcher.h \
backends/meta-remote-desktop.c \
backends/meta-remote-desktop.h \
backends/meta-remote-desktop-session.c \
backends/meta-remote-desktop-session.h \
backends/meta-screen-cast.c \
backends/meta-screen-cast.h \
backends/meta-screen-cast-monitor-stream.c \
backends/meta-screen-cast-monitor-stream.h \
backends/meta-screen-cast-monitor-stream-src.c \
backends/meta-screen-cast-monitor-stream-src.h \
backends/meta-screen-cast-session.c \
backends/meta-screen-cast-session.h \
backends/meta-screen-cast-stream.c \
backends/meta-screen-cast-stream.h \
backends/meta-screen-cast-stream-src.c \
backends/meta-screen-cast-stream-src.h \
$(NULL)
endif
if HAVE_WAYLAND if HAVE_WAYLAND
libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES += \ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES += \
compositor/meta-surface-actor-wayland.c \ compositor/meta-surface-actor-wayland.c \
@@ -481,7 +452,6 @@ libmutterinclude_headers = \
meta/compositor-mutter.h \ meta/compositor-mutter.h \
meta/compositor.h \ meta/compositor.h \
meta/display.h \ meta/display.h \
meta/errors.h \
meta/group.h \ meta/group.h \
meta/keybindings.h \ meta/keybindings.h \
meta/main.h \ meta/main.h \
@@ -502,8 +472,10 @@ libmutterinclude_headers = \
meta/meta-shadow-factory.h \ meta/meta-shadow-factory.h \
meta/meta-window-actor.h \ meta/meta-window-actor.h \
meta/meta-window-shape.h \ meta/meta-window-shape.h \
meta/meta-workspace-manager.h \
meta/meta-x11-display.h \
meta/meta-x11-errors.h \
meta/prefs.h \ meta/prefs.h \
meta/screen.h \
meta/theme.h \ meta/theme.h \
meta/types.h \ meta/types.h \
meta/util.h \ meta/util.h \
@@ -611,8 +583,6 @@ EXTRA_DIST += \
org.freedesktop.login1.xml \ org.freedesktop.login1.xml \
org.gnome.Mutter.DisplayConfig.xml \ org.gnome.Mutter.DisplayConfig.xml \
org.gnome.Mutter.IdleMonitor.xml \ org.gnome.Mutter.IdleMonitor.xml \
org.gnome.Mutter.RemoteDesktop.xml \
org.gnome.Mutter.ScreenCast.xml \
backends/native/gen-default-modes.py \ backends/native/gen-default-modes.py \
$(NULL) $(NULL)
@@ -661,26 +631,6 @@ $(dbus_idle_built_sources) : Makefile.am org.gnome.Mutter.IdleMonitor.xml
--c-generate-autocleanup all \ --c-generate-autocleanup all \
$(srcdir)/org.gnome.Mutter.IdleMonitor.xml $(srcdir)/org.gnome.Mutter.IdleMonitor.xml
if HAVE_REMOTE_DESKTOP
dbus_remote_desktop_built_sources = meta-dbus-remote-desktop.c meta-dbus-remote-desktop.h
$(dbus_remote_desktop_built_sources) : Makefile.am org.gnome.Mutter.RemoteDesktop.xml
$(AM_V_GEN)gdbus-codegen \
--interface-prefix org.gnome.Mutter \
--c-namespace MetaDBus \
--generate-c-code meta-dbus-remote-desktop \
$(srcdir)/org.gnome.Mutter.RemoteDesktop.xml
dbus_screen_cast_built_sources = meta-dbus-screen-cast.c meta-dbus-screen-cast.h
$(dbus_screen_cast_built_sources) : Makefile.am org.gnome.Mutter.ScreenCast.xml
$(AM_V_GEN)gdbus-codegen \
--interface-prefix org.gnome.Mutter \
--c-namespace MetaDBus \
--generate-c-code meta-dbus-screen-cast \
$(srcdir)/org.gnome.Mutter.ScreenCast.xml
endif
dbus_login1_built_sources = meta-dbus-login1.c meta-dbus-login1.h dbus_login1_built_sources = meta-dbus-login1.c meta-dbus-login1.h
$(dbus_login1_built_sources) : Makefile.am org.freedesktop.login1.xml $(dbus_login1_built_sources) : Makefile.am org.freedesktop.login1.xml

View File

@@ -38,9 +38,6 @@
#include "meta-input-settings-private.h" #include "meta-input-settings-private.h"
#include "backends/meta-egl.h" #include "backends/meta-egl.h"
#include "backends/meta-pointer-constraint.h" #include "backends/meta-pointer-constraint.h"
#ifdef HAVE_REMOTE_DESKTOP
#include "backends/meta-remote-desktop.h"
#endif
#include "backends/meta-renderer.h" #include "backends/meta-renderer.h"
#include "backends/meta-settings-private.h" #include "backends/meta-settings-private.h"
#include "core/util-private.h" #include "core/util-private.h"
@@ -123,10 +120,6 @@ MetaRenderer * meta_backend_get_renderer (MetaBackend *backend);
MetaEgl * meta_backend_get_egl (MetaBackend *backend); MetaEgl * meta_backend_get_egl (MetaBackend *backend);
MetaSettings * meta_backend_get_settings (MetaBackend *backend); MetaSettings * meta_backend_get_settings (MetaBackend *backend);
#ifdef HAVE_REMOTE_DESKTOP
MetaRemoteDesktop * meta_backend_get_remote_desktop (MetaBackend *backend);
#endif
gboolean meta_backend_grab_device (MetaBackend *backend, gboolean meta_backend_grab_device (MetaBackend *backend,
int device_id, int device_id,
uint32_t timestamp); uint32_t timestamp);

View File

@@ -29,19 +29,13 @@
#include <clutter/clutter-mutter.h> #include <clutter/clutter-mutter.h>
#include <meta/meta-backend.h> #include <meta/meta-backend.h>
#include <meta/main.h> #include <meta/main.h>
#include <meta/util.h>
#include "meta-backend-private.h" #include "meta-backend-private.h"
#include "meta-input-settings-private.h" #include "meta-input-settings-private.h"
#include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-backend-x11.h"
#include "meta-cursor-tracker-private.h" #include "meta-cursor-tracker-private.h"
#include "meta-stage.h" #include "meta-stage.h"
#ifdef HAVE_REMOTE_DESKTOP
#include "backends/meta-dbus-session-watcher.h"
#include "backends/meta-screen-cast.h"
#include "backends/meta-remote-desktop.h"
#endif
#ifdef HAVE_NATIVE_BACKEND #ifdef HAVE_NATIVE_BACKEND
#include "backends/native/meta-backend-native.h" #include "backends/native/meta-backend-native.h"
#endif #endif
@@ -91,17 +85,10 @@ struct _MetaBackendPrivate
MetaRenderer *renderer; MetaRenderer *renderer;
MetaEgl *egl; MetaEgl *egl;
MetaSettings *settings; MetaSettings *settings;
#ifdef HAVE_REMOTE_DESKTOP
MetaDbusSessionWatcher *dbus_session_watcher;
MetaScreenCast *screen_cast;
MetaRemoteDesktop *remote_desktop;
#endif
ClutterBackend *clutter_backend; ClutterBackend *clutter_backend;
ClutterActor *stage; ClutterActor *stage;
gboolean is_pointer_position_initialized;
guint device_update_idle_id; guint device_update_idle_id;
GHashTable *device_monitors; GHashTable *device_monitors;
@@ -130,11 +117,6 @@ meta_backend_finalize (GObject *object)
g_clear_object (&priv->monitor_manager); g_clear_object (&priv->monitor_manager);
g_clear_object (&priv->orientation_manager); g_clear_object (&priv->orientation_manager);
g_clear_object (&priv->input_settings); g_clear_object (&priv->input_settings);
#ifdef HAVE_REMOTE_DESKTOP
g_clear_object (&priv->remote_desktop);
g_clear_object (&priv->screen_cast);
g_clear_object (&priv->dbus_session_watcher);
#endif
if (priv->device_update_idle_id) if (priv->device_update_idle_id)
g_source_remove (priv->device_update_idle_id); g_source_remove (priv->device_update_idle_id);
@@ -187,17 +169,13 @@ meta_backend_monitors_changed (MetaBackend *backend)
if (clutter_input_device_get_coords (device, NULL, &point)) if (clutter_input_device_get_coords (device, NULL, &point))
{ {
/* If we're outside all monitors, warp the pointer back inside */ /* If we're outside all monitors, warp the pointer back inside */
if ((!meta_monitor_manager_get_logical_monitor_at (monitor_manager, if (!meta_monitor_manager_get_logical_monitor_at (monitor_manager,
point.x, point.y) || point.x, point.y) &&
!priv->is_pointer_position_initialized) &&
!meta_monitor_manager_is_headless (monitor_manager)) !meta_monitor_manager_is_headless (monitor_manager))
{
center_pointer (backend); center_pointer (backend);
priv->is_pointer_position_initialized = TRUE;
}
} }
meta_cursor_renderer_force_update (priv->cursor_renderer); meta_settings_update_ui_scaling_factor (priv->settings);
} }
void void
@@ -409,28 +387,6 @@ meta_backend_create_input_settings (MetaBackend *backend)
return META_BACKEND_GET_CLASS (backend)->create_input_settings (backend); return META_BACKEND_GET_CLASS (backend)->create_input_settings (backend);
} }
#ifdef HAVE_REMOTE_DESKTOP
static gboolean
is_screen_cast_enabled (MetaBackend *backend)
{
MetaSettings *settings = meta_backend_get_settings (backend);
return meta_settings_is_experimental_feature_enabled (
settings,
META_EXPERIMENTAL_FEATURE_SCREEN_CAST);
}
static gboolean
is_remote_desktop_enabled (MetaBackend *backend)
{
MetaSettings *settings = meta_backend_get_settings (backend);
return meta_settings_is_experimental_feature_enabled (
settings,
META_EXPERIMENTAL_FEATURE_REMOTE_DESKTOP);
}
#endif /* HAVE_REMOTE_DESKTOP */
static void static void
meta_backend_real_post_init (MetaBackend *backend) meta_backend_real_post_init (MetaBackend *backend)
{ {
@@ -462,19 +418,7 @@ meta_backend_real_post_init (MetaBackend *backend)
priv->input_settings = meta_backend_create_input_settings (backend); priv->input_settings = meta_backend_create_input_settings (backend);
#ifdef HAVE_REMOTE_DESKTOP
priv->dbus_session_watcher = g_object_new (META_TYPE_DBUS_SESSION_WATCHER, NULL);
if (is_screen_cast_enabled (backend))
priv->screen_cast = meta_screen_cast_new (priv->dbus_session_watcher);
if (is_remote_desktop_enabled (backend))
priv->remote_desktop = meta_remote_desktop_new (priv->dbus_session_watcher);
#endif /* HAVE_REMOTE_DESKTOP */
if (!meta_monitor_manager_is_headless (priv->monitor_manager))
{
center_pointer (backend); center_pointer (backend);
priv->is_pointer_position_initialized = TRUE;
}
} }
static MetaCursorRenderer * static MetaCursorRenderer *
@@ -559,26 +503,6 @@ meta_backend_class_init (MetaBackendClass *klass)
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0; stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0;
} }
static void
experimental_features_changed (MetaSettings *settings,
MetaExperimentalFeature old_experimental_features,
MetaBackend *backend)
{
#ifdef HAVE_REMOTE_DESKTOP
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
if (is_screen_cast_enabled (backend) && !priv->screen_cast)
priv->screen_cast = meta_screen_cast_new (priv->dbus_session_watcher);
else if (!is_screen_cast_enabled (backend))
g_clear_object (&priv->screen_cast);
if (is_remote_desktop_enabled (backend) && !priv->remote_desktop)
priv->remote_desktop = meta_remote_desktop_new (priv->dbus_session_watcher);
else if (!is_remote_desktop_enabled (backend))
g_clear_object (&priv->remote_desktop);
#endif /* HAVE_REMOTE_DESKTOP */
}
static gboolean static gboolean
meta_backend_initable_init (GInitable *initable, meta_backend_initable_init (GInitable *initable,
GCancellable *cancellable, GCancellable *cancellable,
@@ -588,9 +512,6 @@ meta_backend_initable_init (GInitable *initable,
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
priv->settings = meta_settings_new (backend); priv->settings = meta_settings_new (backend);
g_signal_connect (priv->settings, "experimental-features-changed",
G_CALLBACK (experimental_features_changed),
backend);
priv->egl = g_object_new (META_TYPE_EGL, NULL); priv->egl = g_object_new (META_TYPE_EGL, NULL);
@@ -720,19 +641,6 @@ meta_backend_get_settings (MetaBackend *backend)
return priv->settings; return priv->settings;
} }
#ifdef HAVE_REMOTE_DESKTOP
/**
* meta_backend_get_remote_desktop: (skip)
*/
MetaRemoteDesktop *
meta_backend_get_remote_desktop (MetaBackend *backend)
{
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
return priv->remote_desktop;
}
#endif /* HAVE_REMOTE_DESKTOP */
/** /**
* meta_backend_grab_device: (skip) * meta_backend_grab_device: (skip)
*/ */

View File

@@ -31,7 +31,6 @@
#include <wayland-server.h> #include <wayland-server.h>
#endif #endif
#include <meta/screen.h>
#include "meta-cursor.h" #include "meta-cursor.h"
#define META_TYPE_CURSOR_RENDERER (meta_cursor_renderer_get_type ()) #define META_TYPE_CURSOR_RENDERER (meta_cursor_renderer_get_type ())

View File

@@ -31,9 +31,10 @@
#include "meta-cursor-tracker-private.h" #include "meta-cursor-tracker-private.h"
#include <string.h> #include <string.h>
#include <meta/meta-x11-display.h>
#include <meta/main.h> #include <meta/main.h>
#include <meta/util.h> #include <meta/util.h>
#include <meta/errors.h> #include <meta/meta-x11-errors.h>
#include <cogl/cogl.h> #include <cogl/cogl.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
@@ -43,6 +44,7 @@
#include <X11/extensions/Xfixes.h> #include <X11/extensions/Xfixes.h>
#include "meta-backend-private.h" #include "meta-backend-private.h"
#include "x11/meta-x11-display-private.h"
G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT); G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT);
@@ -131,15 +133,15 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
} }
/** /**
* meta_cursor_tracker_get_for_screen: * meta_cursor_tracker_get_for_display:
* @screen: the #MetaScreen * @display: the #MetaDisplay
* *
* Retrieves the cursor tracker object for @screen. * Retrieves the cursor tracker object for @display.
* *
* Returns: (transfer none): * Returns: (transfer none):
*/ */
MetaCursorTracker * MetaCursorTracker *
meta_cursor_tracker_get_for_screen (MetaScreen *screen) meta_cursor_tracker_get_for_display (MetaDisplay *display)
{ {
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_get_backend ();
MetaCursorTracker *tracker = meta_backend_get_cursor_tracker (backend); MetaCursorTracker *tracker = meta_backend_get_cursor_tracker (backend);
@@ -165,13 +167,13 @@ gboolean
meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker, meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
XEvent *xevent) XEvent *xevent)
{ {
MetaDisplay *display = meta_get_display (); MetaX11Display *x11_display = meta_get_display ()->x11_display;
XFixesCursorNotifyEvent *notify_event; XFixesCursorNotifyEvent *notify_event;
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
return FALSE; return FALSE;
if (xevent->xany.type != display->xfixes_event_base + XFixesCursorNotify) if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
return FALSE; return FALSE;
notify_event = (XFixesCursorNotifyEvent *)xevent; notify_event = (XFixesCursorNotifyEvent *)xevent;
@@ -188,6 +190,7 @@ static void
ensure_xfixes_cursor (MetaCursorTracker *tracker) ensure_xfixes_cursor (MetaCursorTracker *tracker)
{ {
MetaDisplay *display = meta_get_display (); MetaDisplay *display = meta_get_display ();
Display *xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
XFixesCursorImage *cursor_image; XFixesCursorImage *cursor_image;
CoglTexture2D *sprite; CoglTexture2D *sprite;
guint8 *cursor_data; guint8 *cursor_data;
@@ -198,7 +201,7 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
if (tracker->xfixes_cursor) if (tracker->xfixes_cursor)
return; return;
cursor_image = XFixesGetCursorImage (display->xdisplay); cursor_image = XFixesGetCursorImage (xdisplay);
if (!cursor_image) if (!cursor_image)
return; return;

View File

@@ -23,10 +23,9 @@
#include "meta-cursor.h" #include "meta-cursor.h"
#include <meta/errors.h> #include <meta/meta-x11-errors.h>
#include "display-private.h" #include "display-private.h"
#include "screen-private.h"
#include "meta-backend-private.h" #include "meta-backend-private.h"
#include <string.h> #include <string.h>

View File

@@ -1,235 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-dbus-session-watcher.h"
#include <gio/gio.h>
enum
{
SESSION_SIGNAL_SESSION_CLOSED,
N_SESSION_SIGNALS
};
static guint session_signals[N_SESSION_SIGNALS];
G_DEFINE_INTERFACE (MetaDbusSession, meta_dbus_session, G_TYPE_OBJECT)
struct _MetaDbusSessionWatcher
{
GObject parent;
GHashTable *clients;
};
G_DEFINE_TYPE (MetaDbusSessionWatcher,
meta_dbus_session_watcher,
G_TYPE_OBJECT)
typedef struct _MetaDbusSessionClient
{
MetaDbusSessionWatcher *session_watcher;
MetaDbusSession *session;
char *dbus_name;
guint name_watcher_id;
GList *sessions;
} MetaDbusSessionClient;
static void
meta_dbus_session_client_vanished (MetaDbusSession *session)
{
META_DBUS_SESSION_GET_IFACE (session)->client_vanished (session);
}
static void
meta_dbus_session_client_destroy (MetaDbusSessionClient *client)
{
while (TRUE)
{
GList *l;
MetaDbusSession *session;
l = client->sessions;
if (!l)
break;
session = l->data;
/*
* This will invoke on_session_closed which removes the session from the
* list.
*/
meta_dbus_session_client_vanished (session);
}
if (client->name_watcher_id)
g_bus_unwatch_name (client->name_watcher_id);
g_free (client->dbus_name);
g_free (client);
}
static void
meta_dbus_session_watcher_destroy_client (MetaDbusSessionWatcher *session_watcher,
MetaDbusSessionClient *client)
{
g_hash_table_remove (session_watcher->clients, client->dbus_name);
}
static void
name_vanished_callback (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
MetaDbusSessionClient *client = user_data;
g_warning ("D-Bus client with active sessions vanished");
client->name_watcher_id = 0;
meta_dbus_session_watcher_destroy_client (client->session_watcher, client);
}
static MetaDbusSessionClient *
meta_dbus_session_client_new (MetaDbusSessionWatcher *session_watcher,
MetaDbusSession *session,
const char *dbus_name)
{
GDBusInterfaceSkeleton *interface_skeleton =
G_DBUS_INTERFACE_SKELETON (session);
GDBusConnection *connection =
g_dbus_interface_skeleton_get_connection (interface_skeleton);
MetaDbusSessionClient *client;
client = g_new0 (MetaDbusSessionClient, 1);
client->session_watcher = session_watcher;
client->session = session;
client->dbus_name = g_strdup (dbus_name);
client->name_watcher_id =
g_bus_watch_name_on_connection (connection,
dbus_name,
G_BUS_NAME_WATCHER_FLAGS_NONE,
NULL,
name_vanished_callback,
client,
NULL);
return client;
}
static void
on_session_closed (MetaDbusSession *session,
MetaDbusSessionClient *client)
{
client->sessions = g_list_remove (client->sessions, session);
if (!client->sessions)
meta_dbus_session_watcher_destroy_client (client->session_watcher, client);
}
static void
meta_dbus_session_client_add_session (MetaDbusSessionClient *client,
MetaDbusSession *session)
{
client->sessions = g_list_append (client->sessions, session);
g_signal_connect (session, "session-closed",
G_CALLBACK (on_session_closed),
client);
}
static MetaDbusSessionClient *
meta_dbus_session_watcher_get_client (MetaDbusSessionWatcher *session_watcher,
const char *dbus_name)
{
return g_hash_table_lookup (session_watcher->clients, dbus_name);
}
void
meta_dbus_session_watcher_watch_session (MetaDbusSessionWatcher *session_watcher,
const char *client_dbus_name,
MetaDbusSession *session)
{
MetaDbusSessionClient *client;
client = meta_dbus_session_watcher_get_client (session_watcher,
client_dbus_name);
if (!client)
{
client = meta_dbus_session_client_new (session_watcher,
session,
client_dbus_name);
g_hash_table_insert (session_watcher->clients,
g_strdup (client_dbus_name),
client);
}
meta_dbus_session_client_add_session (client, session);
}
void
meta_dbus_session_notify_closed (MetaDbusSession *session)
{
g_signal_emit (session, session_signals[SESSION_SIGNAL_SESSION_CLOSED], 0);
}
static void
meta_dbus_session_default_init (MetaDbusSessionInterface *iface)
{
session_signals[SESSION_SIGNAL_SESSION_CLOSED] =
g_signal_new ("session-closed",
G_TYPE_FROM_INTERFACE (iface),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
}
static void
meta_dbus_session_watcher_finalize (GObject *object)
{
MetaDbusSessionWatcher *session_watcher = META_DBUS_SESSION_WATCHER (object);
g_hash_table_destroy (session_watcher->clients);
}
static void
meta_dbus_session_watcher_init (MetaDbusSessionWatcher *session_watcher)
{
session_watcher->clients =
g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
(GDestroyNotify) meta_dbus_session_client_destroy);
}
static void
meta_dbus_session_watcher_class_init (MetaDbusSessionWatcherClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_dbus_session_watcher_finalize;
}

View File

@@ -1,52 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_DBUS_SESSION_WATCHER_H
#define META_DBUS_SESSION_WATCHER_H
#include <glib-object.h>
#define META_TYPE_DBUS_SESSION (meta_dbus_session_get_type ())
G_DECLARE_INTERFACE (MetaDbusSession, meta_dbus_session,
META, DBUS_SESSION,
GObject)
struct _MetaDbusSessionInterface
{
GTypeInterface parent_iface;
void (* client_vanished) (MetaDbusSession *session);
};
#define META_TYPE_DBUS_SESSION_WATCHER (meta_dbus_session_watcher_get_type ())
G_DECLARE_FINAL_TYPE (MetaDbusSessionWatcher,
meta_dbus_session_watcher,
META, DBUS_SESSION_WATCHER,
GObject)
void meta_dbus_session_watcher_watch_session (MetaDbusSessionWatcher *session_watcher,
const char *client_dbus_name,
MetaDbusSession *session);
void meta_dbus_session_notify_closed (MetaDbusSession *session);
#endif /* META_DBUS_SESSION_WATCHER_H */

View File

@@ -24,7 +24,7 @@
gboolean meta_dnd_handle_xdnd_event (MetaBackend *backend, gboolean meta_dnd_handle_xdnd_event (MetaBackend *backend,
MetaCompositor *compositor, MetaCompositor *compositor,
MetaDisplay *display, Display *xdisplay,
XEvent *xev); XEvent *xev);
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND

View File

@@ -801,7 +801,6 @@ meta_input_settings_find_logical_monitor (MetaInputSettings *input_settings,
{ {
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
MetaMonitorManager *monitor_manager; MetaMonitorManager *monitor_manager;
MetaLogicalMonitor *ret = NULL;
guint n_values; guint n_values;
GList *logical_monitors; GList *logical_monitors;
GList *l; GList *l;
@@ -816,11 +815,11 @@ meta_input_settings_find_logical_monitor (MetaInputSettings *input_settings,
g_warning ("EDID configuration for device '%s' " g_warning ("EDID configuration for device '%s' "
"is incorrect, must have 3 values", "is incorrect, must have 3 values",
clutter_input_device_get_device_name (device)); clutter_input_device_get_device_name (device));
goto out; return NULL;
} }
if (!*edid[0] && !*edid[1] && !*edid[2]) if (!*edid[0] && !*edid[1] && !*edid[2])
goto out; return NULL;
monitor_manager = priv->monitor_manager; monitor_manager = priv->monitor_manager;
logical_monitors = logical_monitors =
@@ -834,15 +833,10 @@ meta_input_settings_find_logical_monitor (MetaInputSettings *input_settings,
edid[0], edid[0],
edid[1], edid[1],
edid[2])) edid[2]))
{ return logical_monitor;
ret = logical_monitor;
break;
}
} }
out: return NULL;
g_strfreev (edid);
return ret;
} }
static void static void
@@ -1308,18 +1302,8 @@ check_add_mappable_device (MetaInputSettings *input_settings,
{ {
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
DeviceMappingInfo *info; DeviceMappingInfo *info;
ClutterInputDeviceType device_type;
GSettings *settings; GSettings *settings;
device_type = clutter_input_device_get_device_type (device);
if ((device_type == CLUTTER_TABLET_DEVICE ||
device_type == CLUTTER_PEN_DEVICE ||
device_type == CLUTTER_ERASER_DEVICE ||
device_type == CLUTTER_PAD_DEVICE) &&
g_getenv ("MUTTER_DISABLE_WACOM_CONFIGURATION") != NULL)
return FALSE;
settings = lookup_device_settings (device); settings = lookup_device_settings (device);
if (!settings) if (!settings)
@@ -1333,8 +1317,8 @@ check_add_mappable_device (MetaInputSettings *input_settings,
info->settings = settings; info->settings = settings;
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM
if (device_type == CLUTTER_TABLET_DEVICE || if (clutter_input_device_get_device_type (device) == CLUTTER_TABLET_DEVICE ||
device_type == CLUTTER_PAD_DEVICE) clutter_input_device_get_device_type (device) == CLUTTER_PAD_DEVICE)
{ {
WacomError *error = libwacom_error_new (); WacomError *error = libwacom_error_new ();
@@ -1352,7 +1336,7 @@ check_add_mappable_device (MetaInputSettings *input_settings,
} }
#endif #endif
if (device_type == CLUTTER_PAD_DEVICE) if (clutter_input_device_get_device_type (device) == CLUTTER_PAD_DEVICE)
{ {
info->group_modes = info->group_modes =
g_new0 (guint, clutter_input_device_get_n_mode_groups (device)); g_new0 (guint, clutter_input_device_get_n_mode_groups (device));
@@ -1617,7 +1601,7 @@ meta_input_settings_init (MetaInputSettings *settings)
g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) device_mapping_info_free); g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) device_mapping_info_free);
priv->monitor_manager = g_object_ref (meta_monitor_manager_get ()); priv->monitor_manager = g_object_ref (meta_monitor_manager_get ());
g_signal_connect (priv->monitor_manager, "monitors-changed-internal", g_signal_connect (priv->monitor_manager, "monitors-changed",
G_CALLBACK (monitors_changed_cb), settings); G_CALLBACK (monitors_changed_cb), settings);
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM

View File

@@ -204,53 +204,40 @@ meta_logical_monitor_init (MetaLogicalMonitor *logical_monitor)
{ {
} }
static void
meta_logical_monitor_finalize (GObject *object)
{
MetaLogicalMonitor *logical_monitor = META_LOGICAL_MONITOR (object);
g_list_free (logical_monitor->monitors);
G_OBJECT_CLASS (meta_logical_monitor_parent_class)->finalize (object);
}
static void static void
meta_logical_monitor_class_init (MetaLogicalMonitorClass *klass) meta_logical_monitor_class_init (MetaLogicalMonitorClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_logical_monitor_finalize;
} }
gboolean gboolean
meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor, meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor,
MetaLogicalMonitor *neighbor, MetaLogicalMonitor *neighbor,
MetaScreenDirection neighbor_direction) MetaDisplayDirection neighbor_direction)
{ {
switch (neighbor_direction) switch (neighbor_direction)
{ {
case META_SCREEN_RIGHT: case META_DISPLAY_RIGHT:
if (neighbor->rect.x == (logical_monitor->rect.x + if (neighbor->rect.x == (logical_monitor->rect.x +
logical_monitor->rect.width) && logical_monitor->rect.width) &&
meta_rectangle_vert_overlap (&neighbor->rect, meta_rectangle_vert_overlap (&neighbor->rect,
&logical_monitor->rect)) &logical_monitor->rect))
return TRUE; return TRUE;
break; break;
case META_SCREEN_LEFT: case META_DISPLAY_LEFT:
if (logical_monitor->rect.x == (neighbor->rect.x + if (logical_monitor->rect.x == (neighbor->rect.x +
neighbor->rect.width) && neighbor->rect.width) &&
meta_rectangle_vert_overlap (&neighbor->rect, meta_rectangle_vert_overlap (&neighbor->rect,
&logical_monitor->rect)) &logical_monitor->rect))
return TRUE; return TRUE;
break; break;
case META_SCREEN_UP: case META_DISPLAY_UP:
if (logical_monitor->rect.y == (neighbor->rect.y + if (logical_monitor->rect.y == (neighbor->rect.y +
neighbor->rect.height) && neighbor->rect.height) &&
meta_rectangle_horiz_overlap (&neighbor->rect, meta_rectangle_horiz_overlap (&neighbor->rect,
&logical_monitor->rect)) &logical_monitor->rect))
return TRUE; return TRUE;
break; break;
case META_SCREEN_DOWN: case META_DISPLAY_DOWN:
if (neighbor->rect.y == (logical_monitor->rect.y + if (neighbor->rect.y == (logical_monitor->rect.y +
logical_monitor->rect.height) && logical_monitor->rect.height) &&
meta_rectangle_horiz_overlap (&neighbor->rect, meta_rectangle_horiz_overlap (&neighbor->rect,

View File

@@ -88,6 +88,6 @@ GList * meta_logical_monitor_get_monitors (MetaLogicalMonitor *logical_monitor);
gboolean meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor, gboolean meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor,
MetaLogicalMonitor *neighbor, MetaLogicalMonitor *neighbor,
MetaScreenDirection neighbor_dir); MetaDisplayDirection neighbor_dir);
#endif /* META_LOGICAL_MONITOR_H */ #endif /* META_LOGICAL_MONITOR_H */

View File

@@ -612,9 +612,7 @@ meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_mana
x += logical_monitor_config->layout.width; x += logical_monitor_config->layout.width;
} }
return meta_monitors_config_new (monitor_manager, return meta_monitors_config_new (logical_monitor_configs, layout_mode,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -643,9 +641,7 @@ meta_monitor_config_manager_create_fallback (MetaMonitorConfigManager *config_ma
logical_monitor_configs = g_list_append (NULL, logical_monitor_configs = g_list_append (NULL,
primary_logical_monitor_config); primary_logical_monitor_config);
return meta_monitors_config_new (monitor_manager, return meta_monitors_config_new (logical_monitor_configs, layout_mode,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -721,9 +717,7 @@ meta_monitor_config_manager_create_suggested (MetaMonitorConfigManager *config_m
if (!logical_monitor_configs) if (!logical_monitor_configs)
return NULL; return NULL;
return meta_monitors_config_new (monitor_manager, return meta_monitors_config_new (logical_monitor_configs, layout_mode,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -732,11 +726,8 @@ create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager,
gboolean rotate, gboolean rotate,
MetaMonitorTransform transform) MetaMonitorTransform transform)
{ {
MetaMonitorManager *monitor_manager = config_manager->monitor_manager;
MetaLogicalMonitorConfig *logical_monitor_config; MetaLogicalMonitorConfig *logical_monitor_config;
MetaLogicalMonitorConfig *current_logical_monitor_config; MetaLogicalMonitorConfig *current_logical_monitor_config;
GList *logical_monitor_configs;
MetaLogicalMonitorLayoutMode layout_mode;
MetaMonitorConfig *monitor_config; MetaMonitorConfig *monitor_config;
MetaMonitorConfig *current_monitor_config; MetaMonitorConfig *current_monitor_config;
@@ -773,19 +764,8 @@ create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager,
logical_monitor_config->monitor_configs = g_list_append (NULL, monitor_config); logical_monitor_config->monitor_configs = g_list_append (NULL, monitor_config);
logical_monitor_config->transform = transform; logical_monitor_config->transform = transform;
if (meta_monitor_transform_is_rotated (current_logical_monitor_config->transform) != return meta_monitors_config_new (g_list_append (NULL, logical_monitor_config),
meta_monitor_transform_is_rotated (logical_monitor_config->transform)) config_manager->current_config->layout_mode,
{
int temp = logical_monitor_config->layout.width;
logical_monitor_config->layout.width = logical_monitor_config->layout.height;
logical_monitor_config->layout.height = temp;
}
logical_monitor_configs = g_list_append (NULL, logical_monitor_config);
layout_mode = config_manager->current_config->layout_mode;
return meta_monitors_config_new (monitor_manager,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -808,7 +788,6 @@ create_for_switch_config_all_mirror (MetaMonitorConfigManager *config_manager)
MetaMonitorManager *monitor_manager = config_manager->monitor_manager; MetaMonitorManager *monitor_manager = config_manager->monitor_manager;
MetaLogicalMonitorLayoutMode layout_mode; MetaLogicalMonitorLayoutMode layout_mode;
MetaLogicalMonitorConfig *logical_monitor_config = NULL; MetaLogicalMonitorConfig *logical_monitor_config = NULL;
GList *logical_monitor_configs;
GList *monitor_configs = NULL; GList *monitor_configs = NULL;
gint common_mode_w = 0, common_mode_h = 0; gint common_mode_w = 0, common_mode_h = 0;
float best_scale = 1.0; float best_scale = 1.0;
@@ -906,10 +885,8 @@ create_for_switch_config_all_mirror (MetaMonitorConfigManager *config_manager)
.monitor_configs = monitor_configs .monitor_configs = monitor_configs
}; };
logical_monitor_configs = g_list_append (NULL, logical_monitor_config);
layout_mode = meta_monitor_manager_get_default_layout_mode (monitor_manager); layout_mode = meta_monitor_manager_get_default_layout_mode (monitor_manager);
return meta_monitors_config_new (monitor_manager, return meta_monitors_config_new (g_list_append (NULL, logical_monitor_config),
logical_monitor_configs,
layout_mode, layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -950,9 +927,7 @@ create_for_switch_config_external (MetaMonitorConfigManager *config_manager)
x += logical_monitor_config->layout.width; x += logical_monitor_config->layout.width;
} }
return meta_monitors_config_new (monitor_manager, return meta_monitors_config_new (logical_monitor_configs, layout_mode,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -981,9 +956,7 @@ create_for_switch_config_builtin (MetaMonitorConfigManager *config_manager)
logical_monitor_configs = g_list_append (NULL, logical_monitor_configs = g_list_append (NULL,
primary_logical_monitor_config); primary_logical_monitor_config);
return meta_monitors_config_new (monitor_manager, return meta_monitors_config_new (logical_monitor_configs, layout_mode,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
} }
@@ -1106,8 +1079,7 @@ meta_logical_monitor_config_free (MetaLogicalMonitorConfig *logical_monitor_conf
} }
static MetaMonitorsConfigKey * static MetaMonitorsConfigKey *
meta_monitors_config_key_new (GList *logical_monitor_configs, meta_monitors_config_key_new (GList *logical_monitor_configs)
GList *disabled_monitor_specs)
{ {
MetaMonitorsConfigKey *config_key; MetaMonitorsConfigKey *config_key;
GList *monitor_specs; GList *monitor_specs;
@@ -1129,14 +1101,6 @@ meta_monitors_config_key_new (GList *logical_monitor_configs,
} }
} }
for (l = disabled_monitor_specs; l; l = l->next)
{
MetaMonitorSpec *monitor_spec = l->data;
monitor_spec = meta_monitor_spec_clone (monitor_spec);
monitor_specs = g_list_prepend (monitor_specs, monitor_spec);
}
monitor_specs = g_list_sort (monitor_specs, monitor_specs = g_list_sort (monitor_specs,
(GCompareFunc) meta_monitor_spec_compare); (GCompareFunc) meta_monitor_spec_compare);
@@ -1203,8 +1167,7 @@ meta_monitors_config_key_equal (gconstpointer data_a,
} }
MetaMonitorsConfig * MetaMonitorsConfig *
meta_monitors_config_new_full (GList *logical_monitor_configs, meta_monitors_config_new (GList *logical_monitor_configs,
GList *disabled_monitor_specs,
MetaLogicalMonitorLayoutMode layout_mode, MetaLogicalMonitorLayoutMode layout_mode,
MetaMonitorsConfigFlag flags) MetaMonitorsConfigFlag flags)
{ {
@@ -1212,47 +1175,13 @@ meta_monitors_config_new_full (GList *logical_monitor_con
config = g_object_new (META_TYPE_MONITORS_CONFIG, NULL); config = g_object_new (META_TYPE_MONITORS_CONFIG, NULL);
config->logical_monitor_configs = logical_monitor_configs; config->logical_monitor_configs = logical_monitor_configs;
config->disabled_monitor_specs = disabled_monitor_specs; config->key = meta_monitors_config_key_new (logical_monitor_configs);
config->key = meta_monitors_config_key_new (logical_monitor_configs,
disabled_monitor_specs);
config->layout_mode = layout_mode; config->layout_mode = layout_mode;
config->flags = flags; config->flags = flags;
return config; return config;
} }
MetaMonitorsConfig *
meta_monitors_config_new (MetaMonitorManager *monitor_manager,
GList *logical_monitor_configs,
MetaLogicalMonitorLayoutMode layout_mode,
MetaMonitorsConfigFlag flags)
{
GList *disabled_monitor_specs = NULL;
GList *monitors;
GList *l;
monitors = meta_monitor_manager_get_monitors (monitor_manager);
for (l = monitors; l; l = l->next)
{
MetaMonitor *monitor = l->data;
MetaMonitorSpec *monitor_spec;
monitor_spec = meta_monitor_get_spec (monitor);
if (meta_logical_monitor_configs_have_monitor (logical_monitor_configs,
monitor_spec))
continue;
disabled_monitor_specs =
g_list_prepend (disabled_monitor_specs,
meta_monitor_spec_clone (monitor_spec));
}
return meta_monitors_config_new_full (logical_monitor_configs,
disabled_monitor_specs,
layout_mode,
flags);
}
static void static void
meta_monitors_config_finalize (GObject *object) meta_monitors_config_finalize (GObject *object)
{ {
@@ -1261,10 +1190,6 @@ meta_monitors_config_finalize (GObject *object)
meta_monitors_config_key_free (config->key); meta_monitors_config_key_free (config->key);
g_list_free_full (config->logical_monitor_configs, g_list_free_full (config->logical_monitor_configs,
(GDestroyNotify) meta_logical_monitor_config_free); (GDestroyNotify) meta_logical_monitor_config_free);
g_list_free_full (config->disabled_monitor_specs,
(GDestroyNotify) meta_monitor_spec_free);
G_OBJECT_CLASS (meta_monitors_config_parent_class)->finalize (object);
} }
static void static void
@@ -1440,38 +1365,6 @@ has_adjecent_neighbour (MetaMonitorsConfig *config,
return FALSE; return FALSE;
} }
gboolean
meta_logical_monitor_configs_have_monitor (GList *logical_monitor_configs,
MetaMonitorSpec *monitor_spec)
{
GList *l;
for (l = logical_monitor_configs; l; l = l->next)
{
MetaLogicalMonitorConfig *logical_monitor_config = l->data;
GList *k;
for (k = logical_monitor_config->monitor_configs; k; k = k->next)
{
MetaMonitorConfig *monitor_config = k->data;
if (meta_monitor_spec_equals (monitor_spec,
monitor_config->monitor_spec))
return TRUE;
}
}
return FALSE;
}
static gboolean
meta_monitors_config_is_monitor_enabled (MetaMonitorsConfig *config,
MetaMonitorSpec *monitor_spec)
{
return meta_logical_monitor_configs_have_monitor (config->logical_monitor_configs,
monitor_spec);
}
gboolean gboolean
meta_verify_monitors_config (MetaMonitorsConfig *config, meta_verify_monitors_config (MetaMonitorsConfig *config,
MetaMonitorManager *monitor_manager, MetaMonitorManager *monitor_manager,
@@ -1553,18 +1446,6 @@ meta_verify_monitors_config (MetaMonitorsConfig *config,
g_list_free (region); g_list_free (region);
for (l = config->disabled_monitor_specs; l; l = l->next)
{
MetaMonitorSpec *monitor_spec = l->data;
if (meta_monitors_config_is_monitor_enabled (config, monitor_spec))
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Assigned monitor explicitly disabled");
return FALSE;
}
}
if (min_x != 0 || min_y != 0) if (min_x != 0 || min_y != 0)
{ {
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,

View File

@@ -64,8 +64,6 @@ struct _MetaMonitorsConfig
MetaMonitorsConfigKey *key; MetaMonitorsConfigKey *key;
GList *logical_monitor_configs; GList *logical_monitor_configs;
GList *disabled_monitor_specs;
MetaMonitorsConfigFlag flags; MetaMonitorsConfigFlag flags;
MetaLogicalMonitorLayoutMode layout_mode; MetaLogicalMonitorLayoutMode layout_mode;
@@ -114,13 +112,7 @@ void meta_monitor_config_manager_clear_history (MetaMonitorConfigManager *config
void meta_monitor_config_manager_save_current (MetaMonitorConfigManager *config_manager); void meta_monitor_config_manager_save_current (MetaMonitorConfigManager *config_manager);
MetaMonitorsConfig * meta_monitors_config_new_full (GList *logical_monitor_configs, MetaMonitorsConfig * meta_monitors_config_new (GList *logical_monitor_configs,
GList *disabled_monitors,
MetaLogicalMonitorLayoutMode layout_mode,
MetaMonitorsConfigFlag flags);
MetaMonitorsConfig * meta_monitors_config_new (MetaMonitorManager *monitor_manager,
GList *logical_monitor_configs,
MetaLogicalMonitorLayoutMode layout_mode, MetaLogicalMonitorLayoutMode layout_mode,
MetaMonitorsConfigFlag flags); MetaMonitorsConfigFlag flags);
@@ -135,9 +127,6 @@ void meta_logical_monitor_config_free (MetaLogicalMonitorConfig *logical_monitor
void meta_monitor_config_free (MetaMonitorConfig *monitor_config); void meta_monitor_config_free (MetaMonitorConfig *monitor_config);
gboolean meta_logical_monitor_configs_have_monitor (GList *logical_monitor_configs,
MetaMonitorSpec *monitor_spec);
gboolean meta_verify_monitor_mode_spec (MetaMonitorModeSpec *monitor_mode_spec, gboolean meta_verify_monitor_mode_spec (MetaMonitorModeSpec *monitor_mode_spec,
GError **error); GError **error);

View File

@@ -652,7 +652,6 @@ load_config_file (GFile *file,
g_array_free (parser.output_array, TRUE); g_array_free (parser.output_array, TRUE);
free_output_key (&parser.key); free_output_key (&parser.key);
g_free (parser.output_field);
g_hash_table_destroy (parser.configs); g_hash_table_destroy (parser.configs);
return NULL; return NULL;
@@ -950,6 +949,7 @@ derive_logical_monitor_configs (MetaLegacyMonitorsConfig *config,
GError **error) GError **error)
{ {
GList *logical_monitor_configs = NULL; GList *logical_monitor_configs = NULL;
GList *monitor_configs = NULL;
unsigned int i; unsigned int i;
for (i = 0; i < config->n_outputs; i++) for (i = 0; i < config->n_outputs; i++)
@@ -994,8 +994,8 @@ derive_logical_monitor_configs (MetaLegacyMonitorsConfig *config,
} }
else else
{ {
g_list_free_full (logical_monitor_configs, g_list_free_full (monitor_configs,
(GDestroyNotify) meta_logical_monitor_config_free); (GDestroyNotify) meta_monitor_config_free);
return NULL; return NULL;
} }
} }
@@ -1008,8 +1008,8 @@ derive_logical_monitor_configs (MetaLegacyMonitorsConfig *config,
if (!monitor_config) if (!monitor_config)
{ {
g_list_free_full (logical_monitor_configs, g_list_free_full (monitor_configs,
(GDestroyNotify) meta_logical_monitor_config_free); (GDestroyNotify) meta_monitor_config_free);
return NULL; return NULL;
} }
@@ -1056,35 +1056,6 @@ generate_config_name (MetaLegacyMonitorsConfig *config)
return key_name; return key_name;
} }
static GList *
find_disabled_monitor_specs (MetaLegacyMonitorsConfig *legacy_config)
{
GList *disabled_monitors = NULL;
unsigned int i;
for (i = 0; i < legacy_config->n_outputs; i++)
{
MetaOutputKey *output_key = &legacy_config->keys[i];
MetaOutputConfig *output_config = &legacy_config->outputs[i];
MetaMonitorSpec *monitor_spec;
if (output_config->enabled)
continue;
monitor_spec = g_new0 (MetaMonitorSpec, 1);
*monitor_spec = (MetaMonitorSpec) {
.connector = output_key->connector,
.vendor = output_key->vendor,
.product = output_key->product,
.serial = output_key->serial
};
disabled_monitors = g_list_prepend (disabled_monitors, monitor_spec);
}
return disabled_monitors;
}
static void static void
migrate_config (gpointer key, migrate_config (gpointer key,
gpointer value, gpointer value,
@@ -1097,7 +1068,6 @@ migrate_config (gpointer key,
GList *logical_monitor_configs; GList *logical_monitor_configs;
MetaLogicalMonitorLayoutMode layout_mode; MetaLogicalMonitorLayoutMode layout_mode;
GError *error = NULL; GError *error = NULL;
GList *disabled_monitor_specs;
MetaMonitorsConfig *config; MetaMonitorsConfig *config;
logical_monitor_configs = derive_logical_monitor_configs (legacy_config, logical_monitor_configs = derive_logical_monitor_configs (legacy_config,
@@ -1113,12 +1083,8 @@ migrate_config (gpointer key,
return; return;
} }
disabled_monitor_specs = find_disabled_monitor_specs (legacy_config);
layout_mode = META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL; layout_mode = META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
config = meta_monitors_config_new_full (logical_monitor_configs, config = meta_monitors_config_new (logical_monitor_configs, layout_mode,
disabled_monitor_specs,
layout_mode,
META_MONITORS_CONFIG_FLAG_MIGRATED); META_MONITORS_CONFIG_FLAG_MIGRATED);
if (!meta_verify_monitors_config (config, monitor_manager, &error)) if (!meta_verify_monitors_config (config, monitor_manager, &error))
{ {
@@ -1146,6 +1112,7 @@ meta_migrate_old_monitors_config (MetaMonitorConfigStore *config_store,
return FALSE; return FALSE;
g_hash_table_foreach (configs, migrate_config, config_store); g_hash_table_foreach (configs, migrate_config, config_store);
g_hash_table_destroy (configs);
return TRUE; return TRUE;
} }
@@ -1208,13 +1175,6 @@ meta_finish_monitors_config_migration (MetaMonitorManager *monitor_manager,
monitor_mode_spec = monitor_config->mode_spec; monitor_mode_spec = monitor_config->mode_spec;
monitor_mode = meta_monitor_get_mode_from_spec (monitor, monitor_mode = meta_monitor_get_mode_from_spec (monitor,
monitor_mode_spec); monitor_mode_spec);
if (!monitor_mode)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Mode not available on monitor");
return FALSE;
}
scale = meta_monitor_calculate_mode_scale (monitor, monitor_mode); scale = meta_monitor_calculate_mode_scale (monitor, monitor_mode);
logical_monitor_config->scale = scale; logical_monitor_config->scale = scale;

View File

@@ -83,14 +83,6 @@
* </monitor> * </monitor>
* <presentation>yes</presentation> * <presentation>yes</presentation>
* </logicalmonitor> * </logicalmonitor>
* <disabled>
* <monitorspec>
* <connector>LVDS3</connector>
* <vendor>Vendor C</vendor>
* <product>Product C</product>
* <serial>Serial C</serial>
* </monitorspec>
* </disabled>
* </configuration> * </configuration>
* </monitors> * </monitors>
* *
@@ -159,8 +151,7 @@ typedef enum
STATE_MONITOR_MODE_HEIGHT, STATE_MONITOR_MODE_HEIGHT,
STATE_MONITOR_MODE_RATE, STATE_MONITOR_MODE_RATE,
STATE_MONITOR_MODE_FLAG, STATE_MONITOR_MODE_FLAG,
STATE_MONITOR_UNDERSCANNING, STATE_MONITOR_UNDERSCANNING
STATE_DISABLED,
} ParserState; } ParserState;
typedef struct typedef struct
@@ -168,8 +159,6 @@ typedef struct
ParserState state; ParserState state;
MetaMonitorConfigStore *config_store; MetaMonitorConfigStore *config_store;
ParserState monitor_spec_parent_state;
gboolean current_was_migrated; gboolean current_was_migrated;
GList *current_logical_monitor_configs; GList *current_logical_monitor_configs;
MetaMonitorSpec *current_monitor_spec; MetaMonitorSpec *current_monitor_spec;
@@ -178,7 +167,6 @@ typedef struct
MetaMonitorModeSpec *current_monitor_mode_spec; MetaMonitorModeSpec *current_monitor_mode_spec;
MetaMonitorConfig *current_monitor_config; MetaMonitorConfig *current_monitor_config;
MetaLogicalMonitorConfig *current_logical_monitor_config; MetaLogicalMonitorConfig *current_logical_monitor_config;
GList *current_disabled_monitor_specs;
} ConfigParser; } ConfigParser;
G_DEFINE_TYPE (MetaMonitorConfigStore, meta_monitor_config_store, G_DEFINE_TYPE (MetaMonitorConfigStore, meta_monitor_config_store,
@@ -266,10 +254,6 @@ handle_start_element (GMarkupParseContext *context,
parser->state = STATE_MIGRATED; parser->state = STATE_MIGRATED;
} }
else if (g_str_equal (element_name, "disabled"))
{
parser->state = STATE_DISABLED;
}
else else
{ {
g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
@@ -367,7 +351,7 @@ handle_start_element (GMarkupParseContext *context,
if (g_str_equal (element_name, "monitorspec")) if (g_str_equal (element_name, "monitorspec"))
{ {
parser->current_monitor_spec = g_new0 (MetaMonitorSpec, 1); parser->current_monitor_spec = g_new0 (MetaMonitorSpec, 1);
parser->monitor_spec_parent_state = STATE_MONITOR;
parser->state = STATE_MONITOR_SPEC; parser->state = STATE_MONITOR_SPEC;
} }
else if (g_str_equal (element_name, "mode")) else if (g_str_equal (element_name, "mode"))
@@ -472,22 +456,6 @@ handle_start_element (GMarkupParseContext *context,
"Invalid element '%s' under underscanning", element_name); "Invalid element '%s' under underscanning", element_name);
return; return;
} }
case STATE_DISABLED:
{
if (!g_str_equal (element_name, "monitorspec"))
{
g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
"Invalid element '%s' under disabled", element_name);
return;
}
parser->current_monitor_spec = g_new0 (MetaMonitorSpec, 1);
parser->monitor_spec_parent_state = STATE_DISABLED;
parser->state = STATE_MONITOR_SPEC;
return;
}
} }
} }
@@ -545,34 +513,6 @@ derive_logical_monitor_layout (MetaLogicalMonitorConfig *logical_monitor_conf
return TRUE; return TRUE;
} }
static void
finish_monitor_spec (ConfigParser *parser)
{
switch (parser->monitor_spec_parent_state)
{
case STATE_MONITOR:
{
parser->current_monitor_config->monitor_spec =
parser->current_monitor_spec;
parser->current_monitor_spec = NULL;
return;
}
case STATE_DISABLED:
{
parser->current_disabled_monitor_specs =
g_list_prepend (parser->current_disabled_monitor_specs,
parser->current_monitor_spec);
parser->current_monitor_spec = NULL;
return;
}
default:
g_assert_not_reached ();
}
}
static void static void
handle_end_element (GMarkupParseContext *context, handle_end_element (GMarkupParseContext *context,
const char *element_name, const char *element_name,
@@ -635,9 +575,11 @@ handle_end_element (GMarkupParseContext *context,
if (!meta_verify_monitor_spec (parser->current_monitor_spec, error)) if (!meta_verify_monitor_spec (parser->current_monitor_spec, error))
return; return;
finish_monitor_spec (parser); parser->current_monitor_config->monitor_spec =
parser->current_monitor_spec;
parser->current_monitor_spec = NULL;
parser->state = parser->monitor_spec_parent_state; parser->state = STATE_MONITOR;
return; return;
} }
@@ -723,14 +665,6 @@ handle_end_element (GMarkupParseContext *context,
return; return;
} }
case STATE_DISABLED:
{
g_assert (g_str_equal (element_name, "disabled"));
parser->state = STATE_CONFIGURATION;
return;
}
case STATE_CONFIGURATION: case STATE_CONFIGURATION:
{ {
MetaMonitorConfigStore *store = parser->config_store; MetaMonitorConfigStore *store = parser->config_store;
@@ -767,13 +701,11 @@ handle_end_element (GMarkupParseContext *context,
config_flags |= META_MONITORS_CONFIG_FLAG_MIGRATED; config_flags |= META_MONITORS_CONFIG_FLAG_MIGRATED;
config = config =
meta_monitors_config_new_full (parser->current_logical_monitor_configs, meta_monitors_config_new (parser->current_logical_monitor_configs,
parser->current_disabled_monitor_specs,
layout_mode, layout_mode,
config_flags); config_flags);
parser->current_logical_monitor_configs = NULL; parser->current_logical_monitor_configs = NULL;
parser->current_disabled_monitor_specs = NULL;
if (!meta_verify_monitors_config (config, store->monitor_manager, if (!meta_verify_monitors_config (config, store->monitor_manager,
error)) error))
@@ -917,7 +849,6 @@ handle_text (GMarkupParseContext *context,
case STATE_MONITOR_SPEC: case STATE_MONITOR_SPEC:
case STATE_MONITOR_MODE: case STATE_MONITOR_MODE:
case STATE_TRANSFORM: case STATE_TRANSFORM:
case STATE_DISABLED:
{ {
if (!is_all_whitespace (text, text_len)) if (!is_all_whitespace (text, text_len))
g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
@@ -1127,27 +1058,6 @@ meta_monitor_config_store_lookup (MetaMonitorConfigStore *config_store,
key)); key));
} }
static void
append_monitor_spec (GString *buffer,
MetaMonitorSpec *monitor_spec,
const char *indentation)
{
g_string_append_printf (buffer, "%s<monitorspec>\n", indentation);
g_string_append_printf (buffer, "%s <connector>%s</connector>\n",
indentation,
monitor_spec->connector);
g_string_append_printf (buffer, "%s <vendor>%s</vendor>\n",
indentation,
monitor_spec->vendor);
g_string_append_printf (buffer, "%s <product>%s</product>\n",
indentation,
monitor_spec->product);
g_string_append_printf (buffer, "%s <serial>%s</serial>\n",
indentation,
monitor_spec->serial);
g_string_append_printf (buffer, "%s</monitorspec>\n", indentation);
}
static void static void
append_monitors (GString *buffer, append_monitors (GString *buffer,
GList *monitor_configs) GList *monitor_configs)
@@ -1163,7 +1073,16 @@ append_monitors (GString *buffer,
monitor_config->mode_spec->refresh_rate); monitor_config->mode_spec->refresh_rate);
g_string_append (buffer, " <monitor>\n"); g_string_append (buffer, " <monitor>\n");
append_monitor_spec (buffer, monitor_config->monitor_spec, " "); g_string_append (buffer, " <monitorspec>\n");
g_string_append_printf (buffer, " <connector>%s</connector>\n",
monitor_config->monitor_spec->connector);
g_string_append_printf (buffer, " <vendor>%s</vendor>\n",
monitor_config->monitor_spec->vendor);
g_string_append_printf (buffer, " <product>%s</product>\n",
monitor_config->monitor_spec->product);
g_string_append_printf (buffer, " <serial>%s</serial>\n",
monitor_config->monitor_spec->serial);
g_string_append (buffer, " </monitorspec>\n");
g_string_append (buffer, " <mode>\n"); g_string_append (buffer, " <mode>\n");
g_string_append_printf (buffer, " <width>%d</width>\n", g_string_append_printf (buffer, " <width>%d</width>\n",
monitor_config->mode_spec->width); monitor_config->mode_spec->width);
@@ -1286,18 +1205,6 @@ generate_config_xml (MetaMonitorConfigStore *config_store)
append_logical_monitor_xml (buffer, config, logical_monitor_config); append_logical_monitor_xml (buffer, config, logical_monitor_config);
} }
if (config->disabled_monitor_specs)
{
g_string_append (buffer, " <disabled>\n");
for (l = config->disabled_monitor_specs; l; l = l->next)
{
MetaMonitorSpec *monitor_spec = l->data;
append_monitor_spec (buffer, monitor_spec, " ");
}
g_string_append (buffer, " </disabled>\n");
}
g_string_append (buffer, " </configuration>\n"); g_string_append (buffer, " </configuration>\n");
} }
@@ -1323,10 +1230,9 @@ saved_cb (GObject *object,
if (!g_file_replace_contents_finish (G_FILE (object), result, NULL, &error)) if (!g_file_replace_contents_finish (G_FILE (object), result, NULL, &error))
{ {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_warning ("Saving monitor configuration failed: %s\n", error->message); g_warning ("Saving monitor configuration failed: %s\n", error->message);
else
g_clear_object (&data->config_store->save_cancellable); g_clear_object (&data->config_store->save_cancellable);
}
g_error_free (error); g_error_free (error);
} }
@@ -1341,20 +1247,37 @@ saved_cb (GObject *object,
} }
static void static void
meta_monitor_config_store_save_sync (MetaMonitorConfigStore *config_store) meta_monitor_config_store_save (MetaMonitorConfigStore *config_store)
{ {
GError *error = NULL;
GFile *file;
GString *buffer; GString *buffer;
SaveData *data;
if (config_store->custom_write_file) if (config_store->save_cancellable)
file = config_store->custom_write_file; {
else g_cancellable_cancel (config_store->save_cancellable);
file = config_store->user_file; g_clear_object (&config_store->save_cancellable);
}
config_store->save_cancellable = g_cancellable_new ();
buffer = generate_config_xml (config_store); buffer = generate_config_xml (config_store);
if (!g_file_replace_contents (file, data = g_new0 (SaveData, 1);
*data = (SaveData) {
.config_store = g_object_ref (config_store),
.buffer = buffer
};
/*
* Custom write file is only ever used by the test suite, and the test suite
* will want to have be able to read back the content immediately, so for
* custom write files, do the content replacement synchronously.
*/
if (config_store->custom_write_file)
{
GError *error = NULL;
if (!g_file_replace_contents (config_store->custom_write_file,
buffer->str, buffer->len, buffer->str, buffer->len,
NULL, NULL,
FALSE, FALSE,
@@ -1367,43 +1290,9 @@ meta_monitor_config_store_save_sync (MetaMonitorConfigStore *config_store)
error->message); error->message);
g_error_free (error); g_error_free (error);
} }
g_string_free (buffer, TRUE);
}
static void
meta_monitor_config_store_save (MetaMonitorConfigStore *config_store)
{
GString *buffer;
SaveData *data;
if (config_store->save_cancellable)
{
g_cancellable_cancel (config_store->save_cancellable);
g_clear_object (&config_store->save_cancellable);
}
/*
* Custom write file is only ever used by the test suite, and the test suite
* will want to have be able to read back the content immediately, so for
* custom write files, do the content replacement synchronously.
*/
if (config_store->custom_write_file)
{
meta_monitor_config_store_save_sync (config_store);
return; return;
} }
config_store->save_cancellable = g_cancellable_new ();
buffer = generate_config_xml (config_store);
data = g_new0 (SaveData, 1);
*data = (SaveData) {
.config_store = g_object_ref (config_store),
.buffer = buffer
};
g_file_replace_contents_async (config_store->user_file, g_file_replace_contents_async (config_store->user_file,
buffer->str, buffer->len, buffer->str, buffer->len,
NULL, NULL,
@@ -1518,8 +1407,6 @@ meta_monitor_config_store_constructed (GObject *object)
} }
g_free (user_file_path); g_free (user_file_path);
G_OBJECT_CLASS (meta_monitor_config_store_parent_class)->constructed (object);
} }
static void static void
@@ -1527,14 +1414,6 @@ meta_monitor_config_store_dispose (GObject *object)
{ {
MetaMonitorConfigStore *config_store = META_MONITOR_CONFIG_STORE (object); MetaMonitorConfigStore *config_store = META_MONITOR_CONFIG_STORE (object);
if (config_store->save_cancellable)
{
g_cancellable_cancel (config_store->save_cancellable);
g_clear_object (&config_store->save_cancellable);
meta_monitor_config_store_save_sync (config_store);
}
g_clear_pointer (&config_store->configs, g_hash_table_destroy); g_clear_pointer (&config_store->configs, g_hash_table_destroy);
g_clear_object (&config_store->user_file); g_clear_object (&config_store->user_file);

View File

@@ -353,7 +353,12 @@ meta_monitor_manager_dummy_ensure_initial_config (MetaMonitorManager *manager)
if (meta_is_stage_views_enabled ()) if (meta_is_stage_views_enabled ())
meta_monitor_manager_update_logical_state (manager, config); meta_monitor_manager_update_logical_state (manager, config);
else else
meta_monitor_manager_update_logical_state_derived (manager, NULL); {
MetaMonitorManagerDeriveFlag flags =
META_MONITOR_MANAGER_DERIVE_FLAG_NONE;
meta_monitor_manager_update_logical_state_derived (manager, flags);
}
} }
static void static void
@@ -501,11 +506,10 @@ meta_monitor_manager_dummy_apply_monitors_config (MetaMonitorManager *manag
if (!config) if (!config)
{ {
manager->screen_width = META_MONITOR_MANAGER_MIN_SCREEN_WIDTH; manager->screen_width = 0;
manager->screen_height = META_MONITOR_MANAGER_MIN_SCREEN_HEIGHT; manager->screen_height = 0;
meta_monitor_manager_rebuild (manager, NULL); meta_monitor_manager_rebuild (manager, NULL);
return TRUE;
} }
if (!meta_monitor_config_manager_assign (manager, config, if (!meta_monitor_config_manager_assign (manager, config,

View File

@@ -40,7 +40,6 @@
#include <libupower-glib/upower.h> #include <libupower-glib/upower.h>
#include "display-private.h" #include "display-private.h"
#include <meta/screen.h>
#include "stack-tracker.h" #include "stack-tracker.h"
#include <meta/meta-monitor-manager.h> #include <meta/meta-monitor-manager.h>
@@ -67,9 +66,6 @@ typedef struct _MetaCrtcInfo MetaCrtcInfo;
typedef struct _MetaOutputInfo MetaOutputInfo; typedef struct _MetaOutputInfo MetaOutputInfo;
typedef struct _MetaTileInfo MetaTileInfo; typedef struct _MetaTileInfo MetaTileInfo;
#define META_MONITOR_MANAGER_MIN_SCREEN_WIDTH 640
#define META_MONITOR_MANAGER_MIN_SCREEN_HEIGHT 480
typedef enum _MetaMonitorManagerCapability typedef enum _MetaMonitorManagerCapability
{ {
META_MONITOR_MANAGER_CAPABILITY_NONE = 0, META_MONITOR_MANAGER_CAPABILITY_NONE = 0,
@@ -93,6 +89,12 @@ typedef enum _MetaLogicalMonitorLayoutMode
META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL = 2 META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL = 2
} MetaLogicalMonitorLayoutMode; } MetaLogicalMonitorLayoutMode;
typedef enum _MetaMonitorManagerDeriveFlag
{
META_MONITOR_MANAGER_DERIVE_FLAG_NONE = 0,
META_MONITOR_MANAGER_DERIVE_FLAG_CONFIGURED_SCALE = (1 << 0)
} MetaMonitorManagerDeriveFlag;
typedef enum typedef enum
{ {
META_MONITOR_TRANSFORM_NORMAL, META_MONITOR_TRANSFORM_NORMAL,
@@ -328,19 +330,6 @@ struct _MetaMonitorManager
GList *monitors; GList *monitors;
struct {
MetaOutput *outputs;
unsigned int n_outputs;
MetaCrtcMode *modes;
unsigned int n_modes;
MetaCrtc *crtcs;
unsigned int n_crtcs;
GList *monitors;
} pending_cleanup;
GList *logical_monitors; GList *logical_monitors;
MetaLogicalMonitor *primary_logical_monitor; MetaLogicalMonitor *primary_logical_monitor;
@@ -430,7 +419,7 @@ struct _MetaMonitorManagerClass
void meta_monitor_manager_rebuild (MetaMonitorManager *manager, void meta_monitor_manager_rebuild (MetaMonitorManager *manager,
MetaMonitorsConfig *config); MetaMonitorsConfig *config);
void meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager, void meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager,
MetaMonitorsConfig *config); MetaMonitorManagerDeriveFlag flags);
int meta_monitor_manager_get_num_logical_monitors (MetaMonitorManager *manager); int meta_monitor_manager_get_num_logical_monitors (MetaMonitorManager *manager);
@@ -450,7 +439,7 @@ MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_from_rect (MetaMoni
MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager, MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
MetaLogicalMonitor *logical_monitor, MetaLogicalMonitor *logical_monitor,
MetaScreenDirection direction); MetaDisplayDirection direction);
MetaMonitor * meta_monitor_manager_get_primary_monitor (MetaMonitorManager *manager); MetaMonitor * meta_monitor_manager_get_primary_monitor (MetaMonitorManager *manager);
@@ -459,9 +448,6 @@ MetaMonitor * meta_monitor_manager_get_laptop_panel (MetaMonitorManager *m
MetaMonitor * meta_monitor_manager_get_monitor_from_spec (MetaMonitorManager *manager, MetaMonitor * meta_monitor_manager_get_monitor_from_spec (MetaMonitorManager *manager,
MetaMonitorSpec *monitor_spec); MetaMonitorSpec *monitor_spec);
MetaMonitor * meta_monitor_manager_get_monitor_from_connector (MetaMonitorManager *manager,
const char *connector);
GList * meta_monitor_manager_get_monitors (MetaMonitorManager *manager); GList * meta_monitor_manager_get_monitors (MetaMonitorManager *manager);
MetaOutput *meta_monitor_manager_get_outputs (MetaMonitorManager *manager, MetaOutput *meta_monitor_manager_get_outputs (MetaMonitorManager *manager,
@@ -508,7 +494,7 @@ MetaMonitorsConfig * meta_monitor_manager_ensure_configured (MetaMonitorManager
void meta_monitor_manager_update_logical_state (MetaMonitorManager *manager, void meta_monitor_manager_update_logical_state (MetaMonitorManager *manager,
MetaMonitorsConfig *config); MetaMonitorsConfig *config);
void meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager, void meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
MetaMonitorsConfig *config); MetaMonitorManagerDeriveFlag flags);
gboolean meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager); gboolean meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager);
@@ -542,9 +528,6 @@ gboolean meta_monitor_manager_get_max_screen_size (MetaMonitorManager
MetaLogicalMonitorLayoutMode MetaLogicalMonitorLayoutMode
meta_monitor_manager_get_default_layout_mode (MetaMonitorManager *manager); meta_monitor_manager_get_default_layout_mode (MetaMonitorManager *manager);
MetaMonitorConfigManager *
meta_monitor_manager_get_config_manager (MetaMonitorManager *manager);
void meta_monitor_manager_rotate_monitor (MetaMonitorManager *manager); void meta_monitor_manager_rotate_monitor (MetaMonitorManager *manager);
void meta_monitor_manager_clear_output (MetaOutput *output); void meta_monitor_manager_clear_output (MetaOutput *output);

View File

@@ -34,7 +34,7 @@
#include <meta/main.h> #include <meta/main.h>
#include "util-private.h" #include "util-private.h"
#include <meta/errors.h> #include <meta/meta-x11-errors.h>
#include "edid.h" #include "edid.h"
#include "backends/meta-logical-monitor.h" #include "backends/meta-logical-monitor.h"
#include "backends/meta-monitor.h" #include "backends/meta-monitor.h"
@@ -46,7 +46,6 @@
#define DEFAULT_DISPLAY_CONFIGURATION_TIMEOUT 20 #define DEFAULT_DISPLAY_CONFIGURATION_TIMEOUT 20
enum { enum {
MONITORS_CHANGED_INTERNAL,
CONFIRM_DISPLAY_CHANGE, CONFIRM_DISPLAY_CHANGE,
SIGNALS_LAST SIGNALS_LAST
}; };
@@ -76,9 +75,6 @@ static gboolean
meta_monitor_manager_is_config_complete (MetaMonitorManager *manager, meta_monitor_manager_is_config_complete (MetaMonitorManager *manager,
MetaMonitorsConfig *config); MetaMonitorsConfig *config);
static void
cleanup_pending_cleanup_state (MetaMonitorManager *manager);
static void static void
meta_monitor_manager_init (MetaMonitorManager *manager) meta_monitor_manager_init (MetaMonitorManager *manager)
{ {
@@ -157,11 +153,15 @@ meta_monitor_manager_rebuild_logical_monitors (MetaMonitorManager *manager,
} }
static float static float
derive_configured_global_scale (MetaMonitorManager *manager, derive_configured_global_scale (MetaMonitorManager *manager)
MetaMonitorsConfig *config)
{ {
MetaMonitorsConfig *config;
MetaLogicalMonitorConfig *logical_monitor_config; MetaLogicalMonitorConfig *logical_monitor_config;
config = meta_monitor_config_manager_get_current (manager->config_manager);
if (!config)
return 1.0;
logical_monitor_config = config->logical_monitor_configs->data; logical_monitor_config = config->logical_monitor_configs->data;
return logical_monitor_config->scale; return logical_monitor_config->scale;
@@ -193,11 +193,12 @@ derive_calculated_global_scale (MetaMonitorManager *manager)
static float static float
derive_scale_from_config (MetaMonitorManager *manager, derive_scale_from_config (MetaMonitorManager *manager,
MetaMonitorsConfig *config,
MetaRectangle *layout) MetaRectangle *layout)
{ {
MetaMonitorsConfig *config;
GList *l; GList *l;
config = meta_monitor_config_manager_get_current (manager->config_manager);
for (l = config->logical_monitor_configs; l; l = l->next) for (l = config->logical_monitor_configs; l; l = l->next)
{ {
MetaLogicalMonitorConfig *logical_monitor_config = l->data; MetaLogicalMonitorConfig *logical_monitor_config = l->data;
@@ -212,12 +213,13 @@ derive_scale_from_config (MetaMonitorManager *manager,
static void static void
meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manager, meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manager,
MetaMonitorsConfig *config) MetaMonitorManagerDeriveFlag flags)
{ {
GList *logical_monitors = NULL; GList *logical_monitors = NULL;
GList *l; GList *l;
int monitor_number; int monitor_number;
MetaLogicalMonitor *primary_logical_monitor = NULL; MetaLogicalMonitor *primary_logical_monitor = NULL;
gboolean use_configured_scale;
gboolean use_global_scale; gboolean use_global_scale;
float global_scale = 0.0; float global_scale = 0.0;
MetaMonitorManagerCapability capabilities; MetaMonitorManagerCapability capabilities;
@@ -228,10 +230,13 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manag
use_global_scale = use_global_scale =
!!(capabilities & META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED); !!(capabilities & META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED);
use_configured_scale =
!!(flags & META_MONITOR_MANAGER_DERIVE_FLAG_CONFIGURED_SCALE);
if (use_global_scale) if (use_global_scale)
{ {
if (config) if (use_configured_scale)
global_scale = derive_configured_global_scale (manager, config); global_scale = derive_configured_global_scale (manager);
else else
global_scale = derive_calculated_global_scale (manager); global_scale = derive_calculated_global_scale (manager);
} }
@@ -258,8 +263,8 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manag
if (use_global_scale) if (use_global_scale)
scale = global_scale; scale = global_scale;
else if (config) else if (use_configured_scale)
scale = derive_scale_from_config (manager, config, &layout); scale = derive_scale_from_config (manager, &layout);
else else
scale = calculate_monitor_scale (manager, monitor); scale = calculate_monitor_scale (manager, monitor);
@@ -350,7 +355,7 @@ meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager)
gboolean gboolean
meta_monitor_manager_is_headless (MetaMonitorManager *manager) meta_monitor_manager_is_headless (MetaMonitorManager *manager)
{ {
return !manager->logical_monitors; return !manager->monitors;
} }
float float
@@ -805,8 +810,6 @@ meta_monitor_manager_finalize (GObject *object)
meta_monitor_manager_free_crtc_array (manager->crtcs, manager->n_crtcs); meta_monitor_manager_free_crtc_array (manager->crtcs, manager->n_crtcs);
g_list_free_full (manager->logical_monitors, g_object_unref); g_list_free_full (manager->logical_monitors, g_object_unref);
cleanup_pending_cleanup_state (manager);
g_signal_handler_disconnect (meta_get_backend (), g_signal_handler_disconnect (meta_get_backend (),
manager->experimental_features_changed_handler_id); manager->experimental_features_changed_handler_id);
@@ -857,14 +860,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
klass->read_edid = meta_monitor_manager_real_read_edid; klass->read_edid = meta_monitor_manager_real_read_edid;
klass->is_lid_closed = meta_monitor_manager_real_is_lid_closed; klass->is_lid_closed = meta_monitor_manager_real_is_lid_closed;
signals[MONITORS_CHANGED_INTERNAL] =
g_signal_new ("monitors-changed-internal",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
signals[CONFIRM_DISPLAY_CHANGE] = signals[CONFIRM_DISPLAY_CHANGE] =
g_signal_new ("confirm-display-change", g_signal_new ("confirm-display-change",
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
@@ -1783,8 +1778,6 @@ create_logical_monitor_config_from_variant (MetaMonitorManager *manager
monitor_config = monitor_config =
create_monitor_config_from_variant (manager, create_monitor_config_from_variant (manager,
monitor_config_variant, error); monitor_config_variant, error);
g_variant_unref (monitor_config_variant);
if (!monitor_config) if (!monitor_config)
goto err; goto err;
@@ -1935,8 +1928,6 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
logical_monitor_config_variant, logical_monitor_config_variant,
layout_mode, layout_mode,
&error); &error);
g_variant_unref (logical_monitor_config_variant);
if (!logical_monitor_config) if (!logical_monitor_config)
{ {
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
@@ -1952,9 +1943,7 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
logical_monitor_config); logical_monitor_config);
} }
config = meta_monitors_config_new (manager, config = meta_monitors_config_new (logical_monitor_configs, layout_mode,
logical_monitor_configs,
layout_mode,
META_MONITORS_CONFIG_FLAG_NONE); META_MONITORS_CONFIG_FLAG_NONE);
if (!meta_verify_monitors_config (config, manager, &error)) if (!meta_verify_monitors_config (config, manager, &error))
{ {
@@ -2282,7 +2271,7 @@ MetaLogicalMonitor *
meta_monitor_manager_get_logical_monitor_from_number (MetaMonitorManager *manager, meta_monitor_manager_get_logical_monitor_from_number (MetaMonitorManager *manager,
int number) int number)
{ {
g_return_val_if_fail ((unsigned int) number < g_list_length (manager->logical_monitors), NULL); g_assert ((unsigned int) number < g_list_length (manager->logical_monitors));
return g_list_nth (manager->logical_monitors, number)->data; return g_list_nth (manager->logical_monitors, number)->data;
} }
@@ -2324,24 +2313,6 @@ meta_monitor_manager_get_laptop_panel (MetaMonitorManager *manager)
return find_monitor (manager, meta_monitor_is_laptop_panel); return find_monitor (manager, meta_monitor_is_laptop_panel);
} }
MetaMonitor *
meta_monitor_manager_get_monitor_from_connector (MetaMonitorManager *manager,
const char *connector)
{
GList *l;
for (l = manager->monitors; l; l = l->next)
{
MetaMonitor *monitor = l->data;
if (g_str_equal (meta_monitor_get_connector (monitor),
connector))
return monitor;
}
return NULL;
}
MetaMonitor * MetaMonitor *
meta_monitor_manager_get_monitor_from_spec (MetaMonitorManager *manager, meta_monitor_manager_get_monitor_from_spec (MetaMonitorManager *manager,
MetaMonitorSpec *monitor_spec) MetaMonitorSpec *monitor_spec)
@@ -2422,7 +2393,7 @@ meta_monitor_manager_get_logical_monitor_from_rect (MetaMonitorManager *manager,
MetaLogicalMonitor * MetaLogicalMonitor *
meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager, meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
MetaLogicalMonitor *logical_monitor, MetaLogicalMonitor *logical_monitor,
MetaScreenDirection direction) MetaDisplayDirection direction)
{ {
GList *l; GList *l;
@@ -2487,10 +2458,16 @@ meta_monitor_manager_get_screen_size (MetaMonitorManager *manager,
} }
static void static void
generate_monitors (MetaMonitorManager *manager) rebuild_monitors (MetaMonitorManager *manager)
{ {
unsigned int i; unsigned int i;
if (manager->monitors)
{
g_list_free_full (manager->monitors, g_object_unref);
manager->monitors = NULL;
}
for (i = 0; i < manager->n_outputs; i++) for (i = 0; i < manager->n_outputs; i++)
{ {
MetaOutput *output = &manager->outputs[i]; MetaOutput *output = &manager->outputs[i];
@@ -2550,37 +2527,6 @@ meta_monitor_manager_is_transform_handled (MetaMonitorManager *manager,
return manager_class->is_transform_handled (manager, crtc, transform); return manager_class->is_transform_handled (manager, crtc, transform);
} }
static void
cleanup_pending_cleanup_state (MetaMonitorManager *manager)
{
if (manager->pending_cleanup.monitors)
{
g_list_free_full (manager->pending_cleanup.monitors, g_object_unref);
manager->pending_cleanup.monitors = NULL;
}
if (manager->pending_cleanup.outputs)
{
meta_monitor_manager_free_output_array (manager->pending_cleanup.outputs,
manager->pending_cleanup.n_outputs);
manager->pending_cleanup.outputs = NULL;
manager->pending_cleanup.n_outputs = 0;
}
if (manager->pending_cleanup.modes)
{
meta_monitor_manager_free_mode_array (manager->pending_cleanup.modes,
manager->pending_cleanup.n_modes);
manager->pending_cleanup.modes = NULL;
manager->pending_cleanup.n_modes = 0;
}
if (manager->pending_cleanup.crtcs)
{
meta_monitor_manager_free_crtc_array (manager->pending_cleanup.crtcs,
manager->pending_cleanup.n_crtcs);
manager->pending_cleanup.crtcs = NULL;
manager->pending_cleanup.n_crtcs = 0;
}
}
void void
meta_monitor_manager_read_current_state (MetaMonitorManager *manager) meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
{ {
@@ -2602,47 +2548,12 @@ meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
manager->serial++; manager->serial++;
META_MONITOR_MANAGER_GET_CLASS (manager)->read_current (manager); META_MONITOR_MANAGER_GET_CLASS (manager)->read_current (manager);
/* rebuild_monitors (manager);
* We must delay cleaning up the old hardware state, because the current
* logical state, when running on top of X11/Xrandr, may still be based on it
* for some time. The logical state may not be updated immediately, in case
* it is reconfigured, but after getting the response from a logical state
* configuration request to the X server. To be able to handle events and
* other things needing the logical state between the request and the
* response, the hardware state the logical state points to must be kept
* alive.
*
* If there is already a hardware state pending cleaning up, it means that
* the current logical state is still using that hardware state, so we can
* destroy the just replaced state immedietaley.
*/
if (manager->pending_cleanup.outputs ||
manager->pending_cleanup.crtcs ||
manager->pending_cleanup.monitors)
{
if (manager->monitors)
{
g_list_free_full (manager->monitors, g_object_unref);
manager->monitors = NULL;
}
meta_monitor_manager_free_output_array (old_outputs, n_old_outputs); meta_monitor_manager_free_output_array (old_outputs, n_old_outputs);
meta_monitor_manager_free_mode_array (old_modes, n_old_modes); meta_monitor_manager_free_mode_array (old_modes, n_old_modes);
meta_monitor_manager_free_crtc_array (old_crtcs, n_old_crtcs); meta_monitor_manager_free_crtc_array (old_crtcs, n_old_crtcs);
} }
else
{
manager->pending_cleanup.outputs = old_outputs;
manager->pending_cleanup.n_outputs = n_old_outputs;
manager->pending_cleanup.modes = old_modes;
manager->pending_cleanup.n_modes = n_old_modes;
manager->pending_cleanup.crtcs = old_crtcs;
manager->pending_cleanup.n_crtcs = n_old_crtcs;
manager->pending_cleanup.monitors = manager->monitors;
manager->monitors = NULL;
}
generate_monitors (manager);
}
static void static void
meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager) meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager)
@@ -2652,8 +2563,6 @@ meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager)
manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN; manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
meta_backend_monitors_changed (backend); meta_backend_monitors_changed (backend);
g_signal_emit (manager, signals[MONITORS_CHANGED_INTERNAL], 0);
g_signal_emit_by_name (manager, "monitors-changed"); g_signal_emit_by_name (manager, "monitors-changed");
} }
@@ -2733,8 +2642,6 @@ meta_monitor_manager_rebuild (MetaMonitorManager *manager,
meta_monitor_manager_notify_monitors_changed (manager); meta_monitor_manager_notify_monitors_changed (manager);
g_list_free_full (old_logical_monitors, g_object_unref); g_list_free_full (old_logical_monitors, g_object_unref);
cleanup_pending_cleanup_state (manager);
} }
static void static void
@@ -2752,16 +2659,16 @@ meta_monitor_manager_update_monitor_modes_derived (MetaMonitorManager *manager)
void void
meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager, meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
MetaMonitorsConfig *config) MetaMonitorManagerDeriveFlag flags)
{ {
manager->layout_mode = META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL; manager->layout_mode = META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
meta_monitor_manager_rebuild_logical_monitors_derived (manager, config); meta_monitor_manager_rebuild_logical_monitors_derived (manager, flags);
} }
void void
meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager, meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager,
MetaMonitorsConfig *config) MetaMonitorManagerDeriveFlag flags)
{ {
GList *old_logical_monitors; GList *old_logical_monitors;
@@ -2772,13 +2679,11 @@ meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager,
old_logical_monitors = manager->logical_monitors; old_logical_monitors = manager->logical_monitors;
meta_monitor_manager_update_logical_state_derived (manager, config); meta_monitor_manager_update_logical_state_derived (manager, flags);
meta_monitor_manager_notify_monitors_changed (manager); meta_monitor_manager_notify_monitors_changed (manager);
g_list_free_full (old_logical_monitors, g_object_unref); g_list_free_full (old_logical_monitors, g_object_unref);
cleanup_pending_cleanup_state (manager);
} }
void void
@@ -3043,9 +2948,3 @@ meta_monitor_manager_get_switch_config (MetaMonitorManager *manager)
{ {
return manager->current_switch_config; return manager->current_switch_config;
} }
MetaMonitorConfigManager *
meta_monitor_manager_get_config_manager (MetaMonitorManager *manager)
{
return manager->config_manager;
}

View File

@@ -32,7 +32,8 @@
#define MAXIMUM_SCALE_FACTOR 4.0f #define MAXIMUM_SCALE_FACTOR 4.0f
#define MINIMUM_LOGICAL_WIDTH 800 #define MINIMUM_LOGICAL_WIDTH 800
#define MINIMUM_LOGICAL_HEIGHT 600 #define MINIMUM_LOGICAL_HEIGHT 600
#define MAXIMUM_REFRESH_RATE_DIFF 0.001
#define HANDLED_CRTC_MODE_FLAGS (META_CRTC_MODE_FLAG_INTERLACE)
typedef struct _MetaMonitorMode typedef struct _MetaMonitorMode
{ {
@@ -247,18 +248,6 @@ meta_monitor_is_laptop_panel (MetaMonitor *monitor)
} }
} }
gboolean
meta_monitor_is_same_as (MetaMonitor *monitor,
MetaMonitor *other_monitor)
{
MetaMonitorPrivate *priv =
meta_monitor_get_instance_private (monitor);
MetaMonitorPrivate *other_priv =
meta_monitor_get_instance_private (other_monitor);
return priv->winsys_id == other_priv->winsys_id;
}
void void
meta_monitor_get_current_resolution (MetaMonitor *monitor, meta_monitor_get_current_resolution (MetaMonitor *monitor,
int *width, int *width,
@@ -353,8 +342,6 @@ meta_monitor_finalize (GObject *object)
g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free); g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free);
g_clear_pointer (&priv->outputs, g_list_free); g_clear_pointer (&priv->outputs, g_list_free);
meta_monitor_spec_free (priv->spec); meta_monitor_spec_free (priv->spec);
G_OBJECT_CLASS (meta_monitor_parent_class)->finalize (object);
} }
static void static void
@@ -392,22 +379,16 @@ generate_mode_id (MetaMonitorModeSpec *monitor_mode_spec)
static gboolean static gboolean
meta_monitor_add_mode (MetaMonitor *monitor, meta_monitor_add_mode (MetaMonitor *monitor,
MetaMonitorMode *monitor_mode, MetaMonitorMode *monitor_mode)
gboolean replace)
{ {
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor); MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
MetaMonitorMode *existing_mode;
existing_mode = g_hash_table_lookup (priv->mode_ids, if (g_hash_table_lookup (priv->mode_ids,
meta_monitor_mode_get_id (monitor_mode)); meta_monitor_mode_get_id (monitor_mode)))
if (existing_mode && !replace)
return FALSE; return FALSE;
if (existing_mode)
priv->modes = g_list_remove (priv->modes, existing_mode);
priv->modes = g_list_append (priv->modes, monitor_mode); priv->modes = g_list_append (priv->modes, monitor_mode);
g_hash_table_replace (priv->mode_ids, monitor_mode->id, monitor_mode); g_hash_table_insert (priv->mode_ids, monitor_mode->id, monitor_mode);
return TRUE; return TRUE;
} }
@@ -419,17 +400,13 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
MetaMonitorPrivate *monitor_priv = MetaMonitorPrivate *monitor_priv =
meta_monitor_get_instance_private (monitor); meta_monitor_get_instance_private (monitor);
MetaOutput *output; MetaOutput *output;
MetaCrtcModeFlag preferred_mode_flags;
unsigned int i; unsigned int i;
output = meta_monitor_get_main_output (monitor); output = meta_monitor_get_main_output (monitor);
preferred_mode_flags = output->preferred_mode->flags;
for (i = 0; i < output->n_modes; i++) for (i = 0; i < output->n_modes; i++)
{ {
MetaCrtcMode *crtc_mode = output->modes[i]; MetaCrtcMode *crtc_mode = output->modes[i];
MetaMonitorMode *mode; MetaMonitorMode *mode;
gboolean replace;
mode = g_new0 (MetaMonitorMode, 1); mode = g_new0 (MetaMonitorMode, 1);
mode->spec = (MetaMonitorModeSpec) { mode->spec = (MetaMonitorModeSpec) {
@@ -445,26 +422,13 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
.crtc_mode = crtc_mode .crtc_mode = crtc_mode
}; };
/*
* We don't distinguish between all available mode flags, just the ones
* that are configurable. We still need to pick some mode though, so
* prefer ones that has the same set of flags as the preferred mode;
* otherwise take the first one in the list. This guarantees that the
* preferred mode is always added.
*/
replace = crtc_mode->flags == preferred_mode_flags;
if (!meta_monitor_add_mode (monitor, mode, replace))
{
g_assert (crtc_mode != output->preferred_mode);
meta_monitor_mode_free (mode);
continue;
}
if (crtc_mode == output->preferred_mode) if (crtc_mode == output->preferred_mode)
monitor_priv->preferred_mode = mode; monitor_priv->preferred_mode = mode;
if (output->crtc && crtc_mode == output->crtc->current_mode) if (output->crtc && crtc_mode == output->crtc->current_mode)
monitor_priv->current_mode = mode; monitor_priv->current_mode = mode;
if (!meta_monitor_add_mode (monitor, mode))
meta_monitor_mode_free (mode);
} }
} }
@@ -846,7 +810,7 @@ generate_tiled_monitor_modes (MetaMonitorTiled *monitor_tiled)
tiled_modes = g_list_remove_link (tiled_modes, l); tiled_modes = g_list_remove_link (tiled_modes, l);
if (!meta_monitor_add_mode (monitor, mode, FALSE)) if (!meta_monitor_add_mode (monitor, mode))
{ {
meta_monitor_mode_free (mode); meta_monitor_mode_free (mode);
continue; continue;
@@ -988,7 +952,7 @@ generate_untiled_monitor_modes (MetaMonitorTiled *monitor_tiled)
if (!mode) if (!mode)
continue; continue;
if (!meta_monitor_add_mode (monitor, mode, FALSE)) if (!meta_monitor_add_mode (monitor, mode))
{ {
meta_monitor_mode_free (mode); meta_monitor_mode_free (mode);
continue; continue;
@@ -1213,8 +1177,6 @@ meta_monitor_tiled_finalize (GObject *object)
meta_monitor_manager_tiled_monitor_removed (monitor_priv->monitor_manager, meta_monitor_manager_tiled_monitor_removed (monitor_priv->monitor_manager,
monitor); monitor);
G_OBJECT_CLASS (meta_monitor_tiled_parent_class)->finalize (object);
} }
static void static void
@@ -1278,8 +1240,8 @@ meta_monitor_mode_spec_equals (MetaMonitorModeSpec *monitor_mode_spec,
{ {
return (monitor_mode_spec->width == other_monitor_mode_spec->width && return (monitor_mode_spec->width == other_monitor_mode_spec->width &&
monitor_mode_spec->height == other_monitor_mode_spec->height && monitor_mode_spec->height == other_monitor_mode_spec->height &&
ABS (monitor_mode_spec->refresh_rate - (monitor_mode_spec->refresh_rate ==
other_monitor_mode_spec->refresh_rate) < MAXIMUM_REFRESH_RATE_DIFF && other_monitor_mode_spec->refresh_rate) &&
monitor_mode_spec->flags == other_monitor_mode_spec->flags); monitor_mode_spec->flags == other_monitor_mode_spec->flags);
} }
@@ -1571,14 +1533,6 @@ meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
} }
} }
if (supported_scales->len == 0)
{
float fallback_scale;
fallback_scale = 1.0;
g_array_append_val (supported_scales, fallback_scale);
}
*n_supported_scales = supported_scales->len; *n_supported_scales = supported_scales->len;
return (float *) g_array_free (supported_scales, FALSE); return (float *) g_array_free (supported_scales, FALSE);
} }
@@ -1628,32 +1582,6 @@ meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
GList *l; GList *l;
int i; int i;
for (l = monitor_priv->outputs, i = 0; l; l = l->next, i++)
{
MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
if (!monitor_crtc_mode->crtc_mode)
continue;
if (!func (monitor, mode, monitor_crtc_mode, user_data, error))
return FALSE;
}
return TRUE;
}
gboolean
meta_monitor_mode_foreach_output (MetaMonitor *monitor,
MetaMonitorMode *mode,
MetaMonitorModeFunc func,
gpointer user_data,
GError **error)
{
MetaMonitorPrivate *monitor_priv =
meta_monitor_get_instance_private (monitor);
GList *l;
int i;
for (l = monitor_priv->outputs, i = 0; l; l = l->next, i++) for (l = monitor_priv->outputs, i = 0; l; l = l->next, i++)
{ {
MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i]; MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];

View File

@@ -48,8 +48,6 @@ typedef struct _MetaMonitorCrtcMode
MetaCrtcMode *crtc_mode; MetaCrtcMode *crtc_mode;
} MetaMonitorCrtcMode; } MetaMonitorCrtcMode;
#define HANDLED_CRTC_MODE_FLAGS (META_CRTC_MODE_FLAG_INTERLACE)
typedef gboolean (* MetaMonitorModeFunc) (MetaMonitor *monitor, typedef gboolean (* MetaMonitorModeFunc) (MetaMonitor *monitor,
MetaMonitorMode *mode, MetaMonitorMode *mode,
MetaMonitorCrtcMode *monitor_crtc_mode, MetaMonitorCrtcMode *monitor_crtc_mode,
@@ -113,9 +111,6 @@ gboolean meta_monitor_is_underscanning (MetaMonitor *monitor);
gboolean meta_monitor_is_laptop_panel (MetaMonitor *monitor); gboolean meta_monitor_is_laptop_panel (MetaMonitor *monitor);
gboolean meta_monitor_is_same_as (MetaMonitor *monitor,
MetaMonitor *other_monitor);
GList * meta_monitor_get_outputs (MetaMonitor *monitor); GList * meta_monitor_get_outputs (MetaMonitor *monitor);
void meta_monitor_get_current_resolution (MetaMonitor *monitor, void meta_monitor_get_current_resolution (MetaMonitor *monitor,
@@ -199,12 +194,6 @@ gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
gpointer user_data, gpointer user_data,
GError **error); GError **error);
gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
MetaMonitorMode *mode,
MetaMonitorModeFunc func,
gpointer user_data,
GError **error);
MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id); MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id);
gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id, gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id,

View File

@@ -1,505 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-remote-desktop-session.h"
#include <linux/input.h>
#include <xkbcommon/xkbcommon.h>
#include "backends/meta-dbus-session-watcher.h"
#include "backends/meta-screen-cast-session.h"
#include "backends/native/meta-backend-native.h"
#include "backends/x11/meta-backend-x11.h"
#include "cogl/cogl.h"
#include "meta/meta-backend.h"
#include "meta/errors.h"
#include "meta-dbus-remote-desktop.h"
#define META_REMOTE_DESKTOP_SESSION_DBUS_PATH "/org/gnome/Mutter/RemoteDesktop/Session"
struct _MetaRemoteDesktopSession
{
MetaDBusRemoteDesktopSessionSkeleton parent;
char *peer_name;
char *session_id;
char *object_path;
MetaScreenCastSession *screen_cast_session;
gulong screen_cast_session_closed_handler_id;
ClutterVirtualInputDevice *virtual_pointer;
ClutterVirtualInputDevice *virtual_keyboard;
};
static void
meta_remote_desktop_session_init_iface (MetaDBusRemoteDesktopSessionIface *iface);
static void
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaRemoteDesktopSession,
meta_remote_desktop_session,
META_DBUS_TYPE_REMOTE_DESKTOP_SESSION_SKELETON,
G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_REMOTE_DESKTOP_SESSION,
meta_remote_desktop_session_init_iface)
G_IMPLEMENT_INTERFACE (META_TYPE_DBUS_SESSION,
meta_dbus_session_init_iface))
static gboolean
meta_remote_desktop_session_is_running (MetaRemoteDesktopSession *session)
{
return !!session->virtual_pointer;
}
static gboolean
meta_remote_desktop_session_start (MetaRemoteDesktopSession *session,
GError **error)
{
ClutterDeviceManager *device_manager =
clutter_device_manager_get_default ();
g_assert (!session->virtual_pointer && !session->virtual_keyboard);
if (session->screen_cast_session)
{
if (!meta_screen_cast_session_start (session->screen_cast_session, error))
return FALSE;
}
session->virtual_pointer =
clutter_device_manager_create_virtual_device (device_manager,
CLUTTER_POINTER_DEVICE);
session->virtual_keyboard =
clutter_device_manager_create_virtual_device (device_manager,
CLUTTER_KEYBOARD_DEVICE);
return TRUE;
}
void
meta_remote_desktop_session_close (MetaRemoteDesktopSession *session)
{
MetaDBusRemoteDesktopSession *skeleton =
META_DBUS_REMOTE_DESKTOP_SESSION (session);
if (session->screen_cast_session)
{
g_signal_handler_disconnect (session->screen_cast_session,
session->screen_cast_session_closed_handler_id);
meta_screen_cast_session_close (session->screen_cast_session);
session->screen_cast_session = NULL;
}
g_clear_object (&session->virtual_pointer);
g_clear_object (&session->virtual_keyboard);
meta_dbus_session_notify_closed (META_DBUS_SESSION (session));
meta_dbus_remote_desktop_session_emit_closed (skeleton);
g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (session));
g_object_unref (session);
}
char *
meta_remote_desktop_session_get_object_path (MetaRemoteDesktopSession *session)
{
return session->object_path;
}
char *
meta_remote_desktop_session_get_session_id (MetaRemoteDesktopSession *session)
{
return session->session_id;
}
static void
on_screen_cast_session_closed (MetaScreenCastSession *screen_cast_session,
MetaRemoteDesktopSession *session)
{
session->screen_cast_session = NULL;
meta_remote_desktop_session_close (session);
}
gboolean
meta_remote_desktop_session_register_screen_cast (MetaRemoteDesktopSession *session,
MetaScreenCastSession *screen_cast_session,
GError **error)
{
if (session->screen_cast_session)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Remote desktop session already have an associated "
"screen cast session");
return FALSE;
}
session->screen_cast_session = screen_cast_session;
session->screen_cast_session_closed_handler_id =
g_signal_connect (screen_cast_session, "session-closed",
G_CALLBACK (on_screen_cast_session_closed),
session);
return TRUE;
}
MetaRemoteDesktopSession *
meta_remote_desktop_session_new (MetaRemoteDesktop *remote_desktop,
const char *peer_name,
GError **error)
{
GDBusInterfaceSkeleton *interface_skeleton;
MetaRemoteDesktopSession *session;
GDBusConnection *connection;
session = g_object_new (META_TYPE_REMOTE_DESKTOP_SESSION, NULL);
session->peer_name = g_strdup (peer_name);
interface_skeleton = G_DBUS_INTERFACE_SKELETON (session);
connection = meta_remote_desktop_get_connection (remote_desktop);
if (!g_dbus_interface_skeleton_export (interface_skeleton,
connection,
session->object_path,
error))
{
g_object_unref (session);
return NULL;
}
return session;
}
static gboolean
check_permission (MetaRemoteDesktopSession *session,
GDBusMethodInvocation *invocation)
{
return g_strcmp0 (session->peer_name,
g_dbus_method_invocation_get_sender (invocation)) == 0;
}
static gboolean
handle_start (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
GError *error = NULL;
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
if (!meta_remote_desktop_session_start (session, &error))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Failed to start remote desktop: %s",
error->message);
g_error_free (error);
meta_remote_desktop_session_close (session);
return TRUE;
}
meta_dbus_remote_desktop_session_complete_start (skeleton, invocation);
return TRUE;
}
static gboolean
handle_stop (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
meta_remote_desktop_session_close (session);
meta_dbus_remote_desktop_session_complete_stop (skeleton, invocation);
return TRUE;
}
static gboolean
handle_notify_keyboard_keysym (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation,
unsigned int keysym,
gboolean pressed)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
ClutterKeyState state;
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
if (pressed)
state = CLUTTER_KEY_STATE_PRESSED;
else
state = CLUTTER_KEY_STATE_RELEASED;
clutter_virtual_input_device_notify_keyval (session->virtual_keyboard,
CLUTTER_CURRENT_TIME,
keysym,
state);
meta_dbus_remote_desktop_session_complete_notify_keyboard_keysym (skeleton,
invocation);
return TRUE;
}
/* Translation taken from the clutter evdev backend. */
static int
translate_to_clutter_button (int button)
{
switch (button)
{
case BTN_LEFT:
return CLUTTER_BUTTON_PRIMARY;
case BTN_RIGHT:
return CLUTTER_BUTTON_SECONDARY;
case BTN_MIDDLE:
return CLUTTER_BUTTON_MIDDLE;
default:
/*
* For compatibility reasons, all additional buttons go after the old
* 4-7 scroll ones.
*/
return button - (BTN_LEFT - 1) + 4;
}
}
static gboolean
handle_notify_pointer_button (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation,
int button_code,
gboolean pressed)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
uint32_t button;
ClutterButtonState state;
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
button = translate_to_clutter_button (button_code);
if (pressed)
state = CLUTTER_BUTTON_STATE_PRESSED;
else
state = CLUTTER_BUTTON_STATE_RELEASED;
clutter_virtual_input_device_notify_button (session->virtual_pointer,
CLUTTER_CURRENT_TIME,
button,
state);
meta_dbus_remote_desktop_session_complete_notify_pointer_button (skeleton,
invocation);
return TRUE;
}
static ClutterScrollDirection
discrete_steps_to_scroll_direction (unsigned int axis,
int steps)
{
if (axis == 0 && steps < 0)
return CLUTTER_SCROLL_UP;
if (axis == 0 && steps > 0)
return CLUTTER_SCROLL_DOWN;
if (axis == 1 && steps < 0)
return CLUTTER_SCROLL_LEFT;
if (axis == 1 && steps > 0)
return CLUTTER_SCROLL_RIGHT;
g_assert_not_reached ();
}
static gboolean
handle_notify_pointer_axis_discrete (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation,
unsigned int axis,
int steps)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
ClutterScrollDirection direction;
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
if (axis <= 1)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Invalid axis value");
return TRUE;
}
if (steps == 0)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Invalid axis steps value");
return TRUE;
}
if (steps != -1 || steps != 1)
g_warning ("Multiple steps at at once not yet implemented, treating as one.");
/*
* We don't have the actual scroll source, but only know they should be
* considered as discrete steps. The device that produces such scroll events
* is the scroll wheel, so pretend that is the scroll source.
*/
direction = discrete_steps_to_scroll_direction (axis, steps);
clutter_virtual_input_device_notify_discrete_scroll (session->virtual_pointer,
CLUTTER_CURRENT_TIME,
direction,
CLUTTER_SCROLL_SOURCE_WHEEL);
meta_dbus_remote_desktop_session_complete_notify_pointer_axis_discrete (skeleton,
invocation);
return TRUE;
}
static gboolean
handle_notify_pointer_motion_absolute (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation,
const char *stream_path,
double x,
double y)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
clutter_virtual_input_device_notify_absolute_motion (session->virtual_pointer,
CLUTTER_CURRENT_TIME,
x, y);
meta_dbus_remote_desktop_session_complete_notify_pointer_motion_absolute (skeleton,
invocation);
return TRUE;
}
static void
meta_remote_desktop_session_init_iface (MetaDBusRemoteDesktopSessionIface *iface)
{
iface->handle_start = handle_start;
iface->handle_stop = handle_stop;
iface->handle_notify_keyboard_keysym = handle_notify_keyboard_keysym;
iface->handle_notify_pointer_button = handle_notify_pointer_button;
iface->handle_notify_pointer_axis_discrete = handle_notify_pointer_axis_discrete;
iface->handle_notify_pointer_motion_absolute = handle_notify_pointer_motion_absolute;
}
static void
meta_remote_desktop_session_client_vanished (MetaDbusSession *dbus_session)
{
meta_remote_desktop_session_close (META_REMOTE_DESKTOP_SESSION (dbus_session));
}
static void
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface)
{
iface->client_vanished = meta_remote_desktop_session_client_vanished;
}
static void
meta_remote_desktop_session_finalize (GObject *object)
{
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (object);
g_assert (!meta_remote_desktop_session_is_running (session));
g_free (session->peer_name);
g_free (session->session_id);
g_free (session->object_path);
G_OBJECT_CLASS (meta_remote_desktop_session_parent_class)->finalize (object);
}
static void
meta_remote_desktop_session_init (MetaRemoteDesktopSession *session)
{
MetaDBusRemoteDesktopSession *skeleton =
META_DBUS_REMOTE_DESKTOP_SESSION (session);
GRand *rand;
static unsigned int global_session_number = 0;
rand = g_rand_new ();
session->session_id = meta_generate_random_id (rand, 32);
g_rand_free (rand);
meta_dbus_remote_desktop_session_set_session_id (skeleton, session->session_id);
session->object_path =
g_strdup_printf (META_REMOTE_DESKTOP_SESSION_DBUS_PATH "/u%u",
++global_session_number);
}
static void
meta_remote_desktop_session_class_init (MetaRemoteDesktopSessionClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_remote_desktop_session_finalize;
}

View File

@@ -1,50 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_REMOTE_DESKTOP_SESSION_H
#define META_REMOTE_DESKTOP_SESSION_H
#include <glib-object.h>
#include "backends/meta-remote-desktop.h"
#include "backends/meta-screen-cast-session.h"
#define META_TYPE_REMOTE_DESKTOP_SESSION (meta_remote_desktop_session_get_type ())
G_DECLARE_FINAL_TYPE (MetaRemoteDesktopSession, meta_remote_desktop_session,
META, REMOTE_DESKTOP_SESSION,
MetaDBusRemoteDesktopSessionSkeleton)
char * meta_remote_desktop_session_get_object_path (MetaRemoteDesktopSession *session);
char * meta_remote_desktop_session_get_session_id (MetaRemoteDesktopSession *session);
gboolean meta_remote_desktop_session_register_screen_cast (MetaRemoteDesktopSession *session,
MetaScreenCastSession *screen_cast_session,
GError **error);
void meta_remote_desktop_session_close (MetaRemoteDesktopSession *session);
MetaRemoteDesktopSession * meta_remote_desktop_session_new (MetaRemoteDesktop *remote_desktop,
const char *peer_name,
GError **error);
#endif /* META_REMOTE_DESKTOP_SESSION_H */

View File

@@ -1,240 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#define _GNU_SOURCE
#include "config.h"
#include "backends/meta-remote-desktop.h"
#include <errno.h>
#include <glib.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include "meta-dbus-remote-desktop.h"
#include "backends/meta-backend-private.h"
#include "backends/meta-cursor-renderer.h"
#include "backends/meta-remote-desktop-session.h"
#include "backends/native/meta-cursor-renderer-native.h"
#include "meta/errors.h"
#include "meta/meta-backend.h"
#define META_REMOTE_DESKTOP_DBUS_SERVICE "org.gnome.Mutter.RemoteDesktop"
#define META_REMOTE_DESKTOP_DBUS_PATH "/org/gnome/Mutter/RemoteDesktop"
struct _MetaRemoteDesktop
{
MetaDBusRemoteDesktopSkeleton parent;
int dbus_name_id;
GHashTable *sessions;
MetaDbusSessionWatcher *session_watcher;
};
static void
meta_remote_desktop_init_iface (MetaDBusRemoteDesktopIface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaRemoteDesktop,
meta_remote_desktop,
META_DBUS_TYPE_REMOTE_DESKTOP_SKELETON,
G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_REMOTE_DESKTOP,
meta_remote_desktop_init_iface));
GDBusConnection *
meta_remote_desktop_get_connection (MetaRemoteDesktop *remote_desktop)
{
GDBusInterfaceSkeleton *interface_skeleton =
G_DBUS_INTERFACE_SKELETON (remote_desktop);
return g_dbus_interface_skeleton_get_connection (interface_skeleton);
}
MetaRemoteDesktopSession *
meta_remote_desktop_get_session (MetaRemoteDesktop *remote_desktop,
const char *session_id)
{
return g_hash_table_lookup (remote_desktop->sessions, session_id);
}
static void
on_session_closed (MetaRemoteDesktopSession *session,
MetaRemoteDesktop *remote_desktop)
{
char *session_id;
session_id = meta_remote_desktop_session_get_session_id (session);
g_hash_table_remove (remote_desktop->sessions, session_id);
}
static gboolean
handle_create_session (MetaDBusRemoteDesktop *skeleton,
GDBusMethodInvocation *invocation)
{
MetaRemoteDesktop *remote_desktop = META_REMOTE_DESKTOP (skeleton);
const char *peer_name;
MetaRemoteDesktopSession *session;
GError *error = NULL;
char *session_id;
char *session_path;
const char *client_dbus_name;
peer_name = g_dbus_method_invocation_get_sender (invocation);
session = meta_remote_desktop_session_new (remote_desktop,
peer_name,
&error);
if (!session)
{
g_warning ("Failed to create remote desktop session: %s",
error->message);
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Failed to create session: %s",
error->message);
g_error_free (error);
return TRUE;
}
session_id = meta_remote_desktop_session_get_session_id (session);
g_hash_table_insert (remote_desktop->sessions,
session_id,
session);
client_dbus_name = g_dbus_method_invocation_get_sender (invocation);
meta_dbus_session_watcher_watch_session (remote_desktop->session_watcher,
client_dbus_name,
META_DBUS_SESSION (session));
session_path = meta_remote_desktop_session_get_object_path (session);
meta_dbus_remote_desktop_complete_create_session (skeleton,
invocation,
session_path);
g_signal_connect (session, "session-closed",
G_CALLBACK (on_session_closed),
remote_desktop);
return TRUE;
}
static void
meta_remote_desktop_init_iface (MetaDBusRemoteDesktopIface *iface)
{
iface->handle_create_session = handle_create_session;
}
static void
on_bus_acquired (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
MetaRemoteDesktop *remote_desktop = user_data;
GDBusInterfaceSkeleton *interface_skeleton =
G_DBUS_INTERFACE_SKELETON (remote_desktop);
GError *error = NULL;
if (!g_dbus_interface_skeleton_export (interface_skeleton,
connection,
META_REMOTE_DESKTOP_DBUS_PATH,
&error))
g_warning ("Failed to export remote desktop object: %s\n", error->message);
}
static void
on_name_acquired (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
g_info ("Acquired name %s\n", name);
}
static void
on_name_lost (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
g_warning ("Lost or failed to acquire name %s\n", name);
}
static void
meta_remote_desktop_constructed (GObject *object)
{
MetaRemoteDesktop *remote_desktop = META_REMOTE_DESKTOP (object);
remote_desktop->dbus_name_id =
g_bus_own_name (G_BUS_TYPE_SESSION,
META_REMOTE_DESKTOP_DBUS_SERVICE,
G_BUS_NAME_OWNER_FLAGS_NONE,
on_bus_acquired,
on_name_acquired,
on_name_lost,
remote_desktop,
NULL);
}
static void
meta_remote_desktop_finalize (GObject *object)
{
MetaRemoteDesktop *remote_desktop = META_REMOTE_DESKTOP (object);
GList *sessions;
if (remote_desktop->dbus_name_id != 0)
g_bus_unown_name (remote_desktop->dbus_name_id);
sessions = g_list_copy (g_hash_table_get_values (remote_desktop->sessions));
g_list_free_full (sessions,
(GDestroyNotify) meta_remote_desktop_session_close);
g_hash_table_destroy (remote_desktop->sessions);
G_OBJECT_CLASS (meta_remote_desktop_parent_class)->finalize (object);
}
MetaRemoteDesktop *
meta_remote_desktop_new (MetaDbusSessionWatcher *session_watcher)
{
MetaRemoteDesktop *remote_desktop;
remote_desktop = g_object_new (META_TYPE_REMOTE_DESKTOP, NULL);
remote_desktop->session_watcher = session_watcher;
return remote_desktop;
}
static void
meta_remote_desktop_init (MetaRemoteDesktop *remote_desktop)
{
remote_desktop->sessions = g_hash_table_new (g_str_hash, g_str_equal);
}
static void
meta_remote_desktop_class_init (MetaRemoteDesktopClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = meta_remote_desktop_constructed;
object_class->finalize = meta_remote_desktop_finalize;
}

View File

@@ -1,45 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_REMOTE_DESKTOP_H
#define META_REMOTE_DESKTOP_H
#include <glib-object.h>
#include "backends/meta-dbus-session-watcher.h"
#include "meta-dbus-remote-desktop.h"
typedef struct _MetaRemoteDesktopSession MetaRemoteDesktopSession;
#define META_TYPE_REMOTE_DESKTOP (meta_remote_desktop_get_type ())
G_DECLARE_FINAL_TYPE (MetaRemoteDesktop, meta_remote_desktop,
META, REMOTE_DESKTOP,
MetaDBusRemoteDesktopSkeleton)
MetaRemoteDesktopSession * meta_remote_desktop_get_session (MetaRemoteDesktop *remote_desktop,
const char *session_id);
GDBusConnection * meta_remote_desktop_get_connection (MetaRemoteDesktop *remote_desktop);
MetaRemoteDesktop * meta_remote_desktop_new (MetaDbusSessionWatcher *session_watcher);
#endif /* META_REMOTE_DESKTOP_H */

View File

@@ -1,172 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-screen-cast-monitor-stream-src.h"
#include "backends/meta-backend-private.h"
#include "backends/meta-screen-cast-monitor-stream.h"
#include "backends/meta-logical-monitor.h"
#include "backends/meta-monitor.h"
#include "clutter/clutter.h"
#include "clutter/clutter-mutter.h"
struct _MetaScreenCastMonitorStreamSrc
{
MetaScreenCastStreamSrc parent;
gulong stage_painted_handler_id;
};
G_DEFINE_TYPE (MetaScreenCastMonitorStreamSrc,
meta_screen_cast_monitor_stream_src,
META_TYPE_SCREEN_CAST_STREAM_SRC)
static ClutterStage *
get_stage (MetaScreenCastMonitorStreamSrc *monitor_src)
{
MetaScreenCastStreamSrc *src;
MetaScreenCastStream *stream;
MetaScreenCastMonitorStream *monitor_stream;
src = META_SCREEN_CAST_STREAM_SRC (monitor_src);
stream = meta_screen_cast_stream_src_get_stream (src);
monitor_stream = META_SCREEN_CAST_MONITOR_STREAM (stream);
return meta_screen_cast_monitor_stream_get_stage (monitor_stream);
}
static MetaMonitor *
get_monitor (MetaScreenCastMonitorStreamSrc *monitor_src)
{
MetaScreenCastStreamSrc *src;
MetaScreenCastStream *stream;
MetaScreenCastMonitorStream *monitor_stream;
src = META_SCREEN_CAST_STREAM_SRC (monitor_src);
stream = meta_screen_cast_stream_src_get_stream (src);
monitor_stream = META_SCREEN_CAST_MONITOR_STREAM (stream);
return meta_screen_cast_monitor_stream_get_monitor (monitor_stream);
}
static void
meta_screen_cast_monitor_stream_src_get_specs (MetaScreenCastStreamSrc *src,
int *width,
int *height,
float *frame_rate)
{
MetaScreenCastMonitorStreamSrc *monitor_src =
META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
MetaMonitor *monitor;
MetaLogicalMonitor *logical_monitor;
float scale;
MetaMonitorMode *mode;
monitor = get_monitor (monitor_src);
logical_monitor = meta_monitor_get_logical_monitor (monitor);
mode = meta_monitor_get_current_mode (monitor);
scale = logical_monitor->scale;
*width = (int) roundf (logical_monitor->rect.width * scale);
*height = (int) roundf (logical_monitor->rect.height * scale);
*frame_rate = meta_monitor_mode_get_refresh_rate (mode);
}
static void
stage_painted (ClutterActor *actor,
MetaScreenCastMonitorStreamSrc *monitor_src)
{
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (monitor_src);
meta_screen_cast_stream_src_maybe_record_frame (src);
}
static void
meta_screen_cast_monitor_stream_src_enable (MetaScreenCastStreamSrc *src)
{
MetaScreenCastMonitorStreamSrc *monitor_src =
META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
ClutterStage *stage;
stage = get_stage (monitor_src);
monitor_src->stage_painted_handler_id =
g_signal_connect_after (stage, "paint",
G_CALLBACK (stage_painted),
monitor_src);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
}
static void
meta_screen_cast_monitor_stream_src_disable (MetaScreenCastStreamSrc *src)
{
MetaScreenCastMonitorStreamSrc *monitor_src =
META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
ClutterStage *stage;
stage = get_stage (monitor_src);
g_signal_handler_disconnect (stage, monitor_src->stage_painted_handler_id);
monitor_src->stage_painted_handler_id = 0;
}
static void
meta_screen_cast_monitor_stream_src_record_frame (MetaScreenCastStreamSrc *src,
uint8_t *data)
{
MetaScreenCastMonitorStreamSrc *monitor_src =
META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
ClutterStage *stage;
MetaMonitor *monitor;
MetaLogicalMonitor *logical_monitor;
stage = get_stage (monitor_src);
monitor = get_monitor (monitor_src);
logical_monitor = meta_monitor_get_logical_monitor (monitor);
clutter_stage_capture_into (stage, FALSE, &logical_monitor->rect, data);
}
MetaScreenCastMonitorStreamSrc *
meta_screen_cast_monitor_stream_src_new (MetaScreenCastMonitorStream *monitor_stream,
GError **error)
{
return g_initable_new (META_TYPE_SCREEN_CAST_MONITOR_STREAM_SRC, NULL, error,
"stream", monitor_stream,
NULL);
}
static void
meta_screen_cast_monitor_stream_src_init (MetaScreenCastMonitorStreamSrc *monitor_src)
{
}
static void
meta_screen_cast_monitor_stream_src_class_init (MetaScreenCastMonitorStreamSrcClass *klass)
{
MetaScreenCastStreamSrcClass *src_class =
META_SCREEN_CAST_STREAM_SRC_CLASS (klass);
src_class->get_specs = meta_screen_cast_monitor_stream_src_get_specs;
src_class->enable = meta_screen_cast_monitor_stream_src_enable;
src_class->disable = meta_screen_cast_monitor_stream_src_disable;
src_class->record_frame = meta_screen_cast_monitor_stream_src_record_frame;
}

View File

@@ -1,40 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_SCREEN_CAST_MONITOR_STREAM_SRC_H
#define META_SCREEN_CAST_MONITOR_STREAM_SRC_H
#include "backends/meta-monitor-manager-private.h"
#include "backends/meta-screen-cast-stream-src.h"
typedef struct _MetaScreenCastMonitorStream MetaScreenCastMonitorStream;
#define META_TYPE_SCREEN_CAST_MONITOR_STREAM_SRC (meta_screen_cast_monitor_stream_src_get_type ())
G_DECLARE_FINAL_TYPE (MetaScreenCastMonitorStreamSrc,
meta_screen_cast_monitor_stream_src,
META, SCREEN_CAST_MONITOR_STREAM_SRC,
MetaScreenCastStreamSrc)
MetaScreenCastMonitorStreamSrc * meta_screen_cast_monitor_stream_src_new (MetaScreenCastMonitorStream *monitor_stream,
GError **error);
#endif /* META_SCREEN_CAST_MONITOR_STREAM_SRC_H */

View File

@@ -1,260 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-screen-cast-monitor-stream.h"
#include "backends/meta-logical-monitor.h"
#include "backends/meta-screen-cast-monitor-stream-src.h"
enum
{
PROP_0,
PROP_MONITOR,
};
struct _MetaScreenCastMonitorStream
{
MetaScreenCastStream parent;
ClutterStage *stage;
MetaMonitor *monitor;
MetaLogicalMonitor *logical_monitor;
};
G_DEFINE_TYPE (MetaScreenCastMonitorStream,
meta_screen_cast_monitor_stream,
META_TYPE_SCREEN_CAST_STREAM)
static gboolean
update_monitor (MetaScreenCastMonitorStream *monitor_stream,
MetaMonitor *new_monitor)
{
MetaLogicalMonitor *new_logical_monitor;
new_logical_monitor = meta_monitor_get_logical_monitor (new_monitor);
if (!new_logical_monitor)
return FALSE;
if (!meta_rectangle_equal (&new_logical_monitor->rect,
&monitor_stream->logical_monitor->rect))
return FALSE;
g_set_object (&monitor_stream->monitor, new_monitor);
g_set_object (&monitor_stream->logical_monitor, new_logical_monitor);
return TRUE;
}
static void
on_monitors_changed (MetaMonitorManager *monitor_manager,
MetaScreenCastMonitorStream *monitor_stream)
{
MetaMonitor *new_monitor = NULL;
GList *monitors;
GList *l;
monitors = meta_monitor_manager_get_monitors (monitor_manager);
for (l = monitors; l; l = l->next)
{
MetaMonitor *other_monitor = l->data;
if (meta_monitor_is_same_as (monitor_stream->monitor, other_monitor))
{
new_monitor = other_monitor;
break;
}
}
if (!new_monitor || !update_monitor (monitor_stream, new_monitor))
meta_screen_cast_stream_close (META_SCREEN_CAST_STREAM (monitor_stream));
}
ClutterStage *
meta_screen_cast_monitor_stream_get_stage (MetaScreenCastMonitorStream *monitor_stream)
{
return monitor_stream->stage;
}
MetaMonitor *
meta_screen_cast_monitor_stream_get_monitor (MetaScreenCastMonitorStream *monitor_stream)
{
return monitor_stream->monitor;
}
MetaScreenCastMonitorStream *
meta_screen_cast_monitor_stream_new (GDBusConnection *connection,
MetaMonitorManager *monitor_manager,
MetaMonitor *monitor,
ClutterStage *stage,
GError **error)
{
MetaScreenCastMonitorStream *monitor_stream;
if (!meta_monitor_is_active (monitor))
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Monitor not active");
return NULL;
}
monitor_stream = g_initable_new (META_TYPE_SCREEN_CAST_MONITOR_STREAM,
NULL,
error,
"connection", connection,
"monitor", monitor,
NULL);
if (!monitor_stream)
return NULL;
monitor_stream->stage = stage;
g_signal_connect_object (monitor_manager, "monitors-changed-internal",
G_CALLBACK (on_monitors_changed),
monitor_stream, 0);
return monitor_stream;
}
static MetaScreenCastStreamSrc *
meta_screen_cast_monitor_stream_create_src (MetaScreenCastStream *stream,
GError **error)
{
MetaScreenCastMonitorStream *monitor_stream =
META_SCREEN_CAST_MONITOR_STREAM (stream);
MetaScreenCastMonitorStreamSrc *monitor_stream_src;
monitor_stream_src = meta_screen_cast_monitor_stream_src_new (monitor_stream,
error);
if (!monitor_stream_src)
return NULL;
return META_SCREEN_CAST_STREAM_SRC (monitor_stream_src);
}
static void
meta_screen_cast_monitor_stream_set_parameters (MetaScreenCastStream *stream,
GVariantBuilder *parameters_builder)
{
MetaScreenCastMonitorStream *monitor_stream =
META_SCREEN_CAST_MONITOR_STREAM (stream);
MetaRectangle logical_monitor_layout;
logical_monitor_layout =
meta_logical_monitor_get_layout (monitor_stream->logical_monitor);
g_variant_builder_add (parameters_builder, "{sv}",
"position",
g_variant_new ("(ii)",
logical_monitor_layout.x,
logical_monitor_layout.y));
g_variant_builder_add (parameters_builder, "{sv}",
"size",
g_variant_new ("(ii)",
logical_monitor_layout.width,
logical_monitor_layout.height));
}
static void
meta_screen_cast_monitor_stream_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaScreenCastMonitorStream *monitor_stream =
META_SCREEN_CAST_MONITOR_STREAM (object);
MetaLogicalMonitor *logical_monitor;
switch (prop_id)
{
case PROP_MONITOR:
g_set_object (&monitor_stream->monitor, g_value_get_object (value));
logical_monitor = meta_monitor_get_logical_monitor (monitor_stream->monitor);
g_set_object (&monitor_stream->logical_monitor, logical_monitor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
meta_screen_cast_monitor_stream_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaScreenCastMonitorStream *monitor_stream =
META_SCREEN_CAST_MONITOR_STREAM (object);
switch (prop_id)
{
case PROP_MONITOR:
g_value_set_object (value, monitor_stream->monitor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
meta_screen_cast_monitor_stream_finalize (GObject *object)
{
MetaScreenCastMonitorStream *monitor_stream =
META_SCREEN_CAST_MONITOR_STREAM (object);
g_clear_object (&monitor_stream->monitor);
g_clear_object (&monitor_stream->logical_monitor);
G_OBJECT_CLASS (meta_screen_cast_monitor_stream_parent_class)->finalize (object);
}
static void
meta_screen_cast_monitor_stream_init (MetaScreenCastMonitorStream *monitor_stream)
{
}
static void
meta_screen_cast_monitor_stream_class_init (MetaScreenCastMonitorStreamClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
MetaScreenCastStreamClass *stream_class =
META_SCREEN_CAST_STREAM_CLASS (klass);
object_class->set_property = meta_screen_cast_monitor_stream_set_property;
object_class->get_property = meta_screen_cast_monitor_stream_get_property;
object_class->finalize = meta_screen_cast_monitor_stream_finalize;
stream_class->create_src = meta_screen_cast_monitor_stream_create_src;
stream_class->set_parameters = meta_screen_cast_monitor_stream_set_parameters;
g_object_class_install_property (object_class,
PROP_MONITOR,
g_param_spec_object ("monitor",
"monitor",
"MetaMonitor",
META_TYPE_MONITOR,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
}

View File

@@ -1,47 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_SCREEN_CAST_MONITOR_STREAM_H
#define META_SCREEN_CAST_MONITOR_STREAM_H
#include <glib-object.h>
#include "backends/meta-monitor-manager-private.h"
#include "backends/meta-screen-cast-stream.h"
#define META_TYPE_SCREEN_CAST_MONITOR_STREAM (meta_screen_cast_monitor_stream_get_type ())
G_DECLARE_FINAL_TYPE (MetaScreenCastMonitorStream,
meta_screen_cast_monitor_stream,
META, SCREEN_CAST_MONITOR_STREAM,
MetaScreenCastStream)
MetaScreenCastMonitorStream * meta_screen_cast_monitor_stream_new (GDBusConnection *connection,
MetaMonitorManager *monitor_manager,
MetaMonitor *monitor,
ClutterStage *stage,
GError **error);
ClutterStage * meta_screen_cast_monitor_stream_get_stage (MetaScreenCastMonitorStream *monitor_stream);
MetaMonitor * meta_screen_cast_monitor_stream_get_monitor (MetaScreenCastMonitorStream *monitor_stream);
#endif /* META_SCREEN_CAST_MONITOR_STREAM_H */

View File

@@ -1,363 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-screen-cast-session.h"
#include "backends/meta-backend-private.h"
#include "backends/meta-dbus-session-watcher.h"
#include "backends/meta-screen-cast-monitor-stream.h"
#include "backends/meta-screen-cast-stream.h"
#define META_SCREEN_CAST_SESSION_DBUS_PATH "/org/gnome/Mutter/ScreenCast/Session"
struct _MetaScreenCastSession
{
MetaDBusScreenCastSessionSkeleton parent;
char *peer_name;
MetaScreenCastSessionType session_type;
char *object_path;
GList *streams;
};
static void
meta_screen_cast_session_init_iface (MetaDBusScreenCastSessionIface *iface);
static void
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastSession,
meta_screen_cast_session,
META_DBUS_TYPE_SCREEN_CAST_SESSION_SKELETON,
G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_SCREEN_CAST_SESSION,
meta_screen_cast_session_init_iface)
G_IMPLEMENT_INTERFACE (META_TYPE_DBUS_SESSION,
meta_dbus_session_init_iface))
gboolean
meta_screen_cast_session_start (MetaScreenCastSession *session,
GError **error)
{
GList *l;
for (l = session->streams; l; l = l->next)
{
MetaScreenCastStream *stream = l->data;
if (!meta_screen_cast_stream_start (stream, error))
return FALSE;
}
return TRUE;
}
void
meta_screen_cast_session_close (MetaScreenCastSession *session)
{
MetaDBusScreenCastSession *skeleton = META_DBUS_SCREEN_CAST_SESSION (session);
g_list_free_full (session->streams, g_object_unref);
meta_dbus_session_notify_closed (META_DBUS_SESSION (session));
switch (session->session_type)
{
case META_SCREEN_CAST_SESSION_TYPE_NORMAL:
meta_dbus_screen_cast_session_emit_closed (skeleton);
break;
case META_SCREEN_CAST_SESSION_TYPE_REMOTE_DESKTOP:
break;
}
g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (session));
g_object_unref (session);
}
char *
meta_screen_cast_session_get_object_path (MetaScreenCastSession *session)
{
return session->object_path;
}
static gboolean
check_permission (MetaScreenCastSession *session,
GDBusMethodInvocation *invocation)
{
return g_strcmp0 (session->peer_name,
g_dbus_method_invocation_get_sender (invocation)) == 0;
}
static gboolean
handle_start (MetaDBusScreenCastSession *skeleton,
GDBusMethodInvocation *invocation)
{
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton);
GError *error = NULL;
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
switch (session->session_type)
{
case META_SCREEN_CAST_SESSION_TYPE_NORMAL:
break;
case META_SCREEN_CAST_SESSION_TYPE_REMOTE_DESKTOP:
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Must be started from remote desktop session");
return TRUE;
}
if (!meta_screen_cast_session_start (session, &error))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Failed to start screen cast: %s",
error->message);
g_error_free (error);
return TRUE;
}
meta_dbus_screen_cast_session_complete_start (skeleton, invocation);
return TRUE;
}
static gboolean
handle_stop (MetaDBusScreenCastSession *skeleton,
GDBusMethodInvocation *invocation)
{
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton);
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
switch (session->session_type)
{
case META_SCREEN_CAST_SESSION_TYPE_NORMAL:
break;
case META_SCREEN_CAST_SESSION_TYPE_REMOTE_DESKTOP:
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Must be stopped from remote desktop session");
return TRUE;
}
meta_screen_cast_session_close (session);
meta_dbus_screen_cast_session_complete_stop (skeleton, invocation);
return TRUE;
}
static void
on_stream_closed (MetaScreenCastStream *stream,
MetaScreenCastSession *session)
{
meta_screen_cast_session_close (session);
}
static gboolean
handle_record_monitor (MetaDBusScreenCastSession *skeleton,
GDBusMethodInvocation *invocation,
const char *connector,
GVariant *properties_variant)
{
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton);
GDBusInterfaceSkeleton *interface_skeleton;
GDBusConnection *connection;
MetaBackend *backend = meta_get_backend ();
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
MetaMonitor *monitor;
ClutterStage *stage;
GError *error = NULL;
MetaScreenCastMonitorStream *monitor_stream;
MetaScreenCastStream *stream;
char *stream_path;
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
interface_skeleton = G_DBUS_INTERFACE_SKELETON (skeleton);
connection = g_dbus_interface_skeleton_get_connection (interface_skeleton);
if (g_str_equal (connector, ""))
monitor = meta_monitor_manager_get_primary_monitor (monitor_manager);
else
monitor = meta_monitor_manager_get_monitor_from_connector (monitor_manager,
connector);
if (!monitor)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Unknown monitor");
return TRUE;
}
stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
monitor_stream = meta_screen_cast_monitor_stream_new (connection,
monitor_manager,
monitor,
stage,
&error);
if (!monitor_stream)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Failed to record monitor: %s",
error->message);
g_error_free (error);
return TRUE;
}
stream = META_SCREEN_CAST_STREAM (monitor_stream);
stream_path = meta_screen_cast_stream_get_object_path (stream);
session->streams = g_list_append (session->streams, stream);
g_signal_connect (stream, "closed", G_CALLBACK (on_stream_closed), session);
meta_dbus_screen_cast_session_complete_record_monitor (skeleton,
invocation,
stream_path);
return TRUE;
}
static gboolean
handle_record_window (MetaDBusScreenCastSession *skeleton,
GDBusMethodInvocation *invocation,
GVariant *properties_variant)
{
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (skeleton);
if (!check_permission (session, invocation))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_ACCESS_DENIED,
"Permission denied");
return TRUE;
}
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Recording a window not yet supported");
return TRUE;
}
static void
meta_screen_cast_session_init_iface (MetaDBusScreenCastSessionIface *iface)
{
iface->handle_start = handle_start;
iface->handle_stop = handle_stop;
iface->handle_record_monitor = handle_record_monitor;
iface->handle_record_window = handle_record_window;
}
static void
meta_screen_cast_session_client_vanished (MetaDbusSession *dbus_session)
{
meta_screen_cast_session_close (META_SCREEN_CAST_SESSION (dbus_session));
}
static void
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface)
{
iface->client_vanished = meta_screen_cast_session_client_vanished;
}
MetaScreenCastSession *
meta_screen_cast_session_new (MetaScreenCast *screen_cast,
MetaScreenCastSessionType session_type,
const char *peer_name,
GError **error)
{
GDBusInterfaceSkeleton *interface_skeleton;
MetaScreenCastSession *session;
GDBusConnection *connection;
static unsigned int global_session_number = 0;
session = g_object_new (META_TYPE_SCREEN_CAST_SESSION, NULL);
session->session_type = session_type;
session->peer_name = g_strdup (peer_name);
session->object_path =
g_strdup_printf (META_SCREEN_CAST_SESSION_DBUS_PATH "/u%u",
++global_session_number);
interface_skeleton = G_DBUS_INTERFACE_SKELETON (session);
connection = meta_screen_cast_get_connection (screen_cast);
if (!g_dbus_interface_skeleton_export (interface_skeleton,
connection,
session->object_path,
error))
return NULL;
return session;
}
static void
meta_screen_cast_session_finalize (GObject *object)
{
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (object);
g_free (session->peer_name);
g_free (session->object_path);
G_OBJECT_CLASS (meta_screen_cast_session_parent_class)->finalize (object);
}
static void
meta_screen_cast_session_init (MetaScreenCastSession *session)
{
}
static void
meta_screen_cast_session_class_init (MetaScreenCastSessionClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_screen_cast_session_finalize;
}

View File

@@ -1,51 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_SCREEN_CAST_SESSION_H
#define META_SCREEN_CAST_SESSION_H
#include "backends/meta-screen-cast.h"
typedef enum _MetaScreenCastSessionType
{
META_SCREEN_CAST_SESSION_TYPE_NORMAL,
META_SCREEN_CAST_SESSION_TYPE_REMOTE_DESKTOP,
} MetaScreenCastSessionType;
#define META_TYPE_SCREEN_CAST_SESSION (meta_screen_cast_session_get_type ())
G_DECLARE_FINAL_TYPE (MetaScreenCastSession, meta_screen_cast_session,
META, SCREEN_CAST_SESSION,
MetaDBusScreenCastSessionSkeleton)
char * meta_screen_cast_session_get_object_path (MetaScreenCastSession *session);
MetaScreenCastSession * meta_screen_cast_session_new (MetaScreenCast *screen_cast,
MetaScreenCastSessionType session_type,
const char *peer_name,
GError **error);
gboolean meta_screen_cast_session_start (MetaScreenCastSession *session,
GError **error);
void meta_screen_cast_session_close (MetaScreenCastSession *session);
#endif /* META_SCREEN_CAST_SESSION_H */

View File

@@ -1,680 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-screen-cast-stream-src.h"
#include <errno.h>
#include <pipewire/pipewire.h>
#include <spa/format-builder.h>
#include <spa/format-utils.h>
#include <spa/props.h>
#include <spa/type-map.h>
#include <spa/video/format-utils.h>
#include <stdint.h>
#include <sys/mman.h>
#include "backends/meta-screen-cast-stream.h"
#include "clutter/clutter-mutter.h"
#include "core/meta-fraction.h"
#include "meta/boxes.h"
#define PRIVATE_OWNER_FROM_FIELD(TypeName, field_ptr, field_name) \
(TypeName *)((guint8 *)(field_ptr) - G_PRIVATE_OFFSET (TypeName, field_name))
enum
{
PROP_0,
PROP_STREAM,
};
enum
{
READY,
CLOSED,
N_SIGNALS
};
static guint signals[N_SIGNALS];
typedef struct _MetaSpaType
{
uint32_t format;
uint32_t props;
struct spa_type_meta meta;
struct spa_type_data data;
struct spa_type_media_type media_type;
struct spa_type_media_subtype media_subtype;
struct spa_type_format_video format_video;
struct spa_type_video_format video_format;
} MetaSpaType;
typedef struct _MetaPipeWireSource
{
GSource base;
struct pw_loop *pipewire_loop;
} MetaPipeWireSource;
typedef struct _MetaScreenCastStreamSrcPrivate
{
MetaScreenCastStream *stream;
struct pw_core *pipewire_core;
struct pw_remote *pipewire_remote;
struct pw_type *pipewire_type;
MetaPipeWireSource *pipewire_source;
struct spa_hook pipewire_remote_listener;
gboolean is_enabled;
struct pw_stream *pipewire_stream;
struct spa_hook pipewire_stream_listener;
MetaSpaType spa_type;
uint8_t params_buffer[1024];
struct spa_video_info_raw video_format;
uint64_t last_frame_timestamp_us;
} MetaScreenCastStreamSrcPrivate;
static void
meta_screen_cast_stream_src_init_initable_iface (GInitableIface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastStreamSrc,
meta_screen_cast_stream_src,
G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
meta_screen_cast_stream_src_init_initable_iface)
G_ADD_PRIVATE (MetaScreenCastStreamSrc))
#define PROP(f, key, type, ...) \
SPA_POD_PROP (f, key, 0, type, 1, __VA_ARGS__)
#define PROP_U_MM(f, key, type, ...) \
SPA_POD_PROP (f, key, (SPA_POD_PROP_FLAG_UNSET | \
SPA_POD_PROP_RANGE_MIN_MAX), \
type, 3, __VA_ARGS__)
static void
meta_screen_cast_stream_src_get_specs (MetaScreenCastStreamSrc *src,
int *width,
int *height,
float *frame_rate)
{
MetaScreenCastStreamSrcClass *klass =
META_SCREEN_CAST_STREAM_SRC_GET_CLASS (src);
klass->get_specs (src, width, height, frame_rate);
}
static void
meta_screen_cast_stream_src_record_frame (MetaScreenCastStreamSrc *src,
uint8_t *data)
{
MetaScreenCastStreamSrcClass *klass =
META_SCREEN_CAST_STREAM_SRC_GET_CLASS (src);
klass->record_frame (src, data);
}
void
meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
{
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
uint32_t buffer_id;
struct spa_buffer *buffer;
uint8_t *map = NULL;
uint8_t *data;
uint64_t now_us;
now_us = g_get_monotonic_time ();
if (priv->last_frame_timestamp_us != 0 &&
(now_us - priv->last_frame_timestamp_us <
((1000000 * priv->video_format.max_framerate.denom) /
priv->video_format.max_framerate.num)))
return;
if (!priv->pipewire_stream)
return;
buffer_id = pw_stream_get_empty_buffer (priv->pipewire_stream);
if (buffer_id == SPA_ID_INVALID)
return;
buffer = pw_stream_peek_buffer (priv->pipewire_stream, buffer_id);
if (buffer->datas[0].type == priv->spa_type.data.MemFd)
{
map = mmap (NULL, buffer->datas[0].maxsize + buffer->datas[0].mapoffset,
PROT_READ | PROT_WRITE, MAP_SHARED,
buffer->datas[0].fd, 0);
if (map == MAP_FAILED)
{
g_warning ("Failed to mmap pipewire stream buffer: %s\n",
strerror (errno));
return;
}
data = SPA_MEMBER (map, buffer->datas[0].mapoffset, uint8_t);
}
else if (buffer->datas[0].type == priv->spa_type.data.MemPtr)
{
data = buffer->datas[0].data;
}
else
{
return;
}
meta_screen_cast_stream_src_record_frame (src, data);
priv->last_frame_timestamp_us = now_us;
if (map)
munmap (map, buffer->datas[0].maxsize + buffer->datas[0].mapoffset);
pw_stream_send_buffer (priv->pipewire_stream, buffer_id);
}
static gboolean
meta_screen_cast_stream_src_is_enabled (MetaScreenCastStreamSrc *src)
{
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
return priv->is_enabled;
}
static void
meta_screen_cast_stream_src_enable (MetaScreenCastStreamSrc *src)
{
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
META_SCREEN_CAST_STREAM_SRC_GET_CLASS (src)->enable (src);
priv->is_enabled = TRUE;
}
static void
meta_screen_cast_stream_src_disable (MetaScreenCastStreamSrc *src)
{
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
META_SCREEN_CAST_STREAM_SRC_GET_CLASS (src)->disable (src);
priv->is_enabled = FALSE;
}
static void
meta_screen_cast_stream_src_notify_closed (MetaScreenCastStreamSrc *src)
{
g_signal_emit (src, signals[CLOSED], 0);
}
static void
on_stream_state_changed (void *data,
enum pw_stream_state old,
enum pw_stream_state state,
const char *error_message)
{
MetaScreenCastStreamSrc *src = data;
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
uint32_t node_id;
switch (state)
{
case PW_STREAM_STATE_ERROR:
g_warning ("pipewire stream error: %s", error_message);
meta_screen_cast_stream_src_notify_closed (src);
break;
case PW_STREAM_STATE_CONFIGURE:
node_id = pw_stream_get_node_id (priv->pipewire_stream);
g_signal_emit (src, signals[READY], 0, (unsigned int) node_id);
break;
case PW_STREAM_STATE_UNCONNECTED:
case PW_STREAM_STATE_CONNECTING:
case PW_STREAM_STATE_READY:
case PW_STREAM_STATE_PAUSED:
if (meta_screen_cast_stream_src_is_enabled (src))
meta_screen_cast_stream_src_disable (src);
break;
case PW_STREAM_STATE_STREAMING:
if (!meta_screen_cast_stream_src_is_enabled (src))
meta_screen_cast_stream_src_enable (src);
break;
}
}
static void
on_stream_format_changed (void *data,
struct spa_format *format)
{
MetaScreenCastStreamSrc *src = data;
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
struct pw_type *pipewire_type = priv->pipewire_type;
struct spa_type_param_alloc_buffers *param_alloc_buffers;
struct spa_pod_builder pod_builder = { NULL };
struct spa_pod_frame object_frame;
struct spa_pod_frame prop_frame;
struct spa_param *params[1];
const int bpp = 4;
if (!format)
{
pw_stream_finish_format (priv->pipewire_stream, SPA_RESULT_OK, NULL, 0);
return;
}
spa_format_video_raw_parse (format,
&priv->video_format,
&priv->spa_type.format_video);
spa_pod_builder_init (&pod_builder,
priv->params_buffer,
sizeof (priv->params_buffer));
param_alloc_buffers = &pipewire_type->param_alloc_buffers;
spa_pod_builder_object (&pod_builder, &object_frame, 0,
param_alloc_buffers->Buffers,
PROP (&prop_frame, param_alloc_buffers->size,
SPA_POD_TYPE_INT,
(priv->video_format.size.width *
priv->video_format.size.height *
bpp)),
PROP (&prop_frame, param_alloc_buffers->stride,
SPA_POD_TYPE_INT,
priv->video_format.size.width * bpp),
PROP_U_MM (&prop_frame, param_alloc_buffers->buffers,
SPA_POD_TYPE_INT,
16, 2, 16),
PROP (&prop_frame, param_alloc_buffers->align,
SPA_POD_TYPE_INT,
16));
params[0] = SPA_POD_BUILDER_DEREF (&pod_builder, object_frame.ref,
struct spa_param);
pw_stream_finish_format (priv->pipewire_stream, SPA_RESULT_OK,
params, G_N_ELEMENTS (params));
}
static const struct pw_stream_events stream_events = {
PW_VERSION_STREAM_EVENTS,
.state_changed = on_stream_state_changed,
.format_changed = on_stream_format_changed,
};
static struct pw_stream *
create_pipewire_stream (MetaScreenCastStreamSrc *src,
GError **error)
{
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
struct pw_stream *pipewire_stream;
const struct spa_format *format;
uint8_t buffer[1024];
struct spa_pod_builder pod_builder =
SPA_POD_BUILDER_INIT (buffer, sizeof (buffer));
struct spa_pod_frame format_frame;
struct spa_pod_frame prop_frame;
MetaSpaType *spa_type = &priv->spa_type;
int width, height;
float frame_rate;
MetaFraction frame_rate_fraction;
pipewire_stream = pw_stream_new (priv->pipewire_remote,
"meta-screen-cast-src",
NULL);
meta_screen_cast_stream_src_get_specs (src, &width, &height, &frame_rate);
frame_rate_fraction = meta_fraction_from_double (frame_rate);
spa_pod_builder_format (&pod_builder, &format_frame,
spa_type->format,
spa_type->media_type.video,
spa_type->media_subtype.raw,
PROP (&prop_frame,
spa_type->format_video.format,
SPA_POD_TYPE_ID, spa_type->video_format.BGRx),
PROP (&prop_frame,
spa_type->format_video.size,
SPA_POD_TYPE_RECTANGLE,
width, height),
PROP (&prop_frame,
spa_type->format_video.framerate,
SPA_POD_TYPE_FRACTION,
0, 1),
PROP_U_MM (&prop_frame,
spa_type->format_video.max_framerate,
SPA_POD_TYPE_FRACTION,
frame_rate_fraction.num,
frame_rate_fraction.denom,
1, 1,
frame_rate_fraction.num,
frame_rate_fraction.denom));
format = SPA_POD_BUILDER_DEREF (&pod_builder, format_frame.ref, struct spa_format);
pw_stream_add_listener (pipewire_stream,
&priv->pipewire_stream_listener,
&stream_events,
src);
if (!pw_stream_connect (pipewire_stream,
PW_DIRECTION_OUTPUT,
PW_STREAM_MODE_BUFFER,
NULL,
PW_STREAM_FLAG_NONE,
1, &format))
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Could not connect");
return NULL;
}
return pipewire_stream;
}
static void
on_state_changed (void *data,
enum pw_remote_state old,
enum pw_remote_state state,
const char *error_message)
{
MetaScreenCastStreamSrc *src = data;
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
struct pw_stream *pipewire_stream;
GError *error = NULL;
switch (state)
{
case PW_REMOTE_STATE_ERROR:
g_warning ("pipewire remote error: %s\n", error_message);
meta_screen_cast_stream_src_notify_closed (src);
break;
case PW_REMOTE_STATE_CONNECTED:
pipewire_stream = create_pipewire_stream (src, &error);
if (!pipewire_stream)
{
g_warning ("Could not create pipewire stream: %s", error->message);
g_error_free (error);
meta_screen_cast_stream_src_notify_closed (src);
}
else
{
priv->pipewire_stream = pipewire_stream;
}
break;
case PW_REMOTE_STATE_UNCONNECTED:
case PW_REMOTE_STATE_CONNECTING:
break;
}
}
static gboolean
pipewire_loop_source_prepare (GSource *base,
int *timeout)
{
*timeout = -1;
return FALSE;
}
static gboolean
pipewire_loop_source_dispatch (GSource *source,
GSourceFunc callback,
gpointer user_data)
{
MetaPipeWireSource *pipewire_source = (MetaPipeWireSource *) source;
int result;
result = pw_loop_iterate (pipewire_source->pipewire_loop, 0);
if (result == SPA_RESULT_ERRNO)
g_warning ("pipewire_loop_iterate failed: %s", strerror (errno));
else if (result != SPA_RESULT_OK)
g_warning ("pipewire_loop_iterate failed: %d", result);
return TRUE;
}
static void
pipewire_loop_source_finalize (GSource *source)
{
MetaPipeWireSource *pipewire_source = (MetaPipeWireSource *) source;
pw_loop_leave (pipewire_source->pipewire_loop);
pw_loop_destroy (pipewire_source->pipewire_loop);
}
static GSourceFuncs pipewire_source_funcs =
{
pipewire_loop_source_prepare,
NULL,
pipewire_loop_source_dispatch,
pipewire_loop_source_finalize
};
static void
init_spa_type (MetaSpaType *type,
struct spa_type_map *map)
{
type->format = spa_type_map_get_id (map, SPA_TYPE__Format);
type->props = spa_type_map_get_id (map, SPA_TYPE__Props);
spa_type_meta_map (map, &type->meta);
spa_type_data_map (map, &type->data);
spa_type_media_type_map (map, &type->media_type);
spa_type_media_subtype_map (map, &type->media_subtype);
spa_type_format_video_map (map, &type->format_video);
spa_type_video_format_map (map, &type->video_format);
}
static MetaPipeWireSource *
create_pipewire_source (void)
{
MetaPipeWireSource *pipewire_source;
pipewire_source =
(MetaPipeWireSource *) g_source_new (&pipewire_source_funcs,
sizeof (MetaPipeWireSource));
pipewire_source->pipewire_loop = pw_loop_new (NULL);
g_source_add_unix_fd (&pipewire_source->base,
pw_loop_get_fd (pipewire_source->pipewire_loop),
G_IO_IN | G_IO_ERR);
pw_loop_enter (pipewire_source->pipewire_loop);
g_source_attach (&pipewire_source->base, NULL);
return pipewire_source;
}
static const struct pw_remote_events remote_events = {
PW_VERSION_REMOTE_EVENTS,
.state_changed = on_state_changed,
};
static gboolean
meta_screen_cast_stream_src_initable_init (GInitable *initable,
GCancellable *cancellable,
GError **error)
{
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (initable);
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
priv->pipewire_source = create_pipewire_source ();
priv->pipewire_core = pw_core_new (priv->pipewire_source->pipewire_loop,
NULL);
if (!priv->pipewire_core)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Failed to create pipewire core");
return FALSE;
}
#if PIPEWIRE_VERSION_MICRO == 4
priv->pipewire_remote = pw_remote_new (priv->pipewire_core, NULL);
#elif PIPEWIRE_VERSION_MICRO >= 5
priv->pipewire_remote = pw_remote_new (priv->pipewire_core, NULL, 0);
#else
priv->pipewire_remote = NULL;
#endif
if (!priv->pipewire_remote)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Couldn't creat pipewire remote");
return FALSE;
}
pw_remote_add_listener (priv->pipewire_remote,
&priv->pipewire_remote_listener,
&remote_events,
src);
priv->pipewire_type = pw_core_get_type (priv->pipewire_core);
init_spa_type (&priv->spa_type, priv->pipewire_type->map);
if (pw_remote_connect (priv->pipewire_remote) != 0)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Couldn't connect pipewire remote");
return FALSE;
}
return TRUE;
}
static void
meta_screen_cast_stream_src_init_initable_iface (GInitableIface *iface)
{
iface->init = meta_screen_cast_stream_src_initable_init;
}
MetaScreenCastStream *
meta_screen_cast_stream_src_get_stream (MetaScreenCastStreamSrc *src)
{
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
return priv->stream;
}
static void
meta_screen_cast_stream_src_finalize (GObject *object)
{
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (object);
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
if (meta_screen_cast_stream_src_is_enabled (src))
meta_screen_cast_stream_src_disable (src);
g_clear_pointer (&priv->pipewire_stream, (GDestroyNotify) pw_stream_destroy);
g_clear_pointer (&priv->pipewire_remote, (GDestroyNotify) pw_remote_destroy);
g_clear_pointer (&priv->pipewire_core, (GDestroyNotify) pw_core_destroy);
g_source_destroy (&priv->pipewire_source->base);
G_OBJECT_CLASS (meta_screen_cast_stream_src_parent_class)->finalize (object);
}
static void
meta_screen_cast_stream_src_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (object);
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
switch (prop_id)
{
case PROP_STREAM:
priv->stream = g_value_get_object (value);
break;;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
meta_screen_cast_stream_src_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (object);
MetaScreenCastStreamSrcPrivate *priv =
meta_screen_cast_stream_src_get_instance_private (src);
switch (prop_id)
{
case PROP_STREAM:
g_value_set_object (value, priv->stream);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
meta_screen_cast_stream_src_init (MetaScreenCastStreamSrc *src)
{
}
static void
meta_screen_cast_stream_src_class_init (MetaScreenCastStreamSrcClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_screen_cast_stream_src_finalize;
object_class->set_property = meta_screen_cast_stream_src_set_property;
object_class->get_property = meta_screen_cast_stream_src_get_property;
g_object_class_install_property (object_class,
PROP_STREAM,
g_param_spec_object ("stream",
"stream",
"MetaScreenCastStream",
META_TYPE_SCREEN_CAST_STREAM,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
signals[READY] = g_signal_new ("ready",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_TYPE_UINT);
signals[CLOSED] = g_signal_new ("closed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
}

View File

@@ -1,56 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_SCREEN_CAST_STREAM_SRC_H
#define META_SCREEN_CAST_STREAM_SRC_H
#include <glib-object.h>
#include "clutter/clutter.h"
typedef struct _MetaScreenCastStream MetaScreenCastStream;
#define META_TYPE_SCREEN_CAST_STREAM_SRC (meta_screen_cast_stream_src_get_type ())
G_DECLARE_DERIVABLE_TYPE (MetaScreenCastStreamSrc,
meta_screen_cast_stream_src,
META, SCREEN_CAST_STREAM_SRC,
GObject)
struct _MetaScreenCastStreamSrcClass
{
GObjectClass parent_class;
void (* get_specs) (MetaScreenCastStreamSrc *src,
int *width,
int *height,
float *frame_rate);
void (* enable) (MetaScreenCastStreamSrc *src);
void (* disable) (MetaScreenCastStreamSrc *src);
void (* record_frame) (MetaScreenCastStreamSrc *src,
uint8_t *data);
};
void meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src);
MetaScreenCastStream * meta_screen_cast_stream_src_get_stream (MetaScreenCastStreamSrc *src);
#endif /* META_SCREEN_CAST_STREAM_SRC_H */

View File

@@ -1,261 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-screen-cast-stream.h"
#define META_SCREEN_CAST_STREAM_DBUS_PATH "/org/gnome/Mutter/ScreenCast/Stream"
enum
{
PROP_0,
PROP_CONNECTION,
};
enum
{
CLOSED,
N_SIGNALS
};
static guint signals[N_SIGNALS];
typedef struct _MetaScreenCastStreamPrivate
{
GDBusConnection *connection;
char *object_path;
MetaScreenCastStreamSrc *src;
} MetaScreenCastStreamPrivate;
static void
meta_screen_cast_stream_init_initable_iface (GInitableIface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastStream,
meta_screen_cast_stream,
META_DBUS_TYPE_SCREEN_CAST_STREAM_SKELETON,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
meta_screen_cast_stream_init_initable_iface)
G_ADD_PRIVATE (MetaScreenCastStream))
static MetaScreenCastStreamSrc *
meta_screen_cast_stream_create_src (MetaScreenCastStream *stream,
GError **error)
{
return META_SCREEN_CAST_STREAM_GET_CLASS (stream)->create_src (stream,
error);
}
static void
meta_screen_cast_stream_set_parameters (MetaScreenCastStream *stream,
GVariantBuilder *parameters_builder)
{
META_SCREEN_CAST_STREAM_GET_CLASS (stream)->set_parameters (stream,
parameters_builder);
}
static void
on_stream_src_closed (MetaScreenCastStreamSrc *src,
MetaScreenCastStream *stream)
{
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
if (priv->src)
meta_screen_cast_stream_close (stream);
}
static void
on_stream_src_ready (MetaScreenCastStreamSrc *src,
uint32_t node_id,
MetaScreenCastStream *stream)
{
MetaDBusScreenCastStream *skeleton = META_DBUS_SCREEN_CAST_STREAM (stream);
meta_dbus_screen_cast_stream_emit_pipewire_stream_added (skeleton, node_id);
}
gboolean
meta_screen_cast_stream_start (MetaScreenCastStream *stream,
GError **error)
{
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
MetaScreenCastStreamSrc *src;
src = meta_screen_cast_stream_create_src (stream, error);
if (!src)
return FALSE;
priv->src = src;
g_signal_connect (src, "ready", G_CALLBACK (on_stream_src_ready), stream);
g_signal_connect (src, "closed", G_CALLBACK (on_stream_src_closed), stream);
return TRUE;
}
void
meta_screen_cast_stream_close (MetaScreenCastStream *stream)
{
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
g_clear_object (&priv->src);
g_signal_emit (stream, signals[CLOSED], 0);
}
char *
meta_screen_cast_stream_get_object_path (MetaScreenCastStream *stream)
{
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
return priv->object_path;
}
static void
meta_screen_cast_stream_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (object);
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
switch (prop_id)
{
case PROP_CONNECTION:
priv->connection = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
meta_screen_cast_stream_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (object);
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
switch (prop_id)
{
case PROP_CONNECTION:
g_value_set_object (value, priv->connection);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
meta_screen_cast_stream_finalize (GObject *object)
{
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (object);
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
if (priv->src)
meta_screen_cast_stream_close (stream);
g_clear_pointer (&priv->object_path, g_free);
G_OBJECT_CLASS (meta_screen_cast_stream_parent_class)->finalize (object);
}
static gboolean
meta_screen_cast_stream_initable_init (GInitable *initable,
GCancellable *cancellable,
GError **error)
{
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (initable);
MetaDBusScreenCastStream *skeleton = META_DBUS_SCREEN_CAST_STREAM (stream);
MetaScreenCastStreamPrivate *priv =
meta_screen_cast_stream_get_instance_private (stream);
GVariantBuilder parameters_builder;
GVariant *parameters_variant;
static unsigned int global_stream_number = 0;
g_variant_builder_init (&parameters_builder, G_VARIANT_TYPE_VARDICT);
meta_screen_cast_stream_set_parameters (stream, &parameters_builder);
parameters_variant = g_variant_builder_end (&parameters_builder);
meta_dbus_screen_cast_stream_set_parameters (skeleton, parameters_variant);
priv->object_path =
g_strdup_printf (META_SCREEN_CAST_STREAM_DBUS_PATH "/u%u",
++global_stream_number);
if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (stream),
priv->connection,
priv->object_path,
error))
return FALSE;
return TRUE;
}
static void
meta_screen_cast_stream_init_initable_iface (GInitableIface *iface)
{
iface->init = meta_screen_cast_stream_initable_init;
}
static void
meta_screen_cast_stream_init (MetaScreenCastStream *stream)
{
}
static void
meta_screen_cast_stream_class_init (MetaScreenCastStreamClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_screen_cast_stream_finalize;
object_class->set_property = meta_screen_cast_stream_set_property;
object_class->get_property = meta_screen_cast_stream_get_property;
g_object_class_install_property (object_class,
PROP_CONNECTION,
g_param_spec_object ("connection",
"connection",
"GDBus connection",
G_TYPE_DBUS_CONNECTION,
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,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
}

View File

@@ -1,53 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_SCREEN_CAST_STREAM_H
#define META_SCREEN_CAST_STREAM_H
#include <glib-object.h>
#include "backends/meta-screen-cast-stream-src.h"
#include "meta-dbus-screen-cast.h"
#define META_TYPE_SCREEN_CAST_STREAM (meta_screen_cast_stream_get_type ())
G_DECLARE_DERIVABLE_TYPE (MetaScreenCastStream, meta_screen_cast_stream,
META, SCREEN_CAST_STREAM,
MetaDBusScreenCastStreamSkeleton)
struct _MetaScreenCastStreamClass
{
MetaDBusScreenCastStreamSkeletonClass parent_class;
MetaScreenCastStreamSrc * (* create_src) (MetaScreenCastStream *stream,
GError **error);
void (* set_parameters) (MetaScreenCastStream *stream,
GVariantBuilder *parameters_builder);
};
gboolean meta_screen_cast_stream_start (MetaScreenCastStream *stream,
GError **error);
void meta_screen_cast_stream_close (MetaScreenCastStream *stream);
char * meta_screen_cast_stream_get_object_path (MetaScreenCastStream *stream);
#endif /* META_SCREEN_CAST_STREAM_H */

View File

@@ -1,276 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#include "config.h"
#include "backends/meta-screen-cast.h"
#include <pipewire/pipewire.h>
#include "backends/meta-backend-private.h"
#include "backends/meta-screen-cast-session.h"
#include "backends/meta-remote-desktop-session.h"
#define META_SCREEN_CAST_DBUS_SERVICE "org.gnome.Mutter.ScreenCast"
#define META_SCREEN_CAST_DBUS_PATH "/org/gnome/Mutter/ScreenCast"
struct _MetaScreenCast
{
MetaDBusScreenCastSkeleton parent;
int dbus_name_id;
GList *sessions;
MetaDbusSessionWatcher *session_watcher;
};
static void
meta_screen_cast_init_iface (MetaDBusScreenCastIface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaScreenCast, meta_screen_cast,
META_DBUS_TYPE_SCREEN_CAST_SKELETON,
G_IMPLEMENT_INTERFACE (META_DBUS_TYPE_SCREEN_CAST,
meta_screen_cast_init_iface))
GDBusConnection *
meta_screen_cast_get_connection (MetaScreenCast *screen_cast)
{
GDBusInterfaceSkeleton *interface_skeleton =
G_DBUS_INTERFACE_SKELETON (screen_cast);
return g_dbus_interface_skeleton_get_connection (interface_skeleton);
}
static gboolean
register_remote_desktop_screen_cast_session (MetaScreenCastSession *session,
const char *remote_desktop_session_id,
GError **error)
{
MetaBackend *backend = meta_get_backend ();
MetaRemoteDesktop *remote_desktop = meta_backend_get_remote_desktop (backend);
MetaRemoteDesktopSession *remote_desktop_session;
remote_desktop_session =
meta_remote_desktop_get_session (remote_desktop, remote_desktop_session_id);
if (!remote_desktop_session)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"No remote desktop session found");
return FALSE;
}
if (!meta_remote_desktop_session_register_screen_cast (remote_desktop_session,
session,
error))
return FALSE;
return TRUE;
}
static void
on_session_closed (MetaScreenCastSession *session,
MetaScreenCast *screen_cast)
{
screen_cast->sessions = g_list_remove (screen_cast->sessions, session);
}
static gboolean
handle_create_session (MetaDBusScreenCast *skeleton,
GDBusMethodInvocation *invocation,
GVariant *properties)
{
MetaScreenCast *screen_cast = META_SCREEN_CAST (skeleton);
const char *peer_name;
MetaScreenCastSession *session;
GError *error = NULL;
const char *session_path;
const char *client_dbus_name;
char *remote_desktop_session_id = NULL;
MetaScreenCastSessionType session_type;
g_variant_lookup (properties, "remote-desktop-session-id", "s",
&remote_desktop_session_id);
if (remote_desktop_session_id)
session_type = META_SCREEN_CAST_SESSION_TYPE_REMOTE_DESKTOP;
else
session_type = META_SCREEN_CAST_SESSION_TYPE_NORMAL;
peer_name = g_dbus_method_invocation_get_sender (invocation);
session = meta_screen_cast_session_new (screen_cast,
session_type,
peer_name,
&error);
if (!session)
{
g_warning ("Failed to create screen cast session: %s",
error->message);
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"Failed to create session: %s",
error->message);
g_error_free (error);
return TRUE;
}
if (remote_desktop_session_id)
{
if (!register_remote_desktop_screen_cast_session (session,
remote_desktop_session_id,
&error))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"%s", error->message);
g_error_free (error);
g_object_unref (session);
return TRUE;
}
}
client_dbus_name = g_dbus_method_invocation_get_sender (invocation);
meta_dbus_session_watcher_watch_session (screen_cast->session_watcher,
client_dbus_name,
META_DBUS_SESSION (session));
session_path = meta_screen_cast_session_get_object_path (session);
meta_dbus_screen_cast_complete_create_session (skeleton,
invocation,
session_path);
screen_cast->sessions = g_list_append (screen_cast->sessions, session);
g_signal_connect (session, "session-closed",
G_CALLBACK (on_session_closed),
screen_cast);
return TRUE;
}
static void
meta_screen_cast_init_iface (MetaDBusScreenCastIface *iface)
{
iface->handle_create_session = handle_create_session;
}
static void
on_bus_acquired (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
MetaScreenCast *screen_cast = user_data;
GDBusInterfaceSkeleton *interface_skeleton =
G_DBUS_INTERFACE_SKELETON (screen_cast);
GError *error = NULL;
if (!g_dbus_interface_skeleton_export (interface_skeleton,
connection,
META_SCREEN_CAST_DBUS_PATH,
&error))
g_warning ("Failed to export remote desktop object: %s\n", error->message);
}
static void
on_name_acquired (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
g_info ("Acquired name %s\n", name);
}
static void
on_name_lost (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
g_warning ("Lost or failed to acquire name %s\n", name);
}
static void
meta_screen_cast_constructed (GObject *object)
{
MetaScreenCast *screen_cast = META_SCREEN_CAST (object);
screen_cast->dbus_name_id =
g_bus_own_name (G_BUS_TYPE_SESSION,
META_SCREEN_CAST_DBUS_SERVICE,
G_BUS_NAME_OWNER_FLAGS_NONE,
on_bus_acquired,
on_name_acquired,
on_name_lost,
screen_cast,
NULL);
}
static void
meta_screen_cast_finalize (GObject *object)
{
MetaScreenCast *screen_cast = META_SCREEN_CAST (object);
if (screen_cast->dbus_name_id)
g_bus_unown_name (screen_cast->dbus_name_id);
while (screen_cast->sessions)
{
MetaScreenCastSession *session = screen_cast->sessions->data;
meta_screen_cast_session_close (session);
}
G_OBJECT_CLASS (meta_screen_cast_parent_class)->finalize (object);
}
MetaScreenCast *
meta_screen_cast_new (MetaDbusSessionWatcher *session_watcher)
{
MetaScreenCast *screen_cast;
screen_cast = g_object_new (META_TYPE_SCREEN_CAST, NULL);
screen_cast->session_watcher = session_watcher;
return screen_cast;
}
static void
meta_screen_cast_init (MetaScreenCast *screen_cast)
{
static gboolean is_pipewire_initialized = FALSE;
if (!is_pipewire_initialized)
{
pw_init (NULL, NULL);
is_pipewire_initialized = TRUE;
}
}
static void
meta_screen_cast_class_init (MetaScreenCastClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = meta_screen_cast_constructed;
object_class->finalize = meta_screen_cast_finalize;
}

View File

@@ -1,40 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015-2017 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
*/
#ifndef META_SCREEN_CAST_H
#define META_SCREEN_CAST_H
#include <glib-object.h>
#include "backends/meta-dbus-session-watcher.h"
#include "meta-dbus-screen-cast.h"
#define META_TYPE_SCREEN_CAST (meta_screen_cast_get_type ())
G_DECLARE_FINAL_TYPE (MetaScreenCast, meta_screen_cast,
META, SCREEN_CAST,
MetaDBusScreenCastSkeleton)
GDBusConnection * meta_screen_cast_get_connection (MetaScreenCast *screen_cast);
MetaScreenCast * meta_screen_cast_new (MetaDbusSessionWatcher *session_watcher);
#endif /* META_SCREEN_CAST_H */

View File

@@ -31,8 +31,6 @@ typedef enum _MetaExperimentalFeature
{ {
META_EXPERIMENTAL_FEATURE_NONE = 0, META_EXPERIMENTAL_FEATURE_NONE = 0,
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER = (1 << 0), META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER = (1 << 0),
META_EXPERIMENTAL_FEATURE_SCREEN_CAST = (1 << 1),
META_EXPERIMENTAL_FEATURE_REMOTE_DESKTOP = (1 << 2),
} MetaExperimentalFeature; } MetaExperimentalFeature;
#define META_TYPE_SETTINGS (meta_settings_get_type ()) #define META_TYPE_SETTINGS (meta_settings_get_type ())

View File

@@ -67,14 +67,23 @@ calculate_ui_scaling_factor (MetaSettings *settings)
{ {
MetaMonitorManager *monitor_manager = MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (settings->backend); meta_backend_get_monitor_manager (settings->backend);
MetaLogicalMonitor *primary_logical_monitor; GList *logical_monitors;
GList *l;
float max_scale = 1.0;
primary_logical_monitor = logical_monitors =
meta_monitor_manager_get_primary_logical_monitor (monitor_manager); meta_monitor_manager_get_logical_monitors (monitor_manager);
if (!primary_logical_monitor) for (l = logical_monitors; l; l = l->next)
return 1; {
MetaLogicalMonitor *logical_monitor = l->data;
return (int) meta_logical_monitor_get_scale (primary_logical_monitor); max_scale = MAX (meta_logical_monitor_get_scale (logical_monitor),
max_scale);
}
g_warn_if_fail (fmodf (max_scale, 1.0) == 0.0);
return (int) max_scale;
} }
static gboolean static gboolean
@@ -253,10 +262,6 @@ experimental_features_handler (GVariant *features_variant,
/* So far no experimental features defined. */ /* So far no experimental features defined. */
if (g_str_equal (feature, "scale-monitor-framebuffer")) if (g_str_equal (feature, "scale-monitor-framebuffer"))
features |= META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER; features |= META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER;
else if (g_str_equal (feature, "screen-cast"))
features |= META_EXPERIMENTAL_FEATURE_SCREEN_CAST;
else if (g_str_equal (feature, "remote-desktop"))
features |= META_EXPERIMENTAL_FEATURE_REMOTE_DESKTOP;
else else
g_info ("Unknown experimental feature '%s'\n", feature); g_info ("Unknown experimental feature '%s'\n", feature);
} }
@@ -343,25 +348,11 @@ meta_settings_init (MetaSettings *settings)
update_experimental_features (settings); update_experimental_features (settings);
} }
static void
on_monitors_changed (MetaMonitorManager *monitor_manager,
MetaSettings *settings)
{
meta_settings_update_ui_scaling_factor (settings);
}
void void
meta_settings_post_init (MetaSettings *settings) meta_settings_post_init (MetaSettings *settings)
{ {
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (settings->backend);
update_ui_scaling_factor (settings); update_ui_scaling_factor (settings);
update_font_dpi (settings); update_font_dpi (settings);
g_signal_connect_object (monitor_manager, "monitors-changed-internal",
G_CALLBACK (on_monitors_changed),
settings, G_CONNECT_AFTER);
} }
static void static void

View File

@@ -268,7 +268,7 @@ relative_motion_across_outputs (MetaMonitorManager *monitor_manager,
MetaLogicalMonitor *cur = current; MetaLogicalMonitor *cur = current;
float x = cur_x, y = cur_y; float x = cur_x, y = cur_y;
float dx = *dx_inout, dy = *dy_inout; float dx = *dx_inout, dy = *dy_inout;
MetaScreenDirection direction = -1; MetaDisplayDirection direction = -1;
while (cur) while (cur)
{ {
@@ -296,18 +296,18 @@ relative_motion_across_outputs (MetaMonitorManager *monitor_manager,
{ cur->rect.x + cur->rect.width, cur->rect.y + cur->rect.height } { cur->rect.x + cur->rect.width, cur->rect.y + cur->rect.height }
}; };
if (direction != META_SCREEN_RIGHT && if (direction != META_DISPLAY_RIGHT &&
meta_line2_intersects_with (&motion, &left, &intersection)) meta_line2_intersects_with (&motion, &left, &intersection))
direction = META_SCREEN_LEFT; direction = META_DISPLAY_LEFT;
else if (direction != META_SCREEN_LEFT && else if (direction != META_DISPLAY_LEFT &&
meta_line2_intersects_with (&motion, &right, &intersection)) meta_line2_intersects_with (&motion, &right, &intersection))
direction = META_SCREEN_RIGHT; direction = META_DISPLAY_RIGHT;
else if (direction != META_SCREEN_DOWN && else if (direction != META_DISPLAY_DOWN &&
meta_line2_intersects_with (&motion, &top, &intersection)) meta_line2_intersects_with (&motion, &top, &intersection))
direction = META_SCREEN_UP; direction = META_DISPLAY_UP;
else if (direction != META_SCREEN_UP && else if (direction != META_DISPLAY_UP &&
meta_line2_intersects_with (&motion, &bottom, &intersection)) meta_line2_intersects_with (&motion, &bottom, &intersection))
direction = META_SCREEN_DOWN; direction = META_DISPLAY_DOWN;
else else
{ {
/* We reached the dest logical monitor */ /* We reached the dest logical monitor */
@@ -682,11 +682,14 @@ meta_backend_native_pause (MetaBackendNative *native)
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
MetaMonitorManagerKms *monitor_manager_kms = MetaMonitorManagerKms *monitor_manager_kms =
META_MONITOR_MANAGER_KMS (monitor_manager); META_MONITOR_MANAGER_KMS (monitor_manager);
MetaRendererNative *renderer_native =
META_RENDERER_NATIVE (meta_backend_get_renderer (backend));
clutter_evdev_release_devices (); clutter_evdev_release_devices ();
clutter_egl_freeze_master_clock (); clutter_egl_freeze_master_clock ();
meta_monitor_manager_kms_pause (monitor_manager_kms); meta_monitor_manager_kms_pause (monitor_manager_kms);
meta_renderer_native_pause (renderer_native);
} }
void meta_backend_native_resume (MetaBackendNative *native) void meta_backend_native_resume (MetaBackendNative *native)

View File

@@ -850,7 +850,7 @@ meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
MetaMonitorManager *monitors; MetaMonitorManager *monitors;
monitors = meta_monitor_manager_get (); monitors = meta_monitor_manager_get ();
g_signal_connect_object (monitors, "monitors-changed-internal", g_signal_connect_object (monitors, "monitors-changed",
G_CALLBACK (on_monitors_changed), native, 0); G_CALLBACK (on_monitors_changed), native, 0);
priv->hw_state_invalidated = TRUE; priv->hw_state_invalidated = TRUE;

View File

@@ -245,33 +245,16 @@ meta_input_settings_native_set_scroll_button (MetaInputSettings *settings,
guint button) guint button)
{ {
struct libinput_device *libinput_device; struct libinput_device *libinput_device;
enum libinput_config_scroll_method method;
guint evcode;
libinput_device = clutter_evdev_input_device_get_libinput_device (device); libinput_device = clutter_evdev_input_device_get_libinput_device (device);
if (!libinput_device) if (!libinput_device)
return; return;
if (button == 0) if (!device_set_scroll_method (libinput_device,
{ LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN))
method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
evcode = 0;
}
else
{
/* Compensate for X11 scroll buttons */
if (button > 7)
button -= 4;
/* Button is 1-indexed */
evcode = (BTN_LEFT - 1) + button;
method = LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN;
}
if (!device_set_scroll_method (libinput_device, method))
return; return;
libinput_device_config_scroll_set_button (libinput_device, evcode); libinput_device_config_scroll_set_button (libinput_device, button);
} }
static void static void

View File

@@ -49,6 +49,10 @@
#define DRM_CARD_UDEV_DEVICE_TYPE "drm_minor" #define DRM_CARD_UDEV_DEVICE_TYPE "drm_minor"
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUdevDevice, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUdevClient, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUdevEnumerator, g_object_unref)
struct _MetaLauncher struct _MetaLauncher
{ {
Login1Session *session_proxy; Login1Session *session_proxy;

View File

@@ -41,7 +41,7 @@
#include <xf86drmMode.h> #include <xf86drmMode.h>
#include <meta/main.h> #include <meta/main.h>
#include <meta/errors.h> #include <meta/meta-x11-errors.h>
#include <gudev/gudev.h> #include <gudev/gudev.h>
@@ -692,7 +692,7 @@ init_crtc (MetaCrtc *crtc,
crtc->driver_notify = (GDestroyNotify) meta_crtc_destroy_notify; crtc->driver_notify = (GDestroyNotify) meta_crtc_destroy_notify;
} }
static gboolean static void
init_output (MetaOutput *output, init_output (MetaOutput *output,
MetaMonitorManager *manager, MetaMonitorManager *manager,
drmModeConnector *connector, drmModeConnector *connector,
@@ -746,6 +746,9 @@ init_output (MetaOutput *output,
output->preferred_mode = output->modes[i]; output->preferred_mode = output->modes[i];
} }
if (!output->preferred_mode)
output->preferred_mode = output->modes[0];
output_kms->connector = connector; output_kms->connector = connector;
find_connector_properties (manager_kms, output_kms); find_connector_properties (manager_kms, output_kms);
@@ -756,15 +759,6 @@ init_output (MetaOutput *output,
if (output_kms->has_scaling) if (output_kms->has_scaling)
add_common_modes (manager, output); add_common_modes (manager, output);
if (!output->modes)
{
meta_monitor_manager_clear_output (output);
return FALSE;
}
if (!output->preferred_mode)
output->preferred_mode = output->modes[0];
qsort (output->modes, output->n_modes, sizeof (MetaCrtcMode *), compare_modes); qsort (output->modes, output->n_modes, sizeof (MetaCrtcMode *), compare_modes);
output_kms->n_encoders = connector->count_encoders; output_kms->n_encoders = connector->count_encoders;
@@ -871,8 +865,6 @@ init_output (MetaOutput *output,
output->backlight_min = 0; output->backlight_min = 0;
output->backlight_max = 0; output->backlight_max = 0;
output->backlight = -1; output->backlight = -1;
return TRUE;
} }
static void static void
@@ -1099,7 +1091,7 @@ init_outputs (MetaMonitorManager *manager,
old_output = find_output_by_id (old_outputs, n_old_outputs, old_output = find_output_by_id (old_outputs, n_old_outputs,
connector->connector_id); connector->connector_id);
if (init_output (output, manager, connector, old_output)) init_output (output, manager, connector, old_output);
n_actual_outputs++; n_actual_outputs++;
} }
} }
@@ -1433,8 +1425,8 @@ meta_monitor_manager_kms_apply_monitors_config (MetaMonitorManager *manager
if (!config) if (!config)
{ {
manager->screen_width = META_MONITOR_MANAGER_MIN_SCREEN_WIDTH; manager->screen_width = 0;
manager->screen_height = META_MONITOR_MANAGER_MIN_SCREEN_HEIGHT; manager->screen_height = 0;
meta_monitor_manager_rebuild (manager, NULL); meta_monitor_manager_rebuild (manager, NULL);
return TRUE; return TRUE;
} }
@@ -1790,7 +1782,7 @@ meta_monitor_manager_kms_is_transform_handled (MetaMonitorManager *manager,
{ {
MetaCrtcKms *crtc_kms = crtc->driver_private; MetaCrtcKms *crtc_kms = crtc->driver_private;
if ((1 << transform) & crtc_kms->all_hw_transforms) if ((1 << crtc->transform) & crtc_kms->all_hw_transforms)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;

View File

@@ -132,7 +132,6 @@ struct _MetaRendererNative
CoglClosure *swap_notify_idle; CoglClosure *swap_notify_idle;
int64_t frame_counter; int64_t frame_counter;
gboolean pending_unset_disabled_crtcs;
gboolean no_add_fb2; gboolean no_add_fb2;
}; };
@@ -1397,8 +1396,6 @@ meta_renderer_native_queue_modes_reset (MetaRendererNative *renderer_native)
onscreen_native->pending_set_crtc = TRUE; onscreen_native->pending_set_crtc = TRUE;
} }
renderer_native->pending_unset_disabled_crtcs = TRUE;
} }
static CoglOnscreen * static CoglOnscreen *
@@ -1722,8 +1719,8 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
else else
scale = 1.0; scale = 1.0;
width = roundf (logical_monitor->rect.width * scale); width = logical_monitor->rect.width * scale;
height = roundf (logical_monitor->rect.height * scale); height = logical_monitor->rect.height * scale;
onscreen = meta_renderer_native_create_onscreen (META_RENDERER_NATIVE (renderer), onscreen = meta_renderer_native_create_onscreen (META_RENDERER_NATIVE (renderer),
cogl_context, cogl_context,
@@ -1781,29 +1778,6 @@ void
meta_renderer_native_finish_frame (MetaRendererNative *renderer_native) meta_renderer_native_finish_frame (MetaRendererNative *renderer_native)
{ {
renderer_native->frame_counter++; renderer_native->frame_counter++;
if (renderer_native->pending_unset_disabled_crtcs)
{
MetaBackend *backend = meta_get_backend ();
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
MetaMonitorManagerKms *monitor_manager_kms =
META_MONITOR_MANAGER_KMS (monitor_manager);
unsigned int i;
for (i = 0; i < monitor_manager->n_crtcs; i++)
{
MetaCrtc *crtc = &monitor_manager->crtcs[i];
if (crtc->current_mode)
continue;
meta_monitor_manager_kms_apply_crtc_mode (monitor_manager_kms,
crtc, 0, 0, 0);
}
renderer_native->pending_unset_disabled_crtcs = FALSE;
}
} }
int64_t int64_t
@@ -1812,6 +1786,24 @@ meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_native)
return renderer_native->frame_counter; return renderer_native->frame_counter;
} }
void
meta_renderer_native_pause (MetaRendererNative *renderer_native)
{
GList *views;
GList *l;
views = meta_renderer_get_views (META_RENDERER (renderer_native));
for (l = views; l; l = l->next)
{
ClutterStageView *stage_view = l->data;
g_object_set (G_OBJECT (stage_view),
"framebuffer", NULL,
"offscreen", NULL,
NULL);
}
}
static void static void
meta_renderer_native_get_property (GObject *object, meta_renderer_native_get_property (GObject *object,
guint prop_id, guint prop_id,

View File

@@ -71,4 +71,6 @@ void meta_renderer_native_finish_frame (MetaRendererNative *renderer_native);
int64_t meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_native); int64_t meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_native);
void meta_renderer_native_pause (MetaRendererNative *renderer_native);
#endif /* META_RENDERER_NATIVE_H */ #endif /* META_RENDERER_NATIVE_H */

View File

@@ -160,7 +160,6 @@ meta_stage_native_rebuild_views (MetaStageNative *stage_native)
MetaRenderer *renderer = meta_backend_get_renderer (backend); MetaRenderer *renderer = meta_backend_get_renderer (backend);
meta_renderer_rebuild_views (renderer); meta_renderer_rebuild_views (renderer);
meta_renderer_native_queue_modes_reset (META_RENDERER_NATIVE (renderer));
ensure_frame_callbacks (stage_native); ensure_frame_callbacks (stage_native);
} }

View File

@@ -110,7 +110,7 @@ translate_device_event (MetaBackendX11 *x11,
meta_backend_x11_translate_device_event (x11, device_event); meta_backend_x11_translate_device_event (x11, device_event);
if (!device_event->send_event && device_event->time != CurrentTime) if (!device_event->send_event && device_event->time != META_CURRENT_TIME)
{ {
if (device_event->time < priv->latest_evtime) if (device_event->time < priv->latest_evtime)
{ {
@@ -266,7 +266,7 @@ handle_host_xevent (MetaBackend *backend,
if (meta_plugin_manager_xevent_filter (compositor->plugin_mgr, event)) if (meta_plugin_manager_xevent_filter (compositor->plugin_mgr, event))
bypass_clutter = TRUE; bypass_clutter = TRUE;
if (meta_dnd_handle_xdnd_event (backend, compositor, display, event)) if (meta_dnd_handle_xdnd_event (backend, compositor, priv->xdisplay, event))
bypass_clutter = TRUE; bypass_clutter = TRUE;
} }
} }
@@ -454,7 +454,7 @@ meta_backend_x11_post_init (MetaBackend *backend)
META_BACKEND_CLASS (meta_backend_x11_parent_class)->post_init (backend); META_BACKEND_CLASS (meta_backend_x11_parent_class)->post_init (backend);
monitor_manager = meta_backend_get_monitor_manager (backend); monitor_manager = meta_backend_get_monitor_manager (backend);
g_signal_connect (monitor_manager, "monitors-changed-internal", g_signal_connect (monitor_manager, "monitors-changed",
G_CALLBACK (on_monitors_changed), backend); G_CALLBACK (on_monitors_changed), backend);
} }
@@ -484,7 +484,7 @@ meta_backend_x11_grab_device (MetaBackend *backend,
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits }; XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
int ret; int ret;
if (timestamp != CurrentTime) if (timestamp != META_CURRENT_TIME)
timestamp = MAX (timestamp, priv->latest_evtime); timestamp = MAX (timestamp, priv->latest_evtime);
XISetMask (mask.mask, XI_ButtonPress); XISetMask (mask.mask, XI_ButtonPress);

View File

@@ -40,6 +40,7 @@
#include <meta/barrier.h> #include <meta/barrier.h>
#include "backends/x11/meta-barrier-x11.h" #include "backends/x11/meta-barrier-x11.h"
#include "display-private.h" #include "display-private.h"
#include "x11/meta-x11-display-private.h"
struct _MetaBarrierImplX11Private struct _MetaBarrierImplX11Private
{ {
@@ -68,10 +69,11 @@ _meta_barrier_impl_x11_release (MetaBarrierImpl *impl,
MetaBarrierImplX11Private *priv = MetaBarrierImplX11Private *priv =
meta_barrier_impl_x11_get_instance_private (self); meta_barrier_impl_x11_get_instance_private (self);
MetaDisplay *display = priv->barrier->priv->display; MetaDisplay *display = priv->barrier->priv->display;
Display *dpy = meta_x11_display_get_xdisplay (display->x11_display);
if (META_DISPLAY_HAS_XINPUT_23 (display)) if (META_X11_DISPLAY_HAS_XINPUT_23 (display->x11_display))
{ {
XIBarrierReleasePointer (display->xdisplay, XIBarrierReleasePointer (dpy,
META_VIRTUAL_CORE_POINTER_ID, META_VIRTUAL_CORE_POINTER_ID,
priv->xbarrier, event->event_id); priv->xbarrier, event->event_id);
} }
@@ -89,13 +91,13 @@ _meta_barrier_impl_x11_destroy (MetaBarrierImpl *impl)
if (display == NULL) if (display == NULL)
return; return;
dpy = display->xdisplay; dpy = meta_x11_display_get_xdisplay (display->x11_display);
if (!meta_barrier_is_active (priv->barrier)) if (!meta_barrier_is_active (priv->barrier))
return; return;
XFixesDestroyPointerBarrier (dpy, priv->xbarrier); XFixesDestroyPointerBarrier (dpy, priv->xbarrier);
g_hash_table_remove (display->xids, &priv->xbarrier); g_hash_table_remove (display->x11_display->xids, &priv->xbarrier);
priv->xbarrier = 0; priv->xbarrier = 0;
} }
@@ -119,7 +121,7 @@ meta_barrier_impl_x11_new (MetaBarrier *barrier)
priv = meta_barrier_impl_x11_get_instance_private (self); priv = meta_barrier_impl_x11_get_instance_private (self);
priv->barrier = barrier; priv->barrier = barrier;
dpy = display->xdisplay; dpy = meta_x11_display_get_xdisplay (display->x11_display);
root = DefaultRootWindow (dpy); root = DefaultRootWindow (dpy);
allowed_motion_dirs = allowed_motion_dirs =
@@ -132,7 +134,7 @@ meta_barrier_impl_x11_new (MetaBarrier *barrier)
allowed_motion_dirs, allowed_motion_dirs,
0, NULL); 0, NULL);
g_hash_table_insert (display->xids, &priv->xbarrier, barrier); g_hash_table_insert (display->x11_display->xids, &priv->xbarrier, barrier);
return META_BARRIER_IMPL (self); return META_BARRIER_IMPL (self);
} }
@@ -172,7 +174,7 @@ meta_barrier_fire_xevent (MetaBarrier *barrier,
} }
gboolean gboolean
meta_display_process_barrier_xevent (MetaDisplay *display, meta_x11_display_process_barrier_xevent (MetaX11Display *x11_display,
XIEvent *event) XIEvent *event)
{ {
MetaBarrier *barrier; MetaBarrier *barrier;
@@ -191,7 +193,7 @@ meta_display_process_barrier_xevent (MetaDisplay *display,
} }
xev = (XIBarrierEvent *) event; xev = (XIBarrierEvent *) event;
barrier = g_hash_table_lookup (display->xids, &xev->barrier); barrier = g_hash_table_lookup (x11_display->xids, &xev->barrier);
if (barrier != NULL) if (barrier != NULL)
{ {
meta_barrier_fire_xevent (barrier, xev); meta_barrier_fire_xevent (barrier, xev);

View File

@@ -35,7 +35,7 @@
#include <gudev/gudev.h> #include <gudev/gudev.h>
#endif #endif
#include <meta/errors.h> #include <meta/meta-x11-errors.h>
#include "backends/meta-logical-monitor.h" #include "backends/meta-logical-monitor.h"
typedef struct _MetaInputSettingsX11Private typedef struct _MetaInputSettingsX11Private
@@ -547,7 +547,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
return; return;
/* Grab the puke bucket! */ /* Grab the puke bucket! */
meta_error_trap_push (display); meta_x11_error_trap_push (display->x11_display);
xdev = XOpenDevice (xdisplay, device_id); xdev = XOpenDevice (xdisplay, device_id);
if (xdev) if (xdev)
{ {
@@ -557,7 +557,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
XCloseDevice (xdisplay, xdev); XCloseDevice (xdisplay, xdev);
} }
if (meta_error_trap_pop_with_return (display)) if (meta_x11_error_trap_pop_with_return (display->x11_display))
{ {
g_warning ("Could not set tablet mapping for %s", g_warning ("Could not set tablet mapping for %s",
clutter_input_device_get_device_name (device)); clutter_input_device_get_device_name (device));
@@ -589,7 +589,7 @@ device_query_area (ClutterInputDevice *device,
*width = *height = 0; *width = *height = 0;
device_id = clutter_input_device_get_device_id (device); device_id = clutter_input_device_get_device_id (device);
info = XIQueryDevice (xdisplay, device_id, &n_devices); info = XIQueryDevice (xdisplay, device_id, &n_devices);
if (n_devices <= 0 || !info) if (n_devices == 0)
return FALSE; return FALSE;
abs_x = XInternAtom (xdisplay, "Abs X", True); abs_x = XInternAtom (xdisplay, "Abs X", True);
@@ -744,7 +744,7 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
return; return;
/* Grab the puke bucket! */ /* Grab the puke bucket! */
meta_error_trap_push (display); meta_x11_error_trap_push (display->x11_display);
xdev = XOpenDevice (xdisplay, device_id); xdev = XOpenDevice (xdisplay, device_id);
if (xdev) if (xdev)
{ {
@@ -758,7 +758,7 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
XCloseDevice (xdisplay, xdev); XCloseDevice (xdisplay, xdev);
} }
if (meta_error_trap_pop_with_return (display)) if (meta_x11_error_trap_pop_with_return (display->x11_display))
{ {
g_warning ("Could not set stylus button map for %s", g_warning ("Could not set stylus button map for %s",
clutter_input_device_get_device_name (device)); clutter_input_device_get_device_name (device));

View File

@@ -42,7 +42,7 @@
#include "meta-backend-x11.h" #include "meta-backend-x11.h"
#include <meta/main.h> #include <meta/main.h>
#include <meta/errors.h> #include <meta/meta-x11-errors.h>
#include "backends/meta-monitor-config-manager.h" #include "backends/meta-monitor-config-manager.h"
#include "backends/meta-logical-monitor.h" #include "backends/meta-logical-monitor.h"
@@ -71,9 +71,6 @@ struct _MetaMonitorManagerXrandr
int max_screen_width; int max_screen_width;
int max_screen_height; int max_screen_height;
float *supported_scales;
int n_supported_scales;
}; };
struct _MetaMonitorManagerXrandrClass struct _MetaMonitorManagerXrandrClass
@@ -1467,9 +1464,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
static void static void
meta_monitor_manager_xrandr_ensure_initial_config (MetaMonitorManager *manager) meta_monitor_manager_xrandr_ensure_initial_config (MetaMonitorManager *manager)
{ {
MetaMonitorConfigManager *config_manager = MetaMonitorManagerDeriveFlag flags;
meta_monitor_manager_get_config_manager (manager);
MetaMonitorsConfig *config;
meta_monitor_manager_ensure_configured (manager); meta_monitor_manager_ensure_configured (manager);
@@ -1480,19 +1475,8 @@ meta_monitor_manager_xrandr_ensure_initial_config (MetaMonitorManager *manager)
*/ */
meta_monitor_manager_read_current_state (manager); meta_monitor_manager_read_current_state (manager);
config = meta_monitor_config_manager_get_current (config_manager); flags = META_MONITOR_MANAGER_DERIVE_FLAG_CONFIGURED_SCALE;
meta_monitor_manager_update_logical_state_derived (manager, config); meta_monitor_manager_update_logical_state_derived (manager, flags);
}
static void
meta_monitor_manager_xrandr_rebuild_derived (MetaMonitorManager *manager,
MetaMonitorsConfig *config)
{
MetaMonitorManagerXrandr *manager_xrandr =
META_MONITOR_MANAGER_XRANDR (manager);
g_clear_pointer (&manager_xrandr->supported_scales, g_free);
meta_monitor_manager_rebuild_derived (manager, config);
} }
static gboolean static gboolean
@@ -1506,7 +1490,10 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
if (!config) if (!config)
{ {
meta_monitor_manager_xrandr_rebuild_derived (manager, NULL); MetaMonitorManagerDeriveFlag flags =
META_MONITOR_MANAGER_DERIVE_FLAG_NONE;
meta_monitor_manager_rebuild_derived (manager, flags);
return TRUE; return TRUE;
} }
@@ -1540,7 +1527,11 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
} }
else else
{ {
meta_monitor_manager_xrandr_rebuild_derived (manager, config); MetaMonitorManagerDeriveFlag flags;
flags = (META_MONITOR_MANAGER_DERIVE_FLAG_NONE |
META_MONITOR_MANAGER_DERIVE_FLAG_CONFIGURED_SCALE);
meta_monitor_manager_rebuild_derived (manager, flags);
} }
} }
@@ -1796,76 +1787,6 @@ meta_monitor_manager_xrandr_calculate_monitor_mode_scale (MetaMonitorManager *ma
return meta_monitor_calculate_mode_scale (monitor, monitor_mode); return meta_monitor_calculate_mode_scale (monitor, monitor_mode);
} }
static void
add_supported_scale (GArray *supported_scales,
float scale)
{
unsigned int i;
for (i = 0; i < supported_scales->len; i++)
{
float supported_scale = g_array_index (supported_scales, float, i);
if (scale == supported_scale)
return;
}
g_array_append_val (supported_scales, scale);
}
static int
compare_scales (gconstpointer a,
gconstpointer b)
{
float f = *(float *) a - *(float *) b;
if (f < 0)
return -1;
if (f > 0)
return 1;
return 0;
}
static void
ensure_supported_monitor_scales (MetaMonitorManager *manager)
{
MetaMonitorManagerXrandr *manager_xrandr =
META_MONITOR_MANAGER_XRANDR (manager);
MetaMonitorScalesConstraint constraints;
GList *l;
GArray *supported_scales;
if (manager_xrandr->supported_scales)
return;
constraints = META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
supported_scales = g_array_new (FALSE, FALSE, sizeof (float));
for (l = manager->monitors; l; l = l->next)
{
MetaMonitor *monitor = l->data;
MetaMonitorMode *monitor_mode;
float *monitor_scales;
int n_monitor_scales;
int i;
monitor_mode = meta_monitor_get_preferred_mode (monitor);
monitor_scales =
meta_monitor_calculate_supported_scales (monitor,
monitor_mode,
constraints,
&n_monitor_scales);
for (i = 0; i < n_monitor_scales; i++)
add_supported_scale (supported_scales, monitor_scales[i]);
g_array_sort (supported_scales, compare_scales);
}
manager_xrandr->supported_scales = (float *) supported_scales->data;
manager_xrandr->n_supported_scales = supported_scales->len;
g_array_free (supported_scales, FALSE);
}
static float * static float *
meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager *manager, meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager *manager,
MetaLogicalMonitorLayoutMode layout_mode, MetaLogicalMonitorLayoutMode layout_mode,
@@ -1873,14 +1794,12 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager
MetaMonitorMode *monitor_mode, MetaMonitorMode *monitor_mode,
int *n_supported_scales) int *n_supported_scales)
{ {
MetaMonitorManagerXrandr *manager_xrandr = MetaMonitorScalesConstraint constraints;
META_MONITOR_MANAGER_XRANDR (manager);
ensure_supported_monitor_scales (manager); constraints = META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
*n_supported_scales = manager_xrandr->n_supported_scales; constraints,
return g_memdup (manager_xrandr->supported_scales, n_supported_scales);
manager_xrandr->n_supported_scales * sizeof (float));
} }
static MetaMonitorManagerCapability static MetaMonitorManagerCapability
@@ -1960,7 +1879,6 @@ meta_monitor_manager_xrandr_finalize (GObject *object)
manager_xrandr->resources = NULL; manager_xrandr->resources = NULL;
g_hash_table_destroy (manager_xrandr->tiled_monitor_atoms); g_hash_table_destroy (manager_xrandr->tiled_monitor_atoms);
g_free (manager_xrandr->supported_scales);
G_OBJECT_CLASS (meta_monitor_manager_xrandr_parent_class)->finalize (object); G_OBJECT_CLASS (meta_monitor_manager_xrandr_parent_class)->finalize (object);
} }
@@ -2022,21 +1940,13 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
} }
else else
{ {
MetaMonitorsConfig *config; MetaMonitorManagerDeriveFlag flags =
META_MONITOR_MANAGER_DERIVE_FLAG_NONE;
if (is_our_configuration) if (is_our_configuration)
{ flags |= META_MONITOR_MANAGER_DERIVE_FLAG_CONFIGURED_SCALE;
MetaMonitorConfigManager *config_manager =
meta_monitor_manager_get_config_manager (manager);
config = meta_monitor_config_manager_get_current (config_manager); meta_monitor_manager_rebuild_derived (manager, flags);
}
else
{
config = NULL;
}
meta_monitor_manager_xrandr_rebuild_derived (manager, config);
} }
return TRUE; return TRUE;

View File

@@ -31,8 +31,6 @@ struct _MetaCompositor
CoglContext *context; CoglContext *context;
MetaWindowActor *top_window_actor;
/* Used for unredirecting fullscreen windows */ /* Used for unredirecting fullscreen windows */
guint disable_unredirect_count; guint disable_unredirect_count;
MetaWindow *unredirected_window; MetaWindow *unredirected_window;

View File

@@ -42,8 +42,8 @@
* There's two containers in the stage that are used to place window actors, here * There's two containers in the stage that are used to place window actors, here
* are listed in the order in which they are painted: * are listed in the order in which they are painted:
* *
* - window group, accessible with meta_get_window_group_for_screen() * - window group, accessible with meta_get_window_group_for_display()
* - top window group, accessible with meta_get_top_window_group_for_screen() * - top window group, accessible with meta_get_top_window_group_for_display()
* *
* Mutter will place actors representing windows in the window group, except for * Mutter will place actors representing windows in the window group, except for
* override-redirect windows (ie. popups and menus) which will be placed in the * override-redirect windows (ie. popups and menus) which will be placed in the
@@ -55,8 +55,7 @@
#include <clutter/x11/clutter-x11.h> #include <clutter/x11/clutter-x11.h>
#include "core.h" #include "core.h"
#include <meta/screen.h> #include <meta/meta-x11-errors.h>
#include <meta/errors.h>
#include <meta/window.h> #include <meta/window.h>
#include "compositor-private.h" #include "compositor-private.h"
#include <meta/compositor-mutter.h> #include <meta/compositor-mutter.h>
@@ -80,6 +79,8 @@
#include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-backend-x11.h"
#include "clutter/clutter-mutter.h" #include "clutter/clutter-mutter.h"
#include "x11/meta-x11-display-private.h"
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
#include "wayland/meta-wayland-private.h" #include "wayland/meta-wayland-private.h"
#endif #endif
@@ -149,78 +150,78 @@ process_damage (MetaCompositor *compositor,
/* compat helper */ /* compat helper */
static MetaCompositor * static MetaCompositor *
get_compositor_for_screen (MetaScreen *screen) get_compositor_for_display (MetaDisplay *display)
{ {
return screen->display->compositor; return display->compositor;
} }
/** /**
* meta_get_stage_for_screen: * meta_get_stage_for_display:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Returns: (transfer none): The #ClutterStage for the screen * Returns: (transfer none): The #ClutterStage for the display
*/ */
ClutterActor * ClutterActor *
meta_get_stage_for_screen (MetaScreen *screen) meta_get_stage_for_display (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
return compositor->stage; return compositor->stage;
} }
/** /**
* meta_get_window_group_for_screen: * meta_get_window_group_for_display:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Returns: (transfer none): The window group corresponding to @screen * Returns: (transfer none): The window group corresponding to @display
*/ */
ClutterActor * ClutterActor *
meta_get_window_group_for_screen (MetaScreen *screen) meta_get_window_group_for_display (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
return compositor->window_group; return compositor->window_group;
} }
/** /**
* meta_get_top_window_group_for_screen: * meta_get_top_window_group_for_display:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Returns: (transfer none): The top window group corresponding to @screen * Returns: (transfer none): The top window group corresponding to @display
*/ */
ClutterActor * ClutterActor *
meta_get_top_window_group_for_screen (MetaScreen *screen) meta_get_top_window_group_for_display (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
return compositor->top_window_group; return compositor->top_window_group;
} }
/** /**
* meta_get_feedback_group_for_screen: * meta_get_feedback_group_for_display:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Returns: (transfer none): The feedback group corresponding to @screen * Returns: (transfer none): The feedback group corresponding to @display
*/ */
ClutterActor * ClutterActor *
meta_get_feedback_group_for_screen (MetaScreen *screen) meta_get_feedback_group_for_display (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
return compositor->feedback_group; return compositor->feedback_group;
} }
/** /**
* meta_get_window_actors: * meta_get_window_actors:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Returns: (transfer none) (element-type Clutter.Actor): The set of #MetaWindowActor on @screen * Returns: (transfer none) (element-type Clutter.Actor): The set of #MetaWindowActor on @display
*/ */
GList * GList *
meta_get_window_actors (MetaScreen *screen) meta_get_window_actors (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
return compositor->windows; return compositor->windows;
} }
void void
meta_set_stage_input_region (MetaScreen *screen, meta_set_stage_input_region (MetaDisplay *display,
XserverRegion region) XserverRegion region)
{ {
/* As a wayland compositor we can simply ignore all this trickery /* As a wayland compositor we can simply ignore all this trickery
@@ -230,9 +231,8 @@ meta_set_stage_input_region (MetaScreen *screen,
*/ */
if (!meta_is_wayland_compositor ()) if (!meta_is_wayland_compositor ())
{ {
MetaDisplay *display = screen->display;
MetaCompositor *compositor = display->compositor; MetaCompositor *compositor = display->compositor;
Display *xdpy = meta_display_get_xdisplay (display); Display *xdpy = meta_x11_display_get_xdisplay (display->x11_display);
Window xstage = clutter_x11_get_stage_window (CLUTTER_STAGE (compositor->stage)); Window xstage = clutter_x11_get_stage_window (CLUTTER_STAGE (compositor->stage));
XFixesSetWindowShapeRegion (xdpy, xstage, ShapeInput, 0, 0, region); XFixesSetWindowShapeRegion (xdpy, xstage, ShapeInput, 0, 0, region);
@@ -247,7 +247,7 @@ meta_set_stage_input_region (MetaScreen *screen,
} }
void void
meta_empty_stage_input_region (MetaScreen *screen) meta_empty_stage_input_region (MetaDisplay *display)
{ {
/* Using a static region here is a bit hacky, but Metacity never opens more than /* Using a static region here is a bit hacky, but Metacity never opens more than
* one XDisplay, so it works fine. */ * one XDisplay, so it works fine. */
@@ -255,22 +255,21 @@ meta_empty_stage_input_region (MetaScreen *screen)
if (region == None) if (region == None)
{ {
MetaDisplay *display = meta_screen_get_display (screen); Display *xdpy = meta_x11_display_get_xdisplay (display->x11_display);
Display *xdpy = meta_display_get_xdisplay (display);
region = XFixesCreateRegion (xdpy, NULL, 0); region = XFixesCreateRegion (xdpy, NULL, 0);
} }
meta_set_stage_input_region (screen, region); meta_set_stage_input_region (display, region);
} }
void void
meta_focus_stage_window (MetaScreen *screen, meta_focus_stage_window (MetaDisplay *display,
guint32 timestamp) guint32 timestamp)
{ {
ClutterStage *stage; ClutterStage *stage;
Window window; Window window;
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen)); stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
if (!stage) if (!stage)
return; return;
@@ -279,14 +278,13 @@ meta_focus_stage_window (MetaScreen *screen,
if (window == None) if (window == None)
return; return;
meta_display_set_input_focus_xwindow (screen->display, meta_x11_display_set_input_focus_xwindow (display->x11_display,
screen,
window, window,
timestamp); timestamp);
} }
gboolean gboolean
meta_stage_is_focused (MetaScreen *screen) meta_stage_is_focused (MetaDisplay *display)
{ {
ClutterStage *stage; ClutterStage *stage;
Window window; Window window;
@@ -294,7 +292,7 @@ meta_stage_is_focused (MetaScreen *screen)
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
return TRUE; return TRUE;
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen)); stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
if (!stage) if (!stage)
return FALSE; return FALSE;
@@ -303,7 +301,7 @@ meta_stage_is_focused (MetaScreen *screen)
if (window == None) if (window == None)
return FALSE; return FALSE;
return (screen->display->focus_xwindow == window); return (display->x11_display->focus_xwindow == window);
} }
static gboolean static gboolean
@@ -364,11 +362,14 @@ meta_begin_modal_for_plugin (MetaCompositor *compositor,
if (is_modal (display) || display->grab_op != META_GRAB_OP_NONE) if (is_modal (display) || display->grab_op != META_GRAB_OP_NONE)
return FALSE; return FALSE;
if (display->x11_display)
{
/* XXX: why is this needed? */ /* XXX: why is this needed? */
XIUngrabDevice (display->xdisplay, XIUngrabDevice (display->x11_display->xdisplay,
META_VIRTUAL_CORE_POINTER_ID, META_VIRTUAL_CORE_POINTER_ID,
timestamp); timestamp);
XSync (display->xdisplay, False); XSync (display->x11_display->xdisplay, False);
}
if (!grab_devices (options, timestamp)) if (!grab_devices (options, timestamp))
return FALSE; return FALSE;
@@ -380,7 +381,7 @@ meta_begin_modal_for_plugin (MetaCompositor *compositor,
display->grab_have_keyboard = TRUE; display->grab_have_keyboard = TRUE;
g_signal_emit_by_name (display, "grab-op-begin", g_signal_emit_by_name (display, "grab-op-begin",
meta_plugin_get_screen (plugin), meta_plugin_get_display (plugin),
display->grab_window, display->grab_op); display->grab_window, display->grab_op);
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
@@ -407,7 +408,7 @@ meta_end_modal_for_plugin (MetaCompositor *compositor,
g_return_if_fail (is_modal (display)); g_return_if_fail (is_modal (display));
g_signal_emit_by_name (display, "grab-op-end", g_signal_emit_by_name (display, "grab-op-end",
meta_plugin_get_screen (plugin), meta_plugin_get_display (plugin),
display->grab_window, display->grab_op); display->grab_window, display->grab_op);
display->grab_op = META_GRAB_OP_NONE; display->grab_op = META_GRAB_OP_NONE;
@@ -440,12 +441,11 @@ after_stage_paint (ClutterStage *stage,
} }
static void static void
redirect_windows (MetaScreen *screen) redirect_windows (MetaX11Display *x11_display)
{ {
MetaDisplay *display = meta_screen_get_display (screen); Display *xdisplay = meta_x11_display_get_xdisplay (x11_display);
Display *xdisplay = meta_display_get_xdisplay (display); Window xroot = meta_x11_display_get_xroot (x11_display);
Window xroot = meta_screen_get_xroot (screen); int screen_number = meta_x11_display_get_screen_number (x11_display);
int screen_number = meta_screen_get_screen_number (screen);
guint n_retries; guint n_retries;
guint max_retries; guint max_retries;
@@ -462,11 +462,11 @@ redirect_windows (MetaScreen *screen)
*/ */
while (TRUE) while (TRUE)
{ {
meta_error_trap_push (display); meta_x11_error_trap_push (x11_display);
XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual); XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
XSync (xdisplay, FALSE); XSync (xdisplay, FALSE);
if (!meta_error_trap_pop_with_return (display)) if (!meta_x11_error_trap_pop_with_return (x11_display))
break; break;
if (n_retries == max_retries) if (n_retries == max_retries)
@@ -474,7 +474,7 @@ redirect_windows (MetaScreen *screen)
/* This probably means that a non-WM compositor like xcompmgr is running; /* This probably means that a non-WM compositor like xcompmgr is running;
* we have no way to get it to exit */ * we have no way to get it to exit */
meta_fatal (_("Another compositing manager is already running on screen %i on display “%s”."), meta_fatal (_("Another compositing manager is already running on screen %i on display “%s”."),
screen_number, display->name); screen_number, x11_display->name);
} }
n_retries++; n_retries++;
@@ -486,11 +486,14 @@ void
meta_compositor_manage (MetaCompositor *compositor) meta_compositor_manage (MetaCompositor *compositor)
{ {
MetaDisplay *display = compositor->display; MetaDisplay *display = compositor->display;
Display *xdisplay = display->xdisplay; Display *xdisplay = NULL;
MetaScreen *screen = display->screen;
MetaBackend *backend = meta_get_backend (); MetaBackend *backend = meta_get_backend ();
meta_screen_set_cm_selection (display->screen); if (display->x11_display)
{
xdisplay = display->x11_display->xdisplay;
meta_x11_display_set_cm_selection (display->x11_display);
}
compositor->stage = meta_backend_get_stage (backend); compositor->stage = meta_backend_get_stage (backend);
@@ -511,9 +514,9 @@ meta_compositor_manage (MetaCompositor *compositor)
clutter_stage_set_sync_delay (CLUTTER_STAGE (compositor->stage), META_SYNC_DELAY); clutter_stage_set_sync_delay (CLUTTER_STAGE (compositor->stage), META_SYNC_DELAY);
compositor->window_group = meta_window_group_new (screen); compositor->window_group = meta_window_group_new (display);
compositor->top_window_group = meta_window_group_new (screen); compositor->top_window_group = meta_window_group_new (display);
compositor->feedback_group = meta_window_group_new (screen); compositor->feedback_group = meta_window_group_new (display);
clutter_actor_add_child (compositor->stage, compositor->window_group); clutter_actor_add_child (compositor->stage, compositor->window_group);
clutter_actor_add_child (compositor->stage, compositor->top_window_group); clutter_actor_add_child (compositor->stage, compositor->top_window_group);
@@ -530,13 +533,13 @@ meta_compositor_manage (MetaCompositor *compositor)
{ {
Window xwin; Window xwin;
compositor->output = screen->composite_overlay_window; compositor->output = display->x11_display->composite_overlay_window;
xwin = meta_backend_x11_get_xwindow (META_BACKEND_X11 (backend)); xwin = meta_backend_x11_get_xwindow (META_BACKEND_X11 (backend));
XReparentWindow (xdisplay, xwin, compositor->output, 0, 0); XReparentWindow (xdisplay, xwin, compositor->output, 0, 0);
meta_empty_stage_input_region (screen); meta_empty_stage_input_region (display);
/* Make sure there isn't any left-over output shape on the /* Make sure there isn't any left-over output shape on the
* overlay window by setting the whole screen to be an * overlay window by setting the whole screen to be an
@@ -556,7 +559,8 @@ meta_compositor_manage (MetaCompositor *compositor)
compositor->have_x11_sync_object = meta_sync_ring_init (xdisplay); compositor->have_x11_sync_object = meta_sync_ring_init (xdisplay);
} }
redirect_windows (display->screen); if (display->x11_display)
redirect_windows (display->x11_display);
compositor->plugin_mgr = meta_plugin_manager_new (compositor); compositor->plugin_mgr = meta_plugin_manager_new (compositor);
} }
@@ -566,9 +570,9 @@ meta_compositor_unmanage (MetaCompositor *compositor)
{ {
if (!meta_is_wayland_compositor ()) if (!meta_is_wayland_compositor ())
{ {
MetaDisplay *display = compositor->display; MetaX11Display *display = compositor->display->x11_display;
Display *xdisplay = meta_display_get_xdisplay (display); Display *xdisplay = display->xdisplay;
Window xroot = display->screen->xroot; Window xroot = display->xroot;
/* This is the most important part of cleanup - we have to do this /* This is the most important part of cleanup - we have to do this
* before giving up the window manager selection or the next * before giving up the window manager selection or the next
@@ -593,7 +597,7 @@ meta_shape_cow_for_window (MetaCompositor *compositor,
MetaWindow *window) MetaWindow *window)
{ {
MetaDisplay *display = compositor->display; MetaDisplay *display = compositor->display;
Display *xdisplay = meta_display_get_xdisplay (display); Display *xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
if (window == NULL) if (window == NULL)
XFixesSetWindowShapeRegion (xdisplay, compositor->output, ShapeBounding, 0, 0, None); XFixesSetWindowShapeRegion (xdisplay, compositor->output, ShapeBounding, 0, 0, None);
@@ -611,7 +615,7 @@ meta_shape_cow_for_window (MetaCompositor *compositor,
window_bounds.width = rect.width; window_bounds.width = rect.width;
window_bounds.height = rect.height; window_bounds.height = rect.height;
meta_screen_get_size (display->screen, &width, &height); meta_display_get_size (display, &width, &height);
screen_rect.x = 0; screen_rect.x = 0;
screen_rect.y = 0; screen_rect.y = 0;
screen_rect.width = width; screen_rect.width = width;
@@ -654,12 +658,12 @@ meta_compositor_add_window (MetaCompositor *compositor,
{ {
MetaDisplay *display = compositor->display; MetaDisplay *display = compositor->display;
meta_error_trap_push (display); meta_x11_error_trap_push (display->x11_display);
meta_window_actor_new (window); meta_window_actor_new (window);
sync_actor_stacking (compositor); sync_actor_stacking (compositor);
meta_error_trap_pop (display); meta_x11_error_trap_pop (display->x11_display);
} }
void void
@@ -671,9 +675,6 @@ meta_compositor_remove_window (MetaCompositor *compositor,
if (compositor->unredirected_window == window) if (compositor->unredirected_window == window)
set_unredirected_window (compositor, NULL); set_unredirected_window (compositor, NULL);
if (compositor->top_window_actor == window_actor)
compositor->top_window_actor = NULL;
meta_window_actor_destroy (window_actor); meta_window_actor_destroy (window_actor);
} }
@@ -742,8 +743,10 @@ meta_compositor_process_event (MetaCompositor *compositor,
XEvent *event, XEvent *event,
MetaWindow *window) MetaWindow *window)
{ {
MetaX11Display *x11_display = compositor->display->x11_display;
if (!meta_is_wayland_compositor () && if (!meta_is_wayland_compositor () &&
event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify) event->type == meta_x11_display_get_damage_event_base (x11_display) + XDamageNotify)
{ {
/* Core code doesn't handle damage events, so we need to extract the MetaWindow /* Core code doesn't handle damage events, so we need to extract the MetaWindow
* ourselves * ourselves
@@ -751,7 +754,7 @@ meta_compositor_process_event (MetaCompositor *compositor,
if (window == NULL) if (window == NULL)
{ {
Window xwin = ((XDamageNotifyEvent *) event)->drawable; Window xwin = ((XDamageNotifyEvent *) event)->drawable;
window = meta_display_lookup_x_window (compositor->display, xwin); window = meta_x11_display_lookup_x_window (x11_display, xwin);
} }
if (window) if (window)
@@ -926,32 +929,6 @@ sync_actor_stacking (MetaCompositor *compositor)
g_list_free (backgrounds); g_list_free (backgrounds);
} }
/*
* Find the top most window that is visible on the screen. The intention of
* this is to avoid offscreen windows that isn't actually part of the visible
* desktop (such as the UI frames override redirect window).
*/
static MetaWindowActor *
get_top_visible_window_actor (MetaCompositor *compositor)
{
GList *l;
for (l = g_list_last (compositor->windows); l; l = l->prev)
{
MetaWindowActor *window_actor = l->data;
MetaWindow *window = meta_window_actor_get_meta_window (window_actor);
MetaRectangle buffer_rect;
meta_window_get_buffer_rect (window, &buffer_rect);
if (meta_rectangle_overlap (&compositor->display->screen->rect,
&buffer_rect))
return window_actor;
}
return NULL;
}
void void
meta_compositor_sync_stack (MetaCompositor *compositor, meta_compositor_sync_stack (MetaCompositor *compositor,
GList *stack) GList *stack)
@@ -1038,8 +1015,6 @@ meta_compositor_sync_stack (MetaCompositor *compositor,
} }
sync_actor_stacking (compositor); sync_actor_stacking (compositor);
compositor->top_window_actor = get_top_visible_window_actor (compositor);
} }
void void
@@ -1096,26 +1071,19 @@ static gboolean
meta_pre_paint_func (gpointer data) meta_pre_paint_func (gpointer data)
{ {
GList *l; GList *l;
MetaWindowActor *top_window_actor; MetaWindowActor *top_window;
MetaCompositor *compositor = data; MetaCompositor *compositor = data;
if (compositor->windows == NULL) if (compositor->windows == NULL)
return TRUE; return TRUE;
top_window_actor = compositor->top_window_actor; top_window = g_list_last (compositor->windows)->data;
if (top_window_actor &&
meta_window_actor_should_unredirect (top_window_actor) &&
compositor->disable_unredirect_count == 0)
{
MetaWindow *top_window;
top_window = meta_window_actor_get_meta_window (top_window_actor); if (meta_window_actor_should_unredirect (top_window) &&
set_unredirected_window (compositor, top_window); compositor->disable_unredirect_count == 0)
} set_unredirected_window (compositor, meta_window_actor_get_meta_window (top_window));
else else
{
set_unredirected_window (compositor, NULL); set_unredirected_window (compositor, NULL);
}
for (l = compositor->windows; l; l = l->next) for (l = compositor->windows; l; l = l->next)
meta_window_actor_pre_paint (l->data); meta_window_actor_pre_paint (l->data);
@@ -1147,7 +1115,7 @@ meta_pre_paint_func (gpointer data)
if (compositor->have_x11_sync_object) if (compositor->have_x11_sync_object)
compositor->have_x11_sync_object = meta_sync_ring_insert_wait (); compositor->have_x11_sync_object = meta_sync_ring_insert_wait ();
else else
XSync (compositor->display->xdisplay, False); XSync (compositor->display->x11_display->xdisplay, False);
} }
return TRUE; return TRUE;
@@ -1242,44 +1210,44 @@ meta_compositor_new (MetaDisplay *display)
/** /**
* meta_get_overlay_window: (skip) * meta_get_overlay_window: (skip)
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
*/ */
Window Window
meta_get_overlay_window (MetaScreen *screen) meta_get_overlay_window (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
return compositor->output; return compositor->output;
} }
/** /**
* meta_disable_unredirect_for_screen: * meta_disable_unredirect_for_display:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Disables unredirection, can be usefull in situations where having * Disables unredirection, can be usefull in situations where having
* unredirected windows is undesireable like when recording a video. * unredirected windows is undesireable like when recording a video.
* *
*/ */
void void
meta_disable_unredirect_for_screen (MetaScreen *screen) meta_disable_unredirect_for_display (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
compositor->disable_unredirect_count++; compositor->disable_unredirect_count++;
} }
/** /**
* meta_enable_unredirect_for_screen: * meta_enable_unredirect_for_display:
* @screen: a #MetaScreen * @display: a #MetaDisplay
* *
* Enables unredirection which reduces the overhead for apps like games. * Enables unredirection which reduces the overhead for apps like games.
* *
*/ */
void void
meta_enable_unredirect_for_screen (MetaScreen *screen) meta_enable_unredirect_for_display (MetaDisplay *display)
{ {
MetaCompositor *compositor = get_compositor_for_screen (screen); MetaCompositor *compositor = get_compositor_for_display (display);
if (compositor->disable_unredirect_count == 0) if (compositor->disable_unredirect_count == 0)
g_warning ("Called enable_unredirect_for_screen while unredirection is enabled."); g_warning ("Called enable_unredirect_for_display while unredirection is enabled.");
if (compositor->disable_unredirect_count > 0) if (compositor->disable_unredirect_count > 0)
compositor->disable_unredirect_count--; compositor->disable_unredirect_count--;
} }
@@ -1296,15 +1264,15 @@ flash_out_completed (ClutterTimeline *timeline,
} }
void void
meta_compositor_flash_screen (MetaCompositor *compositor, meta_compositor_flash_display (MetaCompositor *compositor,
MetaScreen *screen) MetaDisplay *display)
{ {
ClutterActor *stage; ClutterActor *stage;
ClutterActor *flash; ClutterActor *flash;
ClutterTransition *transition; ClutterTransition *transition;
gfloat width, height; gfloat width, height;
stage = meta_get_stage_for_screen (screen); stage = meta_get_stage_for_display (display);
clutter_actor_get_size (stage, &width, &height); clutter_actor_get_size (stage, &width, &height);
flash = clutter_actor_new (); flash = clutter_actor_new ();

View File

@@ -3,7 +3,6 @@
#ifndef META_BACKGROUND_ACTOR_PRIVATE_H #ifndef META_BACKGROUND_ACTOR_PRIVATE_H
#define META_BACKGROUND_ACTOR_PRIVATE_H #define META_BACKGROUND_ACTOR_PRIVATE_H
#include <meta/screen.h>
#include <meta/meta-background-actor.h> #include <meta/meta-background-actor.h>
cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self); cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self);

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