aboutsummaryrefslogtreecommitdiff
path: root/lib/indicator-menu.vala
diff options
context:
space:
mode:
authorWilliam Hua <william.hua@canonical.com>2015-03-10 17:20:35 +0000
committerCI Train Bot <ci-train-bot@canonical.com>2015-03-10 17:20:35 +0000
commit1573d7106b4c949a5b146873f676e0dd120b7a4f (patch)
treed97fb63931d89eb1ef9ce6ff78c5b4acfd49f911 /lib/indicator-menu.vala
parentd2738506d81c742ab5b7d0f2ab6d19535a43ca71 (diff)
parentec6c31099a0e001554f3ab167b60545808e87301 (diff)
downloadayatana-indicator-keyboard-1573d7106b4c949a5b146873f676e0dd120b7a4f.tar.gz
ayatana-indicator-keyboard-1573d7106b4c949a5b146873f676e0dd120b7a4f.tar.bz2
ayatana-indicator-keyboard-1573d7106b4c949a5b146873f676e0dd120b7a4f.zip
Basic support for Fcitx input sources. Fixes: #1363150
Approved by: Ted Gould, PS Jenkins bot, Ryan Lortie, Sebastien Bacher
Diffstat (limited to 'lib/indicator-menu.vala')
-rw-r--r--lib/indicator-menu.vala83
1 files changed, 45 insertions, 38 deletions
diff --git a/lib/indicator-menu.vala b/lib/indicator-menu.vala
index 8e5661e2..96bf64d6 100644
--- a/lib/indicator-menu.vala
+++ b/lib/indicator-menu.vala
@@ -19,10 +19,11 @@
public class Indicator.Keyboard.IndicatorMenu : MenuModel {
public enum Options {
- NONE = 0x0,
- DCONF = 0x1,
- IBUS = 0x2,
- SETTINGS = 0x4
+ NONE = 0,
+ DCONF = 1 << 0,
+ XKB = 1 << 1,
+ IBUS = 1 << 2,
+ SETTINGS = 1 << 3
}
private Options options;
@@ -32,42 +33,45 @@ public class Indicator.Keyboard.IndicatorMenu : MenuModel {
private IBusMenu properties_section;
public IndicatorMenu (ActionMap? action_map = null, Options options = Options.NONE) {
- var submenu = new Menu ();
+ this.options = options;
+ indicator_menu = new Menu ();
sources_section = new Menu ();
- submenu.append_section (null, sources_section);
- if ((options & Options.IBUS) != Options.NONE) {
- properties_section = new IBusMenu (action_map);
- properties_section.activate.connect ((property, state) => { activate (property, state); });
- submenu.append_section (null, properties_section);
- }
+ if ((options & ~Options.DCONF) != Options.NONE) {
+ var submenu = new Menu ();
- if ((options & Options.SETTINGS) != Options.NONE) {
- var settings_section = new Menu ();
- settings_section.append (_ ("Character Map"), "indicator.map");
- settings_section.append (_ ("Keyboard Layout Chart"), "indicator.chart");
- settings_section.append (_ ("Text Entry Settings..."), "indicator.settings");
- submenu.append_section (null, settings_section);
- }
+ submenu.append_section (null, sources_section);
- var indicator = new MenuItem.submenu (null, submenu);
- indicator.set_detailed_action ("indicator.indicator");
- indicator.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
-
- /* We need special mouse actions on the lock screen. */
- if ((options & Options.DCONF) != Options.NONE) {
- indicator.set_attribute ("x-canonical-secondary-action", "s", "indicator.next");
- indicator.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
- } else {
- indicator.set_attribute ("x-canonical-secondary-action", "s", "indicator.locked_next");
- indicator.set_attribute ("x-canonical-scroll-action", "s", "indicator.locked_scroll");
- }
+ if (Options.IBUS in options) {
+ properties_section = new IBusMenu (action_map);
+ properties_section.activate.connect ((property, state) => { activate (property, state); });
+ submenu.append_section (null, properties_section);
+ }
- indicator_menu = new Menu ();
- indicator_menu.append_item (indicator);
+ if (Options.SETTINGS in options) {
+ var settings_section = new Menu ();
+ settings_section.append (_ ("Character Map"), "indicator.map");
+ settings_section.append (_ ("Keyboard Layout Chart"), "indicator.chart");
+ settings_section.append (_ ("Text Entry Settings..."), "indicator.settings");
+ submenu.append_section (null, settings_section);
+ }
- this.options = options;
+ var indicator = new MenuItem.submenu (null, submenu);
+ indicator.set_detailed_action ("indicator.indicator");
+ indicator.set_attribute ("x-canonical-type", "s", "com.canonical.indicator.root");
+
+ /* We need special mouse actions on the lock screen. */
+ if (Options.DCONF in options) {
+ indicator.set_attribute ("x-canonical-secondary-action", "s", "indicator.next");
+ indicator.set_attribute ("x-canonical-scroll-action", "s", "indicator.scroll");
+ } else {
+ indicator.set_attribute ("x-canonical-secondary-action", "s", "indicator.locked_next");
+ indicator.set_attribute ("x-canonical-scroll-action", "s", "indicator.locked_scroll");
+ }
+
+ indicator_menu.append_item (indicator);
+ }
}
public signal void activate (IBus.Property property, IBus.PropState state);
@@ -76,10 +80,13 @@ public class Indicator.Keyboard.IndicatorMenu : MenuModel {
sources_section.remove_all ();
for (var i = 0; i < sources.length; i++) {
- if (!sources[i].is_ibus || (options & Options.IBUS) != Options.NONE) {
+ var visible = (sources[i].is_xkb && Options.XKB in options) ||
+ (sources[i].is_ibus && Options.IBUS in options);
+
+ if (visible) {
string action;
- if ((options & Options.DCONF) != Options.NONE) {
+ if (Options.DCONF in options) {
action = "indicator.current";
} else {
action = "indicator.active";
@@ -99,13 +106,13 @@ public class Indicator.Keyboard.IndicatorMenu : MenuModel {
}
public void set_properties (IBus.PropList properties) {
- if ((options & Options.IBUS) != Options.NONE) {
+ if (Options.IBUS in options) {
properties_section.set_properties (properties);
}
}
public void update_property (IBus.Property property) {
- if ((options & Options.IBUS) != Options.NONE) {
+ if (Options.IBUS in options) {
properties_section.update_property (property);
}
}
@@ -122,7 +129,7 @@ public class Indicator.Keyboard.IndicatorMenu : MenuModel {
indicator_menu.get_item_attributes (item_index, out attributes);
}
- public override void get_item_links (int item_index, out HashTable<string, MenuModel>? links) {
+ public override void get_item_links (int item_index, out HashTable<string, MenuModel> links) {
indicator_menu.get_item_links (item_index, out links);
}