Merge ~3v1n0/ubuntu/+source/gnome-settings-daemon:ubuntu/bionic into ~ubuntu-desktop/ubuntu/+source/gnome-settings-daemon:ubuntu/bionic

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Sebastien Bacher
Approved revision: 22d96685d5a0d4d6684da55400245987f7e83a98
Merged at revision: 02e520af1584b62e45acd00e8c755d670f35d3e6
Proposed branch: ~3v1n0/ubuntu/+source/gnome-settings-daemon:ubuntu/bionic
Merge into: ~ubuntu-desktop/ubuntu/+source/gnome-settings-daemon:ubuntu/bionic
Diff against target: 252 lines (+224/-0)
4 files modified
debian/changelog (+7/-0)
debian/gbp.conf (+17/-0)
debian/patches/keyboard-Enable-ibus-for-OSK-purposes.patch (+199/-0)
debian/patches/series (+1/-0)
Reviewer Review Type Date Requested Status
Iain Lane Approve
Sebastien Bacher Approve
Review via email: mp+362049@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Sebastien Bacher (seb128) wrote :

Looks good to me, do you want me to merge/upload that as well or do you plan to land in a silo?

review: Approve
Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :
Revision history for this message
Iain Lane (laney) wrote :

I'll upload, thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/debian/changelog b/debian/changelog
index bb73cc0..910ba6a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
1gnome-settings-daemon (3.28.1-0ubuntu1.2) UNRELEASED; urgency=medium
2
3 * debian/patches/keyboard-Enable-ibus-for-OSK-purposes.patch:
4 - Enable IBus for OSK (LP: #1760399)
5
6 -- Marco Trevisan (Treviño) <marco@ubuntu.com> Mon, 21 Jan 2019 20:26:58 +0100
7
1gnome-settings-daemon (3.28.1-0ubuntu1.1) bionic; urgency=medium8gnome-settings-daemon (3.28.1-0ubuntu1.1) bionic; urgency=medium
29
3 * debian/patches/git_binary_encoding.patch:10 * debian/patches/git_binary_encoding.patch:
diff --git a/debian/gbp.conf b/debian/gbp.conf
4new file mode 10064411new file mode 100644
index 0000000..52f9b83
--- /dev/null
+++ b/debian/gbp.conf
@@ -0,0 +1,17 @@
1[DEFAULT]
2pristine-tar = True
3debian-branch = debian/bionic
4upstream-branch = upstream/3.28.x
5upstream-vcs-tag = %(version)s
6
7[buildpackage]
8sign-tags = True
9
10[dch]
11multimaint-merge = True
12
13[import-orig]
14postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit
15
16[pq]
17patch-numbers = False
diff --git a/debian/patches/keyboard-Enable-ibus-for-OSK-purposes.patch b/debian/patches/keyboard-Enable-ibus-for-OSK-purposes.patch
0new file mode 10064418new file mode 100644
index 0000000..6a76d1b
--- /dev/null
+++ b/debian/patches/keyboard-Enable-ibus-for-OSK-purposes.patch
@@ -0,0 +1,199 @@
1From: Carlos Garnacho <carlosg@gnome.org>
2Date: Tue, 25 Sep 2018 20:19:39 +0200
3Subject: keyboard: Enable ibus for OSK purposes
4
5As gnome-shell relies on IBus for focus tracking, enable this IM whenever
6the conditions for OSK popping up might arise.
7
8Closes: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/issues/95
9
10Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/1760399
11Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/issues/95
12Origin: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/commit/b7e1d69593
13---
14 plugins/keyboard/gsd-keyboard-manager.c | 82 +++++++++++++++++++++++++++------
15 1 file changed, 69 insertions(+), 13 deletions(-)
16
17diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
18index 343b049..480e735 100644
19--- a/plugins/keyboard/gsd-keyboard-manager.c
20+++ b/plugins/keyboard/gsd-keyboard-manager.c
21@@ -80,11 +80,15 @@
22
23 #define DEFAULT_LAYOUT "us"
24
25+#define GNOME_A11Y_APPLICATIONS_INTERFACE_DIR "org.gnome.desktop.a11y.applications"
26+#define KEY_OSK_ENABLED "screen-keyboard-enabled"
27+
28 struct GsdKeyboardManagerPrivate
29 {
30 guint start_idle_id;
31 GSettings *settings;
32 GSettings *input_sources_settings;
33+ GSettings *a11y_settings;
34 GDBusProxy *localed;
35 GCancellable *cancellable;
36
37@@ -92,12 +96,15 @@ struct GsdKeyboardManagerPrivate
38 GsdNumLockState old_state;
39 GdkDeviceManager *device_manager;
40 guint device_added_id;
41+ guint device_removed_id;
42 };
43
44 static void gsd_keyboard_manager_class_init (GsdKeyboardManagerClass *klass);
45 static void gsd_keyboard_manager_init (GsdKeyboardManager *keyboard_manager);
46 static void gsd_keyboard_manager_finalize (GObject *object);
47
48+static void update_gtk_im_module (GsdKeyboardManager *manager);
49+
50 G_DEFINE_TYPE (GsdKeyboardManager, gsd_keyboard_manager, G_TYPE_OBJECT)
51
52 static gpointer manager_object = NULL;
53@@ -417,9 +424,23 @@ device_added_cb (GdkDeviceManager *device_manager,
54 if (source == GDK_SOURCE_KEYBOARD) {
55 g_debug ("New keyboard plugged in, applying all settings");
56 apply_numlock (manager);
57+ } else if (source == GDK_SOURCE_TOUCHSCREEN) {
58+ update_gtk_im_module (manager);
59 }
60 }
61
62+static void
63+device_removed_cb (GdkDeviceManager *device_manager,
64+ GdkDevice *device,
65+ GsdKeyboardManager *manager)
66+{
67+ GdkInputSource source;
68+
69+ source = gdk_device_get_source (device);
70+ if (source == GDK_SOURCE_TOUCHSCREEN)
71+ update_gtk_im_module (manager);
72+}
73+
74 static void
75 set_devicepresence_handler (GsdKeyboardManager *manager)
76 {
77@@ -432,6 +453,8 @@ set_devicepresence_handler (GsdKeyboardManager *manager)
78
79 manager->priv->device_added_id = g_signal_connect (G_OBJECT (device_manager), "device-added",
80 G_CALLBACK (device_added_cb), manager);
81+ manager->priv->device_removed_id = g_signal_connect (G_OBJECT (device_manager), "device-removed",
82+ G_CALLBACK (device_removed_cb), manager);
83 manager->priv->device_manager = device_manager;
84 }
85
86@@ -449,14 +472,37 @@ need_ibus (GVariant *sources)
87 return FALSE;
88 }
89
90+static gboolean
91+need_osk (GsdKeyboardManager *manager)
92+{
93+ GSettings *a11y_settings;
94+ gboolean has_touchscreen = FALSE;
95+ GList *devices, *l;
96+ GdkSeat *seat;
97+
98+ if (g_settings_get_boolean (manager->priv->a11y_settings,
99+ KEY_OSK_ENABLED))
100+ return TRUE;
101+
102+ seat = gdk_display_get_default_seat (gdk_display_get_default ());
103+ devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_TOUCH);
104+
105+ has_touchscreen = devices != NULL;
106+
107+ g_list_free (devices);
108+
109+ return has_touchscreen;
110+}
111+
112 static void
113-set_gtk_im_module (GSettings *settings,
114- GVariant *sources)
115+set_gtk_im_module (GsdKeyboardManager *manager,
116+ GSettings *settings,
117+ GVariant *sources)
118 {
119 const gchar *new_module;
120 gchar *current_module;
121
122- if (need_ibus (sources))
123+ if (need_ibus (sources) || need_osk (manager))
124 new_module = GTK_IM_MODULE_IBUS;
125 else
126 new_module = GTK_IM_MODULE_SIMPLE;
127@@ -528,32 +574,33 @@ manager_notify_is_loaded_cb (GObject *object,
128 }
129 }
130
131-static void
132-input_sources_changed (GSettings *settings,
133- const char *key,
134- GsdKeyboardManager *manager)
135+update_gtk_im_module (GsdKeyboardManager *manager)
136 {
137 GSettings *interface_settings;
138 GVariant *sources;
139 ActUserManager *user_manager;
140 gboolean user_manager_loaded;
141+
142 /* Gtk+ uses the IM module advertised in XSETTINGS so, if we
143 * have IBus input sources, we want it to load that
144 * module. Otherwise we can use the default "simple" module
145 * which is builtin gtk+
146 */
147- sources = g_settings_get_value (settings, KEY_INPUT_SOURCES);
148 interface_settings = g_settings_new (GNOME_DESKTOP_INTERFACE_DIR);
149- set_gtk_im_module (interface_settings, sources);
150+ sources = g_settings_get_value (manager->priv->input_sources_settings,
151+ KEY_INPUT_SOURCES);
152+ set_gtk_im_module (manager, interface_settings, sources);
153 g_object_unref (interface_settings);
154 g_variant_unref (sources);
155
156 user_manager = act_user_manager_get_default ();
157 g_object_get (user_manager, "is-loaded", &user_manager_loaded, NULL);
158 if (user_manager_loaded)
159- manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL, settings);
160+ manager_notify_is_loaded_cb (G_OBJECT (user_manager), NULL,
161+ manager->priv->input_sources_settings);
162 else
163- g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb), settings);
164+ g_signal_connect (user_manager, "notify::is-loaded", G_CALLBACK (manager_notify_is_loaded_cb),
165+ manager->priv->input_sources_settings);
166 }
167
168 static void
169@@ -812,8 +859,15 @@ start_keyboard_idle_cb (GsdKeyboardManager *manager)
170 set_devicepresence_handler (manager);
171
172 manager->priv->input_sources_settings = g_settings_new (GNOME_DESKTOP_INPUT_SOURCES_DIR);
173- g_signal_connect (manager->priv->input_sources_settings, "changed::"KEY_INPUT_SOURCES,
174- G_CALLBACK (input_sources_changed), manager);
175+ g_signal_connect_swapped (manager->priv->input_sources_settings,
176+ "changed::" KEY_INPUT_SOURCES,
177+ G_CALLBACK (update_gtk_im_module), manager);
178+
179+ manager->priv->a11y_settings = g_settings_new (GNOME_A11Y_APPLICATIONS_INTERFACE_DIR);
180+ g_signal_connect_swapped (manager->priv->a11y_settings,
181+ "changed::" KEY_OSK_ENABLED,
182+ G_CALLBACK (update_gtk_im_module), manager);
183+ update_gtk_im_module (manager);
184
185 manager->priv->cancellable = g_cancellable_new ();
186
187@@ -876,10 +930,12 @@ gsd_keyboard_manager_stop (GsdKeyboardManager *manager)
188
189 g_clear_object (&p->settings);
190 g_clear_object (&p->input_sources_settings);
191+ g_clear_object (&p->a11y_settings);
192 g_clear_object (&p->localed);
193
194 if (p->device_manager != NULL) {
195 g_signal_handler_disconnect (p->device_manager, p->device_added_id);
196+ g_signal_handler_disconnect (p->device_manager, p->device_removed_id);
197 p->device_manager = NULL;
198 }
199
diff --git a/debian/patches/series b/debian/patches/series
index 9791d9b..291dbcd 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -9,3 +9,4 @@ revert-gsettings-removals.patch
9revert-mediakeys-dbus-interface-drop.patch9revert-mediakeys-dbus-interface-drop.patch
10ubuntu_ibus_configs.patch10ubuntu_ibus_configs.patch
11git_binary_encoding.patch11git_binary_encoding.patch
12keyboard-Enable-ibus-for-OSK-purposes.patch

Subscribers

People subscribed via source and target branches