Merge lp:~attente/gtk/refresh-mir-2 into lp:~ubuntu-desktop/gtk/ubuntugtk3

Proposed by William Hua on 2015-07-04
Status: Merged
Approved by: Iain Lane on 2015-07-08
Approved revision: 448
Merged at revision: 453
Proposed branch: lp:~attente/gtk/refresh-mir-2
Merge into: lp:~ubuntu-desktop/gtk/ubuntugtk3
Diff against target: 2798 lines (+1643/-867)
4 files modified
debian/changelog (+6/-0)
debian/patches/0001-backport-mir-patches-from-upstream-master.patch (+1636/-147)
debian/patches/0002-Unstable-mir-patches-from-git-wip-mir-unstable.patch (+0/-718)
debian/patches/series (+1/-2)
To merge this branch: bzr merge lp:~attente/gtk/refresh-mir-2
Reviewer Review Type Date Requested Status
Iain Lane 2015-07-07 Approve on 2015-07-08
Ubuntu Desktop 2015-07-04 Pending
Review via email: mp+263822@code.launchpad.net

Commit Message

Backport mir patches from upstream master.

Description of the Change

Backport mir patches from upstream master.

Supercedes https://code.launchpad.net/~attente/gtk/refresh-mir/+merge/262776.

To post a comment you must log in.
Iain Lane (laney) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2015-06-19 18:08:28 +0000
3+++ debian/changelog 2015-07-04 03:42:40 +0000
4@@ -1,3 +1,9 @@
5+gtk+3.0 (3.16.4-2ubuntu2) UNRELEASED; urgency=medium
6+
7+ * debian/patches/0001-backport-mir-patches-from-upstream-master.patch
8+
9+ -- William Hua <william.hua@canonical.com> Fri, 03 Jul 2015 23:09:34 -0400
10+
11 gtk+3.0 (3.16.4-2ubuntu1) wily; urgency=low
12
13 * Merge with Debian. Remaining changes:
14
15=== renamed file 'debian/patches/0001-Stable-mir-patches-from-git-master.patch' => 'debian/patches/0001-backport-mir-patches-from-upstream-master.patch'
16--- debian/patches/0001-Stable-mir-patches-from-git-master.patch 2015-06-02 11:18:47 +0000
17+++ debian/patches/0001-backport-mir-patches-from-upstream-master.patch 2015-07-04 03:42:40 +0000
18@@ -1,21 +1,41 @@
19-From 7922450aa8d7d403fc3c0d0c347c3a1f013c0c70 Mon Sep 17 00:00:00 2001
20-From: Rico Tzschichholz <ricotz@ubuntu.com>
21-Date: Fri, 20 Mar 2015 20:18:44 +0100
22-Subject: [PATCH 1/2] Stable mir patches from git master.
23+From a4a3dbe3550c272187e3cb27dade41bc37e18d20 Mon Sep 17 00:00:00 2001
24+From: William Hua <william.hua@canonical.com>
25+Date: Tue, 7 Apr 2015 10:33:35 -0400
26+Subject: [PATCH] backport mir patches from upstream master
27
28+61f3399f980288a9a9e4b03b50dd147a8af55a8d
29+ea190a339a9e61a52db9d307568f12e0a234f52b
30+6a51ac59f05b01d2fd1def67a6df589de4b423a5
31+d43f5258ffc4fc0ef22e47eb00b5a3742e3716da
32+a43efc665576c0da58771931774f56d4faffb1b8
33+e6b3bae7871df3d5b03dae0e36e4748c41971d1b
34+aebac40d3819114d55bf33301d30ff5a2fd6ad1a
35+a57636f057c6c9bc16a6b60a51b973c9dc8573ca
36+e1c958e70df7227b598d6d16adf9770e95a9f998
37+f1c11740c1e5c7d429a3d33c9847a52974aa5b3f
38+d37f94a524c7109cf1990eb864006111150f20fe
39+9800d83a721fd21b34df6dd36684d3e0e2a9fd7b
40+be068607f68b185483154371548e0ea2123b0fcb
41+19f66c781f41ab44c2ed4b33b7bf9b4943833acd
42+2374a1b50b6b54b8818a37e70ecef4d0e06bebba
43+8fac1f688e662de9fdbbcf370a32adfe7c78151a
44+e083eb42e916dbd2f75e213956a4e513e892d165
45+da14dbe4e5a40fccf9155f4cd87c97457f9439d6
46+2d223facdc0bf7ed0342da3b40d6ddb658cd3cb4
47+1e6c7e3af09c5ec0aed5297fc285d13cff76e720
48 ---
49- configure.ac | 1 +
50- gdk/mir/gdkmir-debug.c | 245 ++++++++++++++------------------------------
51- gdk/mir/gdkmir-private.h | 8 +-
52- gdk/mir/gdkmir.h | 6 +-
53- gdk/mir/gdkmireventsource.c | 203 +++++++++++++++++++++++-------------
54- gdk/mir/gdkmirwindowimpl.c | 17 +--
55- 6 files changed, 226 insertions(+), 254 deletions(-)
56+ gdk/mir/gdkmir-debug.c | 263 +++++++++----------------
57+ gdk/mir/gdkmir-private.h | 20 +-
58+ gdk/mir/gdkmirdisplay.c | 72 +++----
59+ gdk/mir/gdkmireventsource.c | 317 ++++++++++++++++--------------
60+ gdk/mir/gdkmirscreen.c | 42 ++--
61+ gdk/mir/gdkmirwindowimpl.c | 462 ++++++++++++++++++--------------------------
62+ 6 files changed, 504 insertions(+), 672 deletions(-)
63
64-Index: gtk+3.0-3.16.3/gdk/mir/gdkmir-debug.c
65-===================================================================
66---- gtk+3.0-3.16.3.orig/gdk/mir/gdkmir-debug.c
67-+++ gtk+3.0-3.16.3/gdk/mir/gdkmir-debug.c
68+diff --git a/gdk/mir/gdkmir-debug.c b/gdk/mir/gdkmir-debug.c
69+index 4dd3ece..a135f1b 100644
70+--- a/gdk/mir/gdkmir-debug.c
71++++ b/gdk/mir/gdkmir-debug.c
72 @@ -21,225 +21,132 @@ void
73 _gdk_mir_print_modifiers (unsigned int modifiers)
74 {
75@@ -181,20 +201,20 @@
76 - break;
77 - case mir_motion_action_outside:
78 - g_printerr ("outside");
79-+ case mir_pointer_action_enter:
80-+ g_printerr ("enter");
81- break;
82+- break;
83 - case mir_motion_action_pointer_down:
84 - g_printerr ("pointer-down");
85-+ case mir_pointer_action_leave:
86-+ g_printerr ("leave");
87- break;
88+- break;
89 - case mir_motion_action_pointer_up:
90 - g_printerr ("pointer-up");
91-- break;
92++ case mir_pointer_action_enter:
93++ g_printerr ("enter");
94+ break;
95 - case mir_motion_action_hover_move:
96 - g_printerr ("hover-move");
97-- break;
98++ case mir_pointer_action_leave:
99++ g_printerr ("leave");
100+ break;
101 - case mir_motion_action_scroll:
102 - g_printerr ("scroll");
103 - break;
104@@ -208,17 +228,17 @@
105 break;
106 default:
107 - g_printerr ("%u", event->action);
108-- }
109-- g_printerr ("\n");
110++ g_printerr ("%u", mir_pointer_event_action (pointer_event));
111+ }
112+ g_printerr ("\n");
113 - g_printerr (" Flags");
114 - switch (event->flags)
115 - {
116 - case mir_motion_flag_window_is_obscured:
117 - g_printerr (" window-is-obscured");
118 - break;
119-+ g_printerr ("%u", mir_pointer_event_action (pointer_event));
120- }
121- g_printerr ("\n");
122+- }
123+- g_printerr ("\n");
124 - _gdk_mir_print_modifiers (event->modifiers);
125 - g_printerr (" Edge Flags %i\n", event->edge_flags);
126 + _gdk_mir_print_modifiers (mir_pointer_event_modifiers (pointer_event));
127@@ -241,7 +261,17 @@
128 - g_printerr (" forward");
129 - break;
130 - }
131-- g_printerr ("\n");
132++ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_primary))
133++ g_printerr (" primary");
134++ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_secondary))
135++ g_printerr (" secondary");
136++ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_tertiary))
137++ g_printerr (" tertiary");
138++ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_back))
139++ g_printerr (" back");
140++ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_forward))
141++ g_printerr (" forward");
142+ g_printerr ("\n");
143 - g_printerr (" Offset (%f, %f)\n", event->x_offset, event->y_offset);
144 - g_printerr (" Precision (%f, %f)\n", event->x_precision, event->y_precision);
145 - g_printerr (" Down Time %lli\n", (long long int) event->down_time);
146@@ -281,17 +311,6 @@
147 - }
148 - g_printerr ("\n");
149 - }
150-+ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_primary))
151-+ g_printerr (" primary");
152-+ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_secondary))
153-+ g_printerr (" secondary");
154-+ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_tertiary))
155-+ g_printerr (" tertiary");
156-+ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_back))
157-+ g_printerr (" back");
158-+ if (mir_pointer_event_button_state (pointer_event, mir_pointer_button_forward))
159-+ g_printerr (" forward");
160-+ g_printerr ("\n");
161 + g_printerr (" Offset (%f, %f)\n", mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_x),
162 + mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_y));
163 + g_printerr (" Event Time %lli\n", (long long int) mir_input_event_get_event_time (event));
164@@ -308,7 +327,7 @@
165 {
166 case mir_surface_attrib_type:
167 g_printerr ("type");
168-@@ -254,50 +161,48 @@ _gdk_mir_print_surface_event (const MirS
169+@@ -254,50 +161,66 @@ _gdk_mir_print_surface_event (const MirSurfaceEvent *event)
170 g_printerr ("focus");
171 break;
172 default:
173@@ -341,8 +360,26 @@
174 _gdk_mir_print_event (const MirEvent *event)
175 {
176 - switch (event->type)
177++ const MirInputEvent *input_event;
178++
179 + switch (mir_event_get_type (event))
180 {
181++ case mir_event_type_input:
182++ input_event = mir_event_get_input_event (event);
183++
184++ switch (mir_input_event_get_type (input_event))
185++ {
186++ case mir_input_event_type_key:
187++ _gdk_mir_print_key_event (mir_event_get_input_event (event));
188++ break;
189++ case mir_input_event_type_touch:
190++ _gdk_mir_print_motion_event (mir_event_get_input_event (event));
191++ break;
192++ case mir_input_event_type_pointer:
193++ _gdk_mir_print_motion_event (mir_event_get_input_event (event));
194++ break;
195++ }
196++ break;
197 case mir_event_type_key:
198 - _gdk_mir_print_key_event (&event->key);
199 + _gdk_mir_print_key_event (mir_event_get_input_event (event));
200@@ -369,11 +406,11 @@
201 break;
202 }
203 }
204-Index: gtk+3.0-3.16.3/gdk/mir/gdkmir-private.h
205-===================================================================
206---- gtk+3.0-3.16.3.orig/gdk/mir/gdkmir-private.h
207-+++ gtk+3.0-3.16.3/gdk/mir/gdkmir-private.h
208-@@ -89,9 +89,9 @@ void _gdk_mir_window_impl_set_surface_st
209+diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
210+index 6f0b6c3..2464434 100644
211+--- a/gdk/mir/gdkmir-private.h
212++++ b/gdk/mir/gdkmir-private.h
213+@@ -89,9 +89,9 @@ void _gdk_mir_window_impl_set_surface_state (GdkMirWindowImpl *impl, MirSurfaceS
214
215 void _gdk_mir_window_impl_set_surface_type (GdkMirWindowImpl *impl, MirSurfaceType type);
216
217@@ -385,7 +422,7 @@
218
219 GdkMirEventSource *_gdk_mir_display_get_event_source (GdkDisplay *display);
220
221-@@ -123,9 +123,9 @@ EGLSurface _gdk_mir_window_get_dummy_egl
222+@@ -123,9 +123,9 @@ EGLSurface _gdk_mir_window_get_dummy_egl_surface (GdkWindow *window, EGLConfig c
223
224 void _gdk_mir_print_modifiers (unsigned int modifiers);
225
226@@ -397,10 +434,311 @@
227
228 void _gdk_mir_print_surface_event (const MirSurfaceEvent *event);
229
230-Index: gtk+3.0-3.16.3/gdk/mir/gdkmireventsource.c
231-===================================================================
232---- gtk+3.0-3.16.3.orig/gdk/mir/gdkmireventsource.c
233-+++ gtk+3.0-3.16.3/gdk/mir/gdkmireventsource.c
234+@@ -133,16 +133,4 @@ void _gdk_mir_print_resize_event (const MirResizeEvent *event);
235+
236+ void _gdk_mir_print_event (const MirEvent *event);
237+
238+-/* TODO: Remove once we have proper transient window support. */
239+-GdkWindow * _gdk_mir_window_get_visible_transient_child (GdkWindow *window,
240+- gdouble x,
241+- gdouble y,
242+- gdouble *out_x,
243+- gdouble *out_y);
244+-
245+-/* TODO: Remove once we have proper transient window support. */
246+-void _gdk_mir_window_transient_children_foreach (GdkWindow *window,
247+- void (*func) (GdkWindow *, gpointer),
248+- gpointer user_data);
249+-
250+ #endif /* __GDK_PRIVATE_MIR_H__ */
251+diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
252+index cc92a53..6eda352 100644
253+--- a/gdk/mir/gdkmirdisplay.c
254++++ b/gdk/mir/gdkmirdisplay.c
255+@@ -107,7 +107,7 @@ _gdk_mir_display_open (const gchar *display_name)
256+ MirPixelFormat sw_pixel_format, hw_pixel_format;
257+ GdkMirDisplay *display;
258+
259+- g_printerr ("gdk_mir_display_open\n");
260++ //g_printerr ("gdk_mir_display_open\n");
261+
262+ connection = mir_connect_sync (NULL, "GDK-Mir");
263+ if (!connection)
264+@@ -207,26 +207,26 @@ gdk_mir_display_get_default_screen (GdkDisplay *display)
265+ static void
266+ gdk_mir_display_beep (GdkDisplay *display)
267+ {
268+- g_printerr ("gdk_mir_display_beep\n");
269++ //g_printerr ("gdk_mir_display_beep\n");
270+ /* No system level beep... */
271+ }
272+
273+ static void
274+ gdk_mir_display_sync (GdkDisplay *display)
275+ {
276+- g_printerr ("gdk_mir_display_sync\n");
277++ //g_printerr ("gdk_mir_display_sync\n");
278+ }
279+
280+ static void
281+ gdk_mir_display_flush (GdkDisplay *display)
282+ {
283+- g_printerr ("gdk_mir_display_flush\n");
284++ //g_printerr ("gdk_mir_display_flush\n");
285+ }
286+
287+ static gboolean
288+ gdk_mir_display_has_pending (GdkDisplay *display)
289+ {
290+- g_printerr ("gdk_mir_display_has_pending\n");
291++ //g_printerr ("gdk_mir_display_has_pending\n");
292+ /* We don't need to poll for events - so nothing pending */
293+ return FALSE;
294+ }
295+@@ -247,14 +247,14 @@ gdk_mir_display_make_default (GdkDisplay *display)
296+ static GdkWindow *
297+ gdk_mir_display_get_default_group (GdkDisplay *display)
298+ {
299+- g_printerr ("gdk_mir_display_get_default_group\n");
300++ //g_printerr ("gdk_mir_display_get_default_group\n");
301+ return NULL;
302+ }
303+
304+ static gboolean
305+ gdk_mir_display_supports_shapes (GdkDisplay *display)
306+ {
307+- g_printerr ("gdk_mir_display_supports_shapes\n");
308++ //g_printerr ("gdk_mir_display_supports_shapes\n");
309+ /* Mir doesn't support shaped windows */
310+ return FALSE;
311+ }
312+@@ -262,42 +262,42 @@ gdk_mir_display_supports_shapes (GdkDisplay *display)
313+ static gboolean
314+ gdk_mir_display_supports_input_shapes (GdkDisplay *display)
315+ {
316+- g_printerr ("gdk_mir_display_supports_input_shapes\n");
317++ //g_printerr ("gdk_mir_display_supports_input_shapes\n");
318+ return FALSE;
319+ }
320+
321+ static gboolean
322+ gdk_mir_display_supports_composite (GdkDisplay *display)
323+ {
324+- g_printerr ("gdk_mir_display_supports_composite\n");
325++ //g_printerr ("gdk_mir_display_supports_composite\n");
326+ return FALSE;
327+ }
328+
329+ static gboolean
330+ gdk_mir_display_supports_clipboard_persistence (GdkDisplay *display)
331+ {
332+- g_printerr ("gdk_mir_display_supports_clipboard_persistence\n");
333++ //g_printerr ("gdk_mir_display_supports_clipboard_persistence\n");
334+ return FALSE;
335+ }
336+
337+ static gboolean
338+ gdk_mir_display_supports_cursor_alpha (GdkDisplay *display)
339+ {
340+- g_printerr ("gdk_mir_display_supports_cursor_alpha\n");
341++ //g_printerr ("gdk_mir_display_supports_cursor_alpha\n");
342+ return FALSE;
343+ }
344+
345+ static gboolean
346+ gdk_mir_display_supports_cursor_color (GdkDisplay *display)
347+ {
348+- g_printerr ("gdk_mir_display_supports_cursor_color\n");
349++ //g_printerr ("gdk_mir_display_supports_cursor_color\n");
350+ return FALSE;
351+ }
352+
353+ static gboolean
354+ gdk_mir_display_supports_selection_notification (GdkDisplay *display)
355+ {
356+- g_printerr ("gdk_mir_display_supports_selection_notification\n");
357++ //g_printerr ("gdk_mir_display_supports_selection_notification\n");
358+ return FALSE;
359+ }
360+
361+@@ -305,7 +305,7 @@ static gboolean
362+ gdk_mir_display_request_selection_notification (GdkDisplay *display,
363+ GdkAtom selection)
364+ {
365+- g_printerr ("gdk_mir_display_request_selection_notification\n");
366++ //g_printerr ("gdk_mir_display_request_selection_notification\n");
367+ return FALSE;
368+ }
369+
370+@@ -316,7 +316,7 @@ gdk_mir_display_store_clipboard (GdkDisplay *display,
371+ const GdkAtom *targets,
372+ gint n_targets)
373+ {
374+- g_printerr ("gdk_mir_display_store_clipboard\n");
375++ //g_printerr ("gdk_mir_display_store_clipboard\n");
376+ }
377+
378+ static void
379+@@ -324,7 +324,7 @@ gdk_mir_display_get_default_cursor_size (GdkDisplay *display,
380+ guint *width,
381+ guint *height)
382+ {
383+- g_printerr ("gdk_mir_display_get_default_cursor_size\n");
384++ //g_printerr ("gdk_mir_display_get_default_cursor_size\n");
385+ *width = *height = 32; // FIXME: Random value
386+ }
387+
388+@@ -333,7 +333,7 @@ gdk_mir_display_get_maximal_cursor_size (GdkDisplay *display,
389+ guint *width,
390+ guint *height)
391+ {
392+- g_printerr ("gdk_mir_display_get_maximal_cursor_size\n");
393++ //g_printerr ("gdk_mir_display_get_maximal_cursor_size\n");
394+ *width = *height = 32; // FIXME: Random value
395+ }
396+
397+@@ -357,14 +357,14 @@ gdk_mir_display_get_cursor_for_surface (GdkDisplay *display,
398+ gdouble x,
399+ gdouble y)
400+ {
401+- g_printerr ("gdk_mir_display_get_cursor_for_surface (%f, %f)\n", x, y);
402++ //g_printerr ("gdk_mir_display_get_cursor_for_surface (%f, %f)\n", x, y);
403+ return NULL;
404+ }
405+
406+ static GList *
407+ gdk_mir_display_list_devices (GdkDisplay *display)
408+ {
409+- g_printerr ("gdk_mir_display_list_devices\n");
410++ //g_printerr ("gdk_mir_display_list_devices\n");
411+ // FIXME: Should this access the device manager?
412+ return NULL;
413+ }
414+@@ -372,20 +372,20 @@ gdk_mir_display_list_devices (GdkDisplay *display)
415+ static GdkAppLaunchContext *
416+ gdk_mir_display_get_app_launch_context (GdkDisplay *display)
417+ {
418+- g_printerr ("gdk_mir_display_get_app_launch_context\n");
419++ //g_printerr ("gdk_mir_display_get_app_launch_context\n");
420+ return NULL;
421+ }
422+
423+ static void
424+ gdk_mir_display_before_process_all_updates (GdkDisplay *display)
425+ {
426+- g_printerr ("gdk_mir_display_before_process_all_updates\n");
427++ //g_printerr ("gdk_mir_display_before_process_all_updates\n");
428+ }
429+
430+ static void
431+ gdk_mir_display_after_process_all_updates (GdkDisplay *display)
432+ {
433+- g_printerr ("gdk_mir_display_after_process_all_updates\n");
434++ //g_printerr ("gdk_mir_display_after_process_all_updates\n");
435+ }
436+
437+ static gulong
438+@@ -411,11 +411,11 @@ gdk_mir_display_create_window_impl (GdkDisplay *display,
439+ GdkWindowAttr *attributes,
440+ gint attributes_mask)
441+ {
442+- g_printerr ("gdk_mir_display_create_window_impl");
443+- g_printerr (" window=%p", window);
444+- g_printerr (" location=(%d, %d)", window->x, window->y);
445+- g_printerr (" size=(%d, %d)", window->width, window->height);
446+- g_printerr ("\n");
447++ //g_printerr ("gdk_mir_display_create_window_impl");
448++ //g_printerr (" window=%p", window);
449++ //g_printerr (" location=(%d, %d)", window->x, window->y);
450++ //g_printerr (" size=(%d, %d)", window->width, window->height);
451++ //g_printerr ("\n");
452+
453+ if (attributes->wclass == GDK_INPUT_OUTPUT)
454+ {
455+@@ -442,14 +442,14 @@ gdk_mir_display_get_keymap (GdkDisplay *display)
456+ static void
457+ gdk_mir_display_push_error_trap (GdkDisplay *display)
458+ {
459+- g_printerr ("gdk_mir_display_push_error_trap\n");
460++ //g_printerr ("gdk_mir_display_push_error_trap\n");
461+ }
462+
463+ static gint
464+ gdk_mir_display_pop_error_trap (GdkDisplay *display,
465+ gboolean ignored)
466+ {
467+- g_printerr ("gdk_mir_display_pop_error_trap\n");
468++ //g_printerr ("gdk_mir_display_pop_error_trap\n");
469+ return 0;
470+ }
471+
472+@@ -457,7 +457,7 @@ static GdkWindow *
473+ gdk_mir_display_get_selection_owner (GdkDisplay *display,
474+ GdkAtom selection)
475+ {
476+- g_printerr ("gdk_mir_display_get_selection_owner\n");
477++ //g_printerr ("gdk_mir_display_get_selection_owner\n");
478+ return NULL;
479+ }
480+
481+@@ -468,7 +468,7 @@ gdk_mir_display_set_selection_owner (GdkDisplay *display,
482+ guint32 time,
483+ gboolean send_event)
484+ {
485+- g_printerr ("gdk_mir_display_set_selection_owner\n");
486++ //g_printerr ("gdk_mir_display_set_selection_owner\n");
487+ return FALSE;
488+ }
489+
490+@@ -480,7 +480,7 @@ gdk_mir_display_send_selection_notify (GdkDisplay *display,
491+ GdkAtom property,
492+ guint32 time)
493+ {
494+- g_printerr ("gdk_mir_display_send_selection_notify\n");
495++ //g_printerr ("gdk_mir_display_send_selection_notify\n");
496+ }
497+
498+ static gint
499+@@ -490,7 +490,7 @@ gdk_mir_display_get_selection_property (GdkDisplay *display,
500+ GdkAtom *ret_type,
501+ gint *ret_format)
502+ {
503+- g_printerr ("gdk_mir_display_get_selection_property\n");
504++ //g_printerr ("gdk_mir_display_get_selection_property\n");
505+ return 0;
506+ }
507+
508+@@ -501,7 +501,7 @@ gdk_mir_display_convert_selection (GdkDisplay *display,
509+ GdkAtom target,
510+ guint32 time)
511+ {
512+- g_printerr ("gdk_mir_display_convert_selection\n");
513++ //g_printerr ("gdk_mir_display_convert_selection\n");
514+ }
515+
516+ static gint
517+@@ -512,7 +512,7 @@ gdk_mir_display_text_property_to_utf8_list (GdkDisplay *display,
518+ gint length,
519+ gchar ***list)
520+ {
521+- g_printerr ("gdk_mir_display_text_property_to_utf8_list\n");
522++ //g_printerr ("gdk_mir_display_text_property_to_utf8_list\n");
523+ return 0;
524+ }
525+
526+@@ -520,7 +520,7 @@ static gchar *
527+ gdk_mir_display_utf8_to_string_target (GdkDisplay *display,
528+ const gchar *str)
529+ {
530+- g_printerr ("gdk_mir_display_utf8_to_string_target\n");
531++ //g_printerr ("gdk_mir_display_utf8_to_string_target\n");
532+ return NULL;
533+ }
534+
535+diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
536+index b908366..5732f2b 100644
537+--- a/gdk/mir/gdkmireventsource.c
538++++ b/gdk/mir/gdkmireventsource.c
539 @@ -32,7 +32,7 @@ struct _GdkMirWindowReference {
540
541 typedef struct {
542@@ -410,9 +748,15 @@
543 } GdkMirQueuedEvent;
544
545 struct _GdkMirEventSource
546-@@ -240,50 +240,66 @@ get_modifier_state (unsigned int modifie
547+@@ -236,54 +236,60 @@ generate_focus_event (GdkWindow *window, gboolean focused)
548+ }
549+
550+ static guint
551+-get_modifier_state (unsigned int modifiers, unsigned int button_state)
552++get_modifier_state (unsigned int modifiers, guint button_state)
553 {
554- guint modifier_state = 0;
555+- guint modifier_state = 0;
556++ guint modifier_state = button_state;
557
558 - if ((modifiers & mir_key_modifier_alt) != 0)
559 + if ((modifiers & (mir_input_event_modifier_alt |
560@@ -439,19 +783,11 @@
561 + if ((modifiers & mir_input_event_modifier_caps_lock) != 0)
562 modifier_state |= GDK_LOCK_MASK;
563 - if ((button_state & mir_motion_button_primary) != 0)
564-+ if ((button_state & mir_pointer_button_primary) != 0)
565- modifier_state |= GDK_BUTTON1_MASK;
566+- modifier_state |= GDK_BUTTON1_MASK;
567 - if ((button_state & mir_motion_button_secondary) != 0)
568 - modifier_state |= GDK_BUTTON3_MASK;
569 - if ((button_state & mir_motion_button_tertiary) != 0)
570-+ if ((button_state & mir_pointer_button_secondary) != 0)
571- modifier_state |= GDK_BUTTON2_MASK;
572-+ if ((button_state & mir_pointer_button_tertiary) != 0)
573-+ modifier_state |= GDK_BUTTON3_MASK;
574-+ if ((button_state & mir_pointer_button_back) != 0)
575-+ modifier_state |= GDK_BUTTON4_MASK;
576-+ if ((button_state & mir_pointer_button_forward) != 0)
577-+ modifier_state |= GDK_BUTTON5_MASK;
578+- modifier_state |= GDK_BUTTON2_MASK;
579
580 return modifier_state;
581 }
582@@ -498,38 +834,61 @@
583 break;
584 default:
585 //case mir_key_action_multiple:
586-@@ -322,7 +338,7 @@ leave_windows_except (GdkWindow *window,
587- {
588- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
589- gboolean cursor_inside;
590+@@ -292,143 +298,98 @@ handle_key_event (GdkWindow *window, const MirKeyEvent *event)
591+ }
592+ }
593+
594+-/* TODO: Remove once we have proper transient window support. */
595+-typedef struct
596+-{
597+- GdkWindow *except;
598+- gdouble x;
599+- gdouble y;
600+- guint32 time;
601+-} LeaveInfo;
602+-
603+-/* TODO: Remove once we have proper transient window support. */
604+-/*
605+- * leave_windows_except:
606+- *
607+- * Generate a leave event for every window except the one the cursor is in.
608+- */
609+-static void
610+-leave_windows_except (GdkWindow *window,
611+- gpointer user_data)
612++static guint
613++get_button_state (const MirPointerEvent *event)
614+ {
615+- LeaveInfo info = *((LeaveInfo *) user_data);
616++ guint state = 0;
617+
618+- info.x -= window->x;
619+- info.y -= window->y;
620++ if (mir_pointer_event_button_state (event, mir_pointer_button_primary)) /* left */
621++ state |= GDK_BUTTON1_MASK;
622++ if (mir_pointer_event_button_state (event, mir_pointer_button_secondary)) /* right */
623++ state |= GDK_BUTTON3_MASK;
624++ if (mir_pointer_event_button_state (event, mir_pointer_button_tertiary)) /* middle */
625++ state |= GDK_BUTTON2_MASK;
626+
627+- _gdk_mir_window_transient_children_foreach (window, leave_windows_except, &info);
628+-
629+- if (window != info.except)
630+- {
631+- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
632+- gboolean cursor_inside;
633 - MirMotionButton button_state;
634-+ guint button_state;
635-
636- _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, &cursor_inside, &button_state);
637-
638-@@ -333,29 +349,47 @@ leave_windows_except (GdkWindow *window,
639- }
640+-
641+- _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, &cursor_inside, &button_state);
642+-
643+- if (cursor_inside)
644+- generate_crossing_event (window, GDK_LEAVE_NOTIFY, info.x, info.y, info.time);
645+-
646+- _gdk_mir_window_impl_set_cursor_state (impl, info.x, info.y, FALSE, button_state);
647+- }
648++ return state;
649 }
650
651-+static guint
652-+mir_pointer_event_get_button_state (const MirPointerEvent *event)
653-+{
654-+ guint button_state = 0;
655-+
656-+ if (mir_pointer_event_button_state (event, mir_pointer_button_primary))
657-+ button_state |= mir_pointer_button_primary;
658-+ if (mir_pointer_event_button_state (event, mir_pointer_button_secondary))
659-+ button_state |= mir_pointer_button_secondary;
660-+ if (mir_pointer_event_button_state (event, mir_pointer_button_tertiary))
661-+ button_state |= mir_pointer_button_tertiary;
662-+ if (mir_pointer_event_button_state (event, mir_pointer_button_back))
663-+ button_state |= mir_pointer_button_back;
664-+ if (mir_pointer_event_button_state (event, mir_pointer_button_forward))
665-+ button_state |= mir_pointer_button_forward;
666-+
667-+ return button_state;
668-+}
669-+
670 static void
671 -handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
672 +handle_motion_event (GdkWindow *window, const MirInputEvent *event)
673@@ -540,16 +899,14 @@
674 gboolean cursor_inside;
675 - MirMotionButton button_state;
676 + guint button_state;
677++ guint new_button_state;
678 guint modifier_state;
679 guint32 event_time;
680 GdkEventType event_type;
681 - MirMotionButton changed_button_state;
682 + guint changed_button_state;
683-+
684-+ if (!pointer_event)
685-+ return;
686
687- _gdk_mir_window_impl_get_cursor_state (impl, &x, &y, &cursor_inside, &button_state);
688+- _gdk_mir_window_impl_get_cursor_state (impl, &x, &y, &cursor_inside, &button_state);
689 - if (event->pointer_count > 0)
690 - {
691 - x = event->pointer_coordinates[0].x;
692@@ -557,24 +914,55 @@
693 - }
694 - modifier_state = get_modifier_state (event->modifiers, event->button_state);
695 - event_time = NANO_TO_MILLI (event->event_time);
696-+ modifier_state = get_modifier_state (mir_pointer_event_modifiers (pointer_event), mir_pointer_event_get_button_state (pointer_event));
697-+ event_time = NANO_TO_MILLI (mir_input_event_get_event_time (event));
698-
699- /* TODO: Remove once we have proper transient window support. */
700+-
701+- /* TODO: Remove once we have proper transient window support. */
702 - if (event->action == mir_motion_action_hover_exit)
703-+ if (mir_pointer_event_action (pointer_event) == mir_pointer_action_leave)
704- {
705- LeaveInfo info;
706+- {
707+- LeaveInfo info;
708+-
709+- info.x = x;
710+- info.y = y;
711+- info.time = event_time;
712+- info.except = window;
713+-
714+- /* Leave all transient children from leaf to root, except the root since we do it later. */
715+- _gdk_mir_window_transient_children_foreach (window, leave_windows_except, &info);
716+- }
717+- else
718+- {
719+- LeaveInfo info;
720++ if (!pointer_event)
721++ return;
722
723-@@ -392,43 +426,55 @@ handle_motion_event (GdkWindow *window,
724- if (!cursor_inside_pointer_window)
725- {
726- generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y, event_time);
727+- info.x = x;
728+- info.y = y;
729+- info.time = event_time;
730+- info.except = _gdk_mir_window_get_visible_transient_child (window, x, y, &x, &y);
731+-
732+- /* Leave all transient children from leaf to root, except the pointer window since we enter it. */
733+- _gdk_mir_window_transient_children_foreach (window, leave_windows_except, &info);
734+-
735+- window = info.except;
736+-
737+- if (window)
738+- {
739+- /* Enter the pointer window. */
740+- gboolean cursor_inside_pointer_window;
741+-
742+- impl = GDK_MIR_WINDOW_IMPL (window->impl);
743+- _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, &cursor_inside_pointer_window, NULL);
744+-
745+- if (!cursor_inside_pointer_window)
746+- {
747+- generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y, event_time);
748 - _gdk_mir_window_impl_set_cursor_state (impl, x, y, TRUE, event->button_state);
749-+ _gdk_mir_window_impl_set_cursor_state (impl, x, y, TRUE, mir_pointer_event_get_button_state (pointer_event));
750- }
751- }
752- }
753+- }
754+- }
755+- }
756++ _gdk_mir_window_impl_get_cursor_state (impl, &x, &y, &cursor_inside, &button_state);
757++ new_button_state = get_button_state (pointer_event);
758++ modifier_state = get_modifier_state (mir_pointer_event_modifiers (pointer_event), new_button_state);
759++ event_time = NANO_TO_MILLI (mir_input_event_get_event_time (event));
760
761 if (window)
762 {
763@@ -596,36 +984,47 @@
764 + case mir_pointer_action_button_up:
765 + case mir_pointer_action_button_down:
766 + event_type = mir_pointer_event_action (pointer_event) == mir_pointer_action_button_down ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE;
767-+ changed_button_state = button_state ^ mir_pointer_event_get_button_state (pointer_event);
768-+ if (changed_button_state == 0 || (changed_button_state & mir_pointer_button_primary) != 0)
769++ changed_button_state = button_state ^ new_button_state;
770++ if (changed_button_state == 0 || (changed_button_state & GDK_BUTTON1_MASK) != 0)
771 generate_button_event (window, event_type, x, y, GDK_BUTTON_PRIMARY, modifier_state, event_time);
772 - if ((changed_button_state & mir_motion_button_secondary) != 0)
773-+ if ((changed_button_state & mir_pointer_button_secondary) != 0)
774- generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time);
775+- generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time);
776 - if ((changed_button_state & mir_motion_button_tertiary) != 0)
777-+ if ((changed_button_state & mir_pointer_button_tertiary) != 0)
778++ if ((changed_button_state & GDK_BUTTON2_MASK) != 0)
779 generate_button_event (window, event_type, x, y, GDK_BUTTON_MIDDLE, modifier_state, event_time);
780 - button_state = event->button_state;
781-+ button_state = mir_pointer_event_get_button_state (pointer_event);
782++ if ((changed_button_state & GDK_BUTTON3_MASK) != 0)
783++ generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time);
784++ button_state = new_button_state;
785 break;
786 - case mir_motion_action_scroll:
787 - generate_scroll_event (window, x, y, event->pointer_coordinates[0].hscroll, event->pointer_coordinates[0].vscroll, modifier_state, event_time);
788-- break;
789-- case mir_motion_action_move: // move with button
790-- case mir_motion_action_hover_move: // move without button
791-- generate_motion_event (window, x, y, modifier_state, event_time);
792 + case mir_pointer_action_motion:
793 + new_x = mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_x);
794 + new_y = mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_y);
795 + hscroll = mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_hscroll);
796 + vscroll = mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_vscroll);
797 +
798-+ if (hscroll > 0.5 || vscroll > 0.5)
799++ if (ABS (hscroll) > 0.5 || ABS (vscroll) > 0.5)
800 + generate_scroll_event (window, x, y, hscroll, vscroll, modifier_state, event_time);
801 + if (ABS (new_x - x) > 0.5 || ABS (new_y - y) > 0.5)
802-+ generate_motion_event (window, new_x, new_y, modifier_state, event_time);
803++ {
804++ generate_motion_event (window, new_x, new_y, modifier_state, event_time);
805++ x = new_x;
806++ y = new_y;
807++ }
808 +
809 break;
810+- case mir_motion_action_move: // move with button
811+- case mir_motion_action_hover_move: // move without button
812+- generate_motion_event (window, x, y, modifier_state, event_time);
813++ case mir_pointer_action_enter:
814++ if (!cursor_inside)
815++ {
816++ cursor_inside = TRUE;
817++ generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y, event_time);
818++ }
819+ break;
820 - case mir_motion_action_hover_exit:
821 + case mir_pointer_action_leave:
822 if (cursor_inside)
823@@ -639,9 +1038,11 @@
824 }
825
826 _gdk_mir_window_impl_set_cursor_state (impl, x, y, cursor_inside, button_state);
827-@@ -440,19 +486,19 @@ handle_surface_event (GdkWindow *window,
828+@@ -439,20 +400,56 @@ static void
829+ handle_surface_event (GdkWindow *window, const MirSurfaceEvent *event)
830 {
831 GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
832++ MirSurfaceState state;
833
834 - switch (event->attrib)
835 + switch (mir_surface_event_get_attribute (event))
836@@ -652,8 +1053,44 @@
837 break;
838 case mir_surface_attrib_state:
839 - _gdk_mir_window_impl_set_surface_state (impl, event->value);
840-+ _gdk_mir_window_impl_set_surface_state (impl, mir_surface_event_get_attribute_value (event));
841- // FIXME: notify
842+- // FIXME: notify
843++ state = mir_surface_event_get_attribute_value (event);
844++ _gdk_mir_window_impl_set_surface_state (impl, state);
845++
846++ switch (state)
847++ {
848++ case mir_surface_state_restored:
849++ case mir_surface_state_hidden:
850++ gdk_synthesize_window_state (window,
851++ GDK_WINDOW_STATE_ICONIFIED |
852++ GDK_WINDOW_STATE_MAXIMIZED |
853++ GDK_WINDOW_STATE_FULLSCREEN,
854++ 0);
855++ break;
856++ case mir_surface_state_minimized:
857++ gdk_synthesize_window_state (window,
858++ GDK_WINDOW_STATE_MAXIMIZED |
859++ GDK_WINDOW_STATE_FULLSCREEN,
860++ GDK_WINDOW_STATE_ICONIFIED);
861++ break;
862++ case mir_surface_state_maximized:
863++ case mir_surface_state_vertmaximized:
864++ case mir_surface_state_horizmaximized:
865++ gdk_synthesize_window_state (window,
866++ GDK_WINDOW_STATE_ICONIFIED |
867++ GDK_WINDOW_STATE_FULLSCREEN,
868++ GDK_WINDOW_STATE_MAXIMIZED);
869++ break;
870++ case mir_surface_state_fullscreen:
871++ gdk_synthesize_window_state (window,
872++ GDK_WINDOW_STATE_ICONIFIED |
873++ GDK_WINDOW_STATE_MAXIMIZED,
874++ GDK_WINDOW_STATE_FULLSCREEN);
875++ break;
876++ default:
877++ break;
878++ }
879++
880 break;
881 case mir_surface_attrib_swapinterval:
882 break;
883@@ -663,7 +1100,7 @@
884 break;
885 default:
886 break;
887-@@ -478,11 +524,11 @@ static void
888+@@ -478,11 +475,11 @@ static void
889 handle_resize_event (GdkWindow *window,
890 const MirResizeEvent *event)
891 {
892@@ -678,7 +1115,7 @@
893 }
894
895 static void
896-@@ -496,7 +542,7 @@ handle_close_event (GdkWindow
897+@@ -496,7 +493,7 @@ handle_close_event (GdkWindow *window,
898 typedef struct
899 {
900 GdkWindow *window;
901@@ -687,7 +1124,7 @@
902 } EventData;
903
904 static void
905-@@ -504,20 +550,39 @@ gdk_mir_event_source_queue_event (GdkDis
906+@@ -504,20 +501,39 @@ gdk_mir_event_source_queue_event (GdkDisplay *display,
907 GdkWindow *window,
908 const MirEvent *event)
909 {
910@@ -732,7 +1169,7 @@
911 break;
912 case mir_event_type_prompt_session_state_change:
913 // FIXME?
914-@@ -526,10 +591,10 @@ gdk_mir_event_source_queue_event (GdkDis
915+@@ -526,10 +542,10 @@ gdk_mir_event_source_queue_event (GdkDisplay *display,
916 // FIXME?
917 break;
918 case mir_event_type_close_surface:
919@@ -745,7 +1182,15 @@
920 // FIXME?
921 break;
922 }
923-@@ -569,9 +634,9 @@ gdk_mir_event_source_convert_events (Gdk
924+@@ -551,6 +567,7 @@ static void
925+ gdk_mir_queued_event_free (GdkMirQueuedEvent *event)
926+ {
927+ _gdk_mir_window_reference_unref (event->window_ref);
928++ mir_event_unref (event->event);
929+ g_slice_free (GdkMirQueuedEvent, event);
930+ }
931+
932+@@ -569,9 +586,9 @@ gdk_mir_event_source_convert_events (GdkMirEventSource *source)
933 if (window != NULL)
934 {
935 if (source->log_events)
936@@ -757,20 +1202,222 @@
937 }
938 else
939 g_warning ("window was destroyed before event arrived...");
940-@@ -735,7 +800,7 @@ _gdk_mir_event_source_queue (GdkMirWindo
941+@@ -735,7 +752,7 @@ _gdk_mir_event_source_queue (GdkMirWindowReference *window_ref,
942 queued_event = g_slice_new (GdkMirQueuedEvent);
943 g_atomic_int_inc (&window_ref->ref_count);
944 queued_event->window_ref = window_ref;
945 - queued_event->event = *event;
946-+ queued_event->event = event;
947++ queued_event->event = mir_event_ref (event);
948
949 g_mutex_lock (&source->mir_event_lock);
950 g_queue_push_tail (&source->mir_events, queued_event);
951-Index: gtk+3.0-3.16.3/gdk/mir/gdkmirwindowimpl.c
952-===================================================================
953---- gtk+3.0-3.16.3.orig/gdk/mir/gdkmirwindowimpl.c
954-+++ gtk+3.0-3.16.3/gdk/mir/gdkmirwindowimpl.c
955-@@ -59,7 +59,7 @@ struct _GdkMirWindowImpl
956+diff --git a/gdk/mir/gdkmirscreen.c b/gdk/mir/gdkmirscreen.c
957+index e29ddb3..d31c5a4 100644
958+--- a/gdk/mir/gdkmirscreen.c
959++++ b/gdk/mir/gdkmirscreen.c
960+@@ -203,7 +203,7 @@ get_output (GdkScreen *screen, gint monitor_num)
961+ static gint
962+ gdk_mir_screen_get_width (GdkScreen *screen)
963+ {
964+- g_printerr ("gdk_mir_screen_get_width\n");
965++ //g_printerr ("gdk_mir_screen_get_width\n");
966+ gint width, height;
967+ get_screen_size (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
968+ return width;
969+@@ -212,7 +212,7 @@ gdk_mir_screen_get_width (GdkScreen *screen)
970+ static gint
971+ gdk_mir_screen_get_height (GdkScreen *screen)
972+ {
973+- g_printerr ("gdk_mir_screen_get_height\n");
974++ //g_printerr ("gdk_mir_screen_get_height\n");
975+ gint width, height;
976+ get_screen_size (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
977+ return height;
978+@@ -221,7 +221,7 @@ gdk_mir_screen_get_height (GdkScreen *screen)
979+ static gint
980+ gdk_mir_screen_get_width_mm (GdkScreen *screen)
981+ {
982+- g_printerr ("gdk_mir_screen_get_width_mm\n");
983++ //g_printerr ("gdk_mir_screen_get_width_mm\n");
984+ gint width, height;
985+ get_screen_size_mm (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
986+ return width;
987+@@ -230,7 +230,7 @@ gdk_mir_screen_get_width_mm (GdkScreen *screen)
988+ static gint
989+ gdk_mir_screen_get_height_mm (GdkScreen *screen)
990+ {
991+- g_printerr ("gdk_mir_screen_get_height_mm\n");
992++ //g_printerr ("gdk_mir_screen_get_height_mm\n");
993+ gint width, height;
994+ get_screen_size_mm (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
995+ return height;
996+@@ -293,7 +293,7 @@ gdk_mir_screen_get_n_monitors (GdkScreen *screen)
997+ static gint
998+ gdk_mir_screen_get_primary_monitor (GdkScreen *screen)
999+ {
1000+- g_printerr ("gdk_mir_screen_get_primary_monitor\n");
1001++ //g_printerr ("gdk_mir_screen_get_primary_monitor\n");
1002+ return 0; //?
1003+ }
1004+
1005+@@ -301,7 +301,7 @@ static gint
1006+ gdk_mir_screen_get_monitor_width_mm (GdkScreen *screen,
1007+ gint monitor_num)
1008+ {
1009+- g_printerr ("gdk_mir_screen_get_monitor_width_mm (%d)\n", monitor_num);
1010++ //g_printerr ("gdk_mir_screen_get_monitor_width_mm (%d)\n", monitor_num);
1011+ MirDisplayOutput *output = get_output (screen, monitor_num);
1012+ return output ? output->physical_width_mm : 0;
1013+ }
1014+@@ -310,7 +310,7 @@ static gint
1015+ gdk_mir_screen_get_monitor_height_mm (GdkScreen *screen,
1016+ gint monitor_num)
1017+ {
1018+- g_printerr ("gdk_mir_screen_get_monitor_height_mm (%d)\n", monitor_num);
1019++ //g_printerr ("gdk_mir_screen_get_monitor_height_mm (%d)\n", monitor_num);
1020+ MirDisplayOutput *output = get_output (screen, monitor_num);
1021+ return output ? output->physical_height_mm : 0;
1022+ }
1023+@@ -319,7 +319,7 @@ static gchar *
1024+ gdk_mir_screen_get_monitor_plug_name (GdkScreen *screen,
1025+ gint monitor_num)
1026+ {
1027+- g_printerr ("gdk_mir_screen_get_monitor_plug_name (%d)\n", monitor_num);
1028++ //g_printerr ("gdk_mir_screen_get_monitor_plug_name (%d)\n", monitor_num);
1029+ MirDisplayOutput *output = get_output (screen, monitor_num);
1030+
1031+ if (output)
1032+@@ -399,7 +399,7 @@ gdk_mir_screen_get_monitor_workarea (GdkScreen *screen,
1033+ static GList *
1034+ gdk_mir_screen_list_visuals (GdkScreen *screen)
1035+ {
1036+- g_printerr ("gdk_mir_screen_list_visuals\n");
1037++ //g_printerr ("gdk_mir_screen_list_visuals\n");
1038+ return g_list_append (NULL, GDK_MIR_SCREEN (screen)->visual);
1039+ }
1040+
1041+@@ -428,21 +428,21 @@ gdk_mir_screen_is_composited (GdkScreen *screen)
1042+ static gchar *
1043+ gdk_mir_screen_make_display_name (GdkScreen *screen)
1044+ {
1045+- g_printerr ("gdk_mir_screen_make_display_name\n");
1046++ //g_printerr ("gdk_mir_screen_make_display_name\n");
1047+ return NULL; // FIXME
1048+ }
1049+
1050+ static GdkWindow *
1051+ gdk_mir_screen_get_active_window (GdkScreen *screen)
1052+ {
1053+- g_printerr ("gdk_mir_screen_get_active_window\n");
1054++ //g_printerr ("gdk_mir_screen_get_active_window\n");
1055+ return NULL; // FIXME
1056+ }
1057+
1058+ static GList *
1059+ gdk_mir_screen_get_window_stack (GdkScreen *screen)
1060+ {
1061+- g_printerr ("gdk_mir_screen_get_window_stack\n");
1062++ //g_printerr ("gdk_mir_screen_get_window_stack\n");
1063+ return NULL; // FIXME
1064+ }
1065+
1066+@@ -450,7 +450,7 @@ static void
1067+ gdk_mir_screen_broadcast_client_message (GdkScreen *screen,
1068+ GdkEvent *event)
1069+ {
1070+- g_printerr ("gdk_mir_screen_broadcast_client_message\n");
1071++ //g_printerr ("gdk_mir_screen_broadcast_client_message\n");
1072+ // FIXME
1073+ }
1074+
1075+@@ -673,21 +673,21 @@ gdk_mir_screen_get_setting (GdkScreen *screen,
1076+ static gint
1077+ gdk_mir_screen_visual_get_best_depth (GdkScreen *screen)
1078+ {
1079+- g_printerr ("gdk_mir_screen_visual_get_best_depth\n");
1080++ //g_printerr ("gdk_mir_screen_visual_get_best_depth\n");
1081+ return VISUAL_DEPTH;
1082+ }
1083+
1084+ static GdkVisualType
1085+ gdk_mir_screen_visual_get_best_type (GdkScreen *screen)
1086+ {
1087+- g_printerr ("gdk_mir_screen_visual_get_best_type\n");
1088++ //g_printerr ("gdk_mir_screen_visual_get_best_type\n");
1089+ return VISUAL_TYPE;
1090+ }
1091+
1092+ static GdkVisual*
1093+ gdk_mir_screen_visual_get_best (GdkScreen *screen)
1094+ {
1095+- g_printerr ("gdk_mir_screen_visual_get_best\n");
1096++ //g_printerr ("gdk_mir_screen_visual_get_best\n");
1097+ return GDK_MIR_SCREEN (screen)->visual;
1098+ }
1099+
1100+@@ -695,7 +695,7 @@ static GdkVisual*
1101+ gdk_mir_screen_visual_get_best_with_depth (GdkScreen *screen,
1102+ gint depth)
1103+ {
1104+- g_printerr ("gdk_mir_screen_visual_get_best_with_depth (%d)\n", depth);
1105++ //g_printerr ("gdk_mir_screen_visual_get_best_with_depth (%d)\n", depth);
1106+ return GDK_MIR_SCREEN (screen)->visual;
1107+ }
1108+
1109+@@ -703,7 +703,7 @@ static GdkVisual*
1110+ gdk_mir_screen_visual_get_best_with_type (GdkScreen *screen,
1111+ GdkVisualType visual_type)
1112+ {
1113+- g_printerr ("gdk_mir_screen_visual_get_best_with_type (%d)\n", visual_type);
1114++ //g_printerr ("gdk_mir_screen_visual_get_best_with_type (%d)\n", visual_type);
1115+ return GDK_MIR_SCREEN (screen)->visual;
1116+ }
1117+
1118+@@ -712,7 +712,7 @@ gdk_mir_screen_visual_get_best_with_both (GdkScreen *screen,
1119+ gint depth,
1120+ GdkVisualType visual_type)
1121+ {
1122+- g_printerr ("gdk_mir_screen_visual_get_best_with_both\n");
1123++ //g_printerr ("gdk_mir_screen_visual_get_best_with_both\n");
1124+ return GDK_MIR_SCREEN (screen)->visual;
1125+ }
1126+
1127+@@ -721,7 +721,7 @@ gdk_mir_screen_query_depths (GdkScreen *screen,
1128+ gint **depths,
1129+ gint *count)
1130+ {
1131+- g_printerr ("gdk_mir_screen_query_depths\n");
1132++ //g_printerr ("gdk_mir_screen_query_depths\n");
1133+ static gint supported_depths[] = { VISUAL_DEPTH };
1134+ *depths = supported_depths;
1135+ *count = 1;
1136+@@ -732,7 +732,7 @@ gdk_mir_screen_query_visual_types (GdkScreen *screen,
1137+ GdkVisualType **visual_types,
1138+ gint *count)
1139+ {
1140+- g_printerr ("gdk_mir_screen_query_visual_types\n");
1141++ //g_printerr ("gdk_mir_screen_query_visual_types\n");
1142+ static GdkVisualType supported_visual_types[] = { VISUAL_TYPE };
1143+ *visual_types = supported_visual_types;
1144+ *count = 1;
1145+diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
1146+index 666a1d0..16035a0 100644
1147+--- a/gdk/mir/gdkmirwindowimpl.c
1148++++ b/gdk/mir/gdkmirwindowimpl.c
1149+@@ -46,11 +46,8 @@ struct _GdkMirWindowImpl
1150+ gint transient_x;
1151+ gint transient_y;
1152+
1153+- /* Child windows (e.g. tooltips) */
1154+- GList *transient_children;
1155+-
1156+ /* Desired surface attributes */
1157+- MirSurfaceType surface_type;
1158++ GdkWindowTypeHint type_hint;
1159+ MirSurfaceState surface_state;
1160+
1161+ /* Pattern for background */
1162+@@ -59,7 +56,7 @@ struct _GdkMirWindowImpl
1163 /* Current button state for checking which buttons are being pressed / released */
1164 gdouble x;
1165 gdouble y;
1166@@ -779,7 +1426,27 @@
1167
1168 /* Surface being rendered to (only exists when window visible) */
1169 MirSurface *surface;
1170-@@ -113,7 +113,7 @@ _gdk_mir_window_impl_set_cursor_state (G
1171+@@ -71,7 +68,6 @@ struct _GdkMirWindowImpl
1172+ EGLSurface egl_surface;
1173+
1174+ /* Dummy MIR and EGL surfaces */
1175+- MirSurface *dummy_surface;
1176+ EGLSurface dummy_egl_surface;
1177+
1178+ /* TRUE if the window can be seen */
1179+@@ -103,9 +99,9 @@ _gdk_mir_window_impl_set_surface_state (GdkMirWindowImpl *impl, MirSurfaceState
1180+ }
1181+
1182+ void
1183+-_gdk_mir_window_impl_set_surface_type (GdkMirWindowImpl *impl, MirSurfaceType type)
1184++_gdk_mir_window_impl_set_surface_type (GdkMirWindowImpl *impl,
1185++ MirSurfaceType type)
1186+ {
1187+- impl->surface_type = type;
1188+ }
1189+
1190+ void
1191+@@ -113,7 +109,7 @@ _gdk_mir_window_impl_set_cursor_state (GdkMirWindowImpl *impl,
1192 gdouble x,
1193 gdouble y,
1194 gboolean cursor_inside,
1195@@ -788,7 +1455,7 @@
1196 {
1197 impl->x = x;
1198 impl->y = y;
1199-@@ -126,7 +126,7 @@ _gdk_mir_window_impl_get_cursor_state (G
1200+@@ -126,7 +122,7 @@ _gdk_mir_window_impl_get_cursor_state (GdkMirWindowImpl *impl,
1201 gdouble *x,
1202 gdouble *y,
1203 gboolean *cursor_inside,
1204@@ -797,22 +1464,211 @@
1205 {
1206 if (x)
1207 *x = impl->x;
1208-@@ -213,7 +213,6 @@ ensure_surface_full (GdkWindow *window,
1209+@@ -141,7 +137,7 @@ _gdk_mir_window_impl_get_cursor_state (GdkMirWindowImpl *impl,
1210+ static void
1211+ gdk_mir_window_impl_init (GdkMirWindowImpl *impl)
1212+ {
1213+- impl->surface_type = mir_surface_type_normal;
1214++ impl->type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
1215+ impl->surface_state = mir_surface_state_unknown;
1216+ }
1217+
1218+@@ -158,18 +154,6 @@ set_surface_state (GdkMirWindowImpl *impl,
1219+ }
1220+
1221+ static void
1222+-set_surface_type (GdkMirWindowImpl *impl,
1223+- MirSurfaceType type)
1224+-{
1225+- if (impl->surface_type == type)
1226+- return;
1227+-
1228+- impl->surface_type = type;
1229+- if (impl->surface)
1230+- mir_surface_set_type (impl->surface, type);
1231+-}
1232+-
1233+-static void
1234+ event_cb (MirSurface *surface,
1235+ const MirEvent *event,
1236+ void *context)
1237+@@ -177,20 +161,105 @@ event_cb (MirSurface *surface,
1238+ _gdk_mir_event_source_queue (context, event);
1239+ }
1240+
1241++static void ensure_surface (GdkWindow *window);
1242++
1243+ static MirSurface *
1244+ create_mir_surface (GdkDisplay *display,
1245++ GdkWindow *parent,
1246++ gint x,
1247++ gint y,
1248+ gint width,
1249+ gint height,
1250++ GdkWindowTypeHint type,
1251+ MirBufferUsage buffer_usage)
1252+ {
1253++ MirSurface *parent_surface = NULL;
1254+ MirSurfaceSpec *spec;
1255+ MirConnection *connection;
1256+ MirPixelFormat format;
1257+ MirSurface *surface;
1258++ MirRectangle rect;
1259+
1260+ connection = gdk_mir_display_get_mir_connection (display);
1261+ format = _gdk_mir_display_get_pixel_format (display, buffer_usage);
1262+- spec = mir_connection_create_spec_for_normal_surface (connection, width, height, format);
1263++
1264++ if (parent && parent->impl)
1265++ {
1266++ ensure_surface (parent);
1267++ parent_surface = GDK_MIR_WINDOW_IMPL (parent->impl)->surface;
1268++ }
1269++
1270++ if (!parent_surface)
1271++ {
1272++ switch (type)
1273++ {
1274++ case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
1275++ case GDK_WINDOW_TYPE_HINT_UTILITY:
1276++ type = GDK_WINDOW_TYPE_HINT_DIALOG;
1277++ break;
1278++ default:
1279++ break;
1280++ }
1281++ }
1282++
1283++ switch (type)
1284++ {
1285++ case GDK_WINDOW_TYPE_HINT_DIALOG:
1286++ case GDK_WINDOW_TYPE_HINT_DOCK:
1287++ spec = mir_connection_create_spec_for_dialog (connection,
1288++ width,
1289++ height,
1290++ format);
1291++ break;
1292++ case GDK_WINDOW_TYPE_HINT_MENU:
1293++ case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
1294++ case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
1295++ case GDK_WINDOW_TYPE_HINT_TOOLBAR:
1296++ case GDK_WINDOW_TYPE_HINT_COMBO:
1297++ rect.left = x;
1298++ rect.top = y;
1299++ rect.width = 1;
1300++ rect.height = 1;
1301++ spec = mir_connection_create_spec_for_menu (connection,
1302++ width,
1303++ height,
1304++ format,
1305++ parent_surface,
1306++ &rect,
1307++ mir_edge_attachment_any);
1308++ break;
1309++ case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
1310++ case GDK_WINDOW_TYPE_HINT_UTILITY:
1311++ spec = mir_connection_create_spec_for_modal_dialog (connection,
1312++ width,
1313++ height,
1314++ format,
1315++ parent_surface);
1316++ break;
1317++ case GDK_WINDOW_TYPE_HINT_DND:
1318++ case GDK_WINDOW_TYPE_HINT_TOOLTIP:
1319++ case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
1320++ rect.left = x;
1321++ rect.top = y;
1322++ rect.width = 1;
1323++ rect.height = 1;
1324++ spec = mir_connection_create_spec_for_tooltip (connection,
1325++ width,
1326++ height,
1327++ format,
1328++ parent_surface,
1329++ &rect);
1330++ break;
1331++ case GDK_WINDOW_TYPE_HINT_NORMAL:
1332++ case GDK_WINDOW_TYPE_HINT_DESKTOP:
1333++ default:
1334++ spec = mir_connection_create_spec_for_normal_surface (connection,
1335++ width,
1336++ height,
1337++ format);
1338++ break;
1339++ }
1340++
1341+ mir_surface_spec_set_name (spec, g_get_prgname ());
1342+ mir_surface_spec_set_buffer_usage (spec, buffer_usage);
1343+ surface = mir_surface_create_sync (spec);
1344+@@ -199,13 +268,41 @@ create_mir_surface (GdkDisplay *display,
1345+ return surface;
1346+ }
1347+
1348+-/* TODO: Remove once we have proper transient window support. */
1349+-static gboolean
1350+-should_render_in_parent (GdkWindow *window)
1351++static GdkDevice *
1352++get_pointer (GdkWindow *window)
1353+ {
1354+- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1355++ return gdk_device_manager_get_client_pointer (gdk_display_get_device_manager (gdk_window_get_display (window)));
1356++}
1357++
1358++static void
1359++send_event (GdkWindow *window, GdkDevice *device, GdkEvent *event)
1360++{
1361++ GdkDisplay *display;
1362++ GList *node;
1363++
1364++ gdk_event_set_device (event, device);
1365++ gdk_event_set_source_device (event, device);
1366++ gdk_event_set_screen (event, gdk_display_get_screen (gdk_window_get_display (window), 0));
1367++ event->any.window = g_object_ref (window);
1368+
1369+- return impl->transient_for && gdk_window_get_window_type (window) != GDK_WINDOW_TOPLEVEL;
1370++ display = gdk_window_get_display (window);
1371++ node = _gdk_event_queue_append (display, event);
1372++ _gdk_windowing_got_event (display, node, event, _gdk_display_get_next_serial (display));
1373++}
1374++
1375++static void
1376++generate_configure_event (GdkWindow *window,
1377++ gint width,
1378++ gint height)
1379++{
1380++ GdkEvent *event;
1381++
1382++ event = gdk_event_new (GDK_CONFIGURE);
1383++ event->configure.send_event = FALSE;
1384++ event->configure.width = width;
1385++ event->configure.height = height;
1386++
1387++ send_event (window, get_pointer (window), event);
1388+ }
1389+
1390+ static void
1391+@@ -213,10 +310,9 @@ ensure_surface_full (GdkWindow *window,
1392 MirBufferUsage buffer_usage)
1393 {
1394 GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1395 - MirEventDelegate event_delegate = { event_cb, NULL };
1396 GdkMirWindowReference *window_ref;
1397
1398- if (impl->surface || should_render_in_parent (window))
1399-@@ -224,23 +223,25 @@ ensure_surface_full (GdkWindow *window,
1400+- if (impl->surface || should_render_in_parent (window))
1401++ if (impl->surface)
1402+ return;
1403+
1404+ /* no destroy notify -- we must leak for now
1405+@@ -224,25 +320,29 @@ ensure_surface_full (GdkWindow *window,
1406 */
1407 window_ref = _gdk_mir_event_source_get_window_reference (window);
1408
1409 - event_delegate.context = window_ref;
1410 -
1411- impl->surface = create_mir_surface (gdk_window_get_display (window),
1412+- impl->surface = create_mir_surface (gdk_window_get_display (window),
1413++ impl->surface = create_mir_surface (gdk_window_get_display (window), impl->transient_for,
1414++ impl->transient_x, impl->transient_y,
1415 window->width, window->height,
1416++ impl->type_hint,
1417 buffer_usage);
1418
1419 - MirEvent resize_event;
1420@@ -831,7 +1687,640 @@
1421 + */
1422
1423 - mir_surface_set_event_handler (impl->surface, &event_delegate); // FIXME: Ignore some events until shown
1424+- set_surface_type (impl, impl->surface_type);
1425+- set_surface_state (impl, impl->surface_state);
1426++ generate_configure_event (window, window->width, window->height);
1427++
1428 + mir_surface_set_event_handler (impl->surface, event_cb, window_ref); // FIXME: Ignore some events until shown
1429- set_surface_type (impl, impl->surface_type);
1430- set_surface_state (impl, impl->surface_state);
1431- }
1432+ }
1433+
1434+ static void
1435+@@ -280,66 +380,18 @@ ensure_no_surface (GdkWindow *window)
1436+ eglDestroySurface (egl_display, impl->dummy_egl_surface);
1437+ impl->dummy_egl_surface = NULL;
1438+ }
1439+-
1440+- g_clear_pointer (&impl->dummy_surface, mir_surface_release_sync);
1441+ }
1442+
1443+ g_clear_pointer(&impl->surface, mir_surface_release_sync);
1444+ }
1445+
1446+ static void
1447+-redraw_transient (GdkWindow *window)
1448+-{
1449+- GdkRectangle r;
1450+- r.x = window->x;
1451+- r.y = window->y;
1452+- r.width = window->width;
1453+- r.height = window->height;
1454+- gdk_window_invalidate_rect (GDK_MIR_WINDOW_IMPL (window->impl)->transient_for, &r, FALSE);
1455+-}
1456+-
1457+-static void
1458+ send_buffer (GdkWindow *window)
1459+ {
1460+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1461+
1462+- /* Transient windows draw onto parent instead */
1463+- if (should_render_in_parent (window))
1464+- {
1465+- redraw_transient (window);
1466+- return;
1467+- }
1468+-
1469+- /* Composite transient windows over this one */
1470+- if (impl->transient_children)
1471+- {
1472+- cairo_surface_t *surface;
1473+- cairo_t *c;
1474+- GList *link;
1475+-
1476+- surface = gdk_mir_window_impl_ref_cairo_surface (window);
1477+- c = cairo_create (surface);
1478+-
1479+- for (link = impl->transient_children; link; link = link->next)
1480+- {
1481+- GdkWindow *child_window = link->data;
1482+- GdkMirWindowImpl *child_impl = GDK_MIR_WINDOW_IMPL (child_window->impl);
1483+-
1484+- /* Skip children not yet drawn to */
1485+- if (!child_impl->cairo_surface)
1486+- continue;
1487+-
1488+- cairo_set_source_surface (c, child_impl->cairo_surface, child_window->x, child_window->y);
1489+- cairo_rectangle (c, child_window->x, child_window->y, child_window->width, child_window->height);
1490+- cairo_fill (c);
1491+- }
1492+-
1493+- cairo_destroy (c);
1494+- cairo_surface_destroy (surface);
1495+- }
1496+-
1497+ /* Send the completed buffer to Mir */
1498+- mir_surface_swap_buffers_sync (impl->surface);
1499++ mir_buffer_stream_swap_buffers_sync (mir_surface_get_buffer_stream (impl->surface));
1500+
1501+ /* The Cairo context is no longer valid */
1502+ g_clear_pointer (&impl->cairo_surface, cairo_surface_destroy);
1503+@@ -362,7 +414,7 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
1504+ }
1505+
1506+ /* Transient windows get rendered into a buffer and copied onto their parent */
1507+- if (should_render_in_parent (window) || window->gl_paint_context)
1508++ if (window->gl_paint_context)
1509+ {
1510+ cairo_surface = cairo_image_surface_create (pixel_format, window->width, window->height);
1511+ }
1512+@@ -370,7 +422,7 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
1513+ {
1514+ ensure_surface (window);
1515+
1516+- mir_surface_get_graphics_region (impl->surface, &region);
1517++ mir_buffer_stream_get_graphics_region (mir_surface_get_buffer_stream (impl->surface), &region);
1518+ g_assert (region.pixel_format == mir_pixel_format_argb_8888);
1519+
1520+ cairo_surface = cairo_image_surface_create_for_data ((unsigned char *) region.vaddr,
1521+@@ -408,13 +460,6 @@ static void
1522+ gdk_mir_window_impl_finalize (GObject *object)
1523+ {
1524+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (object);
1525+- GList *link;
1526+-
1527+- for (link = impl->transient_children; link; link = link->next)
1528+- {
1529+- GdkWindow *window = link->data;
1530+- gdk_window_destroy (window);
1531+- }
1532+
1533+ if (impl->background)
1534+ cairo_pattern_destroy (impl->background);
1535+@@ -422,7 +467,6 @@ gdk_mir_window_impl_finalize (GObject *object)
1536+ mir_surface_release_sync (impl->surface);
1537+ if (impl->cairo_surface)
1538+ cairo_surface_destroy (impl->cairo_surface);
1539+- g_list_free (impl->transient_children);
1540+
1541+ G_OBJECT_CLASS (gdk_mir_window_impl_parent_class)->finalize (object);
1542+ }
1543+@@ -459,9 +503,6 @@ gdk_mir_window_impl_hide (GdkWindow *window)
1544+ impl->cursor_inside = FALSE;
1545+ impl->visible = FALSE;
1546+ ensure_no_surface (window);
1547+-
1548+- if (should_render_in_parent (window))
1549+- redraw_transient (window);
1550+ }
1551+
1552+ static void
1553+@@ -473,9 +514,6 @@ gdk_mir_window_impl_withdraw (GdkWindow *window)
1554+ impl->cursor_inside = FALSE;
1555+ impl->visible = FALSE;
1556+ ensure_no_surface (window);
1557+-
1558+- if (should_render_in_parent (window))
1559+- redraw_transient (window);
1560+ }
1561+
1562+ static void
1563+@@ -529,19 +567,10 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
1564+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1565+ gboolean recreate_surface = FALSE;
1566+
1567+- /* Redraw parent where we moved from */
1568+- if (should_render_in_parent (window))
1569+- redraw_transient (window);
1570+-
1571+ /* Transient windows can move wherever they want */
1572+ if (with_move)
1573+ {
1574+- if (should_render_in_parent (window))
1575+- {
1576+- window->x = x;
1577+- window->y = y;
1578+- }
1579+- else if (x != impl->transient_x || y != impl->transient_y)
1580++ if (x != impl->transient_x || y != impl->transient_y)
1581+ {
1582+ impl->transient_x = x;
1583+ impl->transient_y = y;
1584+@@ -563,10 +592,6 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
1585+ ensure_no_surface (window);
1586+ ensure_surface (window);
1587+ }
1588+-
1589+- /* Redraw parent where we moved to */
1590+- if (should_render_in_parent (window))
1591+- redraw_transient (window);
1592+ }
1593+
1594+ static void
1595+@@ -602,7 +627,7 @@ gdk_mir_window_impl_reparent (GdkWindow *window,
1596+ gint x,
1597+ gint y)
1598+ {
1599+- g_printerr ("gdk_mir_window_impl_reparent window=%p new-parent=%p\n", window, new_parent);
1600++ //g_printerr ("gdk_mir_window_impl_reparent window=%p new-parent=%p\n", window, new_parent);
1601+ return FALSE;
1602+ }
1603+
1604+@@ -702,14 +727,14 @@ gdk_mir_window_impl_end_paint (GdkWindow *window)
1605+ static cairo_region_t *
1606+ gdk_mir_window_impl_get_shape (GdkWindow *window)
1607+ {
1608+- g_printerr ("gdk_mir_window_impl_get_shape window=%p\n", window);
1609++ //g_printerr ("gdk_mir_window_impl_get_shape window=%p\n", window);
1610+ return NULL;
1611+ }
1612+
1613+ static cairo_region_t *
1614+ gdk_mir_window_impl_get_input_shape (GdkWindow *window)
1615+ {
1616+- g_printerr ("gdk_mir_window_impl_get_input_shape window=%p\n", window);
1617++ //g_printerr ("gdk_mir_window_impl_get_input_shape window=%p\n", window);
1618+ return NULL;
1619+ }
1620+
1621+@@ -719,7 +744,7 @@ gdk_mir_window_impl_shape_combine_region (GdkWindow *window,
1622+ gint offset_x,
1623+ gint offset_y)
1624+ {
1625+- g_printerr ("gdk_mir_window_impl_shape_combine_region window=%p\n", window);
1626++ //g_printerr ("gdk_mir_window_impl_shape_combine_region window=%p\n", window);
1627+ }
1628+
1629+ static void
1630+@@ -741,70 +766,32 @@ gdk_mir_window_impl_destroy (GdkWindow *window,
1631+
1632+ impl->visible = FALSE;
1633+ ensure_no_surface (window);
1634+-
1635+- if (should_render_in_parent (window))
1636+- {
1637+- /* Redraw parent */
1638+- redraw_transient (window);
1639+-
1640+- /* Remove from transient list */
1641+- GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (impl->transient_for->impl);
1642+- parent_impl->transient_children = g_list_remove (parent_impl->transient_children, window);
1643+- }
1644+ }
1645+
1646+ static void
1647+ gdk_mir_window_impl_destroy_foreign (GdkWindow *window)
1648+ {
1649+- g_printerr ("gdk_mir_window_impl_destroy_foreign window=%p\n", window);
1650++ //g_printerr ("gdk_mir_window_impl_destroy_foreign window=%p\n", window);
1651+ }
1652+
1653+ static void
1654+ gdk_mir_window_impl_focus (GdkWindow *window,
1655+ guint32 timestamp)
1656+ {
1657+- g_printerr ("gdk_mir_window_impl_focus window=%p\n", window);
1658++ //g_printerr ("gdk_mir_window_impl_focus window=%p\n", window);
1659+ }
1660+
1661+ static void
1662+ gdk_mir_window_impl_set_type_hint (GdkWindow *window,
1663+ GdkWindowTypeHint hint)
1664+ {
1665+- MirSurfaceType mir_type = mir_surface_type_normal;
1666++ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1667+
1668+- switch (hint)
1669++ if (hint != impl->type_hint)
1670+ {
1671+- case GDK_WINDOW_TYPE_HINT_NORMAL:
1672+- case GDK_WINDOW_TYPE_HINT_DOCK:
1673+- case GDK_WINDOW_TYPE_HINT_DESKTOP:
1674+- mir_type = mir_surface_type_normal;
1675+- break;
1676+- case GDK_WINDOW_TYPE_HINT_DIALOG:
1677+- mir_type = mir_surface_type_dialog;
1678+- break;
1679+- case GDK_WINDOW_TYPE_HINT_UTILITY:
1680+- mir_type = mir_surface_type_utility;
1681+- break;
1682+- case GDK_WINDOW_TYPE_HINT_MENU:
1683+- case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
1684+- case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
1685+- case GDK_WINDOW_TYPE_HINT_COMBO:
1686+- mir_type = mir_surface_type_menu;
1687+- break;
1688+- case GDK_WINDOW_TYPE_HINT_TOOLTIP:
1689+- mir_type = mir_surface_type_tip;
1690+- break;
1691+- case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
1692+- case GDK_WINDOW_TYPE_HINT_DND:
1693+- case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
1694+- mir_type = mir_surface_type_overlay;
1695+- break;
1696+- case GDK_WINDOW_TYPE_HINT_TOOLBAR:
1697+- mir_type = mir_surface_type_satellite;
1698+- break;
1699++ impl->type_hint = hint;
1700++ ensure_no_surface (window);
1701+ }
1702+-
1703+- set_surface_type (GDK_MIR_WINDOW_IMPL (window->impl), mir_type);
1704+ }
1705+
1706+ static GdkWindowTypeHint
1707+@@ -812,29 +799,7 @@ gdk_mir_window_impl_get_type_hint (GdkWindow *window)
1708+ {
1709+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1710+
1711+- switch (impl->surface_type)
1712+- {
1713+- case mir_surface_type_normal:
1714+- case mir_surface_type_freestyle:
1715+- case mir_surface_type_inputmethod:
1716+- return GDK_WINDOW_TYPE_HINT_NORMAL;
1717+- case mir_surface_type_utility:
1718+- return GDK_WINDOW_TYPE_HINT_UTILITY;
1719+- case mir_surface_type_dialog:
1720+- return GDK_WINDOW_TYPE_HINT_DIALOG;
1721+- case mir_surface_type_tip:
1722+- return GDK_WINDOW_TYPE_HINT_TOOLTIP;
1723+- case mir_surface_type_menu:
1724+- return GDK_WINDOW_TYPE_HINT_MENU;
1725+- case mir_surface_type_overlay:
1726+- return GDK_WINDOW_TYPE_HINT_NOTIFICATION;
1727+- case mir_surface_type_satellite:
1728+- return GDK_WINDOW_TYPE_HINT_TOOLBAR;
1729+- case mir_surface_types:
1730+- break;
1731+- }
1732+-
1733+- return GDK_WINDOW_TYPE_HINT_NORMAL;
1734++ return impl->type_hint;
1735+ }
1736+
1737+ void
1738+@@ -849,21 +814,21 @@ static void
1739+ gdk_mir_window_impl_set_skip_taskbar_hint (GdkWindow *window,
1740+ gboolean skips_taskbar)
1741+ {
1742+- g_printerr ("gdk_mir_window_impl_set_skip_taskbar_hint window=%p\n", window);
1743++ //g_printerr ("gdk_mir_window_impl_set_skip_taskbar_hint window=%p\n", window);
1744+ }
1745+
1746+ static void
1747+ gdk_mir_window_impl_set_skip_pager_hint (GdkWindow *window,
1748+ gboolean skips_pager)
1749+ {
1750+- g_printerr ("gdk_mir_window_impl_set_skip_pager_hint window=%p\n", window);
1751++ //g_printerr ("gdk_mir_window_impl_set_skip_pager_hint window=%p\n", window);
1752+ }
1753+
1754+ static void
1755+ gdk_mir_window_impl_set_urgency_hint (GdkWindow *window,
1756+ gboolean urgent)
1757+ {
1758+- g_printerr ("gdk_mir_window_impl_set_urgency_hint window=%p\n", window);
1759++ //g_printerr ("gdk_mir_window_impl_set_urgency_hint window=%p\n", window);
1760+ }
1761+
1762+ static void
1763+@@ -886,21 +851,21 @@ static void
1764+ gdk_mir_window_impl_set_role (GdkWindow *window,
1765+ const gchar *role)
1766+ {
1767+- g_printerr ("gdk_mir_window_impl_set_role window=%p\n", window);
1768++ //g_printerr ("gdk_mir_window_impl_set_role window=%p\n", window);
1769+ }
1770+
1771+ static void
1772+ gdk_mir_window_impl_set_startup_id (GdkWindow *window,
1773+ const gchar *startup_id)
1774+ {
1775+- g_printerr ("gdk_mir_window_impl_set_startup_id window=%p\n", window);
1776++ //g_printerr ("gdk_mir_window_impl_set_startup_id window=%p\n", window);
1777+ }
1778+
1779+ static void
1780+ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
1781+ GdkWindow *parent)
1782+ {
1783+- g_printerr ("gdk_mir_window_impl_set_transient_for window=%p\n", window);
1784++ //g_printerr ("gdk_mir_window_impl_set_transient_for window=%p\n", window);
1785+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1786+
1787+ if (impl->transient_for == parent)
1788+@@ -910,78 +875,20 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
1789+
1790+ /* Link this window to the parent */
1791+ impl->transient_for = parent;
1792+- if (should_render_in_parent (window))
1793+- {
1794+- GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl);
1795+- parent_impl->transient_children = g_list_append (parent_impl->transient_children, window);
1796+-
1797+- /* Move to where the client requested */
1798+- window->x = impl->transient_x;
1799+- window->y = impl->transient_y;
1800+-
1801+- /* Remove surface if we had made one before this was set */
1802+- ensure_no_surface (window);
1803+-
1804+- /* Redraw onto parent */
1805+- redraw_transient (window);
1806+- }
1807+-}
1808+-
1809+-/* TODO: Remove once we have proper transient window support. */
1810+-GdkWindow *
1811+-_gdk_mir_window_get_visible_transient_child (GdkWindow *window,
1812+- gdouble x,
1813+- gdouble y,
1814+- gdouble *out_x,
1815+- gdouble *out_y)
1816+-{
1817+- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1818+- GdkWindow *child = NULL;
1819+- GList *i;
1820+-
1821+- x -= window->x;
1822+- y -= window->y;
1823+-
1824+- if (x < 0 || x >= window->width || y < 0 || y >= window->height)
1825+- return NULL;
1826+-
1827+- for (i = impl->transient_children; i && !child; i = i->next)
1828+- {
1829+- if (GDK_MIR_WINDOW_IMPL (GDK_WINDOW (i->data)->impl)->visible)
1830+- child = _gdk_mir_window_get_visible_transient_child (i->data, x, y, out_x, out_y);
1831+- }
1832+-
1833+- if (child)
1834+- return child;
1835+-
1836+- *out_x = x;
1837+- *out_y = y;
1838+-
1839+- return window;
1840+-}
1841+-
1842+-/* TODO: Remove once we have proper transient window support. */
1843+-void
1844+-_gdk_mir_window_transient_children_foreach (GdkWindow *window,
1845+- void (*func) (GdkWindow *, gpointer),
1846+- gpointer user_data)
1847+-{
1848+- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
1849+- g_list_foreach (impl->transient_children, (GFunc) func, user_data);
1850+ }
1851+
1852+ static void
1853+ gdk_mir_window_impl_get_frame_extents (GdkWindow *window,
1854+ GdkRectangle *rect)
1855+ {
1856+- g_printerr ("gdk_mir_window_impl_get_frame_extents window=%p\n", window);
1857++ //g_printerr ("gdk_mir_window_impl_get_frame_extents window=%p\n", window);
1858+ }
1859+
1860+ static void
1861+ gdk_mir_window_impl_set_override_redirect (GdkWindow *window,
1862+ gboolean override_redirect)
1863+ {
1864+- g_printerr ("gdk_mir_window_impl_set_override_redirect window=%p\n", window);
1865++ //g_printerr ("gdk_mir_window_impl_set_override_redirect window=%p\n", window);
1866+ }
1867+
1868+ static void
1869+@@ -1012,7 +919,7 @@ static void
1870+ gdk_mir_window_impl_set_icon_name (GdkWindow *window,
1871+ const gchar *name)
1872+ {
1873+- g_printerr ("gdk_mir_window_impl_set_icon_name window=%p\n", window);
1874++ //g_printerr ("gdk_mir_window_impl_set_icon_name window=%p\n", window);
1875+ }
1876+
1877+ static void
1878+@@ -1096,7 +1003,7 @@ gdk_mir_window_impl_set_keep_below (GdkWindow *window,
1879+ static GdkWindow *
1880+ gdk_mir_window_impl_get_group (GdkWindow *window)
1881+ {
1882+- g_printerr ("gdk_mir_window_impl_get_group window=%p\n", window);
1883++ //g_printerr ("gdk_mir_window_impl_get_group window=%p\n", window);
1884+ return NULL;
1885+ }
1886+
1887+@@ -1104,21 +1011,21 @@ static void
1888+ gdk_mir_window_impl_set_group (GdkWindow *window,
1889+ GdkWindow *leader)
1890+ {
1891+- g_printerr ("gdk_mir_window_impl_set_group window=%p\n", window);
1892++ //g_printerr ("gdk_mir_window_impl_set_group window=%p\n", window);
1893+ }
1894+
1895+ static void
1896+ gdk_mir_window_impl_set_decorations (GdkWindow *window,
1897+ GdkWMDecoration decorations)
1898+ {
1899+- g_printerr ("gdk_mir_window_impl_set_decorations window=%p decorations=%d\n", window, decorations);
1900++ //g_printerr ("gdk_mir_window_impl_set_decorations window=%p decorations=%d\n", window, decorations);
1901+ }
1902+
1903+ static gboolean
1904+ gdk_mir_window_impl_get_decorations (GdkWindow *window,
1905+ GdkWMDecoration *decorations)
1906+ {
1907+- g_printerr ("gdk_mir_window_impl_get_decorations window=%p\n", window);
1908++ //g_printerr ("gdk_mir_window_impl_get_decorations window=%p\n", window);
1909+ return FALSE;
1910+ }
1911+
1912+@@ -1126,7 +1033,7 @@ static void
1913+ gdk_mir_window_impl_set_functions (GdkWindow *window,
1914+ GdkWMFunction functions)
1915+ {
1916+- g_printerr ("gdk_mir_window_impl_set_functions window=%p\n", window);
1917++ //g_printerr ("gdk_mir_window_impl_set_functions window=%p\n", window);
1918+ }
1919+
1920+ static void
1921+@@ -1138,7 +1045,7 @@ gdk_mir_window_impl_begin_resize_drag (GdkWindow *window,
1922+ gint root_y,
1923+ guint32 timestamp)
1924+ {
1925+- g_printerr ("gdk_mir_window_impl_begin_resize_drag window=%p\n", window);
1926++ //g_printerr ("gdk_mir_window_impl_begin_resize_drag window=%p\n", window);
1927+ }
1928+
1929+ static void
1930+@@ -1149,19 +1056,19 @@ gdk_mir_window_impl_begin_move_drag (GdkWindow *window,
1931+ gint root_y,
1932+ guint32 timestamp)
1933+ {
1934+- g_printerr ("gdk_mir_window_impl_begin_move_drag window=%p\n", window);
1935++ //g_printerr ("gdk_mir_window_impl_begin_move_drag window=%p\n", window);
1936+ }
1937+
1938+ static void
1939+ gdk_mir_window_impl_enable_synchronized_configure (GdkWindow *window)
1940+ {
1941+- g_printerr ("gdk_mir_window_impl_enable_synchronized_configure window=%p\n", window);
1942++ //g_printerr ("gdk_mir_window_impl_enable_synchronized_configure window=%p\n", window);
1943+ }
1944+
1945+ static void
1946+ gdk_mir_window_impl_configure_finished (GdkWindow *window)
1947+ {
1948+- g_printerr ("gdk_mir_window_impl_configure_finished window=%p\n", window);
1949++ //g_printerr ("gdk_mir_window_impl_configure_finished window=%p\n", window);
1950+ }
1951+
1952+ static void
1953+@@ -1176,27 +1083,27 @@ static void
1954+ gdk_mir_window_impl_set_composited (GdkWindow *window,
1955+ gboolean composited)
1956+ {
1957+- g_printerr ("gdk_mir_window_impl_set_composited window=%p\n", window);
1958++ //g_printerr ("gdk_mir_window_impl_set_composited window=%p\n", window);
1959+ }
1960+
1961+ static void
1962+ gdk_mir_window_impl_destroy_notify (GdkWindow *window)
1963+ {
1964+- g_printerr ("gdk_mir_window_impl_destroy_notify window=%p\n", window);
1965++ //g_printerr ("gdk_mir_window_impl_destroy_notify window=%p\n", window);
1966+ }
1967+
1968+ static GdkDragProtocol
1969+ gdk_mir_window_impl_get_drag_protocol (GdkWindow *window,
1970+ GdkWindow **target)
1971+ {
1972+- g_printerr ("gdk_mir_window_impl_get_drag_protocol window=%p\n", window);
1973++ //g_printerr ("gdk_mir_window_impl_get_drag_protocol window=%p\n", window);
1974+ return 0;
1975+ }
1976+
1977+ static void
1978+ gdk_mir_window_impl_register_dnd (GdkWindow *window)
1979+ {
1980+- g_printerr ("gdk_mir_window_impl_register_dnd window=%p\n", window);
1981++ //g_printerr ("gdk_mir_window_impl_register_dnd window=%p\n", window);
1982+ }
1983+
1984+ static GdkDragContext *
1985+@@ -1204,7 +1111,7 @@ gdk_mir_window_impl_drag_begin (GdkWindow *window,
1986+ GdkDevice *device,
1987+ GList *targets)
1988+ {
1989+- g_printerr ("gdk_mir_window_impl_drag_begin window=%p\n", window);
1990++ //g_printerr ("gdk_mir_window_impl_drag_begin window=%p\n", window);
1991+ return NULL;
1992+ }
1993+
1994+@@ -1228,7 +1135,7 @@ gdk_mir_window_impl_process_updates_recurse (GdkWindow *window,
1995+ static void
1996+ gdk_mir_window_impl_sync_rendering (GdkWindow *window)
1997+ {
1998+- g_printerr ("gdk_mir_window_impl_sync_rendering window=%p\n", window);
1999++ //g_printerr ("gdk_mir_window_impl_sync_rendering window=%p\n", window);
2000+ // FIXME: Only used for benchmarking
2001+ }
2002+
2003+@@ -1240,7 +1147,7 @@ gdk_mir_window_impl_simulate_key (GdkWindow *window,
2004+ GdkModifierType modifiers,
2005+ GdkEventType key_pressrelease)
2006+ {
2007+- g_printerr ("gdk_mir_window_impl_simulate_key window=%p\n", window);
2008++ //g_printerr ("gdk_mir_window_impl_simulate_key window=%p\n", window);
2009+ return FALSE;
2010+ }
2011+
2012+@@ -1252,7 +1159,7 @@ gdk_mir_window_impl_simulate_button (GdkWindow *window,
2013+ GdkModifierType modifiers,
2014+ GdkEventType button_pressrelease)
2015+ {
2016+- g_printerr ("gdk_mir_window_impl_simulate_button window=%p\n", window);
2017++ //g_printerr ("gdk_mir_window_impl_simulate_button window=%p\n", window);
2018+ return FALSE;
2019+ }
2020+
2021+@@ -1268,7 +1175,7 @@ gdk_mir_window_impl_get_property (GdkWindow *window,
2022+ gint *actual_length,
2023+ guchar **data)
2024+ {
2025+- g_printerr ("gdk_mir_window_impl_get_property window=%p\n", window);
2026++ //g_printerr ("gdk_mir_window_impl_get_property window=%p\n", window);
2027+ return FALSE;
2028+ }
2029+
2030+@@ -1281,7 +1188,7 @@ gdk_mir_window_impl_change_property (GdkWindow *window,
2031+ const guchar *data,
2032+ gint nelements)
2033+ {
2034+- g_printerr ("gdk_mir_window_impl_change_property window=%p\n", window);
2035++ //g_printerr ("gdk_mir_window_impl_change_property window=%p\n", window);
2036+ }
2037+
2038+ static void
2039+@@ -1508,7 +1415,7 @@ _gdk_mir_window_get_egl_surface (GdkWindow *window,
2040+ ensure_surface_full (window, mir_buffer_usage_hardware);
2041+
2042+ egl_display = _gdk_mir_display_get_egl_display (gdk_window_get_display (window));
2043+- egl_window = (EGLNativeWindowType) mir_surface_get_egl_native_window (impl->surface);
2044++ egl_window = (EGLNativeWindowType) mir_buffer_stream_get_egl_native_window (mir_surface_get_buffer_stream (impl->surface));
2045+
2046+ impl->egl_surface =
2047+ eglCreateWindowSurface (egl_display, config, egl_window, NULL);
2048+@@ -1532,11 +1439,8 @@ _gdk_mir_window_get_dummy_egl_surface (GdkWindow *window,
2049+ EGLNativeWindowType egl_window;
2050+
2051+ display = gdk_window_get_display (window);
2052+- impl->dummy_surface = create_mir_surface (display, 1, 1,
2053+- mir_buffer_usage_hardware);
2054+-
2055+ egl_display = _gdk_mir_display_get_egl_display (display);
2056+- egl_window = (EGLNativeWindowType) mir_surface_get_egl_native_window (impl->surface);
2057++ egl_window = (EGLNativeWindowType) mir_buffer_stream_get_egl_native_window (mir_surface_get_buffer_stream (impl->surface));
2058+
2059+ impl->dummy_egl_surface =
2060+ eglCreateWindowSurface (egl_display, config, egl_window, NULL);
2061+--
2062+2.1.4
2063+
2064
2065=== removed file 'debian/patches/0002-Unstable-mir-patches-from-git-wip-mir-unstable.patch'
2066--- debian/patches/0002-Unstable-mir-patches-from-git-wip-mir-unstable.patch 2015-06-02 11:18:47 +0000
2067+++ debian/patches/0002-Unstable-mir-patches-from-git-wip-mir-unstable.patch 1970-01-01 00:00:00 +0000
2068@@ -1,718 +0,0 @@
2069-From 70ffd98af2e290ebda8043f0fa9b0817e99ced2f Mon Sep 17 00:00:00 2001
2070-From: William Hua <william.hua@canonical.com>
2071-Date: Tue, 19 May 2015 17:58:38 -0500
2072-Subject: [PATCH 2/2] Unstable mir patches from git wip/mir-unstable.
2073-
2074----
2075- gdk/mir/gdkmir-debug.c | 18 +++
2076- gdk/mir/gdkmir-private.h | 12 --
2077- gdk/mir/gdkmireventsource.c | 97 ++------------
2078- gdk/mir/gdkmirwindowimpl.c | 319 ++++++++++++--------------------------------
2079- 4 files changed, 116 insertions(+), 330 deletions(-)
2080-
2081-diff --git a/gdk/mir/gdkmir-debug.c b/gdk/mir/gdkmir-debug.c
2082-index 9bfdfe7..a135f1b 100644
2083---- a/gdk/mir/gdkmir-debug.c
2084-+++ b/gdk/mir/gdkmir-debug.c
2085-@@ -184,8 +184,26 @@ _gdk_mir_print_close_event (const MirCloseSurfaceEvent *event)
2086- void
2087- _gdk_mir_print_event (const MirEvent *event)
2088- {
2089-+ const MirInputEvent *input_event;
2090-+
2091- switch (mir_event_get_type (event))
2092- {
2093-+ case mir_event_type_input:
2094-+ input_event = mir_event_get_input_event (event);
2095-+
2096-+ switch (mir_input_event_get_type (input_event))
2097-+ {
2098-+ case mir_input_event_type_key:
2099-+ _gdk_mir_print_key_event (mir_event_get_input_event (event));
2100-+ break;
2101-+ case mir_input_event_type_touch:
2102-+ _gdk_mir_print_motion_event (mir_event_get_input_event (event));
2103-+ break;
2104-+ case mir_input_event_type_pointer:
2105-+ _gdk_mir_print_motion_event (mir_event_get_input_event (event));
2106-+ break;
2107-+ }
2108-+ break;
2109- case mir_event_type_key:
2110- _gdk_mir_print_key_event (mir_event_get_input_event (event));
2111- break;
2112-diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
2113-index 847720b..2464434 100644
2114---- a/gdk/mir/gdkmir-private.h
2115-+++ b/gdk/mir/gdkmir-private.h
2116-@@ -133,16 +133,4 @@ void _gdk_mir_print_resize_event (const MirResizeEvent *event);
2117-
2118- void _gdk_mir_print_event (const MirEvent *event);
2119-
2120--/* TODO: Remove once we have proper transient window support. */
2121--GdkWindow * _gdk_mir_window_get_visible_transient_child (GdkWindow *window,
2122-- gdouble x,
2123-- gdouble y,
2124-- gdouble *out_x,
2125-- gdouble *out_y);
2126--
2127--/* TODO: Remove once we have proper transient window support. */
2128--void _gdk_mir_window_transient_children_foreach (GdkWindow *window,
2129-- void (*func) (GdkWindow *, gpointer),
2130-- gpointer user_data);
2131--
2132- #endif /* __GDK_PRIVATE_MIR_H__ */
2133-diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
2134-index aed881c..41a4422 100644
2135---- a/gdk/mir/gdkmireventsource.c
2136-+++ b/gdk/mir/gdkmireventsource.c
2137-@@ -148,6 +148,8 @@ generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble
2138- {
2139- GdkEvent *event;
2140-
2141-+ g_print ("%s %lf %lf\n", G_STRFUNC, x, y);
2142-+
2143- event = gdk_event_new (type);
2144- event->button.x = x;
2145- event->button.y = y;
2146-@@ -308,47 +310,6 @@ handle_key_event (GdkWindow *window, const MirInputEvent *event)
2147- }
2148- }
2149-
2150--/* TODO: Remove once we have proper transient window support. */
2151--typedef struct
2152--{
2153-- GdkWindow *except;
2154-- gdouble x;
2155-- gdouble y;
2156-- guint32 time;
2157--} LeaveInfo;
2158--
2159--/* TODO: Remove once we have proper transient window support. */
2160--/*
2161-- * leave_windows_except:
2162-- *
2163-- * Generate a leave event for every window except the one the cursor is in.
2164-- */
2165--static void
2166--leave_windows_except (GdkWindow *window,
2167-- gpointer user_data)
2168--{
2169-- LeaveInfo info = *((LeaveInfo *) user_data);
2170--
2171-- info.x -= window->x;
2172-- info.y -= window->y;
2173--
2174-- _gdk_mir_window_transient_children_foreach (window, leave_windows_except, &info);
2175--
2176-- if (window != info.except)
2177-- {
2178-- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2179-- gboolean cursor_inside;
2180-- guint button_state;
2181--
2182-- _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, &cursor_inside, &button_state);
2183--
2184-- if (cursor_inside)
2185-- generate_crossing_event (window, GDK_LEAVE_NOTIFY, info.x, info.y, info.time);
2186--
2187-- _gdk_mir_window_impl_set_cursor_state (impl, info.x, info.y, FALSE, button_state);
2188-- }
2189--}
2190--
2191- static guint
2192- mir_pointer_event_get_button_state (const MirPointerEvent *event)
2193- {
2194-@@ -388,49 +349,6 @@ handle_motion_event (GdkWindow *window, const MirInputEvent *event)
2195- modifier_state = get_modifier_state (mir_pointer_event_modifiers (pointer_event), mir_pointer_event_get_button_state (pointer_event));
2196- event_time = NANO_TO_MILLI (mir_input_event_get_event_time (event));
2197-
2198-- /* TODO: Remove once we have proper transient window support. */
2199-- if (mir_pointer_event_action (pointer_event) == mir_pointer_action_leave)
2200-- {
2201-- LeaveInfo info;
2202--
2203-- info.x = x;
2204-- info.y = y;
2205-- info.time = event_time;
2206-- info.except = window;
2207--
2208-- /* Leave all transient children from leaf to root, except the root since we do it later. */
2209-- _gdk_mir_window_transient_children_foreach (window, leave_windows_except, &info);
2210-- }
2211-- else
2212-- {
2213-- LeaveInfo info;
2214--
2215-- info.x = x;
2216-- info.y = y;
2217-- info.time = event_time;
2218-- info.except = _gdk_mir_window_get_visible_transient_child (window, x, y, &x, &y);
2219--
2220-- /* Leave all transient children from leaf to root, except the pointer window since we enter it. */
2221-- _gdk_mir_window_transient_children_foreach (window, leave_windows_except, &info);
2222--
2223-- window = info.except;
2224--
2225-- if (window)
2226-- {
2227-- /* Enter the pointer window. */
2228-- gboolean cursor_inside_pointer_window;
2229--
2230-- impl = GDK_MIR_WINDOW_IMPL (window->impl);
2231-- _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, &cursor_inside_pointer_window, NULL);
2232--
2233-- if (!cursor_inside_pointer_window)
2234-- {
2235-- generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y, event_time);
2236-- _gdk_mir_window_impl_set_cursor_state (impl, x, y, TRUE, mir_pointer_event_get_button_state (pointer_event));
2237-- }
2238-- }
2239-- }
2240--
2241- if (window)
2242- {
2243- gdouble new_x;
2244-@@ -444,6 +362,8 @@ handle_motion_event (GdkWindow *window, const MirInputEvent *event)
2245- {
2246- case mir_pointer_action_button_up:
2247- case mir_pointer_action_button_down:
2248-+ g_print ("%s button up/down\n", G_STRFUNC);
2249-+
2250- event_type = mir_pointer_event_action (pointer_event) == mir_pointer_action_button_down ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE;
2251- changed_button_state = button_state ^ mir_pointer_event_get_button_state (pointer_event);
2252- if (changed_button_state == 0 || (changed_button_state & mir_pointer_button_primary) != 0)
2253-@@ -463,7 +383,11 @@ handle_motion_event (GdkWindow *window, const MirInputEvent *event)
2254- if (hscroll > 0.5 || vscroll > 0.5)
2255- generate_scroll_event (window, x, y, hscroll, vscroll, modifier_state, event_time);
2256- if (ABS (new_x - x) > 0.5 || ABS (new_y - y) > 0.5)
2257-- generate_motion_event (window, new_x, new_y, modifier_state, event_time);
2258-+ {
2259-+ generate_motion_event (window, new_x, new_y, modifier_state, event_time);
2260-+ x = new_x;
2261-+ y = new_y;
2262-+ }
2263-
2264- break;
2265- case mir_pointer_action_leave:
2266-@@ -616,6 +540,7 @@ static void
2267- gdk_mir_queued_event_free (GdkMirQueuedEvent *event)
2268- {
2269- _gdk_mir_window_reference_unref (event->window_ref);
2270-+ mir_event_unref (event->event);
2271- g_slice_free (GdkMirQueuedEvent, event);
2272- }
2273-
2274-@@ -800,7 +725,7 @@ _gdk_mir_event_source_queue (GdkMirWindowReference *window_ref,
2275- queued_event = g_slice_new (GdkMirQueuedEvent);
2276- g_atomic_int_inc (&window_ref->ref_count);
2277- queued_event->window_ref = window_ref;
2278-- queued_event->event = event;
2279-+ queued_event->event = mir_event_ref (event);
2280-
2281- g_mutex_lock (&source->mir_event_lock);
2282- g_queue_push_tail (&source->mir_events, queued_event);
2283-diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
2284-index 9cafcc9..d150d3e 100644
2285---- a/gdk/mir/gdkmirwindowimpl.c
2286-+++ b/gdk/mir/gdkmirwindowimpl.c
2287-@@ -46,11 +46,8 @@ struct _GdkMirWindowImpl
2288- gint transient_x;
2289- gint transient_y;
2290-
2291-- /* Child windows (e.g. tooltips) */
2292-- GList *transient_children;
2293--
2294- /* Desired surface attributes */
2295-- MirSurfaceType surface_type;
2296-+ GdkWindowTypeHint type_hint;
2297- MirSurfaceState surface_state;
2298-
2299- /* Pattern for background */
2300-@@ -103,9 +100,9 @@ _gdk_mir_window_impl_set_surface_state (GdkMirWindowImpl *impl, MirSurfaceState
2301- }
2302-
2303- void
2304--_gdk_mir_window_impl_set_surface_type (GdkMirWindowImpl *impl, MirSurfaceType type)
2305-+_gdk_mir_window_impl_set_surface_type (GdkMirWindowImpl *impl,
2306-+ MirSurfaceType type)
2307- {
2308-- impl->surface_type = type;
2309- }
2310-
2311- void
2312-@@ -141,7 +138,7 @@ _gdk_mir_window_impl_get_cursor_state (GdkMirWindowImpl *impl,
2313- static void
2314- gdk_mir_window_impl_init (GdkMirWindowImpl *impl)
2315- {
2316-- impl->surface_type = mir_surface_type_normal;
2317-+ impl->type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
2318- impl->surface_state = mir_surface_state_unknown;
2319- }
2320-
2321-@@ -158,18 +155,6 @@ set_surface_state (GdkMirWindowImpl *impl,
2322- }
2323-
2324- static void
2325--set_surface_type (GdkMirWindowImpl *impl,
2326-- MirSurfaceType type)
2327--{
2328-- if (impl->surface_type == type)
2329-- return;
2330--
2331-- impl->surface_type = type;
2332-- if (impl->surface)
2333-- mir_surface_set_type (impl->surface, type);
2334--}
2335--
2336--static void
2337- event_cb (MirSurface *surface,
2338- const MirEvent *event,
2339- void *context)
2340-@@ -179,18 +164,87 @@ event_cb (MirSurface *surface,
2341-
2342- static MirSurface *
2343- create_mir_surface (GdkDisplay *display,
2344-+ GdkWindow *parent,
2345-+ gint x,
2346-+ gint y,
2347- gint width,
2348- gint height,
2349-+ GdkWindowTypeHint type,
2350- MirBufferUsage buffer_usage)
2351- {
2352-+ GdkMirWindowImpl *parent_impl;
2353- MirSurfaceSpec *spec;
2354- MirConnection *connection;
2355- MirPixelFormat format;
2356- MirSurface *surface;
2357-+ MirRectangle rect;
2358-
2359- connection = gdk_mir_display_get_mir_connection (display);
2360- format = _gdk_mir_display_get_pixel_format (display, buffer_usage);
2361-- spec = mir_connection_create_spec_for_normal_surface (connection, width, height, format);
2362-+
2363-+ if (parent)
2364-+ parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl);
2365-+ else
2366-+ parent_impl = NULL;
2367-+
2368-+ switch (type)
2369-+ {
2370-+ case GDK_WINDOW_TYPE_HINT_DIALOG:
2371-+ case GDK_WINDOW_TYPE_HINT_DOCK:
2372-+ spec = mir_connection_create_spec_for_dialog (connection,
2373-+ width,
2374-+ height,
2375-+ format);
2376-+ break;
2377-+ case GDK_WINDOW_TYPE_HINT_MENU:
2378-+ case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
2379-+ case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
2380-+ case GDK_WINDOW_TYPE_HINT_TOOLBAR:
2381-+ case GDK_WINDOW_TYPE_HINT_COMBO:
2382-+ rect.left = x;
2383-+ rect.top = y;
2384-+ rect.width = 1;
2385-+ rect.height = 1;
2386-+ spec = mir_connection_create_spec_for_menu (connection,
2387-+ width,
2388-+ height,
2389-+ format,
2390-+ parent_impl ? parent_impl->surface : NULL,
2391-+ &rect,
2392-+ mir_edge_attachment_any);
2393-+ break;
2394-+ case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
2395-+ case GDK_WINDOW_TYPE_HINT_UTILITY:
2396-+ spec = mir_connection_create_spec_for_modal_dialog (connection,
2397-+ width,
2398-+ height,
2399-+ format,
2400-+ parent_impl ? parent_impl->surface : NULL);
2401-+ break;
2402-+ case GDK_WINDOW_TYPE_HINT_DND:
2403-+ case GDK_WINDOW_TYPE_HINT_TOOLTIP:
2404-+ case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
2405-+ rect.left = x;
2406-+ rect.top = y;
2407-+ rect.width = 1;
2408-+ rect.height = 1;
2409-+ spec = mir_connection_create_spec_for_tooltip (connection,
2410-+ width,
2411-+ height,
2412-+ format,
2413-+ parent_impl ? parent_impl->surface : NULL,
2414-+ &rect);
2415-+ break;
2416-+ case GDK_WINDOW_TYPE_HINT_NORMAL:
2417-+ case GDK_WINDOW_TYPE_HINT_DESKTOP:
2418-+ default:
2419-+ spec = mir_connection_create_spec_for_normal_surface (connection,
2420-+ width,
2421-+ height,
2422-+ format);
2423-+ break;
2424-+ }
2425-+
2426- mir_surface_spec_set_name (spec, g_get_prgname ());
2427- mir_surface_spec_set_buffer_usage (spec, buffer_usage);
2428- surface = mir_surface_create_sync (spec);
2429-@@ -199,15 +253,6 @@ create_mir_surface (GdkDisplay *display,
2430- return surface;
2431- }
2432-
2433--/* TODO: Remove once we have proper transient window support. */
2434--static gboolean
2435--should_render_in_parent (GdkWindow *window)
2436--{
2437-- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2438--
2439-- return impl->transient_for && gdk_window_get_window_type (window) != GDK_WINDOW_TOPLEVEL;
2440--}
2441--
2442- static void
2443- ensure_surface_full (GdkWindow *window,
2444- MirBufferUsage buffer_usage)
2445-@@ -215,7 +260,7 @@ ensure_surface_full (GdkWindow *window,
2446- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2447- GdkMirWindowReference *window_ref;
2448-
2449-- if (impl->surface || should_render_in_parent (window))
2450-+ if (impl->surface)
2451- return;
2452-
2453- /* no destroy notify -- we must leak for now
2454-@@ -223,8 +268,10 @@ ensure_surface_full (GdkWindow *window,
2455- */
2456- window_ref = _gdk_mir_event_source_get_window_reference (window);
2457-
2458-- impl->surface = create_mir_surface (gdk_window_get_display (window),
2459-+ impl->surface = create_mir_surface (gdk_window_get_display (window), impl->transient_for,
2460-+ impl->transient_x, impl->transient_y,
2461- window->width, window->height,
2462-+ impl->type_hint,
2463- buffer_usage);
2464-
2465- /* FIXME: can't make an initial resize event */
2466-@@ -242,8 +289,6 @@ ensure_surface_full (GdkWindow *window,
2467- */
2468-
2469- mir_surface_set_event_handler (impl->surface, event_cb, window_ref); // FIXME: Ignore some events until shown
2470-- set_surface_type (impl, impl->surface_type);
2471-- set_surface_state (impl, impl->surface_state);
2472- }
2473-
2474- static void
2475-@@ -289,56 +334,10 @@ ensure_no_surface (GdkWindow *window)
2476- }
2477-
2478- static void
2479--redraw_transient (GdkWindow *window)
2480--{
2481-- GdkRectangle r;
2482-- r.x = window->x;
2483-- r.y = window->y;
2484-- r.width = window->width;
2485-- r.height = window->height;
2486-- gdk_window_invalidate_rect (GDK_MIR_WINDOW_IMPL (window->impl)->transient_for, &r, FALSE);
2487--}
2488--
2489--static void
2490- send_buffer (GdkWindow *window)
2491- {
2492- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2493-
2494-- /* Transient windows draw onto parent instead */
2495-- if (should_render_in_parent (window))
2496-- {
2497-- redraw_transient (window);
2498-- return;
2499-- }
2500--
2501-- /* Composite transient windows over this one */
2502-- if (impl->transient_children)
2503-- {
2504-- cairo_surface_t *surface;
2505-- cairo_t *c;
2506-- GList *link;
2507--
2508-- surface = gdk_mir_window_impl_ref_cairo_surface (window);
2509-- c = cairo_create (surface);
2510--
2511-- for (link = impl->transient_children; link; link = link->next)
2512-- {
2513-- GdkWindow *child_window = link->data;
2514-- GdkMirWindowImpl *child_impl = GDK_MIR_WINDOW_IMPL (child_window->impl);
2515--
2516-- /* Skip children not yet drawn to */
2517-- if (!child_impl->cairo_surface)
2518-- continue;
2519--
2520-- cairo_set_source_surface (c, child_impl->cairo_surface, child_window->x, child_window->y);
2521-- cairo_rectangle (c, child_window->x, child_window->y, child_window->width, child_window->height);
2522-- cairo_fill (c);
2523-- }
2524--
2525-- cairo_destroy (c);
2526-- cairo_surface_destroy (surface);
2527-- }
2528--
2529- /* Send the completed buffer to Mir */
2530- mir_surface_swap_buffers_sync (impl->surface);
2531-
2532-@@ -363,7 +362,7 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
2533- }
2534-
2535- /* Transient windows get rendered into a buffer and copied onto their parent */
2536-- if (should_render_in_parent (window) || window->gl_paint_context)
2537-+ if (window->gl_paint_context)
2538- {
2539- cairo_surface = cairo_image_surface_create (pixel_format, window->width, window->height);
2540- }
2541-@@ -409,13 +408,6 @@ static void
2542- gdk_mir_window_impl_finalize (GObject *object)
2543- {
2544- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (object);
2545-- GList *link;
2546--
2547-- for (link = impl->transient_children; link; link = link->next)
2548-- {
2549-- GdkWindow *window = link->data;
2550-- gdk_window_destroy (window);
2551-- }
2552-
2553- if (impl->background)
2554- cairo_pattern_destroy (impl->background);
2555-@@ -423,7 +415,6 @@ gdk_mir_window_impl_finalize (GObject *object)
2556- mir_surface_release_sync (impl->surface);
2557- if (impl->cairo_surface)
2558- cairo_surface_destroy (impl->cairo_surface);
2559-- g_list_free (impl->transient_children);
2560-
2561- G_OBJECT_CLASS (gdk_mir_window_impl_parent_class)->finalize (object);
2562- }
2563-@@ -460,9 +451,6 @@ gdk_mir_window_impl_hide (GdkWindow *window)
2564- impl->cursor_inside = FALSE;
2565- impl->visible = FALSE;
2566- ensure_no_surface (window);
2567--
2568-- if (should_render_in_parent (window))
2569-- redraw_transient (window);
2570- }
2571-
2572- static void
2573-@@ -474,9 +462,6 @@ gdk_mir_window_impl_withdraw (GdkWindow *window)
2574- impl->cursor_inside = FALSE;
2575- impl->visible = FALSE;
2576- ensure_no_surface (window);
2577--
2578-- if (should_render_in_parent (window))
2579-- redraw_transient (window);
2580- }
2581-
2582- static void
2583-@@ -530,19 +515,10 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
2584- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2585- gboolean recreate_surface = FALSE;
2586-
2587-- /* Redraw parent where we moved from */
2588-- if (should_render_in_parent (window))
2589-- redraw_transient (window);
2590--
2591- /* Transient windows can move wherever they want */
2592- if (with_move)
2593- {
2594-- if (should_render_in_parent (window))
2595-- {
2596-- window->x = x;
2597-- window->y = y;
2598-- }
2599-- else if (x != impl->transient_x || y != impl->transient_y)
2600-+ if (x != impl->transient_x || y != impl->transient_y)
2601- {
2602- impl->transient_x = x;
2603- impl->transient_y = y;
2604-@@ -564,10 +540,6 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
2605- ensure_no_surface (window);
2606- ensure_surface (window);
2607- }
2608--
2609-- /* Redraw parent where we moved to */
2610-- if (should_render_in_parent (window))
2611-- redraw_transient (window);
2612- }
2613-
2614- static void
2615-@@ -742,16 +714,6 @@ gdk_mir_window_impl_destroy (GdkWindow *window,
2616-
2617- impl->visible = FALSE;
2618- ensure_no_surface (window);
2619--
2620-- if (should_render_in_parent (window))
2621-- {
2622-- /* Redraw parent */
2623-- redraw_transient (window);
2624--
2625-- /* Remove from transient list */
2626-- GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (impl->transient_for->impl);
2627-- parent_impl->transient_children = g_list_remove (parent_impl->transient_children, window);
2628-- }
2629- }
2630-
2631- static void
2632-@@ -771,41 +733,13 @@ static void
2633- gdk_mir_window_impl_set_type_hint (GdkWindow *window,
2634- GdkWindowTypeHint hint)
2635- {
2636-- MirSurfaceType mir_type = mir_surface_type_normal;
2637-+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2638-
2639-- switch (hint)
2640-+ if (hint != impl->type_hint)
2641- {
2642-- case GDK_WINDOW_TYPE_HINT_NORMAL:
2643-- case GDK_WINDOW_TYPE_HINT_DOCK:
2644-- case GDK_WINDOW_TYPE_HINT_DESKTOP:
2645-- mir_type = mir_surface_type_normal;
2646-- break;
2647-- case GDK_WINDOW_TYPE_HINT_DIALOG:
2648-- mir_type = mir_surface_type_dialog;
2649-- break;
2650-- case GDK_WINDOW_TYPE_HINT_UTILITY:
2651-- mir_type = mir_surface_type_utility;
2652-- break;
2653-- case GDK_WINDOW_TYPE_HINT_MENU:
2654-- case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU:
2655-- case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
2656-- case GDK_WINDOW_TYPE_HINT_COMBO:
2657-- mir_type = mir_surface_type_menu;
2658-- break;
2659-- case GDK_WINDOW_TYPE_HINT_TOOLTIP:
2660-- mir_type = mir_surface_type_tip;
2661-- break;
2662-- case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
2663-- case GDK_WINDOW_TYPE_HINT_DND:
2664-- case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
2665-- mir_type = mir_surface_type_overlay;
2666-- break;
2667-- case GDK_WINDOW_TYPE_HINT_TOOLBAR:
2668-- mir_type = mir_surface_type_satellite;
2669-- break;
2670-+ impl->type_hint = hint;
2671-+ ensure_no_surface (window);
2672- }
2673--
2674-- set_surface_type (GDK_MIR_WINDOW_IMPL (window->impl), mir_type);
2675- }
2676-
2677- static GdkWindowTypeHint
2678-@@ -813,29 +747,7 @@ gdk_mir_window_impl_get_type_hint (GdkWindow *window)
2679- {
2680- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2681-
2682-- switch (impl->surface_type)
2683-- {
2684-- case mir_surface_type_normal:
2685-- case mir_surface_type_freestyle:
2686-- case mir_surface_type_inputmethod:
2687-- return GDK_WINDOW_TYPE_HINT_NORMAL;
2688-- case mir_surface_type_utility:
2689-- return GDK_WINDOW_TYPE_HINT_UTILITY;
2690-- case mir_surface_type_dialog:
2691-- return GDK_WINDOW_TYPE_HINT_DIALOG;
2692-- case mir_surface_type_tip:
2693-- return GDK_WINDOW_TYPE_HINT_TOOLTIP;
2694-- case mir_surface_type_menu:
2695-- return GDK_WINDOW_TYPE_HINT_MENU;
2696-- case mir_surface_type_overlay:
2697-- return GDK_WINDOW_TYPE_HINT_NOTIFICATION;
2698-- case mir_surface_type_satellite:
2699-- return GDK_WINDOW_TYPE_HINT_TOOLBAR;
2700-- case mir_surface_types:
2701-- break;
2702-- }
2703--
2704-- return GDK_WINDOW_TYPE_HINT_NORMAL;
2705-+ return impl->type_hint;
2706- }
2707-
2708- void
2709-@@ -911,64 +823,6 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
2710-
2711- /* Link this window to the parent */
2712- impl->transient_for = parent;
2713-- if (should_render_in_parent (window))
2714-- {
2715-- GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl);
2716-- parent_impl->transient_children = g_list_append (parent_impl->transient_children, window);
2717--
2718-- /* Move to where the client requested */
2719-- window->x = impl->transient_x;
2720-- window->y = impl->transient_y;
2721--
2722-- /* Remove surface if we had made one before this was set */
2723-- ensure_no_surface (window);
2724--
2725-- /* Redraw onto parent */
2726-- redraw_transient (window);
2727-- }
2728--}
2729--
2730--/* TODO: Remove once we have proper transient window support. */
2731--GdkWindow *
2732--_gdk_mir_window_get_visible_transient_child (GdkWindow *window,
2733-- gdouble x,
2734-- gdouble y,
2735-- gdouble *out_x,
2736-- gdouble *out_y)
2737--{
2738-- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2739-- GdkWindow *child = NULL;
2740-- GList *i;
2741--
2742-- x -= window->x;
2743-- y -= window->y;
2744--
2745-- if (x < 0 || x >= window->width || y < 0 || y >= window->height)
2746-- return NULL;
2747--
2748-- for (i = impl->transient_children; i && !child; i = i->next)
2749-- {
2750-- if (GDK_MIR_WINDOW_IMPL (GDK_WINDOW (i->data)->impl)->visible)
2751-- child = _gdk_mir_window_get_visible_transient_child (i->data, x, y, out_x, out_y);
2752-- }
2753--
2754-- if (child)
2755-- return child;
2756--
2757-- *out_x = x;
2758-- *out_y = y;
2759--
2760-- return window;
2761--}
2762--
2763--/* TODO: Remove once we have proper transient window support. */
2764--void
2765--_gdk_mir_window_transient_children_foreach (GdkWindow *window,
2766-- void (*func) (GdkWindow *, gpointer),
2767-- gpointer user_data)
2768--{
2769-- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
2770-- g_list_foreach (impl->transient_children, (GFunc) func, user_data);
2771- }
2772-
2773- static void
2774-@@ -1533,7 +1387,8 @@ _gdk_mir_window_get_dummy_egl_surface (GdkWindow *window,
2775- EGLNativeWindowType egl_window;
2776-
2777- display = gdk_window_get_display (window);
2778-- impl->dummy_surface = create_mir_surface (display, 1, 1,
2779-+ impl->dummy_surface = create_mir_surface (display, NULL, 0, 0, 1, 1,
2780-+ GDK_WINDOW_TYPE_HINT_NORMAL,
2781- mir_buffer_usage_hardware);
2782-
2783- egl_display = _gdk_mir_display_get_egl_display (display);
2784---
2785-2.1.4
2786-
2787
2788=== modified file 'debian/patches/series'
2789--- debian/patches/series 2015-06-15 16:56:54 +0000
2790+++ debian/patches/series 2015-07-04 03:42:40 +0000
2791@@ -18,6 +18,5 @@
2792 x-canonical-accel.patch
2793 message-dialog-restore-traditional-look-on-unity.patch
2794 0001-gtk-reftest-Force-icon-theme-to-Adwaita.patch
2795-0001-Stable-mir-patches-from-git-master.patch
2796-0002-Unstable-mir-patches-from-git-wip-mir-unstable.patch
2797 restore_filechooser_typeaheadfind
2798+0001-backport-mir-patches-from-upstream-master.patch

Subscribers

People subscribed via source and target branches

to all changes: