1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2
3 /*
4 * Copyright (C) 2016 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
20 #include "config.h"
21
22 #include "tests/meta-backend-test.h"
23
24 #include "tests/meta-gpu-test.h"
25 #include "tests/meta-monitor-manager-test.h"
26
27 struct _MetaBackendTest
28 {
29 MetaBackendX11Nested parent;
30
31 MetaGpu *gpu;
32
33 gboolean is_lid_closed;
34 };
35
G_DEFINE_TYPE(MetaBackendTest,meta_backend_test,META_TYPE_BACKEND_X11_NESTED)36 G_DEFINE_TYPE (MetaBackendTest, meta_backend_test, META_TYPE_BACKEND_X11_NESTED)
37
38 void
39 meta_backend_test_set_is_lid_closed (MetaBackendTest *backend_test,
40 gboolean is_lid_closed)
41 {
42 backend_test->is_lid_closed = is_lid_closed;
43 }
44
45 MetaGpu *
meta_backend_test_get_gpu(MetaBackendTest * backend_test)46 meta_backend_test_get_gpu (MetaBackendTest *backend_test)
47 {
48 return backend_test->gpu;
49 }
50
51 static gboolean
meta_backend_test_is_lid_closed(MetaBackend * backend)52 meta_backend_test_is_lid_closed (MetaBackend *backend)
53 {
54 MetaBackendTest *backend_test = META_BACKEND_TEST (backend);
55
56 return backend_test->is_lid_closed;
57 }
58
59 static void
meta_backend_test_init_gpus(MetaBackendX11Nested * backend_x11_nested)60 meta_backend_test_init_gpus (MetaBackendX11Nested *backend_x11_nested)
61 {
62 MetaBackendTest *backend_test = META_BACKEND_TEST (backend_x11_nested);
63
64 backend_test->gpu = g_object_new (META_TYPE_GPU_TEST,
65 "backend", backend_test,
66 NULL);
67 meta_backend_add_gpu (META_BACKEND (backend_test), backend_test->gpu);
68 }
69
70 static void
meta_backend_test_init(MetaBackendTest * backend_test)71 meta_backend_test_init (MetaBackendTest *backend_test)
72 {
73 }
74
75 static MetaMonitorManager *
meta_backend_test_create_monitor_manager(MetaBackend * backend,GError ** error)76 meta_backend_test_create_monitor_manager (MetaBackend *backend,
77 GError **error)
78 {
79 return g_object_new (META_TYPE_MONITOR_MANAGER_TEST,
80 "backend", backend,
81 NULL);
82 }
83
84 ClutterInputDevice *
meta_backend_test_add_test_device(MetaBackendTest * backend_test,const char * name,ClutterInputDeviceType device_type,int n_buttons)85 meta_backend_test_add_test_device (MetaBackendTest *backend_test,
86 const char *name,
87 ClutterInputDeviceType device_type,
88 int n_buttons)
89 {
90 g_autoptr (GList) devices = NULL;
91 MetaBackend *backend = META_BACKEND (backend_test);
92 ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
93 ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend);
94 ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
95 ClutterInputDevice *device;
96 ClutterEvent *event;
97 const char *product_id;
98 bool has_cursor = TRUE;
99
100 switch (device_type)
101 {
102 case CLUTTER_POINTER_DEVICE:
103 product_id = "MetaTestPointer";
104 break;
105 case CLUTTER_KEYBOARD_DEVICE:
106 product_id = "MetaTestKeyboard";
107 has_cursor = FALSE;
108 break;
109 case CLUTTER_EXTENSION_DEVICE:
110 product_id = "MetaTestExtension";
111 has_cursor = FALSE;
112 break;
113 case CLUTTER_JOYSTICK_DEVICE:
114 product_id = "MetaTestJoystick";
115 break;
116 case CLUTTER_TABLET_DEVICE:
117 product_id = "MetaTestTablet";
118 break;
119 case CLUTTER_TOUCHPAD_DEVICE:
120 product_id = "MetaTestTouchpad";
121 break;
122 case CLUTTER_TOUCHSCREEN_DEVICE:
123 product_id = "MetaTestTouchscreen";
124 break;
125 case CLUTTER_PEN_DEVICE:
126 product_id = "MetaTestPen";
127 break;
128 case CLUTTER_ERASER_DEVICE:
129 product_id = "MetaTestEraser";
130 break;
131 case CLUTTER_CURSOR_DEVICE:
132 product_id = "MetaTestCursor";
133 break;
134 case CLUTTER_PAD_DEVICE:
135 product_id = "MetaTestPad";
136 has_cursor = FALSE;
137 break;
138
139 default:
140 g_assert_not_reached ();
141 }
142
143 device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE,
144 "name", name,
145 "device-type", CLUTTER_TOUCHSCREEN_DEVICE,
146 "seat", seat,
147 "has-cursor", has_cursor,
148 "backend", clutter_backend,
149 "vendor-id", "MetaTest",
150 "product-id", product_id,
151 "n-buttons", n_buttons,
152 NULL);
153
154 event = clutter_event_new (CLUTTER_DEVICE_ADDED);
155 clutter_event_set_device (event, device);
156 clutter_event_set_stage (event, stage);
157 clutter_event_put (event);
158 clutter_event_free (event);
159
160 return device;
161 }
162
163 void
meta_backend_test_remove_device(MetaBackendTest * backend_test,ClutterInputDevice * device)164 meta_backend_test_remove_device (MetaBackendTest *backend_test,
165 ClutterInputDevice *device)
166 {
167 MetaBackend *backend = META_BACKEND (backend_test);
168 ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
169 ClutterEvent *event;
170
171 event = clutter_event_new (CLUTTER_DEVICE_REMOVED);
172 clutter_event_set_device (event, device);
173 clutter_event_set_stage (event, stage);
174 clutter_event_put (event);
175 clutter_event_free (event);
176 }
177
178 static void
meta_backend_test_class_init(MetaBackendTestClass * klass)179 meta_backend_test_class_init (MetaBackendTestClass *klass)
180 {
181 MetaBackendClass *backend_class = META_BACKEND_CLASS (klass);
182 MetaBackendX11NestedClass *backend_x11_nested_class =
183 META_BACKEND_X11_NESTED_CLASS (klass);
184
185 backend_class->create_monitor_manager = meta_backend_test_create_monitor_manager;
186 backend_class->is_lid_closed = meta_backend_test_is_lid_closed;
187
188 backend_x11_nested_class->init_gpus = meta_backend_test_init_gpus;
189 }
190