1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include "config.h"
19
20 #include "gdkeventtranslator.h"
21 #include "gdksurface-x11.h"
22
23 typedef GdkEventTranslatorIface GdkEventTranslatorInterface;
24 G_DEFINE_INTERFACE (GdkEventTranslator, _gdk_x11_event_translator, G_TYPE_OBJECT);
25
26
27 static void
_gdk_x11_event_translator_default_init(GdkEventTranslatorInterface * iface)28 _gdk_x11_event_translator_default_init (GdkEventTranslatorInterface *iface)
29 {
30 }
31
32
33 GdkEvent *
_gdk_x11_event_translator_translate(GdkEventTranslator * translator,GdkDisplay * display,const XEvent * xevent)34 _gdk_x11_event_translator_translate (GdkEventTranslator *translator,
35 GdkDisplay *display,
36 const XEvent *xevent)
37 {
38 GdkEventTranslatorIface *iface;
39
40 g_return_val_if_fail (GDK_IS_EVENT_TRANSLATOR (translator), NULL);
41 g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
42
43 iface = GDK_EVENT_TRANSLATOR_GET_IFACE (translator);
44
45 if (!iface->translate_event)
46 return NULL;
47
48 return (iface->translate_event) (translator, display, xevent);
49 }
50
51 GdkEventMask
_gdk_x11_event_translator_get_handled_events(GdkEventTranslator * translator)52 _gdk_x11_event_translator_get_handled_events (GdkEventTranslator *translator)
53 {
54 GdkEventTranslatorIface *iface;
55
56 g_return_val_if_fail (GDK_IS_EVENT_TRANSLATOR (translator), 0);
57
58 iface = GDK_EVENT_TRANSLATOR_GET_IFACE (translator);
59
60 if (iface->get_handled_events)
61 return iface->get_handled_events (translator);
62
63 return 0;
64 }
65
66 void
_gdk_x11_event_translator_select_surface_events(GdkEventTranslator * translator,Window window,GdkEventMask event_mask)67 _gdk_x11_event_translator_select_surface_events (GdkEventTranslator *translator,
68 Window window,
69 GdkEventMask event_mask)
70 {
71 GdkEventTranslatorIface *iface;
72
73 g_return_if_fail (GDK_IS_EVENT_TRANSLATOR (translator));
74
75 iface = GDK_EVENT_TRANSLATOR_GET_IFACE (translator);
76
77 if (iface->select_surface_events)
78 iface->select_surface_events (translator, window, event_mask);
79 }
80
81 GdkSurface *
_gdk_x11_event_translator_get_surface(GdkEventTranslator * translator,GdkDisplay * display,const XEvent * xevent)82 _gdk_x11_event_translator_get_surface (GdkEventTranslator *translator,
83 GdkDisplay *display,
84 const XEvent *xevent)
85 {
86 GdkEventTranslatorIface *iface;
87
88 g_return_val_if_fail (GDK_IS_EVENT_TRANSLATOR (translator), NULL);
89
90 iface = GDK_EVENT_TRANSLATOR_GET_IFACE (translator);
91
92 if (iface->get_surface)
93 return iface->get_surface (translator, xevent);
94
95 return NULL;
96 }
97