1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 
3 /*
4  * Copyright 2014 Red Hat, Inc.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation; either version 2 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  *
19  * Author: Carlos Garnacho <carlosg@gnome.org>
20  */
21 
22 #ifndef META_INPUT_SETTINGS_PRIVATE_H
23 #define META_INPUT_SETTINGS_PRIVATE_H
24 
25 #include <gdesktop-enums.h>
26 
27 #ifdef HAVE_LIBWACOM
28 #include <libwacom/libwacom.h>
29 #endif
30 
31 #include "backends/meta-backend-types.h"
32 #include "clutter/clutter.h"
33 #include "meta/display.h"
34 
35 #define META_TYPE_INPUT_SETTINGS (meta_input_settings_get_type ())
36 G_DECLARE_DERIVABLE_TYPE (MetaInputSettings, meta_input_settings,
37                           META, INPUT_SETTINGS, GObject)
38 
39 typedef enum
40 {
41   META_A11Y_KEYBOARD_ENABLED = 1 << 0,
42   META_A11Y_TIMEOUT_ENABLED = 1 << 1,
43   META_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
44   META_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
45   META_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
46   META_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
47   META_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
48   META_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
49   META_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
50   META_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
51   META_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
52   META_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
53   META_A11Y_STICKY_KEYS_BEEP = 1 << 12,
54   META_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
55 } MetaKeyboardA11yFlags;
56 
57 /**
58  * MetaKbdA11ySettings:
59  *
60  * The #MetaKbdA11ySettings structure contains keyboard accessibility
61  * settings
62  *
63  */
64 typedef struct _MetaKbdA11ySettings
65 {
66   MetaKeyboardA11yFlags controls;
67   int slowkeys_delay;
68   int debounce_delay;
69   int timeout_delay;
70   int mousekeys_init_delay;
71   int mousekeys_max_speed;
72   int mousekeys_accel_time;
73 } MetaKbdA11ySettings;
74 
75 struct _MetaInputSettingsClass
76 {
77   GObjectClass parent_class;
78 
79   void (* set_send_events)   (MetaInputSettings        *settings,
80                               ClutterInputDevice       *device,
81                               GDesktopDeviceSendEvents  mode);
82   void (* set_matrix)        (MetaInputSettings  *settings,
83                               ClutterInputDevice *device,
84                               const float         matrix[6]);
85   void (* set_speed)         (MetaInputSettings  *settings,
86                               ClutterInputDevice *device,
87                               gdouble             speed);
88   void (* set_left_handed)   (MetaInputSettings  *settings,
89                               ClutterInputDevice *device,
90                               gboolean            enabled);
91   void (* set_tap_enabled)   (MetaInputSettings  *settings,
92                               ClutterInputDevice *device,
93                               gboolean            enabled);
94   void (* set_tap_button_map) (MetaInputSettings            *settings,
95                                ClutterInputDevice           *device,
96                                GDesktopTouchpadTapButtonMap  mode);
97   void (* set_tap_and_drag_enabled) (MetaInputSettings  *settings,
98                                      ClutterInputDevice *device,
99                                      gboolean            enabled);
100   void (* set_tap_and_drag_lock_enabled) (MetaInputSettings  *settings,
101                                           ClutterInputDevice *device,
102                                           gboolean            enabled);
103   void (* set_disable_while_typing) (MetaInputSettings  *settings,
104                                      ClutterInputDevice *device,
105                                      gboolean            enabled);
106   void (* set_invert_scroll) (MetaInputSettings  *settings,
107                               ClutterInputDevice *device,
108                               gboolean            inverted);
109   void (* set_edge_scroll)   (MetaInputSettings  *settings,
110                               ClutterInputDevice *device,
111                               gboolean            enabled);
112   void (* set_two_finger_scroll) (MetaInputSettings  *settings,
113                                   ClutterInputDevice *device,
114                                   gboolean            enabled);
115   void (* set_scroll_button) (MetaInputSettings  *settings,
116                               ClutterInputDevice *device,
117                               guint               button,
118                               gboolean            button_lock);
119 
120   void (* set_click_method)  (MetaInputSettings            *settings,
121                               ClutterInputDevice           *device,
122                               GDesktopTouchpadClickMethod   mode);
123 
124   void (* set_keyboard_repeat) (MetaInputSettings *settings,
125                                 gboolean           repeat,
126                                 guint              delay,
127                                 guint              interval);
128 
129   void (* set_tablet_mapping)        (MetaInputSettings      *settings,
130                                       ClutterInputDevice     *device,
131                                       GDesktopTabletMapping   mapping);
132   void (* set_tablet_aspect_ratio)   (MetaInputSettings      *settings,
133                                       ClutterInputDevice     *device,
134                                       double                  ratio);
135   void (* set_tablet_area)           (MetaInputSettings      *settings,
136                                       ClutterInputDevice     *device,
137                                       gdouble                 padding_left,
138                                       gdouble                 padding_right,
139                                       gdouble                 padding_top,
140                                       gdouble                 padding_bottom);
141 
142   void (* set_mouse_accel_profile) (MetaInputSettings          *settings,
143                                     ClutterInputDevice         *device,
144                                     GDesktopPointerAccelProfile profile);
145   void (* set_trackball_accel_profile) (MetaInputSettings          *settings,
146                                         ClutterInputDevice         *device,
147                                         GDesktopPointerAccelProfile profile);
148 
149   void (* set_stylus_pressure) (MetaInputSettings            *settings,
150                                 ClutterInputDevice           *device,
151                                 ClutterInputDeviceTool       *tool,
152                                 const gint32                  curve[4]);
153   void (* set_stylus_button_map) (MetaInputSettings          *settings,
154                                   ClutterInputDevice         *device,
155                                   ClutterInputDeviceTool     *tool,
156                                   GDesktopStylusButtonAction  primary,
157                                   GDesktopStylusButtonAction  secondary,
158                                   GDesktopStylusButtonAction  tertiary);
159 
160   void (* set_mouse_middle_click_emulation) (MetaInputSettings  *settings,
161                                              ClutterInputDevice *device,
162                                              gboolean            enabled);
163   void (* set_touchpad_middle_click_emulation) (MetaInputSettings  *settings,
164                                                 ClutterInputDevice *device,
165                                                 gboolean            enabled);
166   void (* set_trackball_middle_click_emulation) (MetaInputSettings  *settings,
167                                                  ClutterInputDevice *device,
168                                                  gboolean            enabled);
169 
170   gboolean (* has_two_finger_scroll) (MetaInputSettings  *settings,
171                                       ClutterInputDevice *device);
172   gboolean (* is_trackball_device) (MetaInputSettings  *settings,
173                                     ClutterInputDevice *device);
174 };
175 
176 void meta_input_settings_maybe_save_numlock_state (MetaInputSettings *input_settings,
177                                                    gboolean           numlock_state);
178 gboolean meta_input_settings_maybe_restore_numlock_state (MetaInputSettings *input_settings);
179 
180 void meta_input_settings_set_device_matrix (MetaInputSettings  *input_settings,
181                                             ClutterInputDevice *device,
182                                             float               matrix[6]);
183 void meta_input_settings_set_device_enabled (MetaInputSettings  *input_settings,
184                                              ClutterInputDevice *device,
185                                              gboolean            enabled);
186 void meta_input_settings_set_device_aspect_ratio (MetaInputSettings  *input_settings,
187                                                   ClutterInputDevice *device,
188                                                   double              aspect_ratio);
189 
190 void meta_input_settings_get_kbd_a11y_settings (MetaInputSettings   *input_settings,
191                                                 MetaKbdA11ySettings *a11y_settings);
192 
193 void meta_input_settings_add_device (MetaInputSettings  *input_settings,
194                                      ClutterInputDevice *device);
195 void meta_input_settings_remove_device (MetaInputSettings  *input_settings,
196                                         ClutterInputDevice *device);
197 void meta_input_settings_notify_tool_change (MetaInputSettings      *input_settings,
198                                              ClutterInputDevice     *device,
199                                              ClutterInputDeviceTool *tool);
200 void meta_input_settings_notify_kbd_a11y_change (MetaInputSettings     *input_settings,
201                                                  MetaKeyboardA11yFlags  new_flags,
202                                                  MetaKeyboardA11yFlags  what_changed);
203 
204 #endif /* META_INPUT_SETTINGS_PRIVATE_H */
205