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

Proposed by William Hua
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
Reviewer Review Type Date Requested Status
Jeremy Bícha Approve
Review via email: mp+321739@code.launchpad.net

Commit message

  * debian/patches/series:
  * debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch:
  * debian/patches/0024-mir-re-write-settings-implementation.patch:
  * debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch:
  * debian/patches/0026-mir-set-application-name-when-creating-connection.patch:
    - Add upstream patches from gtk-3-22 branch
    - Fix LP: #1670390, LP: #1666435, LP: #1618298

Description of the change

  * debian/patches/series:
  * debian/patches/0001-mir-always-emit-a-resize-when-creating-windows.patch:
  * debian/patches/0024-mir-re-write-settings-implementation.patch:
  * debian/patches/0025-mir-remove-keymap-and-input-device-state-warnings.patch:
  * debian/patches/0026-mir-set-application-name-when-creating-connection.patch:
    - Add upstream patches from gtk-3-22 branch
    - Fix LP: #1670390, LP: #1666435, LP: #1618298

To post a comment you must log in.
lp:~attente/gtk/gtk-mir updated
559. By William Hua

Squash in commit 6e711beb0bdc2a30bfd948e5a6a077cd6fe82493 to clean up an ugly function.

Revision history for this message
Jeremy Bícha (jbicha) wrote :

Thank you! Uploading now to the zesty unapproved queue.

review: Approve

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 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, &params);
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

Subscribers

People subscribed via source and target branches

to all changes: