diff options
Diffstat (limited to 'lib/indicator-menu.vala')
-rw-r--r-- | lib/indicator-menu.vala | 77 |
1 files changed, 43 insertions, 34 deletions
diff --git a/lib/indicator-menu.vala b/lib/indicator-menu.vala index 8e5661e2..209fcbf1 100644 --- a/lib/indicator-menu.vala +++ b/lib/indicator-menu.vala @@ -19,10 +19,12 @@ public class Indicator.Keyboard.IndicatorMenu : MenuModel { public enum Options { - NONE = 0x0, - DCONF = 0x1, - IBUS = 0x2, - SETTINGS = 0x4 + NONE = 0x00, + DCONF = 0x01, + XKB = 0x02, + IBUS = 0x04, + FCITX = 0x08, + SETTINGS = 0x10 } private Options options; @@ -32,42 +34,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 & 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); + } - indicator_menu = new Menu (); - indicator_menu.append_item (indicator); + 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); + } - 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 & 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"); + } + + indicator_menu.append_item (indicator); + } } public signal void activate (IBus.Property property, IBus.PropState state); @@ -76,7 +81,11 @@ 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 & Options.XKB) != Options.NONE) || + (sources[i].is_ibus && (options & Options.IBUS) != Options.NONE) || + (sources[i].is_fcitx && (options & Options.FCITX) != Options.NONE); + + if (visible) { string action; if ((options & Options.DCONF) != Options.NONE) { |