Merge 24-missing_include.patch provided by Alessio Treglia for the Debian package.
[terminatorX.git] / src / tX_mouse.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2014  Alexander K├Ânig
4  
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9  
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14  
15     You should have received a copy of the GNU General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  
18     File: tX_mouse.h
19  
20     Description: Header to tX_mouse.cc
21 */    
22
23 #ifndef _h_tx_mouse 
24 #define _h_tx_mouse
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #include <tX_types.h>
31 #include <unistd.h>
32 #include <X11/Xlib.h>
33 #include <X11/extensions/XInput.h>
34 #include <X11/keysym.h>
35 #include <glib.h>
36 #include <gdk/gdk.h>
37 #include <gdk/gdkkeysyms.h>
38 #include <gtk/gtk.h>
39
40 /* Use old gdk keys if the new ones are not yet defined */
41
42 #ifndef GDK_KEY_Alt_L
43 #define GDK_KEY_Alt_L GDK_Alt_L
44 #endif
45 #ifndef GDK_KEY_Alt_R
46 #define GDK_KEY_Alt_R GDK_Alt_R
47 #endif
48 #ifndef GDK_KEY_BackSpace
49 #define GDK_KEY_BackSpace GDK_BackSpace
50 #endif
51 #ifndef GDK_KEY_Control_L
52 #define GDK_KEY_Control_L GDK_Control_L
53 #endif
54 #ifndef GDK_KEY_Control_R
55 #define GDK_KEY_Control_R GDK_Control_R
56 #endif
57 #ifndef GDK_KEY_Escape
58 #define GDK_KEY_Escape GDK_Escape
59 #endif
60 #ifndef GDK_KEY_f
61 #define GDK_KEY_f GDK_f
62 #endif
63 #ifndef GDK_KEY_F1
64 #define GDK_KEY_F1 GDK_F1
65 #endif
66 #ifndef GDK_KEY_F10
67 #define GDK_KEY_F10 GDK_F10
68 #endif
69 #ifndef GDK_KEY_F11
70 #define GDK_KEY_F11 GDK_F11
71 #endif
72 #ifndef GDK_KEY_F12
73 #define GDK_KEY_F12 GDK_F12
74 #endif
75 #ifndef GDK_KEY_F2
76 #define GDK_KEY_F2 GDK_F2
77 #endif
78 #ifndef GDK_KEY_F3
79 #define GDK_KEY_F3 GDK_F3
80 #endif
81 #ifndef GDK_KEY_F4
82 #define GDK_KEY_F4 GDK_F4
83 #endif
84 #ifndef GDK_KEY_F5
85 #define GDK_KEY_F5 GDK_F5
86 #endif
87 #ifndef GDK_KEY_F6
88 #define GDK_KEY_F6 GDK_F6
89 #endif
90 #ifndef GDK_KEY_F7
91 #define GDK_KEY_F7 GDK_F7
92 #endif
93 #ifndef GDK_KEY_F8
94 #define GDK_KEY_F8 GDK_F8
95 #endif
96 #ifndef GDK_KEY_F9
97 #define GDK_KEY_F9 GDK_F9
98 #endif
99 #ifndef GDK_KEY_m
100 #define GDK_KEY_m GDK_m
101 #endif
102 #ifndef GDK_KEY_Return
103 #define GDK_KEY_Return GDK_Return
104 #endif
105 #ifndef GDK_KEY_s
106 #define GDK_KEY_s GDK_s
107 #endif
108 #ifndef GDK_KEY_space
109 #define GDK_KEY_space GDK_space
110 #endif
111 #ifndef GDK_KEY_Tab
112 #define GDK_KEY_Tab GDK_Tab
113 #endif
114 #ifndef GDK_KEY_w
115 #define GDK_KEY_w GDK_w
116 #endif
117 #ifndef GDK_KEY_space
118 #define GDK_KEY_space GDK_space
119 #endif
120
121 class tx_mouse
122 {
123         XID OrgXPointer;
124         char OrgXPointerName[256];
125         XDevice *input_device;
126         XEvent xev;
127         long mask;
128         XMotionEvent *xmot;
129         XKeyEvent *xkey;
130         XButtonEvent *xbut;
131         bool warp_override;
132         GdkEventMask savedEventMask;
133
134         gboolean enable_auto_mnemonics;
135         guint last_button_press;
136         guint last_button_release;
137
138 #ifdef USE_DGA2 
139         XEvent xev_copy;
140         XDGAButtonEvent *xdgabut;
141         XDGAKeyEvent *xdgakey;
142         XDGAMotionEvent *xdgamot;
143 #endif  
144         
145         Time otime, ntime;
146         f_prec dtime;
147         Display *dpy;
148         KeySym key;
149         float warp;
150         
151         int grabbed;
152
153         public:
154         int set_xinput();
155         void reset_xinput();
156         bool is_grabbed() { return grabbed != 0; }
157                 
158         int grab();
159         int check_event();
160         void ungrab();
161         tx_mouse();
162         
163         void motion_notify(GtkWidget *widget, GdkEventMotion *eventMotion);
164         void button_press(GtkWidget *widget, GdkEventButton *eventButton);
165         void button_release(GtkWidget *widget, GdkEventButton *eventButton);
166         void key_press(GtkWidget *widget, GdkEventKey *eventKey);
167         void key_release(GtkWidget *widget, GdkEventKey *eventKey);
168
169         static gboolean motion_notify_wrap(GtkWidget *widget, GdkEventMotion *eventMotion, void *data);
170         static gboolean button_press_wrap(GtkWidget *widget, GdkEventButton *eventButton, void *data);
171         static gboolean button_release_wrap(GtkWidget *widget, GdkEventButton *eventButton, void *data);
172         static gboolean key_press_wrap(GtkWidget *widget, GdkEventKey *eventKey, void *data);
173         static gboolean key_release_wrap(GtkWidget *widget, GdkEventKey *eventKey, void *data);
174
175         private:
176         void set_x_pointer(char*);
177 };
178
179
180 #endif