1
From 5808594aaff557dfc9ddef82246ddd4ed902a8c5 Mon Sep 17 00:00:00 2001
1
From 122076d4b6f37fa427ea592194f6fe5bacaa9e70 Mon Sep 17 00:00:00 2001
2
2
From: Robert Ancell <robert.ancell@canonical.com>
3
3
Date: Tue, 20 May 2014 10:03:30 +1200
4
Subject: [PATCH] Gdk: add an experimental backend for mir
4
Subject: [PATCH 1/2] Gdk: add an experimental backend for mir
7
7
0f26b26f1d93f002ccd5fe6b6fd636172bfbb24b
8
887b7356c369e58a959b99d88246df8303e34531
8
9
c41231cc0fdc791a7a69cdd77af51c8162f44aa4
9
10
053b65a21af312b8b9361367939a221aa7f474a7
10
11
2fdb266c0d0f038a74decda7440ebbb7bdb02e68
12
063f79b5946198eb5efec0133627a12a75d154a7
11
13
ec729d06491a2a5bb9ba3f287fbc102b5036bc8f
12
14
92c2e99ddac668d729f42bff501f70fb56fbb76c
13
15
c6de20496c4075a0f1daf8be450d8522aaaea82f
18
20
4e4ccb76cd8b5b7dc4342f35fcf64ace30019641
19
21
c7e7e350839b19732a2eea7a2151c0c3a76c2544
20
22
c42146d88c324189a3a70189f1a60156697ad9ab
23
8bc523ef5915d4ab7ced843929c8e3f1bf754016
24
f5c5e9385e960a74ce38bc58a30fa36474d0cd6a
25
5ff39b207b373754007a99be6286bb7b93ecb49d
26
acfc4f891030d7339c221bdb57df9af8994fd6e0
27
da8fdab87b4cc96b9614ccb6abb0682def324f30
28
e0e46a4f6bf852d5ead8b8c015aa8eaf4e80599e
29
60e185e496180dad0be322a970e4aa17be1c8809
30
b8925253b66a63594f5d373dc10c564f0d184eb4
24
docs/reference/gtk/Makefile.am | 1 +
25
docs/reference/gtk/building.sgml | 11 +-
26
docs/reference/gtk/gtk-docs.sgml | 1 +
27
docs/reference/gtk/mir.xml | 35 +
28
docs/reference/gtk/running.sgml | 5 +
29
gdk/Makefile.am | 6 +-
30
gdk/gdkdisplaymanager.c | 7 +
31
gdk/mir/Makefile.am | 39 ++
32
gdk/mir/gdkmir-debug.c | 293 +++++++++
33
gdk/mir/gdkmir-private.h | 90 +++
34
gdk/mir/gdkmir.h | 39 ++
35
gdk/mir/gdkmircursor.c | 177 +++++
36
gdk/mir/gdkmirdevicemanager.c | 120 ++++
37
gdk/mir/gdkmirdisplay.c | 565 ++++++++++++++++
38
gdk/mir/gdkmireventsource.c | 630 ++++++++++++++++++
39
gdk/mir/gdkmirkeyboard.c | 173 +++++
40
gdk/mir/gdkmirkeymap.c | 466 ++++++++++++++
41
gdk/mir/gdkmirpointer.c | 250 ++++++++
42
gdk/mir/gdkmirscreen.c | 801 +++++++++++++++++++++++
43
gdk/mir/gdkmirwindow.c | 52 ++
44
gdk/mir/gdkmirwindowimpl.c | 1320 ++++++++++++++++++++++++++++++++++++++
45
gtk/gtktooltip.c | 16 +
46
24 files changed, 5130 insertions(+), 7 deletions(-)
34
docs/reference/gtk/Makefile.am | 1 +
35
docs/reference/gtk/building.sgml | 11 +-
36
docs/reference/gtk/gtk-docs.sgml | 1 +
37
docs/reference/gtk/mir.xml | 35 +
38
docs/reference/gtk/running.sgml | 5 +
39
gdk/Makefile.am | 6 +-
40
gdk/broadway/gdkdisplay-broadway.c | 15 -
41
gdk/gdkdisplay.c | 15 +
42
gdk/gdkdisplaymanager.c | 7 +
43
gdk/mir/Makefile.am | 39 ++
44
gdk/mir/gdkmir-debug.c | 293 ++++++++
45
gdk/mir/gdkmir-private.h | 92 +++
46
gdk/mir/gdkmir.h | 39 ++
47
gdk/mir/gdkmircursor.c | 177 +++++
48
gdk/mir/gdkmirdevicemanager.c | 120 ++++
49
gdk/mir/gdkmirdisplay.c | 549 +++++++++++++++
50
gdk/mir/gdkmireventsource.c | 631 +++++++++++++++++
51
gdk/mir/gdkmirkeyboard.c | 173 +++++
52
gdk/mir/gdkmirkeymap.c | 466 +++++++++++++
53
gdk/mir/gdkmirpointer.c | 250 +++++++
54
gdk/mir/gdkmirscreen.c | 804 ++++++++++++++++++++++
55
gdk/mir/gdkmirwindow.c | 52 ++
56
gdk/mir/gdkmirwindowimpl.c | 1336 ++++++++++++++++++++++++++++++++++++
57
gdk/wayland/gdkdisplay-wayland.c | 15 -
58
gdk/win32/gdkdisplay-win32.c | 15 -
59
gdk/x11/gdkdisplay-x11.c | 15 -
60
gtk/gtktooltip.c | 16 +
62
30 files changed, 5161 insertions(+), 67 deletions(-)
47
63
create mode 100644 docs/reference/gtk/mir.xml
48
64
create mode 100644 gdk/mir/Makefile.am
49
65
create mode 100644 gdk/mir/gdkmir-debug.c
97
===================================================================
112
diff --git a/configure.ac b/configure.ac
113
index cccdae9..43e6245 100644
98
114
--- a/configure.ac
99
115
+++ b/configure.ac
116
@@ -48,6 +48,7 @@ m4_define([cairo_required_version], [1.12.0])
117
m4_define([gdk_pixbuf_required_version], [2.30.0])
118
m4_define([introspection_required_version], [1.39.0])
119
m4_define([wayland_required_version], [1.5.91])
120
+m4_define([mirclient_required_version], [0.9.0])
121
GLIB_REQUIRED_VERSION=glib_required_version
122
PANGO_REQUIRED_VERSION=pango_required_version
123
ATK_REQUIRED_VERSION=atk_required_version
124
@@ -329,6 +330,10 @@ AC_ARG_ENABLE(wayland-backend,
101
125
[AS_HELP_STRING([--enable-wayland-backend],
102
126
[enable the wayland gdk backend])],
103
127
[backend_set=yes])
306
331
if HAVE_INTROSPECTION
308
333
introspection_files = \
309
Index: b/gdk/gdkdisplaymanager.c
310
===================================================================
334
diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
335
index 53c675d..307728f 100644
336
--- a/gdk/broadway/gdkdisplay-broadway.c
337
+++ b/gdk/broadway/gdkdisplay-broadway.c
338
@@ -330,19 +330,6 @@ gdk_broadway_display_get_next_serial (GdkDisplay *display)
339
return _gdk_broadway_server_get_next_serial (broadway_display->server);
343
-gdk_broadway_display_event_data_copy (GdkDisplay *display,
344
- const GdkEvent *src,
350
-gdk_broadway_display_event_data_free (GdkDisplay *display,
356
gdk_broadway_display_show_keyboard (GdkBroadwayDisplay *display)
358
@@ -398,8 +385,6 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
359
display_class->after_process_all_updates = _gdk_broadway_display_after_process_all_updates;
360
display_class->get_next_serial = gdk_broadway_display_get_next_serial;
361
display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
362
- display_class->event_data_copy = gdk_broadway_display_event_data_copy;
363
- display_class->event_data_free = gdk_broadway_display_event_data_free;
364
display_class->create_window_impl = _gdk_broadway_display_create_window_impl;
365
display_class->get_keymap = _gdk_broadway_display_get_keymap;
366
display_class->get_selection_owner = _gdk_broadway_display_get_selection_owner;
367
diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
368
index 34b6cab..5ccfe01 100644
369
--- a/gdk/gdkdisplay.c
370
+++ b/gdk/gdkdisplay.c
371
@@ -111,6 +111,19 @@ gdk_display_real_opened (GdkDisplay *display)
375
+gdk_display_real_event_data_copy (GdkDisplay *display,
376
+ const GdkEvent *src,
382
+gdk_display_real_event_data_free (GdkDisplay *display,
388
gdk_display_class_init (GdkDisplayClass *class)
390
GObjectClass *object_class = G_OBJECT_CLASS (class);
391
@@ -123,6 +136,8 @@ gdk_display_class_init (GdkDisplayClass *class)
393
class->opened = gdk_display_real_opened;
394
class->make_default = gdk_display_real_make_default;
395
+ class->event_data_copy = gdk_display_real_event_data_copy;
396
+ class->event_data_free = gdk_display_real_event_data_free;
399
* GdkDisplay::opened:
400
diff --git a/gdk/gdkdisplaymanager.c b/gdk/gdkdisplaymanager.c
401
index c6813d0..c9afbca 100644
311
402
--- a/gdk/gdkdisplaymanager.c
312
403
+++ b/gdk/gdkdisplaymanager.c
313
404
@@ -60,6 +60,10 @@
802
897
+#define GDK_IS_MIR_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_DISPLAY))
804
899
+#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())
805
+#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_MIR))
900
+#define GDK_IS_WINDOW_MIR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_WINDOW))
807
902
+GDK_AVAILABLE_IN_3_10
808
903
+GType gdk_mir_display_get_type (void);
810
905
+GDK_AVAILABLE_IN_3_10
811
+struct MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
906
+MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
813
908
+GDK_AVAILABLE_IN_3_10
814
909
+GType gdk_mir_window_get_type (void);
816
911
+#endif /* __GDK_MIR_H__ */
817
Index: b/gdk/mir/gdkmircursor.c
818
===================================================================
912
diff --git a/gdk/mir/gdkmircursor.c b/gdk/mir/gdkmircursor.c
914
index 0000000..7ce158a
820
916
+++ b/gdk/mir/gdkmircursor.c
821
917
@@ -0,0 +1,177 @@
5438
5527
+ impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region;
5439
5528
+ impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width;
5441
Index: b/gtk/gtktooltip.c
5442
===================================================================
5530
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
5531
index 5438a51..82c6ee1 100644
5532
--- a/gdk/wayland/gdkdisplay-wayland.c
5533
+++ b/gdk/wayland/gdkdisplay-wayland.c
5534
@@ -431,19 +431,6 @@ gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
5539
-gdk_wayland_display_event_data_copy (GdkDisplay *display,
5540
- const GdkEvent *src,
5546
-gdk_wayland_display_event_data_free (GdkDisplay *display,
5552
_gdk_wayland_display_get_keymap (GdkDisplay *display)
5554
@@ -534,8 +521,6 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass * class)
5555
display_class->after_process_all_updates = gdk_wayland_display_after_process_all_updates;
5556
display_class->get_next_serial = gdk_wayland_display_get_next_serial;
5557
display_class->notify_startup_complete = gdk_wayland_display_notify_startup_complete;
5558
- display_class->event_data_copy = gdk_wayland_display_event_data_copy;
5559
- display_class->event_data_free = gdk_wayland_display_event_data_free;
5560
display_class->create_window_impl = _gdk_wayland_display_create_window_impl;
5561
display_class->get_keymap = _gdk_wayland_display_get_keymap;
5562
display_class->push_error_trap = gdk_wayland_display_push_error_trap;
5563
diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c
5564
index 2d73c30..97d0e3e 100644
5565
--- a/gdk/win32/gdkdisplay-win32.c
5566
+++ b/gdk/win32/gdkdisplay-win32.c
5567
@@ -600,19 +600,6 @@ gdk_win32_display_notify_startup_complete (GdkDisplay *display,
5571
-gdk_win32_display_event_data_copy (GdkDisplay *display,
5572
- const GdkEvent *src,
5578
-gdk_win32_display_event_data_free (GdkDisplay *display,
5584
gdk_win32_display_push_error_trap (GdkDisplay *display)
5587
@@ -665,8 +652,6 @@ gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
5588
display_class->after_process_all_updates = gdk_win32_display_after_process_all_updates;
5589
display_class->get_next_serial = gdk_win32_display_get_next_serial;
5590
display_class->notify_startup_complete = gdk_win32_display_notify_startup_complete;
5591
- display_class->event_data_copy = gdk_win32_display_event_data_copy;
5592
- display_class->event_data_free = gdk_win32_display_event_data_free;
5593
display_class->create_window_impl = _gdk_win32_display_create_window_impl;
5595
display_class->get_keymap = _gdk_win32_display_get_keymap;
5596
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
5597
index 1db4742..ca9eb33 100644
5598
--- a/gdk/x11/gdkdisplay-x11.c
5599
+++ b/gdk/x11/gdkdisplay-x11.c
5600
@@ -2805,19 +2805,6 @@ gdk_x11_set_sm_client_id (const gchar *sm_client_id)
5601
g_slist_free (displays);
5605
-gdk_x11_display_event_data_copy (GdkDisplay *display,
5606
- const GdkEvent *src,
5612
-gdk_x11_display_event_data_free (GdkDisplay *display,
5618
pop_error_trap (GdkDisplay *display,
5620
@@ -2889,8 +2876,6 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
5621
display_class->after_process_all_updates = _gdk_x11_display_after_process_all_updates;
5622
display_class->get_next_serial = gdk_x11_display_get_next_serial;
5623
display_class->notify_startup_complete = gdk_x11_display_notify_startup_complete;
5624
- display_class->event_data_copy = gdk_x11_display_event_data_copy;
5625
- display_class->event_data_free = gdk_x11_display_event_data_free;
5626
display_class->create_window_impl = _gdk_x11_display_create_window_impl;
5627
display_class->get_keymap = gdk_x11_display_get_keymap;
5628
display_class->push_error_trap = gdk_x11_display_error_trap_push;
5629
diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
5630
index 103944f..cedddaa 100644
5443
5631
--- a/gtk/gtktooltip.c
5444
5632
+++ b/gtk/gtktooltip.c
5445
5633
@@ -39,6 +39,9 @@
5455
@@ -1162,6 +1165,19 @@
5457
GtkWidget *toplevel;
5643
@@ -1168,6 +1171,19 @@ found:
5644
GTK_WINDOW (toplevel));
5647
+#ifdef GDK_WINDOWING_MIR
5648
+ /* Set the transient parent on the tooltip when running with the Mir
5649
+ * backend to allow correct positioning of the tooltip windows */
5650
+ if (GDK_IS_MIR_DISPLAY (display))
5652
+ GtkWidget *toplevel;
5459
5654
+ toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
5460
5655
+ if (GTK_IS_WINDOW (toplevel))
5461
5656
+ gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),
5462
5657
+ GTK_WINDOW (toplevel));
5465
+#ifdef GDK_WINDOWING_MIR
5466
+ /* Set the transient parent on the tooltip when running with the Mir
5467
+ * backend to allow correct positioning of the tooltip windows */
5468
+ if (GDK_IS_MIR_DISPLAY (display))
5470
+ GtkWidget *toplevel;
5472
toplevel = gtk_widget_get_toplevel (tooltip->tooltip_widget);
5473
if (GTK_IS_WINDOW (toplevel))
5474
gtk_window_set_transient_for (GTK_WINDOW (tooltip->current_window),
5663
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
5664
index e846c41..be5ae38 100644
5665
--- a/gtk/gtkwindow.c
5666
+++ b/gtk/gtkwindow.c
5668
#include "broadway/gdkbroadway.h"
5671
+#ifdef GDK_WINDOWING_MIR
5672
+#include "mir/gdkmir.h"
5678
@@ -5683,6 +5687,11 @@ gtk_window_should_use_csd (GtkWindow *window)
5682
+#ifdef GDK_WINDOWING_MIR
5683
+ if (GDK_IS_MIR_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
5687
csd_env = g_getenv ("GTK_CSD");
5689
return (g_strcmp0 (csd_env, "1") == 0);