/* * _clutter_device_manager_update_devices: * @device_manager: a #ClutterDeviceManager * * Updates every #ClutterInputDevice handled by @device_manager * by performing a pick paint at the coordinates of each pointer * device */ void _clutter_device_manager_update_devices (ClutterDeviceManager *device_manager) { const GSList *d; for (d = clutter_device_manager_peek_devices (device_manager); d != NULL; d = d->next) { ClutterInputDevice *device = d->data; ClutterInputDeviceType device_type; /* we only care about pointer devices */ device_type = clutter_input_device_get_device_type (device); if (device_type != CLUTTER_POINTER_DEVICE) continue; /* out of stage */ if (device->stage == NULL) continue; /* the user disabled motion events delivery on actors for * the stage the device is on; we don't perform any picking * since the source of the events will always be set to be * the stage */ if (!clutter_stage_get_motion_events_enabled (device->stage)) continue; _clutter_input_device_update (device, NULL, TRUE); } }
/** * clutter_x11_get_input_devices: * * Retrieves a pointer to the list of input devices * * Deprecated: 1.2: Use clutter_device_manager_peek_devices() instead * * Since: 0.8 * * Return value: (transfer none) (element-type Clutter.InputDevice): a * pointer to the internal list of input devices; the returned list is * owned by Clutter and should not be modified or freed */ const GSList * clutter_x11_get_input_devices (void) { ClutterDeviceManager *manager; manager = clutter_device_manager_get_default (); if (manager == NULL) return NULL; return clutter_device_manager_peek_devices (manager); }
/** * clutter_device_manager_list_devices: * @device_manager: a #ClutterDeviceManager * * Lists all currently registered input devices * * Return value: (transfer container) (element-type Clutter.InputDevice): * a newly allocated list of #ClutterInputDevice objects. Use * g_slist_free() to deallocate it when done * * Since: 1.2 */ GSList * clutter_device_manager_list_devices (ClutterDeviceManager *device_manager) { const GSList *devices; g_return_val_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager), NULL); devices = clutter_device_manager_peek_devices (device_manager); return g_slist_copy ((GSList *) devices); }
G_MODULE_EXPORT int test_devices_main (int argc, char **argv) { ClutterActor *stage; TestDevicesApp *app; ClutterDeviceManager *manager; const GSList *stage_devices, *l; /* force enabling X11 support */ clutter_x11_enable_xinput (); clutter_init (&argc, &argv); app = g_new0 (TestDevicesApp, 1); app->devices = g_hash_table_new (g_direct_hash, g_direct_equal) ; stage = clutter_stage_new (); clutter_stage_set_color (CLUTTER_STAGE (stage), CLUTTER_COLOR_LightSkyBlue); clutter_stage_set_title (CLUTTER_STAGE (stage), "Devices"); clutter_stage_hide_cursor (CLUTTER_STAGE (stage)); g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); g_signal_connect (stage, "motion-event", G_CALLBACK (stage_motion_event_cb), app); g_signal_connect (stage, "button-press-event", G_CALLBACK (stage_button_event_cb), app); app->stage = stage; clutter_actor_show_all (stage); manager = clutter_device_manager_get_default (); g_signal_connect (manager, "device-added", G_CALLBACK (manager_device_added_cb), app); g_signal_connect (manager, "device-removed", G_CALLBACK (manager_device_removed_cb), app); stage_devices = clutter_device_manager_peek_devices (manager); if (stage_devices == NULL) g_error ("No input devices found."); for (l = stage_devices; l != NULL; l = l->next) { ClutterInputDevice *device = l->data; ClutterInputDeviceType device_type; ClutterActor *hand = NULL; g_print ("got a %s device '%s' with id %d\n", device_type_name (device), clutter_input_device_get_device_name (device), clutter_input_device_get_device_id (device)); device_type = clutter_input_device_get_device_type (device); if (device_type == CLUTTER_POINTER_DEVICE || device_type == CLUTTER_PEN_DEVICE || device_type == CLUTTER_POINTER_DEVICE) { g_print ("*** enabling device '%s' ***\n", clutter_input_device_get_device_name (device)); clutter_input_device_set_enabled (device, TRUE); hand = clutter_texture_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL); g_hash_table_insert (app->devices, device, hand); clutter_container_add_actor (CLUTTER_CONTAINER (stage), hand); } } clutter_main (); return EXIT_SUCCESS; }