Merge lp:~attente/gtk/gtk-mir into lp:~ubuntu-desktop/gtk/ubuntugtk3
- gtk-mir
- Merge into ubuntugtk3
Status: | Merged |
---|---|
Merged at revision: | 558 |
Proposed branch: | lp:~attente/gtk/gtk-mir |
Merge into: | lp:~ubuntu-desktop/gtk/ubuntugtk3 |
Diff against target: |
953 lines (+918/-0) 6 files modified
debian/changelog (+12/-0) debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch (+51/-0) debian/patches/0024-mir-re-write-settings-implementation.patch (+796/-0) debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch (+30/-0) debian/patches/0026-mir-set-application-name-when-creating-connection.patch (+25/-0) debian/patches/series (+4/-0) |
To merge this branch: | bzr merge lp:~attente/gtk/gtk-mir |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jeremy Bícha | Approve | ||
Review via email: mp+321739@code.launchpad.net |
Commit message
* debian/
* debian/
* debian/
* debian/
* debian/
- Add upstream patches from gtk-3-22 branch
- Fix LP: #1670390, LP: #1666435, LP: #1618298
Description of the change
* debian/
* debian/
* debian/
* debian/
* debian/
- Add upstream patches from gtk-3-22 branch
- Fix LP: #1670390, LP: #1666435, LP: #1618298
- 559. By William Hua
-
Squash in commit 6e711beb0bdc2a3
0bfd948e5a6a077 cd6fe82493 to clean up an ugly function.
Preview Diff
1 | === modified file 'debian/changelog' |
2 | --- debian/changelog 2017-03-24 01:32:46 +0000 |
3 | +++ debian/changelog 2017-04-03 17:42:43 +0000 |
4 | @@ -1,3 +1,15 @@ |
5 | +gtk+3.0 (3.22.11-0ubuntu3) UNRELEASED; urgency=medium |
6 | + |
7 | + * debian/patches/series: |
8 | + * debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch: |
9 | + * debian/patches/0024-mir-re-write-settings-implementation.patch: |
10 | + * debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch: |
11 | + * debian/patches/0026-mir-set-application-name-when-creating-connection.patch: |
12 | + - Add upstream patches from gtk-3-22 branch |
13 | + - Fix LP: #1670390, LP: #1666435, LP: #1618298 |
14 | + |
15 | + -- William Hua <william@attente.ca> Mon, 03 Apr 2017 11:06:11 -0400 |
16 | + |
17 | gtk+3.0 (3.22.11-0ubuntu2) zesty; urgency=medium |
18 | |
19 | * Drop hack to disable Mir backend on s390x |
20 | |
21 | === added file 'debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch' |
22 | --- debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch 1970-01-01 00:00:00 +0000 |
23 | +++ debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch 2017-04-03 17:42:43 +0000 |
24 | @@ -0,0 +1,51 @@ |
25 | +From ff1a78788f82dbb73e6369d05a0445c7c7f7155b Mon Sep 17 00:00:00 2001 |
26 | +From: William Hua <william.hua@canonical.com> |
27 | +Date: Tue, 21 Mar 2017 11:25:36 -0400 |
28 | +Subject: [PATCH 01/32] mir: always emit a resize when creating windows |
29 | + |
30 | +--- |
31 | + gdk/mir/gdkmirwindowimpl.c | 21 ++++++++++++++++++++- |
32 | + 1 file changed, 20 insertions(+), 1 deletion(-) |
33 | + |
34 | +diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c |
35 | +index f0a76872d2..9f9107611e 100644 |
36 | +--- a/gdk/mir/gdkmirwindowimpl.c |
37 | ++++ b/gdk/mir/gdkmirwindowimpl.c |
38 | +@@ -581,6 +581,25 @@ generate_configure_event (GdkWindow *window, |
39 | + } |
40 | + |
41 | + static void |
42 | ++synthesize_resize (GdkWindow *window) |
43 | ++{ |
44 | ++ GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); |
45 | ++ MirWindowParameters params; |
46 | ++ |
47 | ++ if (!impl->mir_window) |
48 | ++ return; |
49 | ++ |
50 | ++ mir_window_get_parameters (impl->mir_window, ¶ms); |
51 | ++ |
52 | ++ window->width = params.width; |
53 | ++ window->height = params.height; |
54 | ++ |
55 | ++ _gdk_window_update_size (window); |
56 | ++ |
57 | ++ generate_configure_event (window, window->width, window->height); |
58 | ++} |
59 | ++ |
60 | ++static void |
61 | + maybe_synthesize_resize (GdkWindow *window) |
62 | + { |
63 | + GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); |
64 | +@@ -635,7 +654,7 @@ ensure_mir_window_full (GdkWindow *window, |
65 | + impl->pending_spec_update = FALSE; |
66 | + impl->buffer_stream = mir_window_get_buffer_stream (impl->mir_window); |
67 | + |
68 | +- maybe_synthesize_resize (window); |
69 | ++ synthesize_resize (window); |
70 | + |
71 | + /* FIXME: Ignore some events until shown */ |
72 | + mir_window_set_event_handler (impl->mir_window, event_cb, window_ref); |
73 | +-- |
74 | +2.11.0 |
75 | + |
76 | |
77 | === added file 'debian/patches/0024-mir-re-write-settings-implementation.patch' |
78 | --- debian/patches/0024-mir-re-write-settings-implementation.patch 1970-01-01 00:00:00 +0000 |
79 | +++ debian/patches/0024-mir-re-write-settings-implementation.patch 2017-04-03 17:42:43 +0000 |
80 | @@ -0,0 +1,796 @@ |
81 | +From ec70eb8ae0c2e941d0677803f4b1bdf9f7273be6 Mon Sep 17 00:00:00 2001 |
82 | +From: William Hua <william.hua@canonical.com> |
83 | +Date: Fri, 31 Mar 2017 15:14:16 -0400 |
84 | +Subject: [PATCH 24/32] mir: re-write settings implementation |
85 | + |
86 | +This is a squash of commits |
87 | +01b73072961f8c62255cf2b66dba4e55d36fd646 and |
88 | +6e711beb0bdc2a30bfd948e5a6a077cd6fe82493. |
89 | +--- |
90 | + gdk/mir/gdkmirscreen.c | 679 +++++++++++++++++++++++++++++++++++-------------- |
91 | + 1 file changed, 492 insertions(+), 187 deletions(-) |
92 | + |
93 | +diff --git a/gdk/mir/gdkmirscreen.c b/gdk/mir/gdkmirscreen.c |
94 | +index c1a189908e..0ddcb8787a 100644 |
95 | +--- a/gdk/mir/gdkmirscreen.c |
96 | ++++ b/gdk/mir/gdkmirscreen.c |
97 | +@@ -48,9 +48,15 @@ struct GdkMirScreen |
98 | + /* Current monitor configuration */ |
99 | + MirDisplayConfig *display_config; |
100 | + |
101 | ++ /* Display format */ |
102 | + GdkVisual *visual; |
103 | + |
104 | ++ /* Root window */ |
105 | + GdkWindow *root_window; |
106 | ++ |
107 | ++ /* Settings */ |
108 | ++ GHashTable *settings_objects; |
109 | ++ GHashTable *current_settings; |
110 | + }; |
111 | + |
112 | + struct GdkMirScreenClass |
113 | +@@ -168,6 +174,11 @@ _gdk_mir_screen_new (GdkDisplay *display) |
114 | + static void |
115 | + gdk_mir_screen_dispose (GObject *object) |
116 | + { |
117 | ++ GdkMirScreen *screen = GDK_MIR_SCREEN (object); |
118 | ++ |
119 | ++ g_clear_pointer (&screen->current_settings, g_hash_table_unref); |
120 | ++ g_clear_pointer (&screen->settings_objects, g_hash_table_unref); |
121 | ++ |
122 | + G_OBJECT_CLASS (gdk_mir_screen_parent_class)->dispose (object); |
123 | + } |
124 | + |
125 | +@@ -459,260 +470,551 @@ gdk_mir_screen_broadcast_client_message (GdkScreen *screen, |
126 | + // FIXME |
127 | + } |
128 | + |
129 | +-static gboolean |
130 | +-gdk_mir_screen_get_setting (GdkScreen *screen, |
131 | +- const gchar *name, |
132 | +- GValue *value) |
133 | ++static void setting_changed (GSettings *settings, |
134 | ++ const gchar *key, |
135 | ++ GdkMirScreen *screen); |
136 | ++ |
137 | ++static GSettings * |
138 | ++get_settings (GdkMirScreen *screen, |
139 | ++ const gchar *schema_id) |
140 | + { |
141 | +- if (strcmp (name, "gtk-theme-name") == 0) |
142 | +- { |
143 | +- g_value_set_string (value, "Ambiance"); |
144 | +- return TRUE; |
145 | +- } |
146 | ++ GSettings *settings; |
147 | ++ GSettingsSchemaSource *source; |
148 | ++ GSettingsSchema *schema; |
149 | + |
150 | +- if (strcmp (name, "gtk-font-name") == 0) |
151 | +- { |
152 | +- g_value_set_string (value, "Ubuntu"); |
153 | +- return TRUE; |
154 | +- } |
155 | ++ settings = g_hash_table_lookup (screen->settings_objects, schema_id); |
156 | + |
157 | +- if (strcmp (name, "gtk-enable-animations") == 0) |
158 | +- { |
159 | +- g_value_set_boolean (value, TRUE); |
160 | +- return TRUE; |
161 | +- } |
162 | ++ if (settings) |
163 | ++ return g_object_ref (settings); |
164 | + |
165 | +- if (strcmp (name, "gtk-xft-dpi") == 0) |
166 | +- { |
167 | +- g_value_set_int (value, 96 * 1024); |
168 | +- return TRUE; |
169 | +- } |
170 | ++ source = g_settings_schema_source_get_default (); |
171 | + |
172 | +- if (strcmp (name, "gtk-xft-antialias") == 0) |
173 | ++ if (!source) |
174 | + { |
175 | +- g_value_set_int (value, TRUE); |
176 | +- return TRUE; |
177 | ++ g_warning ("no schemas installed"); |
178 | ++ return NULL; |
179 | + } |
180 | + |
181 | +- if (strcmp (name, "gtk-xft-hinting") == 0) |
182 | +- { |
183 | +- g_value_set_int (value, TRUE); |
184 | +- return TRUE; |
185 | +- } |
186 | ++ schema = g_settings_schema_source_lookup (source, schema_id, TRUE); |
187 | + |
188 | +- if (strcmp (name, "gtk-xft-hintstyle") == 0) |
189 | ++ if (!schema) |
190 | + { |
191 | +- g_value_set_static_string (value, "hintfull"); |
192 | +- return TRUE; |
193 | ++ g_warning ("schema not found: %s", schema_id); |
194 | ++ return NULL; |
195 | + } |
196 | + |
197 | +- if (strcmp (name, "gtk-xft-rgba") == 0) |
198 | +- { |
199 | +- g_value_set_static_string (value, "rgba"); |
200 | +- return TRUE; |
201 | +- } |
202 | ++ settings = g_settings_new_full (schema, NULL, NULL); |
203 | ++ g_signal_connect (settings, "changed", G_CALLBACK (setting_changed), screen); |
204 | ++ g_hash_table_insert (screen->settings_objects, g_strdup (schema_id), g_object_ref (settings)); |
205 | ++ g_settings_schema_unref (schema); |
206 | ++ return settings; |
207 | ++} |
208 | + |
209 | +- if (g_str_equal (name, "gtk-modules")) |
210 | +- { |
211 | +- g_value_set_string (value, NULL); |
212 | +- return TRUE; |
213 | +- } |
214 | ++static GVariant * |
215 | ++read_setting (GdkMirScreen *screen, |
216 | ++ const gchar *schema_id, |
217 | ++ const gchar *key) |
218 | ++{ |
219 | ++ GSettings *settings; |
220 | ++ GVariant *variant; |
221 | + |
222 | +- if (g_str_equal (name, "gtk-application-prefer-dark-theme")) |
223 | +- { |
224 | +- g_value_set_boolean (value, FALSE); |
225 | +- return TRUE; |
226 | +- } |
227 | ++ settings = get_settings (screen, schema_id); |
228 | + |
229 | +- if (g_str_equal (name, "gtk-key-theme-name")) |
230 | +- { |
231 | +- g_value_set_string (value, NULL); |
232 | +- return TRUE; |
233 | +- } |
234 | ++ if (!settings) |
235 | ++ return NULL; |
236 | + |
237 | +- if (g_str_equal (name, "gtk-double-click-time")) |
238 | +- { |
239 | +- g_value_set_int (value, 250); |
240 | +- return TRUE; |
241 | +- } |
242 | ++ variant = g_settings_get_value (settings, key); |
243 | ++ g_object_unref (settings); |
244 | ++ return variant; |
245 | ++} |
246 | + |
247 | +- if (g_str_equal (name, "gtk-double-click-distance")) |
248 | +- { |
249 | +- g_value_set_int (value, 5); |
250 | +- return TRUE; |
251 | +- } |
252 | ++static void |
253 | ++change_setting (GdkMirScreen *screen, |
254 | ++ const gchar *name, |
255 | ++ GVariant *variant) |
256 | ++{ |
257 | ++ GVariant *old_variant; |
258 | ++ GdkEventSetting event; |
259 | + |
260 | +- if (g_str_equal (name, "gtk-cursor-theme-name")) |
261 | +- { |
262 | +- g_value_set_string (value, "Raleigh"); |
263 | +- return TRUE; |
264 | +- } |
265 | ++ old_variant = g_hash_table_lookup (screen->current_settings, name); |
266 | + |
267 | +- if (g_str_equal (name, "gtk-cursor-theme-size")) |
268 | +- { |
269 | +- g_value_set_int (value, 128); |
270 | +- return TRUE; |
271 | +- } |
272 | ++ if (variant == old_variant) |
273 | ++ return; |
274 | + |
275 | +- if (g_str_equal (name, "gtk-icon-theme-name")) |
276 | +- { |
277 | +- g_value_set_string (value, "hicolor"); |
278 | +- return TRUE; |
279 | +- } |
280 | ++ if (variant && old_variant && g_variant_equal (variant, old_variant)) |
281 | ++ return; |
282 | + |
283 | +- if (g_str_equal (name, "gtk-shell-shows-app-menu")) |
284 | +- { |
285 | +- g_value_set_boolean (value, FALSE); |
286 | +- return TRUE; |
287 | +- } |
288 | ++ event.type = GDK_SETTING; |
289 | ++ event.window = gdk_screen_get_root_window (GDK_SCREEN (screen)); |
290 | ++ event.send_event = FALSE; |
291 | ++ event.name = g_strdup (name); |
292 | + |
293 | +- if (g_str_equal (name, "gtk-shell-shows-menubar")) |
294 | ++ if (variant) |
295 | + { |
296 | +- g_value_set_boolean (value, FALSE); |
297 | +- return TRUE; |
298 | ++ event.action = old_variant ? GDK_SETTING_ACTION_CHANGED : GDK_SETTING_ACTION_NEW; |
299 | ++ g_hash_table_insert (screen->current_settings, g_strdup (name), g_variant_ref_sink (variant)); |
300 | + } |
301 | +- |
302 | +- if (g_str_equal (name, "gtk-shell-shows-desktop")) |
303 | ++ else |
304 | + { |
305 | +- g_value_set_boolean (value, FALSE); |
306 | +- return TRUE; |
307 | ++ event.action = GDK_SETTING_ACTION_DELETED; |
308 | ++ g_hash_table_remove (screen->current_settings, name); |
309 | + } |
310 | + |
311 | +- if (g_str_equal (name, "gtk-recent-files-enabled")) |
312 | +- { |
313 | +- g_value_set_boolean (value, FALSE); |
314 | +- return TRUE; |
315 | +- } |
316 | ++ gdk_event_put ((const GdkEvent *) &event); |
317 | ++ g_free (event.name); |
318 | ++} |
319 | + |
320 | +- if (g_str_equal (name, "gtk-alternative-sort-arrows")) |
321 | +- { |
322 | +- g_value_set_boolean (value, FALSE); |
323 | +- return TRUE; |
324 | +- } |
325 | ++static const struct |
326 | ++{ |
327 | ++ const gchar *name; |
328 | ++ const gchar *schema_id; |
329 | ++ const gchar *key; |
330 | ++} SETTINGS_MAP[] = { |
331 | ++ { |
332 | ++ "gtk-double-click-time", |
333 | ++ "org.gnome.settings-daemon.peripherals.mouse", |
334 | ++ "double-click" |
335 | ++ }, |
336 | ++ { |
337 | ++ "gtk-cursor-blink", |
338 | ++ "org.gnome.desktop.interface", |
339 | ++ "cursor-blink" |
340 | ++ }, |
341 | ++ { |
342 | ++ "gtk-cursor-blink-time", |
343 | ++ "org.gnome.desktop.interface", |
344 | ++ "cursor-blink-time" |
345 | ++ }, |
346 | ++ { |
347 | ++ "gtk-cursor-blink-timeout", |
348 | ++ "org.gnome.desktop.interface", |
349 | ++ "cursor-blink-timeout" |
350 | ++ }, |
351 | ++ { |
352 | ++ "gtk-theme-name", |
353 | ++ "org.gnome.desktop.interface", |
354 | ++ "gtk-theme" |
355 | ++ }, |
356 | ++ { |
357 | ++ "gtk-icon-theme-name", |
358 | ++ "org.gnome.desktop.interface", |
359 | ++ "icon-theme" |
360 | ++ }, |
361 | ++ { |
362 | ++ "gtk-key-theme-name", |
363 | ++ "org.gnome.desktop.interface", |
364 | ++ "gtk-key-theme" |
365 | ++ }, |
366 | ++ { |
367 | ++ "gtk-dnd-drag-threshold", |
368 | ++ "org.gnome.settings-daemon.peripherals.mouse", |
369 | ++ "drag-threshold" |
370 | ++ }, |
371 | ++ { |
372 | ++ "gtk-font-name", |
373 | ++ "org.gnome.desktop.interface", |
374 | ++ "font-name" |
375 | ++ }, |
376 | ++ { |
377 | ++ "gtk-xft-antialias", |
378 | ++ "org.gnome.settings-daemon.plugins.xsettings", |
379 | ++ "antialiasing" |
380 | ++ }, |
381 | ++ { |
382 | ++ "gtk-xft-hinting", |
383 | ++ "org.gnome.settings-daemon.plugins.xsettings", |
384 | ++ "hinting" |
385 | ++ }, |
386 | ++ { |
387 | ++ "gtk-xft-hintstyle", |
388 | ++ "org.gnome.settings-daemon.plugins.xsettings", |
389 | ++ "hinting" |
390 | ++ }, |
391 | ++ { |
392 | ++ "gtk-xft-rgba", |
393 | ++ "org.gnome.settings-daemon.plugins.xsettings", |
394 | ++ "rgba-order" |
395 | ++ }, |
396 | ++ { |
397 | ++ "gtk-xft-dpi", |
398 | ++ "org.gnome.desktop.interface", |
399 | ++ "text-scaling-factor" |
400 | ++ }, |
401 | ++ { |
402 | ++ "gtk-cursor-theme-name", |
403 | ++ "org.gnome.desktop.interface", |
404 | ++ "cursor-theme" |
405 | ++ }, |
406 | ++ { |
407 | ++ "gtk-cursor-theme-size", |
408 | ++ "org.gnome.desktop.interface", |
409 | ++ "cursor-size" |
410 | ++ }, |
411 | ++ { |
412 | ++ "gtk-enable-animations", |
413 | ++ "org.gnome.desktop.interface", |
414 | ++ "enable-animations" |
415 | ++ }, |
416 | ++ { |
417 | ++ "gtk-im-module", |
418 | ++ "org.gnome.desktop.interface", |
419 | ++ "gtk-im-module" |
420 | ++ }, |
421 | ++ { |
422 | ++ "gtk-recent-files-max-age", |
423 | ++ "org.gnome.desktop.privacy", |
424 | ++ "recent-files-max-age" |
425 | ++ }, |
426 | ++ { |
427 | ++ "gtk-sound-theme-name", |
428 | ++ "org.gnome.desktop.sound", |
429 | ++ "theme-name" |
430 | ++ }, |
431 | ++ { |
432 | ++ "gtk-enable-input-feedback-sounds", |
433 | ++ "org.gnome.desktop.sound", |
434 | ++ "input-feedback-sounds" |
435 | ++ }, |
436 | ++ { |
437 | ++ "gtk-enable-event-sounds", |
438 | ++ "org.gnome.desktop.sound", |
439 | ++ "event-sounds" |
440 | ++ }, |
441 | ++ { |
442 | ++ "gtk-shell-shows-desktop", |
443 | ++ "org.gnome.desktop.background", |
444 | ++ "show-desktop-icons" |
445 | ++ }, |
446 | ++ { |
447 | ++ "gtk-decoration-layout", |
448 | ++ "org.gnome.desktop.wm.preferences", |
449 | ++ "button-layout" |
450 | ++ }, |
451 | ++ { |
452 | ++ "gtk-titlebar-double-click", |
453 | ++ "org.gnome.desktop.wm.preferences", |
454 | ++ "action-double-click-titlebar" |
455 | ++ }, |
456 | ++ { |
457 | ++ "gtk-titlebar-middle-click", |
458 | ++ "org.gnome.desktop.wm.preferences", |
459 | ++ "action-middle-click-titlebar" |
460 | ++ }, |
461 | ++ { |
462 | ++ "gtk-titlebar-right-click", |
463 | ++ "org.gnome.desktop.wm.preferences", |
464 | ++ "action-right-click-titlebar" |
465 | ++ }, |
466 | ++ { |
467 | ++ "gtk-enable-primary-paste", |
468 | ++ "org.gnome.desktop.interface", |
469 | ++ "gtk-enable-primary-paste" |
470 | ++ }, |
471 | ++ { |
472 | ++ "gtk-recent-files-enabled", |
473 | ++ "org.gnome.desktop.privacy", |
474 | ++ "remember-recent-files" |
475 | ++ }, |
476 | ++ { |
477 | ++ "gtk-keynav-use-caret", |
478 | ++ "org.gnome.desktop.a11y", |
479 | ++ "always-show-text-caret" |
480 | ++ }, |
481 | ++ { NULL } |
482 | ++}; |
483 | + |
484 | +- if (g_str_equal (name, "gtk-enable-accels")) |
485 | +- { |
486 | +- g_value_set_boolean (value, TRUE); |
487 | +- return TRUE; |
488 | +- } |
489 | ++static guint |
490 | ++get_scaling_factor (GdkMirScreen *screen) |
491 | ++{ |
492 | ++ GVariant *variant; |
493 | ++ guint scaling_factor; |
494 | + |
495 | +- if (g_str_equal (name, "gtk-enable-mnemonics")) |
496 | +- { |
497 | +- g_value_set_boolean (value, TRUE); |
498 | +- return TRUE; |
499 | +- } |
500 | ++ variant = read_setting (screen, "org.gnome.desktop.interface", "scaling-factor"); |
501 | + |
502 | +- if (g_str_equal (name, "gtk-menu-images")) |
503 | ++ if (!variant) |
504 | + { |
505 | +- g_value_set_boolean (value, FALSE); |
506 | +- return TRUE; |
507 | ++ g_warning ("no scaling factor: org.gnome.desktop.interface.scaling-factor"); |
508 | ++ variant = g_variant_ref_sink (g_variant_new_uint32 (0)); |
509 | + } |
510 | + |
511 | +- if (g_str_equal (name, "gtk-button-images")) |
512 | +- { |
513 | +- g_value_set_boolean (value, FALSE); |
514 | +- return TRUE; |
515 | +- } |
516 | ++ scaling_factor = g_variant_get_uint32 (variant); |
517 | ++ g_variant_unref (variant); |
518 | + |
519 | +- if (g_str_equal (name, "gtk-split-cursor")) |
520 | +- { |
521 | +- g_value_set_boolean (value, TRUE); |
522 | +- return TRUE; |
523 | +- } |
524 | ++ if (scaling_factor) |
525 | ++ return scaling_factor; |
526 | + |
527 | +- if (g_str_equal (name, "gtk-im-module")) |
528 | +- { |
529 | +- g_value_set_string (value, NULL); |
530 | +- return TRUE; |
531 | +- } |
532 | ++ scaling_factor = 1; |
533 | + |
534 | +- if (g_str_equal (name, "gtk-menu-bar-accel")) |
535 | +- { |
536 | +- g_value_set_string (value, "F10"); |
537 | +- return TRUE; |
538 | +- } |
539 | ++ /* TODO: scaling_factor = 2 if HiDPI >= 2 * 96 */ |
540 | + |
541 | +- if (g_str_equal (name, "gtk-cursor-blink")) |
542 | +- { |
543 | +- g_value_set_boolean (value, TRUE); |
544 | +- return TRUE; |
545 | +- } |
546 | ++ return scaling_factor; |
547 | ++} |
548 | + |
549 | +- if (g_str_equal (name, "gtk-cursor-blink-time")) |
550 | +- { |
551 | +- g_value_set_int (value, 1200); |
552 | +- return TRUE; |
553 | +- } |
554 | ++static void |
555 | ++update_setting (GdkMirScreen *screen, |
556 | ++ const gchar *name) |
557 | ++{ |
558 | ++ GVariant *variant; |
559 | ++ GVariant *antialiasing_variant; |
560 | ++ gboolean gtk_xft_antialias; |
561 | ++ gboolean gtk_xft_hinting; |
562 | ++ gdouble text_scaling_factor; |
563 | ++ gint cursor_size; |
564 | ++ gint i; |
565 | + |
566 | +- if (g_str_equal (name, "gtk-cursor-blink-timeout")) |
567 | ++ if (!g_strcmp0 (name, "gtk-modules")) |
568 | + { |
569 | +- g_value_set_int (value, 10); |
570 | +- return TRUE; |
571 | ++ /* TODO: X-GTK-Module-Enabled-Schema, X-GTK-Module-Enabled-Key */ |
572 | ++ /* TODO: org.gnome.settings-daemon.plugins.xsettings.enabled-gtk-modules */ |
573 | ++ /* TODO: org.gnome.settings-daemon.plugins.xsettings.disabled-gtk-modules */ |
574 | ++ return; |
575 | + } |
576 | +- |
577 | +- if (g_str_equal (name, "gtk-entry-select-on-focus")) |
578 | ++ else |
579 | + { |
580 | +- g_value_set_boolean (value, FALSE); |
581 | +- return TRUE; |
582 | ++ for (i = 0; SETTINGS_MAP[i].name; i++) |
583 | ++ if (!g_strcmp0 (name, SETTINGS_MAP[i].name)) |
584 | ++ break; |
585 | ++ |
586 | ++ if (!SETTINGS_MAP[i].name) |
587 | ++ return; |
588 | ++ |
589 | ++ variant = read_setting (screen, SETTINGS_MAP[i].schema_id, SETTINGS_MAP[i].key); |
590 | ++ |
591 | ++ if (!variant) |
592 | ++ { |
593 | ++ g_warning ("no setting for %s: %s.%s", SETTINGS_MAP[i].name, SETTINGS_MAP[i].schema_id, SETTINGS_MAP[i].key); |
594 | ++ return; |
595 | ++ } |
596 | + } |
597 | + |
598 | +- if (g_str_equal (name, "gtk-error-bell")) |
599 | ++ if (!g_strcmp0 (name, "gtk-xft-antialias")) |
600 | + { |
601 | +- g_value_set_boolean (value, FALSE); |
602 | +- return TRUE; |
603 | ++ gtk_xft_antialias = g_strcmp0 (g_variant_get_string (variant, NULL), "none"); |
604 | ++ g_variant_unref (variant); |
605 | ++ variant = g_variant_ref_sink (g_variant_new_int32 (gtk_xft_antialias ? 1 : 0)); |
606 | + } |
607 | +- |
608 | +- if (g_str_equal (name, "gtk-label-select-on-focus")) |
609 | ++ else if (!g_strcmp0 (name, "gtk-xft-hinting")) |
610 | + { |
611 | +- g_value_set_boolean (value, FALSE); |
612 | +- return TRUE; |
613 | ++ gtk_xft_hinting = g_strcmp0 (g_variant_get_string (variant, NULL), "none"); |
614 | ++ g_variant_unref (variant); |
615 | ++ variant = g_variant_ref_sink (g_variant_new_int32 (gtk_xft_hinting ? 1 : 0)); |
616 | + } |
617 | +- |
618 | +- if (g_str_equal (name, "gtk-decoration-layout")) |
619 | ++ else if (!g_strcmp0 (name, "gtk-xft-hintstyle")) |
620 | + { |
621 | +- g_value_set_string (value, "menu:minimize,maximize,close"); |
622 | +- return TRUE; |
623 | ++ if (!g_strcmp0 (g_variant_get_string (variant, NULL), "none")) |
624 | ++ { |
625 | ++ g_variant_unref (variant); |
626 | ++ variant = g_variant_ref_sink (g_variant_new_string ("hintnone")); |
627 | ++ } |
628 | ++ else if (!g_strcmp0 (g_variant_get_string (variant, NULL), "slight")) |
629 | ++ { |
630 | ++ g_variant_unref (variant); |
631 | ++ variant = g_variant_ref_sink (g_variant_new_string ("hintslight")); |
632 | ++ } |
633 | ++ else if (!g_strcmp0 (g_variant_get_string (variant, NULL), "medium")) |
634 | ++ { |
635 | ++ g_variant_unref (variant); |
636 | ++ variant = g_variant_ref_sink (g_variant_new_string ("hintmedium")); |
637 | ++ } |
638 | ++ else if (!g_strcmp0 (g_variant_get_string (variant, NULL), "full")) |
639 | ++ { |
640 | ++ g_variant_unref (variant); |
641 | ++ variant = g_variant_ref_sink (g_variant_new_string ("hintfull")); |
642 | ++ } |
643 | ++ else |
644 | ++ { |
645 | ++ g_warning ("unknown org.gnome.settings-daemon.plugins.xsettings.hinting value: %s", g_variant_get_string (variant, NULL)); |
646 | ++ g_variant_unref (variant); |
647 | ++ return; |
648 | ++ } |
649 | + } |
650 | ++ else if (!g_strcmp0 (name, "gtk-xft-rgba")) |
651 | ++ { |
652 | ++ antialiasing_variant = read_setting (screen, "org.gnome.settings-daemon.plugins.xsettings", "antialiasing"); |
653 | ++ |
654 | ++ if (g_strcmp0 (g_variant_get_string (antialiasing_variant, NULL), "rgba")) |
655 | ++ { |
656 | ++ g_variant_unref (variant); |
657 | ++ variant = g_variant_ref_sink (g_variant_new_string ("none")); |
658 | ++ } |
659 | ++ else if (g_strcmp0 (g_variant_get_string (variant, NULL), "rgba")) |
660 | ++ { |
661 | ++ g_variant_unref (variant); |
662 | ++ variant = g_variant_ref_sink (g_variant_new_string ("rgb")); |
663 | ++ } |
664 | + |
665 | +- if (g_str_equal (name, "gtk-dnd-drag-threshold")) |
666 | ++ g_variant_unref (antialiasing_variant); |
667 | ++ } |
668 | ++ else if (!g_strcmp0 (name, "gtk-xft-dpi")) |
669 | + { |
670 | +- g_value_set_int (value, 8); |
671 | +- return TRUE; |
672 | ++ text_scaling_factor = g_variant_get_double (variant); |
673 | ++ g_variant_unref (variant); |
674 | ++ variant = g_variant_ref_sink (g_variant_new_int32 (1024 * get_scaling_factor (screen) * text_scaling_factor + 0.5)); |
675 | + } |
676 | +- |
677 | +- if (g_str_equal (name, "gtk-dialogs-use-header")) |
678 | ++ else if (!g_strcmp0 (name, "gtk-cursor-theme-size")) |
679 | + { |
680 | +- g_value_set_boolean (value, FALSE); |
681 | +- return TRUE; |
682 | ++ cursor_size = g_variant_get_int32 (variant); |
683 | ++ g_variant_unref (variant); |
684 | ++ variant = g_variant_ref_sink (g_variant_new_int32 (get_scaling_factor (screen) * cursor_size)); |
685 | + } |
686 | +- |
687 | +- if (g_str_equal (name, "gtk-long-press-time")) |
688 | ++ else if (!g_strcmp0 (name, "gtk-enable-animations")) |
689 | + { |
690 | +- g_value_set_uint (value, 500); |
691 | +- return TRUE; |
692 | ++ /* TODO: disable under vnc/vino/llvmpipe */ |
693 | + } |
694 | + |
695 | +- if (g_str_equal (name, "gtk-primary-button-warps-slider")) |
696 | ++ change_setting (screen, name, variant); |
697 | ++ g_variant_unref (variant); |
698 | ++} |
699 | ++ |
700 | ++static void |
701 | ++setting_changed (GSettings *settings, |
702 | ++ const gchar *key, |
703 | ++ GdkMirScreen *screen) |
704 | ++{ |
705 | ++ gchar *schema_id; |
706 | ++ gint i; |
707 | ++ |
708 | ++ g_object_get (settings, "schema-id", &schema_id, NULL); |
709 | ++ |
710 | ++ for (i = 0; SETTINGS_MAP[i].name; i++) |
711 | ++ if (!g_strcmp0 (schema_id, SETTINGS_MAP[i].schema_id) && !g_strcmp0 (key, SETTINGS_MAP[i].key)) |
712 | ++ update_setting (screen, SETTINGS_MAP[i].name); |
713 | ++ |
714 | ++ if (!g_strcmp0 (schema_id, "org.gnome.settings-daemon.plugins.xsettings")) |
715 | + { |
716 | +- g_value_set_boolean (value, TRUE); |
717 | +- return TRUE; |
718 | ++ if (!g_strcmp0 (key, "enabled-gtk-modules")) |
719 | ++ update_setting (screen, "gtk-modules"); |
720 | ++ else if (!g_strcmp0 (key, "disabled-gtk-modules")) |
721 | ++ update_setting (screen, "gtk-modules"); |
722 | ++ else if (!g_strcmp0 (key, "antialiasing")) |
723 | ++ update_setting (screen, "rgba-order"); |
724 | + } |
725 | +- |
726 | +- if (g_str_equal (name, "gtk-recent-files-max-age")) |
727 | ++ else if (!g_strcmp0 (schema_id, "org.gnome.desktop.interface")) |
728 | + { |
729 | +- g_value_set_int (value, 30); |
730 | +- return TRUE; |
731 | ++ if (!g_strcmp0 (key, "scaling-factor")) |
732 | ++ { |
733 | ++ update_setting (screen, "gtk-xft-dpi"); |
734 | ++ update_setting (screen, "gtk-cursor-theme-size"); |
735 | ++ } |
736 | + } |
737 | + |
738 | +- if (g_str_equal (name, "gtk-titlebar-double-click")) |
739 | ++ g_free (schema_id); |
740 | ++} |
741 | ++ |
742 | ++static const gchar * const KNOWN_SETTINGS[] = |
743 | ++{ |
744 | ++ "gtk-double-click-time", |
745 | ++ "gtk-double-click-distance", |
746 | ++ "gtk-cursor-blink", |
747 | ++ "gtk-cursor-blink-time", |
748 | ++ "gtk-cursor-blink-timeout", |
749 | ++ "gtk-split-cursor", |
750 | ++ "gtk-theme-name", |
751 | ++ "gtk-icon-theme-name", |
752 | ++ "gtk-fallback-icon-theme", |
753 | ++ "gtk-key-theme-name", |
754 | ++ "gtk-menu-bar-accel", |
755 | ++ "gtk-dnd-drag-threshold", |
756 | ++ "gtk-font-name", |
757 | ++ "gtk-icon-sizes", |
758 | ++ "gtk-modules", |
759 | ++ "gtk-xft-antialias", |
760 | ++ "gtk-xft-hinting", |
761 | ++ "gtk-xft-hintstyle", |
762 | ++ "gtk-xft-rgba", |
763 | ++ "gtk-xft-dpi", |
764 | ++ "gtk-cursor-theme-name", |
765 | ++ "gtk-cursor-theme-size", |
766 | ++ "gtk-alternative-button-order", |
767 | ++ "gtk-alternative-sort-arrows", |
768 | ++ "gtk-show-input-method-menu", |
769 | ++ "gtk-show-unicode-menu", |
770 | ++ "gtk-timeout-initial", |
771 | ++ "gtk-timeout-repeat", |
772 | ++ "gtk-timeout-expand", |
773 | ++ "gtk-color-scheme", |
774 | ++ "gtk-enable-animations", |
775 | ++ "gtk-touchscreen-mode", |
776 | ++ "gtk-tooltip-timeout", |
777 | ++ "gtk-tooltip-browse-timeout", |
778 | ++ "gtk-tooltip-browse-mode-timeout", |
779 | ++ "gtk-keynav-cursor-only", |
780 | ++ "gtk-keynav-wrap-around", |
781 | ++ "gtk-error-bell", |
782 | ++ "color-hash", |
783 | ++ "gtk-file-chooser-backend", |
784 | ++ "gtk-print-backends", |
785 | ++ "gtk-print-preview-command", |
786 | ++ "gtk-enable-mnemonics", |
787 | ++ "gtk-enable-accels", |
788 | ++ "gtk-recent-files-limit", |
789 | ++ "gtk-im-module", |
790 | ++ "gtk-recent-files-max-age", |
791 | ++ "gtk-fontconfig-timestamp", |
792 | ++ "gtk-sound-theme-name", |
793 | ++ "gtk-enable-input-feedback-sounds", |
794 | ++ "gtk-enable-event-sounds", |
795 | ++ "gtk-enable-tooltips", |
796 | ++ "gtk-toolbar-style", |
797 | ++ "gtk-toolbar-icon-size", |
798 | ++ "gtk-auto-mnemonics", |
799 | ++ "gtk-primary-button-warps-slider", |
800 | ++ "gtk-visible-focus", |
801 | ++ "gtk-application-prefer-dark-theme", |
802 | ++ "gtk-button-images", |
803 | ++ "gtk-entry-select-on-focus", |
804 | ++ "gtk-entry-password-hint-timeout", |
805 | ++ "gtk-menu-images", |
806 | ++ "gtk-menu-bar-popup-delay", |
807 | ++ "gtk-scrolled-window-placement", |
808 | ++ "gtk-can-change-accels", |
809 | ++ "gtk-menu-popup-delay", |
810 | ++ "gtk-menu-popdown-delay", |
811 | ++ "gtk-label-select-on-focus", |
812 | ++ "gtk-color-palette", |
813 | ++ "gtk-im-preedit-style", |
814 | ++ "gtk-im-status-style", |
815 | ++ "gtk-shell-shows-app-menu", |
816 | ++ "gtk-shell-shows-menubar", |
817 | ++ "gtk-shell-shows-desktop", |
818 | ++ "gtk-decoration-layout", |
819 | ++ "gtk-titlebar-double-click", |
820 | ++ "gtk-titlebar-middle-click", |
821 | ++ "gtk-titlebar-right-click", |
822 | ++ "gtk-dialogs-use-header", |
823 | ++ "gtk-enable-primary-paste", |
824 | ++ "gtk-recent-files-enabled", |
825 | ++ "gtk-long-press-time", |
826 | ++ "gtk-keynav-use-caret", |
827 | ++ NULL |
828 | ++}; |
829 | ++ |
830 | ++static gboolean |
831 | ++gdk_mir_screen_get_setting (GdkScreen *screen, |
832 | ++ const gchar *name, |
833 | ++ GValue *value) |
834 | ++{ |
835 | ++ GdkMirScreen *mir_screen; |
836 | ++ GVariant *variant; |
837 | ++ |
838 | ++ mir_screen = GDK_MIR_SCREEN (screen); |
839 | ++ variant = g_hash_table_lookup (mir_screen->current_settings, name); |
840 | ++ |
841 | ++ if (!variant) |
842 | ++ update_setting (mir_screen, name); |
843 | ++ |
844 | ++ variant = g_hash_table_lookup (mir_screen->current_settings, name); |
845 | ++ |
846 | ++ if (!variant) |
847 | + { |
848 | +- g_value_set_string (value, "toggle-maximize"); |
849 | +- return TRUE; |
850 | +- } |
851 | ++ if (!g_strv_contains (KNOWN_SETTINGS, name)) |
852 | ++ g_warning ("unknown setting: %s", name); |
853 | + |
854 | +- g_warning ("unknown property %s", name); |
855 | ++ return FALSE; |
856 | ++ } |
857 | + |
858 | +- return FALSE; |
859 | ++ g_dbus_gvariant_to_gvalue (variant, value); |
860 | ++ return TRUE; |
861 | + } |
862 | + |
863 | + static gint |
864 | +@@ -790,6 +1092,9 @@ gdk_mir_screen_init (GdkMirScreen *screen) |
865 | + screen->visual->screen = GDK_SCREEN (screen); |
866 | + screen->visual->type = VISUAL_TYPE; |
867 | + screen->visual->depth = VISUAL_DEPTH; |
868 | ++ |
869 | ++ screen->settings_objects = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); |
870 | ++ screen->current_settings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref); |
871 | + } |
872 | + |
873 | + static void |
874 | +-- |
875 | +2.11.0 |
876 | + |
877 | |
878 | === added file 'debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch' |
879 | --- debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch 1970-01-01 00:00:00 +0000 |
880 | +++ debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch 2017-04-03 17:42:43 +0000 |
881 | @@ -0,0 +1,30 @@ |
882 | +From ecf9c06adaaa6f6d8d60b87282aeb0f37fe73bde Mon Sep 17 00:00:00 2001 |
883 | +From: William Hua <william.hua@canonical.com> |
884 | +Date: Fri, 31 Mar 2017 17:35:49 -0400 |
885 | +Subject: [PATCH 25/32] mir: remove keymap and input device state warnings |
886 | + |
887 | +--- |
888 | + gdk/mir/gdkmireventsource.c | 4 ++++ |
889 | + 1 file changed, 4 insertions(+) |
890 | + |
891 | +diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c |
892 | +index 8b239be191..ea0cc52819 100644 |
893 | +--- a/gdk/mir/gdkmireventsource.c |
894 | ++++ b/gdk/mir/gdkmireventsource.c |
895 | +@@ -605,9 +605,13 @@ gdk_mir_event_source_queue_event (GdkDisplay *display, |
896 | + case mir_event_type_close_window: |
897 | + handle_close_event (window); |
898 | + break; |
899 | ++ case mir_event_type_keymap: |
900 | ++ break; |
901 | + case mir_event_type_window_output: |
902 | + handle_window_output_event (window, mir_event_get_window_output_event (event)); |
903 | + break; |
904 | ++ case mir_event_type_input_device_state: |
905 | ++ break; |
906 | + case mir_event_type_window_placement: |
907 | + handle_window_placement_event (window, mir_event_get_window_placement_event (event)); |
908 | + break; |
909 | +-- |
910 | +2.11.0 |
911 | + |
912 | |
913 | === added file 'debian/patches/0026-mir-set-application-name-when-creating-connection.patch' |
914 | --- debian/patches/0026-mir-set-application-name-when-creating-connection.patch 1970-01-01 00:00:00 +0000 |
915 | +++ debian/patches/0026-mir-set-application-name-when-creating-connection.patch 2017-04-03 17:42:43 +0000 |
916 | @@ -0,0 +1,25 @@ |
917 | +From 2f851530f47cdf25fd138c10907340e388532f87 Mon Sep 17 00:00:00 2001 |
918 | +From: William Hua <william.hua@canonical.com> |
919 | +Date: Sat, 1 Apr 2017 10:04:50 -0400 |
920 | +Subject: [PATCH 26/32] mir: set application name when creating connection |
921 | + |
922 | +--- |
923 | + gdk/mir/gdkmirdisplay.c | 2 +- |
924 | + 1 file changed, 1 insertion(+), 1 deletion(-) |
925 | + |
926 | +diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c |
927 | +index 570932fabc..8b39e82e3e 100644 |
928 | +--- a/gdk/mir/gdkmirdisplay.c |
929 | ++++ b/gdk/mir/gdkmirdisplay.c |
930 | +@@ -125,7 +125,7 @@ _gdk_mir_display_open (const gchar *display_name) |
931 | + GdkMirDisplay *display; |
932 | + GDBusConnection *session; |
933 | + |
934 | +- connection = mir_connect_sync (NULL, "GDK-Mir"); |
935 | ++ connection = mir_connect_sync (NULL, g_get_prgname ()); |
936 | + if (!connection) |
937 | + return NULL; |
938 | + |
939 | +-- |
940 | +2.11.0 |
941 | + |
942 | |
943 | === modified file 'debian/patches/series' |
944 | --- debian/patches/series 2017-03-20 15:55:37 +0000 |
945 | +++ debian/patches/series 2017-04-03 17:42:43 +0000 |
946 | @@ -23,3 +23,7 @@ |
947 | unity-border-radius.patch |
948 | unity-headerbar-maximized-mode.patch |
949 | gtksocket-unscale-before-sending-configurenotify.patch |
950 | +0001-mir-always-emit-a-resize-when-creating-windows.patch |
951 | +0024-mir-re-write-settings-implementation.patch |
952 | +0025-mir-remove-keymap-and-input-device-state-warnings.patch |
953 | +0026-mir-set-application-name-when-creating-connection.patch |
Thank you! Uploading now to the zesty unapproved queue.