summaryrefslogtreecommitdiff
path: root/libcaribou/display-adapter.vala
blob: 6ffbdd5d1f955f01224559e5e32f8058a33dbaa4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
namespace Caribou {
    public delegate void KeyButtonCallback (uint keybuttoncode, bool pressed);

    /**
     * Base class of singleton object providing access to the display server.
     */
    public abstract class DisplayAdapter : Object {
        /**
         * Display instance.
         */
        public Gdk.Display display { get; construct; }

        /**
         * Signal emitted when modifiers have changed.
         */
        public signal void modifiers_changed (uint modifiers);

        /**
         * Signal emitted when the current group has changed.
         *
         * @param gid group index
         * @param group group name
         * @param variant variant name
         */
        public signal void group_changed (uint gid,
                                          string group,
                                          string variant);

        /**
         * Signal emitted when the group configuration has changed.
         */
        public signal void config_changed ();

        /**
         * Send key press event.
         *
         * @param keyval keyval
         */
        public abstract void keyval_press (uint keyval);

        /**
         * Send key release event.
         *
         * @param keyval keyval
         */
        public abstract void keyval_release (uint keyval);

        /**
         * Lock modifiers.
         *
         * @param mask modifiers
         */
        public abstract void mod_lock (uint mask);

        /**
         * Unlock modifiers.
         *
         * @param mask modifiers
         */
        public abstract void mod_unlock (uint mask);

        /**
         * Latch modifiers.
         *
         * @param mask modifiers
         */
        public abstract void mod_latch (uint mask);

        /**
         * Unlatch modifiers.
         *
         * @param mask modifiers
         */
        public abstract void mod_unlatch (uint mask);

        /**
         * Get the current group.
         *
         * @param group_name group name
         * @param variant_name variant name
         */
        public abstract uint get_current_group (out string group_name,
                                                out string variant_name);

        /**
         * Get available groups.
         *
         * @param group_names list of groups
         * @param variant_names list of variants, indexed same as group_names
         */
        public abstract void get_groups (out string[] group_names,
                                         out string[] variant_names);

        /**
         * Register key callback.
         *
         * @param keyval keyval
         * @param func callback
         */
        public abstract void register_key_func (uint keyval,
                                                KeyButtonCallback? func);

        /**
         * Register button callback.
         *
         * @param button button
         * @param func callback
         */
        public abstract void register_button_func (uint button,
                                                   KeyButtonCallback? func);

        static DisplayAdapter instance;
        public static bool set_default (DisplayAdapter adapter) {
            if (instance != null)
                return false;

            instance = adapter;
            return true;
        }
        public static DisplayAdapter get_default () {
            if (instance == null) {
                var display = Gdk.DisplayManager.get ().get_default_display ();
                var adapter_type = typeof (NullAdapter);
                if (display != null) {
                    var adapters = new Gee.HashMap<Type, Type> ();
                    adapters.set (typeof (Gdk.X11Display), typeof (XAdapter));

                    var display_type = display.get_type ();
                    if (adapters.has_key (display_type))
                        adapter_type = adapters.get (display_type);
                }
                instance = (DisplayAdapter) Object.new (adapter_type,
                                                        "display", display);
            }
            return instance;
        }
    }

    public class NullAdapter : DisplayAdapter {
        public override void keyval_press (uint keyval) {
        }

        public override void keyval_release (uint keyval) {
        }

        public override void mod_lock (uint mask) {
        }

        public override void mod_unlock (uint mask) {
        }

        public override void mod_latch (uint mask) {
        }

        public override void mod_unlatch (uint mask) {
        } 

        public override uint get_current_group (out string group_name,
                                                out string variant_name)
        {
            group_name = "us";
            variant_name = "";
            return 0;
        }

        public override void get_groups (out string[] group_names,
                                         out string[] variant_names)
        {
            group_names = new string[] { "us" };
            variant_names = new string[] { "" };
        }

        public override void register_key_func (uint keyval,
                                                KeyButtonCallback? func)
        {
        }

        public override void register_button_func (uint button,
                                                   KeyButtonCallback? func)
        {
        }
    }
}