Blame clutter/osx/clutter-device-manager-osx.c

Packit 31ecd5
/*
Packit 31ecd5
 * Clutter.
Packit 31ecd5
 *
Packit 31ecd5
 * An OpenGL based 'interactive canvas' library.
Packit 31ecd5
 *
Packit 31ecd5
 * Copyright (C) 2009  Intel Corp.
Packit 31ecd5
 *
Packit 31ecd5
 * This library is free software; you can redistribute it and/or
Packit 31ecd5
 * modify it under the terms of the GNU Lesser General Public
Packit 31ecd5
 * License as published by the Free Software Foundation; either
Packit 31ecd5
 * version 2 of the License, or (at your option) any later version.
Packit 31ecd5
 *
Packit 31ecd5
 * This library is distributed in the hope that it will be useful,
Packit 31ecd5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 31ecd5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 31ecd5
 * Lesser General Public License for more details.
Packit 31ecd5
 *
Packit 31ecd5
 * You should have received a copy of the GNU Lesser General Public
Packit 31ecd5
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit 31ecd5
 *
Packit 31ecd5
 * Author: Emmanuele Bassi <ebassi@linux.intel.com>
Packit 31ecd5
 */
Packit 31ecd5
Packit 31ecd5
#ifdef HAVE_CONFIG_H
Packit 31ecd5
#include "config.h"
Packit 31ecd5
#endif
Packit 31ecd5
Packit 31ecd5
#include "clutter-backend-osx.h"
Packit 31ecd5
#include "clutter-device-manager-osx.h"
Packit 31ecd5
#include "clutter-device-manager-osx.h"
Packit 31ecd5
#include "clutter-stage-osx.h"
Packit 31ecd5
Packit 31ecd5
#include "clutter-backend.h"
Packit 31ecd5
#include "clutter-debug.h"
Packit 31ecd5
#include "clutter-device-manager-private.h"
Packit 31ecd5
#include "clutter-private.h"
Packit 31ecd5
Packit 31ecd5
enum
Packit 31ecd5
{
Packit 31ecd5
  PROP_0
Packit 31ecd5
};
Packit 31ecd5
Packit 31ecd5
G_DEFINE_TYPE (ClutterDeviceManagerOSX,
Packit 31ecd5
               clutter_device_manager_osx,
Packit 31ecd5
               CLUTTER_TYPE_DEVICE_MANAGER);
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
clutter_device_manager_osx_constructed (GObject *gobject)
Packit 31ecd5
{
Packit 31ecd5
  ClutterDeviceManager *manager = CLUTTER_DEVICE_MANAGER (gobject);
Packit 31ecd5
  ClutterDeviceManagerOSX *manager_osx;
Packit 31ecd5
  ClutterInputDevice *device;
Packit 31ecd5
Packit 31ecd5
  device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE,
Packit 31ecd5
                         "id", 0,
Packit 31ecd5
                         "name", "Core Pointer",
Packit 31ecd5
                         "device-type", CLUTTER_POINTER_DEVICE,
Packit 31ecd5
                         "device-mode", CLUTTER_INPUT_MODE_MASTER,
Packit 31ecd5
                         "has-cursor", TRUE,
Packit 31ecd5
                         "enabled", TRUE,
Packit 31ecd5
                         NULL);
Packit 31ecd5
  CLUTTER_NOTE (BACKEND, "Added core pointer device");
Packit 31ecd5
  _clutter_device_manager_add_device (manager, device);
Packit 31ecd5
Packit 31ecd5
  device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE,
Packit 31ecd5
                         "id", 1,
Packit 31ecd5
                         "name", "Core Keyboard",
Packit 31ecd5
                         "device-type", CLUTTER_KEYBOARD_DEVICE,
Packit 31ecd5
                         "device-mode", CLUTTER_INPUT_MODE_MASTER,
Packit 31ecd5
                         "enabled", TRUE,
Packit 31ecd5
                         NULL);
Packit 31ecd5
  CLUTTER_NOTE (BACKEND, "Added core keyboard device");
Packit 31ecd5
  _clutter_device_manager_add_device (manager, device);
Packit 31ecd5
Packit 31ecd5
  manager_osx = CLUTTER_DEVICE_MANAGER_OSX (manager);
Packit 31ecd5
Packit 31ecd5
  _clutter_input_device_set_associated_device (manager_osx->core_pointer,
Packit 31ecd5
                                               manager_osx->core_keyboard);
Packit 31ecd5
  _clutter_input_device_set_associated_device (manager_osx->core_keyboard,
Packit 31ecd5
                                               manager_osx->core_pointer);
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
clutter_device_manager_osx_add_device (ClutterDeviceManager *manager,
Packit 31ecd5
                                       ClutterInputDevice   *device)
Packit 31ecd5
{
Packit 31ecd5
  ClutterDeviceManagerOSX *manager_osx = CLUTTER_DEVICE_MANAGER_OSX (manager);
Packit 31ecd5
  ClutterInputDeviceType device_type;
Packit 31ecd5
  gboolean is_pointer, is_keyboard;
Packit 31ecd5
Packit 31ecd5
  device_type = clutter_input_device_get_device_type (device);
Packit 31ecd5
  is_pointer  = (device_type == CLUTTER_POINTER_DEVICE)  ? TRUE : FALSE;
Packit 31ecd5
  is_keyboard = (device_type == CLUTTER_KEYBOARD_DEVICE) ? TRUE : FALSE;
Packit 31ecd5
Packit 31ecd5
  manager_osx->devices = g_slist_prepend (manager_osx->devices, device);
Packit 31ecd5
Packit 31ecd5
  if (is_pointer && manager_osx->core_pointer == NULL)
Packit 31ecd5
    manager_osx->core_pointer = device;
Packit 31ecd5
Packit 31ecd5
  if (is_keyboard && manager_osx->core_keyboard == NULL)
Packit 31ecd5
    manager_osx->core_keyboard = device;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
clutter_device_manager_osx_remove_device (ClutterDeviceManager *manager,
Packit 31ecd5
                                          ClutterInputDevice   *device)
Packit 31ecd5
{
Packit 31ecd5
  ClutterDeviceManagerOSX *manager_osx = CLUTTER_DEVICE_MANAGER_OSX (manager);
Packit 31ecd5
Packit 31ecd5
  manager_osx->devices = g_slist_remove (manager_osx->devices, device);
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static const GSList *
Packit 31ecd5
clutter_device_manager_osx_get_devices (ClutterDeviceManager *manager)
Packit 31ecd5
{
Packit 31ecd5
  return CLUTTER_DEVICE_MANAGER_OSX (manager)->devices;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static ClutterInputDevice *
Packit 31ecd5
clutter_device_manager_osx_get_core_device (ClutterDeviceManager *manager,
Packit 31ecd5
                                            ClutterInputDeviceType type)
Packit 31ecd5
{
Packit 31ecd5
  ClutterDeviceManagerOSX *manager_osx;
Packit 31ecd5
Packit 31ecd5
  manager_osx = CLUTTER_DEVICE_MANAGER_OSX (manager);
Packit 31ecd5
Packit 31ecd5
  switch (type)
Packit 31ecd5
    {
Packit 31ecd5
    case CLUTTER_POINTER_DEVICE:
Packit 31ecd5
      return manager_osx->core_pointer;
Packit 31ecd5
Packit 31ecd5
    case CLUTTER_KEYBOARD_DEVICE:
Packit 31ecd5
      return manager_osx->core_keyboard;
Packit 31ecd5
Packit 31ecd5
    case CLUTTER_EXTENSION_DEVICE:
Packit 31ecd5
    default:
Packit 31ecd5
      return NULL;
Packit 31ecd5
    }
Packit 31ecd5
Packit 31ecd5
  return NULL;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static ClutterInputDevice *
Packit 31ecd5
clutter_device_manager_osx_get_device (ClutterDeviceManager *manager,
Packit 31ecd5
                                       gint                  id_)
Packit 31ecd5
{
Packit 31ecd5
  ClutterDeviceManagerOSX *manager_osx = CLUTTER_DEVICE_MANAGER_OSX (manager);
Packit 31ecd5
  GSList *l;
Packit 31ecd5
Packit 31ecd5
  for (l = manager_osx->devices; l != NULL; l = l->next)
Packit 31ecd5
    {
Packit 31ecd5
      ClutterInputDevice *device = l->data;
Packit 31ecd5
Packit 31ecd5
      if (clutter_input_device_get_device_id (device) == id_)
Packit 31ecd5
        return device;
Packit 31ecd5
    }
Packit 31ecd5
Packit 31ecd5
  return NULL;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
clutter_device_manager_osx_class_init (ClutterDeviceManagerOSXClass *klass)
Packit 31ecd5
{
Packit 31ecd5
  ClutterDeviceManagerClass *manager_class;
Packit 31ecd5
  GObjectClass *gobject_class = (GObjectClass *) klass;
Packit 31ecd5
Packit 31ecd5
  gobject_class->constructed = clutter_device_manager_osx_constructed;
Packit 31ecd5
  
Packit 31ecd5
  manager_class = CLUTTER_DEVICE_MANAGER_CLASS (klass);
Packit 31ecd5
  manager_class->add_device = clutter_device_manager_osx_add_device;
Packit 31ecd5
  manager_class->remove_device = clutter_device_manager_osx_remove_device;
Packit 31ecd5
  manager_class->get_devices = clutter_device_manager_osx_get_devices;
Packit 31ecd5
  manager_class->get_core_device = clutter_device_manager_osx_get_core_device;
Packit 31ecd5
  manager_class->get_device = clutter_device_manager_osx_get_device;
Packit 31ecd5
}
Packit 31ecd5
Packit 31ecd5
static void
Packit 31ecd5
clutter_device_manager_osx_init (ClutterDeviceManagerOSX *self)
Packit 31ecd5
{
Packit 31ecd5
}