diff options
Diffstat (limited to 'community/cinnamon/keyboard_applet.patch')
-rw-r--r-- | community/cinnamon/keyboard_applet.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/community/cinnamon/keyboard_applet.patch b/community/cinnamon/keyboard_applet.patch new file mode 100644 index 000000000..6b3694086 --- /dev/null +++ b/community/cinnamon/keyboard_applet.patch @@ -0,0 +1,142 @@ +diff --git a/applet.js b/applet.js +--- a/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js ++++ b/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js +@@ -1,9 +1,10 @@ + const Applet = imports.ui.applet; +-const Gkbd = imports.gi.Gkbd; + const Lang = imports.lang; +-const Cinnamon = imports.gi.Cinnamon; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; + const St = imports.gi.St; + const Gtk = imports.gi.Gtk; ++const GnomeDesktop = imports.gi.GnomeDesktop; + const Main = imports.ui.main; + const PopupMenu = imports.ui.popupMenu; + const Util = imports.misc.util; +@@ -15,11 +16,12 @@ + LayoutMenuItem.prototype = { + __proto__: PopupMenu.PopupBaseMenuItem.prototype, + +- _init: function(config, id, indicator, long_name) { ++ _init: function(ipsettings, id, index, indicator, long_name) { + PopupMenu.PopupBaseMenuItem.prototype._init.call(this); + +- this._config = config; ++ this._ipsettings = ipsettings; + this._id = id; ++ this._index = index; + this.label = new St.Label({ text: long_name }); + this.indicator = indicator; + this.addActor(this.label); +@@ -28,7 +30,7 @@ + + activate: function(event) { + PopupMenu.PopupBaseMenuItem.prototype.activate.call(this); +- this._config.lock_group(this._id); ++ this._ipsettings.set_value('current', GLib.Variant.new_uint32(this._index)); + } + }; + +@@ -54,18 +56,18 @@ + this._layoutItems = [ ]; + + this._showFlags = global.settings.get_boolean("keyboard-applet-use-flags"); +- this._config = Gkbd.Configuration.get(); +- this._config.connect('changed', Lang.bind(this, this._syncConfig)); +- this._config.connect('group-changed', Lang.bind(this, this._syncGroup)); ++ this._xkbInfo = new GnomeDesktop.XkbInfo(); ++ this._ipsettings = new Gio.Settings({ schema: 'org.gnome.desktop.input-sources' }); ++ this._ipsettings.connect('changed::sources', Lang.bind(this, this._syncConfig)); ++ this._ipsettings.connect('changed::current', Lang.bind(this, this._syncGroup)); + global.settings.connect('changed::keyboard-applet-use-flags', Lang.bind(this, this._reload_settings)); +- this._config.start_listen(); + + this._syncConfig(); + + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); + this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() { + Main.overview.hide(); +- Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]); ++ Util.spawn(['gkbd-keyboard-display', '-l', this._selectedLayout._id]); + })); + this.menu.addAction(_("Show Character Table"), Lang.bind(this, function() { + Main.overview.hide(); +@@ -98,7 +100,6 @@ + }, + + _reload_settings: function() { +- this._showFlags = global.settings.get_boolean("keyboard-applet-use-flags"); + this._syncConfig(); + }, + +@@ -127,8 +128,8 @@ + _syncConfig: function() { + this._showFlags = global.settings.get_boolean("keyboard-applet-use-flags"); + +- let groups = this._config.get_group_names(); +- if (groups.length > 1) { ++ let sources = this._ipsettings.get_value('sources'); ++ if (sources.n_children() > 1) { + this.actor.show(); + } else { + this.menu.close(); +@@ -141,25 +142,29 @@ + for (let i = 0; i < this._labelActors.length; i++) + this._labelActors[i].destroy(); + +- let short_names = this._adjustGroupNames(this._config.get_short_group_names()); +- + this._selectedLayout = null; + this._layoutItems = [ ]; + this._labelActors = [ ]; +- for (let i = 0; i < groups.length; i++) { +- let icon_name = this._config.get_group_name(i); ++ for (let i = 0; i < sources.n_children(); i++) { ++ let [type, id] = sources.get_child_value(i).deep_unpack(); ++ let displayName = id; ++ let shortName = id; ++ let xkbLayout = id; ++ if (type == 'xkb') { ++ [_exists, displayName, shortName, xkbLayout, _xkbVariant] = this._xkbInfo.get_layout_info(id); ++ } // TODO: errorhandling, handle 'ibus' ++ let icon_name = xkbLayout; // FIXME: Really? + let actor; + if (this._showFlags) + actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.FULLCOLOR, style_class: 'popup-menu-icon' }); + else +- actor = new St.Label({ text: short_names[i] }); +- let item = new LayoutMenuItem(this._config, i, actor, groups[i]); +- item._short_group_name = short_names[i]; ++ actor = new St.Label({ text: shortName }); ++ let item = new LayoutMenuItem(this._ipsettings, id, i, actor, displayName); + item._icon_name = icon_name; + this._layoutItems.push(item); + this.menu.addMenuItem(item, i); + +- let shortLabel = new St.Label({ text: short_names[i] }); ++ let shortLabel = new St.Label({ text: shortName }); + this._labelActors.push(shortLabel); + } + +@@ -167,17 +172,17 @@ + }, + + _syncGroup: function() { +- let selected = this._config.get_current_group(); ++ let current = this._ipsettings.get_uint('current'); + + if (this._selectedLayout) { + this._selectedLayout.setShowDot(false); + this._selectedLayout = null; + } + +- let item = this._layoutItems[selected]; ++ let item = this._layoutItems[current]; + item.setShowDot(true); + +- let selectedLabel = this._labelActors[selected]; ++ let selectedLabel = this._labelActors[current]; + + if (this._showFlags) { + this.set_applet_icon_name(item._icon_name); |