Skip to content

Commit 88c6320

Browse files
committed
Move some x11-only from the keyboard to xsettings module.
1 parent 0022537 commit 88c6320

File tree

4 files changed

+180
-171
lines changed

4 files changed

+180
-171
lines changed

cinnamon-settings-daemon/cinnamon-settings-session.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,23 @@ cinnamon_settings_session_new (void)
439439
session = g_object_new (CINNAMON_TYPE_SETTINGS_SESSION, NULL);
440440
return CINNAMON_SETTINGS_SESSION (session);
441441
}
442+
443+
gboolean
444+
cinnamon_settings_session_is_wayland (void)
445+
{
446+
static gboolean session_is_wayland = FALSE;
447+
static gsize once_init = 0;
448+
449+
if (g_once_init_enter (&once_init)) {
450+
const gchar *env = g_getenv ("XDG_SESSION_TYPE");
451+
if (env && g_strcmp0 (env, "wayland") == 0) {
452+
session_is_wayland = TRUE;
453+
}
454+
455+
g_debug ("Session is Wayland? %d", session_is_wayland);
456+
457+
g_once_init_leave (&once_init, 1);
458+
}
459+
460+
return session_is_wayland;
461+
}

cinnamon-settings-daemon/cinnamon-settings-session.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ GType cinnamon_settings_session_get_type (void);
5757
GType cinnamon_settings_session_state_get_type (void);
5858
CinnamonSettingsSession *cinnamon_settings_session_new (void);
5959
CinnamonSettingsSessionState cinnamon_settings_session_get_state (CinnamonSettingsSession *session);
60-
60+
gboolean cinnamon_settings_session_is_wayland (void);
6161

6262
G_END_DECLS
6363

plugins/keyboard/csd-keyboard-manager.c

Lines changed: 3 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
#include <gtk/gtk.h>
3939

4040
#include "cinnamon-settings-profile.h"
41+
#include "cinnamon-settings-session.h"
4142
#include "csd-keyboard-manager.h"
42-
#include "csd-input-helper.h"
4343
#include "csd-enums.h"
4444
#include "migrate-settings.h"
4545

@@ -56,10 +56,6 @@
5656

5757
#define CINNAMON_DESKTOP_INTERFACE_DIR "org.cinnamon.desktop.interface"
5858

59-
#define KEY_GTK_IM_MODULE "gtk-im-module"
60-
#define GTK_IM_MODULE_SIMPLE "gtk-im-context-simple"
61-
#define GTK_IM_MODULE_IBUS "ibus"
62-
6359
#define CINNAMON_DESKTOP_INPUT_SOURCES_DIR "org.gnome.desktop.input-sources"
6460

6561
#define KEY_INPUT_SOURCES "sources"
@@ -70,55 +66,25 @@
7066

7167
#define DEFAULT_LAYOUT "us"
7268

73-
#define CINNAMON_A11Y_APPLICATIONS_INTERFACE_DIR "org.cinnamon.desktop.a11y.applications"
74-
#define KEY_OSK_ENABLED "screen-keyboard-enabled"
75-
7669
struct _CsdKeyboardManager
7770
{
7871
GObject parent;
7972

8073
guint start_idle_id;
8174
GSettings *settings;
8275
GSettings *input_sources_settings;
83-
GSettings *a11y_settings;
8476
GDBusProxy *localed;
8577
GCancellable *cancellable;
86-
87-
GdkDeviceManager *device_manager;
88-
guint device_added_id;
89-
guint device_removed_id;
9078
};
9179

9280
static void csd_keyboard_manager_class_init (CsdKeyboardManagerClass *klass);
9381
static void csd_keyboard_manager_init (CsdKeyboardManager *keyboard_manager);
9482
static void csd_keyboard_manager_finalize (GObject *object);
9583

96-
static void update_gtk_im_module (CsdKeyboardManager *manager);
97-
9884
G_DEFINE_TYPE (CsdKeyboardManager, csd_keyboard_manager, G_TYPE_OBJECT)
9985

10086
static gpointer manager_object = NULL;
10187

102-
static gboolean
103-
session_is_wayland (void)
104-
{
105-
static gboolean session_is_wayland = FALSE;
106-
static gsize once_init = 0;
107-
108-
if (g_once_init_enter (&once_init)) {
109-
const gchar *env = g_getenv ("XDG_SESSION_TYPE");
110-
if (env && g_strcmp0 (env, "wayland") == 0) {
111-
session_is_wayland = TRUE;
112-
}
113-
114-
g_debug ("Session is Wayland? %d", session_is_wayland);
115-
116-
g_once_init_leave (&once_init, 1);
117-
}
118-
119-
return session_is_wayland;
120-
}
121-
12288
static void
12389
init_builder_with_sources (GVariantBuilder *builder,
12490
GSettings *settings)
@@ -151,7 +117,7 @@ apply_bell (CsdKeyboardManager *manager)
151117
CsdBellMode bell_mode;
152118
int click_volume;
153119

154-
if (session_is_wayland ())
120+
if (cinnamon_settings_session_is_wayland ())
155121
return;
156122

157123
g_debug ("Applying the bell settings");
@@ -211,121 +177,6 @@ settings_changed (GSettings *settings,
211177

212178
}
213179

214-
static void
215-
device_added_cb (GdkDeviceManager *device_manager,
216-
GdkDevice *device,
217-
CsdKeyboardManager *manager)
218-
{
219-
GdkInputSource source;
220-
221-
source = gdk_device_get_source (device);
222-
if (source == GDK_SOURCE_TOUCHSCREEN) {
223-
update_gtk_im_module (manager);
224-
}
225-
}
226-
227-
static void
228-
device_removed_cb (GdkDeviceManager *device_manager,
229-
GdkDevice *device,
230-
CsdKeyboardManager *manager)
231-
{
232-
GdkInputSource source;
233-
234-
source = gdk_device_get_source (device);
235-
if (source == GDK_SOURCE_TOUCHSCREEN)
236-
update_gtk_im_module (manager);
237-
}
238-
239-
static void
240-
set_devicepresence_handler (CsdKeyboardManager *manager)
241-
{
242-
GdkDeviceManager *device_manager;
243-
244-
if (session_is_wayland ())
245-
return;
246-
247-
device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
248-
249-
manager->device_added_id = g_signal_connect (G_OBJECT (device_manager), "device-added",
250-
G_CALLBACK (device_added_cb), manager);
251-
manager->device_removed_id = g_signal_connect (G_OBJECT (device_manager), "device-removed",
252-
G_CALLBACK (device_removed_cb), manager);
253-
manager->device_manager = device_manager;
254-
}
255-
256-
static gboolean
257-
need_ibus (GVariant *sources)
258-
{
259-
GVariantIter iter;
260-
const gchar *type;
261-
262-
g_variant_iter_init (&iter, sources);
263-
while (g_variant_iter_next (&iter, "(&s&s)", &type, NULL))
264-
if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS))
265-
return TRUE;
266-
267-
return FALSE;
268-
}
269-
270-
static gboolean
271-
need_osk (CsdKeyboardManager *manager)
272-
{
273-
gboolean has_touchscreen = FALSE;
274-
GList *devices;
275-
GdkSeat *seat;
276-
277-
if (g_settings_get_boolean (manager->a11y_settings,
278-
KEY_OSK_ENABLED))
279-
return TRUE;
280-
281-
seat = gdk_display_get_default_seat (gdk_display_get_default ());
282-
devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_TOUCH);
283-
284-
has_touchscreen = devices != NULL;
285-
286-
g_list_free (devices);
287-
288-
return has_touchscreen;
289-
}
290-
291-
static void
292-
set_gtk_im_module (CsdKeyboardManager *manager,
293-
GSettings *settings,
294-
GVariant *sources)
295-
{
296-
const gchar *new_module;
297-
gchar *current_module;
298-
299-
if (need_ibus (sources) || need_osk (manager))
300-
new_module = GTK_IM_MODULE_IBUS;
301-
else
302-
new_module = GTK_IM_MODULE_SIMPLE;
303-
304-
current_module = g_settings_get_string (settings, KEY_GTK_IM_MODULE);
305-
if (!g_str_equal (current_module, new_module))
306-
g_settings_set_string (settings, KEY_GTK_IM_MODULE, new_module);
307-
g_free (current_module);
308-
}
309-
310-
static void
311-
update_gtk_im_module (CsdKeyboardManager *manager)
312-
{
313-
GSettings *interface_settings;
314-
GVariant *sources;
315-
316-
/* Gtk+ uses the IM module advertised in XSETTINGS so, if we
317-
* have IBus input sources, we want it to load that
318-
* module. Otherwise we can use the default "simple" module
319-
* which is builtin gtk+
320-
*/
321-
interface_settings = g_settings_new (CINNAMON_DESKTOP_INTERFACE_DIR);
322-
sources = g_settings_get_value (manager->input_sources_settings,
323-
KEY_INPUT_SOURCES);
324-
set_gtk_im_module (manager, interface_settings, sources);
325-
g_object_unref (interface_settings);
326-
g_variant_unref (sources);
327-
}
328-
329180
static void
330181
get_sources_from_xkb_config (CsdKeyboardManager *manager)
331182
{
@@ -457,18 +308,7 @@ start_keyboard_idle_cb (CsdKeyboardManager *manager)
457308

458309
manager->settings = g_settings_new (CSD_KEYBOARD_DIR);
459310

460-
set_devicepresence_handler (manager);
461-
462311
manager->input_sources_settings = g_settings_new (CINNAMON_DESKTOP_INPUT_SOURCES_DIR);
463-
g_signal_connect_swapped (manager->input_sources_settings,
464-
"changed::" KEY_INPUT_SOURCES,
465-
G_CALLBACK (update_gtk_im_module), manager);
466-
467-
manager->a11y_settings = g_settings_new (CINNAMON_A11Y_APPLICATIONS_INTERFACE_DIR);
468-
g_signal_connect_swapped (manager->a11y_settings,
469-
"changed::" KEY_OSK_ENABLED,
470-
G_CALLBACK (update_gtk_im_module), manager);
471-
update_gtk_im_module (manager);
472312

473313
manager->cancellable = g_cancellable_new ();
474314

@@ -482,7 +322,7 @@ start_keyboard_idle_cb (CsdKeyboardManager *manager)
482322
localed_proxy_ready,
483323
manager);
484324

485-
if (!session_is_wayland ()) {
325+
if (!cinnamon_settings_session_is_wayland ()) {
486326
/* apply current settings before we install the callback */
487327
g_debug ("Started the keyboard plugin, applying all settings");
488328
apply_all_settings (manager);
@@ -522,14 +362,7 @@ csd_keyboard_manager_stop (CsdKeyboardManager *manager)
522362

523363
g_clear_object (&manager->settings);
524364
g_clear_object (&manager->input_sources_settings);
525-
g_clear_object (&manager->a11y_settings);
526365
g_clear_object (&manager->localed);
527-
528-
if (manager->device_manager != NULL) {
529-
g_signal_handler_disconnect (manager->device_manager, manager->device_added_id);
530-
g_signal_handler_disconnect (manager->device_manager, manager->device_removed_id);
531-
manager->device_manager = NULL;
532-
}
533366
}
534367

535368
static void

0 commit comments

Comments
 (0)