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
1=== modified file 'debian/changelog'
2--- debian/changelog 2014-12-11 12:58:39 +0000
3+++ debian/changelog 2014-12-13 16:59:39 +0000
4@@ -65,7 +65,13 @@
5 - Add back changes from 3.12.2-0ubuntu14
6 - Fix touch events not generating GDK events (LP: #1388875)
7
8- -- Lars Uebernickel <lars.uebernickel@ubuntu.com> Mon, 20 Oct 2014 13:44:53 -0400
9+ [ William Hua ]
10+ * debian/patches/mir-backend.patch:
11+ - Backport more mir patches from master
12+ * debian/patches/mir-backend-unmerged.patch:
13+ - Backport unmerged mir patches from wip/mir2
14+
15+ -- William Hua <william.hua@canonical.com> Thu, 11 Dec 2014 12:43:44 -0500
16
17 gtk+3.0 (3.14.5-1) unstable; urgency=medium
18
19
20=== added file 'debian/patches/mir-backend-unmerged.patch'
21--- debian/patches/mir-backend-unmerged.patch 1970-01-01 00:00:00 +0000
22+++ debian/patches/mir-backend-unmerged.patch 2014-12-13 16:59:39 +0000
23@@ -0,0 +1,686 @@
24+From 447c406a112e5dd6cc3b49f17bfa779d24e2ef3a Mon Sep 17 00:00:00 2001
25+From: William Hua <william@attente.ca>
26+Date: Fri, 28 Nov 2014 08:33:03 -0500
27+Subject: [PATCH 2/2] mir: unmerged commits from wip/mir2 branch
28+
29+Backported from:
30+ce596da0d8eee33016bae8bda3d621860b45bccb
31+af8cf6945cea6b4257b7ca8b589efc69a8f48129
32+d8fc26da795d2b1730291879eac961441764c80a
33+13eb820d7f37a7a4b7e9eb00dd897acfbe116c3c
34+73002dca915da3834c6ccf4af422f9fb443637de
35+c9c85e1d9f87120c2f43764c78263d216fe04585
36+6db489dc399bfb1fb0fc206d0bd206ac3468c3c7
37+731b01de1f18354be1da21eeaf6ed8066b622a74
38+92dd2b7cb0a53f9d4480472d1a3756bcfae778c8
39+292229fa415133cc6801121eedc460caee287618
40+d2a0e3d013d5521f790aaf81cf68ff531adc7e3d
41+7d3257af05e364a7efa250a692e8e0dd2af6280a
42+f060bfbc338d109cc12f143761bf9d8d235171e7
43+310faf6c914967c58fa944577cd2238658e9f22a
44+62f25bef0f30350faf152b0d885ce01ad341ea70
45+52504167c1aeda2b76c24ad701d44a79968f715c
46+ada2ed8eca7f3e116a0e171dcbf6c13eda28c9c4
47+cc0f748f4d883103b50cfa09acda5c239f1a80d1
48+84119c20f297e4d02f4667a3d4d921e785fd77e9
49+d4d6d519bc88c79bfca6902f8f9f17a2392ae4ba
50+b9890b3d9ee8a8d3cbb31db6d4446910987f63ec
51+---
52+ gdk/mir/gdkmir-private.h | 9 ++++
53+ gdk/mir/gdkmirdisplay.c | 17 +++++--
54+ gdk/mir/gdkmireventsource.c | 109 ++++++++++++++++++++++++++++++--------------
55+ gdk/mir/gdkmirkeymap.c | 14 ++++++
56+ gdk/mir/gdkmirpointer.c | 6 +++
57+ gdk/mir/gdkmirscreen.c | 22 ++++-----
58+ gdk/mir/gdkmirwindowimpl.c | 86 ++++++++++++++++++++++++++--------
59+ 7 files changed, 195 insertions(+), 68 deletions(-)
60+
61+diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
62+index 8305096..a5802f7 100644
63+--- a/gdk/mir/gdkmir-private.h
64++++ b/gdk/mir/gdkmir-private.h
65+@@ -45,6 +45,8 @@ GdkDevice *_gdk_mir_device_manager_get_keyboard (GdkDeviceManager *device_manage
66+
67+ GdkKeymap *_gdk_mir_keymap_new (void);
68+
69++gboolean _gdk_mir_keymap_key_is_modifier (GdkKeymap *keymap, guint keycode);
70++
71+ GdkDevice *_gdk_mir_keyboard_new (GdkDeviceManager *device_manager, const gchar *name);
72+
73+ GdkDevice *_gdk_mir_pointer_new (GdkDeviceManager *device_manager, const gchar *name);
74+@@ -89,4 +91,11 @@ void _gdk_mir_print_resize_event (const MirResizeEvent *event);
75+
76+ void _gdk_mir_print_event (const MirEvent *event);
77+
78++/* TODO: Remove once we have proper transient window support. */
79++GdkWindow * _gdk_mir_window_get_visible_transient_child (GdkWindow *window,
80++ gint x,
81++ gint y,
82++ gint *out_x,
83++ gint *out_y);
84++
85+ #endif /* __GDK_PRIVATE_MIR_H__ */
86+diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
87+index 207342c..13793ec 100644
88+--- a/gdk/mir/gdkmirdisplay.c
89++++ b/gdk/mir/gdkmirdisplay.c
90+@@ -391,9 +391,20 @@ gdk_mir_display_create_window_impl (GdkDisplay *display,
91+ g_printerr (" location=(%d, %d)", window->x, window->y);
92+ g_printerr (" size=(%d, %d)", window->width, window->height);
93+ g_printerr ("\n");
94+- if (attributes->wclass != GDK_INPUT_OUTPUT)
95+- return;
96+- window->impl = _gdk_mir_window_impl_new ();
97++
98++ if (attributes->wclass == GDK_INPUT_OUTPUT)
99++ {
100++ window->impl = _gdk_mir_window_impl_new ();
101++ window->impl_window = window;
102++ }
103++ else /* attributes->wclass == GDK_INPUT_ONLY */
104++ {
105++ window->impl = g_object_ref (real_parent->impl);
106++ window->impl_window = real_parent;
107++
108++ /* FIXME: this is called in gdk_window_new, which sets window->impl_window
109++ * back to window after this function returns. */
110++ }
111+ }
112+
113+ static GdkKeymap *
114+diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
115+index cfe36e8..18364b0 100644
116+--- a/gdk/mir/gdkmireventsource.c
117++++ b/gdk/mir/gdkmireventsource.c
118+@@ -22,6 +22,8 @@
119+ #include "gdkmir.h"
120+ #include "gdkmir-private.h"
121+
122++#define NANO_TO_MILLI(x) ((x) / 1000000)
123++
124+ struct _GdkMirWindowReference {
125+ GdkMirEventSource *source;
126+ GdkWindow *window;
127+@@ -39,6 +41,7 @@ struct _GdkMirEventSource
128+
129+ GMutex mir_event_lock;
130+ GQueue mir_events;
131++ gboolean log_events;
132+
133+ GdkDisplay *display;
134+ };
135+@@ -50,6 +53,7 @@ send_event (GdkWindow *window, GdkDevice *device, GdkEvent *event)
136+ GList *node;
137+
138+ gdk_event_set_device (event, device);
139++ gdk_event_set_source_device (event, device);
140+ gdk_event_set_screen (event, gdk_display_get_screen (gdk_window_get_display (window), 0));
141+ event->any.window = g_object_ref (window);
142+
143+@@ -118,7 +122,7 @@ set_key_event_string (GdkEventKey *event)
144+ }
145+
146+ static void
147+-generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint keyval, guint16 keycode, gboolean is_modifier)
148++generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint keyval, guint16 keycode, gboolean is_modifier, guint32 event_time)
149+ {
150+ GdkEvent *event;
151+
152+@@ -127,6 +131,7 @@ generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint key
153+ event->key.keyval = keyval;
154+ event->key.hardware_keycode = keycode + 8;
155+ event->key.is_modifier = is_modifier;
156++ event->key.time = event_time;
157+ set_key_event_string (&event->key);
158+
159+ send_event (window, _gdk_mir_device_manager_get_keyboard (gdk_display_get_device_manager (gdk_window_get_display (window))), event);
160+@@ -139,7 +144,7 @@ get_pointer (GdkWindow *window)
161+ }
162+
163+ static void
164+-generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y, guint button, guint state)
165++generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y, guint button, guint state, guint32 event_time)
166+ {
167+ GdkEvent *event;
168+
169+@@ -148,12 +153,13 @@ generate_button_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble
170+ event->button.y = y;
171+ event->button.state = state;
172+ event->button.button = button;
173++ event->button.time = event_time;
174+
175+ send_event (window, get_pointer (window), event);
176+ }
177+
178+ static void
179+-generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x, gdouble delta_y, guint state)
180++generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x, gdouble delta_y, guint state, guint32 event_time)
181+ {
182+ GdkEvent *event;
183+
184+@@ -161,15 +167,28 @@ generate_scroll_event (GdkWindow *window, gdouble x, gdouble y, gdouble delta_x,
185+ event->scroll.x = x;
186+ event->scroll.y = y;
187+ event->scroll.state = state;
188+- event->scroll.direction = GDK_SCROLL_SMOOTH;
189+- event->scroll.delta_x = -delta_x;
190+- event->scroll.delta_y = -delta_y;
191++ event->scroll.time = event_time;
192++
193++ if (ABS (delta_x) == 1 && delta_y == 0)
194++ {
195++ event->scroll.direction = (delta_x < 0) ? GDK_SCROLL_LEFT : GDK_SCROLL_RIGHT;
196++ }
197++ else if (ABS (delta_y) == 1 && delta_x == 0)
198++ {
199++ event->scroll.direction = (delta_y < 0) ? GDK_SCROLL_DOWN : GDK_SCROLL_UP;
200++ }
201++ else
202++ {
203++ event->scroll.direction = GDK_SCROLL_SMOOTH;
204++ event->scroll.delta_x = -delta_x;
205++ event->scroll.delta_y = -delta_y;
206++ }
207+
208+ send_event (window, get_pointer (window), event);
209+ }
210+
211+ static void
212+-generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state)
213++generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state, guint32 event_time)
214+ {
215+ GdkEvent *event;
216+
217+@@ -178,12 +197,13 @@ generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state)
218+ event->motion.y = y;
219+ event->motion.state = state;
220+ event->motion.is_hint = FALSE;
221++ event->motion.time = event_time;
222+
223+ send_event (window, get_pointer (window), event);
224+ }
225+
226+ static void
227+-generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y)
228++generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y, guint32 event_time)
229+ {
230+ GdkEvent *event;
231+
232+@@ -193,6 +213,7 @@ generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdoubl
233+ event->crossing.mode = GDK_CROSSING_NORMAL;
234+ event->crossing.detail = GDK_NOTIFY_ANCESTOR;
235+ event->crossing.focus = TRUE;
236++ event->crossing.time = event_time;
237+
238+ send_event (window, get_pointer (window), event);
239+ }
240+@@ -239,35 +260,30 @@ get_modifier_state (unsigned int modifiers, unsigned int button_state)
241+ return modifier_state;
242+ }
243+
244+-/*
245+- GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (event_data->window->impl);
246+- MirMotionButton changed_button_state;
247+- GdkEventType event_type;
248+- gdouble x, y;
249+- guint modifier_state;
250+- gboolean is_modifier = FALSE;
251+-*/
252+-
253+ static void
254+ handle_key_event (GdkWindow *window, const MirKeyEvent *event)
255+ {
256++ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
257++ GdkKeymap *keymap;
258+ guint modifier_state;
259+- gboolean is_modifier = FALSE;
260+-
261+- modifier_state = get_modifier_state (event->modifiers, 0); // FIXME: Need to track button state
262++ MirMotionButton button_state;
263+
264+ switch (event->action)
265+ {
266+ case mir_key_action_down:
267+ case mir_key_action_up:
268+ // FIXME: Convert keycode
269+- // FIXME: is_modifier
270++ _gdk_mir_window_impl_get_cursor_state (impl, NULL, NULL, NULL, &button_state);
271++ modifier_state = get_modifier_state (event->modifiers, button_state);
272++ keymap = gdk_keymap_get_for_display (gdk_window_get_display (window));
273++
274+ generate_key_event (window,
275+ event->action == mir_key_action_down ? GDK_KEY_PRESS : GDK_KEY_RELEASE,
276+ modifier_state,
277+ event->key_code,
278+ event->scan_code,
279+- is_modifier);
280++ _gdk_mir_keymap_key_is_modifier (keymap, event->key_code),
281++ NANO_TO_MILLI (event->event_time));
282+ break;
283+ default:
284+ //case mir_key_action_multiple:
285+@@ -284,6 +300,7 @@ handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
286+ gboolean cursor_inside;
287+ MirMotionButton button_state;
288+ guint modifier_state;
289++ guint32 event_time;
290+ GdkEventType event_type;
291+ MirMotionButton changed_button_state;
292+
293+@@ -294,13 +311,14 @@ handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
294+ y = event->pointer_coordinates[0].y;
295+ }
296+ modifier_state = get_modifier_state (event->modifiers, event->button_state);
297++ event_time = NANO_TO_MILLI (event->event_time);
298+
299+ /* The Mir events generate hover-exits even while inside the window so
300+ counteract this by always generating an enter notify on all other events */
301+ if (!cursor_inside && event->action != mir_motion_action_hover_exit)
302+ {
303+ cursor_inside = TRUE;
304+- generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y);
305++ generate_crossing_event (window, GDK_ENTER_NOTIFY, x, y, event_time);
306+ }
307+
308+ /* Update which window has focus */
309+@@ -312,23 +330,23 @@ handle_motion_event (GdkWindow *window, const MirMotionEvent *event)
310+ event_type = event->action == mir_motion_action_down ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE;
311+ changed_button_state = button_state ^ event->button_state;
312+ if (changed_button_state == 0 || (changed_button_state & mir_motion_button_primary) != 0)
313+- generate_button_event (window, event_type, x, y, GDK_BUTTON_PRIMARY, modifier_state);
314++ generate_button_event (window, event_type, x, y, GDK_BUTTON_PRIMARY, modifier_state, event_time);
315+ if ((changed_button_state & mir_motion_button_secondary) != 0)
316+- generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state);
317++ generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time);
318+ if ((changed_button_state & mir_motion_button_tertiary) != 0)
319+- generate_button_event (window, event_type, x, y, GDK_BUTTON_MIDDLE, modifier_state);
320++ generate_button_event (window, event_type, x, y, GDK_BUTTON_MIDDLE, modifier_state, event_time);
321+ button_state = event->button_state;
322+ break;
323+ case mir_motion_action_scroll:
324+- generate_scroll_event (window, x, y, event->pointer_coordinates[0].hscroll, event->pointer_coordinates[0].vscroll, modifier_state);
325++ generate_scroll_event (window, x, y, event->pointer_coordinates[0].hscroll, event->pointer_coordinates[0].vscroll, modifier_state, event_time);
326+ break;
327+ case mir_motion_action_move: // move with button
328+ case mir_motion_action_hover_move: // move without button
329+- generate_motion_event (window, x, y, modifier_state);
330++ generate_motion_event (window, x, y, modifier_state, event_time);
331+ break;
332+ case mir_motion_action_hover_exit:
333+ cursor_inside = FALSE;
334+- generate_crossing_event (window, GDK_LEAVE_NOTIFY, x, y);
335++ generate_crossing_event (window, GDK_LEAVE_NOTIFY, x, y, event_time);
336+ break;
337+ }
338+
339+@@ -396,9 +414,6 @@ gdk_mir_event_source_queue_event (GdkDisplay *display,
340+ GdkWindow *window,
341+ const MirEvent *event)
342+ {
343+- if (g_getenv ("GDK_MIR_LOG_EVENTS"))
344+- _gdk_mir_print_event (event);
345+-
346+ // FIXME: Only generate events if the window wanted them?
347+ switch (event->type)
348+ {
349+@@ -459,7 +474,34 @@ gdk_mir_event_source_convert_events (GdkMirEventSource *source)
350+ * event was being dispatched...
351+ */
352+ if (window != NULL)
353+- gdk_mir_event_source_queue_event (source->display, window, &event->event);
354++ {
355++ /* TODO: Remove once we have proper transient window support. */
356++ if (event->event.type == mir_event_type_motion)
357++ {
358++ GdkWindow *child;
359++ gint x;
360++ gint y;
361++
362++ x = event->event.motion.pointer_coordinates[0].x;
363++ y = event->event.motion.pointer_coordinates[0].y;
364++
365++ child = _gdk_mir_window_get_visible_transient_child (window, x, y, &x, &y);
366++
367++ if (child && child != window)
368++ {
369++ window = child;
370++
371++ event->event.motion.pointer_count = MAX (event->event.motion.pointer_count, 1);
372++ event->event.motion.pointer_coordinates[0].x = x;
373++ event->event.motion.pointer_coordinates[0].y = y;
374++ }
375++ }
376++
377++ if (source->log_events)
378++ _gdk_mir_print_event (&event->event);
379++
380++ gdk_mir_event_source_queue_event (source->display, window, &event->event);
381++ }
382+ else
383+ g_warning ("window was destroyed before event arrived...");
384+
385+@@ -554,6 +596,7 @@ _gdk_mir_event_source_new (GdkDisplay *display)
386+ source = (GdkMirEventSource *) g_source;
387+ g_mutex_init (&source->mir_event_lock);
388+ source->display = display;
389++ source->log_events = (g_getenv ("GDK_MIR_LOG_EVENTS") != NULL);
390+
391+ return source;
392+ }
393+diff --git a/gdk/mir/gdkmirkeymap.c b/gdk/mir/gdkmirkeymap.c
394+index 3e8c829..82f0d2c 100644
395+--- a/gdk/mir/gdkmirkeymap.c
396++++ b/gdk/mir/gdkmirkeymap.c
397+@@ -31,6 +31,12 @@ typedef struct GdkMirKeymapClass GdkMirKeymapClass;
398+ #define GDK_IS_MIR_KEYMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_MIR_KEYMAP))
399+ #define GDK_MIR_KEYMAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_MIR_KEYMAP, GdkMirKeymapClass))
400+
401++#define IsModifierKey(keysym) \
402++ (((keysym) >= XKB_KEY_Shift_L && (keysym) <= XKB_KEY_Hyper_R) || \
403++ ((keysym) >= XKB_KEY_ISO_Lock && (keysym) <= XKB_KEY_ISO_Last_Group_Lock) || \
404++ ((keysym) == XKB_KEY_Mode_switch) || \
405++ ((keysym) == XKB_KEY_Num_Lock))
406++
407+ struct GdkMirKeymap
408+ {
409+ GdkKeymap parent_instance;
410+@@ -342,6 +348,14 @@ gdk_mir_keymap_get_modifier_state (GdkKeymap *keymap)
411+ return get_gdk_modifiers (mir_keymap->xkb_keymap, mods);
412+ }
413+
414++gboolean
415++_gdk_mir_keymap_key_is_modifier (GdkKeymap *keymap,
416++ guint keycode)
417++{
418++ // FIXME: use xkb_state
419++ return IsModifierKey (keycode);
420++}
421++
422+ static void
423+ update_direction (GdkMirKeymap *keymap)
424+ {
425+diff --git a/gdk/mir/gdkmirpointer.c b/gdk/mir/gdkmirpointer.c
426+index 96c7e74..3937361 100644
427+--- a/gdk/mir/gdkmirpointer.c
428++++ b/gdk/mir/gdkmirpointer.c
429+@@ -17,6 +17,7 @@
430+
431+ #include "config.h"
432+
433++#include "gdkdisplayprivate.h"
434+ #include "gdkdeviceprivate.h"
435+ #include "gdkscreen.h"
436+ #include "gdkwindow.h"
437+@@ -183,6 +184,11 @@ gdk_mir_pointer_ungrab (GdkDevice *device,
438+ {
439+ //g_printerr ("gdk_mir_pointer_ungrab\n");
440+ /* Mir doesn't do grabs */
441++
442++ GdkDeviceGrabInfo *grab = _gdk_display_get_last_device_grab (gdk_device_get_display (device), device);
443++
444++ if (grab)
445++ grab->serial_end = grab->serial_start;
446+ }
447+
448+ static GdkWindow *
449+diff --git a/gdk/mir/gdkmirscreen.c b/gdk/mir/gdkmirscreen.c
450+index 2b53cef..e29ddb3 100644
451+--- a/gdk/mir/gdkmirscreen.c
452++++ b/gdk/mir/gdkmirscreen.c
453+@@ -327,35 +327,31 @@ gdk_mir_screen_get_monitor_plug_name (GdkScreen *screen,
454+ switch (output->type)
455+ {
456+ case mir_display_output_type_unknown:
457+- return g_strdup_printf ("UNKNOWN-%u", output->output_id);
458++ return g_strdup_printf ("None-%u", output->output_id);
459+ case mir_display_output_type_vga:
460+ return g_strdup_printf ("VGA-%u", output->output_id);
461+ case mir_display_output_type_dvii:
462+- return g_strdup_printf ("DVII-%u", output->output_id);
463+ case mir_display_output_type_dvid:
464+- return g_strdup_printf ("DVID-%u", output->output_id);
465+ case mir_display_output_type_dvia:
466+- return g_strdup_printf ("DVIA-%u", output->output_id);
467++ return g_strdup_printf ("DVI-%u", output->output_id);
468+ case mir_display_output_type_composite:
469+- return g_strdup_printf ("COMPOSITE-%u", output->output_id);
470+- case mir_display_output_type_svideo:
471+- return g_strdup_printf ("SVIDEO-%u", output->output_id);
472++ return g_strdup_printf ("Composite-%u", output->output_id);
473+ case mir_display_output_type_lvds:
474+ return g_strdup_printf ("LVDS-%u", output->output_id);
475+ case mir_display_output_type_component:
476+- return g_strdup_printf ("COMPONENT-%u", output->output_id);
477++ return g_strdup_printf ("CTV-%u", output->output_id);
478+ case mir_display_output_type_ninepindin:
479+- return g_strdup_printf ("NINEPINDIN-%u", output->output_id);
480++ return g_strdup_printf ("DIN-%u", output->output_id);
481+ case mir_display_output_type_displayport:
482+- return g_strdup_printf ("DISPLAYPORT-%u", output->output_id);
483++ return g_strdup_printf ("DP-%u", output->output_id);
484+ case mir_display_output_type_hdmia:
485+- return g_strdup_printf ("HDMIA-%u", output->output_id);
486+ case mir_display_output_type_hdmib:
487+- return g_strdup_printf ("HDMIB-%u", output->output_id);
488++ return g_strdup_printf ("HDMI-%u", output->output_id);
489++ case mir_display_output_type_svideo:
490+ case mir_display_output_type_tv:
491+ return g_strdup_printf ("TV-%u", output->output_id);
492+ case mir_display_output_type_edp:
493+- return g_strdup_printf ("EDP-%u", output->output_id);
494++ return g_strdup_printf ("eDP-%u", output->output_id);
495+ }
496+ }
497+
498+diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
499+index 418724b..92521c9 100644
500+--- a/gdk/mir/gdkmirwindowimpl.c
501++++ b/gdk/mir/gdkmirwindowimpl.c
502+@@ -259,13 +259,22 @@ redraw_transient (GdkWindow *window)
503+ gdk_window_invalidate_rect (GDK_MIR_WINDOW_IMPL (window->impl)->transient_for, &r, FALSE);
504+ }
505+
506++/* Remove once we have proper transient window support. */
507++static gboolean
508++should_render_in_parent (GdkWindow *window)
509++{
510++ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
511++
512++ return impl->transient_for && gdk_window_get_window_type (window) != GDK_WINDOW_TOPLEVEL;
513++}
514++
515+ static void
516+ send_buffer (GdkWindow *window)
517+ {
518+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
519+
520+ /* Transient windows draw onto parent instead */
521+- if (impl->transient_for)
522++ if (should_render_in_parent (window))
523+ {
524+ redraw_transient (window);
525+ return;
526+@@ -327,7 +336,7 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
527+ }
528+
529+ /* Transient windows get rendered into a buffer and copied onto their parent */
530+- if (impl->transient_for)
531++ if (should_render_in_parent (window))
532+ {
533+ cairo_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, window->width, window->height);
534+ }
535+@@ -363,13 +372,13 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
536+ impl->cairo_surface = cairo_surface_reference (cairo_surface);
537+
538+ /* Draw background */
539+- c = cairo_create (impl->cairo_surface);
540+ if (impl->background)
541+- cairo_set_source (c, impl->background);
542+- else
543+- cairo_set_source_rgb (c, 1.0, 0.0, 0.0);
544+- cairo_paint (c);
545+- cairo_destroy (c);
546++ {
547++ c = cairo_create (impl->cairo_surface);
548++ cairo_set_source (c, impl->background);
549++ cairo_paint (c);
550++ cairo_destroy (c);
551++ }
552+
553+ return cairo_surface;
554+ }
555+@@ -433,10 +442,11 @@ gdk_mir_window_impl_hide (GdkWindow *window)
556+ //g_printerr ("gdk_mir_window_impl_hide window=%p\n", window);
557+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
558+
559++ impl->cursor_inside = FALSE;
560+ impl->visible = FALSE;
561+ ensure_no_surface (window);
562+
563+- if (impl->transient_for)
564++ if (should_render_in_parent (window))
565+ redraw_transient (window);
566+ }
567+
568+@@ -446,10 +456,11 @@ gdk_mir_window_impl_withdraw (GdkWindow *window)
569+ //g_printerr ("gdk_mir_window_impl_withdraw window=%p\n", window);
570+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
571+
572++ impl->cursor_inside = FALSE;
573+ impl->visible = FALSE;
574+ ensure_no_surface (window);
575+
576+- if (impl->transient_for)
577++ if (should_render_in_parent (window))
578+ redraw_transient (window);
579+ }
580+
581+@@ -492,6 +503,7 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
582+ gint width,
583+ gint height)
584+ {
585++ /*
586+ g_printerr ("gdk_mir_window_impl_move_resize");
587+ g_printerr (" window=%p", window);
588+ if (with_move)
589+@@ -499,16 +511,17 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
590+ if (width > 0)
591+ g_printerr (" size=%dx%dpx", width, height);
592+ g_printerr ("\n");
593++ */
594+ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
595+
596+ /* Redraw parent where we moved from */
597+- if (impl->transient_for)
598++ if (should_render_in_parent (window))
599+ redraw_transient (window);
600+
601+ /* Transient windows can move wherever they want */
602+ if (with_move)
603+ {
604+- if (impl->transient_for)
605++ if (should_render_in_parent (window))
606+ {
607+ window->x = x;
608+ window->y = y;
609+@@ -535,7 +548,7 @@ gdk_mir_window_impl_move_resize (GdkWindow *window,
610+ }
611+
612+ /* Redraw parent where we moved to */
613+- if (impl->transient_for)
614++ if (should_render_in_parent (window))
615+ redraw_transient (window);
616+ }
617+
618+@@ -699,7 +712,7 @@ gdk_mir_window_impl_input_shape_combine_region (GdkWindow *window,
619+ gint offset_x,
620+ gint offset_y)
621+ {
622+- g_printerr ("gdk_mir_window_impl_input_shape_combine_region window=%p\n", window);
623++ // g_printerr ("gdk_mir_window_impl_input_shape_combine_region window=%p\n", window);
624+ }
625+
626+ static void
627+@@ -713,7 +726,7 @@ gdk_mir_window_impl_destroy (GdkWindow *window,
628+ impl->visible = FALSE;
629+ ensure_no_surface (window);
630+
631+- if (impl->transient_for)
632++ if (should_render_in_parent (window))
633+ {
634+ /* Redraw parent */
635+ redraw_transient (window);
636+@@ -850,7 +863,7 @@ static void
637+ gdk_mir_window_impl_set_title (GdkWindow *window,
638+ const gchar *title)
639+ {
640+- g_printerr ("gdk_mir_window_impl_set_title window=%p\n", window);
641++ // g_printerr ("gdk_mir_window_impl_set_title window=%p\n", window);
642+ }
643+
644+ static void
645+@@ -881,7 +894,7 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
646+
647+ /* Link this window to the parent */
648+ impl->transient_for = parent;
649+- if (parent)
650++ if (should_render_in_parent (window))
651+ {
652+ GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl);
653+ parent_impl->transient_children = g_list_append (parent_impl->transient_children, window);
654+@@ -895,7 +908,42 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window,
655+ }
656+
657+ /* Remove surface if we had made one before this was set */
658+- ensure_no_surface (window);
659++ if (should_render_in_parent (window))
660++ ensure_no_surface (window);
661++}
662++
663++/* TODO: Remove once we have proper transient window support. */
664++GdkWindow *
665++_gdk_mir_window_get_visible_transient_child (GdkWindow *window,
666++ gint x,
667++ gint y,
668++ gint *out_x,
669++ gint *out_y)
670++{
671++ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
672++ GdkWindow *child = NULL;
673++ GList *i;
674++
675++ if (x < window->x || x >= window->x + window->width ||
676++ y < window->y || y >= window->y + window->height)
677++ return NULL;
678++
679++ x -= window->x;
680++ y -= window->y;
681++
682++ for (i = impl->transient_children; i && !child; i = i->next)
683++ {
684++ if (GDK_MIR_WINDOW_IMPL (GDK_WINDOW (i->data)->impl)->visible)
685++ child = _gdk_mir_window_get_visible_transient_child (i->data, x, y, out_x, out_y);
686++ }
687++
688++ if (child)
689++ return child;
690++
691++ *out_x = x;
692++ *out_y = y;
693++
694++ return window;
695+ }
696+
697+ static void
698+@@ -1242,7 +1290,7 @@ gdk_mir_window_impl_set_shadow_width (GdkWindow *window,
699+ gint top,
700+ gint bottom)
701+ {
702+- g_printerr ("gdk_mir_window_impl_set_shadow_width window=%p\n", window);
703++ // g_printerr ("gdk_mir_window_impl_set_shadow_width window=%p\n", window);
704+ }
705+
706+ static void
707+--
708+2.1.3
709+
710
711=== modified file 'debian/patches/mir-backend.patch'
712--- debian/patches/mir-backend.patch 2014-12-12 10:51:15 +0000
713+++ debian/patches/mir-backend.patch 2014-12-13 16:59:39 +0000
714@@ -1,13 +1,15 @@
715-From 5808594aaff557dfc9ddef82246ddd4ed902a8c5 Mon Sep 17 00:00:00 2001
716+From 122076d4b6f37fa427ea592194f6fe5bacaa9e70 Mon Sep 17 00:00:00 2001
717 From: Robert Ancell <robert.ancell@canonical.com>
718 Date: Tue, 20 May 2014 10:03:30 +1200
719-Subject: [PATCH] Gdk: add an experimental backend for mir
720+Subject: [PATCH 1/2] Gdk: add an experimental backend for mir
721
722 Backported from:
723 0f26b26f1d93f002ccd5fe6b6fd636172bfbb24b
724+887b7356c369e58a959b99d88246df8303e34531
725 c41231cc0fdc791a7a69cdd77af51c8162f44aa4
726 053b65a21af312b8b9361367939a221aa7f474a7
727 2fdb266c0d0f038a74decda7440ebbb7bdb02e68
728+063f79b5946198eb5efec0133627a12a75d154a7
729 ec729d06491a2a5bb9ba3f287fbc102b5036bc8f
730 92c2e99ddac668d729f42bff501f70fb56fbb76c
731 c6de20496c4075a0f1daf8be450d8522aaaea82f
732@@ -18,32 +20,46 @@
733 4e4ccb76cd8b5b7dc4342f35fcf64ace30019641
734 c7e7e350839b19732a2eea7a2151c0c3a76c2544
735 c42146d88c324189a3a70189f1a60156697ad9ab
736+8bc523ef5915d4ab7ced843929c8e3f1bf754016
737+f5c5e9385e960a74ce38bc58a30fa36474d0cd6a
738+5ff39b207b373754007a99be6286bb7b93ecb49d
739+acfc4f891030d7339c221bdb57df9af8994fd6e0
740+da8fdab87b4cc96b9614ccb6abb0682def324f30
741+e0e46a4f6bf852d5ead8b8c015aa8eaf4e80599e
742+60e185e496180dad0be322a970e4aa17be1c8809
743+b8925253b66a63594f5d373dc10c564f0d184eb4
744 ---
745- Makefile.am | 6 +-
746- configure.ac | 34 +-
747- docs/reference/gtk/Makefile.am | 1 +
748- docs/reference/gtk/building.sgml | 11 +-
749- docs/reference/gtk/gtk-docs.sgml | 1 +
750- docs/reference/gtk/mir.xml | 35 +
751- docs/reference/gtk/running.sgml | 5 +
752- gdk/Makefile.am | 6 +-
753- gdk/gdkdisplaymanager.c | 7 +
754- gdk/mir/Makefile.am | 39 ++
755- gdk/mir/gdkmir-debug.c | 293 +++++++++
756- gdk/mir/gdkmir-private.h | 90 +++
757- gdk/mir/gdkmir.h | 39 ++
758- gdk/mir/gdkmircursor.c | 177 +++++
759- gdk/mir/gdkmirdevicemanager.c | 120 ++++
760- gdk/mir/gdkmirdisplay.c | 565 ++++++++++++++++
761- gdk/mir/gdkmireventsource.c | 630 ++++++++++++++++++
762- gdk/mir/gdkmirkeyboard.c | 173 +++++
763- gdk/mir/gdkmirkeymap.c | 466 ++++++++++++++
764- gdk/mir/gdkmirpointer.c | 250 ++++++++
765- gdk/mir/gdkmirscreen.c | 801 +++++++++++++++++++++++
766- gdk/mir/gdkmirwindow.c | 52 ++
767- gdk/mir/gdkmirwindowimpl.c | 1320 ++++++++++++++++++++++++++++++++++++++
768- gtk/gtktooltip.c | 16 +
769- 24 files changed, 5130 insertions(+), 7 deletions(-)
770+ Makefile.am | 6 +-
771+ configure.ac | 35 +-
772+ docs/reference/gtk/Makefile.am | 1 +
773+ docs/reference/gtk/building.sgml | 11 +-
774+ docs/reference/gtk/gtk-docs.sgml | 1 +
775+ docs/reference/gtk/mir.xml | 35 +
776+ docs/reference/gtk/running.sgml | 5 +
777+ gdk/Makefile.am | 6 +-
778+ gdk/broadway/gdkdisplay-broadway.c | 15 -
779+ gdk/gdkdisplay.c | 15 +
780+ gdk/gdkdisplaymanager.c | 7 +
781+ gdk/mir/Makefile.am | 39 ++
782+ gdk/mir/gdkmir-debug.c | 293 ++++++++
783+ gdk/mir/gdkmir-private.h | 92 +++
784+ gdk/mir/gdkmir.h | 39 ++
785+ gdk/mir/gdkmircursor.c | 177 +++++
786+ gdk/mir/gdkmirdevicemanager.c | 120 ++++
787+ gdk/mir/gdkmirdisplay.c | 549 +++++++++++++++
788+ gdk/mir/gdkmireventsource.c | 631 +++++++++++++++++
789+ gdk/mir/gdkmirkeyboard.c | 173 +++++
790+ gdk/mir/gdkmirkeymap.c | 466 +++++++++++++
791+ gdk/mir/gdkmirpointer.c | 250 +++++++
792+ gdk/mir/gdkmirscreen.c | 804 ++++++++++++++++++++++
793+ gdk/mir/gdkmirwindow.c | 52 ++
794+ gdk/mir/gdkmirwindowimpl.c | 1336 ++++++++++++++++++++++++++++++++++++
795+ gdk/wayland/gdkdisplay-wayland.c | 15 -
796+ gdk/win32/gdkdisplay-win32.c | 15 -
797+ gdk/x11/gdkdisplay-x11.c | 15 -
798+ gtk/gtktooltip.c | 16 +
799+ gtk/gtkwindow.c | 9 +
800+ 30 files changed, 5161 insertions(+), 67 deletions(-)
801 create mode 100644 docs/reference/gtk/mir.xml
802 create mode 100644 gdk/mir/Makefile.am
803 create mode 100644 gdk/mir/gdkmir-debug.c
804@@ -60,11 +76,11 @@
805 create mode 100644 gdk/mir/gdkmirwindow.c
806 create mode 100644 gdk/mir/gdkmirwindowimpl.c
807
808-Index: b/Makefile.am
809-===================================================================
810+diff --git a/Makefile.am b/Makefile.am
811+index 2cb7769..37bc9ff 100644
812 --- a/Makefile.am
813 +++ b/Makefile.am
814-@@ -33,11 +33,11 @@
815+@@ -33,11 +33,11 @@ MAINTAINERCLEANFILES = \
816
817
818 ## Copy .pc files to target-specific names
819@@ -78,7 +94,7 @@
820 rm -f $@ && \
821 cp gdk-3.0.pc $@
822
823-@@ -59,12 +59,14 @@
824+@@ -59,12 +59,14 @@ DISTCLEANFILES = \
825 gtk+-quartz-3.0.pc \
826 gtk+-broadway-3.0.pc \
827 gtk+-wayland-3.0.pc \
828@@ -93,11 +109,19 @@
829 gail-3.0.pc \
830 config.lt
831
832-Index: b/configure.ac
833-===================================================================
834+diff --git a/configure.ac b/configure.ac
835+index cccdae9..43e6245 100644
836 --- a/configure.ac
837 +++ b/configure.ac
838-@@ -329,6 +329,10 @@
839+@@ -48,6 +48,7 @@ m4_define([cairo_required_version], [1.12.0])
840+ m4_define([gdk_pixbuf_required_version], [2.30.0])
841+ m4_define([introspection_required_version], [1.39.0])
842+ m4_define([wayland_required_version], [1.5.91])
843++m4_define([mirclient_required_version], [0.9.0])
844+ GLIB_REQUIRED_VERSION=glib_required_version
845+ PANGO_REQUIRED_VERSION=pango_required_version
846+ ATK_REQUIRED_VERSION=atk_required_version
847+@@ -329,6 +330,10 @@ AC_ARG_ENABLE(wayland-backend,
848 [AS_HELP_STRING([--enable-wayland-backend],
849 [enable the wayland gdk backend])],
850 [backend_set=yes])
851@@ -108,7 +132,7 @@
852
853 if test -z "$backend_set"; then
854 if test "$platform_win32" = yes; then
855-@@ -336,6 +340,7 @@
856+@@ -336,6 +341,7 @@ if test -z "$backend_set"; then
857 else
858 enable_x11_backend=yes
859 enable_wayland_backend=maybe
860@@ -116,11 +140,11 @@
861 fi
862 fi
863
864-@@ -457,6 +462,30 @@
865+@@ -457,6 +463,30 @@ else
866 AM_CONDITIONAL(USE_WAYLAND, false)
867 fi
868
869-+MIR_DEPENDENCIES="mirclient"
870++MIR_DEPENDENCIES="mirclient >= mirclient_required_version"
871 +if test "$enable_mir_backend" = "maybe" ; then
872 + PKG_CHECK_EXISTS($MIR_DEPENDENCIES, [have_mir_deps=yes], [have_mir_deps=no])
873 + AC_MSG_CHECKING([for MIR_DEPENDENCIES])
874@@ -147,7 +171,7 @@
875 # strip leading space
876 GDK_BACKENDS=${GDK_BACKENDS#* }
877
878-@@ -1326,7 +1355,7 @@
879+@@ -1326,7 +1356,7 @@ CFLAGS="$saved_cflags"
880 LDFLAGS="$saved_ldflags"
881
882 GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"
883@@ -156,7 +180,7 @@
884 if test "x$enable_x11_backend" = xyes; then
885 GDK_PRIVATE_PACKAGES="$GDK_PRIVATE_PACKAGES pangoft2"
886 fi
887-@@ -1363,7 +1392,7 @@
888+@@ -1363,7 +1393,7 @@ fi
889 PKG_CHECK_MODULES(ATK, $ATK_PACKAGES)
890
891 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"
892@@ -165,7 +189,7 @@
893 if test "x$enable_x11_backend" = xyes; then
894 GTK_PRIVATE_PACKAGES="$GTK_PRIVATE_PACKAGES pangoft2"
895 fi
896-@@ -1903,6 +1932,7 @@
897+@@ -1903,6 +1933,7 @@ gdk/win32/rc/Makefile
898 gdk/win32/rc/gdk.rc
899 gdk/quartz/Makefile
900 gdk/wayland/Makefile
901@@ -173,11 +197,11 @@
902 gdk/gdkversionmacros.h
903 gtk/Makefile
904 gtk/makefile.msc
905-Index: b/docs/reference/gtk/Makefile.am
906-===================================================================
907+diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am
908+index 968384c..74ef369 100644
909 --- a/docs/reference/gtk/Makefile.am
910 +++ b/docs/reference/gtk/Makefile.am
911-@@ -145,6 +145,7 @@
912+@@ -145,6 +145,7 @@ content_files = \
913 osx.sgml \
914 broadway.xml \
915 wayland.xml \
916@@ -185,11 +209,11 @@
917 question_index.sgml \
918 resources.sgml \
919 text_widget.sgml \
920-Index: b/docs/reference/gtk/building.sgml
921-===================================================================
922+diff --git a/docs/reference/gtk/building.sgml b/docs/reference/gtk/building.sgml
923+index b7479e7..445e1fd 100644
924 --- a/docs/reference/gtk/building.sgml
925 +++ b/docs/reference/gtk/building.sgml
926-@@ -395,6 +395,11 @@
927+@@ -395,6 +395,11 @@ How to compile GTK+ itself
928 </group>
929 <sbr/>
930 <group>
931@@ -201,7 +225,7 @@
932 <arg choice="plain">--enable-introspection=[no/auto/yes]</arg>
933 </group>
934 <sbr/>
935-@@ -595,8 +600,10 @@
936+@@ -595,8 +600,10 @@ How to compile GTK+ itself
937 <systemitem>--disable-quartz-backend</systemitem>,
938 <systemitem>--enable-broadway-backend</systemitem>,
939 <systemitem>--disable-broadway-backend</systemitem>,
940@@ -214,8 +238,8 @@
941
942 <para>
943 Enables specific backends for GDK. If none of these options
944-Index: b/docs/reference/gtk/gtk-docs.sgml
945-===================================================================
946+diff --git a/docs/reference/gtk/gtk-docs.sgml b/docs/reference/gtk/gtk-docs.sgml
947+index 2e00bae..8f4a8d1 100644
948 --- a/docs/reference/gtk/gtk-docs.sgml
949 +++ b/docs/reference/gtk/gtk-docs.sgml
950 @@ -413,6 +413,7 @@
951@@ -226,8 +250,9 @@
952 </part>
953
954 <xi:include href="glossary.xml" />
955-Index: b/docs/reference/gtk/mir.xml
956-===================================================================
957+diff --git a/docs/reference/gtk/mir.xml b/docs/reference/gtk/mir.xml
958+new file mode 100644
959+index 0000000..3a0a52e
960 --- /dev/null
961 +++ b/docs/reference/gtk/mir.xml
962 @@ -0,0 +1,35 @@
963@@ -266,11 +291,11 @@
964 +</refsect1>
965 +
966 +</refentry>
967-Index: b/docs/reference/gtk/running.sgml
968-===================================================================
969+diff --git a/docs/reference/gtk/running.sgml b/docs/reference/gtk/running.sgml
970+index 321593a..1aa2291 100644
971 --- a/docs/reference/gtk/running.sgml
972 +++ b/docs/reference/gtk/running.sgml
973-@@ -487,6 +487,11 @@
974+@@ -487,6 +487,11 @@ nevertheless.
975 <listitem><para>Selects the Wayland backend for connecting to Wayland display servers</para></listitem>
976 </varlistentry>
977
978@@ -282,11 +307,11 @@
979 </variablelist>
980 Since 3.10, this environment variable can contain a comma-separated list
981 of backend names, which are tried in order. The list may also contain
982-Index: b/gdk/Makefile.am
983-===================================================================
984+diff --git a/gdk/Makefile.am b/gdk/Makefile.am
985+index 5f0c1e5..1e24b6e 100644
986 --- a/gdk/Makefile.am
987 +++ b/gdk/Makefile.am
988-@@ -13,7 +13,7 @@
989+@@ -13,7 +13,7 @@ INTROSPECTION_COMPILER_ARGS = \
990
991 SUBDIRS = $(GDK_BACKENDS) .
992
993@@ -295,7 +320,7 @@
994
995 CLEANFILES =
996
997-@@ -201,6 +201,10 @@
998+@@ -201,6 +201,10 @@ if USE_WAYLAND
999 libgdk_3_la_LIBADD += wayland/libgdk-wayland.la
1000 endif
1001
1002@@ -306,8 +331,74 @@
1003 if HAVE_INTROSPECTION
1004
1005 introspection_files = \
1006-Index: b/gdk/gdkdisplaymanager.c
1007-===================================================================
1008+diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
1009+index 53c675d..307728f 100644
1010+--- a/gdk/broadway/gdkdisplay-broadway.c
1011++++ b/gdk/broadway/gdkdisplay-broadway.c
1012+@@ -330,19 +330,6 @@ gdk_broadway_display_get_next_serial (GdkDisplay *display)
1013+ return _gdk_broadway_server_get_next_serial (broadway_display->server);
1014+ }
1015+
1016+-static void
1017+-gdk_broadway_display_event_data_copy (GdkDisplay *display,
1018+- const GdkEvent *src,
1019+- GdkEvent *dst)
1020+-{
1021+-}
1022+-
1023+-static void
1024+-gdk_broadway_display_event_data_free (GdkDisplay *display,
1025+- GdkEvent *event)
1026+-{
1027+-}
1028+-
1029+ void
1030+ gdk_broadway_display_show_keyboard (GdkBroadwayDisplay *display)
1031+ {
1032+@@ -398,8 +385,6 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
1033+ display_class->after_process_all_updates = _gdk_broadway_display_after_process_all_updates;
1034+ display_class->get_next_serial = gdk_broadway_display_get_next_serial;
1035+ display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
1036+- display_class->event_data_copy = gdk_broadway_display_event_data_copy;
1037+- display_class->event_data_free = gdk_broadway_display_event_data_free;
1038+ display_class->create_window_impl = _gdk_broadway_display_create_window_impl;
1039+ display_class->get_keymap = _gdk_broadway_display_get_keymap;
1040+ display_class->get_selection_owner = _gdk_broadway_display_get_selection_owner;
1041+diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
1042+index 34b6cab..5ccfe01 100644
1043+--- a/gdk/gdkdisplay.c
1044++++ b/gdk/gdkdisplay.c
1045+@@ -111,6 +111,19 @@ gdk_display_real_opened (GdkDisplay *display)
1046+ }
1047+
1048+ static void
1049++gdk_display_real_event_data_copy (GdkDisplay *display,
1050++ const GdkEvent *src,
1051++ GdkEvent *dst)
1052++{
1053++}
1054++
1055++static void
1056++gdk_display_real_event_data_free (GdkDisplay *display,
1057++ GdkEvent *dst)
1058++{
1059++}
1060++
1061++static void
1062+ gdk_display_class_init (GdkDisplayClass *class)
1063+ {
1064+ GObjectClass *object_class = G_OBJECT_CLASS (class);
1065+@@ -123,6 +136,8 @@ gdk_display_class_init (GdkDisplayClass *class)
1066+
1067+ class->opened = gdk_display_real_opened;
1068+ class->make_default = gdk_display_real_make_default;
1069++ class->event_data_copy = gdk_display_real_event_data_copy;
1070++ class->event_data_free = gdk_display_real_event_data_free;
1071+
1072+ /**
1073+ * GdkDisplay::opened:
1074+diff --git a/gdk/gdkdisplaymanager.c b/gdk/gdkdisplaymanager.c
1075+index c6813d0..c9afbca 100644
1076 --- a/gdk/gdkdisplaymanager.c
1077 +++ b/gdk/gdkdisplaymanager.c
1078 @@ -60,6 +60,10 @@
1079@@ -321,7 +412,7 @@
1080 /**
1081 * SECTION:gdkdisplaymanager
1082 * @Short_description: Maintains a list of all open GdkDisplays
1083-@@ -272,6 +276,9 @@
1084+@@ -272,6 +276,9 @@ static GdkBackend gdk_backends[] = {
1085 #ifdef GDK_WINDOWING_WAYLAND
1086 { "wayland", _gdk_wayland_display_open },
1087 #endif
1088@@ -331,8 +422,9 @@
1089 #ifdef GDK_WINDOWING_BROADWAY
1090 { "broadway", _gdk_broadway_display_open },
1091 #endif
1092-Index: b/gdk/mir/Makefile.am
1093-===================================================================
1094+diff --git a/gdk/mir/Makefile.am b/gdk/mir/Makefile.am
1095+new file mode 100644
1096+index 0000000..026ce79
1097 --- /dev/null
1098 +++ b/gdk/mir/Makefile.am
1099 @@ -0,0 +1,39 @@
1100@@ -375,8 +467,9 @@
1101 + gdkmir.h
1102 +
1103 +-include $(top_srcdir)/git.mk
1104-Index: b/gdk/mir/gdkmir-debug.c
1105-===================================================================
1106+diff --git a/gdk/mir/gdkmir-debug.c b/gdk/mir/gdkmir-debug.c
1107+new file mode 100644
1108+index 0000000..ef57eff
1109 --- /dev/null
1110 +++ b/gdk/mir/gdkmir-debug.c
1111 @@ -0,0 +1,293 @@
1112@@ -673,8 +766,9 @@
1113 + break;
1114 + }
1115 +}
1116-Index: b/gdk/mir/gdkmir-private.h
1117-===================================================================
1118+diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
1119+new file mode 100644
1120+index 0000000..8305096
1121 --- /dev/null
1122 +++ b/gdk/mir/gdkmir-private.h
1123 @@ -0,0 +1,92 @@
1124@@ -770,8 +864,9 @@
1125 +void _gdk_mir_print_event (const MirEvent *event);
1126 +
1127 +#endif /* __GDK_PRIVATE_MIR_H__ */
1128-Index: b/gdk/mir/gdkmir.h
1129-===================================================================
1130+diff --git a/gdk/mir/gdkmir.h b/gdk/mir/gdkmir.h
1131+new file mode 100644
1132+index 0000000..00bbda1
1133 --- /dev/null
1134 +++ b/gdk/mir/gdkmir.h
1135 @@ -0,0 +1,39 @@
1136@@ -802,20 +897,21 @@
1137 +#define GDK_IS_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DISPLAY))
1138 +
1139 +#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())
1140-+#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_MIR))
1141++#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_WINDOW))
1142 +
1143 +GDK_AVAILABLE_IN_3_10
1144 +GType gdk_mir_display_get_type (void);
1145 +
1146 +GDK_AVAILABLE_IN_3_10
1147-+struct MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
1148++MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
1149 +
1150 +GDK_AVAILABLE_IN_3_10
1151 +GType gdk_mir_window_get_type (void);
1152 +
1153 +#endif /* __GDK_MIR_H__ */
1154-Index: b/gdk/mir/gdkmircursor.c
1155-===================================================================
1156+diff --git a/gdk/mir/gdkmircursor.c b/gdk/mir/gdkmircursor.c
1157+new file mode 100644
1158+index 0000000..7ce158a
1159 --- /dev/null
1160 +++ b/gdk/mir/gdkmircursor.c
1161 @@ -0,0 +1,177 @@
1162@@ -996,8 +1092,9 @@
1163 + cursor_class->get_surface = gdk_mir_cursor_get_surface;
1164 + object_class->finalize = gdk_mir_cursor_finalize;
1165 +}
1166-Index: b/gdk/mir/gdkmirdevicemanager.c
1167-===================================================================
1168+diff --git a/gdk/mir/gdkmirdevicemanager.c b/gdk/mir/gdkmirdevicemanager.c
1169+new file mode 100644
1170+index 0000000..c94f8a3
1171 --- /dev/null
1172 +++ b/gdk/mir/gdkmirdevicemanager.c
1173 @@ -0,0 +1,120 @@
1174@@ -1121,11 +1218,12 @@
1175 + device_manager_class->get_client_pointer = gdk_mir_device_manager_get_client_pointer;
1176 + object_class->constructed = gdk_mir_device_manager_constructed;
1177 +}
1178-Index: b/gdk/mir/gdkmirdisplay.c
1179-===================================================================
1180+diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
1181+new file mode 100644
1182+index 0000000..207342c
1183 --- /dev/null
1184 +++ b/gdk/mir/gdkmirdisplay.c
1185-@@ -0,0 +1,565 @@
1186+@@ -0,0 +1,549 @@
1187 +/*
1188 + * Copyright © 2014 Canonical Ltd
1189 + *
1190@@ -1276,8 +1374,9 @@
1191 +{
1192 + GdkMirDisplay *display = GDK_MIR_DISPLAY (object);
1193 +
1194-+ g_object_unref (display->screen);
1195-+ display->screen = NULL;
1196++ g_clear_object (&display->screen);
1197++ g_clear_object (&display->keymap);
1198++ g_clear_pointer (&display->event_source, g_source_unref);
1199 +
1200 + G_OBJECT_CLASS (gdk_mir_display_parent_class)->dispose (object);
1201 +}
1202@@ -1505,21 +1604,6 @@
1203 +}
1204 +
1205 +static void
1206-+gdk_mir_display_event_data_copy (GdkDisplay *display,
1207-+ const GdkEvent *src,
1208-+ GdkEvent *dst)
1209-+{
1210-+ //g_printerr ("gdk_mir_display_event_data_copy\n");
1211-+}
1212-+
1213-+static void
1214-+gdk_mir_display_event_data_free (GdkDisplay *display,
1215-+ GdkEvent *event)
1216-+{
1217-+ //g_printerr ("gdk_mir_display_event_data_free\n");
1218-+}
1219-+
1220-+static void
1221 +gdk_mir_display_create_window_impl (GdkDisplay *display,
1222 + GdkWindow *window,
1223 + GdkWindow *real_parent,
1224@@ -1677,8 +1761,6 @@
1225 + display_class->after_process_all_updates = gdk_mir_display_after_process_all_updates;
1226 + display_class->get_next_serial = gdk_mir_display_get_next_serial;
1227 + display_class->notify_startup_complete = gdk_mir_display_notify_startup_complete;
1228-+ display_class->event_data_copy = gdk_mir_display_event_data_copy;
1229-+ display_class->event_data_free = gdk_mir_display_event_data_free;
1230 + display_class->create_window_impl = gdk_mir_display_create_window_impl;
1231 + display_class->get_keymap = gdk_mir_display_get_keymap;
1232 + display_class->push_error_trap = gdk_mir_display_push_error_trap;
1233@@ -1691,8 +1773,9 @@
1234 + display_class->text_property_to_utf8_list = gdk_mir_display_text_property_to_utf8_list;
1235 + display_class->utf8_to_string_target = gdk_mir_display_utf8_to_string_target;
1236 +}
1237-Index: b/gdk/mir/gdkmireventsource.c
1238-===================================================================
1239+diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
1240+new file mode 100644
1241+index 0000000..cfe36e8
1242 --- /dev/null
1243 +++ b/gdk/mir/gdkmireventsource.c
1244 @@ -0,0 +1,631 @@
1245@@ -1860,8 +1943,8 @@
1246 + event->scroll.y = y;
1247 + event->scroll.state = state;
1248 + event->scroll.direction = GDK_SCROLL_SMOOTH;
1249-+ event->scroll.delta_x = delta_x;
1250-+ event->scroll.delta_y = delta_y;
1251++ event->scroll.delta_x = -delta_x;
1252++ event->scroll.delta_y = -delta_y;
1253 +
1254 + send_event (window, get_pointer (window), event);
1255 +}
1256@@ -2327,8 +2410,9 @@
1257 +
1258 + g_main_context_wakeup (NULL);
1259 +}
1260-Index: b/gdk/mir/gdkmirkeyboard.c
1261-===================================================================
1262+diff --git a/gdk/mir/gdkmirkeyboard.c b/gdk/mir/gdkmirkeyboard.c
1263+new file mode 100644
1264+index 0000000..86c0d9f
1265 --- /dev/null
1266 +++ b/gdk/mir/gdkmirkeyboard.c
1267 @@ -0,0 +1,173 @@
1268@@ -2505,8 +2589,9 @@
1269 + device_class->window_at_position = gdk_mir_keyboard_window_at_position;
1270 + device_class->select_window_events = gdk_mir_keyboard_select_window_events;
1271 +}
1272-Index: b/gdk/mir/gdkmirkeymap.c
1273-===================================================================
1274+diff --git a/gdk/mir/gdkmirkeymap.c b/gdk/mir/gdkmirkeymap.c
1275+new file mode 100644
1276+index 0000000..3e8c829
1277 --- /dev/null
1278 +++ b/gdk/mir/gdkmirkeymap.c
1279 @@ -0,0 +1,466 @@
1280@@ -2976,8 +3061,9 @@
1281 + keymap_class->map_virtual_modifiers = gdk_mir_keymap_map_virtual_modifiers;
1282 + keymap_class->get_modifier_state = gdk_mir_keymap_get_modifier_state;
1283 +}
1284-Index: b/gdk/mir/gdkmirpointer.c
1285-===================================================================
1286+diff --git a/gdk/mir/gdkmirpointer.c b/gdk/mir/gdkmirpointer.c
1287+new file mode 100644
1288+index 0000000..96c7e74
1289 --- /dev/null
1290 +++ b/gdk/mir/gdkmirpointer.c
1291 @@ -0,0 +1,250 @@
1292@@ -3231,8 +3317,9 @@
1293 + device_class->window_at_position = gdk_mir_pointer_window_at_position;
1294 + device_class->select_window_events = gdk_mir_pointer_select_window_events;
1295 +}
1296-Index: b/gdk/mir/gdkmirscreen.c
1297-===================================================================
1298+diff --git a/gdk/mir/gdkmirscreen.c b/gdk/mir/gdkmirscreen.c
1299+new file mode 100644
1300+index 0000000..2b53cef
1301 --- /dev/null
1302 +++ b/gdk/mir/gdkmirscreen.c
1303 @@ -0,0 +1,804 @@
1304@@ -4040,8 +4127,9 @@
1305 + screen_class->query_visual_types = gdk_mir_screen_query_visual_types;
1306 + screen_class->get_monitor_scale_factor = gdk_mir_screen_get_monitor_scale_factor;
1307 +}
1308-Index: b/gdk/mir/gdkmirwindow.c
1309-===================================================================
1310+diff --git a/gdk/mir/gdkmirwindow.c b/gdk/mir/gdkmirwindow.c
1311+new file mode 100644
1312+index 0000000..03da7e0
1313 --- /dev/null
1314 +++ b/gdk/mir/gdkmirwindow.c
1315 @@ -0,0 +1,52 @@
1316@@ -4097,8 +4185,9 @@
1317 +gdk_mir_window_class_init (GdkMirWindowClass *klass)
1318 +{
1319 +}
1320-Index: b/gdk/mir/gdkmirwindowimpl.c
1321-===================================================================
1322+diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
1323+new file mode 100644
1324+index 0000000..418724b
1325 --- /dev/null
1326 +++ b/gdk/mir/gdkmirwindowimpl.c
1327 @@ -0,0 +1,1336 @@
1328@@ -5438,8 +5527,107 @@
1329 + impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region;
1330 + impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width;
1331 +}
1332-Index: b/gtk/gtktooltip.c
1333-===================================================================
1334+diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
1335+index 5438a51..82c6ee1 100644
1336+--- a/gdk/wayland/gdkdisplay-wayland.c
1337++++ b/gdk/wayland/gdkdisplay-wayland.c
1338+@@ -431,19 +431,6 @@ gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
1339+ {
1340+ }
1341+
1342+-static void
1343+-gdk_wayland_display_event_data_copy (GdkDisplay *display,
1344+- const GdkEvent *src,
1345+- GdkEvent *dst)
1346+-{
1347+-}
1348+-
1349+-static void
1350+-gdk_wayland_display_event_data_free (GdkDisplay *display,
1351+- GdkEvent *event)
1352+-{
1353+-}
1354+-
1355+ static GdkKeymap *
1356+ _gdk_wayland_display_get_keymap (GdkDisplay *display)
1357+ {
1358+@@ -534,8 +521,6 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass * class)
1359+ display_class->after_process_all_updates = gdk_wayland_display_after_process_all_updates;
1360+ display_class->get_next_serial = gdk_wayland_display_get_next_serial;
1361+ display_class->notify_startup_complete = gdk_wayland_display_notify_startup_complete;
1362+- display_class->event_data_copy = gdk_wayland_display_event_data_copy;
1363+- display_class->event_data_free = gdk_wayland_display_event_data_free;
1364+ display_class->create_window_impl = _gdk_wayland_display_create_window_impl;
1365+ display_class->get_keymap = _gdk_wayland_display_get_keymap;
1366+ display_class->push_error_trap = gdk_wayland_display_push_error_trap;
1367+diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c
1368+index 2d73c30..97d0e3e 100644
1369+--- a/gdk/win32/gdkdisplay-win32.c
1370++++ b/gdk/win32/gdkdisplay-win32.c
1371+@@ -600,19 +600,6 @@ gdk_win32_display_notify_startup_complete (GdkDisplay *display,
1372+ /* nothing */
1373+ }
1374+ static void
1375+-gdk_win32_display_event_data_copy (GdkDisplay *display,
1376+- const GdkEvent *src,
1377+- GdkEvent *dst)
1378+-{
1379+- /* nothing */
1380+-}
1381+-static void
1382+-gdk_win32_display_event_data_free (GdkDisplay *display,
1383+- GdkEvent *event)
1384+-{
1385+- /* nothing */
1386+-}
1387+-static void
1388+ gdk_win32_display_push_error_trap (GdkDisplay *display)
1389+ {
1390+ /* nothing */
1391+@@ -665,8 +652,6 @@ gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
1392+ display_class->after_process_all_updates = gdk_win32_display_after_process_all_updates;
1393+ display_class->get_next_serial = gdk_win32_display_get_next_serial;
1394+ display_class->notify_startup_complete = gdk_win32_display_notify_startup_complete;
1395+- display_class->event_data_copy = gdk_win32_display_event_data_copy;
1396+- display_class->event_data_free = gdk_win32_display_event_data_free;
1397+ display_class->create_window_impl = _gdk_win32_display_create_window_impl;
1398+
1399+ display_class->get_keymap = _gdk_win32_display_get_keymap;
1400+diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
1401+index 1db4742..ca9eb33 100644
1402+--- a/gdk/x11/gdkdisplay-x11.c
1403++++ b/gdk/x11/gdkdisplay-x11.c
1404+@@ -2805,19 +2805,6 @@ gdk_x11_set_sm_client_id (const gchar *sm_client_id)
1405+ g_slist_free (displays);
1406+ }
1407+
1408+-static void
1409+-gdk_x11_display_event_data_copy (GdkDisplay *display,
1410+- const GdkEvent *src,
1411+- GdkEvent *dst)
1412+-{
1413+-}
1414+-
1415+-static void
1416+-gdk_x11_display_event_data_free (GdkDisplay *display,
1417+- GdkEvent *event)
1418+-{
1419+-}
1420+-
1421+ static gint
1422+ pop_error_trap (GdkDisplay *display,
1423+ gboolean ignored)
1424+@@ -2889,8 +2876,6 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
1425+ display_class->after_process_all_updates = _gdk_x11_display_after_process_all_updates;
1426+ display_class->get_next_serial = gdk_x11_display_get_next_serial;
1427+ display_class->notify_startup_complete = gdk_x11_display_notify_startup_complete;
1428+- display_class->event_data_copy = gdk_x11_display_event_data_copy;
1429+- display_class->event_data_free = gdk_x11_display_event_data_free;
1430+ display_class->create_window_impl = _gdk_x11_display_create_window_impl;
1431+ display_class->get_keymap = gdk_x11_display_get_keymap;
1432+ display_class->push_error_trap = gdk_x11_display_error_trap_push;
1433+diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
1434+index 103944f..cedddaa 100644
1435 --- a/gtk/gtktooltip.c
1436 +++ b/gtk/gtktooltip.c
1437 @@ -39,6 +39,9 @@
1438@@ -5452,23 +5640,53 @@
1439
1440
1441 /**
1442-@@ -1162,6 +1165,19 @@
1443- {
1444- GtkWidget *toplevel;
1445-
1446+@@ -1168,6 +1171,19 @@ found:
1447+ GTK_WINDOW (toplevel));
1448+ }
1449+ #endif
1450++#ifdef GDK_WINDOWING_MIR
1451++ /* Set the transient parent on the tooltip when running with the Mir
1452++ * backend to allow correct positioning of the tooltip windows */
1453++ if (GDK_IS_MIR_DISPLAY (display))
1454++ {
1455++ GtkWidget *toplevel;
1456++
1457 + toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
1458 + if (GTK_IS_WINDOW (toplevel))
1459 + gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),
1460 + GTK_WINDOW (toplevel));
1461 + }
1462 +#endif
1463-+#ifdef GDK_WINDOWING_MIR
1464-+ /* Set the transient parent on the tooltip when running with the Mir
1465-+ * backend to allow correct positioning of the tooltip windows */
1466-+ if (GDK_IS_MIR_DISPLAY (display))
1467-+ {
1468-+ GtkWidget *toplevel;
1469-+
1470- toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
1471- if (GTK_IS_WINDOW (toplevel))
1472- gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),
1473+
1474+ x -= border.left;
1475+ y -= border.top;
1476+diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
1477+index e846c41..be5ae38 100644
1478+--- a/gtk/gtkwindow.c
1479++++ b/gtk/gtkwindow.c
1480+@@ -79,6 +79,10 @@
1481+ #include "broadway/gdkbroadway.h"
1482+ #endif
1483+
1484++#ifdef GDK_WINDOWING_MIR
1485++#include "mir/gdkmir.h"
1486++#endif
1487++
1488+ /**
1489+ * SECTION:gtkwindow
1490+ * @title: GtkWindow
1491+@@ -5683,6 +5687,11 @@ gtk_window_should_use_csd (GtkWindow *window)
1492+ return TRUE;
1493+ #endif
1494+
1495++#ifdef GDK_WINDOWING_MIR
1496++ if (GDK_IS_MIR_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
1497++ return TRUE;
1498++#endif
1499++
1500+ csd_env = g_getenv ("GTK_CSD");
1501+
1502+ return (g_strcmp0 (csd_env, "1") == 0);
1503+--
1504+2.1.3
1505+
1506
1507=== modified file 'debian/patches/series'
1508--- debian/patches/series 2014-12-11 09:57:23 +0000
1509+++ debian/patches/series 2014-12-13 16:59:39 +0000
1510@@ -19,5 +19,6 @@
1511 x-canonical-accel.patch
1512 message-dialog-restore-traditional-look-on-unity.patch
1513 mir-backend.patch
1514+mir-backend-unmerged.patch
1515 0001-gtkmodelmenuitem-force-icon-scaling.patch
1516 0002-gtkimagemenuitem-force-icon-scaling.patch

Subscribers

People subscribed via source and target branches

to all changes: