root/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp
/*
 * Copyright 2014 Freeman Lou <freemanlou2430@yahoo.com>
 * All rights reserved. Distributed under the terms of the MIT license.
 */
#include "VirtualKeyboardInputDevice.h"

#include <InterfaceDefs.h>


extern "C" BInputServerDevice*
instantiate_input_device()
{
        return new(std::nothrow) VirtualKeyboardInputDevice();
}


VirtualKeyboardInputDevice::VirtualKeyboardInputDevice()
{
}


VirtualKeyboardInputDevice::~VirtualKeyboardInputDevice()
{
}


status_t
VirtualKeyboardInputDevice::InitCheck()
{
        static input_device_ref keyboard = {(char*)"VirtualKeyboard", B_KEYBOARD_DEVICE, (void*)this};
        static input_device_ref* devices[2] = {&keyboard, NULL};

        RegisterDevices(devices);
        return B_OK;
}


status_t
VirtualKeyboardInputDevice::Start(const char* name, void* cookie)
{
        fKeyboardWindow = new VirtualKeyboardWindow(this);
        fKeyboardWindow->Show();
        return B_OK;
}


status_t
VirtualKeyboardInputDevice::Stop(const char* name, void* cookie)
{
        if (fKeyboardWindow->Lock()) {
                fKeyboardWindow->Quit();
                fKeyboardWindow = NULL;
        }
        return B_OK;
}


status_t
VirtualKeyboardInputDevice::Control(const char* name, void* cookie, uint32 command,
        BMessage* message)
{
        if (command == B_KEY_MAP_CHANGED)
                fKeyboardWindow->PostMessage(kKeymapChange);
        return B_OK;
}