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