From 06e0f0bc54df3a706ea2f71077ca986af37016d9 Mon Sep 17 00:00:00 2001 From: William Hua Date: Thu, 20 Jun 2013 12:17:43 -0400 Subject: Migrate old keyboard layouts and IM engines. --- lib/main.vala | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'lib') diff --git a/lib/main.vala b/lib/main.vala index ec4ceafa..e06c7794 100644 --- a/lib/main.vala +++ b/lib/main.vala @@ -41,12 +41,61 @@ public class Indicator.Keyboard.Service : Object { this.xkb_info = new Gnome.XkbInfo (); + migrate_keyboard_layouts (); + update_window_sources (); this.loop = new MainLoop (); this.loop.run (); } + [DBus (visible = false)] + private void migrate_keyboard_layouts () { + if (!this.indicator_settings.get_boolean ("migrated")) { + var builder = new VariantBuilder (new VariantType ("a(ss)")); + var length = 0; + + var layout_settings = new Settings ("org.gnome.libgnomekbd.keyboard"); + var layouts = layout_settings.get_strv ("layouts"); + + foreach (var layout in layouts) { + var source = layout; + + source = source.replace (" ", "+"); + source = source.replace ("\t", "+"); + + builder.add ("(ss)", "xkb", source); + length++; + } + + var ibus = get_ibus (); + var engines = ibus.list_active_engines (); + + foreach (var engine in engines) { + if (length == 0) { + var source = "us"; + var layout = engine.get_layout (); + var variant = engine.get_layout_variant (); + + if (layout != null && variant != null) { + source = @"$layout+$variant"; + } else if (layout != null) { + source = layout; + } + + builder.add ("(ss)", "xkb", source); + } + + builder.add ("(ss)", "ibus", engine.name); + length++; + } + + this.source_settings.set_value ("sources", builder.end ()); + + this.indicator_settings.set_boolean ("migrated", true); + } + } + [DBus (visible = false)] private void update_window_sources () { var group_per_window = this.per_window_settings.get_boolean ("group-per-window"); -- cgit v1.2.3