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

Proposed by William Hua
Status: Merged
Merged at revision: 392
Proposed branch: lp:~attente/gtk/refresh-mir-backend
Merge into: lp:~ubuntu-desktop/gtk/ubuntugtk3
Diff against target: 1516 lines (+1041/-130)
4 files modified
debian/changelog (+7/-1)
debian/patches/mir-backend-unmerged.patch (+686/-0)
debian/patches/mir-backend.patch (+347/-129)
debian/patches/series (+1/-0)
To merge this branch: bzr merge lp:~attente/gtk/refresh-mir-backend
Reviewer Review Type Date Requested Status
Ubuntu Desktop Pending
Review via email: mp+244491@code.launchpad.net

Commit message

Refresh mir backend.

Description of the change

Refresh mir backend.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2014-12-11 12:58:39 +0000
+++ debian/changelog 2014-12-13 16:59:39 +0000
@@ -65,7 +65,13 @@
65 - Add back changes from 3.12.2-0ubuntu1465 - Add back changes from 3.12.2-0ubuntu14
66 - Fix touch events not generating GDK events (LP: #1388875)66 - Fix touch events not generating GDK events (LP: #1388875)
6767
68 -- Lars Uebernickel <lars.uebernickel@ubuntu.com> Mon, 20 Oct 2014 13:44:53 -040068 [ William Hua ]
69 * debian/patches/mir-backend.patch:
70 - Backport more mir patches from master
71 * debian/patches/mir-backend-unmerged.patch:
72 - Backport unmerged mir patches from wip/mir2
73
74 -- William Hua <william.hua@canonical.com> Thu, 11 Dec 2014 12:43:44 -0500
6975
70gtk+3.0 (3.14.5-1) unstable; urgency=medium76gtk+3.0 (3.14.5-1) unstable; urgency=medium
7177
7278
=== added file 'debian/patches/mir-backend-unmerged.patch'
--- debian/patches/mir-backend-unmerged.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/mir-backend-unmerged.patch 2014-12-13 16:59:39 +0000
@@ -0,0 +1,686 @@
1From 447c406a112e5dd6cc3b49f17bfa779d24e2ef3a Mon Sep 17 00:00:00 2001
2From: William Hua <william@attente.ca>
3Date: Fri, 28 Nov 2014 08:33:03 -0500
4Subject: [PATCH 2/2] mir: unmerged commits from wip/mir2 branch
5
6Backported from:
7ce596da0d8eee33016bae8bda3d621860b45bccb
8af8cf6945cea6b4257b7ca8b589efc69a8f48129
9d8fc26da795d2b1730291879eac961441764c80a
1013eb820d7f37a7a4b7e9eb00dd897acfbe116c3c
1173002dca915da3834c6ccf4af422f9fb443637de
12c9c85e1d9f87120c2f43764c78263d216fe04585
136db489dc399bfb1fb0fc206d0bd206ac3468c3c7
14731b01de1f18354be1da21eeaf6ed8066b622a74
1592dd2b7cb0a53f9d4480472d1a3756bcfae778c8
16292229fa415133cc6801121eedc460caee287618
17d2a0e3d013d5521f790aaf81cf68ff531adc7e3d
187d3257af05e364a7efa250a692e8e0dd2af6280a
19f060bfbc338d109cc12f143761bf9d8d235171e7
20310faf6c914967c58fa944577cd2238658e9f22a
2162f25bef0f30350faf152b0d885ce01ad341ea70
2252504167c1aeda2b76c24ad701d44a79968f715c
23ada2ed8eca7f3e116a0e171dcbf6c13eda28c9c4
24cc0f748f4d883103b50cfa09acda5c239f1a80d1
2584119c20f297e4d02f4667a3d4d921e785fd77e9
26d4d6d519bc88c79bfca6902f8f9f17a2392ae4ba
27b9890b3d9ee8a8d3cbb31db6d4446910987f63ec
28---
29 gdk/mir/gdkmir-private.h | 9 ++++
30 gdk/mir/gdkmirdisplay.c | 17 +++++--
31 gdk/mir/gdkmireventsource.c | 109 ++++++++++++++++++++++++++++++--------------
32 gdk/mir/gdkmirkeymap.c | 14 ++++++
33 gdk/mir/gdkmirpointer.c | 6 +++
34 gdk/mir/gdkmirscreen.c | 22 ++++-----
35 gdk/mir/gdkmirwindowimpl.c | 86 ++++++++++++++++++++++++++--------
36 7 files changed, 195 insertions(+), 68 deletions(-)
37
38diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
39index 8305096..a5802f7 100644
40--- a/gdk/mir/gdkmir-private.h
41+++ b/gdk/mir/gdkmir-private.h
42@@ -45,6 +45,8 @@ GdkDevice *_gdk_mir_device_manager_get_keyboard (GdkDeviceManager *device_manage
43
44 GdkKeymap *_gdk_mir_keymap_new (void);
45
46+gboolean _gdk_mir_keymap_key_is_modifier (GdkKeymap *keymap, guint keycode);
47+
48 GdkDevice *_gdk_mir_keyboard_new (GdkDeviceManager *device_manager, const gchar *name);
49
50 GdkDevice *_gdk_mir_pointer_new (GdkDeviceManager *device_manager, const gchar *name);
51@@ -89,4 +91,11 @@ void _gdk_mir_print_resize_event (const MirResizeEvent *event);
52
53 void _gdk_mir_print_event (const MirEvent *event);
54
55+/* TODO: Remove once we have proper transient window support. */
56+GdkWindow * _gdk_mir_window_get_visible_transient_child (GdkWindow *window,
57+ gint x,
58+ gint y,
59+ gint *out_x,
60+ gint *out_y);
61+
62 #endif /* __GDK_PRIVATE_MIR_H__ */
63diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
64index 207342c..13793ec 100644
65--- a/gdk/mir/gdkmirdisplay.c
66+++ b/gdk/mir/gdkmirdisplay.c
67@@ -391,9 +391,20 @@ gdk_mir_display_create_window_impl (GdkDisplay *display,
68 g_printerr (" location=(%d, %d)", window->x, window->y);
69 g_printerr (" size=(%d, %d)", window->width, window->height);
70 g_printerr ("\n");
71- if (attributes->wclass != GDK_INPUT_OUTPUT)
72- return;
73- window->impl = _gdk_mir_window_impl_new ();
74+
75+ if (attributes->wclass == GDK_INPUT_OUTPUT)
76+ {
77+ window->impl = _gdk_mir_window_impl_new ();
78+ window->impl_window = window;
79+ }
80+ else /* attributes->wclass == GDK_INPUT_ONLY */
81+ {
82+ window->impl = g_object_ref (real_parent->impl);
83+ window->impl_window = real_parent;
84+
85+ /* FIXME: this is called in gdk_window_new, which sets window->impl_window
86+ * back to window after this function returns. */
87+ }
88 }
89
90 static GdkKeymap *
91diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
92index cfe36e8..18364b0 100644
93--- a/gdk/mir/gdkmireventsource.c
94+++ b/gdk/mir/gdkmireventsource.c
95@@ -22,6 +22,8 @@
96 #include "gdkmir.h"
97 #include "gdkmir-private.h"
98
99+#define NANO_TO_MILLI(x) ((x) / 1000000)
100+
101 struct _GdkMirWindowReference {
102 GdkMirEventSource *source;
103 GdkWindow *window;
104@@ -39,6 +41,7 @@ struct _GdkMirEventSource
105
106 GMutex mir_event_lock;
107 GQueue mir_events;
108+ gboolean log_events;
109
110 GdkDisplay *display;
111 };
112@@ -50,6 +53,7 @@ send_event (GdkWindow *window, GdkDevice *device, GdkEvent *event)
113 GList *node;
114
115 gdk_event_set_device (event, device);
116+ gdk_event_set_source_device (event, device);
117 gdk_event_set_screen (event, gdk_display_get_screen (gdk_window_get_display (window), 0));
118 event->any.window = g_object_ref (window);
119
120@@ -118,7 +122,7 @@ set_key_event_string (GdkEventKey *event)
121 }
122
123 static void
124-generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint keyval, guint16 keycode, gboolean is_modifier)
125+generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint keyval, guint16 keycode, gboolean is_modifier, guint32 event_time)
126 {
127 GdkEvent *event;
128
129@@ -127,6 +131,7 @@ generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint key
130 event->key.keyval = keyval;
131 event->key.hardware_keycode = keycode + 8;
132 event->key.is_modifier = is_modifier;
133+ event->key.time = event_time;
134 set_key_event_string (&event->key);
135
136 send_event (window, _gdk_mir_device_manager_get_keyboard (gdk_display_get_device_manager (gdk_window_get_display (window))), event);
137@@ -139,7 +144,7 @@ get_pointer (GdkWindow *window)
138 }
139
140 static void
141-generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y, guint button, guint state)
142+generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y, guint button, guint state, guint32 event_time)
143 {
144 GdkEvent *event;
145
146@@ -148,12 +153,13 @@ generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble
147 event->button.y = y;
148 event->button.state = state;
149 event->button.button = button;
150+ event->button.time = event_time;
151
152 send_event (window, get_pointer (window), event);
153 }
154
155 static void
156-generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x, gdouble delta_y, guint state)
157+generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x, gdouble delta_y, guint state, guint32 event_time)
158 {
159 GdkEvent *event;
160
161@@ -161,15 +167,28 @@ generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x,
162 event->scroll.x = x;
163 event->scroll.y = y;
164 event->scroll.state = state;
165- event->scroll.direction = GDK_SCROLL_SMOOTH;
166- event->scroll.delta_x = -delta_x;
167- event->scroll.delta_y = -delta_y;
168+ event->scroll.time = event_time;
169+
170+ if (ABS (delta_x) == 1 && delta_y == 0)
171+ {
172+ event->scroll.direction = (delta_x < 0) ? GDK_SCROLL_LEFT : GDK_SCROLL_RIGHT;
173+ }
174+ else if (ABS (delta_y) == 1 && delta_x == 0)
175+ {
176+ event->scroll.direction = (delta_y < 0) ? GDK_SCROLL_DOWN : GDK_SCROLL_UP;
177+ }
178+ else
179+ {
180+ event->scroll.direction = GDK_SCROLL_SMOOTH;
181+ event->scroll.delta_x = -delta_x;
182+ event->scroll.delta_y = -delta_y;
183+ }
184
185 send_event (window, get_pointer (window), event);
186 }
187
188 static void
189-generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state)
190+generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state, guint32 event_time)
191 {
192 GdkEvent *event;
193
194@@ -178,12 +197,13 @@ generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state)
195 event->motion.y = y;
196 event->motion.state = state;
197 event->motion.is_hint = FALSE;
198+ event->motion.time = event_time;
199
200 send_event (window, get_pointer (window), event);
201 }
202
203 static void
204-generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y)
205+generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y, guint32 event_time)
206 {
207 GdkEvent *event;
208
209@@ -193,6 +213,7 @@ generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdoubl
210 event->crossing.mode = GDK_CROSSING_NORMAL;
211 event->crossing.detail = GDK_NOTIFY_ANCESTOR;
212 event->crossing.focus = TRUE;
213+ event->crossing.time = event_time;
214
215 send_event (window, get_pointer (window), event);
216 }
217@@ -239,35 +260,30 @@ get_modifier_state (unsigned int modifiers, unsigned int button_state)
218 return modifier_state;
219 }
220
221-/*
222- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (event_data->window->impl);
223- MirMotionButton changed_button_state;
224- GdkEventType event_type;
225- gdouble x, y;
226- guint modifier_state;
227- gboolean is_modifier = FALSE;
228-*/
229-
230 static void
231 handle_key_event (GdkWindow *window, const MirKeyEvent *event)
232 {
233+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
234+ GdkKeymap *keymap;
235 guint modifier_state;
236- gboolean is_modifier = FALSE;
237-
238- modifier_state = get_modifier_state (event->modifiers, 0); // FIXME: Need to track button state
239+ MirMotionButton button_state;
240
241 switch (event->action)
242 {
243 case mir_key_action_down:
244 case mir_key_action_up:
245 // FIXME: Convert keycode
246- // FIXME: is_modifier
247+ _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, NULL, &button_state);
248+ modifier_state = get_modifier_state (event->modifiers, button_state);
249+ keymap = gdk_keymap_get_for_display (gdk_window_get_display (window));
250+
251 generate_key_event (window,
252 event->action == mir_key_action_down ? GDK_KEY_PRESS : GDK_KEY_RELEASE,
253 modifier_state,
254 event->key_code,
255 event->scan_code,
256- is_modifier);
257+ _gdk_mir_keymap_key_is_modifier (keymap, event->key_code),
258+ NANO_TO_MILLI (event->event_time));
259 break;
260 default:
261 //case mir_key_action_multiple:
262@@ -284,6 +300,7 @@ handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
263 gboolean cursor_inside;
264 MirMotionButton button_state;
265 guint modifier_state;
266+ guint32 event_time;
267 GdkEventType event_type;
268 MirMotionButton changed_button_state;
269
270@@ -294,13 +311,14 @@ handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
271 y = event->pointer_coordinates[0].y;
272 }
273 modifier_state = get_modifier_state (event->modifiers, event->button_state);
274+ event_time = NANO_TO_MILLI (event->event_time);
275
276 /* The Mir events generate hover-exits even while inside the window so
277 counteract this by always generating an enter notify on all other events */
278 if (!cursor_inside && event->action != mir_motion_action_hover_exit)
279 {
280 cursor_inside = TRUE;
281- generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y);
282+ generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y, event_time);
283 }
284
285 /* Update which window has focus */
286@@ -312,23 +330,23 @@ handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
287 event_type = event->action == mir_motion_action_down ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE;
288 changed_button_state = button_state ^ event->button_state;
289 if (changed_button_state == 0 || (changed_button_state & mir_motion_button_primary) != 0)
290- generate_button_event (window, event_type, x, y, GDK_BUTTON_PRIMARY, modifier_state);
291+ generate_button_event (window, event_type, x, y, GDK_BUTTON_PRIMARY, modifier_state, event_time);
292 if ((changed_button_state & mir_motion_button_secondary) != 0)
293- generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state);
294+ generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time);
295 if ((changed_button_state & mir_motion_button_tertiary) != 0)
296- generate_button_event (window, event_type, x, y, GDK_BUTTON_MIDDLE, modifier_state);
297+ generate_button_event (window, event_type, x, y, GDK_BUTTON_MIDDLE, modifier_state, event_time);
298 button_state = event->button_state;
299 break;
300 case mir_motion_action_scroll:
301- generate_scroll_event (window, x, y, event->pointer_coordinates[0].hscroll, event->pointer_coordinates[0].vscroll, modifier_state);
302+ generate_scroll_event (window, x, y, event->pointer_coordinates[0].hscroll, event->pointer_coordinates[0].vscroll, modifier_state, event_time);
303 break;
304 case mir_motion_action_move: // move with button
305 case mir_motion_action_hover_move: // move without button
306- generate_motion_event (window, x, y, modifier_state);
307+ generate_motion_event (window, x, y, modifier_state, event_time);
308 break;
309 case mir_motion_action_hover_exit:
310 cursor_inside = FALSE;
311- generate_crossing_event (window, GDK_LEAVE_NOTIFY, x, y);
312+ generate_crossing_event (window, GDK_LEAVE_NOTIFY, x, y, event_time);
313 break;
314 }
315
316@@ -396,9 +414,6 @@ gdk_mir_event_source_queue_event (GdkDisplay *display,
317 GdkWindow *window,
318 const MirEvent *event)
319 {
320- if (g_getenv ("GDK_MIR_LOG_EVENTS"))
321- _gdk_mir_print_event (event);
322-
323 // FIXME: Only generate events if the window wanted them?
324 switch (event->type)
325 {
326@@ -459,7 +474,34 @@ gdk_mir_event_source_convert_events (GdkMirEventSource *source)
327 * event was being dispatched...
328 */
329 if (window != NULL)
330- gdk_mir_event_source_queue_event (source->display, window, &event->event);
331+ {
332+ /* TODO: Remove once we have proper transient window support. */
333+ if (event->event.type == mir_event_type_motion)
334+ {
335+ GdkWindow *child;
336+ gint x;
337+ gint y;
338+
339+ x = event->event.motion.pointer_coordinates[0].x;
340+ y = event->event.motion.pointer_coordinates[0].y;
341+
342+ child = _gdk_mir_window_get_visible_transient_child (window, x, y, &x, &y);
343+
344+ if (child && child != window)
345+ {
346+ window = child;
347+
348+ event->event.motion.pointer_count = MAX (event->event.motion.pointer_count, 1);
349+ event->event.motion.pointer_coordinates[0].x = x;
350+ event->event.motion.pointer_coordinates[0].y = y;
351+ }
352+ }
353+
354+ if (source->log_events)
355+ _gdk_mir_print_event (&event->event);
356+
357+ gdk_mir_event_source_queue_event (source->display, window, &event->event);
358+ }
359 else
360 g_warning ("window was destroyed before event arrived...");
361
362@@ -554,6 +596,7 @@ _gdk_mir_event_source_new (GdkDisplay *display)
363 source = (GdkMirEventSource *) g_source;
364 g_mutex_init (&source->mir_event_lock);
365 source->display = display;
366+ source->log_events = (g_getenv ("GDK_MIR_LOG_EVENTS") != NULL);
367
368 return source;
369 }
370diff --git a/gdk/mir/gdkmirkeymap.c b/gdk/mir/gdkmirkeymap.c
371index 3e8c829..82f0d2c 100644
372--- a/gdk/mir/gdkmirkeymap.c
373+++ b/gdk/mir/gdkmirkeymap.c
374@@ -31,6 +31,12 @@ typedef struct GdkMirKeymapClass GdkMirKeymapClass;
375 #define GDK_IS_MIR_KEYMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_KEYMAP))
376 #define GDK_MIR_KEYMAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_KEYMAP, GdkMirKeymapClass))
377
378+#define IsModifierKey(keysym) \
379+ (((keysym) >= XKB_KEY_Shift_L && (keysym) <= XKB_KEY_Hyper_R) || \
380+ ((keysym) >= XKB_KEY_ISO_Lock && (keysym) <= XKB_KEY_ISO_Last_Group_Lock) || \
381+ ((keysym) == XKB_KEY_Mode_switch) || \
382+ ((keysym) == XKB_KEY_Num_Lock))
383+
384 struct GdkMirKeymap
385 {
386 GdkKeymap parent_instance;
387@@ -342,6 +348,14 @@ gdk_mir_keymap_get_modifier_state (GdkKeymap *keymap)
388 return get_gdk_modifiers (mir_keymap->xkb_keymap, mods);
389 }
390
391+gboolean
392+_gdk_mir_keymap_key_is_modifier (GdkKeymap *keymap,
393+ guint keycode)
394+{
395+ // FIXME: use xkb_state
396+ return IsModifierKey (keycode);
397+}
398+
399 static void
400 update_direction (GdkMirKeymap *keymap)
401 {
402diff --git a/gdk/mir/gdkmirpointer.c b/gdk/mir/gdkmirpointer.c
403index 96c7e74..3937361 100644
404--- a/gdk/mir/gdkmirpointer.c
405+++ b/gdk/mir/gdkmirpointer.c
406@@ -17,6 +17,7 @@
407
408 #include "config.h"
409
410+#include "gdkdisplayprivate.h"
411 #include "gdkdeviceprivate.h"
412 #include "gdkscreen.h"
413 #include "gdkwindow.h"
414@@ -183,6 +184,11 @@ gdk_mir_pointer_ungrab (GdkDevice *device,
415 {
416 //g_printerr ("gdk_mir_pointer_ungrab\n");
417 /* Mir doesn't do grabs */
418+
419+ GdkDeviceGrabInfo *grab = _gdk_display_get_last_device_grab (gdk_device_get_display (device), device);
420+
421+ if (grab)
422+ grab->serial_end = grab->serial_start;
423 }
424
425 static GdkWindow *
426diff --git a/gdk/mir/gdkmirscreen.c b/gdk/mir/gdkmirscreen.c
427index 2b53cef..e29ddb3 100644
428--- a/gdk/mir/gdkmirscreen.c
429+++ b/gdk/mir/gdkmirscreen.c
430@@ -327,35 +327,31 @@ gdk_mir_screen_get_monitor_plug_name (GdkScreen *screen,
431 switch (output->type)
432 {
433 case mir_display_output_type_unknown:
434- return g_strdup_printf ("UNKNOWN-%u", output->output_id);
435+ return g_strdup_printf ("None-%u", output->output_id);
436 case mir_display_output_type_vga:
437 return g_strdup_printf ("VGA-%u", output->output_id);
438 case mir_display_output_type_dvii:
439- return g_strdup_printf ("DVII-%u", output->output_id);
440 case mir_display_output_type_dvid:
441- return g_strdup_printf ("DVID-%u", output->output_id);
442 case mir_display_output_type_dvia:
443- return g_strdup_printf ("DVIA-%u", output->output_id);
444+ return g_strdup_printf ("DVI-%u", output->output_id);
445 case mir_display_output_type_composite:
446- return g_strdup_printf ("COMPOSITE-%u", output->output_id);
447- case mir_display_output_type_svideo:
448- return g_strdup_printf ("SVIDEO-%u", output->output_id);
449+ return g_strdup_printf ("Composite-%u", output->output_id);
450 case mir_display_output_type_lvds:
451 return g_strdup_printf ("LVDS-%u", output->output_id);
452 case mir_display_output_type_component:
453- return g_strdup_printf ("COMPONENT-%u", output->output_id);
454+ return g_strdup_printf ("CTV-%u", output->output_id);
455 case mir_display_output_type_ninepindin:
456- return g_strdup_printf ("NINEPINDIN-%u", output->output_id);
457+ return g_strdup_printf ("DIN-%u", output->output_id);
458 case mir_display_output_type_displayport:
459- return g_strdup_printf ("DISPLAYPORT-%u", output->output_id);
460+ return g_strdup_printf ("DP-%u", output->output_id);
461 case mir_display_output_type_hdmia:
462- return g_strdup_printf ("HDMIA-%u", output->output_id);
463 case mir_display_output_type_hdmib:
464- return g_strdup_printf ("HDMIB-%u", output->output_id);
465+ return g_strdup_printf ("HDMI-%u", output->output_id);
466+ case mir_display_output_type_svideo:
467 case mir_display_output_type_tv:
468 return g_strdup_printf ("TV-%u", output->output_id);
469 case mir_display_output_type_edp:
470- return g_strdup_printf ("EDP-%u", output->output_id);
471+ return g_strdup_printf ("eDP-%u", output->output_id);
472 }
473 }
474
475diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
476index 418724b..92521c9 100644
477--- a/gdk/mir/gdkmirwindowimpl.c
478+++ b/gdk/mir/gdkmirwindowimpl.c
479@@ -259,13 +259,22 @@ redraw_transient (GdkWindow *window)
480 gdk_window_invalidate_rect (GDK_MIR_WINDOW_IMPL (window->impl)->transient_for, &r, FALSE);
481 }
482
483+/* Remove once we have proper transient window support. */
484+static gboolean
485+should_render_in_parent (GdkWindow *window)
486+{
487+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
488+
489+ return impl->transient_for && gdk_window_get_window_type (window) != GDK_WINDOW_TOPLEVEL;
490+}
491+
492 static void
493 send_buffer (GdkWindow *window)
494 {
495 GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
496
497 /* Transient windows draw onto parent instead */
498- if (impl->transient_for)
499+ if (should_render_in_parent (window))
500 {
501 redraw_transient (window);
502 return;
503@@ -327,7 +336,7 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
504 }
505
506 /* Transient windows get rendered into a buffer and copied onto their parent */
507- if (impl->transient_for)
508+ if (should_render_in_parent (window))
509 {
510 cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, window->width, window->height);
511 }
512@@ -363,13 +372,13 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
513 impl->cairo_surface = cairo_surface_reference (cairo_surface);
514
515 /* Draw background */
516- c = cairo_create (impl->cairo_surface);
517 if (impl->background)
518- cairo_set_source (c, impl->background);
519- else
520- cairo_set_source_rgb (c, 1.0, 0.0, 0.0);
521- cairo_paint (c);
522- cairo_destroy (c);
523+ {
524+ c = cairo_create (impl->cairo_surface);
525+ cairo_set_source (c, impl->background);
526+ cairo_paint (c);
527+ cairo_destroy (c);
528+ }
529
530 return cairo_surface;
531 }
532@@ -433,10 +442,11 @@ gdk_mir_window_impl_hide (GdkWindow *window)
533 //g_printerr ("gdk_mir_window_impl_hide window=%p\n", window);
534 GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
535
536+ impl->cursor_inside = FALSE;
537 impl->visible = FALSE;
538 ensure_no_surface (window);
539
540- if (impl->transient_for)
541+ if (should_render_in_parent (window))
542 redraw_transient (window);
543 }
544
545@@ -446,10 +456,11 @@ gdk_mir_window_impl_withdraw (GdkWindow *window)
546 //g_printerr ("gdk_mir_window_impl_withdraw window=%p\n", window);
547 GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
548
549+ impl->cursor_inside = FALSE;
550 impl->visible = FALSE;
551 ensure_no_surface (window);
552
553- if (impl->transient_for)
554+ if (should_render_in_parent (window))
555 redraw_transient (window);
556 }
557
558@@ -492,6 +503,7 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
559 gint width,
560 gint height)
561 {
562+ /*
563 g_printerr ("gdk_mir_window_impl_move_resize");
564 g_printerr (" window=%p", window);
565 if (with_move)
566@@ -499,16 +511,17 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
567 if (width > 0)
568 g_printerr (" size=%dx%dpx", width, height);
569 g_printerr ("\n");
570+ */
571 GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
572
573 /* Redraw parent where we moved from */
574- if (impl->transient_for)
575+ if (should_render_in_parent (window))
576 redraw_transient (window);
577
578 /* Transient windows can move wherever they want */
579 if (with_move)
580 {
581- if (impl->transient_for)
582+ if (should_render_in_parent (window))
583 {
584 window->x = x;
585 window->y = y;
586@@ -535,7 +548,7 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
587 }
588
589 /* Redraw parent where we moved to */
590- if (impl->transient_for)
591+ if (should_render_in_parent (window))
592 redraw_transient (window);
593 }
594
595@@ -699,7 +712,7 @@ gdk_mir_window_impl_input_shape_combine_region (GdkWindow *window,
596 gint offset_x,
597 gint offset_y)
598 {
599- g_printerr ("gdk_mir_window_impl_input_shape_combine_region window=%p\n", window);
600+ // g_printerr ("gdk_mir_window_impl_input_shape_combine_region window=%p\n", window);
601 }
602
603 static void
604@@ -713,7 +726,7 @@ gdk_mir_window_impl_destroy (GdkWindow *window,
605 impl->visible = FALSE;
606 ensure_no_surface (window);
607
608- if (impl->transient_for)
609+ if (should_render_in_parent (window))
610 {
611 /* Redraw parent */
612 redraw_transient (window);
613@@ -850,7 +863,7 @@ static void
614 gdk_mir_window_impl_set_title (GdkWindow *window,
615 const gchar *title)
616 {
617- g_printerr ("gdk_mir_window_impl_set_title window=%p\n", window);
618+ // g_printerr ("gdk_mir_window_impl_set_title window=%p\n", window);
619 }
620
621 static void
622@@ -881,7 +894,7 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
623
624 /* Link this window to the parent */
625 impl->transient_for = parent;
626- if (parent)
627+ if (should_render_in_parent (window))
628 {
629 GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl);
630 parent_impl->transient_children = g_list_append (parent_impl->transient_children, window);
631@@ -895,7 +908,42 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
632 }
633
634 /* Remove surface if we had made one before this was set */
635- ensure_no_surface (window);
636+ if (should_render_in_parent (window))
637+ ensure_no_surface (window);
638+}
639+
640+/* TODO: Remove once we have proper transient window support. */
641+GdkWindow *
642+_gdk_mir_window_get_visible_transient_child (GdkWindow *window,
643+ gint x,
644+ gint y,
645+ gint *out_x,
646+ gint *out_y)
647+{
648+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
649+ GdkWindow *child = NULL;
650+ GList *i;
651+
652+ if (x < window->x || x >= window->x + window->width ||
653+ y < window->y || y >= window->y + window->height)
654+ return NULL;
655+
656+ x -= window->x;
657+ y -= window->y;
658+
659+ for (i = impl->transient_children; i && !child; i = i->next)
660+ {
661+ if (GDK_MIR_WINDOW_IMPL (GDK_WINDOW (i->data)->impl)->visible)
662+ child = _gdk_mir_window_get_visible_transient_child (i->data, x, y, out_x, out_y);
663+ }
664+
665+ if (child)
666+ return child;
667+
668+ *out_x = x;
669+ *out_y = y;
670+
671+ return window;
672 }
673
674 static void
675@@ -1242,7 +1290,7 @@ gdk_mir_window_impl_set_shadow_width (GdkWindow *window,
676 gint top,
677 gint bottom)
678 {
679- g_printerr ("gdk_mir_window_impl_set_shadow_width window=%p\n", window);
680+ // g_printerr ("gdk_mir_window_impl_set_shadow_width window=%p\n", window);
681 }
682
683 static void
684--
6852.1.3
686
0687
=== modified file 'debian/patches/mir-backend.patch'
--- debian/patches/mir-backend.patch 2014-12-12 10:51:15 +0000
+++ debian/patches/mir-backend.patch 2014-12-13 16:59:39 +0000
@@ -1,13 +1,15 @@
1From 5808594aaff557dfc9ddef82246ddd4ed902a8c5 Mon Sep 17 00:00:00 20011From 122076d4b6f37fa427ea592194f6fe5bacaa9e70 Mon Sep 17 00:00:00 2001
2From: Robert Ancell <robert.ancell@canonical.com>2From: Robert Ancell <robert.ancell@canonical.com>
3Date: Tue, 20 May 2014 10:03:30 +12003Date: Tue, 20 May 2014 10:03:30 +1200
4Subject: [PATCH] Gdk: add an experimental backend for mir4Subject: [PATCH 1/2] Gdk: add an experimental backend for mir
55
6Backported from:6Backported from:
70f26b26f1d93f002ccd5fe6b6fd636172bfbb24b70f26b26f1d93f002ccd5fe6b6fd636172bfbb24b
8887b7356c369e58a959b99d88246df8303e34531
8c41231cc0fdc791a7a69cdd77af51c8162f44aa49c41231cc0fdc791a7a69cdd77af51c8162f44aa4
9053b65a21af312b8b9361367939a221aa7f474a710053b65a21af312b8b9361367939a221aa7f474a7
102fdb266c0d0f038a74decda7440ebbb7bdb02e68112fdb266c0d0f038a74decda7440ebbb7bdb02e68
12063f79b5946198eb5efec0133627a12a75d154a7
11ec729d06491a2a5bb9ba3f287fbc102b5036bc8f13ec729d06491a2a5bb9ba3f287fbc102b5036bc8f
1292c2e99ddac668d729f42bff501f70fb56fbb76c1492c2e99ddac668d729f42bff501f70fb56fbb76c
13c6de20496c4075a0f1daf8be450d8522aaaea82f15c6de20496c4075a0f1daf8be450d8522aaaea82f
@@ -18,32 +20,46 @@
184e4ccb76cd8b5b7dc4342f35fcf64ace30019641204e4ccb76cd8b5b7dc4342f35fcf64ace30019641
19c7e7e350839b19732a2eea7a2151c0c3a76c254421c7e7e350839b19732a2eea7a2151c0c3a76c2544
20c42146d88c324189a3a70189f1a60156697ad9ab22c42146d88c324189a3a70189f1a60156697ad9ab
238bc523ef5915d4ab7ced843929c8e3f1bf754016
24f5c5e9385e960a74ce38bc58a30fa36474d0cd6a
255ff39b207b373754007a99be6286bb7b93ecb49d
26acfc4f891030d7339c221bdb57df9af8994fd6e0
27da8fdab87b4cc96b9614ccb6abb0682def324f30
28e0e46a4f6bf852d5ead8b8c015aa8eaf4e80599e
2960e185e496180dad0be322a970e4aa17be1c8809
30b8925253b66a63594f5d373dc10c564f0d184eb4
21---31---
22 Makefile.am | 6 +-32 Makefile.am | 6 +-
23 configure.ac | 34 +-33 configure.ac | 35 +-
24 docs/reference/gtk/Makefile.am | 1 +34 docs/reference/gtk/Makefile.am | 1 +
25 docs/reference/gtk/building.sgml | 11 +-35 docs/reference/gtk/building.sgml | 11 +-
26 docs/reference/gtk/gtk-docs.sgml | 1 +36 docs/reference/gtk/gtk-docs.sgml | 1 +
27 docs/reference/gtk/mir.xml | 35 +37 docs/reference/gtk/mir.xml | 35 +
28 docs/reference/gtk/running.sgml | 5 +38 docs/reference/gtk/running.sgml | 5 +
29 gdk/Makefile.am | 6 +-39 gdk/Makefile.am | 6 +-
30 gdk/gdkdisplaymanager.c | 7 +40 gdk/broadway/gdkdisplay-broadway.c | 15 -
31 gdk/mir/Makefile.am | 39 ++41 gdk/gdkdisplay.c | 15 +
32 gdk/mir/gdkmir-debug.c | 293 +++++++++42 gdk/gdkdisplaymanager.c | 7 +
33 gdk/mir/gdkmir-private.h | 90 +++43 gdk/mir/Makefile.am | 39 ++
34 gdk/mir/gdkmir.h | 39 ++44 gdk/mir/gdkmir-debug.c | 293 ++++++++
35 gdk/mir/gdkmircursor.c | 177 +++++45 gdk/mir/gdkmir-private.h | 92 +++
36 gdk/mir/gdkmirdevicemanager.c | 120 ++++46 gdk/mir/gdkmir.h | 39 ++
37 gdk/mir/gdkmirdisplay.c | 565 ++++++++++++++++47 gdk/mir/gdkmircursor.c | 177 +++++
38 gdk/mir/gdkmireventsource.c | 630 ++++++++++++++++++48 gdk/mir/gdkmirdevicemanager.c | 120 ++++
39 gdk/mir/gdkmirkeyboard.c | 173 +++++49 gdk/mir/gdkmirdisplay.c | 549 +++++++++++++++
40 gdk/mir/gdkmirkeymap.c | 466 ++++++++++++++50 gdk/mir/gdkmireventsource.c | 631 +++++++++++++++++
41 gdk/mir/gdkmirpointer.c | 250 ++++++++51 gdk/mir/gdkmirkeyboard.c | 173 +++++
42 gdk/mir/gdkmirscreen.c | 801 +++++++++++++++++++++++52 gdk/mir/gdkmirkeymap.c | 466 +++++++++++++
43 gdk/mir/gdkmirwindow.c | 52 ++53 gdk/mir/gdkmirpointer.c | 250 +++++++
44 gdk/mir/gdkmirwindowimpl.c | 1320 ++++++++++++++++++++++++++++++++++++++54 gdk/mir/gdkmirscreen.c | 804 ++++++++++++++++++++++
45 gtk/gtktooltip.c | 16 +55 gdk/mir/gdkmirwindow.c | 52 ++
46 24 files changed, 5130 insertions(+), 7 deletions(-)56 gdk/mir/gdkmirwindowimpl.c | 1336 ++++++++++++++++++++++++++++++++++++
57 gdk/wayland/gdkdisplay-wayland.c | 15 -
58 gdk/win32/gdkdisplay-win32.c | 15 -
59 gdk/x11/gdkdisplay-x11.c | 15 -
60 gtk/gtktooltip.c | 16 +
61 gtk/gtkwindow.c | 9 +
62 30 files changed, 5161 insertions(+), 67 deletions(-)
47 create mode 100644 docs/reference/gtk/mir.xml63 create mode 100644 docs/reference/gtk/mir.xml
48 create mode 100644 gdk/mir/Makefile.am64 create mode 100644 gdk/mir/Makefile.am
49 create mode 100644 gdk/mir/gdkmir-debug.c65 create mode 100644 gdk/mir/gdkmir-debug.c
@@ -60,11 +76,11 @@
60 create mode 100644 gdk/mir/gdkmirwindow.c76 create mode 100644 gdk/mir/gdkmirwindow.c
61 create mode 100644 gdk/mir/gdkmirwindowimpl.c77 create mode 100644 gdk/mir/gdkmirwindowimpl.c
6278
63Index: b/Makefile.am79diff --git a/Makefile.am b/Makefile.am
64===================================================================80index 2cb7769..37bc9ff 100644
65--- a/Makefile.am81--- a/Makefile.am
66+++ b/Makefile.am82+++ b/Makefile.am
67@@ -33,11 +33,11 @@83@@ -33,11 +33,11 @@ MAINTAINERCLEANFILES = \
68 84
69 85
70 ## Copy .pc files to target-specific names86 ## Copy .pc files to target-specific names
@@ -78,7 +94,7 @@
78 rm -f $@ && \94 rm -f $@ && \
79 cp gdk-3.0.pc $@95 cp gdk-3.0.pc $@
80 96
81@@ -59,12 +59,14 @@97@@ -59,12 +59,14 @@ DISTCLEANFILES = \
82 gtk+-quartz-3.0.pc \98 gtk+-quartz-3.0.pc \
83 gtk+-broadway-3.0.pc \99 gtk+-broadway-3.0.pc \
84 gtk+-wayland-3.0.pc \100 gtk+-wayland-3.0.pc \
@@ -93,11 +109,19 @@
93 gail-3.0.pc \109 gail-3.0.pc \
94 config.lt110 config.lt
95 111
96Index: b/configure.ac112diff --git a/configure.ac b/configure.ac
97===================================================================113index cccdae9..43e6245 100644
98--- a/configure.ac114--- a/configure.ac
99+++ b/configure.ac115+++ b/configure.ac
100@@ -329,6 +329,10 @@116@@ -48,6 +48,7 @@ m4_define([cairo_required_version], [1.12.0])
117 m4_define([gdk_pixbuf_required_version], [2.30.0])
118 m4_define([introspection_required_version], [1.39.0])
119 m4_define([wayland_required_version], [1.5.91])
120+m4_define([mirclient_required_version], [0.9.0])
121 GLIB_REQUIRED_VERSION=glib_required_version
122 PANGO_REQUIRED_VERSION=pango_required_version
123 ATK_REQUIRED_VERSION=atk_required_version
124@@ -329,6 +330,10 @@ AC_ARG_ENABLE(wayland-backend,
101 [AS_HELP_STRING([--enable-wayland-backend],125 [AS_HELP_STRING([--enable-wayland-backend],
102 [enable the wayland gdk backend])],126 [enable the wayland gdk backend])],
103 [backend_set=yes])127 [backend_set=yes])
@@ -108,7 +132,7 @@
108 132
109 if test -z "$backend_set"; then133 if test -z "$backend_set"; then
110 if test "$platform_win32" = yes; then134 if test "$platform_win32" = yes; then
111@@ -336,6 +340,7 @@135@@ -336,6 +341,7 @@ if test -z "$backend_set"; then
112 else136 else
113 enable_x11_backend=yes137 enable_x11_backend=yes
114 enable_wayland_backend=maybe138 enable_wayland_backend=maybe
@@ -116,11 +140,11 @@
116 fi140 fi
117 fi141 fi
118 142
119@@ -457,6 +462,30 @@143@@ -457,6 +463,30 @@ else
120 AM_CONDITIONAL(USE_WAYLAND, false)144 AM_CONDITIONAL(USE_WAYLAND, false)
121 fi145 fi
122 146
123+MIR_DEPENDENCIES="mirclient"147+MIR_DEPENDENCIES="mirclient >= mirclient_required_version"
124+if test "$enable_mir_backend" = "maybe" ; then148+if test "$enable_mir_backend" = "maybe" ; then
125+ PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])149+ PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])
126+ AC_MSG_CHECKING([for MIR_DEPENDENCIES])150+ AC_MSG_CHECKING([for MIR_DEPENDENCIES])
@@ -147,7 +171,7 @@
147 # strip leading space171 # strip leading space
148 GDK_BACKENDS=${GDK_BACKENDS#* }172 GDK_BACKENDS=${GDK_BACKENDS#* }
149 173
150@@ -1326,7 +1355,7 @@174@@ -1326,7 +1356,7 @@ CFLAGS="$saved_cflags"
151 LDFLAGS="$saved_ldflags"175 LDFLAGS="$saved_ldflags"
152 176
153 GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"177 GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"
@@ -156,7 +180,7 @@
156 if test "x$enable_x11_backend" = xyes; then180 if test "x$enable_x11_backend" = xyes; then
157 GDK_PRIVATE_PACKAGES="$GDK_PRIVATE_PACKAGES pangoft2"181 GDK_PRIVATE_PACKAGES="$GDK_PRIVATE_PACKAGES pangoft2"
158 fi182 fi
159@@ -1363,7 +1392,7 @@183@@ -1363,7 +1393,7 @@ fi
160 PKG_CHECK_MODULES(ATK, $ATK_PACKAGES)184 PKG_CHECK_MODULES(ATK, $ATK_PACKAGES)
161 185
162 GTK_PACKAGES="atk >= atk_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version gdk-pixbuf-2.0 >= gdk_pixbuf_required_version gio-2.0 >= glib_required_version"186 GTK_PACKAGES="atk >= atk_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version gdk-pixbuf-2.0 >= gdk_pixbuf_required_version gio-2.0 >= glib_required_version"
@@ -165,7 +189,7 @@
165 if test "x$enable_x11_backend" = xyes; then189 if test "x$enable_x11_backend" = xyes; then
166 GTK_PRIVATE_PACKAGES="$GTK_PRIVATE_PACKAGES pangoft2"190 GTK_PRIVATE_PACKAGES="$GTK_PRIVATE_PACKAGES pangoft2"
167 fi191 fi
168@@ -1903,6 +1932,7 @@192@@ -1903,6 +1933,7 @@ gdk/win32/rc/Makefile
169 gdk/win32/rc/gdk.rc193 gdk/win32/rc/gdk.rc
170 gdk/quartz/Makefile194 gdk/quartz/Makefile
171 gdk/wayland/Makefile195 gdk/wayland/Makefile
@@ -173,11 +197,11 @@
173 gdk/gdkversionmacros.h197 gdk/gdkversionmacros.h
174 gtk/Makefile198 gtk/Makefile
175 gtk/makefile.msc199 gtk/makefile.msc
176Index: b/docs/reference/gtk/Makefile.am200diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am
177===================================================================201index 968384c..74ef369 100644
178--- a/docs/reference/gtk/Makefile.am202--- a/docs/reference/gtk/Makefile.am
179+++ b/docs/reference/gtk/Makefile.am203+++ b/docs/reference/gtk/Makefile.am
180@@ -145,6 +145,7 @@204@@ -145,6 +145,7 @@ content_files = \
181 osx.sgml \205 osx.sgml \
182 broadway.xml \206 broadway.xml \
183 wayland.xml \207 wayland.xml \
@@ -185,11 +209,11 @@
185 question_index.sgml \209 question_index.sgml \
186 resources.sgml \210 resources.sgml \
187 text_widget.sgml \211 text_widget.sgml \
188Index: b/docs/reference/gtk/building.sgml212diff --git a/docs/reference/gtk/building.sgml b/docs/reference/gtk/building.sgml
189===================================================================213index b7479e7..445e1fd 100644
190--- a/docs/reference/gtk/building.sgml214--- a/docs/reference/gtk/building.sgml
191+++ b/docs/reference/gtk/building.sgml215+++ b/docs/reference/gtk/building.sgml
192@@ -395,6 +395,11 @@216@@ -395,6 +395,11 @@ How to compile GTK+ itself
193 </group>217 </group>
194 <sbr/>218 <sbr/>
195 <group>219 <group>
@@ -201,7 +225,7 @@
201 <arg choice="plain">--enable-introspection=[no/auto/yes]</arg>225 <arg choice="plain">--enable-introspection=[no/auto/yes]</arg>
202 </group>226 </group>
203 <sbr/>227 <sbr/>
204@@ -595,8 +600,10 @@228@@ -595,8 +600,10 @@ How to compile GTK+ itself
205 <systemitem>--disable-quartz-backend</systemitem>,229 <systemitem>--disable-quartz-backend</systemitem>,
206 <systemitem>--enable-broadway-backend</systemitem>,230 <systemitem>--enable-broadway-backend</systemitem>,
207 <systemitem>--disable-broadway-backend</systemitem>,231 <systemitem>--disable-broadway-backend</systemitem>,
@@ -214,8 +238,8 @@
214 238
215 <para>239 <para>
216 Enables specific backends for GDK. If none of these options240 Enables specific backends for GDK. If none of these options
217Index: b/docs/reference/gtk/gtk-docs.sgml241diff --git a/docs/reference/gtk/gtk-docs.sgml b/docs/reference/gtk/gtk-docs.sgml
218===================================================================242index 2e00bae..8f4a8d1 100644
219--- a/docs/reference/gtk/gtk-docs.sgml243--- a/docs/reference/gtk/gtk-docs.sgml
220+++ b/docs/reference/gtk/gtk-docs.sgml244+++ b/docs/reference/gtk/gtk-docs.sgml
221@@ -413,6 +413,7 @@245@@ -413,6 +413,7 @@
@@ -226,8 +250,9 @@
226 </part>250 </part>
227 251
228 <xi:include href="glossary.xml" />252 <xi:include href="glossary.xml" />
229Index: b/docs/reference/gtk/mir.xml253diff --git a/docs/reference/gtk/mir.xml b/docs/reference/gtk/mir.xml
230===================================================================254new file mode 100644
255index 0000000..3a0a52e
231--- /dev/null256--- /dev/null
232+++ b/docs/reference/gtk/mir.xml257+++ b/docs/reference/gtk/mir.xml
233@@ -0,0 +1,35 @@258@@ -0,0 +1,35 @@
@@ -266,11 +291,11 @@
266+</refsect1>291+</refsect1>
267+292+
268+</refentry>293+</refentry>
269Index: b/docs/reference/gtk/running.sgml294diff --git a/docs/reference/gtk/running.sgml b/docs/reference/gtk/running.sgml
270===================================================================295index 321593a..1aa2291 100644
271--- a/docs/reference/gtk/running.sgml296--- a/docs/reference/gtk/running.sgml
272+++ b/docs/reference/gtk/running.sgml297+++ b/docs/reference/gtk/running.sgml
273@@ -487,6 +487,11 @@298@@ -487,6 +487,11 @@ nevertheless.
274 <listitem><para>Selects the Wayland backend for connecting to Wayland display servers</para></listitem>299 <listitem><para>Selects the Wayland backend for connecting to Wayland display servers</para></listitem>
275 </varlistentry>300 </varlistentry>
276 301
@@ -282,11 +307,11 @@
282 </variablelist>307 </variablelist>
283 Since 3.10, this environment variable can contain a comma-separated list308 Since 3.10, this environment variable can contain a comma-separated list
284 of backend names, which are tried in order. The list may also contain309 of backend names, which are tried in order. The list may also contain
285Index: b/gdk/Makefile.am310diff --git a/gdk/Makefile.am b/gdk/Makefile.am
286===================================================================311index 5f0c1e5..1e24b6e 100644
287--- a/gdk/Makefile.am312--- a/gdk/Makefile.am
288+++ b/gdk/Makefile.am313+++ b/gdk/Makefile.am
289@@ -13,7 +13,7 @@314@@ -13,7 +13,7 @@ INTROSPECTION_COMPILER_ARGS = \
290 315
291 SUBDIRS = $(GDK_BACKENDS) .316 SUBDIRS = $(GDK_BACKENDS) .
292 317
@@ -295,7 +320,7 @@
295 320
296 CLEANFILES =321 CLEANFILES =
297 322
298@@ -201,6 +201,10 @@323@@ -201,6 +201,10 @@ if USE_WAYLAND
299 libgdk_3_la_LIBADD += wayland/libgdk-wayland.la324 libgdk_3_la_LIBADD += wayland/libgdk-wayland.la
300 endif325 endif
301 326
@@ -306,8 +331,74 @@
306 if HAVE_INTROSPECTION331 if HAVE_INTROSPECTION
307 332
308 introspection_files = \333 introspection_files = \
309Index: b/gdk/gdkdisplaymanager.c334diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
310===================================================================335index 53c675d..307728f 100644
336--- a/gdk/broadway/gdkdisplay-broadway.c
337+++ b/gdk/broadway/gdkdisplay-broadway.c
338@@ -330,19 +330,6 @@ gdk_broadway_display_get_next_serial (GdkDisplay *display)
339 return _gdk_broadway_server_get_next_serial (broadway_display->server);
340 }
341
342-static void
343-gdk_broadway_display_event_data_copy (GdkDisplay *display,
344- const GdkEvent *src,
345- GdkEvent *dst)
346-{
347-}
348-
349-static void
350-gdk_broadway_display_event_data_free (GdkDisplay *display,
351- GdkEvent *event)
352-{
353-}
354-
355 void
356 gdk_broadway_display_show_keyboard (GdkBroadwayDisplay *display)
357 {
358@@ -398,8 +385,6 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
359 display_class->after_process_all_updates = _gdk_broadway_display_after_process_all_updates;
360 display_class->get_next_serial = gdk_broadway_display_get_next_serial;
361 display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
362- display_class->event_data_copy = gdk_broadway_display_event_data_copy;
363- display_class->event_data_free = gdk_broadway_display_event_data_free;
364 display_class->create_window_impl = _gdk_broadway_display_create_window_impl;
365 display_class->get_keymap = _gdk_broadway_display_get_keymap;
366 display_class->get_selection_owner = _gdk_broadway_display_get_selection_owner;
367diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
368index 34b6cab..5ccfe01 100644
369--- a/gdk/gdkdisplay.c
370+++ b/gdk/gdkdisplay.c
371@@ -111,6 +111,19 @@ gdk_display_real_opened (GdkDisplay *display)
372 }
373
374 static void
375+gdk_display_real_event_data_copy (GdkDisplay *display,
376+ const GdkEvent *src,
377+ GdkEvent *dst)
378+{
379+}
380+
381+static void
382+gdk_display_real_event_data_free (GdkDisplay *display,
383+ GdkEvent *dst)
384+{
385+}
386+
387+static void
388 gdk_display_class_init (GdkDisplayClass *class)
389 {
390 GObjectClass *object_class = G_OBJECT_CLASS (class);
391@@ -123,6 +136,8 @@ gdk_display_class_init (GdkDisplayClass *class)
392
393 class->opened = gdk_display_real_opened;
394 class->make_default = gdk_display_real_make_default;
395+ class->event_data_copy = gdk_display_real_event_data_copy;
396+ class->event_data_free = gdk_display_real_event_data_free;
397
398 /**
399 * GdkDisplay::opened:
400diff --git a/gdk/gdkdisplaymanager.c b/gdk/gdkdisplaymanager.c
401index c6813d0..c9afbca 100644
311--- a/gdk/gdkdisplaymanager.c402--- a/gdk/gdkdisplaymanager.c
312+++ b/gdk/gdkdisplaymanager.c403+++ b/gdk/gdkdisplaymanager.c
313@@ -60,6 +60,10 @@404@@ -60,6 +60,10 @@
@@ -321,7 +412,7 @@
321 /**412 /**
322 * SECTION:gdkdisplaymanager413 * SECTION:gdkdisplaymanager
323 * @Short_description: Maintains a list of all open GdkDisplays414 * @Short_description: Maintains a list of all open GdkDisplays
324@@ -272,6 +276,9 @@415@@ -272,6 +276,9 @@ static GdkBackend gdk_backends[] = {
325 #ifdef GDK_WINDOWING_WAYLAND416 #ifdef GDK_WINDOWING_WAYLAND
326 { "wayland", _gdk_wayland_display_open },417 { "wayland", _gdk_wayland_display_open },
327 #endif418 #endif
@@ -331,8 +422,9 @@
331 #ifdef GDK_WINDOWING_BROADWAY422 #ifdef GDK_WINDOWING_BROADWAY
332 { "broadway", _gdk_broadway_display_open },423 { "broadway", _gdk_broadway_display_open },
333 #endif424 #endif
334Index: b/gdk/mir/Makefile.am425diff --git a/gdk/mir/Makefile.am b/gdk/mir/Makefile.am
335===================================================================426new file mode 100644
427index 0000000..026ce79
336--- /dev/null428--- /dev/null
337+++ b/gdk/mir/Makefile.am429+++ b/gdk/mir/Makefile.am
338@@ -0,0 +1,39 @@430@@ -0,0 +1,39 @@
@@ -375,8 +467,9 @@
375+ gdkmir.h467+ gdkmir.h
376+468+
377+-include $(top_srcdir)/git.mk469+-include $(top_srcdir)/git.mk
378Index: b/gdk/mir/gdkmir-debug.c470diff --git a/gdk/mir/gdkmir-debug.c b/gdk/mir/gdkmir-debug.c
379===================================================================471new file mode 100644
472index 0000000..ef57eff
380--- /dev/null473--- /dev/null
381+++ b/gdk/mir/gdkmir-debug.c474+++ b/gdk/mir/gdkmir-debug.c
382@@ -0,0 +1,293 @@475@@ -0,0 +1,293 @@
@@ -673,8 +766,9 @@
673+ break;766+ break;
674+ }767+ }
675+}768+}
676Index: b/gdk/mir/gdkmir-private.h769diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
677===================================================================770new file mode 100644
771index 0000000..8305096
678--- /dev/null772--- /dev/null
679+++ b/gdk/mir/gdkmir-private.h773+++ b/gdk/mir/gdkmir-private.h
680@@ -0,0 +1,92 @@774@@ -0,0 +1,92 @@
@@ -770,8 +864,9 @@
770+void _gdk_mir_print_event (const MirEvent *event);864+void _gdk_mir_print_event (const MirEvent *event);
771+865+
772+#endif /* __GDK_PRIVATE_MIR_H__ */866+#endif /* __GDK_PRIVATE_MIR_H__ */
773Index: b/gdk/mir/gdkmir.h867diff --git a/gdk/mir/gdkmir.h b/gdk/mir/gdkmir.h
774===================================================================868new file mode 100644
869index 0000000..00bbda1
775--- /dev/null870--- /dev/null
776+++ b/gdk/mir/gdkmir.h871+++ b/gdk/mir/gdkmir.h
777@@ -0,0 +1,39 @@872@@ -0,0 +1,39 @@
@@ -802,20 +897,21 @@
802+#define GDK_IS_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DISPLAY))897+#define GDK_IS_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DISPLAY))
803+898+
804+#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())899+#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())
805+#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_MIR))900+#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_WINDOW))
806+901+
807+GDK_AVAILABLE_IN_3_10902+GDK_AVAILABLE_IN_3_10
808+GType gdk_mir_display_get_type (void);903+GType gdk_mir_display_get_type (void);
809+904+
810+GDK_AVAILABLE_IN_3_10905+GDK_AVAILABLE_IN_3_10
811+struct MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);906+MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
812+907+
813+GDK_AVAILABLE_IN_3_10908+GDK_AVAILABLE_IN_3_10
814+GType gdk_mir_window_get_type (void);909+GType gdk_mir_window_get_type (void);
815+910+
816+#endif /* __GDK_MIR_H__ */911+#endif /* __GDK_MIR_H__ */
817Index: b/gdk/mir/gdkmircursor.c912diff --git a/gdk/mir/gdkmircursor.c b/gdk/mir/gdkmircursor.c
818===================================================================913new file mode 100644
914index 0000000..7ce158a
819--- /dev/null915--- /dev/null
820+++ b/gdk/mir/gdkmircursor.c916+++ b/gdk/mir/gdkmircursor.c
821@@ -0,0 +1,177 @@917@@ -0,0 +1,177 @@
@@ -996,8 +1092,9 @@
996+ cursor_class->get_surface = gdk_mir_cursor_get_surface;1092+ cursor_class->get_surface = gdk_mir_cursor_get_surface;
997+ object_class->finalize = gdk_mir_cursor_finalize;1093+ object_class->finalize = gdk_mir_cursor_finalize;
998+}1094+}
999Index: b/gdk/mir/gdkmirdevicemanager.c1095diff --git a/gdk/mir/gdkmirdevicemanager.c b/gdk/mir/gdkmirdevicemanager.c
1000===================================================================1096new file mode 100644
1097index 0000000..c94f8a3
1001--- /dev/null1098--- /dev/null
1002+++ b/gdk/mir/gdkmirdevicemanager.c1099+++ b/gdk/mir/gdkmirdevicemanager.c
1003@@ -0,0 +1,120 @@1100@@ -0,0 +1,120 @@
@@ -1121,11 +1218,12 @@
1121+ device_manager_class->get_client_pointer = gdk_mir_device_manager_get_client_pointer;1218+ device_manager_class->get_client_pointer = gdk_mir_device_manager_get_client_pointer;
1122+ object_class->constructed = gdk_mir_device_manager_constructed;1219+ object_class->constructed = gdk_mir_device_manager_constructed;
1123+}1220+}
1124Index: b/gdk/mir/gdkmirdisplay.c1221diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
1125===================================================================1222new file mode 100644
1223index 0000000..207342c
1126--- /dev/null1224--- /dev/null
1127+++ b/gdk/mir/gdkmirdisplay.c1225+++ b/gdk/mir/gdkmirdisplay.c
1128@@ -0,0 +1,565 @@1226@@ -0,0 +1,549 @@
1129+/*1227+/*
1130+ * Copyright © 2014 Canonical Ltd1228+ * Copyright © 2014 Canonical Ltd
1131+ *1229+ *
@@ -1276,8 +1374,9 @@
1276+{1374+{
1277+ GdkMirDisplay *display = GDK_MIR_DISPLAY (object);1375+ GdkMirDisplay *display = GDK_MIR_DISPLAY (object);
1278+1376+
1279+ g_object_unref (display->screen);1377+ g_clear_object (&display->screen);
1280+ display->screen = NULL;1378+ g_clear_object (&display->keymap);
1379+ g_clear_pointer (&display->event_source, g_source_unref);
1281+1380+
1282+ G_OBJECT_CLASS (gdk_mir_display_parent_class)->dispose (object);1381+ G_OBJECT_CLASS (gdk_mir_display_parent_class)->dispose (object);
1283+}1382+}
@@ -1505,21 +1604,6 @@
1505+}1604+}
1506+1605+
1507+static void1606+static void
1508+gdk_mir_display_event_data_copy (GdkDisplay *display,
1509+ const GdkEvent *src,
1510+ GdkEvent *dst)
1511+{
1512+ //g_printerr ("gdk_mir_display_event_data_copy\n");
1513+}
1514+
1515+static void
1516+gdk_mir_display_event_data_free (GdkDisplay *display,
1517+ GdkEvent *event)
1518+{
1519+ //g_printerr ("gdk_mir_display_event_data_free\n");
1520+}
1521+
1522+static void
1523+gdk_mir_display_create_window_impl (GdkDisplay *display,1607+gdk_mir_display_create_window_impl (GdkDisplay *display,
1524+ GdkWindow *window,1608+ GdkWindow *window,
1525+ GdkWindow *real_parent,1609+ GdkWindow *real_parent,
@@ -1677,8 +1761,6 @@
1677+ display_class->after_process_all_updates = gdk_mir_display_after_process_all_updates;1761+ display_class->after_process_all_updates = gdk_mir_display_after_process_all_updates;
1678+ display_class->get_next_serial = gdk_mir_display_get_next_serial;1762+ display_class->get_next_serial = gdk_mir_display_get_next_serial;
1679+ display_class->notify_startup_complete = gdk_mir_display_notify_startup_complete;1763+ display_class->notify_startup_complete = gdk_mir_display_notify_startup_complete;
1680+ display_class->event_data_copy = gdk_mir_display_event_data_copy;
1681+ display_class->event_data_free = gdk_mir_display_event_data_free;
1682+ display_class->create_window_impl = gdk_mir_display_create_window_impl;1764+ display_class->create_window_impl = gdk_mir_display_create_window_impl;
1683+ display_class->get_keymap = gdk_mir_display_get_keymap;1765+ display_class->get_keymap = gdk_mir_display_get_keymap;
1684+ display_class->push_error_trap = gdk_mir_display_push_error_trap;1766+ display_class->push_error_trap = gdk_mir_display_push_error_trap;
@@ -1691,8 +1773,9 @@
1691+ display_class->text_property_to_utf8_list = gdk_mir_display_text_property_to_utf8_list;1773+ display_class->text_property_to_utf8_list = gdk_mir_display_text_property_to_utf8_list;
1692+ display_class->utf8_to_string_target = gdk_mir_display_utf8_to_string_target;1774+ display_class->utf8_to_string_target = gdk_mir_display_utf8_to_string_target;
1693+}1775+}
1694Index: b/gdk/mir/gdkmireventsource.c1776diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
1695===================================================================1777new file mode 100644
1778index 0000000..cfe36e8
1696--- /dev/null1779--- /dev/null
1697+++ b/gdk/mir/gdkmireventsource.c1780+++ b/gdk/mir/gdkmireventsource.c
1698@@ -0,0 +1,631 @@1781@@ -0,0 +1,631 @@
@@ -1860,8 +1943,8 @@
1860+ event->scroll.y = y;1943+ event->scroll.y = y;
1861+ event->scroll.state = state;1944+ event->scroll.state = state;
1862+ event->scroll.direction = GDK_SCROLL_SMOOTH;1945+ event->scroll.direction = GDK_SCROLL_SMOOTH;
1863+ event->scroll.delta_x = delta_x;1946+ event->scroll.delta_x = -delta_x;
1864+ event->scroll.delta_y = delta_y;1947+ event->scroll.delta_y = -delta_y;
1865+1948+
1866+ send_event (window, get_pointer (window), event);1949+ send_event (window, get_pointer (window), event);
1867+}1950+}
@@ -2327,8 +2410,9 @@
2327+2410+
2328+ g_main_context_wakeup (NULL);2411+ g_main_context_wakeup (NULL);
2329+}2412+}
2330Index: b/gdk/mir/gdkmirkeyboard.c2413diff --git a/gdk/mir/gdkmirkeyboard.c b/gdk/mir/gdkmirkeyboard.c
2331===================================================================2414new file mode 100644
2415index 0000000..86c0d9f
2332--- /dev/null2416--- /dev/null
2333+++ b/gdk/mir/gdkmirkeyboard.c2417+++ b/gdk/mir/gdkmirkeyboard.c
2334@@ -0,0 +1,173 @@2418@@ -0,0 +1,173 @@
@@ -2505,8 +2589,9 @@
2505+ device_class->window_at_position = gdk_mir_keyboard_window_at_position;2589+ device_class->window_at_position = gdk_mir_keyboard_window_at_position;
2506+ device_class->select_window_events = gdk_mir_keyboard_select_window_events;2590+ device_class->select_window_events = gdk_mir_keyboard_select_window_events;
2507+}2591+}
2508Index: b/gdk/mir/gdkmirkeymap.c2592diff --git a/gdk/mir/gdkmirkeymap.c b/gdk/mir/gdkmirkeymap.c
2509===================================================================2593new file mode 100644
2594index 0000000..3e8c829
2510--- /dev/null2595--- /dev/null
2511+++ b/gdk/mir/gdkmirkeymap.c2596+++ b/gdk/mir/gdkmirkeymap.c
2512@@ -0,0 +1,466 @@2597@@ -0,0 +1,466 @@
@@ -2976,8 +3061,9 @@
2976+ keymap_class->map_virtual_modifiers = gdk_mir_keymap_map_virtual_modifiers;3061+ keymap_class->map_virtual_modifiers = gdk_mir_keymap_map_virtual_modifiers;
2977+ keymap_class->get_modifier_state = gdk_mir_keymap_get_modifier_state;3062+ keymap_class->get_modifier_state = gdk_mir_keymap_get_modifier_state;
2978+}3063+}
2979Index: b/gdk/mir/gdkmirpointer.c3064diff --git a/gdk/mir/gdkmirpointer.c b/gdk/mir/gdkmirpointer.c
2980===================================================================3065new file mode 100644
3066index 0000000..96c7e74
2981--- /dev/null3067--- /dev/null
2982+++ b/gdk/mir/gdkmirpointer.c3068+++ b/gdk/mir/gdkmirpointer.c
2983@@ -0,0 +1,250 @@3069@@ -0,0 +1,250 @@
@@ -3231,8 +3317,9 @@
3231+ device_class->window_at_position = gdk_mir_pointer_window_at_position;3317+ device_class->window_at_position = gdk_mir_pointer_window_at_position;
3232+ device_class->select_window_events = gdk_mir_pointer_select_window_events;3318+ device_class->select_window_events = gdk_mir_pointer_select_window_events;
3233+}3319+}
3234Index: b/gdk/mir/gdkmirscreen.c3320diff --git a/gdk/mir/gdkmirscreen.c b/gdk/mir/gdkmirscreen.c
3235===================================================================3321new file mode 100644
3322index 0000000..2b53cef
3236--- /dev/null3323--- /dev/null
3237+++ b/gdk/mir/gdkmirscreen.c3324+++ b/gdk/mir/gdkmirscreen.c
3238@@ -0,0 +1,804 @@3325@@ -0,0 +1,804 @@
@@ -4040,8 +4127,9 @@
4040+ screen_class->query_visual_types = gdk_mir_screen_query_visual_types;4127+ screen_class->query_visual_types = gdk_mir_screen_query_visual_types;
4041+ screen_class->get_monitor_scale_factor = gdk_mir_screen_get_monitor_scale_factor;4128+ screen_class->get_monitor_scale_factor = gdk_mir_screen_get_monitor_scale_factor;
4042+}4129+}
4043Index: b/gdk/mir/gdkmirwindow.c4130diff --git a/gdk/mir/gdkmirwindow.c b/gdk/mir/gdkmirwindow.c
4044===================================================================4131new file mode 100644
4132index 0000000..03da7e0
4045--- /dev/null4133--- /dev/null
4046+++ b/gdk/mir/gdkmirwindow.c4134+++ b/gdk/mir/gdkmirwindow.c
4047@@ -0,0 +1,52 @@4135@@ -0,0 +1,52 @@
@@ -4097,8 +4185,9 @@
4097+gdk_mir_window_class_init (GdkMirWindowClass *klass)4185+gdk_mir_window_class_init (GdkMirWindowClass *klass)
4098+{4186+{
4099+}4187+}
4100Index: b/gdk/mir/gdkmirwindowimpl.c4188diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
4101===================================================================4189new file mode 100644
4190index 0000000..418724b
4102--- /dev/null4191--- /dev/null
4103+++ b/gdk/mir/gdkmirwindowimpl.c4192+++ b/gdk/mir/gdkmirwindowimpl.c
4104@@ -0,0 +1,1336 @@4193@@ -0,0 +1,1336 @@
@@ -5438,8 +5527,107 @@
5438+ impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region;5527+ impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region;
5439+ impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width;5528+ impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width;
5440+}5529+}
5441Index: b/gtk/gtktooltip.c5530diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
5442===================================================================5531index 5438a51..82c6ee1 100644
5532--- a/gdk/wayland/gdkdisplay-wayland.c
5533+++ b/gdk/wayland/gdkdisplay-wayland.c
5534@@ -431,19 +431,6 @@ gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
5535 {
5536 }
5537
5538-static void
5539-gdk_wayland_display_event_data_copy (GdkDisplay *display,
5540- const GdkEvent *src,
5541- GdkEvent *dst)
5542-{
5543-}
5544-
5545-static void
5546-gdk_wayland_display_event_data_free (GdkDisplay *display,
5547- GdkEvent *event)
5548-{
5549-}
5550-
5551 static GdkKeymap *
5552 _gdk_wayland_display_get_keymap (GdkDisplay *display)
5553 {
5554@@ -534,8 +521,6 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass * class)
5555 display_class->after_process_all_updates = gdk_wayland_display_after_process_all_updates;
5556 display_class->get_next_serial = gdk_wayland_display_get_next_serial;
5557 display_class->notify_startup_complete = gdk_wayland_display_notify_startup_complete;
5558- display_class->event_data_copy = gdk_wayland_display_event_data_copy;
5559- display_class->event_data_free = gdk_wayland_display_event_data_free;
5560 display_class->create_window_impl = _gdk_wayland_display_create_window_impl;
5561 display_class->get_keymap = _gdk_wayland_display_get_keymap;
5562 display_class->push_error_trap = gdk_wayland_display_push_error_trap;
5563diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c
5564index 2d73c30..97d0e3e 100644
5565--- a/gdk/win32/gdkdisplay-win32.c
5566+++ b/gdk/win32/gdkdisplay-win32.c
5567@@ -600,19 +600,6 @@ gdk_win32_display_notify_startup_complete (GdkDisplay *display,
5568 /* nothing */
5569 }
5570 static void
5571-gdk_win32_display_event_data_copy (GdkDisplay *display,
5572- const GdkEvent *src,
5573- GdkEvent *dst)
5574-{
5575- /* nothing */
5576-}
5577-static void
5578-gdk_win32_display_event_data_free (GdkDisplay *display,
5579- GdkEvent *event)
5580-{
5581- /* nothing */
5582-}
5583-static void
5584 gdk_win32_display_push_error_trap (GdkDisplay *display)
5585 {
5586 /* nothing */
5587@@ -665,8 +652,6 @@ gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
5588 display_class->after_process_all_updates = gdk_win32_display_after_process_all_updates;
5589 display_class->get_next_serial = gdk_win32_display_get_next_serial;
5590 display_class->notify_startup_complete = gdk_win32_display_notify_startup_complete;
5591- display_class->event_data_copy = gdk_win32_display_event_data_copy;
5592- display_class->event_data_free = gdk_win32_display_event_data_free;
5593 display_class->create_window_impl = _gdk_win32_display_create_window_impl;
5594
5595 display_class->get_keymap = _gdk_win32_display_get_keymap;
5596diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
5597index 1db4742..ca9eb33 100644
5598--- a/gdk/x11/gdkdisplay-x11.c
5599+++ b/gdk/x11/gdkdisplay-x11.c
5600@@ -2805,19 +2805,6 @@ gdk_x11_set_sm_client_id (const gchar *sm_client_id)
5601 g_slist_free (displays);
5602 }
5603
5604-static void
5605-gdk_x11_display_event_data_copy (GdkDisplay *display,
5606- const GdkEvent *src,
5607- GdkEvent *dst)
5608-{
5609-}
5610-
5611-static void
5612-gdk_x11_display_event_data_free (GdkDisplay *display,
5613- GdkEvent *event)
5614-{
5615-}
5616-
5617 static gint
5618 pop_error_trap (GdkDisplay *display,
5619 gboolean ignored)
5620@@ -2889,8 +2876,6 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
5621 display_class->after_process_all_updates = _gdk_x11_display_after_process_all_updates;
5622 display_class->get_next_serial = gdk_x11_display_get_next_serial;
5623 display_class->notify_startup_complete = gdk_x11_display_notify_startup_complete;
5624- display_class->event_data_copy = gdk_x11_display_event_data_copy;
5625- display_class->event_data_free = gdk_x11_display_event_data_free;
5626 display_class->create_window_impl = _gdk_x11_display_create_window_impl;
5627 display_class->get_keymap = gdk_x11_display_get_keymap;
5628 display_class->push_error_trap = gdk_x11_display_error_trap_push;
5629diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
5630index 103944f..cedddaa 100644
5443--- a/gtk/gtktooltip.c5631--- a/gtk/gtktooltip.c
5444+++ b/gtk/gtktooltip.c5632+++ b/gtk/gtktooltip.c
5445@@ -39,6 +39,9 @@5633@@ -39,6 +39,9 @@
@@ -5452,23 +5640,53 @@
5452 5640
5453 5641
5454 /**5642 /**
5455@@ -1162,6 +1165,19 @@5643@@ -1168,6 +1171,19 @@ found:
5456 {5644 GTK_WINDOW (toplevel));
5457 GtkWidget *toplevel;5645 }
5458 5646 #endif
5647+#ifdef GDK_WINDOWING_MIR
5648+ /* Set the transient parent on the tooltip when running with the Mir
5649+ * backend to allow correct positioning of the tooltip windows */
5650+ if (GDK_IS_MIR_DISPLAY (display))
5651+ {
5652+ GtkWidget *toplevel;
5653+
5459+ toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);5654+ toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
5460+ if (GTK_IS_WINDOW (toplevel))5655+ if (GTK_IS_WINDOW (toplevel))
5461+ gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),5656+ gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),
5462+ GTK_WINDOW (toplevel));5657+ GTK_WINDOW (toplevel));
5463+ }5658+ }
5464+#endif5659+#endif
5465+#ifdef GDK_WINDOWING_MIR5660
5466+ /* Set the transient parent on the tooltip when running with the Mir5661 x -= border.left;
5467+ * backend to allow correct positioning of the tooltip windows */5662 y -= border.top;
5468+ if (GDK_IS_MIR_DISPLAY (display))5663diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
5469+ {5664index e846c41..be5ae38 100644
5470+ GtkWidget *toplevel;5665--- a/gtk/gtkwindow.c
5471+5666+++ b/gtk/gtkwindow.c
5472 toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);5667@@ -79,6 +79,10 @@
5473 if (GTK_IS_WINDOW (toplevel))5668 #include "broadway/gdkbroadway.h"
5474 gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),5669 #endif
5670
5671+#ifdef GDK_WINDOWING_MIR
5672+#include "mir/gdkmir.h"
5673+#endif
5674+
5675 /**
5676 * SECTION:gtkwindow
5677 * @title: GtkWindow
5678@@ -5683,6 +5687,11 @@ gtk_window_should_use_csd (GtkWindow *window)
5679 return TRUE;
5680 #endif
5681
5682+#ifdef GDK_WINDOWING_MIR
5683+ if (GDK_IS_MIR_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
5684+ return TRUE;
5685+#endif
5686+
5687 csd_env = g_getenv ("GTK_CSD");
5688
5689 return (g_strcmp0 (csd_env, "1") == 0);
5690--
56912.1.3
5692
54755693
=== modified file 'debian/patches/series'
--- debian/patches/series 2014-12-11 09:57:23 +0000
+++ debian/patches/series 2014-12-13 16:59:39 +0000
@@ -19,5 +19,6 @@
19x-canonical-accel.patch19x-canonical-accel.patch
20message-dialog-restore-traditional-look-on-unity.patch20message-dialog-restore-traditional-look-on-unity.patch
21mir-backend.patch21mir-backend.patch
22mir-backend-unmerged.patch
220001-gtkmodelmenuitem-force-icon-scaling.patch230001-gtkmodelmenuitem-force-icon-scaling.patch
230002-gtkimagemenuitem-force-icon-scaling.patch240002-gtkimagemenuitem-force-icon-scaling.patch

Subscribers

People subscribed via source and target branches

to all changes: