Merge lp:~attente/gtk/refresh-mir-backend into lp:~ubuntu-desktop/gtk/ubuntugtk3
- refresh-mir-backend
- Merge into 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 |
Related bugs: |
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 |