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

Subscribers

People subscribed via source and target branches

to all changes: