aboutsummaryrefslogtreecommitdiff
path: root/lib/indicator-menu.vala
diff options
context:
space:
mode:
Diffstat (limited to 'lib/indicator-menu.vala')
-rw-r--r--lib/indicator-menu.vala77
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) {