Compare commits
42 Commits
3.22.2
...
gnome-3-22
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9cd8d5446b | ||
|
|
8fe24c11fa | ||
|
|
19f08fbdbb | ||
|
|
40a3d67698 | ||
|
|
ca31a94e54 | ||
|
|
f6888519ff | ||
|
|
ba317dcd74 | ||
|
|
a8b06afba6 | ||
|
|
5b232a80cd | ||
|
|
50c8ee9490 | ||
|
|
406e1c3577 | ||
|
|
68b4d1e462 | ||
|
|
3378547aa2 | ||
|
|
9bd4fd7b98 | ||
|
|
a27f8debca | ||
|
|
cc8d61e5cf | ||
|
|
bc567cfca7 | ||
|
|
afb4165262 | ||
|
|
6161aacde7 | ||
|
|
4d300db0e2 | ||
|
|
b465546a52 | ||
|
|
443250a9f7 | ||
|
|
1d24f612cc | ||
|
|
6e2722298e | ||
|
|
917aef5090 | ||
|
|
58669e7598 | ||
|
|
998aa532d0 | ||
|
|
050e4acdae | ||
|
|
8ccbd36315 | ||
|
|
790b386c5f | ||
|
|
d4d3dbd088 | ||
|
|
23c315ea71 | ||
|
|
18a4b9fb2c | ||
|
|
2166a496fe | ||
|
|
f8fd02d6ee | ||
|
|
2ae42f0db2 | ||
|
|
06f5b6b3e3 | ||
|
|
d9fc81e702 | ||
|
|
497a94fac7 | ||
|
|
a943c0fc12 | ||
|
|
76f890a26f | ||
|
|
5c46094d67 |
38
NEWS
38
NEWS
@@ -1,3 +1,41 @@
|
||||
3.22.4
|
||||
======
|
||||
* Fix crash when a window closes during Alt+Tab [Rui; #779483]
|
||||
* Fix mouse input stopping to work in applications [Carlos; #763246]
|
||||
* Fix DnD between QT5 and GTK3 applications on wayland [Carlos; #779757]
|
||||
* Fix lock-up when using additional theme variants [Shantanu; #780254]
|
||||
* Fix lockfile size confusion [Daniel; #774613]
|
||||
|
||||
Contributors:
|
||||
Olivier Fourdan, Carlos Garnacho, Shantanu Goel, Rui Matos, Daniel Stone
|
||||
|
||||
Translations:
|
||||
Sveinn í Felli [is], GNOME Translation Robot [gd]
|
||||
|
||||
3.22.3
|
||||
======
|
||||
* Fix switching between two finger- and edge scrolling on wayland [Rui; #771744]
|
||||
* Fix frequent freezes in multihead setups on wayland [Rui; #774557]
|
||||
* Preserve root window mask on XSelectionRequest [Olivier; #776128]
|
||||
* Fix window menu placement with HiDPI [Jonas; #776055]
|
||||
* Fix HiDPI detection on vertical monitor layouts [Carlos; #777687]
|
||||
* Fix erroneous key event repeats [Rui; #774989]
|
||||
* Fix "ghost" cursors in multi-monitor setups [Jonas; #771056]
|
||||
* Use eglGetPlatformDisplay [Adam; #772422]
|
||||
* Fix erratic raise_or_lower behavior [Jose; #705200]
|
||||
* Extend tablet device checks [Carlos; #773779]
|
||||
* Set right scale for tablet tool cursors on HiDPI [Carlos; #778474]
|
||||
* Allow edge-scrolling without 2fg-scroll capable devices [Rui; #778554]
|
||||
* Misc. bug fixes [Jonas, Rui, Carlos, Peter; #771297, #774135, #775986,
|
||||
#777691, #777470, #778262, #776919]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Peter Hutterer, Adam Jackson,
|
||||
Jose Marino, Rui Matos
|
||||
|
||||
Translations:
|
||||
Mandy Wang [zh_CN]
|
||||
|
||||
3.22.2
|
||||
======
|
||||
* Really fix framebuffer capture origin offset [Rui; #771502]
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
struct _ClutterClonePrivate
|
||||
{
|
||||
ClutterActor *clone_source;
|
||||
gulong source_destroy_id;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (ClutterClone, clutter_clone, CLUTTER_TYPE_ACTOR)
|
||||
@@ -376,6 +377,13 @@ clutter_clone_new (ClutterActor *source)
|
||||
return g_object_new (CLUTTER_TYPE_CLONE, "source", source, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
on_source_destroyed (ClutterActor *source,
|
||||
ClutterClone *self)
|
||||
{
|
||||
clutter_clone_set_source_internal (self, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_clone_set_source_internal (ClutterClone *self,
|
||||
ClutterActor *source)
|
||||
@@ -387,6 +395,8 @@ clutter_clone_set_source_internal (ClutterClone *self,
|
||||
|
||||
if (priv->clone_source != NULL)
|
||||
{
|
||||
g_signal_handler_disconnect (priv->clone_source, priv->source_destroy_id);
|
||||
priv->source_destroy_id = 0;
|
||||
_clutter_actor_detach_clone (priv->clone_source, CLUTTER_ACTOR (self));
|
||||
g_object_unref (priv->clone_source);
|
||||
priv->clone_source = NULL;
|
||||
@@ -396,6 +406,8 @@ clutter_clone_set_source_internal (ClutterClone *self,
|
||||
{
|
||||
priv->clone_source = g_object_ref (source);
|
||||
_clutter_actor_attach_clone (priv->clone_source, CLUTTER_ACTOR (self));
|
||||
priv->source_destroy_id = g_signal_connect (priv->clone_source, "destroy",
|
||||
G_CALLBACK (on_source_destroyed), self);
|
||||
}
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_SOURCE]);
|
||||
|
||||
@@ -2261,6 +2261,12 @@ _clutter_device_manager_evdev_acquire_device_id (ClutterDeviceManagerEvdev *mana
|
||||
return next_id;
|
||||
}
|
||||
|
||||
void
|
||||
_clutter_device_manager_evdev_dispatch (ClutterDeviceManagerEvdev *manager_evdev)
|
||||
{
|
||||
dispatch_libinput (manager_evdev);
|
||||
}
|
||||
|
||||
static int
|
||||
compare_ids (gconstpointer a,
|
||||
gconstpointer b)
|
||||
|
||||
@@ -76,6 +76,8 @@ void _clutter_device_manager_evdev_constrain_pointer (ClutterDeviceManagerEvdev
|
||||
float *new_x,
|
||||
float *new_y);
|
||||
|
||||
void _clutter_device_manager_evdev_dispatch (ClutterDeviceManagerEvdev *manager_evdev);
|
||||
|
||||
static inline guint64
|
||||
us (guint64 us)
|
||||
{
|
||||
|
||||
@@ -185,15 +185,19 @@ keyboard_repeat (gpointer data)
|
||||
{
|
||||
ClutterSeatEvdev *seat = data;
|
||||
GSource *source;
|
||||
guint32 time_ms;
|
||||
|
||||
/* There might be events queued in libinput that could cancel the
|
||||
repeat timer. */
|
||||
_clutter_device_manager_evdev_dispatch (seat->manager_evdev);
|
||||
if (!seat->repeat_timer)
|
||||
return G_SOURCE_REMOVE;
|
||||
|
||||
g_return_val_if_fail (seat->repeat_device != NULL, G_SOURCE_REMOVE);
|
||||
source = g_main_context_find_source_by_id (NULL, seat->repeat_timer);
|
||||
time_ms = g_source_get_time (source) / 1000;
|
||||
|
||||
clutter_seat_evdev_notify_key (seat,
|
||||
seat->repeat_device,
|
||||
ms2us (time_ms),
|
||||
g_source_get_time (source),
|
||||
seat->repeat_key,
|
||||
AUTOREPEAT_VALUE,
|
||||
FALSE);
|
||||
|
||||
@@ -350,7 +350,8 @@ actor_replace_child (void)
|
||||
g_assert_cmpstr (clutter_actor_get_name (iter), ==, "qux");
|
||||
|
||||
clutter_actor_add_child (actor, g_object_new (CLUTTER_TYPE_ACTOR,
|
||||
"name", "foo"));
|
||||
"name", "foo",
|
||||
NULL));
|
||||
|
||||
clutter_actor_replace_child (actor, iter,
|
||||
g_object_new (CLUTTER_TYPE_ACTOR,
|
||||
|
||||
@@ -261,6 +261,39 @@ _cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
|
||||
g_slice_free (CoglRendererEGL, egl_renderer);
|
||||
}
|
||||
|
||||
static EGLDisplay
|
||||
_cogl_winsys_egl_get_display (void *native)
|
||||
{
|
||||
EGLDisplay dpy = NULL;
|
||||
const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS);
|
||||
|
||||
if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base"))
|
||||
{
|
||||
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
|
||||
(void *) eglGetProcAddress ("eglGetPlatformDisplay");
|
||||
|
||||
if (get_platform_display)
|
||||
dpy = get_platform_display (EGL_PLATFORM_X11_KHR, native, NULL);
|
||||
|
||||
if (dpy)
|
||||
return dpy;
|
||||
}
|
||||
|
||||
if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base"))
|
||||
{
|
||||
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
|
||||
(void *) eglGetProcAddress ("eglGetPlatformDisplayEXT");
|
||||
|
||||
if (get_platform_display)
|
||||
dpy = get_platform_display (EGL_PLATFORM_X11_KHR, native, NULL);
|
||||
|
||||
if (dpy)
|
||||
return dpy;
|
||||
}
|
||||
|
||||
return eglGetDisplay ((EGLNativeDisplayType) native);
|
||||
}
|
||||
|
||||
static CoglBool
|
||||
_cogl_winsys_renderer_connect (CoglRenderer *renderer,
|
||||
CoglError **error)
|
||||
@@ -277,8 +310,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
|
||||
if (!_cogl_xlib_renderer_connect (renderer, error))
|
||||
goto error;
|
||||
|
||||
egl_renderer->edpy =
|
||||
eglGetDisplay ((EGLNativeDisplayType) xlib_renderer->xdpy);
|
||||
egl_renderer->edpy = _cogl_winsys_egl_get_display (xlib_renderer->xdpy);
|
||||
|
||||
if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
|
||||
goto error;
|
||||
|
||||
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [22])
|
||||
m4_define([mutter_micro_version], [2])
|
||||
m4_define([mutter_micro_version], [4])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
|
||||
297
po/gd.po
297
po/gd.po
@@ -1,14 +1,14 @@
|
||||
# Scottish Gaelic translation for mutter.
|
||||
# Copyright (C) 2016 mutter's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the mutter package.
|
||||
# GunChleoc <fios@foramnagaidhlig.net>, 2016.
|
||||
# GunChleoc <fios@foramnagaidhlig.net>, 2016, 2017.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
|
||||
"&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-04-28 14:01+0000\n"
|
||||
"PO-Revision-Date: 2016-04-28 15:57+0100\n"
|
||||
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=mutte"
|
||||
"r&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2017-03-02 11:37+0000\n"
|
||||
"PO-Revision-Date: 2017-03-07 11:59+0100\n"
|
||||
"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n"
|
||||
"Language-Team: Fòram na Gàidhlig\n"
|
||||
"Language: gd\n"
|
||||
@@ -20,255 +20,255 @@ msgstr ""
|
||||
"X-Generator: Virtaal 0.7.1\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:1
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
msgstr "Seòladaireachd"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:2
|
||||
#: data/50-mutter-navigation.xml:9
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Gluais an uinneag gu rum-obrach 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:3
|
||||
#: data/50-mutter-navigation.xml:12
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Gluais an uinneag gu rum-obrach 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:4
|
||||
#: data/50-mutter-navigation.xml:15
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Gluais an uinneag gu rum-obrach 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:5
|
||||
#: data/50-mutter-navigation.xml:18
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Gluais an uinneag gu rum-obrach 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:6
|
||||
#: data/50-mutter-navigation.xml:21
|
||||
msgid "Move window to last workspace"
|
||||
msgstr "Gluais an uinneag gun rum-obrach mu dheireadh"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:7
|
||||
#: data/50-mutter-navigation.xml:24
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Gluais an uinneag gun rum-obrach ris an taobh chlì"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:8
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Gluais an uinneag gun rum-obrach ris an taobh deas"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:9
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Gluais an uinneag gun rum-obrach os a chionn"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:10
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Gluais an uinneag gun rum-obrach foidhe"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:11
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Gluais an uinneag gun sgrìn aig an taobh chlì"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:12
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Gluais an uinneag gun sgrìn aig an taobh deas"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:13
|
||||
#: data/50-mutter-navigation.xml:42
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Gluais an uinneag gun sgrìn os a chionn"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:14
|
||||
#: data/50-mutter-navigation.xml:45
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Gluais an uinneag gun sgrìn foidhe"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:15
|
||||
#: data/50-mutter-navigation.xml:49
|
||||
msgid "Switch applications"
|
||||
msgstr "Gearr leum gu aplacaid eile"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:16
|
||||
#: data/50-mutter-navigation.xml:54
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Gearr leum gun aplacaid roimhpe"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:17
|
||||
#: data/50-mutter-navigation.xml:58
|
||||
msgid "Switch windows"
|
||||
msgstr "Gearr leum gu uinneag eile"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:18
|
||||
#: data/50-mutter-navigation.xml:63
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Gearr leum gun uinneag roimhpe"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:19
|
||||
#: data/50-mutter-navigation.xml:67
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Gearr leum gu uinneag eile na h-aplacaid"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:20
|
||||
#: data/50-mutter-navigation.xml:72
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Gearr leum gu uinneag roimhpe na h-aplacaid"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:21
|
||||
#: data/50-mutter-navigation.xml:76
|
||||
msgid "Switch system controls"
|
||||
msgstr "Gearr leum gu inneal-smachd siostaim eile"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:22
|
||||
#: data/50-mutter-navigation.xml:81
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Gearr leum gun inneal-smachd siostaim roimhe"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:23
|
||||
#: data/50-mutter-navigation.xml:85
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Gearr leum gu uinneag eile sa bhad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:24
|
||||
#: data/50-mutter-navigation.xml:90
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Gearr leum gun uinneag roimhpe sa bhad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:25
|
||||
#: data/50-mutter-navigation.xml:94
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Gearr leum gu uinneag eile na h-aplacaid sa bhad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:26
|
||||
#: data/50-mutter-navigation.xml:99
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Gearr leum gu uinneag roimphe na h-aplacaid sa bhad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:27
|
||||
#: data/50-mutter-navigation.xml:103
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Gearr leum gu inneal-smachd siostaim eile sa bhad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:28
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Gearr leum gun inneal-smachd siostaim roimhe sa bhad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:29
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Cuir gach uinneag àbhaisteach am falach"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:30
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Gearr leum gu rum-obrach 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:31
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Gearr leum gu rum-obrach 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:32
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Gearr leum gu rum-obrach 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:33
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Gearr leum gu rum-obrach 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:34
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Gearr leum gun rum-obrach mu dheireadh"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:35
|
||||
#: data/50-mutter-navigation.xml:129
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Gluais dhan rum-obrach air an taobh chlì"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:36
|
||||
#: data/50-mutter-navigation.xml:132
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Gluais dhan rum-obrach air an taobh deas"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:37
|
||||
#: data/50-mutter-navigation.xml:135
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Gluais dhan rum-obrach aig a' bharr"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:38
|
||||
#: data/50-mutter-navigation.xml:138
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Gluais dhan rum-obrach aig a' bhonn"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:1
|
||||
#: data/50-mutter-system.xml:6
|
||||
msgid "System"
|
||||
msgstr "An siostam"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:2
|
||||
#: data/50-mutter-system.xml:8
|
||||
msgid "Show the run command prompt"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:3
|
||||
#: data/50-mutter-system.xml:10
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Foir-shealladh air na gnìomhachdan"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:1
|
||||
#: data/50-mutter-windows.xml:6
|
||||
msgid "Windows"
|
||||
msgstr "Uinneagan"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:2
|
||||
#: data/50-mutter-windows.xml:8
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Gnìomhaich clàr-taice na h-uinneige"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:3
|
||||
#: data/50-mutter-windows.xml:10
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Toglaich am modh làn-sgrìn"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:4
|
||||
#: data/50-mutter-windows.xml:12
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Toglaich staid an làn-mheudachaidh"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:5
|
||||
#: data/50-mutter-windows.xml:14
|
||||
msgid "Maximize window"
|
||||
msgstr "Làn-mheudaich an uinneag"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:6
|
||||
#: data/50-mutter-windows.xml:16
|
||||
msgid "Restore window"
|
||||
msgstr "Aisig an uinneag"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:7
|
||||
#: data/50-mutter-windows.xml:18
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Toglaich staid an sgàileachaidh"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:8
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Close window"
|
||||
msgstr "Dùin an uinneag"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:9
|
||||
#: data/50-mutter-windows.xml:22
|
||||
msgid "Hide window"
|
||||
msgstr "Cuir an uinneag am falach"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:10
|
||||
#: data/50-mutter-windows.xml:24
|
||||
msgid "Move window"
|
||||
msgstr "Gluais an uinneag"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:11
|
||||
#: data/50-mutter-windows.xml:26
|
||||
msgid "Resize window"
|
||||
msgstr "Atharraich meud na h-uinneige"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:12
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Toglaich an uinneag air a h-uile rum-obrach no aonan"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:13
|
||||
#: data/50-mutter-windows.xml:31
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Tog an uinneag nuair a thèid a còmhdachadh air neo ìslich i"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:14
|
||||
#: data/50-mutter-windows.xml:33
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Tog an uinneag os cionn càich"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:15
|
||||
#: data/50-mutter-windows.xml:35
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Ìslich an uinneag fo na h-uinneagan eile"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:16
|
||||
#: data/50-mutter-windows.xml:37
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Làn-mheudaich an uinneag gu h-ingearach"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:17
|
||||
#: data/50-mutter-windows.xml:39
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Làn-mheudaich an uinneag air a' chòmhnard"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:18
|
||||
#: data/50-mutter-windows.xml:43
|
||||
msgid "View split on left"
|
||||
msgstr ""
|
||||
msgstr "Sgoilt an t-sealladh air an taobh chì"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:19
|
||||
#: data/50-mutter-windows.xml:47
|
||||
msgid "View split on right"
|
||||
msgstr ""
|
||||
msgstr "Sgoilt an t-sealladh air an taobh deas"
|
||||
|
||||
#: ../data/mutter.desktop.in.h:1
|
||||
#: data/mutter.desktop.in:4
|
||||
msgid "Mutter"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.gschema.xml.in:7
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
|
||||
#: 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 "
|
||||
@@ -276,254 +276,266 @@ msgid ""
|
||||
"default or set to the empty string."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.gschema.xml.in:20
|
||||
msgid "Attach modal dialogs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.gschema.xml.in:21
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
"the parent window."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.gschema.xml.in:30
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.gschema.xml.in:31
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
"area. Dropping windows on the top screen edge maximizes them completely."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.gschema.xml.in:40
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: 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)."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.gschema.xml.in:50
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.gschema.xml.in:51
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.gschema.xml.in:59
|
||||
msgid "No tab popup"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.gschema.xml.in:60
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: data/org.gnome.mutter.gschema.xml.in:68
|
||||
msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: 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."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: data/org.gnome.mutter.gschema.xml.in:79
|
||||
msgid "Draggable border width"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: 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."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
|
||||
#: data/org.gnome.mutter.gschema.xml.in:89
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: data/org.gnome.mutter.gschema.xml.in:90
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
|
||||
#: data/org.gnome.mutter.gschema.xml.in:98
|
||||
msgid "Place new windows in the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
|
||||
#: data/org.gnome.mutter.gschema.xml.in:99
|
||||
msgid ""
|
||||
"When true, the new windows will always be put in the center of the active "
|
||||
"screen of the monitor."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
|
||||
#: data/org.gnome.mutter.gschema.xml.in:120
|
||||
msgid "Select window from tab popup"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
|
||||
#: data/org.gnome.mutter.gschema.xml.in:125
|
||||
msgid "Cancel tab popup"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
|
||||
msgid "Switch to VT 1"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:10
|
||||
msgid "Switch to VT 2"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:14
|
||||
msgid "Switch to VT 3"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:18
|
||||
msgid "Switch to VT 4"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:22
|
||||
msgid "Switch to VT 5"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:26
|
||||
msgid "Switch to VT 6"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:30
|
||||
msgid "Switch to VT 7"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:34
|
||||
msgid "Switch to VT 8"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:38
|
||||
msgid "Switch to VT 9"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:42
|
||||
msgid "Switch to VT 10"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:46
|
||||
msgid "Switch to VT 11"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:50
|
||||
msgid "Switch to VT 12"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:515
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:1913
|
||||
#| msgid "Switch system controls"
|
||||
msgid "Switch monitor"
|
||||
msgstr "Gearr leum gu monatair eile"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1915
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Seall a' chobhair air an sgrìn"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:515
|
||||
msgid "Built-in display"
|
||||
msgstr ""
|
||||
msgstr "Uidheam-taisbeanaidh 'na broinn"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:538
|
||||
#: src/backends/meta-monitor-manager.c:538
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
msgstr "Chan eil fhios"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:540
|
||||
#: src/backends/meta-monitor-manager.c:540
|
||||
msgid "Unknown Display"
|
||||
msgstr ""
|
||||
msgstr "Uidheam-taisbeanaidh nach aithne dhuinn"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: ../src/backends/meta-monitor-manager.c:548
|
||||
#: src/backends/meta-monitor-manager.c:548
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr ""
|
||||
msgstr "%s %s"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:456
|
||||
#: src/compositor/compositor.c:471
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/bell.c:194
|
||||
#: src/core/bell.c:194
|
||||
msgid "Bell event"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/delete.c:127
|
||||
#: src/core/delete.c:127
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/delete.c:129
|
||||
#: src/core/delete.c:129
|
||||
msgid "Application is not responding."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/delete.c:134
|
||||
#: 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
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Wait"
|
||||
msgstr ""
|
||||
msgstr "_Fuirich"
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Force Quit"
|
||||
msgstr ""
|
||||
msgstr "Sparr _fàgail air"
|
||||
|
||||
#: ../src/core/display.c:555
|
||||
#: src/core/display.c:590
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:181
|
||||
#: src/core/main.c:182
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:187
|
||||
#: src/core/main.c:188
|
||||
msgid "Replace the running window manager"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:193
|
||||
#: src/core/main.c:194
|
||||
msgid "Specify session management ID"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:198
|
||||
#: src/core/main.c:199
|
||||
msgid "X Display to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:204
|
||||
#: src/core/main.c:205
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:210
|
||||
#: src/core/main.c:211
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:217
|
||||
#: src/core/main.c:218
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:223
|
||||
#: src/core/main.c:224
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/main.c:231
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/mutter.c:39
|
||||
#: src/core/mutter.c:39
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
@@ -533,42 +545,47 @@ msgid ""
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/mutter.c:53
|
||||
#: src/core/mutter.c:53
|
||||
msgid "Print version"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/mutter.c:59
|
||||
#: src/core/mutter.c:59
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1997
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr ""
|
||||
msgstr "Rum-obrach %d"
|
||||
|
||||
#: ../src/core/screen.c:521
|
||||
#: src/core/screen.c:521
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
"to replace the current window manager."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/screen.c:603
|
||||
#: src/core/screen.c:606
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/core/util.c:121
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/x11/session.c:1815
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:595
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Suidse nam modh: Modh %d"
|
||||
|
||||
#: src/x11/session.c:1815
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/x11/window-props.c:549
|
||||
#: src/x11/window-props.c:548
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr ""
|
||||
msgstr "%s (air %s)"
|
||||
|
||||
269
po/id.po
269
po/id.po
@@ -5,23 +5,263 @@
|
||||
# Mohammad DAMT <mdamt@bisnisweb.com>, 2003-2005.
|
||||
# Ahmad Riza H Nst <rizahnst@eriagempita.co.id>, 2006.
|
||||
# Dirgita <dirgitadevina@yahoo.co.id>, 2011, 2012, 2014.
|
||||
# Andika Triwidada <andika@gmail.com>, 2011-2015.
|
||||
# Andika Triwidada <andika@gmail.com>, 2011-2015, 2017.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"Project-Id-Version: mutter gnome-3-22\n"
|
||||
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-08-19 21:04+0000\n"
|
||||
"PO-Revision-Date: 2016-08-22 17:38+0700\n"
|
||||
"POT-Creation-Date: 2017-05-31 23:18+0000\n"
|
||||
"PO-Revision-Date: 2017-08-12 20:34+0700\n"
|
||||
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
|
||||
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
|
||||
"Language: id\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.8\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
msgstr "Navigasi"
|
||||
|
||||
#: data/50-mutter-navigation.xml:9
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Pindahkan jendela ke ruang kerja 1"
|
||||
|
||||
#: data/50-mutter-navigation.xml:12
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Pindahkan jendela ke ruang kerja 2"
|
||||
|
||||
#: data/50-mutter-navigation.xml:15
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Pindahkan jendela ke ruang kerja 3"
|
||||
|
||||
#: data/50-mutter-navigation.xml:18
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Pindahkan jendela ke ruang kerja 4"
|
||||
|
||||
#: data/50-mutter-navigation.xml:21
|
||||
msgid "Move window to last workspace"
|
||||
msgstr "Pindahkan jendela ke ruang kerja terakhir"
|
||||
|
||||
#: data/50-mutter-navigation.xml:24
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Pindahkan jendela satu ruang kerja ke kiri"
|
||||
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Pindahkan jendela satu ruang kerja ke kanan"
|
||||
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Pindahkan jendela satu ruang kerja ke atas"
|
||||
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Pindahkan jendela satu ruang kerja ke bawah"
|
||||
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Pindahkan jendela satu monitor ke kiri"
|
||||
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Pindahkan jendela satu monitor ke kanan"
|
||||
|
||||
#: data/50-mutter-navigation.xml:42
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Pindahkan jendela satu monitor ke atas"
|
||||
|
||||
#: data/50-mutter-navigation.xml:45
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Pindahkan jendela satu monitor ke bawah"
|
||||
|
||||
#: data/50-mutter-navigation.xml:49
|
||||
msgid "Switch applications"
|
||||
msgstr "Bertukar aplikasi"
|
||||
|
||||
#: data/50-mutter-navigation.xml:54
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Bertukar ke aplikasi sebelumnya"
|
||||
|
||||
#: data/50-mutter-navigation.xml:58
|
||||
msgid "Switch windows"
|
||||
msgstr "Bertukar jendela"
|
||||
|
||||
#: data/50-mutter-navigation.xml:63
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Bertukar ke jendela sebelumnya"
|
||||
|
||||
#: data/50-mutter-navigation.xml:67
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Bertukar jendela dari suatu aplikasi"
|
||||
|
||||
#: data/50-mutter-navigation.xml:72
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Bertukar ke jendela aplikasi sebelumnya"
|
||||
|
||||
#: data/50-mutter-navigation.xml:76
|
||||
msgid "Switch system controls"
|
||||
msgstr "Bertukar kendali sistem"
|
||||
|
||||
#: data/50-mutter-navigation.xml:81
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Bertukar ke kendali sistem sebelumnya"
|
||||
|
||||
#: data/50-mutter-navigation.xml:85
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Bertukar jendela secara langsung"
|
||||
|
||||
#: data/50-mutter-navigation.xml:90
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Bertukar secara langsung ke jendela sebelumnya"
|
||||
|
||||
#: data/50-mutter-navigation.xml:94
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Bertukar jendela dari suatu app secara langsung"
|
||||
|
||||
#: data/50-mutter-navigation.xml:99
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Bertukar secara langsung ke jendela sebelumnya dari suatu app"
|
||||
|
||||
#: data/50-mutter-navigation.xml:103
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Bertukar kendali sistem secara langsung"
|
||||
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Bertukar secara langsung ke kendali sistem sebelumnya"
|
||||
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Sembunyikan semua jendela normal"
|
||||
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Bertukar ke ruang kerja 1"
|
||||
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Bertukar ke ruang kerja 2"
|
||||
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Bertukar ke ruang kerja 3"
|
||||
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Bertukar ke ruang kerja 4"
|
||||
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Bertukar ke ruang kerja terakhir"
|
||||
|
||||
#: data/50-mutter-navigation.xml:129
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Pindahkan ke ruang kerja kiri"
|
||||
|
||||
#: data/50-mutter-navigation.xml:132
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Pindahkan ke ruang kerja kanan"
|
||||
|
||||
#: data/50-mutter-navigation.xml:135
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Pindahkan ke ruang kerja di atas"
|
||||
|
||||
#: data/50-mutter-navigation.xml:138
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Pindahkan ke ruang kerja di bawah"
|
||||
|
||||
#: data/50-mutter-system.xml:6
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#: data/50-mutter-system.xml:8
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Tampilkan sapaan jalankan perintah"
|
||||
|
||||
#: data/50-mutter-system.xml:10
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Tampilkan ringkasan aktivitas"
|
||||
|
||||
#: data/50-mutter-windows.xml:6
|
||||
msgid "Windows"
|
||||
msgstr "Jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:8
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Mengaktifkan menu jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:10
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Jungkitkan mode layar penuh"
|
||||
|
||||
#: data/50-mutter-windows.xml:12
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Jungkitkan keadaan termaksimalkan"
|
||||
|
||||
#: data/50-mutter-windows.xml:14
|
||||
msgid "Maximize window"
|
||||
msgstr "Maksimalkan jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:16
|
||||
msgid "Restore window"
|
||||
msgstr "Pulihkan jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:18
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Jungkitkan keadaan berbayang"
|
||||
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Close window"
|
||||
msgstr "Tutup jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:22
|
||||
msgid "Hide window"
|
||||
msgstr "Sembunyikan jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:24
|
||||
msgid "Move window"
|
||||
msgstr "Pindahkan jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:26
|
||||
msgid "Resize window"
|
||||
msgstr "Ubah ukuran jendela"
|
||||
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Jungkitkan jendela pada semua atau satu area kerja"
|
||||
|
||||
#: data/50-mutter-windows.xml:31
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Naikkan jendela bila tertutup jendela lain, sebaliknya turunkan"
|
||||
|
||||
#: data/50-mutter-windows.xml:33
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Naikkan jendela di atas jendela-jendela lain"
|
||||
|
||||
#: data/50-mutter-windows.xml:35
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Turunkan jendela di bawah jendela-jendela lain"
|
||||
|
||||
#: data/50-mutter-windows.xml:37
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Maksimalkan ukuran jendela secara vertikal"
|
||||
|
||||
#: data/50-mutter-windows.xml:39
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Maksimalkan ukuran jendela secara horisontal"
|
||||
|
||||
#: data/50-mutter-windows.xml:43
|
||||
msgid "View split on left"
|
||||
msgstr "Tilik belah di kiri"
|
||||
|
||||
#: data/50-mutter-windows.xml:47
|
||||
msgid "View split on right"
|
||||
msgstr "Tilik belah di kanan"
|
||||
|
||||
#: data/mutter.desktop.in:4
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
@@ -214,37 +454,40 @@ msgstr "Pindah ke VT 11"
|
||||
msgid "Switch to VT 12"
|
||||
msgstr "Pindah ke VT 12"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1707
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:1913
|
||||
msgid "Switch monitor"
|
||||
msgstr "Berpindah monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1709
|
||||
#: src/backends/meta-input-settings.c:1915
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Tampilkan bantuan pada layar"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:514
|
||||
#: src/backends/meta-monitor-manager.c:515
|
||||
msgid "Built-in display"
|
||||
msgstr "Tampilan bawaan"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:537
|
||||
#: src/backends/meta-monitor-manager.c:538
|
||||
msgid "Unknown"
|
||||
msgstr "Tak Dikenal"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:539
|
||||
#: src/backends/meta-monitor-manager.c:540
|
||||
msgid "Unknown Display"
|
||||
msgstr "Tampilan Tak Dikenal"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:547
|
||||
#: src/backends/meta-monitor-manager.c:548
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: src/compositor/compositor.c:463
|
||||
#: src/compositor/compositor.c:471
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
|
||||
27
po/zh_CN.po
27
po/zh_CN.po
@@ -17,8 +17,8 @@ msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-10-27 15:28+0000\n"
|
||||
"PO-Revision-Date: 2016-10-30 02:33+0800\n"
|
||||
"POT-Creation-Date: 2017-02-03 10:06+0000\n"
|
||||
"PO-Revision-Date: 2017-01-04 21:52+0800\n"
|
||||
"Last-Translator: Mandy Wang <wangmychn@gmail.com>\n"
|
||||
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
||||
"Language: zh_CN\n"
|
||||
@@ -26,7 +26,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 1.8.11\n"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@@ -450,38 +450,37 @@ msgstr "切换到 VT 12"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:1847
|
||||
#: src/backends/meta-input-settings.c:1861
|
||||
msgid "Switch monitor"
|
||||
msgstr "切换显示器"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1849
|
||||
#, fuzzy
|
||||
#: src/backends/meta-input-settings.c:1863
|
||||
msgid "Show on-screen help"
|
||||
msgstr "显示在屏帮助"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:514
|
||||
#: src/backends/meta-monitor-manager.c:515
|
||||
msgid "Built-in display"
|
||||
msgstr "内置显示器"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:537
|
||||
#: src/backends/meta-monitor-manager.c:538
|
||||
msgid "Unknown"
|
||||
msgstr "未知"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:539
|
||||
#: src/backends/meta-monitor-manager.c:540
|
||||
msgid "Unknown Display"
|
||||
msgstr "未知的显示器"
|
||||
msgstr "未知的 Display"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:547
|
||||
#: src/backends/meta-monitor-manager.c:548
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: src/compositor/compositor.c:463
|
||||
#: src/compositor/compositor.c:471
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -534,7 +533,7 @@ msgstr "指定会话管理 ID"
|
||||
|
||||
#: src/core/main.c:199
|
||||
msgid "X Display to use"
|
||||
msgstr "要使用的 X 显示器"
|
||||
msgstr "要使用的 X Display"
|
||||
|
||||
#: src/core/main.c:205
|
||||
msgid "Initialize session from savefile"
|
||||
@@ -589,7 +588,7 @@ msgid ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
"to replace the current window manager."
|
||||
msgstr ""
|
||||
"显示器“%s”已经有一个窗口管理器;请尝试使用 --replace 选项替换当前的窗口管理"
|
||||
"Display“%s”已经有一个窗口管理器;请尝试使用 --replace 选项替换当前的窗口管理"
|
||||
"器。"
|
||||
|
||||
#: src/core/screen.c:606
|
||||
|
||||
@@ -107,6 +107,9 @@ struct _MetaInputSettingsClass
|
||||
void (* set_trackball_accel_profile) (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device,
|
||||
GDesktopPointerAccelProfile profile);
|
||||
|
||||
gboolean (* has_two_finger_scroll) (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device);
|
||||
};
|
||||
|
||||
GType meta_input_settings_get_type (void) G_GNUC_CONST;
|
||||
|
||||
@@ -83,6 +83,8 @@ struct _MetaInputSettingsPrivate
|
||||
#ifdef HAVE_LIBWACOM
|
||||
WacomDeviceDatabase *wacom_db;
|
||||
#endif
|
||||
|
||||
GHashTable *two_finger_devices;
|
||||
};
|
||||
|
||||
typedef void (*ConfigBoolFunc) (MetaInputSettings *input_settings,
|
||||
@@ -148,6 +150,8 @@ meta_input_settings_dispose (GObject *object)
|
||||
libwacom_database_destroy (priv->wacom_db);
|
||||
#endif
|
||||
|
||||
g_clear_pointer (&priv->two_finger_devices, g_hash_table_destroy);
|
||||
|
||||
G_OBJECT_CLASS (meta_input_settings_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
@@ -484,6 +488,7 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
|
||||
MetaInputSettingsClass *input_settings_class;
|
||||
gboolean edge_scroll_enabled;
|
||||
gboolean two_finger_scroll_enabled;
|
||||
gboolean two_finger_scroll_available;
|
||||
MetaInputSettingsPrivate *priv;
|
||||
|
||||
if (device &&
|
||||
@@ -494,9 +499,10 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
|
||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||
edge_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "edge-scrolling-enabled");
|
||||
two_finger_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "two-finger-scrolling-enabled");
|
||||
two_finger_scroll_available = g_hash_table_size (priv->two_finger_devices) > 0;
|
||||
|
||||
/* If both are enabled we prefer two finger. */
|
||||
if (edge_scroll_enabled && two_finger_scroll_enabled)
|
||||
if (edge_scroll_enabled && two_finger_scroll_enabled && two_finger_scroll_available)
|
||||
edge_scroll_enabled = FALSE;
|
||||
|
||||
if (device)
|
||||
@@ -679,6 +685,9 @@ update_keyboard_repeat (MetaInputSettings *input_settings)
|
||||
delay = g_settings_get_uint (priv->keyboard_settings, "delay");
|
||||
interval = g_settings_get_uint (priv->keyboard_settings, "repeat-interval");
|
||||
|
||||
delay = MAX (1, delay);
|
||||
interval = MAX (1, interval);
|
||||
|
||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||
input_settings_class->set_keyboard_repeat (input_settings,
|
||||
repeat, delay, interval);
|
||||
@@ -744,7 +753,9 @@ update_tablet_keep_aspect (MetaInputSettings *input_settings,
|
||||
MetaOutput *output = NULL;
|
||||
gboolean keep_aspect;
|
||||
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE)
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_LIBWACOM
|
||||
@@ -792,6 +803,8 @@ update_device_display (MetaInputSettings *input_settings,
|
||||
MetaOutput *output;
|
||||
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHSCREEN_DEVICE)
|
||||
return;
|
||||
|
||||
@@ -825,7 +838,9 @@ update_tablet_mapping (MetaInputSettings *input_settings,
|
||||
GDesktopTabletMapping mapping;
|
||||
DeviceMappingInfo *info;
|
||||
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE)
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_LIBWACOM
|
||||
@@ -866,7 +881,9 @@ update_tablet_area (MetaInputSettings *input_settings,
|
||||
const guint32 *area;
|
||||
gsize n_elems;
|
||||
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE)
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_LIBWACOM
|
||||
@@ -905,7 +922,10 @@ update_tablet_left_handed (MetaInputSettings *input_settings,
|
||||
MetaInputSettingsClass *input_settings_class;
|
||||
gboolean enabled;
|
||||
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE)
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE &&
|
||||
clutter_input_device_get_device_type (device) != CLUTTER_PAD_DEVICE)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_LIBWACOM
|
||||
@@ -1398,6 +1418,23 @@ apply_device_settings (MetaInputSettings *input_settings,
|
||||
device);
|
||||
}
|
||||
|
||||
static void
|
||||
evaluate_two_finger_scrolling (MetaInputSettings *input_settings,
|
||||
ClutterInputDevice *device)
|
||||
{
|
||||
MetaInputSettingsClass *klass;
|
||||
MetaInputSettingsPrivate *priv;
|
||||
|
||||
if (clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||
return;
|
||||
|
||||
klass = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||
priv = meta_input_settings_get_instance_private (input_settings);
|
||||
|
||||
if (klass->has_two_finger_scroll (input_settings, device))
|
||||
g_hash_table_add (priv->two_finger_devices, device);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_input_settings_device_added (ClutterDeviceManager *device_manager,
|
||||
ClutterInputDevice *device,
|
||||
@@ -1406,6 +1443,8 @@ meta_input_settings_device_added (ClutterDeviceManager *device_manager,
|
||||
if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER)
|
||||
return;
|
||||
|
||||
evaluate_two_finger_scrolling (input_settings, device);
|
||||
|
||||
apply_device_settings (input_settings, device);
|
||||
check_add_mappable_device (input_settings, device);
|
||||
}
|
||||
@@ -1419,6 +1458,10 @@ meta_input_settings_device_removed (ClutterDeviceManager *device_manager,
|
||||
|
||||
priv = meta_input_settings_get_instance_private (input_settings);
|
||||
g_hash_table_remove (priv->mappable_devices, device);
|
||||
|
||||
if (g_hash_table_remove (priv->two_finger_devices, device) &&
|
||||
g_hash_table_size (priv->two_finger_devices) == 0)
|
||||
apply_device_settings (input_settings, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1445,6 +1488,13 @@ static void
|
||||
meta_input_settings_constructed (GObject *object)
|
||||
{
|
||||
MetaInputSettings *input_settings = META_INPUT_SETTINGS (object);
|
||||
GSList *devices, *d;
|
||||
|
||||
devices = meta_input_settings_get_devices (input_settings, CLUTTER_TOUCHPAD_DEVICE);
|
||||
for (d = devices; d; d = d->next)
|
||||
evaluate_two_finger_scrolling (input_settings, d->data);
|
||||
|
||||
g_slist_free (devices);
|
||||
|
||||
apply_device_settings (input_settings, NULL);
|
||||
update_keyboard_repeat (input_settings);
|
||||
@@ -1506,6 +1556,8 @@ meta_input_settings_init (MetaInputSettings *settings)
|
||||
"expect tablets to misbehave");
|
||||
}
|
||||
#endif
|
||||
|
||||
priv->two_finger_devices = g_hash_table_new (NULL, NULL);
|
||||
}
|
||||
|
||||
MetaInputSettings *
|
||||
|
||||
@@ -454,7 +454,7 @@ handle_end_element (GMarkupParseContext *context,
|
||||
{
|
||||
if (strcmp (element_name, "configuration") == 0 && parser->unknown_count == 0)
|
||||
{
|
||||
MetaConfiguration *config = g_slice_new (MetaConfiguration);
|
||||
MetaConfiguration *config = config_new ();
|
||||
|
||||
g_assert (parser->key_array->len == parser->output_array->len);
|
||||
|
||||
|
||||
@@ -135,6 +135,7 @@ construct_tile_monitor (MetaMonitorManager *manager,
|
||||
info.width_mm = output->width_mm;
|
||||
info.height_mm = output->height_mm;
|
||||
info.winsys_id = output->winsys_id;
|
||||
info.scale = output->scale;
|
||||
}
|
||||
|
||||
/* hack */
|
||||
|
||||
@@ -63,6 +63,7 @@ static GQuark quark_cursor_sprite = 0;
|
||||
|
||||
struct _MetaCursorRendererNativePrivate
|
||||
{
|
||||
gboolean hw_state_invalidated;
|
||||
gboolean has_hw_cursor;
|
||||
|
||||
MetaCursorSprite *last_cursor;
|
||||
@@ -159,8 +160,7 @@ set_pending_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite,
|
||||
static void
|
||||
set_crtc_cursor (MetaCursorRendererNative *native,
|
||||
MetaCRTC *crtc,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
gboolean force)
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
|
||||
@@ -177,7 +177,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
|
||||
else
|
||||
bo = get_active_cursor_sprite_gbm_bo (cursor_sprite);
|
||||
|
||||
if (!force && bo == crtc->cursor_renderer_private)
|
||||
if (!priv->hw_state_invalidated && bo == crtc->cursor_renderer_private)
|
||||
return;
|
||||
|
||||
crtc->cursor_renderer_private = bo;
|
||||
@@ -197,7 +197,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
|
||||
}
|
||||
else
|
||||
{
|
||||
if (force || crtc->cursor_renderer_private != NULL)
|
||||
if (priv->hw_state_invalidated || crtc->cursor_renderer_private != NULL)
|
||||
{
|
||||
drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0);
|
||||
crtc->cursor_renderer_private = NULL;
|
||||
@@ -207,8 +207,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
|
||||
|
||||
static void
|
||||
update_hw_cursor (MetaCursorRendererNative *native,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
gboolean force)
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
|
||||
@@ -241,7 +240,7 @@ update_hw_cursor (MetaCursorRendererNative *native,
|
||||
else
|
||||
crtc_cursor = NULL;
|
||||
|
||||
set_crtc_cursor (native, &crtcs[i], crtc_cursor, force);
|
||||
set_crtc_cursor (native, &crtcs[i], crtc_cursor);
|
||||
|
||||
if (crtc_cursor)
|
||||
{
|
||||
@@ -252,6 +251,8 @@ update_hw_cursor (MetaCursorRendererNative *native,
|
||||
}
|
||||
}
|
||||
|
||||
priv->hw_state_invalidated = FALSE;
|
||||
|
||||
if (painted)
|
||||
meta_cursor_renderer_emit_painted (renderer, cursor_sprite);
|
||||
}
|
||||
@@ -394,7 +395,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *renderer,
|
||||
meta_cursor_renderer_native_trigger_frame (native, cursor_sprite);
|
||||
|
||||
priv->has_hw_cursor = should_have_hw_cursor (renderer, cursor_sprite);
|
||||
update_hw_cursor (native, cursor_sprite, FALSE);
|
||||
update_hw_cursor (native, cursor_sprite);
|
||||
return priv->has_hw_cursor;
|
||||
}
|
||||
|
||||
@@ -648,8 +649,11 @@ static void
|
||||
force_update_hw_cursor (MetaCursorRendererNative *native)
|
||||
{
|
||||
MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
|
||||
update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer), TRUE);
|
||||
priv->hw_state_invalidated = TRUE;
|
||||
update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -670,6 +674,8 @@ meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
|
||||
g_signal_connect_object (monitors, "monitors-changed",
|
||||
G_CALLBACK (on_monitors_changed), native, 0);
|
||||
|
||||
priv->hw_state_invalidated = TRUE;
|
||||
|
||||
#if defined(CLUTTER_WINDOWING_EGL)
|
||||
if (clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL))
|
||||
{
|
||||
|
||||
@@ -189,6 +189,19 @@ meta_input_settings_native_set_two_finger_scroll (MetaInputSettings *
|
||||
device_set_scroll_method (libinput_device, current | method);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_input_settings_native_has_two_finger_scroll (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device)
|
||||
{
|
||||
struct libinput_device *libinput_device;
|
||||
|
||||
libinput_device = clutter_evdev_input_device_get_libinput_device (device);
|
||||
if (!libinput_device)
|
||||
return FALSE;
|
||||
|
||||
return libinput_device_config_scroll_get_methods (libinput_device) & LIBINPUT_CONFIG_SCROLL_2FG;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_input_settings_native_set_scroll_button (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device,
|
||||
@@ -418,6 +431,8 @@ meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
|
||||
|
||||
input_settings_class->set_mouse_accel_profile = meta_input_settings_native_set_mouse_accel_profile;
|
||||
input_settings_class->set_trackball_accel_profile = meta_input_settings_native_set_trackball_accel_profile;
|
||||
|
||||
input_settings_class->has_two_finger_scroll = meta_input_settings_native_has_two_finger_scroll;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -475,18 +475,31 @@ find_output_by_id (MetaOutput *outputs,
|
||||
static int
|
||||
compute_scale (MetaOutput *output)
|
||||
{
|
||||
int scale = 1;
|
||||
int scale = 1, width, height;
|
||||
|
||||
if (!output->crtc)
|
||||
goto out;
|
||||
|
||||
width = output->crtc->rect.width;
|
||||
height = output->crtc->rect.height;
|
||||
|
||||
/* Swap values on rotated transforms, so pixel and mm sizes
|
||||
* from the same axes is compared.
|
||||
*/
|
||||
if (meta_monitor_transform_is_rotated (output->crtc->transform))
|
||||
{
|
||||
int tmp = width;
|
||||
width = height;
|
||||
height = tmp;
|
||||
}
|
||||
|
||||
/* Scaling makes no sense */
|
||||
if (output->crtc->rect.width < HIDPI_MIN_HEIGHT)
|
||||
if (height < HIDPI_MIN_HEIGHT)
|
||||
goto out;
|
||||
|
||||
/* 4K TV */
|
||||
if (output->name != NULL && strstr(output->name, "HDMI") != NULL &&
|
||||
output->crtc->rect.width >= SMALLEST_4K_WIDTH)
|
||||
width >= SMALLEST_4K_WIDTH)
|
||||
goto out;
|
||||
|
||||
/* Somebody encoded the aspect ratio (16/9 or 16/10)
|
||||
@@ -500,8 +513,9 @@ compute_scale (MetaOutput *output)
|
||||
if (output->width_mm > 0 && output->height_mm > 0)
|
||||
{
|
||||
double dpi_x, dpi_y;
|
||||
dpi_x = (double)output->crtc->rect.width / (output->width_mm / 25.4);
|
||||
dpi_y = (double)output->crtc->rect.height / (output->height_mm / 25.4);
|
||||
|
||||
dpi_x = (double)width / (output->width_mm / 25.4);
|
||||
dpi_y = (double)height / (output->height_mm / 25.4);
|
||||
/* We don't completely trust these values so both
|
||||
must be high, and never pick higher ratio than
|
||||
2 automatically */
|
||||
|
||||
@@ -73,6 +73,9 @@ typedef struct _MetaOnscreenNative
|
||||
|
||||
gboolean pending_set_crtc;
|
||||
|
||||
int64_t pending_queue_swap_notify_frame_count;
|
||||
int64_t pending_swap_notify_frame_count;
|
||||
|
||||
MetaRendererView *view;
|
||||
int pending_flips;
|
||||
} MetaOnscreenNative;
|
||||
@@ -124,16 +127,19 @@ flush_pending_swap_notify (CoglFramebuffer *framebuffer)
|
||||
|
||||
if (onscreen_native->pending_swap_notify)
|
||||
{
|
||||
CoglFrameInfo *info =
|
||||
g_queue_pop_head (&onscreen->pending_frame_infos);
|
||||
CoglFrameInfo *info;
|
||||
|
||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
||||
_cogl_onscreen_notify_complete (onscreen, info);
|
||||
while ((info = g_queue_peek_head (&onscreen->pending_frame_infos)) &&
|
||||
info->global_frame_counter <= onscreen_native->pending_swap_notify_frame_count)
|
||||
{
|
||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
||||
_cogl_onscreen_notify_complete (onscreen, info);
|
||||
cogl_object_unref (info);
|
||||
g_queue_pop_head (&onscreen->pending_frame_infos);
|
||||
}
|
||||
|
||||
onscreen_native->pending_swap_notify = FALSE;
|
||||
cogl_object_unref (onscreen);
|
||||
|
||||
cogl_object_unref (info);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -200,6 +206,9 @@ meta_onscreen_native_queue_swap_notify (CoglOnscreen *onscreen)
|
||||
CoglRendererEGL *egl_renderer = cogl_renderer->winsys;
|
||||
MetaRendererNative *renderer_native = egl_renderer->platform;
|
||||
|
||||
onscreen_native->pending_swap_notify_frame_count =
|
||||
onscreen_native->pending_queue_swap_notify_frame_count;
|
||||
|
||||
/* We only want to notify that the swap is complete when the
|
||||
* application calls cogl_context_dispatch so instead of
|
||||
* immediately notifying we queue an idle callback */
|
||||
@@ -222,6 +231,39 @@ meta_onscreen_native_queue_swap_notify (CoglOnscreen *onscreen)
|
||||
onscreen_native->pending_swap_notify = TRUE;
|
||||
}
|
||||
|
||||
static EGLDisplay
|
||||
meta_egl_get_display (void *native)
|
||||
{
|
||||
EGLDisplay dpy = NULL;
|
||||
const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS);
|
||||
|
||||
if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base"))
|
||||
{
|
||||
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
|
||||
(void *) eglGetProcAddress ("eglGetPlatformDisplay");
|
||||
|
||||
if (get_platform_display)
|
||||
dpy = get_platform_display (EGL_PLATFORM_GBM_MESA, native, NULL);
|
||||
|
||||
if (dpy)
|
||||
return dpy;
|
||||
}
|
||||
|
||||
if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base"))
|
||||
{
|
||||
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display =
|
||||
(void *) eglGetProcAddress ("eglGetPlatformDisplayEXT");
|
||||
|
||||
if (get_platform_display)
|
||||
dpy = get_platform_display (EGL_PLATFORM_GBM_MESA, native, NULL);
|
||||
|
||||
if (dpy)
|
||||
return dpy;
|
||||
}
|
||||
|
||||
return eglGetDisplay ((EGLNativeDisplayType) native);
|
||||
}
|
||||
|
||||
static CoglBool
|
||||
meta_renderer_native_connect (CoglRenderer *cogl_renderer,
|
||||
CoglError **error)
|
||||
@@ -246,8 +288,7 @@ meta_renderer_native_connect (CoglRenderer *cogl_renderer,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
egl_renderer->edpy =
|
||||
eglGetDisplay ((EGLNativeDisplayType) renderer_native->gbm);
|
||||
egl_renderer->edpy = meta_egl_get_display (renderer_native->gbm);
|
||||
if (egl_renderer->edpy == EGL_NO_DISPLAY)
|
||||
{
|
||||
_cogl_set_error (error, COGL_WINSYS_ERROR,
|
||||
@@ -640,6 +681,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
||||
onscreen_native->pending_set_crtc = FALSE;
|
||||
}
|
||||
|
||||
onscreen_native->pending_queue_swap_notify_frame_count = renderer_native->frame_counter;
|
||||
meta_onscreen_native_flip_crtcs (onscreen);
|
||||
}
|
||||
|
||||
|
||||
@@ -222,19 +222,27 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
|
||||
gboolean edge_scroll_enabled)
|
||||
{
|
||||
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
|
||||
guchar *current;
|
||||
guchar *current = NULL;
|
||||
guchar *available = NULL;
|
||||
|
||||
available = get_property (device, "libinput Scroll Methods Available",
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!available || !available[SCROLL_METHOD_FIELD_EDGE])
|
||||
goto out;
|
||||
|
||||
current = get_property (device, "libinput Scroll Method Enabled",
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!current)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
|
||||
|
||||
values[SCROLL_METHOD_FIELD_EDGE] = !!edge_scroll_enabled;
|
||||
change_property (device, "libinput Scroll Method Enabled",
|
||||
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
|
||||
out:
|
||||
meta_XFree (current);
|
||||
meta_XFree (available);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -243,19 +251,43 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings *set
|
||||
gboolean two_finger_scroll_enabled)
|
||||
{
|
||||
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
|
||||
guchar *current;
|
||||
guchar *current = NULL;
|
||||
guchar *available = NULL;
|
||||
|
||||
available = get_property (device, "libinput Scroll Methods Available",
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!available || !available[SCROLL_METHOD_FIELD_2FG])
|
||||
goto out;
|
||||
|
||||
current = get_property (device, "libinput Scroll Method Enabled",
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!current)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
|
||||
|
||||
values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled;
|
||||
change_property (device, "libinput Scroll Method Enabled",
|
||||
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
|
||||
out:
|
||||
meta_XFree (current);
|
||||
meta_XFree (available);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_input_settings_x11_has_two_finger_scroll (MetaInputSettings *settings,
|
||||
ClutterInputDevice *device)
|
||||
{
|
||||
guchar *available = NULL;
|
||||
gboolean has_two_finger = TRUE;
|
||||
|
||||
available = get_property (device, "libinput Scroll Methods Available",
|
||||
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
|
||||
if (!available || !available[SCROLL_METHOD_FIELD_2FG])
|
||||
has_two_finger = FALSE;
|
||||
|
||||
meta_XFree (available);
|
||||
return has_two_finger;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -527,6 +559,8 @@ meta_input_settings_x11_class_init (MetaInputSettingsX11Class *klass)
|
||||
|
||||
input_settings_class->set_mouse_accel_profile = meta_input_settings_x11_set_mouse_accel_profile;
|
||||
input_settings_class->set_trackball_accel_profile = meta_input_settings_x11_set_trackball_accel_profile;
|
||||
|
||||
input_settings_class->has_two_finger_scroll = meta_input_settings_x11_has_two_finger_scroll;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -333,7 +333,7 @@ output_get_backlight_limits_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
|
||||
{
|
||||
Atom atom;
|
||||
xcb_connection_t *xcb_conn;
|
||||
g_autofree xcb_randr_query_output_property_reply_t *reply;
|
||||
g_autofree xcb_randr_query_output_property_reply_t *reply = NULL;
|
||||
|
||||
atom = XInternAtom (manager_xrandr->xdisplay, "Backlight", False);
|
||||
|
||||
|
||||
@@ -1129,6 +1129,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
MetaPluginEffect event)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
gboolean inconsistent = FALSE;
|
||||
|
||||
/* NB: Keep in mind that when effects get completed it possible
|
||||
* that the corresponding MetaWindow may have be been destroyed.
|
||||
@@ -1145,6 +1146,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
{
|
||||
g_warning ("Error in minimize accounting.");
|
||||
priv->minimize_in_progress = 0;
|
||||
inconsistent = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1155,6 +1157,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
{
|
||||
g_warning ("Error in unminimize accounting.");
|
||||
priv->unminimize_in_progress = 0;
|
||||
inconsistent = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1169,6 +1172,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
{
|
||||
g_warning ("Error in map accounting.");
|
||||
priv->map_in_progress = 0;
|
||||
inconsistent = TRUE;
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_DESTROY:
|
||||
@@ -1178,6 +1182,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
{
|
||||
g_warning ("Error in destroy accounting.");
|
||||
priv->destroy_in_progress = 0;
|
||||
inconsistent = TRUE;
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_SIZE_CHANGE:
|
||||
@@ -1186,6 +1191,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
{
|
||||
g_warning ("Error in size change accounting.");
|
||||
priv->size_change_in_progress = 0;
|
||||
inconsistent = TRUE;
|
||||
}
|
||||
break;
|
||||
case META_PLUGIN_SWITCH_WORKSPACE:
|
||||
@@ -1193,7 +1199,7 @@ meta_window_actor_effect_completed (MetaWindowActor *self,
|
||||
break;
|
||||
}
|
||||
|
||||
if (is_freeze_thaw_effect (event))
|
||||
if (is_freeze_thaw_effect (event) && !inconsistent)
|
||||
meta_window_actor_thaw (self);
|
||||
|
||||
if (!meta_window_actor_effect_in_progress (self))
|
||||
|
||||
@@ -784,10 +784,6 @@ constrain_custom_rule (MetaWindow *window,
|
||||
if (!placement_rule)
|
||||
return TRUE;
|
||||
|
||||
if (!meta_rectangle_could_fit_rect (&info->work_area_monitor,
|
||||
&info->current))
|
||||
return TRUE;
|
||||
|
||||
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
|
||||
&intersection);
|
||||
|
||||
|
||||
@@ -3205,7 +3205,7 @@ handle_raise_or_lower (MetaDisplay *display,
|
||||
{
|
||||
MetaRectangle tmp, win_rect, above_rect;
|
||||
|
||||
if (above->mapped)
|
||||
if (above->mapped && meta_window_should_be_showing (above))
|
||||
{
|
||||
meta_window_get_frame_rect (window, &win_rect);
|
||||
meta_window_get_frame_rect (above, &above_rect);
|
||||
|
||||
@@ -181,7 +181,7 @@ update_style_contexts (MetaFrames *frames)
|
||||
frames->normal_style = meta_theme_create_style_info (screen, NULL);
|
||||
|
||||
variants = g_hash_table_get_keys (frames->style_variants);
|
||||
for (variant = variants; variant; variant = variants->next)
|
||||
for (variant = variants; variant; variant = variant->next)
|
||||
{
|
||||
style_info = meta_theme_create_style_info (screen, (char *)variant->data);
|
||||
g_hash_table_insert (frames->style_variants,
|
||||
|
||||
@@ -514,7 +514,11 @@ notify_key_repeat_for_resource (MetaWaylandKeyboard *keyboard,
|
||||
interval = g_settings_get_uint (keyboard->settings, "repeat-interval");
|
||||
/* Our setting is in the milliseconds between keys. "rate" is the number
|
||||
* of keys per second. */
|
||||
rate = (1000 / interval);
|
||||
if (interval > 0)
|
||||
rate = (1000 / interval);
|
||||
else
|
||||
rate = 0;
|
||||
|
||||
delay = g_settings_get_uint (keyboard->settings, "delay");
|
||||
}
|
||||
else
|
||||
|
||||
@@ -605,7 +605,7 @@ subsurface_role_get_toplevel (MetaWaylandSurfaceRole *surface_role)
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandSurface *parent = surface->sub.parent;
|
||||
|
||||
if (parent->role)
|
||||
if (parent && parent->role)
|
||||
return meta_wayland_surface_role_get_toplevel (parent->role);
|
||||
else
|
||||
return NULL;
|
||||
|
||||
@@ -62,7 +62,6 @@ meta_wayland_tablet_pad_ring_free (MetaWaylandTabletPadRing *ring)
|
||||
|
||||
wl_resource_for_each_safe (resource, next, &ring->resource_list)
|
||||
{
|
||||
zwp_tablet_tool_v2_send_removed (resource);
|
||||
wl_list_remove (wl_resource_get_link (resource));
|
||||
wl_list_init (wl_resource_get_link (resource));
|
||||
}
|
||||
|
||||
@@ -62,7 +62,6 @@ meta_wayland_tablet_pad_strip_free (MetaWaylandTabletPadStrip *strip)
|
||||
|
||||
wl_resource_for_each_safe (resource, next, &strip->resource_list)
|
||||
{
|
||||
zwp_tablet_tool_v2_send_removed (resource);
|
||||
wl_list_remove (wl_resource_get_link (resource));
|
||||
wl_list_init (wl_resource_get_link (resource));
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ meta_wayland_tablet_tool_update_cursor_surface (MetaWaylandTabletTool *tool)
|
||||
cursor = NULL;
|
||||
}
|
||||
else if (tool->current_tablet)
|
||||
cursor = meta_cursor_sprite_from_theme (META_CURSOR_CROSSHAIR);
|
||||
cursor = tool->default_sprite;
|
||||
else
|
||||
cursor = NULL;
|
||||
|
||||
@@ -380,6 +380,22 @@ tablet_tool_handle_cursor_surface_destroy (struct wl_listener *listener,
|
||||
meta_wayland_tablet_tool_set_cursor_surface (tool, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
tool_cursor_prepare_at (MetaCursorSprite *cursor_sprite,
|
||||
int x,
|
||||
int y,
|
||||
MetaWaylandTabletTool *tool)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
const MetaMonitorInfo *monitor;
|
||||
|
||||
monitor = meta_screen_get_monitor_for_point (display->screen, x, y);
|
||||
|
||||
/* Reload the cursor texture if the scale has changed. */
|
||||
if (monitor)
|
||||
meta_cursor_sprite_set_theme_scale (cursor_sprite, monitor->scale);
|
||||
}
|
||||
|
||||
MetaWaylandTabletTool *
|
||||
meta_wayland_tablet_tool_new (MetaWaylandTabletSeat *seat,
|
||||
ClutterInputDevice *device,
|
||||
@@ -397,6 +413,11 @@ meta_wayland_tablet_tool_new (MetaWaylandTabletSeat *seat,
|
||||
tool->focus_surface_destroy_listener.notify = tablet_tool_handle_focus_surface_destroy;
|
||||
tool->cursor_surface_destroy_listener.notify = tablet_tool_handle_cursor_surface_destroy;
|
||||
|
||||
tool->default_sprite = meta_cursor_sprite_from_theme (META_CURSOR_CROSSHAIR);
|
||||
tool->prepare_at_signal_id =
|
||||
g_signal_connect (tool->default_sprite, "prepare-at",
|
||||
G_CALLBACK (tool_cursor_prepare_at), tool);
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
@@ -416,6 +437,9 @@ meta_wayland_tablet_tool_free (MetaWaylandTabletTool *tool)
|
||||
wl_list_init (wl_resource_get_link (resource));
|
||||
}
|
||||
|
||||
g_signal_handler_disconnect (tool->default_sprite, tool->prepare_at_signal_id);
|
||||
g_object_unref (tool->default_sprite);
|
||||
|
||||
g_slice_free (MetaWaylandTabletTool, tool);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ struct _MetaWaylandTabletTool
|
||||
MetaWaylandSurface *cursor_surface;
|
||||
struct wl_listener cursor_surface_destroy_listener;
|
||||
MetaCursorRenderer *cursor_renderer;
|
||||
MetaCursorSprite *default_sprite;
|
||||
guint prepare_at_signal_id;
|
||||
|
||||
MetaWaylandSurface *current;
|
||||
guint32 pressed_buttons;
|
||||
|
||||
@@ -227,13 +227,15 @@ xdg_toplevel_show_window_menu (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
int monitor_scale;
|
||||
|
||||
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, FALSE, NULL, NULL))
|
||||
return;
|
||||
|
||||
monitor_scale = surface->window->monitor->scale;
|
||||
meta_window_show_menu (surface->window, META_WINDOW_MENU_WM,
|
||||
surface->window->buffer_rect.x + x,
|
||||
surface->window->buffer_rect.y + y);
|
||||
surface->window->buffer_rect.x + (x * monitor_scale),
|
||||
surface->window->buffer_rect.y + (y * monitor_scale));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -613,20 +615,18 @@ xdg_toplevel_role_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!pending->has_new_geometry)
|
||||
if (pending->has_new_geometry)
|
||||
{
|
||||
if (pending->dx != 0 || pending->dx != 0)
|
||||
{
|
||||
g_warning ("XXX: Attach-initiated move without a new geometry. This is unimplemented right now.");
|
||||
}
|
||||
return;
|
||||
window_geometry = meta_wayland_xdg_surface_get_window_geometry (xdg_surface);
|
||||
meta_window_wayland_move_resize (window,
|
||||
&xdg_surface_priv->acked_configure_serial,
|
||||
window_geometry,
|
||||
pending->dx, pending->dy);
|
||||
}
|
||||
else if (pending->dx != 0 || pending->dx != 0)
|
||||
{
|
||||
g_warning ("XXX: Attach-initiated move without a new geometry. This is unimplemented right now.");
|
||||
}
|
||||
|
||||
window_geometry = meta_wayland_xdg_surface_get_window_geometry (xdg_surface);
|
||||
meta_window_wayland_move_resize (window,
|
||||
&xdg_surface_priv->acked_configure_serial,
|
||||
window_geometry,
|
||||
pending->dx, pending->dy);
|
||||
|
||||
/* When we get to this point, we ought to have valid size hints */
|
||||
if (pending->has_new_min_size || pending->has_new_max_size)
|
||||
@@ -839,6 +839,17 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
|
||||
|
||||
xdg_popup->popup = popup;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups
|
||||
* is pretty undefined. Same applies for subsurfaces, but in practice,
|
||||
* subsurfaces never receive keyboard focus, so it makes sense to
|
||||
* do the same for non-grabbing popups.
|
||||
*
|
||||
* See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24
|
||||
*/
|
||||
window->input = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1250,11 +1261,19 @@ xdg_surface_role_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
}
|
||||
else if (!priv->has_set_geometry)
|
||||
{
|
||||
MetaRectangle new_geometry = { 0 };
|
||||
|
||||
/* If the surface has never set any geometry, calculate
|
||||
* a default one unioning the surface and all subsurfaces together. */
|
||||
|
||||
meta_wayland_surface_calculate_window_geometry (surface,
|
||||
&priv->geometry,
|
||||
&new_geometry,
|
||||
0, 0);
|
||||
if (!meta_rectangle_equal (&new_geometry, &priv->geometry))
|
||||
{
|
||||
pending->has_new_geometry = TRUE;
|
||||
priv->geometry = new_geometry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,24 +117,11 @@ static void
|
||||
meta_window_wayland_focus (MetaWindow *window,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWaylandSurface *surface = window->surface;
|
||||
MetaWaylandSurfaceRoleShellSurface *shell_surface_role =
|
||||
META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE (surface->role);
|
||||
|
||||
/* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups
|
||||
* is pretty undefined. Same applies for subsurfaces, but in practice,
|
||||
* subsurfaces never receive keyboard focus, so it makes sense to
|
||||
* do the same for non-grabbing popups.
|
||||
*
|
||||
* See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24
|
||||
*/
|
||||
if (META_IS_WAYLAND_XDG_POPUP (shell_surface_role))
|
||||
return;
|
||||
|
||||
meta_display_set_input_focus_window (window->display,
|
||||
window,
|
||||
FALSE,
|
||||
timestamp);
|
||||
if (window->input)
|
||||
meta_display_set_input_focus_window (window->display,
|
||||
window,
|
||||
FALSE,
|
||||
timestamp);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -67,6 +67,7 @@ typedef struct {
|
||||
Window window;
|
||||
Window owner;
|
||||
Time timestamp;
|
||||
Time client_message_timestamp;
|
||||
MetaWaylandDataSource *source; /* owned by MetaWaylandDataDevice */
|
||||
WaylandSelectionData *wayland_selection;
|
||||
X11SelectionData *x11_selection;
|
||||
@@ -388,6 +389,20 @@ meta_xwayland_shutdown_dnd (MetaXWaylandManager *manager)
|
||||
dnd->dnd_window = None;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_xwayland_end_dnd_grab (MetaWaylandDataDevice *data_device)
|
||||
{
|
||||
Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
|
||||
MetaXWaylandManager *manager = &compositor->xwayland_manager;
|
||||
MetaDndBridge *dnd = &manager->selection_data->dnd;
|
||||
|
||||
meta_wayland_data_device_end_drag (data_device);
|
||||
|
||||
XMoveResizeWindow (xdisplay, dnd->dnd_window, -1, -1, 1, 1);
|
||||
XUnmapWindow (xdisplay, dnd->dnd_window);
|
||||
}
|
||||
|
||||
/* X11/Wayland data bridges */
|
||||
|
||||
static MetaSelectionBridge *
|
||||
@@ -546,6 +561,8 @@ static WaylandSelectionData *
|
||||
wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
||||
MetaWaylandCompositor *compositor)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaScreen *screen = display->screen;
|
||||
MetaWaylandDataDevice *data_device;
|
||||
MetaWaylandDataSource *wayland_source;
|
||||
MetaSelectionBridge *selection;
|
||||
@@ -595,7 +612,8 @@ wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
||||
data->window = meta_display_lookup_x_window (meta_get_display (),
|
||||
data->request_event.requestor);
|
||||
|
||||
if (!data->window)
|
||||
/* Do *not* change the event mask on the root window, bugger! */
|
||||
if (!data->window && data->request_event.requestor != screen->xroot)
|
||||
{
|
||||
/* Not a managed window, set the PropertyChangeMask
|
||||
* for INCR deletion notifications.
|
||||
@@ -629,10 +647,12 @@ reply_selection_request (XSelectionRequestEvent *request_event,
|
||||
static void
|
||||
wayland_selection_data_free (WaylandSelectionData *data)
|
||||
{
|
||||
if (!data->window)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaScreen *screen = display->screen;
|
||||
|
||||
/* Do *not* change the event mask on the root window, bugger! */
|
||||
if (!data->window && data->request_event.requestor != screen->xroot)
|
||||
{
|
||||
meta_error_trap_push (display);
|
||||
XSelectInput (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
data->request_event.requestor, NoEventMask);
|
||||
@@ -809,13 +829,13 @@ meta_x11_source_send (MetaWaylandDataSource *source,
|
||||
/* Takes ownership of fd */
|
||||
selection->x11_selection =
|
||||
x11_selection_data_new (compositor->xwayland_manager.selection_data,
|
||||
fd, mime_type);
|
||||
fd, gdk_x11_get_xatom_name (type_atom));
|
||||
|
||||
XConvertSelection (xdisplay,
|
||||
selection->selection_atom, type_atom,
|
||||
gdk_x11_get_xatom_by_name ("_META_SELECTION"),
|
||||
selection->window,
|
||||
CurrentTime);
|
||||
selection->client_message_timestamp);
|
||||
XFlush (xdisplay);
|
||||
}
|
||||
|
||||
@@ -1340,15 +1360,15 @@ repick_drop_surface (MetaWaylandCompositor *compositor,
|
||||
MetaWaylandSurface *focus = NULL;
|
||||
|
||||
focus = pick_drop_surface (compositor, event);
|
||||
dnd->focus_surface = focus;
|
||||
|
||||
if (meta_wayland_drag_grab_get_focus (drag_grab) == focus)
|
||||
if (dnd->focus_surface == focus)
|
||||
return;
|
||||
|
||||
dnd->focus_surface = focus;
|
||||
|
||||
if (focus &&
|
||||
focus->window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
|
||||
{
|
||||
XMapWindow (xdisplay, dnd->dnd_window);
|
||||
XMapRaised (xdisplay, dnd->dnd_window);
|
||||
XMoveResizeWindow (xdisplay, dnd->dnd_window,
|
||||
focus->window->rect.x,
|
||||
focus->window->rect.y,
|
||||
@@ -1395,8 +1415,16 @@ drag_xgrab_button (MetaWaylandPointerGrab *grab,
|
||||
{
|
||||
MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
|
||||
MetaWaylandSeat *seat = compositor->seat;
|
||||
MetaWaylandDataSource *data_source;
|
||||
|
||||
meta_wayland_pointer_send_button (seat->pointer, event);
|
||||
data_source = compositor->seat->data_device.dnd_data_source;
|
||||
|
||||
if (seat->pointer->button_count == 0 &&
|
||||
(!meta_wayland_drag_grab_get_focus ((MetaWaylandDragGrab *) grab) ||
|
||||
meta_wayland_data_source_get_current_action (data_source) ==
|
||||
WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE))
|
||||
meta_xwayland_end_dnd_grab (&seat->data_device);
|
||||
}
|
||||
|
||||
static const MetaWaylandPointerGrabInterface drag_xgrab_interface = {
|
||||
@@ -1506,6 +1534,8 @@ meta_xwayland_selection_handle_client_message (MetaWaylandCompositor *compositor
|
||||
ClutterPoint pos;
|
||||
uint32_t action = 0;
|
||||
|
||||
dnd->selection.client_message_timestamp = event->data.l[3];
|
||||
|
||||
motion = clutter_event_new (CLUTTER_MOTION);
|
||||
clutter_input_device_get_coords (seat->pointer->device, NULL, &pos);
|
||||
clutter_event_set_coords (motion, pos.x, pos.y);
|
||||
@@ -1531,7 +1561,9 @@ meta_xwayland_selection_handle_client_message (MetaWaylandCompositor *compositor
|
||||
}
|
||||
else if (event->message_type == xdnd_atoms[ATOM_DND_DROP])
|
||||
{
|
||||
dnd->selection.client_message_timestamp = event->data.l[2];
|
||||
meta_wayland_surface_drag_dest_drop (drag_focus);
|
||||
meta_xwayland_end_dnd_grab (&seat->data_device);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1591,7 +1623,6 @@ meta_xwayland_selection_handle_xfixes_selection_notify (MetaWaylandCompositor *c
|
||||
else if (selection->selection_atom == xdnd_atoms[ATOM_DND_SELECTION])
|
||||
{
|
||||
MetaWaylandDataDevice *data_device = &compositor->seat->data_device;
|
||||
MetaXWaylandSelection *selection_data = compositor->xwayland_manager.selection_data;
|
||||
MetaWaylandSurface *focus;
|
||||
|
||||
selection->owner = event->owner;
|
||||
@@ -1600,6 +1631,7 @@ meta_xwayland_selection_handle_xfixes_selection_notify (MetaWaylandCompositor *c
|
||||
if (event->owner != None && event->owner != selection->window &&
|
||||
focus && meta_xwayland_is_xwayland_surface (focus))
|
||||
{
|
||||
selection->client_message_timestamp = CurrentTime;
|
||||
selection->source = meta_wayland_data_source_xwayland_new (selection);
|
||||
meta_wayland_data_device_set_dnd_source (&compositor->seat->data_device,
|
||||
selection->source);
|
||||
@@ -1612,8 +1644,7 @@ meta_xwayland_selection_handle_xfixes_selection_notify (MetaWaylandCompositor *c
|
||||
}
|
||||
else if (event->owner == None)
|
||||
{
|
||||
meta_wayland_data_device_end_drag (data_device);
|
||||
XUnmapWindow (xdisplay, selection_data->dnd.dnd_window);
|
||||
meta_xwayland_end_dnd_grab (data_device);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -224,6 +224,7 @@ try_display (int display,
|
||||
close (fd);
|
||||
fd = -1;
|
||||
|
||||
pid[10] = '\0';
|
||||
other = strtol (pid, &end, 0);
|
||||
if (end != pid + 10)
|
||||
{
|
||||
@@ -277,7 +278,7 @@ create_lock_file (int display, int *display_out)
|
||||
char *filename;
|
||||
int fd;
|
||||
|
||||
char pid[11];
|
||||
char pid[12];
|
||||
int size;
|
||||
int number_of_tries = 0;
|
||||
|
||||
@@ -293,8 +294,10 @@ create_lock_file (int display, int *display_out)
|
||||
}
|
||||
|
||||
/* Subtle detail: we use the pid of the wayland compositor, not the xserver
|
||||
* in the lock file. */
|
||||
size = snprintf (pid, 11, "%10d\n", getpid ());
|
||||
* in the lock file. Another subtlety: snprintf returns the number of bytes
|
||||
* it _would've_ written without either the NUL or the size clamping, hence
|
||||
* the disparity in size. */
|
||||
size = snprintf (pid, 12, "%10d\n", getpid ());
|
||||
if (size != 11 || write (fd, pid, 11) != 11)
|
||||
{
|
||||
unlink (filename);
|
||||
|
||||
Reference in New Issue
Block a user