Merge ~3v1n0/ubuntu/+source/mutter:ubuntu/master into ~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master

Proposed by Marco Trevisan (Treviño)
Status: Merged
Merged at revision: e1a4496c528d27a83abb54973e4035f7b69252d6
Proposed branch: ~3v1n0/ubuntu/+source/mutter:ubuntu/master
Merge into: ~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master
Diff against target: 6306 lines (+1538/-1078)
77 files modified
clutter/clutter/clutter-actor.c (+1/-1)
clutter/clutter/clutter-device-manager-private.h (+0/-4)
clutter/clutter/clutter-input-device.c (+0/-12)
clutter/clutter/clutter-input-device.h (+0/-4)
clutter/clutter/evdev/clutter-input-device-evdev.c (+8/-24)
clutter/clutter/meson.build (+5/-4)
clutter/clutter/x11/clutter-input-device-xi2.c (+0/-51)
clutter/meson.build (+2/-1)
cogl/cogl-gles2/meson.build (+2/-2)
cogl/cogl-pango/meson.build (+2/-2)
cogl/cogl-path/meson.build (+2/-1)
cogl/cogl/cogl-texture-2d-sliced.h (+3/-3)
cogl/cogl/cogl-texture-2d.h (+9/-3)
cogl/cogl/cogl-texture-driver.h (+0/-9)
cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c (+0/-14)
cogl/cogl/driver/gl/gles/cogl-driver-gles.c (+7/-1)
cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c (+0/-10)
cogl/cogl/meson.build (+6/-5)
cogl/meson.build (+2/-1)
debian/changelog (+40/-0)
debian/control (+3/-1)
debian/control.in (+3/-1)
debian/libmutter-4-0.symbols (+1/-2)
debian/patches/meson-add-back-default_driver-option.patch (+3/-3)
debian/patches/series (+0/-12)
debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch (+74/-77)
debian/rules (+1/-1)
dev/null (+0/-29)
meson.build (+1/-1)
po/ar.po (+538/-279)
po/es.po (+18/-18)
po/hr.po (+48/-41)
src/backends/meta-backend-private.h (+4/-0)
src/backends/meta-backend.c (+19/-1)
src/backends/meta-input-mapper.c (+46/-1)
src/backends/meta-input-settings.c (+3/-1)
src/backends/meta-monitor-config-manager.c (+4/-4)
src/backends/meta-monitor-manager-dummy.c (+5/-5)
src/backends/meta-monitor-manager-private.h (+7/-2)
src/backends/meta-monitor-manager.c (+51/-12)
src/backends/meta-monitor.c (+33/-35)
src/backends/meta-monitor.h (+26/-26)
src/backends/meta-stage-private.h (+2/-1)
src/backends/meta-stage.c (+23/-4)
src/backends/native/meta-crtc-kms.c (+0/-89)
src/backends/native/meta-crtc-kms.h (+0/-3)
src/backends/native/meta-gpu-kms.c (+3/-6)
src/backends/native/meta-monitor-manager-kms.c (+21/-5)
src/backends/native/meta-output-kms.c (+59/-3)
src/backends/native/meta-renderer-native.c (+145/-49)
src/backends/x11/meta-gpu-xrandr.c (+0/-32)
src/backends/x11/meta-monitor-manager-xrandr.c (+50/-5)
src/compositor/meta-background.c (+1/-1)
src/compositor/meta-shadow-factory.c (+1/-1)
src/core/bell.c (+3/-79)
src/core/bell.h (+0/-11)
src/core/boxes-private.h (+1/-1)
src/core/boxes.c (+2/-2)
src/core/constraints.c (+103/-27)
src/core/frame.c (+0/-6)
src/core/frame.h (+0/-1)
src/core/keybindings.c (+1/-2)
src/core/meta-launch-context.c (+2/-2)
src/core/prefs.c (+1/-1)
src/core/startup-notification.c (+1/-0)
src/core/window-private.h (+10/-1)
src/core/window.c (+32/-0)
src/meson.build (+2/-1)
src/meta/common.h (+3/-5)
src/meta/meson.build (+1/-1)
src/tests/meta-monitor-manager-test.c (+5/-5)
src/tests/unit-tests.c (+8/-8)
src/ui/theme.c (+0/-2)
src/wayland/meta-wayland-buffer.c (+8/-8)
src/wayland/meta-wayland-legacy-xdg-shell.c (+1/-1)
src/wayland/meta-wayland-text-input.c (+54/-6)
src/wayland/meta-wayland-xdg-shell.c (+18/-5)
Reviewer Review Type Date Requested Status
Daniel van Vugt (community) Needs Fixing
Ubuntu Desktop Pending
Review via email: mp+365833@code.launchpad.net

Description of the change

To post a comment you must log in.
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Looks like what I was expecting...

review: Approve
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Listing things that this release does not change and calling them "changes" is a bit confusing. Maybe don't list such things...

+mutter (3.32.0+git20190410-1ubuntu1) disco; urgency=medium
+
+ * Merge with debian git snapshot (LP: #1820542), remaining changes:
+ + debian/control:
+ - Update VCS flags to point to launchpad
+ - Update maintainer to ubuntu
+ + debian/gbp.conf: update branch to point to ubuntu/master
+ + debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch:
+ - X11: Add support for fractional scaling using Randr

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
2index fd38338..803f76a 100644
3--- a/clutter/clutter/clutter-actor.c
4+++ b/clutter/clutter/clutter-actor.c
5@@ -4007,12 +4007,12 @@ clutter_actor_paint (ClutterActor *self)
6 pick_mode == CLUTTER_PICK_NONE))
7 _clutter_actor_draw_paint_volume (self);
8
9-done:
10 /* If we make it here then the actor has run through a complete
11 paint run including all the effects so it's no longer dirty */
12 if (pick_mode == CLUTTER_PICK_NONE)
13 priv->is_dirty = FALSE;
14
15+done:
16 if (clip_set)
17 {
18 CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
19diff --git a/clutter/clutter/clutter-device-manager-private.h b/clutter/clutter/clutter-device-manager-private.h
20index 60cb99d..2364fd2 100644
21--- a/clutter/clutter/clutter-device-manager-private.h
22+++ b/clutter/clutter/clutter-device-manager-private.h
23@@ -167,10 +167,6 @@ struct _ClutterInputDeviceClass
24 gboolean (* is_grouped) (ClutterInputDevice *device,
25 ClutterInputDevice *other_device);
26
27- gboolean (* get_physical_size) (ClutterInputDevice *device,
28- gdouble *width,
29- gdouble *height);
30-
31 /* Keyboard accessbility */
32 void (* process_kbd_a11y_event) (ClutterEvent *event,
33 ClutterInputDevice *device,
34diff --git a/clutter/clutter/clutter-input-device.c b/clutter/clutter/clutter-input-device.c
35index 5de169c..0697e3a 100644
36--- a/clutter/clutter/clutter-input-device.c
37+++ b/clutter/clutter/clutter-input-device.c
38@@ -2284,15 +2284,3 @@ clutter_input_device_is_grouped (ClutterInputDevice *device,
39
40 return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->is_grouped (device, other_device);
41 }
42-
43-gboolean
44-clutter_input_device_get_physical_size (ClutterInputDevice *device,
45- gdouble *width,
46- gdouble *height)
47-{
48- g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), FALSE);
49-
50- return CLUTTER_INPUT_DEVICE_GET_CLASS (device)->get_physical_size (device,
51- width,
52- height);
53-}
54diff --git a/clutter/clutter/clutter-input-device.h b/clutter/clutter/clutter-input-device.h
55index 8dd2a54..c121fe1 100644
56--- a/clutter/clutter/clutter-input-device.h
57+++ b/clutter/clutter/clutter-input-device.h
58@@ -171,10 +171,6 @@ void clutter_input_device_set_mapping_mode (ClutterInputDev
59 CLUTTER_EXPORT
60 gboolean clutter_input_device_is_grouped (ClutterInputDevice *device,
61 ClutterInputDevice *other_device);
62-CLUTTER_EXPORT
63-gboolean clutter_input_device_get_physical_size (ClutterInputDevice *device,
64- gdouble *width,
65- gdouble *height);
66
67 G_END_DECLS
68
69diff --git a/clutter/clutter/evdev/clutter-input-device-evdev.c b/clutter/clutter/evdev/clutter-input-device-evdev.c
70index 8caf095..b52689e 100644
71--- a/clutter/clutter/evdev/clutter-input-device-evdev.c
72+++ b/clutter/clutter/evdev/clutter-input-device-evdev.c
73@@ -676,7 +676,7 @@ stop_toggle_slowkeys (ClutterInputDeviceEvdev *device)
74 }
75
76 static void
77-handle_togglekeys_press (ClutterEvent *event,
78+handle_enablekeys_press (ClutterEvent *event,
79 ClutterInputDeviceEvdev *device)
80 {
81 if (event->key.keyval == XKB_KEY_Shift_L || event->key.keyval == XKB_KEY_Shift_R)
82@@ -698,7 +698,7 @@ handle_togglekeys_press (ClutterEvent *event,
83 }
84
85 static void
86-handle_togglekeys_release (ClutterEvent *event,
87+handle_enablekeys_release (ClutterEvent *event,
88 ClutterInputDeviceEvdev *device)
89 {
90 if (event->key.keyval == XKB_KEY_Shift_L || event->key.keyval == XKB_KEY_Shift_R)
91@@ -1132,9 +1132,14 @@ clutter_input_device_evdev_process_kbd_a11y_event (ClutterEvent *e
92 if (event->key.flags & CLUTTER_EVENT_FLAG_INPUT_METHOD)
93 goto emit_event;
94
95- if (!device_evdev->a11y_flags & CLUTTER_A11Y_KEYBOARD_ENABLED)
96+ if (!(device_evdev->a11y_flags & CLUTTER_A11Y_KEYBOARD_ENABLED))
97 goto emit_event;
98
99+ if (event->type == CLUTTER_KEY_PRESS)
100+ handle_enablekeys_press (event, device_evdev);
101+ else
102+ handle_enablekeys_release (event, device_evdev);
103+
104 if (device_evdev->a11y_flags & CLUTTER_A11Y_MOUSE_KEYS_ENABLED)
105 {
106 if (event->type == CLUTTER_KEY_PRESS &&
107@@ -1145,14 +1150,6 @@ clutter_input_device_evdev_process_kbd_a11y_event (ClutterEvent *e
108 return; /* swallow event */
109 }
110
111- if (device_evdev->a11y_flags & CLUTTER_A11Y_TOGGLE_KEYS_ENABLED)
112- {
113- if (event->type == CLUTTER_KEY_PRESS)
114- handle_togglekeys_press (event, device_evdev);
115- else
116- handle_togglekeys_release (event, device_evdev);
117- }
118-
119 if ((device_evdev->a11y_flags & CLUTTER_A11Y_BOUNCE_KEYS_ENABLED) &&
120 (get_debounce_delay (device) != 0))
121 {
122@@ -1266,18 +1263,6 @@ clutter_input_device_evdev_release_touch_state (ClutterInputDeviceEvdev *device,
123 GINT_TO_POINTER (touch_state->device_slot));
124 }
125
126-static gboolean
127-clutter_input_device_evdev_get_physical_size (ClutterInputDevice *device,
128- gdouble *width,
129- gdouble *height)
130-{
131- struct libinput_device *libinput_device;
132-
133- libinput_device = clutter_evdev_input_device_get_libinput_device (device);
134-
135- return libinput_device_get_size (libinput_device, width, height) == 0;
136-}
137-
138 static void
139 clutter_input_device_evdev_class_init (ClutterInputDeviceEvdevClass *klass)
140 {
141@@ -1293,7 +1278,6 @@ clutter_input_device_evdev_class_init (ClutterInputDeviceEvdevClass *klass)
142 klass->get_group_n_modes = clutter_input_device_evdev_get_group_n_modes;
143 klass->is_grouped = clutter_input_device_evdev_is_grouped;
144 klass->process_kbd_a11y_event = clutter_input_device_evdev_process_kbd_a11y_event;
145- klass->get_physical_size = clutter_input_device_evdev_get_physical_size;
146
147 obj_props[PROP_DEVICE_MATRIX] =
148 g_param_spec_boxed ("device-matrix",
149diff --git a/clutter/clutter/meson.build b/clutter/clutter/meson.build
150index 879ea16..671d790 100644
151--- a/clutter/clutter/meson.build
152+++ b/clutter/clutter/meson.build
153@@ -1,3 +1,4 @@
154+clutter_clutter_includesubdir = join_paths(clutter_includesubdir, 'clutter')
155 clutter_clutter_includedir = join_paths(clutter_includedir, 'clutter')
156
157 clutter_headers = [
158@@ -577,16 +578,16 @@ if have_introspection
159 endif
160
161 install_headers(clutter_headers,
162- subdir: clutter_clutter_includedir)
163+ subdir: clutter_clutter_includesubdir)
164
165 install_headers(cally_headers,
166- subdir: join_paths(clutter_includedir, 'cally'))
167+ subdir: join_paths(clutter_includesubdir, 'cally'))
168
169 install_headers(clutter_deprecated_headers,
170- subdir: join_paths(clutter_clutter_includedir, 'deprecated'))
171+ subdir: join_paths(clutter_clutter_includesubdir, 'deprecated'))
172
173 install_headers(clutter_x11_headers,
174- subdir: join_paths(clutter_clutter_includedir, 'x11'))
175+ subdir: join_paths(clutter_clutter_includesubdir, 'x11'))
176
177 pkg.generate(libmutter_clutter,
178 name: 'Mutters Clutter',
179diff --git a/clutter/clutter/x11/clutter-input-device-xi2.c b/clutter/clutter/x11/clutter-input-device-xi2.c
180index 92d3637..1254aca 100644
181--- a/clutter/clutter/x11/clutter-input-device-xi2.c
182+++ b/clutter/clutter/x11/clutter-input-device-xi2.c
183@@ -180,56 +180,6 @@ clutter_input_device_xi2_is_mode_switch_button (ClutterInputDevice *device,
184 return button_group == (int) group;
185 }
186
187-static gboolean
188-clutter_input_device_xi2_get_physical_size (ClutterInputDevice *device,
189- gdouble *width,
190- gdouble *height)
191-{
192- Display *xdisplay;
193- XIDeviceInfo *dev_info;
194- gdouble w = 0, h = 0;
195- int i, n_info, device_id;
196-
197- xdisplay = clutter_x11_get_default_display ();
198- device_id = clutter_input_device_get_device_id (device);
199-
200- clutter_x11_trap_x_errors ();
201- dev_info = XIQueryDevice (xdisplay, device_id, &n_info);
202- if (clutter_x11_untrap_x_errors ())
203- return FALSE;
204-
205- if (!dev_info)
206- return FALSE;
207-
208- for (i = 0; i < dev_info->num_classes; i++)
209- {
210- XIValuatorClassInfo *valuator;
211- gdouble *value;
212-
213- if (dev_info->classes[i]->type != XIValuatorClass)
214- continue;
215-
216- valuator = (XIValuatorClassInfo *) dev_info->classes[i];
217-
218- if (valuator->label == XInternAtom (xdisplay, "Abs X", True) ||
219- valuator->label == XInternAtom (xdisplay, "Abs MT Position X", True))
220- value = &w;
221- else if (valuator->label == XInternAtom (xdisplay, "Abs Y", True) ||
222- valuator->label == XInternAtom (xdisplay, "Abs MT Position Y", True))
223- value = &h;
224- else
225- continue;
226-
227- *value = (valuator->max - valuator->min) * 1000 / valuator->resolution;
228- }
229-
230- XIFreeDeviceInfo (dev_info);
231- *width = w;
232- *height = h;
233-
234- return (w > 0 && h > 0);
235-}
236-
237 static void
238 clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass)
239 {
240@@ -243,7 +193,6 @@ clutter_input_device_xi2_class_init (ClutterInputDeviceXI2Class *klass)
241 device_class->is_grouped = clutter_input_device_xi2_is_grouped;
242 device_class->get_group_n_modes = clutter_input_device_xi2_get_group_n_modes;
243 device_class->is_mode_switch_button = clutter_input_device_xi2_is_mode_switch_button;
244- device_class->get_physical_size = clutter_input_device_xi2_get_physical_size;
245 }
246
247 static void
248diff --git a/clutter/meson.build b/clutter/meson.build
249index 053cfa7..1397be1 100644
250--- a/clutter/meson.build
251+++ b/clutter/meson.build
252@@ -1,4 +1,5 @@
253-clutter_includedir = join_paths(pkgincludedir, 'clutter')
254+clutter_includesubdir = join_paths(pkgname, 'clutter')
255+clutter_includedir = join_paths(includedir, clutter_includesubdir)
256 clutter_srcdir = join_paths(top_srcdir, 'clutter')
257 clutter_builddir = join_paths(builddir, 'clutter')
258
259diff --git a/cogl/cogl-gles2/meson.build b/cogl/cogl-gles2/meson.build
260index d446ca4..fbe3eb1 100644
261--- a/cogl/cogl-gles2/meson.build
262+++ b/cogl/cogl-gles2/meson.build
263@@ -27,9 +27,9 @@ libmutter_cogl_gles2 = shared_library('mutter-cogl-gles2-' + libmutter_api_versi
264 install: true,
265 )
266
267-cogl_gles2_includedir = join_paths(cogl_includedir, 'cogl-gles2/GLES2')
268+cogl_gles2_includesubdir = join_paths(cogl_includesubdir, 'cogl-gles2/GLES2')
269 install_headers(cogl_gles2_public_headers,
270- subdir: cogl_gles2_includedir)
271+ subdir: cogl_gles2_includesubdir)
272
273 pkg.generate(libmutter_cogl_gles2,
274 name: 'CoglGles2',
275diff --git a/cogl/cogl-pango/meson.build b/cogl/cogl-pango/meson.build
276index fb4d261..787ec01 100644
277--- a/cogl/cogl-pango/meson.build
278+++ b/cogl/cogl-pango/meson.build
279@@ -70,8 +70,8 @@ if have_introspection
280 )
281 endif
282
283-cogl_pango_includedir = join_paths(cogl_includedir, 'cogl-pango')
284-install_headers(cogl_pango_public_headers, subdir: cogl_pango_includedir)
285+cogl_pango_includesubdir = join_paths(cogl_includesubdir, 'cogl-pango')
286+install_headers(cogl_pango_public_headers, subdir: cogl_pango_includesubdir)
287
288 pkg.generate(libmutter_cogl_pango,
289 name: 'CoglPango',
290diff --git a/cogl/cogl-path/meson.build b/cogl/cogl-path/meson.build
291index 6faba67..e086a62 100644
292--- a/cogl/cogl-path/meson.build
293+++ b/cogl/cogl-path/meson.build
294@@ -1,3 +1,4 @@
295+cogl_path_includesubdir = join_paths(cogl_includesubdir, 'cogl-path')
296 cogl_path_includedir = join_paths(cogl_includedir, 'cogl-path')
297
298 cogl_path_public_headers = [
299@@ -76,7 +77,7 @@ libmutter_cogl_path_dep = declare_dependency(
300 )
301
302 install_headers(cogl_path_public_headers,
303- subdir: cogl_path_includedir)
304+ subdir: cogl_path_includesubdir)
305
306 pkg.generate(libmutter_cogl_path,
307 name: 'CoglPath',
308diff --git a/cogl/cogl/cogl-texture-2d-sliced.h b/cogl/cogl/cogl-texture-2d-sliced.h
309index 8d43fc5..12ce710 100644
310--- a/cogl/cogl/cogl-texture-2d-sliced.h
311+++ b/cogl/cogl/cogl-texture-2d-sliced.h
312@@ -78,7 +78,7 @@ typedef struct _CoglTexture2DSliced CoglTexture2DSliced;
313 GType cogl_texture_2d_sliced_get_gtype (void);
314
315 /**
316- * cogl_texture_2d_sliced_new_with_size:
317+ * cogl_texture_2d_sliced_new_with_size: (skip)
318 * @ctx: A #CoglContext
319 * @width: The virtual width of your sliced texture.
320 * @height: The virtual height of your sliced texture.
321@@ -125,7 +125,7 @@ cogl_texture_2d_sliced_new_with_size (CoglContext *ctx,
322 int max_waste);
323
324 /**
325- * cogl_texture_2d_sliced_new_from_file:
326+ * cogl_texture_2d_sliced_new_from_file: (skip)
327 * @ctx: A #CoglContext
328 * @filename: the file to load
329 * @max_waste: The threshold of how wide a strip of wasted texels
330@@ -173,7 +173,7 @@ cogl_texture_2d_sliced_new_from_file (CoglContext *ctx,
331 CoglError **error);
332
333 /**
334- * cogl_texture_2d_sliced_new_from_data:
335+ * cogl_texture_2d_sliced_new_from_data: (skip)
336 * @ctx: A #CoglContext
337 * @width: width of texture in pixels
338 * @height: height of texture in pixels
339diff --git a/cogl/cogl/cogl-texture-2d.h b/cogl/cogl/cogl-texture-2d.h
340index 85cadba..29b8b2d 100644
341--- a/cogl/cogl/cogl-texture-2d.h
342+++ b/cogl/cogl/cogl-texture-2d.h
343@@ -86,7 +86,7 @@ gboolean
344 cogl_is_texture_2d (void *object);
345
346 /**
347- * cogl_texture_2d_new_with_size:
348+ * cogl_texture_2d_new_with_size: (skip)
349 * @ctx: A #CoglContext
350 * @width: Width of the texture to allocate
351 * @height: Height of the texture to allocate
352@@ -120,7 +120,7 @@ cogl_texture_2d_new_with_size (CoglContext *ctx,
353 int height);
354
355 /**
356- * cogl_texture_2d_new_from_file:
357+ * cogl_texture_2d_new_from_file: (skip)
358 * @ctx: A #CoglContext
359 * @filename: the file to load
360 * @error: A #CoglError to catch exceptional errors or %NULL
361@@ -154,7 +154,7 @@ cogl_texture_2d_new_from_file (CoglContext *ctx,
362 CoglError **error);
363
364 /**
365- * cogl_texture_2d_new_from_data:
366+ * cogl_texture_2d_new_from_data: (skip)
367 * @ctx: A #CoglContext
368 * @width: width of texture in pixels
369 * @height: height of texture in pixels
370@@ -231,6 +231,9 @@ cogl_texture_2d_new_from_data (CoglContext *ctx,
371 CoglTexture2D *
372 cogl_texture_2d_new_from_bitmap (CoglBitmap *bitmap);
373
374+/**
375+ * cogl_egl_texture_2d_new_from_image: (skip)
376+ */
377 #if defined (COGL_HAS_EGL_SUPPORT) && defined (EGL_KHR_image_base)
378 /* NB: The reason we require the width, height and format to be passed
379 * even though they may seem redundant is because GLES 1/2 don't
380@@ -247,6 +250,9 @@ typedef gboolean (*CoglTexture2DEGLImageExternalAlloc) (CoglTexture2D *tex_2d,
381 gpointer user_data,
382 GError **error);
383
384+/**
385+ * cogl_texture_2d_new_from_egl_image_external: (skip)
386+ */
387 CoglTexture2D *
388 cogl_texture_2d_new_from_egl_image_external (CoglContext *ctx,
389 int width,
390diff --git a/cogl/cogl/cogl-texture-driver.h b/cogl/cogl/cogl-texture-driver.h
391index f77c548..a6e7d4f 100644
392--- a/cogl/cogl/cogl-texture-driver.h
393+++ b/cogl/cogl/cogl-texture-driver.h
394@@ -172,15 +172,6 @@ struct _CoglTextureDriver
395 int depth);
396
397 /*
398- * This driver abstraction is needed because GLES doesn't support setting
399- * a texture border color.
400- */
401- void
402- (* try_setting_gl_border_color) (CoglContext *ctx,
403- GLuint gl_target,
404- const GLfloat *transparent_color);
405-
406- /*
407 * It may depend on the driver as to what texture targets may be used when
408 * creating a foreign texture. E.g. OpenGL supports ARB_texture_rectangle
409 * but GLES doesn't
410diff --git a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
411index fbb55de..35b87f7 100644
412--- a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
413+++ b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
414@@ -485,19 +485,6 @@ _cogl_texture_driver_size_supported (CoglContext *ctx,
415 return new_width != 0;
416 }
417
418-static void
419-_cogl_texture_driver_try_setting_gl_border_color
420- (CoglContext *ctx,
421- GLuint gl_target,
422- const GLfloat *transparent_color)
423-{
424- /* Use a transparent border color so that we can leave the
425- color buffer alone when using texture co-ordinates
426- outside of the texture */
427- GE( ctx, glTexParameterfv (gl_target, GL_TEXTURE_BORDER_COLOR,
428- transparent_color) );
429-}
430-
431 static gboolean
432 _cogl_texture_driver_allows_foreign_gl_target (CoglContext *ctx,
433 GLenum gl_target)
434@@ -541,7 +528,6 @@ _cogl_texture_driver_gl =
435 _cogl_texture_driver_gl_get_tex_image,
436 _cogl_texture_driver_size_supported,
437 _cogl_texture_driver_size_supported_3d,
438- _cogl_texture_driver_try_setting_gl_border_color,
439 _cogl_texture_driver_allows_foreign_gl_target,
440 _cogl_texture_driver_find_best_gl_get_data_format
441 };
442diff --git a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
443index 6f2cf6e..23158d5 100644
444--- a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
445+++ b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
446@@ -429,6 +429,12 @@ _cogl_driver_update_features (CoglContext *context,
447 return TRUE;
448 }
449
450+static gboolean
451+_cogl_driver_texture_2d_is_get_data_supported (CoglTexture2D *tex_2d)
452+{
453+ return FALSE;
454+}
455+
456 const CoglDriverVtable
457 _cogl_driver_gles =
458 {
459@@ -453,7 +459,7 @@ _cogl_driver_gles =
460 _cogl_texture_2d_gl_get_gl_handle,
461 _cogl_texture_2d_gl_generate_mipmap,
462 _cogl_texture_2d_gl_copy_from_bitmap,
463- NULL, /* texture_2d_is_get_data_supported */
464+ _cogl_driver_texture_2d_is_get_data_supported,
465 NULL, /* texture_2d_get_data */
466 _cogl_gl_flush_attributes_state,
467 _cogl_clip_stack_gl_flush,
468diff --git a/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
469index 17f529e..f773f93 100644
470--- a/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
471+++ b/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
472@@ -590,15 +590,6 @@ _cogl_texture_driver_size_supported (CoglContext *ctx,
473 return width <= max_size && height <= max_size;
474 }
475
476-static void
477-_cogl_texture_driver_try_setting_gl_border_color
478- (CoglContext *ctx,
479- GLuint gl_target,
480- const GLfloat *transparent_color)
481-{
482- /* FAIL! */
483-}
484-
485 static gboolean
486 _cogl_texture_driver_allows_foreign_gl_target (CoglContext *ctx,
487 GLenum gl_target)
488@@ -636,7 +627,6 @@ _cogl_texture_driver_gles =
489 _cogl_texture_driver_gl_get_tex_image,
490 _cogl_texture_driver_size_supported,
491 _cogl_texture_driver_size_supported_3d,
492- _cogl_texture_driver_try_setting_gl_border_color,
493 _cogl_texture_driver_allows_foreign_gl_target,
494 _cogl_texture_driver_find_best_gl_get_data_format
495 };
496diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
497index 5d80e87..cb94042 100644
498--- a/cogl/cogl/meson.build
499+++ b/cogl/cogl/meson.build
500@@ -1,3 +1,4 @@
501+cogl_cogl_includesubdir = join_paths(cogl_includesubdir, 'cogl')
502 cogl_cogl_includedir = join_paths(cogl_includedir, 'cogl')
503
504 cdata = configuration_data()
505@@ -89,6 +90,8 @@ cogl_headers = [
506 'cogl-pipeline-layer-state.h',
507 'cogl-primitives.h',
508 'cogl-texture.h',
509+ 'cogl-texture-2d.h',
510+ 'cogl-texture-2d-sliced.h',
511 'cogl-types.h',
512 'cogl.h',
513 ]
514@@ -117,10 +120,8 @@ cogl_nonintrospected_headers = [
515 'cogl-matrix-stack.h',
516 'cogl-poll.h',
517 'cogl-texture-3d.h',
518- 'cogl-texture-2d.h',
519 'cogl-texture-2d-gl.h',
520 'cogl-texture-rectangle.h',
521- 'cogl-texture-2d-sliced.h',
522 'cogl-sub-texture.h',
523 'cogl-atlas-texture.h',
524 'cogl-meta-texture.h',
525@@ -514,16 +515,16 @@ install_headers([
526 cogl_headers,
527 cogl_nonintrospected_headers,
528 ],
529- subdir: cogl_cogl_includedir)
530+ subdir: cogl_cogl_includesubdir)
531
532 install_headers([
533 cogl_deprecated_headers,
534 cogl_deprecated_nonintrospected_headers,
535 ],
536- subdir: join_paths(cogl_cogl_includedir, 'deprecated'))
537+ subdir: join_paths(cogl_cogl_includesubdir, 'deprecated'))
538
539 install_headers(cogl_gl_prototype_headers,
540- subdir: join_paths(cogl_cogl_includedir, 'gl-prototypes'))
541+ subdir: join_paths(cogl_cogl_includesubdir, 'gl-prototypes'))
542
543 pkg.generate(libmutter_cogl,
544 name: 'Cogl',
545diff --git a/cogl/meson.build b/cogl/meson.build
546index d76b865..356d596 100644
547--- a/cogl/meson.build
548+++ b/cogl/meson.build
549@@ -1,4 +1,5 @@
550-cogl_includedir = join_paths(pkgincludedir, 'cogl')
551+cogl_includesubdir = join_paths(pkgname, 'cogl')
552+cogl_includedir = join_paths(includedir, cogl_includesubdir)
553 cogl_srcdir = join_paths(top_srcdir, 'cogl')
554 cogl_builddir = join_paths(builddir, 'cogl')
555
556diff --git a/debian/changelog b/debian/changelog
557index 5825020..7471ed8 100644
558--- a/debian/changelog
559+++ b/debian/changelog
560@@ -1,3 +1,43 @@
561+mutter (3.32.0+git20190410-1ubuntu1) disco; urgency=medium
562+
563+ * Merge with debian git snapshot (LP: #1820542), remaining changes:
564+ + debian/control:
565+ - Update VCS flags to point to launchpad
566+ - Update maintainer to ubuntu
567+ + debian/gbp.conf: update branch to point to ubuntu/master
568+ + debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch:
569+ - X11: Add support for fractional scaling using Randr
570+ * d/p/x11-Add-support-for-fractional-scaling-using-Randr.patch:
571+ - Refreshed.
572+
573+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Wed, 10 Apr 2019 20:12:29 -0500
574+
575+mutter (3.32.0+git20190410-1) experimental; urgency=medium
576+
577+ * New upstream snapshot up to commit
578+ b2d0184c6efa164ad5dd7a2ca8b10cf13acf5b4c. Fixes Launchpad bugs:
579+ + GNOME Shell task bar menus not updated with external monitor primary and
580+ laptop screen fractionally scaled (LP: #1803319)
581+ + (In Xorg sessions only) apps launched from gnome shell do not get input
582+ focus (LP: #1817924)
583+ + Touch input is offset with two screens (even appearing on the wrong
584+ screen) in Xorg sessions (LP: #1821933)
585+ + gnome-shell crashed with SIGABRT. Assertion failure in
586+ meta_gpu_kms_flip_crtc: "monitor_manager->power_save_mode ==
587+ META_POWER_SAVE_ON" (LP: #1820331)
588+ * debian/patches/various: Drop upstream cherry-picks. We had cherry-picked
589+ the stable branch into Debian patches in the previous upload, but that
590+ would get out of hand if we carried on. Instead we are using a tarball
591+ snapshot. So drop the cherry-picks.
592+ * Update symbols. A typo was fixed in a public symbol. This is an ABI break,
593+ but upstream didn't consider this worthy of a SONAME change. A codesearch
594+ / github / web search doesn't reveal any external users either, so we will
595+ eat this to avoid another transition.
596+ * Use debhelper-compat 12 and BD on dh-sequence-{gnome,gir}. We were missing
597+ a direct BD on the providers. Thanks, Lintian.
598+
599+ -- Iain Lane <laney@debian.org> Wed, 10 Apr 2019 16:36:23 +0100
600+
601 mutter (3.32.0-1ubuntu2) disco; urgency=medium
602
603 * debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch:
604diff --git a/debian/compat b/debian/compat
605deleted file mode 100644
606index b4de394..0000000
607--- a/debian/compat
608+++ /dev/null
609@@ -1 +0,0 @@
610-11
611diff --git a/debian/control b/debian/control
612index 02668fc..ebbb4d0 100644
613--- a/debian/control
614+++ b/debian/control
615@@ -8,7 +8,9 @@ Priority: optional
616 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
617 XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
618 Uploaders: Iain Lane <laney@debian.org>, Jeremy Bicha <jbicha@debian.org>
619-Build-Depends: debhelper (>= 11),
620+Build-Depends: debhelper-compat (= 12),
621+ dh-sequence-gir,
622+ dh-sequence-gnome,
623 at-spi2-core <!nocheck>,
624 dbus <!nocheck>,
625 dmz-cursor-theme <!nocheck>,
626diff --git a/debian/control.in b/debian/control.in
627index 3c5bd2f..b8cb5fa 100644
628--- a/debian/control.in
629+++ b/debian/control.in
630@@ -4,7 +4,9 @@ Priority: optional
631 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
632 XSBC-Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
633 Uploaders: @GNOME_TEAM@
634-Build-Depends: debhelper (>= 11),
635+Build-Depends: debhelper-compat (= 12),
636+ dh-sequence-gir,
637+ dh-sequence-gnome,
638 at-spi2-core <!nocheck>,
639 dbus <!nocheck>,
640 dmz-cursor-theme <!nocheck>,
641diff --git a/debian/libmutter-4-0.symbols b/debian/libmutter-4-0.symbols
642index 5d8f044..c0f1939 100644
643--- a/debian/libmutter-4-0.symbols
644+++ b/debian/libmutter-4-0.symbols
645@@ -419,7 +419,7 @@ libmutter-4.so.0 libmutter-4-0 #MINVER#
646 meta_rectangle_get_type@Base 3.28.2
647 meta_rectangle_horiz_overlap@Base 3.28.2
648 meta_rectangle_intersect@Base 3.28.2
649- meta_rectangle_is_adjecent_to@Base 3.28.2
650+ meta_rectangle_is_adjacent_to@Base 3.32.0+git20190410
651 meta_rectangle_overlap@Base 3.28.2
652 meta_rectangle_overlaps_with_region@Base 3.28.2
653 meta_rectangle_resize_with_gravity@Base 3.28.2
654@@ -1513,7 +1513,6 @@ libmutter-clutter-4.so.0 libmutter-4-0 #MINVER#
655 clutter_input_device_get_n_mode_groups@Base 3.29.4
656 clutter_input_device_get_n_rings@Base 3.29.4
657 clutter_input_device_get_n_strips@Base 3.29.4
658- clutter_input_device_get_physical_size@Base 3.31.90
659 clutter_input_device_get_pointer_actor@Base 3.29.4
660 clutter_input_device_get_pointer_stage@Base 3.29.4
661 clutter_input_device_get_product_id@Base 3.29.4
662diff --git a/debian/patches/bell-Always-flash-window-instead-of-frame.patch b/debian/patches/bell-Always-flash-window-instead-of-frame.patch
663deleted file mode 100644
664index 91614ab..0000000
665--- a/debian/patches/bell-Always-flash-window-instead-of-frame.patch
666+++ /dev/null
667@@ -1,111 +0,0 @@
668-From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
669-Date: Wed, 6 Mar 2019 23:51:41 +0100
670-Subject: bell: Always flash window instead of frame
671-
672-Traditionally visual alerts were implemented by flashing the focus
673-window's frame. As that only works for windows that we decorate,
674-flashing the whole window was added as a fallback for client-decorated
675-windows.
676-
677-However that introduces some confusing inconsistency, better to just
678-always flash the entire window.
679-
680-https://gitlab.gnome.org/GNOME/mutter/issues/491
681-
682-Origin: upstream, commit:8d62da2dc4c710246425ea89c09f41e7713371f
683-Applied-Upstream: 3.32.1
684----
685- src/core/bell.c | 66 +++------------------------------------------------------
686- 1 file changed, 3 insertions(+), 63 deletions(-)
687-
688-diff --git a/src/core/bell.c b/src/core/bell.c
689-index cd96275..aa334d6 100644
690---- a/src/core/bell.c
691-+++ b/src/core/bell.c
692-@@ -34,10 +34,8 @@
693- * function then checks what kind of visual flash you like, and calls either
694- * bell_flash_fullscreen()-- which calls bell_flash_screen() to do
695- * its work-- or bell_flash_frame(), which flashes the focussed window
696-- * using bell_flash_window_frame(), unless there is no such window, in
697-- * which case it flashes the screen instead. bell_flash_window_frame()
698-- * flashes the frame and calls bell_unflash_frame() as a timeout to
699-- * remove the flash.
700-+ * using bell_flash_window(), unless there is no such window, in
701-+ * which case it flashes the screen instead.
702- *
703- * The visual bell was the result of a discussion in Bugzilla here:
704- * <http://bugzilla.gnome.org/show_bug.cgi?id=99886>.
705-@@ -135,62 +133,6 @@ bell_flash_fullscreen (MetaDisplay *display)
706- meta_compositor_flash_display (display->compositor, display);
707- }
708-
709--/**
710-- * bell_unflash_frame:
711-- * @data: The frame to unflash, cast to a gpointer so it can go into
712-- * a callback function.
713-- *
714-- * Makes a frame be not flashed; this is the timeout half of
715-- * bell_flash_window_frame(). This is done simply by clearing the
716-- * flash flag and queuing a redraw of the frame.
717-- *
718-- * If the configure script found we had no XKB, this does not exist.
719-- *
720-- * Returns: Always FALSE, so we don't get called again.
721-- */
722--
723--/*
724-- * Bug: This is the parallel to bell_flash_window_frame(), so it should
725-- * really be called meta_bell_unflash_window_frame().
726-- */
727--static gboolean
728--bell_unflash_frame (gpointer data)
729--{
730-- MetaFrame *frame = (MetaFrame *) data;
731-- frame->is_flashing = 0;
732-- meta_frame_queue_draw (frame);
733-- return FALSE;
734--}
735--
736--/**
737-- * bell_flash_window_frame:
738-- * @window: The window to flash
739-- *
740-- * Makes a frame flash and then return to normal shortly afterwards.
741-- * This is done by setting a flag so that the theme
742-- * code will temporarily draw the frame as focussed if it's unfocussed and
743-- * vice versa, and then queueing a redraw. Lastly, we create a timeout so
744-- * that the flag can be unset and the frame re-redrawn.
745-- *
746-- * If the configure script found we had no XKB, this does not exist.
747-- */
748--static void
749--bell_flash_window_frame (MetaWindow *window)
750--{
751-- guint id;
752-- g_assert (window->frame != NULL);
753-- window->frame->is_flashing = 1;
754-- meta_frame_queue_draw (window->frame);
755-- /* Since this idle is added after the Clutter clock source, with
756-- * the same priority, it will be executed after it as well, so
757-- * we are guaranteed to get at least one frame drawn in the
758-- * flashed state, no matter how loaded we are.
759-- */
760-- id = g_timeout_add_full (META_PRIORITY_REDRAW, 100,
761-- bell_unflash_frame, window->frame, NULL);
762-- g_source_set_name_by_id (id, "[mutter] bell_unflash_frame");
763--}
764--
765- static void
766- bell_flash_window (MetaWindow *window)
767- {
768-@@ -209,9 +151,7 @@ static void
769- bell_flash_frame (MetaDisplay *display,
770- MetaWindow *window)
771- {
772-- if (window && window->frame)
773-- bell_flash_window_frame (window);
774-- else if (window)
775-+ if (window)
776- bell_flash_window (window);
777- else
778- bell_flash_fullscreen (display);
779diff --git a/debian/patches/boxes-Actually-check-for-rectangle-containment.patch b/debian/patches/boxes-Actually-check-for-rectangle-containment.patch
780deleted file mode 100644
781index b3af31e..0000000
782--- a/debian/patches/boxes-Actually-check-for-rectangle-containment.patch
783+++ /dev/null
784@@ -1,38 +0,0 @@
785-From: Pablo Barciela <scow@riseup.net>
786-Date: Sun, 3 Mar 2019 16:05:55 +0100
787-Subject: boxes: Actually check for rectangle containment
788-
789-Fixes condition duplicated:
790-
791- /* If a contains b, just remove b */
792- if (meta_rectangle_contains_rect (a, b))
793- {
794- delete_me = other;
795- }
796- /* If b contains a, just remove a */
797- else if (meta_rectangle_contains_rect (a, b))
798- {
799- delete_me = compare;
800- }
801-
802-Closes https://gitlab.gnome.org/GNOME/mutter/issues/480
803-
804-Origin: upstream, commit:18164779c07c12c5acfcddde7834980c7521aac
805-Applied-Upstream: 3.32.1
806----
807- src/core/boxes.c | 2 +-
808- 1 file changed, 1 insertion(+), 1 deletion(-)
809-
810-diff --git a/src/core/boxes.c b/src/core/boxes.c
811-index 4ab07d2..87f2d5d 100644
812---- a/src/core/boxes.c
813-+++ b/src/core/boxes.c
814-@@ -468,7 +468,7 @@ merge_spanning_rects_in_region (GList *region)
815- delete_me = other;
816- }
817- /* If b contains a, just remove a */
818-- else if (meta_rectangle_contains_rect (a, b))
819-+ else if (meta_rectangle_contains_rect (b, a))
820- {
821- delete_me = compare;
822- }
823diff --git a/debian/patches/cogl-Introspect-CoglTexture2D-Sliced.patch b/debian/patches/cogl-Introspect-CoglTexture2D-Sliced.patch
824deleted file mode 100644
825index 55a9e05..0000000
826--- a/debian/patches/cogl-Introspect-CoglTexture2D-Sliced.patch
827+++ /dev/null
828@@ -1,124 +0,0 @@
829-From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
830-Date: Wed, 6 Mar 2019 18:50:33 +0100
831-Subject: cogl: Introspect CoglTexture2D(Sliced)
832-
833-gnome-shell cannot use CoglTexture if gjs can't tell that an object
834-in question implements the CoglTexture interface.
835-
836-https://gitlab.gnome.org/GNOME/gnome-shell/issues/1020
837-https://gitlab.gnome.org/GNOME/mutter/merge_requests/482
838-
839-Origin: upstream, commit:aca31c81494435a6c3f2266b664bfc727a23fbe
840-Applied-Upstream: 3.32.1
841----
842- cogl/cogl/cogl-texture-2d-sliced.h | 6 +++---
843- cogl/cogl/cogl-texture-2d.h | 12 +++++++++---
844- cogl/cogl/meson.build | 4 ++--
845- 3 files changed, 14 insertions(+), 8 deletions(-)
846-
847-diff --git a/cogl/cogl/cogl-texture-2d-sliced.h b/cogl/cogl/cogl-texture-2d-sliced.h
848-index 8d43fc5..12ce710 100644
849---- a/cogl/cogl/cogl-texture-2d-sliced.h
850-+++ b/cogl/cogl/cogl-texture-2d-sliced.h
851-@@ -78,7 +78,7 @@ typedef struct _CoglTexture2DSliced CoglTexture2DSliced;
852- GType cogl_texture_2d_sliced_get_gtype (void);
853-
854- /**
855-- * cogl_texture_2d_sliced_new_with_size:
856-+ * cogl_texture_2d_sliced_new_with_size: (skip)
857- * @ctx: A #CoglContext
858- * @width: The virtual width of your sliced texture.
859- * @height: The virtual height of your sliced texture.
860-@@ -125,7 +125,7 @@ cogl_texture_2d_sliced_new_with_size (CoglContext *ctx,
861- int max_waste);
862-
863- /**
864-- * cogl_texture_2d_sliced_new_from_file:
865-+ * cogl_texture_2d_sliced_new_from_file: (skip)
866- * @ctx: A #CoglContext
867- * @filename: the file to load
868- * @max_waste: The threshold of how wide a strip of wasted texels
869-@@ -173,7 +173,7 @@ cogl_texture_2d_sliced_new_from_file (CoglContext *ctx,
870- CoglError **error);
871-
872- /**
873-- * cogl_texture_2d_sliced_new_from_data:
874-+ * cogl_texture_2d_sliced_new_from_data: (skip)
875- * @ctx: A #CoglContext
876- * @width: width of texture in pixels
877- * @height: height of texture in pixels
878-diff --git a/cogl/cogl/cogl-texture-2d.h b/cogl/cogl/cogl-texture-2d.h
879-index 85cadba..29b8b2d 100644
880---- a/cogl/cogl/cogl-texture-2d.h
881-+++ b/cogl/cogl/cogl-texture-2d.h
882-@@ -86,7 +86,7 @@ gboolean
883- cogl_is_texture_2d (void *object);
884-
885- /**
886-- * cogl_texture_2d_new_with_size:
887-+ * cogl_texture_2d_new_with_size: (skip)
888- * @ctx: A #CoglContext
889- * @width: Width of the texture to allocate
890- * @height: Height of the texture to allocate
891-@@ -120,7 +120,7 @@ cogl_texture_2d_new_with_size (CoglContext *ctx,
892- int height);
893-
894- /**
895-- * cogl_texture_2d_new_from_file:
896-+ * cogl_texture_2d_new_from_file: (skip)
897- * @ctx: A #CoglContext
898- * @filename: the file to load
899- * @error: A #CoglError to catch exceptional errors or %NULL
900-@@ -154,7 +154,7 @@ cogl_texture_2d_new_from_file (CoglContext *ctx,
901- CoglError **error);
902-
903- /**
904-- * cogl_texture_2d_new_from_data:
905-+ * cogl_texture_2d_new_from_data: (skip)
906- * @ctx: A #CoglContext
907- * @width: width of texture in pixels
908- * @height: height of texture in pixels
909-@@ -231,6 +231,9 @@ cogl_texture_2d_new_from_data (CoglContext *ctx,
910- CoglTexture2D *
911- cogl_texture_2d_new_from_bitmap (CoglBitmap *bitmap);
912-
913-+/**
914-+ * cogl_egl_texture_2d_new_from_image: (skip)
915-+ */
916- #if defined (COGL_HAS_EGL_SUPPORT) && defined (EGL_KHR_image_base)
917- /* NB: The reason we require the width, height and format to be passed
918- * even though they may seem redundant is because GLES 1/2 don't
919-@@ -247,6 +250,9 @@ typedef gboolean (*CoglTexture2DEGLImageExternalAlloc) (CoglTexture2D *tex_2d,
920- gpointer user_data,
921- GError **error);
922-
923-+/**
924-+ * cogl_texture_2d_new_from_egl_image_external: (skip)
925-+ */
926- CoglTexture2D *
927- cogl_texture_2d_new_from_egl_image_external (CoglContext *ctx,
928- int width,
929-diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
930-index 5d80e87..626e8fa 100644
931---- a/cogl/cogl/meson.build
932-+++ b/cogl/cogl/meson.build
933-@@ -89,6 +89,8 @@ cogl_headers = [
934- 'cogl-pipeline-layer-state.h',
935- 'cogl-primitives.h',
936- 'cogl-texture.h',
937-+ 'cogl-texture-2d.h',
938-+ 'cogl-texture-2d-sliced.h',
939- 'cogl-types.h',
940- 'cogl.h',
941- ]
942-@@ -117,10 +119,8 @@ cogl_nonintrospected_headers = [
943- 'cogl-matrix-stack.h',
944- 'cogl-poll.h',
945- 'cogl-texture-3d.h',
946-- 'cogl-texture-2d.h',
947- 'cogl-texture-2d-gl.h',
948- 'cogl-texture-rectangle.h',
949-- 'cogl-texture-2d-sliced.h',
950- 'cogl-sub-texture.h',
951- 'cogl-atlas-texture.h',
952- 'cogl-meta-texture.h',
953diff --git a/debian/patches/cogl-Remove-unused-CoglTextureDriver-try_setting_gl_borde.patch b/debian/patches/cogl-Remove-unused-CoglTextureDriver-try_setting_gl_borde.patch
954deleted file mode 100644
955index b4e5f3b..0000000
956--- a/debian/patches/cogl-Remove-unused-CoglTextureDriver-try_setting_gl_borde.patch
957+++ /dev/null
958@@ -1,94 +0,0 @@
959-From: Adam Jackson <ajax@redhat.com>
960-Date: Wed, 6 Mar 2019 12:15:40 -0500
961-Subject: cogl: Remove unused CoglTextureDriver::try_setting_gl_border_color
962-
963-https://gitlab.gnome.org/GNOME/mutter/merge_requests/480
964-
965-Origin: upstream, commit:555a2c8eba115425a81d7b84f3ca2163493c0d4
966-Applied-Upstream: 3.32.1
967----
968- cogl/cogl/cogl-texture-driver.h | 9 ---------
969- cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c | 14 --------------
970- cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c | 10 ----------
971- 3 files changed, 33 deletions(-)
972-
973-diff --git a/cogl/cogl/cogl-texture-driver.h b/cogl/cogl/cogl-texture-driver.h
974-index f77c548..a6e7d4f 100644
975---- a/cogl/cogl/cogl-texture-driver.h
976-+++ b/cogl/cogl/cogl-texture-driver.h
977-@@ -171,15 +171,6 @@ struct _CoglTextureDriver
978- int height,
979- int depth);
980-
981-- /*
982-- * This driver abstraction is needed because GLES doesn't support setting
983-- * a texture border color.
984-- */
985-- void
986-- (* try_setting_gl_border_color) (CoglContext *ctx,
987-- GLuint gl_target,
988-- const GLfloat *transparent_color);
989--
990- /*
991- * It may depend on the driver as to what texture targets may be used when
992- * creating a foreign texture. E.g. OpenGL supports ARB_texture_rectangle
993-diff --git a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
994-index fbb55de..35b87f7 100644
995---- a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
996-+++ b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
997-@@ -485,19 +485,6 @@ _cogl_texture_driver_size_supported (CoglContext *ctx,
998- return new_width != 0;
999- }
1000-
1001--static void
1002--_cogl_texture_driver_try_setting_gl_border_color
1003-- (CoglContext *ctx,
1004-- GLuint gl_target,
1005-- const GLfloat *transparent_color)
1006--{
1007-- /* Use a transparent border color so that we can leave the
1008-- color buffer alone when using texture co-ordinates
1009-- outside of the texture */
1010-- GE( ctx, glTexParameterfv (gl_target, GL_TEXTURE_BORDER_COLOR,
1011-- transparent_color) );
1012--}
1013--
1014- static gboolean
1015- _cogl_texture_driver_allows_foreign_gl_target (CoglContext *ctx,
1016- GLenum gl_target)
1017-@@ -541,7 +528,6 @@ _cogl_texture_driver_gl =
1018- _cogl_texture_driver_gl_get_tex_image,
1019- _cogl_texture_driver_size_supported,
1020- _cogl_texture_driver_size_supported_3d,
1021-- _cogl_texture_driver_try_setting_gl_border_color,
1022- _cogl_texture_driver_allows_foreign_gl_target,
1023- _cogl_texture_driver_find_best_gl_get_data_format
1024- };
1025-diff --git a/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
1026-index 17f529e..f773f93 100644
1027---- a/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
1028-+++ b/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
1029-@@ -590,15 +590,6 @@ _cogl_texture_driver_size_supported (CoglContext *ctx,
1030- return width <= max_size && height <= max_size;
1031- }
1032-
1033--static void
1034--_cogl_texture_driver_try_setting_gl_border_color
1035-- (CoglContext *ctx,
1036-- GLuint gl_target,
1037-- const GLfloat *transparent_color)
1038--{
1039-- /* FAIL! */
1040--}
1041--
1042- static gboolean
1043- _cogl_texture_driver_allows_foreign_gl_target (CoglContext *ctx,
1044- GLenum gl_target)
1045-@@ -636,7 +627,6 @@ _cogl_texture_driver_gles =
1046- _cogl_texture_driver_gl_get_tex_image,
1047- _cogl_texture_driver_size_supported,
1048- _cogl_texture_driver_size_supported_3d,
1049-- _cogl_texture_driver_try_setting_gl_border_color,
1050- _cogl_texture_driver_allows_foreign_gl_target,
1051- _cogl_texture_driver_find_best_gl_get_data_format
1052- };
1053diff --git a/debian/patches/frame-Remove-flashing-support.patch b/debian/patches/frame-Remove-flashing-support.patch
1054deleted file mode 100644
1055index efbaf14..0000000
1056--- a/debian/patches/frame-Remove-flashing-support.patch
1057+++ /dev/null
1058@@ -1,144 +0,0 @@
1059-From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
1060-Date: Wed, 6 Mar 2019 23:56:33 +0100
1061-Subject: frame: Remove flashing support
1062-
1063-It's now unused.
1064-
1065-https://gitlab.gnome.org/GNOME/mutter/issues/491
1066-
1067-Origin: upstream, commit:bd33e7b0027f51307657938db3b4cc1a8d03dde
1068-Applied-Upstream: 3.32.1
1069----
1070- src/core/bell.c | 16 ----------------
1071- src/core/bell.h | 11 -----------
1072- src/core/frame.c | 6 ------
1073- src/core/frame.h | 1 -
1074- src/meta/common.h | 8 +++-----
1075- src/ui/theme.c | 2 --
1076- 6 files changed, 3 insertions(+), 41 deletions(-)
1077-
1078-diff --git a/src/core/bell.c b/src/core/bell.c
1079-index aa334d6..d7000b2 100644
1080---- a/src/core/bell.c
1081-+++ b/src/core/bell.c
1082-@@ -207,19 +207,3 @@ meta_bell_notify (MetaDisplay *display,
1083-
1084- return TRUE;
1085- }
1086--
1087--/**
1088-- * meta_bell_notify_frame_destroy:
1089-- * @frame: The frame which is being destroyed
1090-- *
1091-- * Deals with a frame being destroyed. This is important because if we're
1092-- * using a visual bell, we might be flashing the edges of the frame, and
1093-- * so we'd have a timeout function waiting ready to un-flash them. If the
1094-- * frame's going away, we can tell the timeout not to bother.
1095-- */
1096--void
1097--meta_bell_notify_frame_destroy (MetaFrame *frame)
1098--{
1099-- if (frame->is_flashing)
1100-- g_source_remove_by_funcs_user_data (&g_timeout_funcs, frame);
1101--}
1102-diff --git a/src/core/bell.h b/src/core/bell.h
1103-index 9205b08..f86cbb7 100644
1104---- a/src/core/bell.h
1105-+++ b/src/core/bell.h
1106-@@ -41,14 +41,3 @@ MetaBell * meta_bell_new (MetaDisplay *display);
1107- */
1108- gboolean meta_bell_notify (MetaDisplay *display,
1109- MetaWindow *window);
1110--
1111--/**
1112-- * meta_bell_notify_frame_destroy:
1113-- * @frame: The frame which is being destroyed
1114-- *
1115-- * Deals with a frame being destroyed. This is important because if we're
1116-- * using a visual bell, we might be flashing the edges of the frame, and
1117-- * so we'd have a timeout function waiting ready to un-flash them. If the
1118-- * frame's going away, we can tell the timeout not to bother.
1119-- */
1120--void meta_bell_notify_frame_destroy (MetaFrame *frame);
1121-diff --git a/src/core/frame.c b/src/core/frame.c
1122-index 7eea0a3..7699461 100644
1123---- a/src/core/frame.c
1124-+++ b/src/core/frame.c
1125-@@ -60,7 +60,6 @@ meta_window_ensure_frame (MetaWindow *window)
1126- frame->right_width = 0;
1127- frame->current_cursor = 0;
1128-
1129-- frame->is_flashing = FALSE;
1130- frame->borders_cached = FALSE;
1131-
1132- meta_verbose ("Frame geometry %d,%d %dx%d\n",
1133-@@ -177,8 +176,6 @@ meta_window_destroy_frame (MetaWindow *window)
1134-
1135- meta_frame_calc_borders (frame, &borders);
1136-
1137-- meta_bell_notify_frame_destroy (frame);
1138--
1139- /* Unparent the client window; it may be destroyed,
1140- * thus the error trap.
1141- */
1142-@@ -298,9 +295,6 @@ meta_frame_get_flags (MetaFrame *frame)
1143- if (frame->window->fullscreen)
1144- flags |= META_FRAME_FULLSCREEN;
1145-
1146-- if (frame->is_flashing)
1147-- flags |= META_FRAME_IS_FLASHING;
1148--
1149- if (frame->window->wm_state_above)
1150- flags |= META_FRAME_ABOVE;
1151-
1152-diff --git a/src/core/frame.h b/src/core/frame.h
1153-index 73a7b4b..c0bacbe 100644
1154---- a/src/core/frame.h
1155-+++ b/src/core/frame.h
1156-@@ -49,7 +49,6 @@ struct _MetaFrame
1157- int bottom_height;
1158-
1159- guint need_reapply_frame_shape : 1;
1160-- guint is_flashing : 1; /* used by the visual bell flash */
1161- guint borders_cached : 1;
1162-
1163- MetaUIFrame *ui_frame;
1164-diff --git a/src/meta/common.h b/src/meta/common.h
1165-index 02e2802..670097b 100644
1166---- a/src/meta/common.h
1167-+++ b/src/meta/common.h
1168-@@ -63,7 +63,6 @@
1169- * @META_FRAME_ALLOWS_SHADE: frame allows shade
1170- * @META_FRAME_ALLOWS_MOVE: frame allows move
1171- * @META_FRAME_FULLSCREEN: frame allows fullscreen
1172-- * @META_FRAME_IS_FLASHING: frame is flashing
1173- * @META_FRAME_ABOVE: frame is above
1174- * @META_FRAME_TILED_LEFT: frame is tiled to the left
1175- * @META_FRAME_TILED_RIGHT: frame is tiled to the right
1176-@@ -83,10 +82,9 @@ typedef enum
1177- META_FRAME_ALLOWS_SHADE = 1 << 10,
1178- META_FRAME_ALLOWS_MOVE = 1 << 11,
1179- META_FRAME_FULLSCREEN = 1 << 12,
1180-- META_FRAME_IS_FLASHING = 1 << 13,
1181-- META_FRAME_ABOVE = 1 << 14,
1182-- META_FRAME_TILED_LEFT = 1 << 15,
1183-- META_FRAME_TILED_RIGHT = 1 << 16
1184-+ META_FRAME_ABOVE = 1 << 13,
1185-+ META_FRAME_TILED_LEFT = 1 << 14,
1186-+ META_FRAME_TILED_RIGHT = 1 << 15
1187- } MetaFrameFlags;
1188-
1189- /**
1190-diff --git a/src/ui/theme.c b/src/ui/theme.c
1191-index 53d7ef5..b7618d9 100644
1192---- a/src/ui/theme.c
1193-+++ b/src/ui/theme.c
1194-@@ -1186,8 +1186,6 @@ meta_style_info_set_flags (MetaStyleInfo *style_info,
1195- int i;
1196-
1197- backdrop = !(flags & META_FRAME_HAS_FOCUS);
1198-- if (flags & META_FRAME_IS_FLASHING)
1199-- backdrop = !backdrop;
1200-
1201- if (flags & META_FRAME_MAXIMIZED)
1202- class_name = "maximized";
1203diff --git a/debian/patches/keybindings-Fix-theoretical-memory-leak-while-ungrabbing.patch b/debian/patches/keybindings-Fix-theoretical-memory-leak-while-ungrabbing.patch
1204deleted file mode 100644
1205index 9f4e0f6..0000000
1206--- a/debian/patches/keybindings-Fix-theoretical-memory-leak-while-ungrabbing.patch
1207+++ /dev/null
1208@@ -1,36 +0,0 @@
1209-From: Benjamin Berg <bberg@redhat.com>
1210-Date: Wed, 6 Mar 2019 14:07:02 +0100
1211-Subject: keybindings: Fix theoretical memory leak while ungrabbing
1212-
1213-In the unlikely event that one tries to ungrab an action which does not
1214-exist, a small leak could occur. Fix this by using g_autofree.
1215-
1216-https://gitlab.gnome.org/GNOME/mutter/merge_requests/478
1217-
1218-Origin: upstream, commit:0ceeb28481ec74073241d0c2f6af8795f070905
1219-Applied-Upstream: 3.32.1
1220----
1221- src/core/keybindings.c | 3 +--
1222- 1 file changed, 1 insertion(+), 2 deletions(-)
1223-
1224-diff --git a/src/core/keybindings.c b/src/core/keybindings.c
1225-index 5ffe411..478d4d8 100644
1226---- a/src/core/keybindings.c
1227-+++ b/src/core/keybindings.c
1228-@@ -1654,7 +1654,7 @@ meta_display_ungrab_accelerator (MetaDisplay *display,
1229- MetaKeyBindingManager *keys = &display->key_binding_manager;
1230- MetaKeyBinding *binding;
1231- MetaKeyGrab *grab;
1232-- char *key;
1233-+ g_autofree char *key = NULL;
1234- MetaResolvedKeyCombo resolved_combo = { NULL, 0 };
1235-
1236- g_return_val_if_fail (action != META_KEYBINDING_ACTION_NONE, FALSE);
1237-@@ -1683,7 +1683,6 @@ meta_display_ungrab_accelerator (MetaDisplay *display,
1238- }
1239-
1240- g_hash_table_remove (external_grabs, key);
1241-- g_free (key);
1242- resolved_key_combo_reset (&resolved_combo);
1243-
1244- return TRUE;
1245diff --git a/debian/patches/meson-add-back-default_driver-option.patch b/debian/patches/meson-add-back-default_driver-option.patch
1246index 2aa1054..b79207c 100644
1247--- a/debian/patches/meson-add-back-default_driver-option.patch
1248+++ b/debian/patches/meson-add-back-default_driver-option.patch
1249@@ -29,10 +29,10 @@ index 56946b2..ae53310 100644
1250 +
1251 #define COGL_CONFIG_H_INCLUDED 1
1252 diff --git a/cogl/meson.build b/cogl/meson.build
1253-index d76b865..a6c22ff 100644
1254+index 356d596..2ab83bd 100644
1255 --- a/cogl/meson.build
1256 +++ b/cogl/meson.build
1257-@@ -9,6 +9,10 @@ cdata.set('HAVE_COGL_GL', have_gl)
1258+@@ -10,6 +10,10 @@ cdata.set('HAVE_COGL_GL', have_gl)
1259 cdata.set('HAVE_COGL_GLES2', have_gles2)
1260 cdata.set('ENABLE_UNIT_TESTS', have_cogl_tests)
1261
1262@@ -44,7 +44,7 @@ index d76b865..a6c22ff 100644
1263 input: 'cogl-config.h.meson',
1264 output: 'cogl-config.h',
1265 diff --git a/meson.build b/meson.build
1266-index dc210e6..cafbde4 100644
1267+index 6ce9e59..bebe8eb 100644
1268 --- a/meson.build
1269 +++ b/meson.build
1270 @@ -210,6 +210,8 @@ if have_wayland_eglstream
1271diff --git a/debian/patches/meta-monitor-Remove-useless-variable.patch b/debian/patches/meta-monitor-Remove-useless-variable.patch
1272deleted file mode 100644
1273index c32082a..0000000
1274--- a/debian/patches/meta-monitor-Remove-useless-variable.patch
1275+++ /dev/null
1276@@ -1,44 +0,0 @@
1277-From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
1278-Date: Tue, 5 Mar 2019 01:26:35 +0100
1279-Subject: meta-monitor: Remove useless variable
1280-
1281-Since commit f76b3edf9cdf, the variable is never set to TRUE and
1282-we can simply remove it.
1283-
1284-https://gitlab.gnome.org/GNOME/mutter/merge_requests/475
1285-
1286-Origin: upstream, commit:2504ae91770a1d6524a136f56ab437d4455a626
1287-Applied-Upstream: 3.32.1
1288----
1289- src/backends/meta-monitor.c | 4 +---
1290- 1 file changed, 1 insertion(+), 3 deletions(-)
1291-
1292-diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
1293-index 3ff18a5..1a32e4c 100644
1294---- a/src/backends/meta-monitor.c
1295-+++ b/src/backends/meta-monitor.c
1296-@@ -1587,7 +1587,6 @@ get_closest_scale_factor_for_resolution (float width,
1297- float scaled_w;
1298- float best_scale;
1299- int base_scaled_w;
1300-- gboolean limit_exceeded;
1301- gboolean found_one;
1302-
1303- best_scale = 0;
1304-@@ -1604,7 +1603,6 @@ get_closest_scale_factor_for_resolution (float width,
1305-
1306- i = 0;
1307- found_one = FALSE;
1308-- limit_exceeded = FALSE;
1309- base_scaled_w = floorf (scaled_w);
1310-
1311- do
1312-@@ -1637,7 +1635,7 @@ get_closest_scale_factor_for_resolution (float width,
1313-
1314- i++;
1315- }
1316-- while (!found_one && !limit_exceeded);
1317-+ while (!found_one);
1318-
1319- out:
1320- return best_scale;
1321diff --git a/debian/patches/monitor-Fix-indentation-style-on-calculate_crtc_pos-and-f.patch b/debian/patches/monitor-Fix-indentation-style-on-calculate_crtc_pos-and-f.patch
1322deleted file mode 100644
1323index eab8a30..0000000
1324--- a/debian/patches/monitor-Fix-indentation-style-on-calculate_crtc_pos-and-f.patch
1325+++ /dev/null
1326@@ -1,116 +0,0 @@
1327-From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
1328-Date: Fri, 8 Mar 2019 18:13:00 +0000
1329-Subject: monitor: Fix indentation style on calculate_crtc_pos and friends
1330-
1331-https://gitlab.gnome.org/GNOME/mutter/merge_requests/488
1332-
1333-Origin: upstream, commit:2525f286d3a6687b6d78b038f795d0c1a4f4cb0
1334-Applied-Upstream: 3.32.1
1335----
1336- src/backends/meta-monitor.c | 36 ++++++++++++++++++------------------
1337- src/backends/meta-monitor.h | 24 ++++++++++++------------
1338- 2 files changed, 30 insertions(+), 30 deletions(-)
1339-
1340-diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
1341-index b2f500f..1c6e844 100644
1342---- a/src/backends/meta-monitor.c
1343-+++ b/src/backends/meta-monitor.c
1344-@@ -615,12 +615,12 @@ meta_monitor_normal_get_suggested_position (MetaMonitor *monitor,
1345- }
1346-
1347- static void
1348--meta_monitor_normal_calculate_crtc_pos (MetaMonitor *monitor,
1349-- MetaMonitorMode *monitor_mode,
1350-- MetaOutput *output,
1351-- MetaMonitorTransform crtc_transform,
1352-- int *out_x,
1353-- int *out_y)
1354-+meta_monitor_normal_calculate_crtc_pos (MetaMonitor *monitor,
1355-+ MetaMonitorMode *monitor_mode,
1356-+ MetaOutput *output,
1357-+ MetaMonitorTransform crtc_transform,
1358-+ int *out_x,
1359-+ int *out_y)
1360- {
1361- *out_x = 0;
1362- *out_y = 0;
1363-@@ -1267,12 +1267,12 @@ meta_monitor_tiled_get_suggested_position (MetaMonitor *monitor,
1364- }
1365-
1366- static void
1367--meta_monitor_tiled_calculate_crtc_pos (MetaMonitor *monitor,
1368-- MetaMonitorMode *monitor_mode,
1369-- MetaOutput *output,
1370-- MetaMonitorTransform crtc_transform,
1371-- int *out_x,
1372-- int *out_y)
1373-+meta_monitor_tiled_calculate_crtc_pos (MetaMonitor *monitor,
1374-+ MetaMonitorMode *monitor_mode,
1375-+ MetaOutput *output,
1376-+ MetaMonitorTransform crtc_transform,
1377-+ int *out_x,
1378-+ int *out_y)
1379- {
1380- MetaMonitorModeTiled *mode_tiled = (MetaMonitorModeTiled *) monitor_mode;
1381-
1382-@@ -1461,12 +1461,12 @@ meta_monitor_get_modes (MetaMonitor *monitor)
1383- }
1384-
1385- void
1386--meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
1387-- MetaMonitorMode *monitor_mode,
1388-- MetaOutput *output,
1389-- MetaMonitorTransform crtc_transform,
1390-- int *out_x,
1391-- int *out_y)
1392-+meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
1393-+ MetaMonitorMode *monitor_mode,
1394-+ MetaOutput *output,
1395-+ MetaMonitorTransform crtc_transform,
1396-+ int *out_x,
1397-+ int *out_y)
1398- {
1399- META_MONITOR_GET_CLASS (monitor)->calculate_crtc_pos (monitor,
1400- monitor_mode,
1401-diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
1402-index b24b1a5..c3ba4cf 100644
1403---- a/src/backends/meta-monitor.h
1404-+++ b/src/backends/meta-monitor.h
1405-@@ -74,12 +74,12 @@ struct _MetaMonitorClass
1406- MetaOutput * (* get_main_output) (MetaMonitor *monitor);
1407- void (* derive_layout) (MetaMonitor *monitor,
1408- MetaRectangle *layout);
1409-- void (* calculate_crtc_pos) (MetaMonitor *monitor,
1410-- MetaMonitorMode *monitor_mode,
1411-- MetaOutput *output,
1412-- MetaMonitorTransform crtc_transform,
1413-- int *out_x,
1414-- int *out_y);
1415-+ void (* calculate_crtc_pos) (MetaMonitor *monitor,
1416-+ MetaMonitorMode *monitor_mode,
1417-+ MetaOutput *output,
1418-+ MetaMonitorTransform crtc_transform,
1419-+ int *out_x,
1420-+ int *out_y);
1421- gboolean (* get_suggested_position) (MetaMonitor *monitor,
1422- int *width,
1423- int *height);
1424-@@ -214,12 +214,12 @@ META_EXPORT_TEST
1425- GList * meta_monitor_get_modes (MetaMonitor *monitor);
1426-
1427- META_EXPORT_TEST
1428--void meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
1429-- MetaMonitorMode *monitor_mode,
1430-- MetaOutput *output,
1431-- MetaMonitorTransform crtc_transform,
1432-- int *out_x,
1433-- int *out_y);
1434-+void meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
1435-+ MetaMonitorMode *monitor_mode,
1436-+ MetaOutput *output,
1437-+ MetaMonitorTransform crtc_transform,
1438-+ int *out_x,
1439-+ int *out_y);
1440-
1441- META_EXPORT_TEST
1442- float meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
1443diff --git a/debian/patches/monitor-Fix-indentation-style-on-calculate_supported_scal.patch b/debian/patches/monitor-Fix-indentation-style-on-calculate_supported_scal.patch
1444deleted file mode 100644
1445index 047f099..0000000
1446--- a/debian/patches/monitor-Fix-indentation-style-on-calculate_supported_scal.patch
1447+++ /dev/null
1448@@ -1,162 +0,0 @@
1449-From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
1450-Date: Fri, 8 Mar 2019 18:03:57 +0000
1451-Subject: monitor: Fix indentation style on calculate_supported_scales and
1452- friends
1453-
1454-https://gitlab.gnome.org/GNOME/mutter/merge_requests/488
1455-
1456-Origin: upstream, commit:b8510ac566de7e7d08c9713508adb20451d2373
1457-Applied-Upstream: 3.32.1
1458----
1459- src/backends/meta-monitor-manager-dummy.c | 10 +++++-----
1460- src/backends/meta-monitor-manager.c | 10 +++++-----
1461- src/backends/meta-monitor.c | 8 ++++----
1462- src/backends/meta-monitor.h | 8 ++++----
1463- src/backends/native/meta-monitor-manager-kms.c | 10 +++++-----
1464- src/backends/x11/meta-monitor-manager-xrandr.c | 10 +++++-----
1465- src/tests/meta-monitor-manager-test.c | 10 +++++-----
1466- 7 files changed, 33 insertions(+), 33 deletions(-)
1467-
1468-diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
1469-index 06e8837..46c3b8c 100644
1470---- a/src/backends/meta-monitor-manager-dummy.c
1471-+++ b/src/backends/meta-monitor-manager-dummy.c
1472-@@ -694,11 +694,11 @@ meta_monitor_manager_dummy_calculate_monitor_mode_scale (MetaMonitorManager *man
1473- }
1474-
1475- static float *
1476--meta_monitor_manager_dummy_calculate_supported_scales (MetaMonitorManager *manager,
1477-- MetaLogicalMonitorLayoutMode layout_mode,
1478-- MetaMonitor *monitor,
1479-- MetaMonitorMode *monitor_mode,
1480-- int *n_supported_scales)
1481-+meta_monitor_manager_dummy_calculate_supported_scales (MetaMonitorManager *manager,
1482-+ MetaLogicalMonitorLayoutMode layout_mode,
1483-+ MetaMonitor *monitor,
1484-+ MetaMonitorMode *monitor_mode,
1485-+ int *n_supported_scales)
1486- {
1487- MetaMonitorScalesConstraint constraints =
1488- META_MONITOR_SCALES_CONSTRAINT_NONE;
1489-diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
1490-index 9420265..c4ed245 100644
1491---- a/src/backends/meta-monitor-manager.c
1492-+++ b/src/backends/meta-monitor-manager.c
1493-@@ -400,11 +400,11 @@ meta_monitor_manager_calculate_monitor_mode_scale (MetaMonitorManager *manager,
1494- }
1495-
1496- float *
1497--meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *manager,
1498-- MetaLogicalMonitorLayoutMode layout_mode,
1499-- MetaMonitor *monitor,
1500-- MetaMonitorMode *monitor_mode,
1501-- int *n_supported_scales)
1502-+meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *manager,
1503-+ MetaLogicalMonitorLayoutMode layout_mode,
1504-+ MetaMonitor *monitor,
1505-+ MetaMonitorMode *monitor_mode,
1506-+ int *n_supported_scales)
1507- {
1508- MetaMonitorManagerClass *manager_class =
1509- META_MONITOR_MANAGER_GET_CLASS (manager);
1510-diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
1511-index 1a32e4c..b2f500f 100644
1512---- a/src/backends/meta-monitor.c
1513-+++ b/src/backends/meta-monitor.c
1514-@@ -1642,10 +1642,10 @@ out:
1515- }
1516-
1517- float *
1518--meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
1519-- MetaMonitorMode *monitor_mode,
1520-- MetaMonitorScalesConstraint constraints,
1521-- int *n_supported_scales)
1522-+meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
1523-+ MetaMonitorMode *monitor_mode,
1524-+ MetaMonitorScalesConstraint constraints,
1525-+ int *n_supported_scales)
1526- {
1527- unsigned int i, j;
1528- int width, height;
1529-diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
1530-index 41f2c0f..b24b1a5 100644
1531---- a/src/backends/meta-monitor.h
1532-+++ b/src/backends/meta-monitor.h
1533-@@ -226,10 +226,10 @@ float meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
1534- MetaMonitorMode *monitor_mode);
1535-
1536- META_EXPORT_TEST
1537--float * meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
1538-- MetaMonitorMode *monitor_mode,
1539-- MetaMonitorScalesConstraint constraints,
1540-- int *n_supported_scales);
1541-+float * meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
1542-+ MetaMonitorMode *monitor_mode,
1543-+ MetaMonitorScalesConstraint constraints,
1544-+ int *n_supported_scales);
1545-
1546- META_EXPORT_TEST
1547- const char * meta_monitor_mode_get_id (MetaMonitorMode *monitor_mode);
1548-diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
1549-index c2c8ab5..c9a3cab 100644
1550---- a/src/backends/native/meta-monitor-manager-kms.c
1551-+++ b/src/backends/native/meta-monitor-manager-kms.c
1552-@@ -512,11 +512,11 @@ meta_monitor_manager_kms_calculate_monitor_mode_scale (MetaMonitorManager *manag
1553- }
1554-
1555- static float *
1556--meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager *manager,
1557-- MetaLogicalMonitorLayoutMode layout_mode,
1558-- MetaMonitor *monitor,
1559-- MetaMonitorMode *monitor_mode,
1560-- int *n_supported_scales)
1561-+meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager *manager,
1562-+ MetaLogicalMonitorLayoutMode layout_mode,
1563-+ MetaMonitor *monitor,
1564-+ MetaMonitorMode *monitor_mode,
1565-+ int *n_supported_scales)
1566- {
1567- MetaMonitorScalesConstraint constraints =
1568- META_MONITOR_SCALES_CONSTRAINT_NONE;
1569-diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
1570-index c3a33e5..784bbde 100644
1571---- a/src/backends/x11/meta-monitor-manager-xrandr.c
1572-+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
1573-@@ -929,11 +929,11 @@ ensure_supported_monitor_scales (MetaMonitorManager *manager)
1574- }
1575-
1576- static float *
1577--meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager *manager,
1578-- MetaLogicalMonitorLayoutMode layout_mode,
1579-- MetaMonitor *monitor,
1580-- MetaMonitorMode *monitor_mode,
1581-- int *n_supported_scales)
1582-+meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager *manager,
1583-+ MetaLogicalMonitorLayoutMode layout_mode,
1584-+ MetaMonitor *monitor,
1585-+ MetaMonitorMode *monitor_mode,
1586-+ int *n_supported_scales)
1587- {
1588- MetaMonitorManagerXrandr *manager_xrandr =
1589- META_MONITOR_MANAGER_XRANDR (manager);
1590-diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
1591-index d1b729c..45680ed 100644
1592---- a/src/tests/meta-monitor-manager-test.c
1593-+++ b/src/tests/meta-monitor-manager-test.c
1594-@@ -373,11 +373,11 @@ meta_monitor_manager_test_calculate_monitor_mode_scale (MetaMonitorManager *mana
1595- }
1596-
1597- static float *
1598--meta_monitor_manager_test_calculate_supported_scales (MetaMonitorManager *manager,
1599-- MetaLogicalMonitorLayoutMode layout_mode,
1600-- MetaMonitor *monitor,
1601-- MetaMonitorMode *monitor_mode,
1602-- int *n_supported_scales)
1603-+meta_monitor_manager_test_calculate_supported_scales (MetaMonitorManager *manager,
1604-+ MetaLogicalMonitorLayoutMode layout_mode,
1605-+ MetaMonitor *monitor,
1606-+ MetaMonitorMode *monitor_mode,
1607-+ int *n_supported_scales)
1608- {
1609- MetaMonitorScalesConstraint constraints =
1610- META_MONITOR_SCALES_CONSTRAINT_NONE;
1611diff --git a/debian/patches/monitor-Fix-indentation-style-on-foreach-functions.patch b/debian/patches/monitor-Fix-indentation-style-on-foreach-functions.patch
1612deleted file mode 100644
1613index b719f23..0000000
1614--- a/debian/patches/monitor-Fix-indentation-style-on-foreach-functions.patch
1615+++ /dev/null
1616@@ -1,86 +0,0 @@
1617-From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
1618-Date: Fri, 8 Mar 2019 18:17:40 +0000
1619-Subject: monitor: Fix indentation style on foreach functions
1620-
1621-https://gitlab.gnome.org/GNOME/mutter/merge_requests/488
1622-
1623-Origin: upstream, commit:03e02bdac58f25df3b5e15525fd9bab06e49bf8
1624-Applied-Upstream: 3.32.1
1625----
1626- src/backends/meta-monitor.c | 20 ++++++++++----------
1627- src/backends/meta-monitor.h | 24 ++++++++++++------------
1628- 2 files changed, 22 insertions(+), 22 deletions(-)
1629-
1630-diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
1631-index 1c6e844..22a3e45 100644
1632---- a/src/backends/meta-monitor.c
1633-+++ b/src/backends/meta-monitor.c
1634-@@ -1725,11 +1725,11 @@ meta_monitor_mode_get_flags (MetaMonitorMode *monitor_mode)
1635- }
1636-
1637- gboolean
1638--meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
1639-- MetaMonitorMode *mode,
1640-- MetaMonitorModeFunc func,
1641-- gpointer user_data,
1642-- GError **error)
1643-+meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
1644-+ MetaMonitorMode *mode,
1645-+ MetaMonitorModeFunc func,
1646-+ gpointer user_data,
1647-+ GError **error)
1648- {
1649- MetaMonitorPrivate *monitor_priv =
1650- meta_monitor_get_instance_private (monitor);
1651-@@ -1751,11 +1751,11 @@ meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
1652- }
1653-
1654- gboolean
1655--meta_monitor_mode_foreach_output (MetaMonitor *monitor,
1656-- MetaMonitorMode *mode,
1657-- MetaMonitorModeFunc func,
1658-- gpointer user_data,
1659-- GError **error)
1660-+meta_monitor_mode_foreach_output (MetaMonitor *monitor,
1661-+ MetaMonitorMode *mode,
1662-+ MetaMonitorModeFunc func,
1663-+ gpointer user_data,
1664-+ GError **error)
1665- {
1666- MetaMonitorPrivate *monitor_priv =
1667- meta_monitor_get_instance_private (monitor);
1668-diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
1669-index c3ba4cf..413a4e2 100644
1670---- a/src/backends/meta-monitor.h
1671-+++ b/src/backends/meta-monitor.h
1672-@@ -249,18 +249,18 @@ META_EXPORT_TEST
1673- MetaCrtcModeFlag meta_monitor_mode_get_flags (MetaMonitorMode *monitor_mode);
1674-
1675- META_EXPORT_TEST
1676--gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
1677-- MetaMonitorMode *mode,
1678-- MetaMonitorModeFunc func,
1679-- gpointer user_data,
1680-- GError **error);
1681--
1682--META_EXPORT_TEST
1683--gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
1684-- MetaMonitorMode *mode,
1685-- MetaMonitorModeFunc func,
1686-- gpointer user_data,
1687-- GError **error);
1688-+gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
1689-+ MetaMonitorMode *mode,
1690-+ MetaMonitorModeFunc func,
1691-+ gpointer user_data,
1692-+ GError **error);
1693-+
1694-+META_EXPORT_TEST
1695-+gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
1696-+ MetaMonitorMode *mode,
1697-+ MetaMonitorModeFunc func,
1698-+ gpointer user_data,
1699-+ GError **error);
1700-
1701- META_EXPORT_TEST
1702- gboolean meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode);
1703diff --git a/debian/patches/prefs-Change-default-of-show-fallback-app-menu.patch b/debian/patches/prefs-Change-default-of-show-fallback-app-menu.patch
1704deleted file mode 100644
1705index 6ad4427..0000000
1706--- a/debian/patches/prefs-Change-default-of-show-fallback-app-menu.patch
1707+++ /dev/null
1708@@ -1,29 +0,0 @@
1709-From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
1710-Date: Sun, 10 Mar 2019 19:30:12 +0100
1711-Subject: prefs: Change default of show-fallback-app-menu
1712-
1713-The app menu always was a GNOME-only thing, so after it was removed this
1714-cycle, assuming that it is not displayed by the environment is a better
1715-default.
1716-
1717-https://gitlab.gnome.org/GNOME/mutter/issues/493
1718-
1719-Origin: upstream, commit:574099449fd7cf78c226bdf9d3d5a414d4bd351
1720-Applied-Upstream: 3.32.1
1721----
1722- src/core/prefs.c | 2 +-
1723- 1 file changed, 1 insertion(+), 1 deletion(-)
1724-
1725-diff --git a/src/core/prefs.c b/src/core/prefs.c
1726-index fdee5b2..3f0db8a 100644
1727---- a/src/core/prefs.c
1728-+++ b/src/core/prefs.c
1729-@@ -111,7 +111,7 @@ static gboolean resize_with_right_button = FALSE;
1730- static gboolean edge_tiling = FALSE;
1731- static gboolean force_fullscreen = TRUE;
1732- static gboolean auto_maximize = TRUE;
1733--static gboolean show_fallback_app_menu = FALSE;
1734-+static gboolean show_fallback_app_menu = TRUE;
1735-
1736- static GDesktopVisualBellType visual_bell_type = G_DESKTOP_VISUAL_BELL_FULLSCREEN_FLASH;
1737- static MetaButtonLayout button_layout;
1738diff --git a/debian/patches/series b/debian/patches/series
1739index 5b6232c..5e2b370 100644
1740--- a/debian/patches/series
1741+++ b/debian/patches/series
1742@@ -1,15 +1,3 @@
1743-prefs-Change-default-of-show-fallback-app-menu.patch
1744-keybindings-Fix-theoretical-memory-leak-while-ungrabbing.patch
1745-meta-monitor-Remove-useless-variable.patch
1746-cogl-Remove-unused-CoglTextureDriver-try_setting_gl_borde.patch
1747-cogl-Introspect-CoglTexture2D-Sliced.patch
1748-shadow-factory-Update-shadow-of-attached-modals.patch
1749-monitor-Fix-indentation-style-on-calculate_supported_scal.patch
1750-monitor-Fix-indentation-style-on-calculate_crtc_pos-and-f.patch
1751-monitor-Fix-indentation-style-on-foreach-functions.patch
1752-bell-Always-flash-window-instead-of-frame.patch
1753-frame-Remove-flashing-support.patch
1754-boxes-Actually-check-for-rectangle-containment.patch
1755 theme-use-gtk_render_icon_suface-to-paint-button-icon.patch
1756 theme-load-icons-as-Gtk-does-with-fallback-and-RTL-suppor.patch
1757 meson-add-back-default_driver-option.patch
1758diff --git a/debian/patches/shadow-factory-Update-shadow-of-attached-modals.patch b/debian/patches/shadow-factory-Update-shadow-of-attached-modals.patch
1759deleted file mode 100644
1760index a46c881..0000000
1761--- a/debian/patches/shadow-factory-Update-shadow-of-attached-modals.patch
1762+++ /dev/null
1763@@ -1,29 +0,0 @@
1764-From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
1765-Date: Wed, 6 Mar 2019 23:31:43 +0100
1766-Subject: shadow-factory: Update shadow of attached modals
1767-
1768-When commit 91c6a144da synced shadows with Adwaita, it removed the
1769-shadow completely from attached modal dialogs. However Adwaita uses
1770-the same shadow for all dialogs (modal or not), so do the same here.
1771-
1772-https://gitlab.gnome.org/GNOME/mutter/issues/490
1773-
1774-Origin: upstream, commit:a87e87a05fb29e8e9aad5df5c7752b6db20535e
1775-Applied-Upstream: 3.32.1
1776----
1777- src/compositor/meta-shadow-factory.c | 2 +-
1778- 1 file changed, 1 insertion(+), 1 deletion(-)
1779-
1780-diff --git a/src/compositor/meta-shadow-factory.c b/src/compositor/meta-shadow-factory.c
1781-index 9fdecac..0eb14c9 100644
1782---- a/src/compositor/meta-shadow-factory.c
1783-+++ b/src/compositor/meta-shadow-factory.c
1784-@@ -128,7 +128,7 @@ MetaShadowClassInfo default_shadow_classes[] = {
1785- { "popup-menu", { 1, -1, 0, 0, 128 }, { 1, -1, 0, 0, 128 } },
1786- { "dropdown-menu", { 1, -1, 0, 0, 128 }, { 1, -1, 0, 0, 128 } },
1787-
1788-- { "attached", { 0, -1, 0, 0, 0 }, { 0, -1, 0, 0, 0 } }
1789-+ { "attached", { 10, -1, 0, 3, 128 }, { 8, -1, 0, 2, 64 } }
1790- };
1791-
1792- G_DEFINE_TYPE (MetaShadowFactory, meta_shadow_factory, G_TYPE_OBJECT);
1793diff --git a/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch b/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch
1794index 90c17a9..7717be1 100644
1795--- a/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch
1796+++ b/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch
1797@@ -122,7 +122,7 @@ index ddacfea..8d16455 100644
1798 MetaLogicalMonitor *logical_monitor;
1799
1800 diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
1801-index 771c57f..5d620a3 100644
1802+index 9a54ce5..7084522 100644
1803 --- a/src/backends/meta-monitor-config-manager.c
1804 +++ b/src/backends/meta-monitor-config-manager.c
1805 @@ -152,6 +152,7 @@ find_unassigned_crtc (MetaOutput *output,
1806@@ -623,7 +623,7 @@ index 46c3b8c..29fde36 100644
1807 settings,
1808 META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER))
1809 diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
1810-index 3b951c6..2ba9ced 100644
1811+index cdb8f42..bf586ea 100644
1812 --- a/src/backends/meta-monitor-manager-private.h
1813 +++ b/src/backends/meta-monitor-manager-private.h
1814 @@ -44,7 +44,9 @@ typedef enum _MetaMonitorManagerCapability
1815@@ -655,7 +655,7 @@ index 3b951c6..2ba9ced 100644
1816 MetaMonitorTransform transform;
1817 GPtrArray *outputs;
1818 };
1819-@@ -126,6 +130,7 @@ struct _MetaMonitorManager
1820+@@ -124,6 +128,7 @@ struct _MetaMonitorManager
1821 GList *gpus;
1822
1823 GList *monitors;
1824@@ -663,7 +663,7 @@ index 3b951c6..2ba9ced 100644
1825
1826 GList *logical_monitors;
1827 MetaLogicalMonitor *primary_logical_monitor;
1828-@@ -156,6 +161,9 @@ struct _MetaMonitorManager
1829+@@ -154,6 +159,9 @@ struct _MetaMonitorManager
1830 * @apply_monitors_config: Tries to apply the given config using the given
1831 * method. Throws an error if something went wrong.
1832 *
1833@@ -697,7 +697,7 @@ index 3b951c6..2ba9ced 100644
1834
1835 float * (*calculate_supported_scales) (MetaMonitorManager *,
1836 MetaLogicalMonitorLayoutMode ,
1837-@@ -350,9 +362,10 @@ void meta_monitor_manager_lid_is_closed_changed (MetaMonitorManage
1838+@@ -355,9 +367,10 @@ void meta_monitor_manager_lid_is_closed_changed (MetaMonitorManage
1839
1840 gboolean meta_monitor_manager_is_headless (MetaMonitorManager *manager);
1841
1842@@ -711,7 +711,7 @@ index 3b951c6..2ba9ced 100644
1843
1844 float * meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *,
1845 MetaLogicalMonitorLayoutMode ,
1846-@@ -366,6 +379,11 @@ gboolean meta_monitor_manager_is_scale_supported (MetaMonitorManager
1847+@@ -371,6 +384,11 @@ gboolean meta_monitor_manager_is_scale_supported (MetaMonitorManager
1848 MetaMonitorMode *monitor_mode,
1849 float scale);
1850
1851@@ -724,10 +724,10 @@ index 3b951c6..2ba9ced 100644
1852 meta_monitor_manager_get_capabilities (MetaMonitorManager *manager);
1853
1854 diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
1855-index c4ed245..d055eec 100644
1856+index 2d898c7..a78fb37 100644
1857 --- a/src/backends/meta-monitor-manager.c
1858 +++ b/src/backends/meta-monitor-manager.c
1859-@@ -104,8 +104,18 @@ static gboolean
1860+@@ -110,8 +110,18 @@ static gboolean
1861 meta_monitor_manager_is_config_complete (MetaMonitorManager *manager,
1862 MetaMonitorsConfig *config);
1863
1864@@ -746,9 +746,9 @@ index c4ed245..d055eec 100644
1865 + float threshold,
1866 + float *out_scale);
1867
1868- MetaBackend *
1869- meta_monitor_manager_get_backend (MetaMonitorManager *manager)
1870-@@ -190,15 +200,41 @@ meta_monitor_manager_rebuild_logical_monitors (MetaMonitorManager *manager,
1871+ static void
1872+ meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager);
1873+@@ -199,15 +209,41 @@ meta_monitor_manager_rebuild_logical_monitors (MetaMonitorManager *manager,
1874 primary_logical_monitor);
1875 }
1876
1877@@ -793,7 +793,7 @@ index c4ed245..d055eec 100644
1878 }
1879
1880 static float
1881-@@ -209,24 +245,70 @@ calculate_monitor_scale (MetaMonitorManager *manager,
1882+@@ -218,24 +254,70 @@ calculate_monitor_scale (MetaMonitorManager *manager,
1883
1884 monitor_mode = meta_monitor_get_current_mode (monitor);
1885 return meta_monitor_manager_calculate_monitor_mode_scale (manager,
1886@@ -869,7 +869,7 @@ index c4ed245..d055eec 100644
1887 }
1888
1889 static float
1890-@@ -248,6 +330,44 @@ derive_scale_from_config (MetaMonitorManager *manager,
1891+@@ -257,6 +339,44 @@ derive_scale_from_config (MetaMonitorManager *manager,
1892 return 1.0;
1893 }
1894
1895@@ -914,7 +914,7 @@ index c4ed245..d055eec 100644
1896 static void
1897 meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manager,
1898 MetaMonitorsConfig *config)
1899-@@ -296,10 +416,16 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manag
1900+@@ -305,10 +425,16 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manag
1901
1902 if (use_global_scale)
1903 scale = global_scale;
1904@@ -934,7 +934,7 @@ index c4ed245..d055eec 100644
1905
1906 g_assert (scale > 0);
1907
1908-@@ -387,14 +513,19 @@ meta_monitor_manager_is_headless (MetaMonitorManager *manager)
1909+@@ -407,14 +533,19 @@ meta_monitor_manager_is_headless (MetaMonitorManager *manager)
1910 }
1911
1912 float
1913@@ -957,7 +957,7 @@ index c4ed245..d055eec 100644
1914 monitor,
1915 monitor_mode);
1916 }
1917-@@ -508,7 +639,8 @@ static gboolean
1918+@@ -528,7 +659,8 @@ static gboolean
1919 should_use_stored_config (MetaMonitorManager *manager)
1920 {
1921 return (manager->in_init ||
1922@@ -967,7 +967,7 @@ index c4ed245..d055eec 100644
1923 }
1924
1925 MetaMonitorsConfig *
1926-@@ -700,6 +832,8 @@ experimental_features_changed (MetaSettings *settings,
1927+@@ -720,6 +852,8 @@ experimental_features_changed (MetaSettings *settings,
1928 {
1929 gboolean was_stage_views_scaled;
1930 gboolean is_stage_views_scaled;
1931@@ -976,7 +976,7 @@ index c4ed245..d055eec 100644
1932 gboolean should_reconfigure = FALSE;
1933
1934 was_stage_views_scaled =
1935-@@ -709,8 +843,16 @@ experimental_features_changed (MetaSettings *settings,
1936+@@ -729,8 +863,16 @@ experimental_features_changed (MetaSettings *settings,
1937 meta_settings_is_experimental_feature_enabled (
1938 settings,
1939 META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER);
1940@@ -994,7 +994,7 @@ index c4ed245..d055eec 100644
1941 should_reconfigure = TRUE;
1942
1943 if (should_reconfigure)
1944-@@ -1316,6 +1458,41 @@ request_persistent_confirmation (MetaMonitorManager *manager)
1945+@@ -1337,6 +1479,41 @@ request_persistent_confirmation (MetaMonitorManager *manager)
1946 g_signal_emit (manager, signals[CONFIRM_DISPLAY_CHANGE], 0);
1947 }
1948
1949@@ -1036,7 +1036,7 @@ index c4ed245..d055eec 100644
1950 #define META_DISPLAY_CONFIG_MODE_FLAGS_PREFERRED (1 << 0)
1951 #define META_DISPLAY_CONFIG_MODE_FLAGS_CURRENT (1 << 1)
1952
1953-@@ -1343,6 +1520,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1954+@@ -1364,6 +1541,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1955 MetaMonitorManagerCapability capabilities;
1956 int ui_scaling_factor;
1957 int max_screen_width, max_screen_height;
1958@@ -1044,7 +1044,7 @@ index c4ed245..d055eec 100644
1959
1960 g_variant_builder_init (&monitors_builder,
1961 G_VARIANT_TYPE (MONITORS_FORMAT));
1962-@@ -1389,6 +1567,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1963+@@ -1410,6 +1588,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1964
1965 preferred_scale =
1966 meta_monitor_manager_calculate_monitor_mode_scale (manager,
1967@@ -1052,7 +1052,7 @@ index c4ed245..d055eec 100644
1968 monitor,
1969 monitor_mode);
1970
1971-@@ -1496,6 +1675,14 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1972+@@ -1517,6 +1696,14 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1973 }
1974
1975 g_variant_builder_init (&properties_builder, G_VARIANT_TYPE ("a{sv}"));
1976@@ -1067,7 +1067,7 @@ index c4ed245..d055eec 100644
1977 capabilities = meta_monitor_manager_get_capabilities (manager);
1978 if ((capabilities & META_MONITOR_MANAGER_CAPABILITY_MIRRORING) == 0)
1979 {
1980-@@ -1520,6 +1707,13 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1981+@@ -1541,6 +1728,13 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1982 "global-scale-required",
1983 g_variant_new_boolean (TRUE));
1984 }
1985@@ -1081,7 +1081,7 @@ index c4ed245..d055eec 100644
1986
1987 ui_scaling_factor = meta_settings_get_ui_scaling_factor (settings);
1988 g_variant_builder_add (&properties_builder, "{sv}",
1989-@@ -1564,12 +1758,14 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1990+@@ -1585,12 +1779,14 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
1991 #undef LOGICAL_MONITOR_FORMAT
1992 #undef LOGICAL_MONITORS_FORMAT
1993
1994@@ -1102,7 +1102,7 @@ index c4ed245..d055eec 100644
1995 {
1996 g_autofree float *supported_scales = NULL;
1997 int n_supported_scales;
1998-@@ -1583,8 +1779,66 @@ meta_monitor_manager_is_scale_supported (MetaMonitorManager *manager,
1999+@@ -1604,8 +1800,66 @@ meta_monitor_manager_is_scale_supported (MetaMonitorManager *manager,
2000 &n_supported_scales);
2001 for (i = 0; i < n_supported_scales; i++)
2002 {
2003@@ -1171,7 +1171,7 @@ index c4ed245..d055eec 100644
2004 }
2005
2006 return FALSE;
2007-@@ -1628,11 +1882,11 @@ meta_monitor_manager_is_config_applicable (MetaMonitorManager *manager,
2008+@@ -1649,11 +1903,11 @@ meta_monitor_manager_is_config_applicable (MetaMonitorManager *manager,
2009 return FALSE;
2010 }
2011
2012@@ -1188,7 +1188,7 @@ index c4ed245..d055eec 100644
2013 {
2014 g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
2015 "Scale not supported by backend");
2016-@@ -1841,6 +2095,7 @@ derive_logical_monitor_size (MetaMonitorConfig *monitor_config,
2017+@@ -1862,6 +2116,7 @@ derive_logical_monitor_size (MetaMonitorConfig *monitor_config,
2018 switch (layout_mode)
2019 {
2020 case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
2021@@ -1196,7 +1196,7 @@ index c4ed245..d055eec 100644
2022 width = roundf (width / scale);
2023 height = roundf (height / scale);
2024 break;
2025-@@ -1963,6 +2218,7 @@ is_valid_layout_mode (MetaLogicalMonitorLayoutMode layout_mode)
2026+@@ -1984,6 +2239,7 @@ is_valid_layout_mode (MetaLogicalMonitorLayoutMode layout_mode)
2027 {
2028 case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
2029 case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
2030@@ -1204,7 +1204,7 @@ index c4ed245..d055eec 100644
2031 return TRUE;
2032 }
2033
2034-@@ -1985,6 +2241,7 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
2035+@@ -2006,6 +2262,7 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
2036 MetaMonitorsConfig *config;
2037 GList *logical_monitor_configs = NULL;
2038 GError *error = NULL;
2039@@ -1212,7 +1212,7 @@ index c4ed245..d055eec 100644
2040
2041 if (serial != manager->serial)
2042 {
2043-@@ -2056,10 +2313,26 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
2044+@@ -2077,10 +2334,26 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
2045 return TRUE;
2046 }
2047
2048@@ -1239,7 +1239,7 @@ index c4ed245..d055eec 100644
2049 config = meta_monitors_config_new (manager,
2050 logical_monitor_configs,
2051 layout_mode,
2052-@@ -2497,12 +2770,6 @@ meta_monitor_manager_get_laptop_panel (MetaMonitorManager *manager)
2053+@@ -2518,12 +2791,6 @@ meta_monitor_manager_get_laptop_panel (MetaMonitorManager *manager)
2054 return find_monitor (manager, meta_monitor_is_laptop_panel);
2055 }
2056
2057@@ -1252,7 +1252,7 @@ index c4ed245..d055eec 100644
2058 MetaMonitor *
2059 meta_monitor_manager_get_monitor_from_connector (MetaMonitorManager *manager,
2060 const char *connector)
2061-@@ -2688,6 +2955,10 @@ static void
2062+@@ -2718,6 +2985,10 @@ static void
2063 rebuild_monitors (MetaMonitorManager *manager)
2064 {
2065 GList *l;
2066@@ -1263,7 +1263,7 @@ index c4ed245..d055eec 100644
2067
2068 if (manager->monitors)
2069 {
2070-@@ -2704,7 +2975,7 @@ rebuild_monitors (MetaMonitorManager *manager)
2071+@@ -2734,7 +3005,7 @@ rebuild_monitors (MetaMonitorManager *manager)
2072 {
2073 MetaOutput *output = k->data;
2074
2075@@ -1272,7 +1272,7 @@ index c4ed245..d055eec 100644
2076 {
2077 if (is_main_tiled_monitor_output (output))
2078 {
2079-@@ -2901,7 +3172,7 @@ meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
2080+@@ -2940,7 +3211,7 @@ meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
2081 else
2082 manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
2083
2084@@ -1281,7 +1281,7 @@ index c4ed245..d055eec 100644
2085
2086 meta_monitor_manager_rebuild_logical_monitors_derived (manager, config);
2087 }
2088-@@ -2910,10 +3181,14 @@ void
2089+@@ -2949,10 +3220,14 @@ void
2090 meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager,
2091 MetaMonitorsConfig *config)
2092 {
2093@@ -1633,10 +1633,10 @@ index 34d49b3..e54317e 100644
2094 g_signal_new ("experimental-features-changed",
2095 G_TYPE_FROM_CLASS (object_class),
2096 diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
2097-index c9a3cab..da3a619 100644
2098+index 9a03644..93905e6 100644
2099 --- a/src/backends/native/meta-monitor-manager-kms.c
2100 +++ b/src/backends/native/meta-monitor-manager-kms.c
2101-@@ -503,20 +503,8 @@ meta_monitor_manager_kms_is_transform_handled (MetaMonitorManager *manager,
2102+@@ -518,20 +518,8 @@ meta_monitor_manager_kms_is_transform_handled (MetaMonitorManager *manager,
2103 return meta_crtc_kms_is_transform_handled (crtc, transform);
2104 }
2105
2106@@ -1659,7 +1659,7 @@ index c9a3cab..da3a619 100644
2107 {
2108 MetaMonitorScalesConstraint constraints =
2109 META_MONITOR_SCALES_CONSTRAINT_NONE;
2110-@@ -524,12 +512,38 @@ meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager
2111+@@ -539,12 +527,38 @@ meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager
2112 switch (layout_mode)
2113 {
2114 case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
2115@@ -1698,7 +1698,7 @@ index c9a3cab..da3a619 100644
2116 return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
2117 constraints,
2118 n_supported_scales);
2119-@@ -543,7 +557,7 @@ meta_monitor_manager_kms_get_capabilities (MetaMonitorManager *manager)
2120+@@ -558,7 +572,7 @@ meta_monitor_manager_kms_get_capabilities (MetaMonitorManager *manager)
2121 MetaRenderer *renderer = meta_backend_get_renderer (backend);
2122 MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
2123 MetaMonitorManagerCapability capabilities =
2124@@ -1857,7 +1857,7 @@ index d38a09a..d3f2f60 100644
2125
2126 #endif /* META_CRTC_XRANDR_H */
2127 diff --git a/src/backends/x11/meta-gpu-xrandr.c b/src/backends/x11/meta-gpu-xrandr.c
2128-index 14b46d5..72243a1 100644
2129+index 3e8a731..e8fa3f5 100644
2130 --- a/src/backends/x11/meta-gpu-xrandr.c
2131 +++ b/src/backends/x11/meta-gpu-xrandr.c
2132 @@ -42,6 +42,8 @@ struct _MetaGpuXrandr
2133@@ -1945,14 +1945,12 @@ index 14b46d5..72243a1 100644
2134 static gboolean
2135 meta_gpu_xrandr_read_current (MetaGpu *gpu,
2136 GError **error)
2137-@@ -95,13 +159,14 @@ meta_gpu_xrandr_read_current (MetaGpu *gpu,
2138+@@ -95,19 +159,20 @@ meta_gpu_xrandr_read_current (MetaGpu *gpu,
2139 RROutput primary_output;
2140 unsigned int i, j;
2141 GList *l;
2142 - int min_width, min_height;
2143 Screen *screen;
2144- BOOL dpms_capable, dpms_enabled;
2145- CARD16 dpms_state;
2146 GList *outputs = NULL;
2147 GList *modes = NULL;
2148 GList *crtcs = NULL;
2149@@ -1961,8 +1959,7 @@ index 14b46d5..72243a1 100644
2150
2151 if (gpu_xrandr->resources)
2152 XRRFreeScreenResources (gpu_xrandr->resources);
2153-@@ -138,8 +203,8 @@ meta_gpu_xrandr_read_current (MetaGpu *gpu,
2154- }
2155+ gpu_xrandr->resources = NULL;
2156
2157 XRRGetScreenSizeRange (xdisplay, DefaultRootWindow (xdisplay),
2158 - &min_width,
2159@@ -1972,7 +1969,7 @@ index 14b46d5..72243a1 100644
2160 &gpu_xrandr->max_screen_width,
2161 &gpu_xrandr->max_screen_height);
2162
2163-@@ -182,17 +247,33 @@ meta_gpu_xrandr_read_current (MetaGpu *gpu,
2164+@@ -150,17 +215,33 @@ meta_gpu_xrandr_read_current (MetaGpu *gpu,
2165 }
2166 meta_gpu_take_modes (gpu, modes);
2167
2168@@ -2023,7 +2020,7 @@ index aad49d0..4ac32b9 100644
2169 int *max_width,
2170 int *max_height);
2171 diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
2172-index 784bbde..246b66d 100644
2173+index 45c81f4..7df4abc 100644
2174 --- a/src/backends/x11/meta-monitor-manager-xrandr.c
2175 +++ b/src/backends/x11/meta-monitor-manager-xrandr.c
2176 @@ -63,6 +63,9 @@
2177@@ -2068,7 +2065,7 @@ index 784bbde..246b66d 100644
2178 }
2179
2180 static GBytes *
2181-@@ -149,6 +150,57 @@ meta_monitor_manager_xrandr_set_power_save_mode (MetaMonitorManager *manager,
2182+@@ -193,6 +194,57 @@ meta_monitor_manager_xrandr_set_power_save_mode (MetaMonitorManager *manager,
2183 DPMSSetTimeouts (manager_xrandr->xdisplay, 0, 0, 0);
2184 }
2185
2186@@ -2126,7 +2123,7 @@ index 784bbde..246b66d 100644
2187 static xcb_randr_rotation_t
2188 meta_monitor_transform_to_xrandr (MetaMonitorTransform transform)
2189 {
2190-@@ -203,13 +255,36 @@ xrandr_set_crtc_config (MetaMonitorManagerXrandr *manager_xrandr,
2191+@@ -247,13 +299,36 @@ xrandr_set_crtc_config (MetaMonitorManagerXrandr *manager_xrandr,
2192 return TRUE;
2193 }
2194
2195@@ -2166,7 +2163,7 @@ index 784bbde..246b66d 100644
2196 for (i = 0; i < n_crtc_infos; i++)
2197 {
2198 MetaCrtcInfo *crtc_info = crtc_infos[i];
2199-@@ -230,6 +305,37 @@ is_crtc_assignment_changed (MetaCrtc *crtc,
2200+@@ -274,6 +349,37 @@ is_crtc_assignment_changed (MetaCrtc *crtc,
2201 if (crtc->transform != crtc_info->transform)
2202 return TRUE;
2203
2204@@ -2204,7 +2201,7 @@ index 784bbde..246b66d 100644
2205 for (j = 0; j < crtc_info->outputs->len; j++)
2206 {
2207 MetaOutput *output = ((MetaOutput**) crtc_info->outputs->pdata)[j];
2208-@@ -315,7 +421,7 @@ is_assignments_changed (MetaMonitorManager *manager,
2209+@@ -359,7 +465,7 @@ is_assignments_changed (MetaMonitorManager *manager,
2210 {
2211 MetaCrtc *crtc = l->data;
2212
2213@@ -2213,7 +2210,7 @@ index 784bbde..246b66d 100644
2214 return TRUE;
2215 }
2216
2217-@@ -331,6 +437,32 @@ is_assignments_changed (MetaMonitorManager *manager,
2218+@@ -375,6 +481,32 @@ is_assignments_changed (MetaMonitorManager *manager,
2219 return TRUE;
2220 }
2221
2222@@ -2246,7 +2243,7 @@ index 784bbde..246b66d 100644
2223 return FALSE;
2224 }
2225
2226-@@ -343,33 +475,57 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2227+@@ -387,33 +519,57 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2228 unsigned int n_outputs)
2229 {
2230 MetaMonitorManagerXrandr *manager_xrandr = META_MONITOR_MANAGER_XRANDR (manager);
2231@@ -2311,7 +2308,7 @@ index 784bbde..246b66d 100644
2232 }
2233
2234 /* Second disable all newly disabled CRTCs, or CRTCs that in the previous
2235-@@ -394,12 +550,16 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2236+@@ -438,12 +594,16 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2237 0, 0, XCB_NONE,
2238 XCB_RANDR_ROTATION_ROTATE_0,
2239 NULL, 0);
2240@@ -2328,7 +2325,7 @@ index 784bbde..246b66d 100644
2241 }
2242 }
2243
2244-@@ -424,25 +584,20 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2245+@@ -468,25 +628,20 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2246 0, 0, XCB_NONE,
2247 XCB_RANDR_ROTATION_ROTATE_0,
2248 NULL, 0);
2249@@ -2360,7 +2357,7 @@ index 784bbde..246b66d 100644
2250
2251 for (i = 0; i < n_crtcs; i++)
2252 {
2253-@@ -455,12 +610,21 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2254+@@ -499,12 +654,21 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2255 g_autofree xcb_randr_output_t *output_ids = NULL;
2256 unsigned int j, n_output_ids;
2257 xcb_randr_rotation_t rotation;
2258@@ -2382,7 +2379,7 @@ index 784bbde..246b66d 100644
2259 for (j = 0; j < n_output_ids; j++)
2260 {
2261 MetaOutput *output;
2262-@@ -473,6 +637,20 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2263+@@ -517,6 +681,20 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2264 output_ids[j] = output->winsys_id;
2265 }
2266
2267@@ -2403,7 +2400,7 @@ index 784bbde..246b66d 100644
2268 rotation = meta_monitor_transform_to_xrandr (crtc_info->transform);
2269 if (!xrandr_set_crtc_config (manager_xrandr,
2270 crtc,
2271-@@ -508,6 +686,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2272+@@ -552,6 +730,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
2273 crtc->rect.height = height;
2274 crtc->current_mode = mode;
2275 crtc->transform = crtc_info->transform;
2276@@ -2411,7 +2408,7 @@ index 784bbde..246b66d 100644
2277 }
2278 }
2279
2280-@@ -563,14 +742,61 @@ meta_monitor_manager_xrandr_ensure_initial_config (MetaMonitorManager *manager)
2281+@@ -607,14 +786,61 @@ meta_monitor_manager_xrandr_ensure_initial_config (MetaMonitorManager *manager)
2282 }
2283
2284 static void
2285@@ -2477,7 +2474,7 @@ index 784bbde..246b66d 100644
2286 }
2287
2288 static gboolean
2289-@@ -584,7 +810,7 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
2290+@@ -628,7 +854,7 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
2291
2292 if (!config)
2293 {
2294@@ -2486,7 +2483,7 @@ index 784bbde..246b66d 100644
2295 return TRUE;
2296 }
2297
2298-@@ -609,16 +835,26 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
2299+@@ -653,16 +879,26 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
2300 (MetaOutputInfo **) output_infos->pdata,
2301 output_infos->len))
2302 {
2303@@ -2514,7 +2511,7 @@ index 784bbde..246b66d 100644
2304 }
2305 }
2306
2307-@@ -748,7 +984,8 @@ meta_monitor_manager_xrandr_tiled_monitor_added (MetaMonitorManager *manager,
2308+@@ -792,7 +1028,8 @@ meta_monitor_manager_xrandr_tiled_monitor_added (MetaMonitorManager *manager,
2309 GList *l;
2310 int i;
2311
2312@@ -2524,7 +2521,7 @@ index 784bbde..246b66d 100644
2313 return;
2314
2315 product = meta_monitor_get_product (monitor);
2316-@@ -797,7 +1034,8 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager,
2317+@@ -841,7 +1078,8 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager,
2318
2319 int monitor_count;
2320
2321@@ -2534,7 +2531,7 @@ index 784bbde..246b66d 100644
2322 return;
2323
2324 monitor_xrandr_data = meta_monitor_xrandr_data_from_monitor (monitor);
2325-@@ -815,10 +1053,12 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager,
2326+@@ -859,10 +1097,12 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager,
2327 static void
2328 meta_monitor_manager_xrandr_init_monitors (MetaMonitorManagerXrandr *manager_xrandr)
2329 {
2330@@ -2548,7 +2545,7 @@ index 784bbde..246b66d 100644
2331 return;
2332
2333 /* delete any tiled monitors setup, as mutter will want to recreate
2334-@@ -849,83 +1089,26 @@ meta_monitor_manager_xrandr_is_transform_handled (MetaMonitorManager *manager,
2335+@@ -893,83 +1133,26 @@ meta_monitor_manager_xrandr_is_transform_handled (MetaMonitorManager *manager,
2336 return TRUE;
2337 }
2338
2339@@ -2646,7 +2643,7 @@ index 784bbde..246b66d 100644
2340 }
2341
2342 static float *
2343-@@ -935,21 +1118,35 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager
2344+@@ -979,21 +1162,35 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager
2345 MetaMonitorMode *monitor_mode,
2346 int *n_supported_scales)
2347 {
2348@@ -2692,7 +2689,7 @@ index 784bbde..246b66d 100644
2349 }
2350
2351 static gboolean
2352-@@ -966,9 +1163,34 @@ meta_monitor_manager_xrandr_get_max_screen_size (MetaMonitorManager *manager,
2353+@@ -1010,9 +1207,34 @@ meta_monitor_manager_xrandr_get_max_screen_size (MetaMonitorManager *manager,
2354 return TRUE;
2355 }
2356
2357@@ -2727,7 +2724,7 @@ index 784bbde..246b66d 100644
2358 return META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
2359 }
2360
2361-@@ -978,10 +1200,11 @@ meta_monitor_manager_xrandr_constructed (GObject *object)
2362+@@ -1022,10 +1244,11 @@ meta_monitor_manager_xrandr_constructed (GObject *object)
2363 MetaMonitorManagerXrandr *manager_xrandr =
2364 META_MONITOR_MANAGER_XRANDR (object);
2365 MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_xrandr);
2366@@ -2742,7 +2739,7 @@ index 784bbde..246b66d 100644
2367
2368 manager_xrandr->gpu = META_GPU (meta_gpu_xrandr_new (manager_xrandr));
2369 meta_monitor_manager_add_gpu (manager, manager_xrandr->gpu);
2370-@@ -1003,19 +1226,19 @@ meta_monitor_manager_xrandr_constructed (GObject *object)
2371+@@ -1047,19 +1270,19 @@ meta_monitor_manager_xrandr_constructed (GObject *object)
2372 | RRCrtcChangeNotifyMask
2373 | RROutputPropertyNotifyMask);
2374
2375@@ -2770,7 +2767,7 @@ index 784bbde..246b66d 100644
2376 G_OBJECT_CLASS (meta_monitor_manager_xrandr_parent_class)->constructed (object);
2377 }
2378
2379-@@ -1026,7 +1249,6 @@ meta_monitor_manager_xrandr_finalize (GObject *object)
2380+@@ -1070,7 +1293,6 @@ meta_monitor_manager_xrandr_finalize (GObject *object)
2381
2382 g_clear_object (&manager_xrandr->gpu);
2383 g_hash_table_destroy (manager_xrandr->tiled_monitor_atoms);
2384@@ -2778,15 +2775,15 @@ index 784bbde..246b66d 100644
2385
2386 G_OBJECT_CLASS (meta_monitor_manager_xrandr_parent_class)->finalize (object);
2387 }
2388-@@ -1048,6 +1270,7 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
2389- manager_class->read_edid = meta_monitor_manager_xrandr_read_edid;
2390+@@ -1093,6 +1315,7 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
2391+ manager_class->read_current_state = meta_monitor_manager_xrandr_read_current_state;
2392 manager_class->ensure_initial_config = meta_monitor_manager_xrandr_ensure_initial_config;
2393 manager_class->apply_monitors_config = meta_monitor_manager_xrandr_apply_monitors_config;
2394 + manager_class->update_screen_size_derived = meta_monitor_manager_xrandr_update_screen_size_derived;
2395 manager_class->set_power_save_mode = meta_monitor_manager_xrandr_set_power_save_mode;
2396 manager_class->change_backlight = meta_monitor_manager_xrandr_change_backlight;
2397 manager_class->get_crtc_gamma = meta_monitor_manager_xrandr_get_crtc_gamma;
2398-@@ -1108,7 +1331,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
2399+@@ -1153,7 +1376,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
2400 config = NULL;
2401 }
2402
2403@@ -2931,7 +2928,7 @@ index 0854a19..e412784 100644
2404 }
2405 }
2406 diff --git a/src/core/boxes-private.h b/src/core/boxes-private.h
2407-index 24c596b..f92837a 100644
2408+index 74f5c54..0b37f0f 100644
2409 --- a/src/core/boxes-private.h
2410 +++ b/src/core/boxes-private.h
2411 @@ -157,6 +157,10 @@ gboolean meta_rectangle_overlaps_with_region (
2412@@ -2946,7 +2943,7 @@ index 24c596b..f92837a 100644
2413 * but make it no smaller than min_size.
2414 */
2415 diff --git a/src/core/boxes.c b/src/core/boxes.c
2416-index 87f2d5d..95978c1 100644
2417+index 4bb961c..69fd45f 100644
2418 --- a/src/core/boxes.c
2419 +++ b/src/core/boxes.c
2420 @@ -911,6 +911,27 @@ meta_rectangle_overlaps_with_region (const GList *spanning_rects,
2421@@ -2966,7 +2963,7 @@ index 87f2d5d..95978c1 100644
2422 + if (rect == other || meta_rectangle_equal (rect, other))
2423 + continue;
2424 +
2425-+ if (meta_rectangle_is_adjecent_to ((MetaRectangle *) rect, other))
2426++ if (meta_rectangle_is_adjacent_to ((MetaRectangle *) rect, other))
2427 + {
2428 + return TRUE;
2429 + }
2430@@ -2978,7 +2975,7 @@ index 87f2d5d..95978c1 100644
2431 void
2432 meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,
2433 diff --git a/src/core/window.c b/src/core/window.c
2434-index 62b2df8..d1cf7c3 100644
2435+index d2c2450..bb2e459 100644
2436 --- a/src/core/window.c
2437 +++ b/src/core/window.c
2438 @@ -226,6 +226,7 @@ enum
2439diff --git a/debian/rules b/debian/rules
2440index 4e6d9c1..2047ed8 100755
2441--- a/debian/rules
2442+++ b/debian/rules
2443@@ -4,7 +4,7 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all
2444 export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 -Wl,--as-needed
2445
2446 %:
2447- dh $@ --with gir,gnome --buildsystem=meson
2448+ dh $@
2449
2450 override_dh_autoreconf:
2451 dh_autoreconf --as-needed
2452diff --git a/meson.build b/meson.build
2453index dc210e6..6ce9e59 100644
2454--- a/meson.build
2455+++ b/meson.build
2456@@ -178,7 +178,7 @@ if have_native_backend
2457 libgbm_dep = dependency('gbm', version: gbm_req)
2458 libinput_dep = dependency('libinput', version: libinput_req)
2459
2460- libsystemd_dep = dependency('libsystemd')
2461+ libsystemd_dep = dependency('libsystemd', required: false)
2462 if libsystemd_dep.found()
2463 logind_provider_dep = libsystemd_dep
2464 else
2465diff --git a/po/ar.po b/po/ar.po
2466index 4f26451..82df3c2 100644
2467--- a/po/ar.po
2468+++ b/po/ar.po
2469@@ -4,15 +4,14 @@
2470 # Arafat Medini <lumina@silverpen.de>, 2003.
2471 # Abdulaziz Al-Arfaj <alarfaj0@yahoo.com>, 2004.
2472 # Djihed Afifi <djihed@gmail.com>, 2006.
2473-# Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017.
2474+# Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2019.
2475 # Anas Afif Emad <anas.e87@gmail.com>, 2008.
2476 msgid ""
2477 msgstr ""
2478 "Project-Id-Version: metacity.HEAD\n"
2479-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
2480-"keywords=I18N+L10N&component=general\n"
2481-"POT-Creation-Date: 2017-11-03 10:20+0200\n"
2482-"PO-Revision-Date: 2017-11-03 10:22+0200\n"
2483+"Report-Msgid-Bugs-To: \n"
2484+"POT-Creation-Date: 2019-03-15 23:40+0200\n"
2485+"PO-Revision-Date: 2019-03-15 23:42+0200\n"
2486 "Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
2487 "Language-Team: Arabic <doc@arabeyes.org>\n"
2488 "Language: ar\n"
2489@@ -21,126 +20,599 @@ msgstr ""
2490 "Content-Transfer-Encoding: 8bit\n"
2491 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
2492 "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
2493-"X-Generator: Virtaal 1.0.0-beta1\n"
2494+"X-Generator: Virtaal 0.7.1\n"
2495 "X-Project-Style: gnome\n"
2496
2497+#: data/50-mutter-navigation.xml:6
2498+msgid "Navigation"
2499+msgstr "الإبحار"
2500+
2501+#: data/50-mutter-navigation.xml:9
2502+msgid "Move window to workspace 1"
2503+msgstr "انقل النافذة إلى مساحة العمل 1"
2504+
2505+#: data/50-mutter-navigation.xml:12
2506+msgid "Move window to workspace 2"
2507+msgstr "انقل النافذة إلى مساحة العمل 2"
2508+
2509+#: data/50-mutter-navigation.xml:15
2510+msgid "Move window to workspace 3"
2511+msgstr "انقل النافذة إلى مساحة العمل 3"
2512+
2513+#: data/50-mutter-navigation.xml:18
2514+msgid "Move window to workspace 4"
2515+msgstr "انقل النافذة إلى مساحة العمل 4"
2516+
2517+#: data/50-mutter-navigation.xml:21
2518+msgid "Move window to last workspace"
2519+msgstr "انقل النافذة إلى مساحة العمل الأخيرة"
2520+
2521+#: data/50-mutter-navigation.xml:24
2522+msgid "Move window one workspace up"
2523+msgstr "انقل النافذة مساحة عمل واحدة إلى الأعلى"
2524+
2525+#: data/50-mutter-navigation.xml:27
2526+msgid "Move window one workspace down"
2527+msgstr "انقل النافذة مساحة عمل واحدة إلى الأسفل"
2528+
2529+#: data/50-mutter-navigation.xml:30
2530+msgid "Move window one monitor to the left"
2531+msgstr "انقل النافذة شاشة واحدة إلى اليسار"
2532+
2533+#: data/50-mutter-navigation.xml:33
2534+msgid "Move window one monitor to the right"
2535+msgstr "انقل النافذة شاشة واحدة إلى اليمين"
2536+
2537+#: data/50-mutter-navigation.xml:36
2538+msgid "Move window one monitor up"
2539+msgstr "انقل النافذة شاشة واحدة إلى الأعلى"
2540+
2541+#: data/50-mutter-navigation.xml:39
2542+msgid "Move window one monitor down"
2543+msgstr "انقل النافذة شاشة واحدة إلى الأسفل"
2544+
2545+#: data/50-mutter-navigation.xml:43
2546+msgid "Switch applications"
2547+msgstr "تنقل بين التطبيقات"
2548+
2549+#: data/50-mutter-navigation.xml:48
2550+msgid "Switch to previous application"
2551+msgstr "انتقل إلى التطبيق السابق"
2552+
2553+#: data/50-mutter-navigation.xml:52
2554+msgid "Switch windows"
2555+msgstr "تنقل بين النوافذ"
2556+
2557+#: data/50-mutter-navigation.xml:57
2558+msgid "Switch to previous window"
2559+msgstr "انتقل إلى النافذة السابقة"
2560+
2561+#: data/50-mutter-navigation.xml:61
2562+msgid "Switch windows of an application"
2563+msgstr "تنقل بين نوافذ التطبيق"
2564+
2565+#: data/50-mutter-navigation.xml:66
2566+msgid "Switch to previous window of an application"
2567+msgstr "انتقل إلى نافذة التطبيق السابقة"
2568+
2569+#: data/50-mutter-navigation.xml:70
2570+msgid "Switch system controls"
2571+msgstr "تنقل بين تحكمات النظام"
2572+
2573+#: data/50-mutter-navigation.xml:75
2574+msgid "Switch to previous system control"
2575+msgstr "انتقل إلى تحكم النظام السابق"
2576+
2577+#: data/50-mutter-navigation.xml:79
2578+msgid "Switch windows directly"
2579+msgstr "تنقل مباشرة بين النوافذ"
2580+
2581+#: data/50-mutter-navigation.xml:84
2582+msgid "Switch directly to previous window"
2583+msgstr "انتقل مباشرة إلى النافذة السابقة"
2584+
2585+#: data/50-mutter-navigation.xml:88
2586+msgid "Switch windows of an app directly"
2587+msgstr "تنقل مباشرة بين نوافذ التطبيق"
2588+
2589+#: data/50-mutter-navigation.xml:93
2590+msgid "Switch directly to previous window of an app"
2591+msgstr "انتقل مباشرة إلى نافذة التطبيق السابقة"
2592+
2593+#: data/50-mutter-navigation.xml:97
2594+msgid "Switch system controls directly"
2595+msgstr "تنقل مباشرة بين تحكمات النظام"
2596+
2597+#: data/50-mutter-navigation.xml:102
2598+msgid "Switch directly to previous system control"
2599+msgstr "انتقل مباشرة إلى تحكم النظام السابق"
2600+
2601+#: data/50-mutter-navigation.xml:105
2602+msgid "Hide all normal windows"
2603+msgstr "أخفِ كل النوافذ العادية"
2604+
2605+#: data/50-mutter-navigation.xml:108
2606+msgid "Switch to workspace 1"
2607+msgstr "انتقل إلى مساحة العمل 1"
2608+
2609+#: data/50-mutter-navigation.xml:111
2610+msgid "Switch to workspace 2"
2611+msgstr "انتقل إلى مساحة العمل 2"
2612+
2613+#: data/50-mutter-navigation.xml:114
2614+msgid "Switch to workspace 3"
2615+msgstr "انتقل إلى مساحة العمل 3"
2616+
2617+#: data/50-mutter-navigation.xml:117
2618+msgid "Switch to workspace 4"
2619+msgstr "انتقل إلى مساحة العمل 4"
2620+
2621+#: data/50-mutter-navigation.xml:120
2622+msgid "Switch to last workspace"
2623+msgstr "انتقل إلى مساحة العمل الأخيرة"
2624+
2625+#: data/50-mutter-navigation.xml:123
2626+msgid "Move to workspace above"
2627+msgstr "انقل لمساحة العمل أعلى"
2628+
2629+#: data/50-mutter-navigation.xml:126
2630+msgid "Move to workspace below"
2631+msgstr "انقل لمساحة العمل أسفل"
2632+
2633+#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
2634+msgid "System"
2635+msgstr "النظام"
2636+
2637+#: data/50-mutter-system.xml:8
2638+msgid "Show the run command prompt"
2639+msgstr "أظهر محث تشغيل أمر"
2640+
2641+#: data/50-mutter-system.xml:10
2642+msgid "Show the activities overview"
2643+msgstr "أظهر نظرة عامة على الأنشطة"
2644+
2645+#: data/50-mutter-wayland.xml:8
2646+msgid "Restore the keyboard shortcuts"
2647+msgstr "استعد اختصارات لوحة المفاتيح"
2648+
2649+#: data/50-mutter-windows.xml:6
2650+msgid "Windows"
2651+msgstr "النوافذ"
2652+
2653+#: data/50-mutter-windows.xml:8
2654+msgid "Activate the window menu"
2655+msgstr "فعّل قائمة النافذة"
2656+
2657+#: data/50-mutter-windows.xml:10
2658+msgid "Toggle fullscreen mode"
2659+msgstr "بدّل نمط ملء الشاشة"
2660+
2661+#: data/50-mutter-windows.xml:12
2662+msgid "Toggle maximization state"
2663+msgstr "بدّل حالة التكبير"
2664+
2665+#: data/50-mutter-windows.xml:14
2666+msgid "Maximize window"
2667+msgstr "كبّر النّافذة"
2668+
2669+#: data/50-mutter-windows.xml:16
2670+msgid "Restore window"
2671+msgstr "استعد النّافذة"
2672+
2673+#: data/50-mutter-windows.xml:18
2674+msgid "Close window"
2675+msgstr "أغلق النّافذة"
2676+
2677+#: data/50-mutter-windows.xml:20
2678+msgid "Hide window"
2679+msgstr "أخفِ النّافذة"
2680+
2681+#: data/50-mutter-windows.xml:22
2682+msgid "Move window"
2683+msgstr "انقل النّافذة"
2684+
2685+#: data/50-mutter-windows.xml:24
2686+msgid "Resize window"
2687+msgstr "حجّم النّافذة"
2688+
2689+#: data/50-mutter-windows.xml:27
2690+msgid "Toggle window on all workspaces or one"
2691+msgstr "بدّل حالة ظهور النافذة على جميع مساحات العمل أو واحدة منها"
2692+
2693+#: data/50-mutter-windows.xml:29
2694+msgid "Raise window if covered, otherwise lower it"
2695+msgstr "ارفع النافذة إذا كانت أخرى تغطيها، أو أخفضها في ما عدا ذلك"
2696+
2697+#: data/50-mutter-windows.xml:31
2698+msgid "Raise window above other windows"
2699+msgstr "ارفع النافذة فوق النوافذ الأخرى"
2700+
2701+#: data/50-mutter-windows.xml:33
2702+msgid "Lower window below other windows"
2703+msgstr "اخفض النافذة تحت النوافذ الأخرى"
2704+
2705+#: data/50-mutter-windows.xml:35
2706+msgid "Maximize window vertically"
2707+msgstr "كبّر النافذة رأسيا"
2708+
2709+#: data/50-mutter-windows.xml:37
2710+msgid "Maximize window horizontally"
2711+msgstr "كبّر النافذة أفقيا"
2712+
2713+#: data/50-mutter-windows.xml:41
2714+msgid "View split on left"
2715+msgstr "المنظور مقسوم على اليمين"
2716+
2717+#: data/50-mutter-windows.xml:45
2718+msgid "View split on right"
2719+msgstr "المنظور مقسوم على اليسار"
2720+
2721+#: data/mutter.desktop.in:4
2722+msgid "Mutter"
2723+msgstr "مَتَر"
2724+
2725+#: data/org.gnome.mutter.gschema.xml.in:7
2726+msgid "Modifier to use for extended window management operations"
2727+msgstr "المغير الذي سيُستعمل لتمديد عمليات إدارة النوافذ "
2728+
2729+#: data/org.gnome.mutter.gschema.xml.in:8
2730+msgid ""
2731+"This key will initiate the “overlay”, which is a combination window overview "
2732+"and application launching system. The default is intended to be the “Windows "
2733+"key” on PC hardware. It’s expected that this binding either the default or "
2734+"set to the empty string."
2735+msgstr ""
2736+
2737+#: data/org.gnome.mutter.gschema.xml.in:20
2738+#, fuzzy
2739+msgid "Attach modal dialogs"
2740+msgstr "صندوق حوار سائد"
2741+
2742+#: data/org.gnome.mutter.gschema.xml.in:21
2743+msgid ""
2744+"When true, instead of having independent titlebars, modal dialogs appear "
2745+"attached to the titlebar of the parent window and are moved together with "
2746+"the parent window."
2747+msgstr ""
2748+
2749+#: data/org.gnome.mutter.gschema.xml.in:30
2750+msgid "Enable edge tiling when dropping windows on screen edges"
2751+msgstr ""
2752+
2753+#: data/org.gnome.mutter.gschema.xml.in:31
2754+msgid ""
2755+"If enabled, dropping windows on vertical screen edges maximizes them "
2756+"vertically and resizes them horizontally to cover half of the available "
2757+"area. Dropping windows on the top screen edge maximizes them completely."
2758+msgstr ""
2759+
2760+#: data/org.gnome.mutter.gschema.xml.in:40
2761+msgid "Workspaces are managed dynamically"
2762+msgstr ""
2763+
2764+#: data/org.gnome.mutter.gschema.xml.in:41
2765+msgid ""
2766+"Determines whether workspaces are managed dynamically or whether there’s a "
2767+"static number of workspaces (determined by the num-workspaces key in org."
2768+"gnome.desktop.wm.preferences)."
2769+msgstr ""
2770+
2771+#: data/org.gnome.mutter.gschema.xml.in:50
2772+msgid "Workspaces only on primary"
2773+msgstr ""
2774+
2775+#: data/org.gnome.mutter.gschema.xml.in:51
2776+msgid ""
2777+"Determines whether workspace switching should happen for windows on all "
2778+"monitors or only for windows on the primary monitor."
2779+msgstr ""
2780+
2781+#: data/org.gnome.mutter.gschema.xml.in:59
2782+msgid "No tab popup"
2783+msgstr ""
2784+
2785+#: data/org.gnome.mutter.gschema.xml.in:60
2786+msgid ""
2787+"Determines whether the use of popup and highlight frame should be disabled "
2788+"for window cycling."
2789+msgstr ""
2790+
2791+#: data/org.gnome.mutter.gschema.xml.in:68
2792+msgid "Delay focus changes until the pointer stops moving"
2793+msgstr ""
2794+
2795+#: data/org.gnome.mutter.gschema.xml.in:69
2796+msgid ""
2797+"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
2798+"focus will not be changed immediately when entering a window, but only after "
2799+"the pointer stops moving."
2800+msgstr ""
2801+
2802+#: data/org.gnome.mutter.gschema.xml.in:79
2803+msgid "Draggable border width"
2804+msgstr ""
2805+
2806+#: data/org.gnome.mutter.gschema.xml.in:80
2807+msgid ""
2808+"The amount of total draggable borders. If the theme’s visible borders are "
2809+"not enough, invisible borders will be added to meet this value."
2810+msgstr ""
2811+
2812+#: data/org.gnome.mutter.gschema.xml.in:89
2813+msgid "Auto maximize nearly monitor sized windows"
2814+msgstr ""
2815+
2816+#: data/org.gnome.mutter.gschema.xml.in:90
2817+msgid ""
2818+"If enabled, new windows that are initially the size of the monitor "
2819+"automatically get maximized."
2820+msgstr ""
2821+
2822+#: data/org.gnome.mutter.gschema.xml.in:98
2823+msgid "Place new windows in the center"
2824+msgstr ""
2825+
2826+#: data/org.gnome.mutter.gschema.xml.in:99
2827+msgid ""
2828+"When true, the new windows will always be put in the center of the active "
2829+"screen of the monitor."
2830+msgstr ""
2831+
2832+#: data/org.gnome.mutter.gschema.xml.in:107
2833+msgid "Enable experimental features"
2834+msgstr ""
2835+
2836+#: data/org.gnome.mutter.gschema.xml.in:108
2837+msgid ""
2838+"To enable experimental features, add the feature keyword to the list. "
2839+"Whether the feature requires restarting the compositor depends on the given "
2840+"feature. Any experimental feature is not required to still be available, or "
2841+"configurable. Don’t expect adding anything in this setting to be future "
2842+"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
2843+"mutter default to layout logical monitors in a logical pixel coordinate "
2844+"space, while scaling monitor framebuffers instead of window content, to "
2845+"manage HiDPI monitors. Does not require a restart."
2846+msgstr ""
2847+
2848+#: data/org.gnome.mutter.gschema.xml.in:141
2849+msgid "Select window from tab popup"
2850+msgstr ""
2851+
2852+#: data/org.gnome.mutter.gschema.xml.in:146
2853+msgid "Cancel tab popup"
2854+msgstr ""
2855+
2856+#: data/org.gnome.mutter.gschema.xml.in:151
2857+#, fuzzy
2858+msgid "Switch monitor configurations"
2859+msgstr "غيّر الشاشة"
2860+
2861+#: data/org.gnome.mutter.gschema.xml.in:156
2862+msgid "Rotates the built-in monitor configuration"
2863+msgstr ""
2864+
2865+#: data/org.gnome.mutter.wayland.gschema.xml.in:6
2866+#, fuzzy
2867+msgid "Switch to VT 1"
2868+msgstr "انتقل إلى مساحة العمل 1"
2869+
2870+#: data/org.gnome.mutter.wayland.gschema.xml.in:10
2871+#, fuzzy
2872+msgid "Switch to VT 2"
2873+msgstr "انتقل إلى مساحة العمل 2"
2874+
2875+#: data/org.gnome.mutter.wayland.gschema.xml.in:14
2876+#, fuzzy
2877+msgid "Switch to VT 3"
2878+msgstr "انتقل إلى مساحة العمل 3"
2879+
2880+#: data/org.gnome.mutter.wayland.gschema.xml.in:18
2881+#, fuzzy
2882+msgid "Switch to VT 4"
2883+msgstr "انتقل إلى مساحة العمل 4"
2884+
2885+#: data/org.gnome.mutter.wayland.gschema.xml.in:22
2886+#, fuzzy
2887+msgid "Switch to VT 5"
2888+msgstr "انتقل إلى مساحة العمل 5"
2889+
2890+#: data/org.gnome.mutter.wayland.gschema.xml.in:26
2891+#, fuzzy
2892+msgid "Switch to VT 6"
2893+msgstr "انتقل إلى مساحة العمل 6"
2894+
2895+#: data/org.gnome.mutter.wayland.gschema.xml.in:30
2896+#, fuzzy
2897+msgid "Switch to VT 7"
2898+msgstr "انتقل إلى مساحة العمل 7"
2899+
2900+#: data/org.gnome.mutter.wayland.gschema.xml.in:34
2901+#, fuzzy
2902+msgid "Switch to VT 8"
2903+msgstr "انتقل إلى مساحة العمل 8"
2904+
2905+#: data/org.gnome.mutter.wayland.gschema.xml.in:38
2906+#, fuzzy
2907+msgid "Switch to VT 9"
2908+msgstr "انتقل إلى مساحة العمل 9"
2909+
2910+#: data/org.gnome.mutter.wayland.gschema.xml.in:42
2911+#, fuzzy
2912+msgid "Switch to VT 10"
2913+msgstr "انتقل إلى مساحة العمل 10"
2914+
2915+#: data/org.gnome.mutter.wayland.gschema.xml.in:46
2916+#, fuzzy
2917+msgid "Switch to VT 11"
2918+msgstr "انتقل إلى مساحة العمل 11"
2919+
2920+#: data/org.gnome.mutter.wayland.gschema.xml.in:50
2921+#, fuzzy
2922+msgid "Switch to VT 12"
2923+msgstr "انتقل إلى مساحة العمل 12"
2924+
2925+#: data/org.gnome.mutter.wayland.gschema.xml.in:54
2926+msgid "Re-enable shortcuts"
2927+msgstr ""
2928+
2929+#: data/org.gnome.mutter.wayland.gschema.xml.in:64
2930+msgid "Allow grabs with Xwayland"
2931+msgstr ""
2932+
2933+#: data/org.gnome.mutter.wayland.gschema.xml.in:65
2934+msgid ""
2935+"Allow keyboard grabs issued by X11 applications running in Xwayland to be "
2936+"taken into account. For a X11 grab to be taken into account under Wayland, "
2937+"the client must also either send a specific X11 ClientMessage to the root "
2938+"window or be among the applications white-listed in key “xwayland-grab-"
2939+"access-rules”."
2940+msgstr ""
2941+
2942+#: data/org.gnome.mutter.wayland.gschema.xml.in:77
2943+msgid "Xwayland applications allowed to issue keyboard grabs"
2944+msgstr ""
2945+
2946+#: data/org.gnome.mutter.wayland.gschema.xml.in:78
2947+msgid ""
2948+"List the resource names or resource class of X11 windows either allowed or "
2949+"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
2950+"resource class of a given X11 window can be obtained using the command "
2951+"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
2952+"Values starting with “!” are blacklisted, which has precedence over the "
2953+"whitelist, to revoke applications from the default system list. The default "
2954+"system list includes the following applications: "
2955+"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
2956+"using the specific keyboard shortcut defined by the keybinding key “restore-"
2957+"shortcuts”."
2958+msgstr ""
2959+
2960 #. TRANSLATORS: This string refers to a button that switches between
2961 #. * different modes.
2962 #.
2963-#: ../src/backends/meta-input-settings.c:2167
2964+#: src/backends/meta-input-settings.c:2424
2965 #, c-format
2966 msgid "Mode Switch (Group %d)"
2967-msgstr ""
2968+msgstr "تغيير الأوضاع (مجموعة %d)"
2969
2970 #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
2971 #. * mapping through the available outputs.
2972 #.
2973-#: ../src/backends/meta-input-settings.c:2190
2974+#: src/backends/meta-input-settings.c:2447
2975 msgid "Switch monitor"
2976 msgstr "غيّر الشاشة"
2977
2978-#: ../src/backends/meta-input-settings.c:2192
2979+#: src/backends/meta-input-settings.c:2449
2980 msgid "Show on-screen help"
2981 msgstr "اعرض المساعدة على الشاشة"
2982
2983-#: ../src/backends/meta-monitor-manager.c:900
2984+#: src/backends/meta-monitor-manager.c:955
2985 msgid "Built-in display"
2986 msgstr "شاشة مدمجة"
2987
2988-#: ../src/backends/meta-monitor-manager.c:923
2989+#: src/backends/meta-monitor-manager.c:987
2990 msgid "Unknown"
2991 msgstr "غير معروفة"
2992
2993-#: ../src/backends/meta-monitor-manager.c:925
2994+#: src/backends/meta-monitor-manager.c:989
2995 msgid "Unknown Display"
2996 msgstr "شاشة غير معروفة"
2997
2998-#. TRANSLATORS: this is a monitor vendor name, followed by a
2999-#. * size in inches, like 'Dell 15"'
3000-#.
3001-#: ../src/backends/meta-monitor-manager.c:933
3002+#: src/backends/meta-monitor-manager.c:997
3003 #, c-format
3004+msgctxt ""
3005+"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
3006+msgid "%s %s"
3007+msgstr "%s %s"
3008+
3009+#: src/backends/meta-monitor-manager.c:1005
3010+#, c-format
3011+msgctxt ""
3012+"This is a monitor vendor name followed by product/model name where size in "
3013+"inches could not be calculated, e.g. Dell U2414H"
3014 msgid "%s %s"
3015 msgstr "%s %s"
3016
3017 #. This probably means that a non-WM compositor like xcompmgr is running;
3018 #. * we have no way to get it to exit
3019-#: ../src/compositor/compositor.c:476
3020+#: src/compositor/compositor.c:482
3021 #, c-format
3022 msgid ""
3023 "Another compositing manager is already running on screen %i on display “%s”."
3024 msgstr "يعمل مدير مزج آخر على الشاشة %i و العرض ”%s“."
3025
3026-#: ../src/core/bell.c:194
3027+#: src/core/bell.c:192
3028 msgid "Bell event"
3029 msgstr "حدث جرس"
3030
3031-#: ../src/core/display.c:608
3032-#, c-format
3033-msgid "Failed to open X Window System display “%s”\n"
3034-msgstr "فشل فتح عرض نظام نوافذ إكس ”%s“\n"
3035-
3036-#: ../src/core/main.c:189
3037+#: src/core/main.c:185
3038 msgid "Disable connection to session manager"
3039 msgstr "عطّل الاتصال بمدير الجلسة"
3040
3041-#: ../src/core/main.c:195
3042+#: src/core/main.c:191
3043 msgid "Replace the running window manager"
3044 msgstr "استبدل بمدير النوافذ الذي يعمل"
3045
3046-#: ../src/core/main.c:201
3047+#: src/core/main.c:197
3048 msgid "Specify session management ID"
3049 msgstr "حدّد رقم هويّة إدارة الجلسة"
3050
3051-#: ../src/core/main.c:206
3052+#: src/core/main.c:202
3053 msgid "X Display to use"
3054 msgstr "معراض س الذي سيستعمل"
3055
3056-#: ../src/core/main.c:212
3057+#: src/core/main.c:208
3058 msgid "Initialize session from savefile"
3059 msgstr "ابدأ الجلسة من ملف محفوظ"
3060
3061-#: ../src/core/main.c:218
3062+#: src/core/main.c:214
3063 msgid "Make X calls synchronous"
3064 msgstr "اجعل نداءات س متزامنة"
3065
3066-#: ../src/core/main.c:225
3067+#: src/core/main.c:221
3068 msgid "Run as a wayland compositor"
3069 msgstr ""
3070
3071-#: ../src/core/main.c:231
3072+#: src/core/main.c:227
3073 msgid "Run as a nested compositor"
3074 msgstr ""
3075
3076-#: ../src/core/main.c:239
3077+#: src/core/main.c:233
3078+msgid "Run wayland compositor without starting Xwayland"
3079+msgstr ""
3080+
3081+#: src/core/main.c:241
3082 msgid "Run as a full display server, rather than nested"
3083 msgstr ""
3084
3085+#: src/core/main.c:247
3086+msgid "Run with X11 backend"
3087+msgstr ""
3088+
3089 #. Translators: %s is a window title
3090-#: ../src/core/meta-close-dialog-default.c:147
3091+#: src/core/meta-close-dialog-default.c:151
3092 #, c-format
3093 msgid "“%s” is not responding."
3094 msgstr "”‏%s“ لا يستجيب."
3095
3096-#: ../src/core/meta-close-dialog-default.c:149
3097+#: src/core/meta-close-dialog-default.c:153
3098 msgid "Application is not responding."
3099 msgstr "لا يستجيب التطبيق"
3100
3101-#: ../src/core/meta-close-dialog-default.c:154
3102+#: src/core/meta-close-dialog-default.c:158
3103 msgid ""
3104 "You may choose to wait a short while for it to continue or force the "
3105 "application to quit entirely."
3106 msgstr "ربما ترغب في الانتظار قليلا ليُكمِل أو إجبار التطبيق على الإنهاء كُلّية."
3107
3108-#: ../src/core/meta-close-dialog-default.c:161
3109+#: src/core/meta-close-dialog-default.c:165
3110 msgid "_Force Quit"
3111 msgstr "أ_جبر الإنهاء"
3112
3113-#: ../src/core/meta-close-dialog-default.c:161
3114+#: src/core/meta-close-dialog-default.c:165
3115 msgid "_Wait"
3116 msgstr "ا_نتظر"
3117
3118-#: ../src/core/mutter.c:39
3119+#: src/core/mutter.c:38
3120 #, c-format
3121 msgid ""
3122 "mutter %s\n"
3123@@ -154,43 +626,52 @@ msgstr ""
3124 "هذا برنامج حر، راجع المصدر لشروط النسخ.\n"
3125 "لا يوجد أي ضمان: و لا حتى ضمان قابلية التسويق أو المناسبة لأي هدف.\n"
3126
3127-#: ../src/core/mutter.c:53
3128+#: src/core/mutter.c:52
3129 msgid "Print version"
3130 msgstr "اطبع الإصدارة"
3131
3132-#: ../src/core/mutter.c:59
3133+#: src/core/mutter.c:58
3134 msgid "Mutter plugin to use"
3135 msgstr "ملحق مَتَر الذي سيُستخدم"
3136
3137-#: ../src/core/prefs.c:1997
3138+#: src/core/prefs.c:1786
3139 #, c-format
3140 msgid "Workspace %d"
3141 msgstr "مساحة العمل %d"
3142
3143-#: ../src/core/screen.c:583
3144+#: src/core/util.c:121
3145+msgid "Mutter was compiled without support for verbose mode\n"
3146+msgstr "جُمِّع مَتَر دون دعم للنمط المطنب\n"
3147+
3148+#: src/wayland/meta-wayland-tablet-pad.c:567
3149+#, c-format
3150+msgid "Mode Switch: Mode %d"
3151+msgstr ""
3152+
3153+#: src/x11/meta-x11-display.c:666
3154 #, c-format
3155 msgid ""
3156 "Display “%s” already has a window manager; try using the --replace option to "
3157 "replace the current window manager."
3158 msgstr ""
3159-"الشاشة ”%s“ لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل --replace لتحُلّ"
3160-" محلّ مدير النوافذ الحالي."
3161+"الشاشة ”%s“ لها مدير نوافذ بالفعل، حاول استعمال خيار التبديل --replace لتحُلّ "
3162+"محلّ مدير النوافذ الحالي."
3163
3164-#: ../src/core/screen.c:668
3165-#, c-format
3166-msgid "Screen %d on display “%s” is invalid\n"
3167-msgstr "الشاشة %d على العرض ”%s“ غير صحيحة\n"
3168+#: src/x11/meta-x11-display.c:1008
3169+msgid "Failed to initialize GDK\n"
3170+msgstr ""
3171
3172-#: ../src/core/util.c:120
3173-msgid "Mutter was compiled without support for verbose mode\n"
3174-msgstr "جُمِّع مَتَر دون دعم للنمط المطنب\n"
3175+#: src/x11/meta-x11-display.c:1032
3176+#, c-format
3177+msgid "Failed to open X Window System display “%s”\n"
3178+msgstr "فشل فتح عرض نظام نوافذ إكس ”%s“\n"
3179
3180-#: ../src/wayland/meta-wayland-tablet-pad.c:563
3181+#: src/x11/meta-x11-display.c:1113
3182 #, c-format
3183-msgid "Mode Switch: Mode %d"
3184-msgstr ""
3185+msgid "Screen %d on display “%s” is invalid\n"
3186+msgstr "الشاشة %d على العرض ”%s“ غير صحيحة\n"
3187
3188-#: ../src/x11/session.c:1815
3189+#: src/x11/session.c:1821
3190 msgid ""
3191 "These windows do not support “save current setup” and will have to be "
3192 "restarted manually next time you log in."
3193@@ -198,245 +679,26 @@ msgstr ""
3194 "هذه النوافذ لا تدعم ” الضبط الحالي&quot; إعادة تشغيلها يدويا عند الولوج "
3195 "المرة القادمة."
3196
3197-#: ../src/x11/window-props.c:559
3198+#: src/x11/window-props.c:569
3199 #, c-format
3200 msgid "%s (on %s)"
3201 msgstr "%s (على %s)"
3202
3203-#~ msgid "Navigation"
3204-#~ msgstr "الإبحار"
3205-
3206-#~ msgid "Move window to workspace 1"
3207-#~ msgstr "انقل النافذة إلى مساحة العمل 1"
3208-
3209-#~ msgid "Move window to workspace 2"
3210-#~ msgstr "انقل النافذة إلى مساحة العمل 2"
3211-
3212-#~ msgid "Move window to workspace 3"
3213-#~ msgstr "انقل النافذة إلى مساحة العمل 3"
3214-
3215-#~ msgid "Move window to workspace 4"
3216-#~ msgstr "انقل النافذة إلى مساحة العمل 4"
3217-
3218-#~ msgid "Move window to last workspace"
3219-#~ msgstr "انقل النافذة إلى مساحة العمل الأخيرة"
3220-
3221 #~ msgid "Move window one workspace to the left"
3222 #~ msgstr "انقل النافذة مساحة عمل واحدة إلى اليسار"
3223
3224 #~ msgid "Move window one workspace to the right"
3225 #~ msgstr "انقل النافذة مساحة عمل واحدة إلى اليمين"
3226
3227-#~ msgid "Move window one workspace up"
3228-#~ msgstr "انقل النافذة مساحة عمل واحدة إلى الأعلى"
3229-
3230-#~ msgid "Move window one workspace down"
3231-#~ msgstr "انقل النافذة مساحة عمل واحدة إلى الأسفل"
3232-
3233-#~ msgid "Move window one monitor to the left"
3234-#~ msgstr "انقل النافذة شاشة واحدة إلى اليسار"
3235-
3236-#~ msgid "Move window one monitor to the right"
3237-#~ msgstr "انقل النافذة شاشة واحدة إلى اليمين"
3238-
3239-#~ msgid "Move window one monitor up"
3240-#~ msgstr "انقل النافذة شاشة واحدة إلى الأعلى"
3241-
3242-#~ msgid "Move window one monitor down"
3243-#~ msgstr "انقل النافذة شاشة واحدة إلى الأسفل"
3244-
3245-#~ msgid "Switch applications"
3246-#~ msgstr "تنقل بين التطبيقات"
3247-
3248-#~ msgid "Switch to previous application"
3249-#~ msgstr "انتقل إلى التطبيق السابق"
3250-
3251-#~ msgid "Switch windows"
3252-#~ msgstr "تنقل بين النوافذ"
3253-
3254-#~ msgid "Switch to previous window"
3255-#~ msgstr "انتقل إلى النافذة السابقة"
3256-
3257-#~ msgid "Switch windows of an application"
3258-#~ msgstr "تنقل بين نوافذ التطبيق"
3259-
3260-#~ msgid "Switch to previous window of an application"
3261-#~ msgstr "انتقل إلى نافذة التطبيق السابقة"
3262-
3263-#~ msgid "Switch system controls"
3264-#~ msgstr "تنقل بين تحكمات النظام"
3265-
3266-#~ msgid "Switch to previous system control"
3267-#~ msgstr "انتقل إلى تحكم النظام السابق"
3268-
3269-#~ msgid "Switch windows directly"
3270-#~ msgstr "تنقل مباشرة بين النوافذ"
3271-
3272-#~ msgid "Switch directly to previous window"
3273-#~ msgstr "انتقل مباشرة إلى النافذة السابقة"
3274-
3275-#~ msgid "Switch windows of an app directly"
3276-#~ msgstr "تنقل مباشرة بين نوافذ التطبيق"
3277-
3278-#~ msgid "Switch directly to previous window of an app"
3279-#~ msgstr "انتقل مباشرة إلى نافذة التطبيق السابقة"
3280-
3281-#~ msgid "Switch system controls directly"
3282-#~ msgstr "تنقل مباشرة بين تحكمات النظام"
3283-
3284-#~ msgid "Switch directly to previous system control"
3285-#~ msgstr "انتقل مباشرة إلى تحكم النظام السابق"
3286-
3287-#~ msgid "Hide all normal windows"
3288-#~ msgstr "أخفِ كل النوافذ العادية"
3289-
3290-#~ msgid "Switch to workspace 1"
3291-#~ msgstr "انتقل إلى مساحة العمل 1"
3292-
3293-#~ msgid "Switch to workspace 2"
3294-#~ msgstr "انتقل إلى مساحة العمل 2"
3295-
3296-#~ msgid "Switch to workspace 3"
3297-#~ msgstr "انتقل إلى مساحة العمل 3"
3298-
3299-#~ msgid "Switch to workspace 4"
3300-#~ msgstr "انتقل إلى مساحة العمل 4"
3301-
3302-#~ msgid "Switch to last workspace"
3303-#~ msgstr "انتقل إلى مساحة العمل الأخيرة"
3304-
3305 #~ msgid "Move to workspace left"
3306 #~ msgstr "انقل لمساحة العمل على اليسار"
3307
3308 #~ msgid "Move to workspace right"
3309 #~ msgstr "انقل لمساحة العمل على اليمين"
3310
3311-#~ msgid "Move to workspace above"
3312-#~ msgstr "انقل لمساحة العمل أعلى"
3313-
3314-#~ msgid "Move to workspace below"
3315-#~ msgstr "انقل لمساحة العمل أسفل"
3316-
3317-#~ msgid "System"
3318-#~ msgstr "النظام"
3319-
3320-#~ msgid "Show the run command prompt"
3321-#~ msgstr "أظهر محث تشغيل أمر"
3322-
3323-#~ msgid "Show the activities overview"
3324-#~ msgstr "أظهر نظرة عامة على الأنشطة"
3325-
3326-#~ msgid "Windows"
3327-#~ msgstr "النوافذ"
3328-
3329-#~ msgid "Activate the window menu"
3330-#~ msgstr "فعّل قائمة النافذة"
3331-
3332-#~ msgid "Toggle fullscreen mode"
3333-#~ msgstr "بدّل نمط ملء الشاشة"
3334-
3335-#~ msgid "Toggle maximization state"
3336-#~ msgstr "بدّل حالة التكبير"
3337-
3338-#~ msgid "Maximize window"
3339-#~ msgstr "كبّر النّافذة"
3340-
3341-#~ msgid "Restore window"
3342-#~ msgstr "استعد النّافذة"
3343-
3344 #~ msgid "Toggle shaded state"
3345 #~ msgstr "بدّل حالة الإخفاء"
3346
3347-#~ msgid "Close window"
3348-#~ msgstr "أغلق النّافذة"
3349-
3350-#~ msgid "Hide window"
3351-#~ msgstr "أخفِ النّافذة"
3352-
3353-#~ msgid "Move window"
3354-#~ msgstr "انقل النّافذة"
3355-
3356-#~ msgid "Resize window"
3357-#~ msgstr "حجّم النّافذة"
3358-
3359-#~ msgid "Toggle window on all workspaces or one"
3360-#~ msgstr "بدّل حالة ظهور النافذة على جميع مساحات العمل أو واحدة منها"
3361-
3362-#~ msgid "Raise window if covered, otherwise lower it"
3363-#~ msgstr "ارفع النافذة إذا كانت أخرى تغطيها، أو أخفضها في ما عدا ذلك"
3364-
3365-#~ msgid "Raise window above other windows"
3366-#~ msgstr "ارفع النافذة فوق النوافذ الأخرى"
3367-
3368-#~ msgid "Lower window below other windows"
3369-#~ msgstr "اخفض النافذة تحت النوافذ الأخرى"
3370-
3371-#~ msgid "Maximize window vertically"
3372-#~ msgstr "كبّر النافذة رأسيا"
3373-
3374-#~ msgid "Maximize window horizontally"
3375-#~ msgstr "كبّر النافذة أفقيا"
3376-
3377-#~ msgid "View split on left"
3378-#~ msgstr "المنظور مقسوم على اليمين"
3379-
3380-#~ msgid "View split on right"
3381-#~ msgstr "المنظور مقسوم على اليسار"
3382-
3383-#~ msgid "Mutter"
3384-#~ msgstr "مَتَر"
3385-
3386-#~ msgid "Modifier to use for extended window management operations"
3387-#~ msgstr "المغير الذي سيُستعمل لتمديد عمليات إدارة النوافذ "
3388-
3389-#, fuzzy
3390-#~ msgid "Switch to VT 1"
3391-#~ msgstr "انتقل إلى مساحة العمل 1"
3392-
3393-#, fuzzy
3394-#~ msgid "Switch to VT 2"
3395-#~ msgstr "انتقل إلى مساحة العمل 2"
3396-
3397-#, fuzzy
3398-#~ msgid "Switch to VT 3"
3399-#~ msgstr "انتقل إلى مساحة العمل 3"
3400-
3401-#, fuzzy
3402-#~ msgid "Switch to VT 4"
3403-#~ msgstr "انتقل إلى مساحة العمل 4"
3404-
3405-#, fuzzy
3406-#~ msgid "Switch to VT 5"
3407-#~ msgstr "انتقل إلى مساحة العمل 5"
3408-
3409-#, fuzzy
3410-#~ msgid "Switch to VT 6"
3411-#~ msgstr "انتقل إلى مساحة العمل 6"
3412-
3413-#, fuzzy
3414-#~ msgid "Switch to VT 7"
3415-#~ msgstr "انتقل إلى مساحة العمل 7"
3416-
3417-#, fuzzy
3418-#~ msgid "Switch to VT 8"
3419-#~ msgstr "انتقل إلى مساحة العمل 8"
3420-
3421-#, fuzzy
3422-#~ msgid "Switch to VT 9"
3423-#~ msgstr "انتقل إلى مساحة العمل 9"
3424-
3425-#, fuzzy
3426-#~ msgid "Switch to VT 10"
3427-#~ msgstr "انتقل إلى مساحة العمل 10"
3428-
3429-#, fuzzy
3430-#~ msgid "Switch to VT 11"
3431-#~ msgstr "انتقل إلى مساحة العمل 11"
3432-
3433-#, fuzzy
3434-#~ msgid "Switch to VT 12"
3435-#~ msgstr "انتقل إلى مساحة العمل 12"
3436-
3437 #~ msgid "Unknown window information request: %d"
3438 #~ msgstr "طلب معلومات نافذة مجهول: %d"
3439
3440@@ -1162,9 +1424,6 @@ msgstr "%s (على %s)"
3441 #~ msgid "Border"
3442 #~ msgstr "حد"
3443
3444-#~ msgid "Attached Modal Dialog"
3445-#~ msgstr "صندوق حوار سائد"
3446-
3447 #~ msgid "Button layout test %d"
3448 #~ msgstr "تجربة تصميم الأزرار %d"
3449
3450diff --git a/po/es.po b/po/es.po
3451index c5dbad6..39e6635 100644
3452--- a/po/es.po
3453+++ b/po/es.po
3454@@ -13,7 +13,7 @@ msgid ""
3455 msgstr ""
3456 "Project-Id-Version: mutter.master\n"
3457 "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
3458-"POT-Creation-Date: 2019-02-20 14:35+0000\n"
3459+"POT-Creation-Date: 2019-03-28 12:21+0000\n"
3460 "PO-Revision-Date: 2019-03-01 12:17+0100\n"
3461 "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
3462 "Language-Team: es <gnome-es-list@gnome.org>\n"
3463@@ -154,7 +154,7 @@ msgstr "Cambiar a la útima área de trabajo"
3464
3465 #: data/50-mutter-navigation.xml:123
3466 msgid "Move to workspace above"
3467-msgstr "Mover al área de trabajo de la arriba"
3468+msgstr "Mover al área de trabajo de arriba"
3469
3470 #: data/50-mutter-navigation.xml:126
3471 msgid "Move to workspace below"
3472@@ -534,7 +534,7 @@ msgstr ""
3473 #. TRANSLATORS: This string refers to a button that switches between
3474 #. * different modes.
3475 #.
3476-#: src/backends/meta-input-settings.c:2423
3477+#: src/backends/meta-input-settings.c:2424
3478 #, c-format
3479 msgid "Mode Switch (Group %d)"
3480 msgstr "Cambiar modo (grupo %d)"
3481@@ -542,34 +542,34 @@ msgstr "Cambiar modo (grupo %d)"
3482 #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
3483 #. * mapping through the available outputs.
3484 #.
3485-#: src/backends/meta-input-settings.c:2446
3486+#: src/backends/meta-input-settings.c:2447
3487 msgid "Switch monitor"
3488 msgstr "Cambiar monitor"
3489
3490-#: src/backends/meta-input-settings.c:2448
3491+#: src/backends/meta-input-settings.c:2449
3492 msgid "Show on-screen help"
3493 msgstr "Mostrar la ayuda en pantalla"
3494
3495-#: src/backends/meta-monitor-manager.c:954
3496+#: src/backends/meta-monitor-manager.c:955
3497 msgid "Built-in display"
3498 msgstr "Pantalla integrada"
3499
3500-#: src/backends/meta-monitor-manager.c:986
3501+#: src/backends/meta-monitor-manager.c:987
3502 msgid "Unknown"
3503 msgstr "Desconocida"
3504
3505-#: src/backends/meta-monitor-manager.c:988
3506+#: src/backends/meta-monitor-manager.c:989
3507 msgid "Unknown Display"
3508 msgstr "Pantalla desconocida"
3509
3510-#: src/backends/meta-monitor-manager.c:996
3511+#: src/backends/meta-monitor-manager.c:997
3512 #, c-format
3513 msgctxt ""
3514 "This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
3515 msgid "%s %s"
3516 msgstr "%s %s"
3517
3518-#: src/backends/meta-monitor-manager.c:1004
3519+#: src/backends/meta-monitor-manager.c:1005
3520 #, c-format
3521 msgctxt ""
3522 "This is a monitor vendor name followed by product/model name where size in "
3523@@ -587,7 +587,7 @@ msgstr ""
3524 "Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla "
3525 "«%s»."
3526
3527-#: src/core/bell.c:252
3528+#: src/core/bell.c:192
3529 msgid "Bell event"
3530 msgstr "Evento de campana"
3531
3532@@ -636,16 +636,16 @@ msgid "Run with X11 backend"
3533 msgstr "Ejecutar con «backend» de X11"
3534
3535 #. Translators: %s is a window title
3536-#: src/core/meta-close-dialog-default.c:150
3537+#: src/core/meta-close-dialog-default.c:151
3538 #, c-format
3539 msgid "“%s” is not responding."
3540 msgstr "«%s» no está respondiendo."
3541
3542-#: src/core/meta-close-dialog-default.c:152
3543+#: src/core/meta-close-dialog-default.c:153
3544 msgid "Application is not responding."
3545 msgstr "La aplicación no está respondiendo."
3546
3547-#: src/core/meta-close-dialog-default.c:157
3548+#: src/core/meta-close-dialog-default.c:158
3549 msgid ""
3550 "You may choose to wait a short while for it to continue or force the "
3551 "application to quit entirely."
3552@@ -653,11 +653,11 @@ msgstr ""
3553 "Puede elegir esperar un rato para ver si continua o forzar la aplicación "
3554 "para cerrarla completamente."
3555
3556-#: src/core/meta-close-dialog-default.c:164
3557+#: src/core/meta-close-dialog-default.c:165
3558 msgid "_Force Quit"
3559 msgstr "_Forzar la salida"
3560
3561-#: src/core/meta-close-dialog-default.c:164
3562+#: src/core/meta-close-dialog-default.c:165
3563 msgid "_Wait"
3564 msgstr "_Esperar"
3565
3566@@ -717,7 +717,7 @@ msgstr "Falló al inicializar GDK\n"
3567 msgid "Failed to open X Window System display “%s”\n"
3568 msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
3569
3570-#: src/x11/meta-x11-display.c:1115
3571+#: src/x11/meta-x11-display.c:1113
3572 #, c-format
3573 msgid "Screen %d on display “%s” is invalid\n"
3574 msgstr "La ventana %d en la pantalla «%s» no es válida\n"
3575@@ -730,7 +730,7 @@ msgstr ""
3576 "Estas ventanas no soportan «guardar la configuración actual» y tendrán que "
3577 "reiniciarse manualmente la próxima vez que inicie una sesión."
3578
3579-#: src/x11/window-props.c:568
3580+#: src/x11/window-props.c:569
3581 #, c-format
3582 msgid "%s (on %s)"
3583 msgstr "%s (on %s)"
3584diff --git a/po/hr.po b/po/hr.po
3585index 493ab6e..fba9745 100644
3586--- a/po/hr.po
3587+++ b/po/hr.po
3588@@ -5,8 +5,8 @@ msgid ""
3589 msgstr ""
3590 "Project-Id-Version: metacity 0\n"
3591 "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
3592-"POT-Creation-Date: 2018-07-07 09:58+0000\n"
3593-"PO-Revision-Date: 2018-09-02 18:40+0200\n"
3594+"POT-Creation-Date: 2019-02-04 17:52+0000\n"
3595+"PO-Revision-Date: 2019-03-26 12:40+0100\n"
3596 "Last-Translator: gogo <trebelnik2@gmail.com>\n"
3597 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
3598 "Language: hr\n"
3599@@ -16,7 +16,7 @@ msgstr ""
3600 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
3601 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
3602 "X-Launchpad-Export-Date: 2008-05-28 13:28+0000\n"
3603-"X-Generator: Poedit 2.1.1\n"
3604+"X-Generator: Poedit 2.0.6\n"
3605
3606 #: data/50-mutter-navigation.xml:6
3607 msgid "Navigation"
3608@@ -518,7 +518,7 @@ msgstr ""
3609 #. TRANSLATORS: This string refers to a button that switches between
3610 #. * different modes.
3611 #.
3612-#: src/backends/meta-input-settings.c:2325
3613+#: src/backends/meta-input-settings.c:2423
3614 #, c-format
3615 msgid "Mode Switch (Group %d)"
3616 msgstr "Način prebacivanja (Grupa %d)"
3617@@ -526,102 +526,109 @@ msgstr "Način prebacivanja (Grupa %d)"
3618 #. TRANSLATORS: This string refers to an action, cycles drawing tablets'
3619 #. * mapping through the available outputs.
3620 #.
3621-#: src/backends/meta-input-settings.c:2348
3622+#: src/backends/meta-input-settings.c:2446
3623 msgid "Switch monitor"
3624 msgstr "Prebaci zaslon"
3625
3626-#: src/backends/meta-input-settings.c:2350
3627+#: src/backends/meta-input-settings.c:2448
3628 msgid "Show on-screen help"
3629 msgstr "Prikaži zaslonsku pomoć"
3630
3631-#: src/backends/meta-monitor-manager.c:907
3632+#: src/backends/meta-monitor-manager.c:954
3633 msgid "Built-in display"
3634 msgstr "Ugrađeni zaslon"
3635
3636-#: src/backends/meta-monitor-manager.c:930
3637+#: src/backends/meta-monitor-manager.c:986
3638 msgid "Unknown"
3639 msgstr "Nepoznat"
3640
3641-#: src/backends/meta-monitor-manager.c:932
3642+#: src/backends/meta-monitor-manager.c:988
3643 msgid "Unknown Display"
3644 msgstr "Nepoznat zaslon"
3645
3646-#. TRANSLATORS: this is a monitor vendor name, followed by a
3647-#. * size in inches, like 'Dell 15"'
3648-#.
3649-#: src/backends/meta-monitor-manager.c:940
3650+#: src/backends/meta-monitor-manager.c:996
3651+#, c-format
3652+msgctxt ""
3653+"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
3654+msgid "%s %s"
3655+msgstr "%s %s"
3656+
3657+#: src/backends/meta-monitor-manager.c:1004
3658 #, c-format
3659+msgctxt ""
3660+"This is a monitor vendor name followed by product/model name where size in "
3661+"inches could not be calculated, e.g. Dell U2414H"
3662 msgid "%s %s"
3663 msgstr "%s %s"
3664
3665 #. This probably means that a non-WM compositor like xcompmgr is running;
3666 #. * we have no way to get it to exit
3667-#: src/compositor/compositor.c:481
3668+#: src/compositor/compositor.c:482
3669 #, c-format
3670 msgid ""
3671 "Another compositing manager is already running on screen %i on display “%s”."
3672 msgstr ""
3673 "Drugi upravitelja kompoziranja već je pokrenut na zaslonu %i prikaza \"%s\"."
3674
3675-#: src/core/bell.c:254
3676+#: src/core/bell.c:252
3677 msgid "Bell event"
3678 msgstr "Događaj zvona"
3679
3680-#: src/core/main.c:191
3681+#: src/core/main.c:185
3682 msgid "Disable connection to session manager"
3683 msgstr "Onemogući povezivanje sa upraviteljem sesija"
3684
3685-#: src/core/main.c:197
3686+#: src/core/main.c:191
3687 msgid "Replace the running window manager"
3688 msgstr "Zamijeni pokrenutoga upravitelja porozora"
3689
3690-#: src/core/main.c:203
3691+#: src/core/main.c:197
3692 msgid "Specify session management ID"
3693 msgstr "Odredite ID upravljanja sesijama"
3694
3695-#: src/core/main.c:208
3696+#: src/core/main.c:202
3697 msgid "X Display to use"
3698 msgstr "X Prikaz za korištenje"
3699
3700-#: src/core/main.c:214
3701+#: src/core/main.c:208
3702 msgid "Initialize session from savefile"
3703 msgstr "Pokreni sesiju iz spremljene datoteke"
3704
3705-#: src/core/main.c:220
3706+#: src/core/main.c:214
3707 msgid "Make X calls synchronous"
3708 msgstr "Napravi X pozive usklađenim"
3709
3710-#: src/core/main.c:227
3711+#: src/core/main.c:221
3712 msgid "Run as a wayland compositor"
3713 msgstr "Pokreni wayland kompozitor"
3714
3715-#: src/core/main.c:233
3716+#: src/core/main.c:227
3717 msgid "Run as a nested compositor"
3718 msgstr "Pokreni kao ugrađeni kompozitor"
3719
3720-#: src/core/main.c:239
3721+#: src/core/main.c:233
3722 msgid "Run wayland compositor without starting Xwayland"
3723 msgstr "Pokreni wayland kompozitor bez pokretanja Xwaylanda"
3724
3725-#: src/core/main.c:247
3726+#: src/core/main.c:241
3727 msgid "Run as a full display server, rather than nested"
3728 msgstr "Pokreni kao potpuni poslužitelj zaslona, radije nego ugrađeni"
3729
3730-#: src/core/main.c:253
3731+#: src/core/main.c:247
3732 msgid "Run with X11 backend"
3733 msgstr "Pokreni s X11 pozadinskim programom"
3734
3735 #. Translators: %s is a window title
3736-#: src/core/meta-close-dialog-default.c:148
3737+#: src/core/meta-close-dialog-default.c:150
3738 #, c-format
3739 msgid "“%s” is not responding."
3740 msgstr "“%s” ne odgovara."
3741
3742-#: src/core/meta-close-dialog-default.c:150
3743+#: src/core/meta-close-dialog-default.c:152
3744 msgid "Application is not responding."
3745 msgstr "Aplikacija ne odgovara."
3746
3747-#: src/core/meta-close-dialog-default.c:155
3748+#: src/core/meta-close-dialog-default.c:157
3749 msgid ""
3750 "You may choose to wait a short while for it to continue or force the "
3751 "application to quit entirely."
3752@@ -629,15 +636,15 @@ msgstr ""
3753 "Možete pričekati neko vrijeme da aplikacija nastavi s radom ili možete "
3754 "prisiliti prekid rada aplikacije."
3755
3756-#: src/core/meta-close-dialog-default.c:162
3757+#: src/core/meta-close-dialog-default.c:164
3758 msgid "_Force Quit"
3759 msgstr "_Prisili izlaženje"
3760
3761-#: src/core/meta-close-dialog-default.c:162
3762+#: src/core/meta-close-dialog-default.c:164
3763 msgid "_Wait"
3764 msgstr "_Čekaj"
3765
3766-#: src/core/mutter.c:39
3767+#: src/core/mutter.c:38
3768 #, c-format
3769 msgid ""
3770 "mutter %s\n"
3771@@ -652,20 +659,20 @@ msgstr ""
3772 "NE postoji jamstvo; čak i bez podrazumijevanih jamstava UPORABLJIVOSTI ZA "
3773 "ODREĐENU SVRHU.\n"
3774
3775-#: src/core/mutter.c:53
3776+#: src/core/mutter.c:52
3777 msgid "Print version"
3778 msgstr "Inačica za ispis"
3779
3780-#: src/core/mutter.c:59
3781+#: src/core/mutter.c:58
3782 msgid "Mutter plugin to use"
3783 msgstr "Mutter priključak koji se koristi"
3784
3785-#: src/core/prefs.c:1915
3786+#: src/core/prefs.c:1786
3787 #, c-format
3788 msgid "Workspace %d"
3789 msgstr "Radni prostor %d"
3790
3791-#: src/core/util.c:120
3792+#: src/core/util.c:121
3793 msgid "Mutter was compiled without support for verbose mode\n"
3794 msgstr "Mutter je kompiliran bez podrške za opširan način rada\n"
3795
3796@@ -683,21 +690,21 @@ msgstr ""
3797 "Prikaz \"%s\" već ima upravitelja prozora; pokušajte koristiti --replace "
3798 "mogućnost za zamjenu trenutnog upravitelja prozora."
3799
3800-#: src/x11/meta-x11-display.c:1010
3801+#: src/x11/meta-x11-display.c:1008
3802 msgid "Failed to initialize GDK\n"
3803 msgstr "Neuspjelo GDK pokretanje\n"
3804
3805-#: src/x11/meta-x11-display.c:1034
3806+#: src/x11/meta-x11-display.c:1032
3807 #, c-format
3808 msgid "Failed to open X Window System display “%s”\n"
3809 msgstr "Neuspjelo otvaranje sustava prikaza X prozora \"%s\"\n"
3810
3811-#: src/x11/meta-x11-display.c:1117
3812+#: src/x11/meta-x11-display.c:1115
3813 #, c-format
3814 msgid "Screen %d on display “%s” is invalid\n"
3815 msgstr "Zaslon %d na prikazu '%s' je neispravan\n"
3816
3817-#: src/x11/session.c:1819
3818+#: src/x11/session.c:1821
3819 msgid ""
3820 "These windows do not support “save current setup” and will have to be "
3821 "restarted manually next time you log in."
3822@@ -705,7 +712,7 @@ msgstr ""
3823 "Ovi prozori ne podržavaju mogućnost \"spremi trenutne postavke\" i moraju se "
3824 "ručno ponovno pokrenuti sljedeći puta kada se prijavite."
3825
3826-#: src/x11/window-props.c:565
3827+#: src/x11/window-props.c:568
3828 #, c-format
3829 msgid "%s (on %s)"
3830 msgstr "%s (na %s)"
3831diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h
3832index 510e6aa..7eba180 100644
3833--- a/src/backends/meta-backend-private.h
3834+++ b/src/backends/meta-backend-private.h
3835@@ -147,6 +147,10 @@ xkb_layout_index_t meta_backend_get_keymap_layout_group (MetaBackend *backend);
3836
3837 gboolean meta_backend_is_lid_closed (MetaBackend *backend);
3838
3839+void meta_backend_freeze_updates (MetaBackend *backend);
3840+
3841+void meta_backend_thaw_updates (MetaBackend *backend);
3842+
3843 void meta_backend_update_last_device (MetaBackend *backend,
3844 int device_id);
3845
3846diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
3847index c527114..23ab2fa 100644
3848--- a/src/backends/meta-backend.c
3849+++ b/src/backends/meta-backend.c
3850@@ -475,7 +475,7 @@ meta_backend_real_post_init (MetaBackend *backend)
3851 MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
3852 ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
3853
3854- priv->stage = meta_stage_new ();
3855+ priv->stage = meta_stage_new (backend);
3856 clutter_actor_realize (priv->stage);
3857 META_BACKEND_GET_CLASS (backend)->select_stage_events (backend);
3858
3859@@ -1079,6 +1079,24 @@ meta_backend_get_stage (MetaBackend *backend)
3860 return priv->stage;
3861 }
3862
3863+void
3864+meta_backend_freeze_updates (MetaBackend *backend)
3865+{
3866+ ClutterStage *stage;
3867+
3868+ stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
3869+ clutter_stage_freeze_updates (stage);
3870+}
3871+
3872+void
3873+meta_backend_thaw_updates (MetaBackend *backend)
3874+{
3875+ ClutterStage *stage;
3876+
3877+ stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
3878+ clutter_stage_thaw_updates (stage);
3879+}
3880+
3881 static gboolean
3882 update_last_device (MetaBackend *backend)
3883 {
3884diff --git a/src/backends/meta-input-mapper.c b/src/backends/meta-input-mapper.c
3885index 1a3cb2c..5227292 100644
3886--- a/src/backends/meta-input-mapper.c
3887+++ b/src/backends/meta-input-mapper.c
3888@@ -20,6 +20,10 @@
3889
3890 #include "config.h"
3891
3892+#ifdef HAVE_LIBGUDEV
3893+#include <gudev/gudev.h>
3894+#endif
3895+
3896 #include "meta-input-mapper-private.h"
3897 #include "meta-monitor-manager-private.h"
3898 #include "meta-logical-monitor.h"
3899@@ -39,6 +43,9 @@ struct _MetaInputMapper
3900 ClutterDeviceManager *input_device_manager;
3901 GHashTable *input_devices; /* ClutterInputDevice -> MetaMapperInputInfo */
3902 GHashTable *output_devices; /* MetaLogicalMonitor -> MetaMapperOutputInfo */
3903+#ifdef HAVE_LIBGUDEV
3904+ GUdevClient *udev_client;
3905+#endif
3906 };
3907
3908 typedef enum
3909@@ -271,6 +278,33 @@ match_edid (MetaMapperInputInfo *input,
3910 }
3911
3912 static gboolean
3913+input_device_get_physical_size (MetaInputMapper *mapper,
3914+ ClutterInputDevice *device,
3915+ double *width,
3916+ double *height)
3917+{
3918+#ifdef HAVE_LIBGUDEV
3919+ g_autoptr (GUdevDevice) udev_device = NULL;
3920+ const char *node;
3921+
3922+ node = clutter_input_device_get_device_node (device);
3923+ udev_device = g_udev_client_query_by_device_file (mapper->udev_client, node);
3924+
3925+ if (udev_device &&
3926+ g_udev_device_has_property (udev_device, "ID_INPUT_WIDTH_MM"))
3927+ {
3928+ *width = g_udev_device_get_property_as_double (udev_device,
3929+ "ID_INPUT_WIDTH_MM");
3930+ *height = g_udev_device_get_property_as_double (udev_device,
3931+ "ID_INPUT_HEIGHT_MM");
3932+ return TRUE;
3933+ }
3934+#endif
3935+
3936+ return FALSE;
3937+}
3938+
3939+static gboolean
3940 find_size_match (MetaMapperInputInfo *input,
3941 GList *monitors,
3942 MetaMonitor **matched_monitor)
3943@@ -282,7 +316,8 @@ find_size_match (MetaMapperInputInfo *input,
3944
3945 min_w_diff = min_h_diff = MAX_SIZE_MATCH_DIFF;
3946
3947- if (!clutter_input_device_get_physical_size (input->device, &i_width, &i_height))
3948+ if (!input_device_get_physical_size (input->mapper, input->device,
3949+ &i_width, &i_height))
3950 return FALSE;
3951
3952 for (l = monitors; l; l = l->next)
3953@@ -520,6 +555,9 @@ meta_input_mapper_finalize (GObject *object)
3954
3955 g_hash_table_unref (mapper->input_devices);
3956 g_hash_table_unref (mapper->output_devices);
3957+#ifdef HAVE_LIBGUDEV
3958+ g_clear_object (&mapper->udev_client);
3959+#endif
3960
3961 G_OBJECT_CLASS (meta_input_mapper_parent_class)->finalize (object);
3962 }
3963@@ -527,11 +565,18 @@ meta_input_mapper_finalize (GObject *object)
3964 static void
3965 meta_input_mapper_constructed (GObject *object)
3966 {
3967+#ifdef HAVE_LIBGUDEV
3968+ const char *udev_subsystems[] = { "input", NULL };
3969+#endif
3970 MetaInputMapper *mapper = META_INPUT_MAPPER (object);
3971 MetaBackend *backend;
3972
3973 G_OBJECT_CLASS (meta_input_mapper_parent_class)->constructed (object);
3974
3975+#ifdef HAVE_LIBGUDEV
3976+ mapper->udev_client = g_udev_client_new (udev_subsystems);
3977+#endif
3978+
3979 mapper->input_device_manager = clutter_device_manager_get_default ();
3980 g_signal_connect (mapper->input_device_manager, "device-removed",
3981 G_CALLBACK (input_mapper_device_removed_cb), mapper);
3982diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
3983index 27e99b5..7b8df56 100644
3984--- a/src/backends/meta-input-settings.c
3985+++ b/src/backends/meta-input-settings.c
3986@@ -1766,9 +1766,11 @@ power_save_mode_changed_cb (MetaMonitorManager *manager,
3987 ClutterInputDevice *device;
3988 MetaLogicalMonitor *logical_monitor;
3989 MetaMonitor *builtin;
3990+ MetaPowerSave power_save_mode;
3991 gboolean on;
3992
3993- on = (manager->power_save_mode == META_POWER_SAVE_ON);
3994+ power_save_mode = meta_monitor_manager_get_power_save_mode (manager);
3995+ on = power_save_mode == META_POWER_SAVE_ON;
3996 priv = meta_input_settings_get_instance_private (user_data);
3997
3998 builtin = meta_monitor_manager_get_laptop_panel (manager);
3999diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
4000index 771c57f..9a54ce5 100644
4001--- a/src/backends/meta-monitor-config-manager.c
4002+++ b/src/backends/meta-monitor-config-manager.c
4003@@ -1540,7 +1540,7 @@ meta_verify_logical_monitor_config (MetaLogicalMonitorConfig *logical_monitor
4004 }
4005
4006 static gboolean
4007-has_adjecent_neighbour (MetaMonitorsConfig *config,
4008+has_adjacent_neighbour (MetaMonitorsConfig *config,
4009 MetaLogicalMonitorConfig *logical_monitor_config)
4010 {
4011 GList *l;
4012@@ -1559,7 +1559,7 @@ has_adjecent_neighbour (MetaMonitorsConfig *config,
4013 if (logical_monitor_config == other_logical_monitor_config)
4014 continue;
4015
4016- if (meta_rectangle_is_adjecent_to (&logical_monitor_config->layout,
4017+ if (meta_rectangle_is_adjacent_to (&logical_monitor_config->layout,
4018 &other_logical_monitor_config->layout))
4019 return TRUE;
4020 }
4021@@ -1665,10 +1665,10 @@ meta_verify_monitors_config (MetaMonitorsConfig *config,
4022 has_primary = TRUE;
4023 }
4024
4025- if (!has_adjecent_neighbour (config, logical_monitor_config))
4026+ if (!has_adjacent_neighbour (config, logical_monitor_config))
4027 {
4028 g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
4029- "Logical monitors not adjecent");
4030+ "Logical monitors not adjacent");
4031 return FALSE;
4032 }
4033
4034diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
4035index 06e8837..46c3b8c 100644
4036--- a/src/backends/meta-monitor-manager-dummy.c
4037+++ b/src/backends/meta-monitor-manager-dummy.c
4038@@ -694,11 +694,11 @@ meta_monitor_manager_dummy_calculate_monitor_mode_scale (MetaMonitorManager *man
4039 }
4040
4041 static float *
4042-meta_monitor_manager_dummy_calculate_supported_scales (MetaMonitorManager *manager,
4043- MetaLogicalMonitorLayoutMode layout_mode,
4044- MetaMonitor *monitor,
4045- MetaMonitorMode *monitor_mode,
4046- int *n_supported_scales)
4047+meta_monitor_manager_dummy_calculate_supported_scales (MetaMonitorManager *manager,
4048+ MetaLogicalMonitorLayoutMode layout_mode,
4049+ MetaMonitor *monitor,
4050+ MetaMonitorMode *monitor_mode,
4051+ int *n_supported_scales)
4052 {
4053 MetaMonitorScalesConstraint constraints =
4054 META_MONITOR_SCALES_CONSTRAINT_NONE;
4055diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
4056index 3b951c6..cdb8f42 100644
4057--- a/src/backends/meta-monitor-manager-private.h
4058+++ b/src/backends/meta-monitor-manager-private.h
4059@@ -116,8 +116,6 @@ struct _MetaMonitorManager
4060 gboolean in_init;
4061 unsigned int serial;
4062
4063- MetaPowerSave power_save_mode;
4064-
4065 MetaLogicalMonitorLayoutMode layout_mode;
4066
4067 int screen_width;
4068@@ -192,6 +190,8 @@ struct _MetaMonitorManagerClass
4069 GBytes* (*read_edid) (MetaMonitorManager *,
4070 MetaOutput *);
4071
4072+ void (*read_current_state) (MetaMonitorManager *);
4073+
4074 void (*ensure_initial_config) (MetaMonitorManager *);
4075
4076 gboolean (*apply_monitors_config) (MetaMonitorManager *,
4077@@ -305,6 +305,11 @@ void meta_monitor_manager_get_screen_size (MetaMonitorManager *
4078 int *width,
4079 int *height);
4080
4081+MetaPowerSave meta_monitor_manager_get_power_save_mode (MetaMonitorManager *manager);
4082+
4083+void meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager,
4084+ MetaPowerSave mode);
4085+
4086 void meta_monitor_manager_confirm_configuration (MetaMonitorManager *manager,
4087 gboolean ok);
4088
4089diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
4090index 9420265..2d898c7 100644
4091--- a/src/backends/meta-monitor-manager.c
4092+++ b/src/backends/meta-monitor-manager.c
4093@@ -95,7 +95,13 @@ static gfloat transform_matrices[][6] = {
4094
4095 static int signals[SIGNALS_LAST];
4096
4097-G_DEFINE_TYPE (MetaMonitorManager, meta_monitor_manager, G_TYPE_OBJECT)
4098+typedef struct _MetaMonitorManagerPrivate
4099+{
4100+ MetaPowerSave power_save_mode;
4101+} MetaMonitorManagerPrivate;
4102+
4103+G_DEFINE_TYPE_WITH_PRIVATE (MetaMonitorManager, meta_monitor_manager,
4104+ G_TYPE_OBJECT)
4105
4106 static void initialize_dbus_interface (MetaMonitorManager *manager);
4107 static void monitor_manager_setup_dbus_config_handlers (MetaMonitorManager *manager);
4108@@ -107,6 +113,9 @@ meta_monitor_manager_is_config_complete (MetaMonitorManager *manager,
4109 static MetaMonitor *
4110 meta_monitor_manager_get_active_monitor (MetaMonitorManager *manager);
4111
4112+static void
4113+meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager);
4114+
4115 MetaBackend *
4116 meta_monitor_manager_get_backend (MetaMonitorManager *manager)
4117 {
4118@@ -329,11 +338,24 @@ meta_monitor_manager_rebuild_logical_monitors_derived (MetaMonitorManager *manag
4119 primary_logical_monitor);
4120 }
4121
4122+void
4123+meta_monitor_manager_power_save_mode_changed (MetaMonitorManager *manager,
4124+ MetaPowerSave mode)
4125+{
4126+ MetaMonitorManagerPrivate *priv =
4127+ meta_monitor_manager_get_instance_private (manager);
4128+
4129+ priv->power_save_mode = mode;
4130+ g_signal_emit (manager, signals[POWER_SAVE_MODE_CHANGED], 0);
4131+}
4132+
4133 static void
4134 power_save_mode_changed (MetaMonitorManager *manager,
4135 GParamSpec *pspec,
4136 gpointer user_data)
4137 {
4138+ MetaMonitorManagerPrivate *priv =
4139+ meta_monitor_manager_get_instance_private (manager);
4140 MetaMonitorManagerClass *klass;
4141 int mode = meta_dbus_display_config_get_power_save_mode (manager->display_config);
4142
4143@@ -341,7 +363,7 @@ power_save_mode_changed (MetaMonitorManager *manager,
4144 return;
4145
4146 /* If DPMS is unsupported, force the property back. */
4147- if (manager->power_save_mode == META_POWER_SAVE_UNSUPPORTED)
4148+ if (priv->power_save_mode == META_POWER_SAVE_UNSUPPORTED)
4149 {
4150 meta_dbus_display_config_set_power_save_mode (manager->display_config, META_POWER_SAVE_UNSUPPORTED);
4151 return;
4152@@ -351,9 +373,7 @@ power_save_mode_changed (MetaMonitorManager *manager,
4153 if (klass->set_power_save_mode)
4154 klass->set_power_save_mode (manager, mode);
4155
4156- manager->power_save_mode = mode;
4157-
4158- g_signal_emit (manager, signals[POWER_SAVE_MODE_CHANGED], 0);
4159+ meta_monitor_manager_power_save_mode_changed (manager, mode);
4160 }
4161
4162 void
4163@@ -400,11 +420,11 @@ meta_monitor_manager_calculate_monitor_mode_scale (MetaMonitorManager *manager,
4164 }
4165
4166 float *
4167-meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *manager,
4168- MetaLogicalMonitorLayoutMode layout_mode,
4169- MetaMonitor *monitor,
4170- MetaMonitorMode *monitor_mode,
4171- int *n_supported_scales)
4172+meta_monitor_manager_calculate_supported_scales (MetaMonitorManager *manager,
4173+ MetaLogicalMonitorLayoutMode layout_mode,
4174+ MetaMonitor *monitor,
4175+ MetaMonitorMode *monitor_mode,
4176+ int *n_supported_scales)
4177 {
4178 MetaMonitorManagerClass *manager_class =
4179 META_MONITOR_MANAGER_GET_CLASS (manager);
4180@@ -855,6 +875,7 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
4181 object_class->set_property = meta_monitor_manager_set_property;
4182
4183 klass->read_edid = meta_monitor_manager_real_read_edid;
4184+ klass->read_current_state = meta_monitor_manager_real_read_current_state;
4185
4186 signals[MONITORS_CHANGED] =
4187 g_signal_new ("monitors-changed",
4188@@ -2684,6 +2705,15 @@ meta_monitor_manager_get_screen_size (MetaMonitorManager *manager,
4189 *height = manager->screen_height;
4190 }
4191
4192+MetaPowerSave
4193+meta_monitor_manager_get_power_save_mode (MetaMonitorManager *manager)
4194+{
4195+ MetaMonitorManagerPrivate *priv =
4196+ meta_monitor_manager_get_instance_private (manager);
4197+
4198+ return priv->power_save_mode;
4199+}
4200+
4201 static void
4202 rebuild_monitors (MetaMonitorManager *manager)
4203 {
4204@@ -2760,8 +2790,8 @@ meta_monitor_manager_is_transform_handled (MetaMonitorManager *manager,
4205 return manager_class->is_transform_handled (manager, crtc, transform);
4206 }
4207
4208-void
4209-meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
4210+static void
4211+meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager)
4212 {
4213 GList *l;
4214
4215@@ -2782,6 +2812,15 @@ meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
4216 rebuild_monitors (manager);
4217 }
4218
4219+void
4220+meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
4221+{
4222+ MetaMonitorManagerClass *manager_class =
4223+ META_MONITOR_MANAGER_GET_CLASS (manager);
4224+
4225+ manager_class->read_current_state (manager);
4226+}
4227+
4228 static void
4229 meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager)
4230 {
4231diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
4232index 3ff18a5..22a3e45 100644
4233--- a/src/backends/meta-monitor.c
4234+++ b/src/backends/meta-monitor.c
4235@@ -615,12 +615,12 @@ meta_monitor_normal_get_suggested_position (MetaMonitor *monitor,
4236 }
4237
4238 static void
4239-meta_monitor_normal_calculate_crtc_pos (MetaMonitor *monitor,
4240- MetaMonitorMode *monitor_mode,
4241- MetaOutput *output,
4242- MetaMonitorTransform crtc_transform,
4243- int *out_x,
4244- int *out_y)
4245+meta_monitor_normal_calculate_crtc_pos (MetaMonitor *monitor,
4246+ MetaMonitorMode *monitor_mode,
4247+ MetaOutput *output,
4248+ MetaMonitorTransform crtc_transform,
4249+ int *out_x,
4250+ int *out_y)
4251 {
4252 *out_x = 0;
4253 *out_y = 0;
4254@@ -1267,12 +1267,12 @@ meta_monitor_tiled_get_suggested_position (MetaMonitor *monitor,
4255 }
4256
4257 static void
4258-meta_monitor_tiled_calculate_crtc_pos (MetaMonitor *monitor,
4259- MetaMonitorMode *monitor_mode,
4260- MetaOutput *output,
4261- MetaMonitorTransform crtc_transform,
4262- int *out_x,
4263- int *out_y)
4264+meta_monitor_tiled_calculate_crtc_pos (MetaMonitor *monitor,
4265+ MetaMonitorMode *monitor_mode,
4266+ MetaOutput *output,
4267+ MetaMonitorTransform crtc_transform,
4268+ int *out_x,
4269+ int *out_y)
4270 {
4271 MetaMonitorModeTiled *mode_tiled = (MetaMonitorModeTiled *) monitor_mode;
4272
4273@@ -1461,12 +1461,12 @@ meta_monitor_get_modes (MetaMonitor *monitor)
4274 }
4275
4276 void
4277-meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
4278- MetaMonitorMode *monitor_mode,
4279- MetaOutput *output,
4280- MetaMonitorTransform crtc_transform,
4281- int *out_x,
4282- int *out_y)
4283+meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
4284+ MetaMonitorMode *monitor_mode,
4285+ MetaOutput *output,
4286+ MetaMonitorTransform crtc_transform,
4287+ int *out_x,
4288+ int *out_y)
4289 {
4290 META_MONITOR_GET_CLASS (monitor)->calculate_crtc_pos (monitor,
4291 monitor_mode,
4292@@ -1587,7 +1587,6 @@ get_closest_scale_factor_for_resolution (float width,
4293 float scaled_w;
4294 float best_scale;
4295 int base_scaled_w;
4296- gboolean limit_exceeded;
4297 gboolean found_one;
4298
4299 best_scale = 0;
4300@@ -1604,7 +1603,6 @@ get_closest_scale_factor_for_resolution (float width,
4301
4302 i = 0;
4303 found_one = FALSE;
4304- limit_exceeded = FALSE;
4305 base_scaled_w = floorf (scaled_w);
4306
4307 do
4308@@ -1637,17 +1635,17 @@ get_closest_scale_factor_for_resolution (float width,
4309
4310 i++;
4311 }
4312- while (!found_one && !limit_exceeded);
4313+ while (!found_one);
4314
4315 out:
4316 return best_scale;
4317 }
4318
4319 float *
4320-meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
4321- MetaMonitorMode *monitor_mode,
4322- MetaMonitorScalesConstraint constraints,
4323- int *n_supported_scales)
4324+meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
4325+ MetaMonitorMode *monitor_mode,
4326+ MetaMonitorScalesConstraint constraints,
4327+ int *n_supported_scales)
4328 {
4329 unsigned int i, j;
4330 int width, height;
4331@@ -1727,11 +1725,11 @@ meta_monitor_mode_get_flags (MetaMonitorMode *monitor_mode)
4332 }
4333
4334 gboolean
4335-meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
4336- MetaMonitorMode *mode,
4337- MetaMonitorModeFunc func,
4338- gpointer user_data,
4339- GError **error)
4340+meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
4341+ MetaMonitorMode *mode,
4342+ MetaMonitorModeFunc func,
4343+ gpointer user_data,
4344+ GError **error)
4345 {
4346 MetaMonitorPrivate *monitor_priv =
4347 meta_monitor_get_instance_private (monitor);
4348@@ -1753,11 +1751,11 @@ meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
4349 }
4350
4351 gboolean
4352-meta_monitor_mode_foreach_output (MetaMonitor *monitor,
4353- MetaMonitorMode *mode,
4354- MetaMonitorModeFunc func,
4355- gpointer user_data,
4356- GError **error)
4357+meta_monitor_mode_foreach_output (MetaMonitor *monitor,
4358+ MetaMonitorMode *mode,
4359+ MetaMonitorModeFunc func,
4360+ gpointer user_data,
4361+ GError **error)
4362 {
4363 MetaMonitorPrivate *monitor_priv =
4364 meta_monitor_get_instance_private (monitor);
4365diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
4366index 41f2c0f..413a4e2 100644
4367--- a/src/backends/meta-monitor.h
4368+++ b/src/backends/meta-monitor.h
4369@@ -74,12 +74,12 @@ struct _MetaMonitorClass
4370 MetaOutput * (* get_main_output) (MetaMonitor *monitor);
4371 void (* derive_layout) (MetaMonitor *monitor,
4372 MetaRectangle *layout);
4373- void (* calculate_crtc_pos) (MetaMonitor *monitor,
4374- MetaMonitorMode *monitor_mode,
4375- MetaOutput *output,
4376- MetaMonitorTransform crtc_transform,
4377- int *out_x,
4378- int *out_y);
4379+ void (* calculate_crtc_pos) (MetaMonitor *monitor,
4380+ MetaMonitorMode *monitor_mode,
4381+ MetaOutput *output,
4382+ MetaMonitorTransform crtc_transform,
4383+ int *out_x,
4384+ int *out_y);
4385 gboolean (* get_suggested_position) (MetaMonitor *monitor,
4386 int *width,
4387 int *height);
4388@@ -214,22 +214,22 @@ META_EXPORT_TEST
4389 GList * meta_monitor_get_modes (MetaMonitor *monitor);
4390
4391 META_EXPORT_TEST
4392-void meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
4393- MetaMonitorMode *monitor_mode,
4394- MetaOutput *output,
4395- MetaMonitorTransform crtc_transform,
4396- int *out_x,
4397- int *out_y);
4398+void meta_monitor_calculate_crtc_pos (MetaMonitor *monitor,
4399+ MetaMonitorMode *monitor_mode,
4400+ MetaOutput *output,
4401+ MetaMonitorTransform crtc_transform,
4402+ int *out_x,
4403+ int *out_y);
4404
4405 META_EXPORT_TEST
4406 float meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
4407 MetaMonitorMode *monitor_mode);
4408
4409 META_EXPORT_TEST
4410-float * meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
4411- MetaMonitorMode *monitor_mode,
4412- MetaMonitorScalesConstraint constraints,
4413- int *n_supported_scales);
4414+float * meta_monitor_calculate_supported_scales (MetaMonitor *monitor,
4415+ MetaMonitorMode *monitor_mode,
4416+ MetaMonitorScalesConstraint constraints,
4417+ int *n_supported_scales);
4418
4419 META_EXPORT_TEST
4420 const char * meta_monitor_mode_get_id (MetaMonitorMode *monitor_mode);
4421@@ -249,18 +249,18 @@ META_EXPORT_TEST
4422 MetaCrtcModeFlag meta_monitor_mode_get_flags (MetaMonitorMode *monitor_mode);
4423
4424 META_EXPORT_TEST
4425-gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
4426- MetaMonitorMode *mode,
4427- MetaMonitorModeFunc func,
4428- gpointer user_data,
4429- GError **error);
4430+gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
4431+ MetaMonitorMode *mode,
4432+ MetaMonitorModeFunc func,
4433+ gpointer user_data,
4434+ GError **error);
4435
4436 META_EXPORT_TEST
4437-gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
4438- MetaMonitorMode *mode,
4439- MetaMonitorModeFunc func,
4440- gpointer user_data,
4441- GError **error);
4442+gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
4443+ MetaMonitorMode *mode,
4444+ MetaMonitorModeFunc func,
4445+ gpointer user_data,
4446+ GError **error);
4447
4448 META_EXPORT_TEST
4449 gboolean meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode);
4450diff --git a/src/backends/meta-stage-private.h b/src/backends/meta-stage-private.h
4451index 21feab3..639d237 100644
4452--- a/src/backends/meta-stage-private.h
4453+++ b/src/backends/meta-stage-private.h
4454@@ -23,12 +23,13 @@
4455 #include "backends/meta-cursor.h"
4456 #include "meta/boxes.h"
4457 #include "meta/meta-stage.h"
4458+#include "meta/types.h"
4459
4460 G_BEGIN_DECLS
4461
4462 typedef struct _MetaOverlay MetaOverlay;
4463
4464-ClutterActor *meta_stage_new (void);
4465+ClutterActor *meta_stage_new (MetaBackend *backend);
4466
4467 MetaOverlay *meta_stage_create_cursor_overlay (MetaStage *stage);
4468 void meta_stage_remove_cursor_overlay (MetaStage *stage,
4469diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c
4470index 1f0d9c0..47a00e5 100644
4471--- a/src/backends/meta-stage.c
4472+++ b/src/backends/meta-stage.c
4473@@ -181,6 +181,15 @@ meta_stage_deactivate (ClutterStage *actor)
4474 }
4475
4476 static void
4477+on_power_save_changed (MetaMonitorManager *monitor_manager,
4478+ MetaStage *stage)
4479+{
4480+ if (meta_monitor_manager_get_power_save_mode (monitor_manager) ==
4481+ META_POWER_SAVE_ON)
4482+ clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
4483+}
4484+
4485+static void
4486 meta_stage_class_init (MetaStageClass *klass)
4487 {
4488 ClutterStageClass *stage_class = (ClutterStageClass *) klass;
4489@@ -209,11 +218,21 @@ meta_stage_init (MetaStage *stage)
4490 }
4491
4492 ClutterActor *
4493-meta_stage_new (void)
4494+meta_stage_new (MetaBackend *backend)
4495 {
4496- return g_object_new (META_TYPE_STAGE,
4497- "cursor-visible", FALSE,
4498- NULL);
4499+ MetaStage *stage;
4500+ MetaMonitorManager *monitor_manager;
4501+
4502+ stage = g_object_new (META_TYPE_STAGE,
4503+ "cursor-visible", FALSE,
4504+ NULL);
4505+
4506+ monitor_manager = meta_backend_get_monitor_manager (backend);
4507+ g_signal_connect (monitor_manager, "power-save-mode-changed",
4508+ G_CALLBACK (on_power_save_changed),
4509+ stage);
4510+
4511+ return CLUTTER_ACTOR (stage);
4512 }
4513
4514 static void
4515diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c
4516index 79a9b1e..8c2fbfe 100644
4517--- a/src/backends/native/meta-crtc-kms.c
4518+++ b/src/backends/native/meta-crtc-kms.c
4519@@ -41,9 +41,6 @@
4520 typedef struct _MetaCrtcKms
4521 {
4522 unsigned int index;
4523- uint32_t underscan_prop_id;
4524- uint32_t underscan_hborder_prop_id;
4525- uint32_t underscan_vborder_prop_id;
4526 uint32_t primary_plane_id;
4527 uint32_t rotation_prop_id;
4528 uint32_t rotation_map[ALL_TRANSFORMS];
4529@@ -137,54 +134,6 @@ meta_crtc_kms_apply_transform (MetaCrtc *crtc)
4530 }
4531 }
4532
4533-void
4534-meta_crtc_kms_set_underscan (MetaCrtc *crtc,
4535- gboolean is_underscanning)
4536-{
4537- MetaCrtcKms *crtc_kms = crtc->driver_private;
4538- MetaGpu *gpu = meta_crtc_get_gpu (crtc);
4539- MetaGpuKms *gpu_kms = META_GPU_KMS (gpu);
4540- int kms_fd;
4541-
4542- if (!crtc_kms->underscan_prop_id)
4543- return;
4544-
4545- kms_fd = meta_gpu_kms_get_fd (gpu_kms);
4546-
4547- if (is_underscanning)
4548- {
4549- drmModeObjectSetProperty (kms_fd, crtc->crtc_id,
4550- DRM_MODE_OBJECT_CRTC,
4551- crtc_kms->underscan_prop_id, (uint64_t) 1);
4552-
4553- if (crtc_kms->underscan_hborder_prop_id)
4554- {
4555- uint64_t value;
4556-
4557- value = crtc->current_mode->width * 0.05;
4558- drmModeObjectSetProperty (kms_fd, crtc->crtc_id,
4559- DRM_MODE_OBJECT_CRTC,
4560- crtc_kms->underscan_hborder_prop_id, value);
4561- }
4562- if (crtc_kms->underscan_vborder_prop_id)
4563- {
4564- uint64_t value;
4565-
4566- value = crtc->current_mode->height * 0.05;
4567- drmModeObjectSetProperty (kms_fd, crtc->crtc_id,
4568- DRM_MODE_OBJECT_CRTC,
4569- crtc_kms->underscan_vborder_prop_id, value);
4570- }
4571-
4572- }
4573- else
4574- {
4575- drmModeObjectSetProperty (kms_fd, crtc->crtc_id,
4576- DRM_MODE_OBJECT_CRTC,
4577- crtc_kms->underscan_prop_id, (uint64_t) 0);
4578- }
4579-}
4580-
4581 static int
4582 find_property_index (MetaGpu *gpu,
4583 drmModeObjectPropertiesPtr props,
4584@@ -534,43 +483,6 @@ init_crtc_rotations (MetaCrtc *crtc,
4585 }
4586
4587 static void
4588-find_crtc_properties (MetaCrtc *crtc,
4589- MetaGpuKms *gpu_kms)
4590-{
4591- MetaCrtcKms *crtc_kms = crtc->driver_private;
4592- int kms_fd;
4593- drmModeObjectPropertiesPtr props;
4594- unsigned int i;
4595-
4596- kms_fd = meta_gpu_kms_get_fd (gpu_kms);
4597- props = drmModeObjectGetProperties (kms_fd, crtc->crtc_id,
4598- DRM_MODE_OBJECT_CRTC);
4599- if (!props)
4600- return;
4601-
4602- for (i = 0; i < props->count_props; i++)
4603- {
4604- drmModePropertyPtr prop = drmModeGetProperty (kms_fd, props->props[i]);
4605- if (!prop)
4606- continue;
4607-
4608- if ((prop->flags & DRM_MODE_PROP_ENUM) &&
4609- strcmp (prop->name, "underscan") == 0)
4610- crtc_kms->underscan_prop_id = prop->prop_id;
4611- else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
4612- strcmp (prop->name, "underscan hborder") == 0)
4613- crtc_kms->underscan_hborder_prop_id = prop->prop_id;
4614- else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
4615- strcmp (prop->name, "underscan vborder") == 0)
4616- crtc_kms->underscan_vborder_prop_id = prop->prop_id;
4617-
4618- drmModeFreeProperty (prop);
4619- }
4620-
4621- drmModeFreeObjectProperties (props);
4622-}
4623-
4624-static void
4625 meta_crtc_destroy_notify (MetaCrtc *crtc)
4626 {
4627 MetaCrtcKms *crtc_kms = crtc->driver_private;
4628@@ -628,7 +540,6 @@ meta_create_kms_crtc (MetaGpuKms *gpu_kms,
4629 crtc->driver_private = crtc_kms;
4630 crtc->driver_notify = (GDestroyNotify) meta_crtc_destroy_notify;
4631
4632- find_crtc_properties (crtc, gpu_kms);
4633 init_crtc_rotations (crtc, gpu);
4634
4635 return crtc;
4636diff --git a/src/backends/native/meta-crtc-kms.h b/src/backends/native/meta-crtc-kms.h
4637index 622ea55..456f440 100644
4638--- a/src/backends/native/meta-crtc-kms.h
4639+++ b/src/backends/native/meta-crtc-kms.h
4640@@ -44,9 +44,6 @@ gboolean meta_crtc_kms_is_transform_handled (MetaCrtc *crtc,
4641
4642 void meta_crtc_kms_apply_transform (MetaCrtc *crtc);
4643
4644-void meta_crtc_kms_set_underscan (MetaCrtc *crtc,
4645- gboolean is_underscanning);
4646-
4647 GArray * meta_crtc_kms_get_modifiers (MetaCrtc *crtc,
4648 uint32_t format);
4649
4650diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c
4651index d924466..c569b94 100644
4652--- a/src/backends/native/meta-gpu-kms.c
4653+++ b/src/backends/native/meta-gpu-kms.c
4654@@ -210,7 +210,7 @@ meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms,
4655
4656 g_assert (meta_crtc_get_gpu (crtc) == META_GPU (gpu_kms));
4657
4658- if (monitor_manager->power_save_mode != META_POWER_SAVE_ON)
4659+ if (meta_monitor_manager_get_power_save_mode (monitor_manager))
4660 return FALSE;
4661
4662 connected_crtc_found = FALSE;
4663@@ -273,7 +273,8 @@ meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms,
4664 int ret = -1;
4665
4666 g_assert (meta_crtc_get_gpu (crtc) == gpu);
4667- g_assert (monitor_manager->power_save_mode == META_POWER_SAVE_ON);
4668+ g_assert (meta_monitor_manager_get_power_save_mode (monitor_manager) ==
4669+ META_POWER_SAVE_ON);
4670
4671 get_crtc_drm_connectors (gpu, crtc, &connectors, &n_connectors);
4672 g_assert (n_connectors > 0);
4673@@ -836,8 +837,6 @@ meta_gpu_kms_read_current (MetaGpu *gpu,
4674 GError **error)
4675 {
4676 MetaGpuKms *gpu_kms = META_GPU_KMS (gpu);
4677- MetaMonitorManager *monitor_manager =
4678- meta_gpu_get_monitor_manager (gpu);
4679 MetaKmsResources resources;
4680 g_autoptr (GError) local_error = NULL;
4681
4682@@ -855,8 +854,6 @@ meta_gpu_kms_read_current (MetaGpu *gpu,
4683 gpu_kms->max_buffer_width = resources.resources->max_width;
4684 gpu_kms->max_buffer_height = resources.resources->max_height;
4685
4686- monitor_manager->power_save_mode = META_POWER_SAVE_ON;
4687-
4688 /* Note: we must not free the public structures (output, crtc, monitor
4689 mode and monitor info) here, they must be kept alive until the API
4690 users are done with them after we emit monitors-changed, and thus
4691diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
4692index c2c8ab5..9a03644 100644
4693--- a/src/backends/native/meta-monitor-manager-kms.c
4694+++ b/src/backends/native/meta-monitor-manager-kms.c
4695@@ -109,6 +109,21 @@ meta_monitor_manager_kms_read_edid (MetaMonitorManager *manager,
4696 }
4697
4698 static void
4699+meta_monitor_manager_kms_read_current_state (MetaMonitorManager *manager)
4700+{
4701+ MetaMonitorManagerClass *parent_class =
4702+ META_MONITOR_MANAGER_CLASS (meta_monitor_manager_kms_parent_class);
4703+ MetaPowerSave power_save_mode;
4704+
4705+ power_save_mode = meta_monitor_manager_get_power_save_mode (manager);
4706+ if (power_save_mode != META_POWER_SAVE_ON)
4707+ meta_monitor_manager_power_save_mode_changed (manager,
4708+ META_POWER_SAVE_ON);
4709+
4710+ parent_class->read_current_state (manager);
4711+}
4712+
4713+static void
4714 meta_monitor_manager_kms_set_power_save_mode (MetaMonitorManager *manager,
4715 MetaPowerSave mode)
4716 {
4717@@ -512,11 +527,11 @@ meta_monitor_manager_kms_calculate_monitor_mode_scale (MetaMonitorManager *manag
4718 }
4719
4720 static float *
4721-meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager *manager,
4722- MetaLogicalMonitorLayoutMode layout_mode,
4723- MetaMonitor *monitor,
4724- MetaMonitorMode *monitor_mode,
4725- int *n_supported_scales)
4726+meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager *manager,
4727+ MetaLogicalMonitorLayoutMode layout_mode,
4728+ MetaMonitor *monitor,
4729+ MetaMonitorMode *monitor_mode,
4730+ int *n_supported_scales)
4731 {
4732 MetaMonitorScalesConstraint constraints =
4733 META_MONITOR_SCALES_CONSTRAINT_NONE;
4734@@ -755,6 +770,7 @@ meta_monitor_manager_kms_class_init (MetaMonitorManagerKmsClass *klass)
4735 object_class->dispose = meta_monitor_manager_kms_dispose;
4736
4737 manager_class->read_edid = meta_monitor_manager_kms_read_edid;
4738+ manager_class->read_current_state = meta_monitor_manager_kms_read_current_state;
4739 manager_class->ensure_initial_config = meta_monitor_manager_kms_ensure_initial_config;
4740 manager_class->apply_monitors_config = meta_monitor_manager_kms_apply_monitors_config;
4741 manager_class->set_power_save_mode = meta_monitor_manager_kms_set_power_save_mode;
4742diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
4743index f3fa17e..f3cc543 100644
4744--- a/src/backends/native/meta-output-kms.c
4745+++ b/src/backends/native/meta-output-kms.c
4746@@ -56,6 +56,10 @@ typedef struct _MetaOutputKms
4747 uint32_t edid_blob_id;
4748 uint32_t tile_blob_id;
4749
4750+ uint32_t underscan_prop_id;
4751+ uint32_t underscan_hborder_prop_id;
4752+ uint32_t underscan_vborder_prop_id;
4753+
4754 int suggested_x;
4755 int suggested_y;
4756 uint32_t hotplug_mode_update;
4757@@ -66,13 +70,55 @@ typedef struct _MetaOutputKms
4758 void
4759 meta_output_kms_set_underscan (MetaOutput *output)
4760 {
4761+ MetaOutputKms *output_kms = output->driver_private;
4762+ MetaGpu *gpu = meta_output_get_gpu (output);
4763+ MetaGpuKms *gpu_kms = META_GPU_KMS (gpu);
4764 MetaCrtc *crtc;
4765+ int kms_fd;
4766+ uint32_t connector_id;
4767
4768- crtc = meta_output_get_assigned_crtc (output);
4769- if (!crtc)
4770+ if (!output_kms->underscan_prop_id)
4771 return;
4772
4773- meta_crtc_kms_set_underscan (crtc, output->is_underscanning);
4774+ crtc = meta_output_get_assigned_crtc (output);
4775+ kms_fd = meta_gpu_kms_get_fd (gpu_kms);
4776+ connector_id = output_kms->connector->connector_id;
4777+
4778+ if (output->is_underscanning && crtc && crtc->current_mode)
4779+ {
4780+ drmModeObjectSetProperty (kms_fd, connector_id,
4781+ DRM_MODE_OBJECT_CONNECTOR,
4782+ output_kms->underscan_prop_id,
4783+ (uint64_t) 1);
4784+
4785+ if (output_kms->underscan_hborder_prop_id)
4786+ {
4787+ uint64_t value;
4788+
4789+ value = MIN (128, crtc->current_mode->width * 0.05);
4790+ drmModeObjectSetProperty (kms_fd, connector_id,
4791+ DRM_MODE_OBJECT_CONNECTOR,
4792+ output_kms->underscan_hborder_prop_id,
4793+ value);
4794+ }
4795+ if (output_kms->underscan_vborder_prop_id)
4796+ {
4797+ uint64_t value;
4798+
4799+ value = MIN (128, crtc->current_mode->height * 0.05);
4800+ drmModeObjectSetProperty (kms_fd, connector_id,
4801+ DRM_MODE_OBJECT_CONNECTOR,
4802+ output_kms->underscan_vborder_prop_id,
4803+ value);
4804+ }
4805+ }
4806+ else
4807+ {
4808+ drmModeObjectSetProperty (kms_fd, connector_id,
4809+ DRM_MODE_OBJECT_CONNECTOR,
4810+ output_kms->underscan_prop_id,
4811+ (uint64_t) 0);
4812+ }
4813 }
4814
4815 uint32_t
4816@@ -312,6 +358,15 @@ find_connector_properties (MetaGpuKms *gpu_kms,
4817 strcmp (prop->name, "panel orientation") == 0)
4818 handle_panel_orientation (output, prop,
4819 output_kms->connector->prop_values[i]);
4820+ else if ((prop->flags & DRM_MODE_PROP_ENUM) &&
4821+ strcmp (prop->name, "underscan") == 0)
4822+ output_kms->underscan_prop_id = prop->prop_id;
4823+ else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
4824+ strcmp (prop->name, "underscan hborder") == 0)
4825+ output_kms->underscan_hborder_prop_id = prop->prop_id;
4826+ else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
4827+ strcmp (prop->name, "underscan vborder") == 0)
4828+ output_kms->underscan_vborder_prop_id = prop->prop_id;
4829
4830 drmModeFreeProperty (prop);
4831 }
4832@@ -639,6 +694,7 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
4833 output->suggested_x = output_kms->suggested_x;
4834 output->suggested_y = output_kms->suggested_y;
4835 output->hotplug_mode_update = output_kms->hotplug_mode_update;
4836+ output->supports_underscanning = output_kms->underscan_prop_id != 0;
4837
4838 if (output_kms->edid_blob_id != 0)
4839 {
4840diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
4841index 771ca08..086e8e4 100644
4842--- a/src/backends/native/meta-renderer-native.c
4843+++ b/src/backends/native/meta-renderer-native.c
4844@@ -103,8 +103,6 @@ typedef struct _MetaRendererNativeGpuData
4845 #ifdef HAVE_EGL_DEVICE
4846 struct {
4847 EGLDeviceEXT device;
4848-
4849- gboolean no_egl_output_drm_flip_event;
4850 } egl;
4851 #endif
4852
4853@@ -215,6 +213,9 @@ struct _MetaRendererNative
4854
4855 int64_t frame_counter;
4856 gboolean pending_unset_disabled_crtcs;
4857+
4858+ GList *power_save_page_flip_closures;
4859+ guint power_save_page_flip_source_id;
4860 };
4861
4862 static void
4863@@ -257,6 +258,15 @@ cogl_pixel_format_from_drm_format (uint32_t drm_format,
4864 CoglPixelFormat *out_format,
4865 CoglTextureComponents *out_components);
4866
4867+static MetaBackend *
4868+backend_from_renderer_native (MetaRendererNative *renderer_native)
4869+{
4870+ MetaMonitorManager *monitor_manager =
4871+ META_MONITOR_MANAGER (renderer_native->monitor_manager_kms);
4872+
4873+ return meta_monitor_manager_get_backend (monitor_manager);
4874+}
4875+
4876 static void
4877 meta_renderer_native_gpu_data_free (MetaRendererNativeGpuData *renderer_gpu_data)
4878 {
4879@@ -1485,8 +1495,6 @@ flip_egl_stream (MetaOnscreenNative *onscreen_native,
4880 renderer_gpu_data =
4881 meta_renderer_native_get_gpu_data (onscreen_native->renderer_native,
4882 onscreen_native->render_gpu);
4883- if (renderer_gpu_data->egl.no_egl_output_drm_flip_event)
4884- return FALSE;
4885
4886 closure_container =
4887 meta_gpu_kms_wrap_flip_closure (onscreen_native->render_gpu,
4888@@ -1509,9 +1517,7 @@ flip_egl_stream (MetaOnscreenNative *onscreen_native,
4889 if (error->domain != META_EGL_ERROR ||
4890 error->code != EGL_RESOURCE_BUSY_EXT)
4891 {
4892- g_warning ("Failed to flip EGL stream (%s), relying on clock from "
4893- "now on", error->message);
4894- renderer_gpu_data->egl.no_egl_output_drm_flip_event = TRUE;
4895+ g_warning ("Failed to flip EGL stream: %s", error->message);
4896 }
4897 g_error_free (error);
4898 meta_gpu_kms_flip_closure_container_free (closure_container);
4899@@ -1532,6 +1538,38 @@ is_timestamp_earlier_than (uint64_t ts1,
4900 return ts2 - ts1 < UINT64_MAX / 2;
4901 }
4902
4903+static gboolean
4904+dummy_power_save_page_flip_cb (gpointer user_data)
4905+{
4906+ MetaRendererNative *renderer_native = user_data;
4907+
4908+ g_list_free_full (renderer_native->power_save_page_flip_closures,
4909+ (GDestroyNotify) g_closure_unref);
4910+ renderer_native->power_save_page_flip_closures = NULL;
4911+ renderer_native->power_save_page_flip_source_id = 0;
4912+
4913+ return G_SOURCE_REMOVE;
4914+}
4915+
4916+static void
4917+queue_dummy_power_save_page_flip (MetaRendererNative *renderer_native,
4918+ GClosure *flip_closure)
4919+{
4920+ const unsigned int timeout_ms = 100;
4921+
4922+ if (!renderer_native->power_save_page_flip_source_id)
4923+ {
4924+ renderer_native->power_save_page_flip_source_id =
4925+ g_timeout_add (timeout_ms,
4926+ dummy_power_save_page_flip_cb,
4927+ renderer_native);
4928+ }
4929+
4930+ renderer_native->power_save_page_flip_closures =
4931+ g_list_prepend (renderer_native->power_save_page_flip_closures,
4932+ g_closure_ref (flip_closure));
4933+}
4934+
4935 typedef struct _RetryPageFlipData
4936 {
4937 MetaCrtc *crtc;
4938@@ -1547,14 +1585,39 @@ retry_page_flip_data_free (RetryPageFlipData *retry_page_flip_data)
4939 g_free (retry_page_flip_data);
4940 }
4941
4942+static void
4943+retry_page_flip_data_fake_flipped (RetryPageFlipData *retry_page_flip_data,
4944+ MetaOnscreenNative *onscreen_native)
4945+{
4946+ MetaCrtc *crtc = retry_page_flip_data->crtc;
4947+ MetaGpuKms *gpu_kms = META_GPU_KMS (meta_crtc_get_gpu (crtc));
4948+
4949+ if (gpu_kms != onscreen_native->render_gpu)
4950+ {
4951+ MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
4952+
4953+ secondary_gpu_state =
4954+ meta_onscreen_native_get_secondary_gpu_state (onscreen_native,
4955+ gpu_kms);
4956+ secondary_gpu_state->pending_flips--;
4957+ }
4958+
4959+ onscreen_native->total_pending_flips--;
4960+}
4961+
4962 static gboolean
4963 retry_page_flips (gpointer user_data)
4964 {
4965 MetaOnscreenNative *onscreen_native = user_data;
4966+ MetaRendererNative *renderer_native = onscreen_native->renderer_native;
4967+ MetaMonitorManager *monitor_manager =
4968+ META_MONITOR_MANAGER (renderer_native->monitor_manager_kms);
4969 uint64_t now_us;
4970+ MetaPowerSave power_save_mode;
4971 GList *l;
4972
4973 now_us = g_source_get_time (onscreen_native->retry_page_flips_source);
4974+ power_save_mode = meta_monitor_manager_get_power_save_mode (monitor_manager);
4975
4976 l = onscreen_native->pending_page_flip_retries;
4977 while (l)
4978@@ -1566,6 +1629,19 @@ retry_page_flips (gpointer user_data)
4979 g_autoptr (GError) error = NULL;
4980 gboolean did_flip;
4981
4982+ if (power_save_mode != META_POWER_SAVE_ON)
4983+ {
4984+ onscreen_native->pending_page_flip_retries =
4985+ g_list_remove_link (onscreen_native->pending_page_flip_retries, l);
4986+
4987+ retry_page_flip_data_fake_flipped (retry_page_flip_data,
4988+ onscreen_native);
4989+ retry_page_flip_data_free (retry_page_flip_data);
4990+
4991+ l = l_next;
4992+ continue;
4993+ }
4994+
4995 if (is_timestamp_earlier_than (now_us,
4996 retry_page_flip_data->retry_time_us))
4997 {
4998@@ -1582,7 +1658,7 @@ retry_page_flips (gpointer user_data)
4999 g_error_matches (error, G_IO_ERROR, G_IO_ERROR_BUSY))
5000 {
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches