diff options
author | Daiki Ueno <ueno@unixuser.org> | 2013-08-09 15:31:57 +0200 |
---|---|---|
committer | Daiki Ueno <ueno@unixuser.org> | 2013-08-09 17:55:11 +0200 |
commit | f9ad115a4a1c6deb417de2c60894f3e9d93dd0b2 (patch) | |
tree | 2612d07b103f263b7a13575ea224355f5903bd9e /libcaribou/xadapter.vala | |
parent | d43bac4eca32bbfd2c22877d3246f5eecd522cc1 (diff) | |
download | caribou-f9ad115a4a1c6deb417de2c60894f3e9d93dd0b2.tar.gz |
libcaribou: factor out X dependency
This patch adds a new abstract class DisplayAdapter to handle multiple
display backends, other than X.
https://bugzilla.gnome.org/show_bug.cgi?id=705720
Diffstat (limited to 'libcaribou/xadapter.vala')
-rw-r--r-- | libcaribou/xadapter.vala | 46 |
1 files changed, 17 insertions, 29 deletions
diff --git a/libcaribou/xadapter.vala b/libcaribou/xadapter.vala index dbc34f9..92fba5e 100644 --- a/libcaribou/xadapter.vala +++ b/libcaribou/xadapter.vala @@ -2,15 +2,8 @@ namespace Caribou { /** * Singleton object providing access to the X Window facility. */ - public class XAdapter : Object { - - /* Signals */ - public signal void modifiers_changed (uint modifiers); - public signal void group_changed (uint gid, string group, string variant); - public signal void config_changed (); - + public class XAdapter : DisplayAdapter { /* Private properties */ - static XAdapter instance; unowned X.Display xdisplay; X.ID xid; Xkb.Desc xkbdesc; @@ -21,8 +14,6 @@ namespace Caribou { uchar group; uint[] level_switch_modifiers; - public delegate void KeyButtonCallback (uint keybuttoncode, bool pressed); - private class KeyButtonHandler { public unowned KeyButtonCallback cb { get; private set; } public KeyButtonHandler (KeyButtonCallback cb) { @@ -81,12 +72,6 @@ namespace Caribou { Xkb.free_keyboard(this.xkbdesc, Xkb.GBN_AllComponentsMask, true); } - public static XAdapter get_default() { - if (instance == null) - instance = new XAdapter (); - return instance; - } - private Gdk.FilterReturn x_event_filter (Gdk.XEvent xevent, Gdk.Event event) { // After the following commit, Vala changed the definition // of Gdk.XEvent from struct to class: @@ -103,7 +88,7 @@ namespace Caribou { Xkb.Event* xkbev = (Xkb.Event *) pointer; X.Event* xev = (X.Event *) pointer; - this.xkl_engine.filter_events(xev); + this.xkl_engine.filter_events(xev); if (xev.type == X.EventType.ButtonPress || xev.type == X.EventType.ButtonRelease) { @@ -122,7 +107,7 @@ namespace Caribou { xev.type == X.EventType.KeyPress); } else if (xkbev.any.xkb_type == Xkb.StateNotify) { Xkb.StateNotifyEvent *sevent = &xkbev.state; - if ((sevent.changed & Xkb.ModifierStateMask) != 0) { + if ((sevent.changed & Xkb.ModifierStateMask) != 0) { this.modifiers = (uchar) sevent.mods; } } @@ -254,7 +239,7 @@ namespace Caribou { return keycode; } - public void keyval_press (uint keyval) { + public override void keyval_press (uint keyval) { uint mask; uchar keycode = keycode_for_keyval (keyval, out mask); @@ -265,34 +250,34 @@ namespace Caribou { this.xdisplay.flush (); } - public void keyval_release (uint keyval) { + public override void keyval_release (uint keyval) { uchar keycode = keycode_for_keyval (keyval, null); XTest.fake_key_event (this.xdisplay, keycode, false, X.CURRENT_TIME); this.xdisplay.flush (); } - public void mod_lock (uint mask) { + public override void mod_lock (uint mask) { Xkb.lock_modifiers (this.xdisplay, Xkb.UseCoreKbd, mask, mask); this.xdisplay.flush (); } - public void mod_unlock (uint mask) { + public override void mod_unlock (uint mask) { Xkb.lock_modifiers (this.xdisplay, Xkb.UseCoreKbd, mask, 0); this.xdisplay.flush(); } - public void mod_latch (uint mask) { + public override void mod_latch (uint mask) { Xkb.latch_modifiers (this.xdisplay, Xkb.UseCoreKbd, mask, mask); this.xdisplay.flush (); } - public void mod_unlatch (uint mask) { + public override void mod_unlatch (uint mask) { Xkb.latch_modifiers (this.xdisplay, Xkb.UseCoreKbd, mask, 0); this.xdisplay.flush (); } - public uint get_current_group (out string group_name, + public override uint get_current_group (out string group_name, out string variant_name) { Xkl.ConfigRec config_rec = new Xkl.ConfigRec (); config_rec.get_from_server (this.xkl_engine); @@ -304,7 +289,7 @@ namespace Caribou { return this.group; } - public void get_groups (out string[] group_names, + public override void get_groups (out string[] group_names, out string[] variant_names) { int i; Xkl.ConfigRec config_rec = new Xkl.ConfigRec (); @@ -328,7 +313,9 @@ namespace Caribou { } } - public void register_key_func (uint keyval, KeyButtonCallback? func) { + public override void register_key_func (uint keyval, + KeyButtonCallback? func) + { uchar keycode; uint modmask; @@ -349,7 +336,9 @@ namespace Caribou { } } - public void register_button_func (uint button, KeyButtonCallback? func) { + public override void register_button_func (uint button, + KeyButtonCallback? func) + { if (func != null) { var handler = new KeyButtonHandler (func); button_funcs.set (button, handler); @@ -363,6 +352,5 @@ namespace Caribou { xdisplay.ungrab_button (button, 0, xid); } } - } } |