diff --git a/src/add-ons/input_server/devices/virtualkeyboard/Jamfile b/src/add-ons/input_server/devices/virtualkeyboard/Jamfile
index a0431bd65d..ed18600d34 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/Jamfile
+++ b/src/add-ons/input_server/devices/virtualkeyboard/Jamfile
@@ -1,23 +1,18 @@
-SubDir HAIKU_TOP src apps virtualkeyboard ;
+SubDir HAIKU_TOP src add-ons input_server devices virtualkeyboard ;
-UsePrivateHeaders interface shared ;
+UsePrivateHeaders input interface shared tracker ;
+UsePrivateSystemHeaders ;
-Addon VirtualKeyboard :
+AddResources virtualkeyboard : VirtualKeyboard.rdef ;
+
+Addon virtualkeyboard :
KeyboardLayout.cpp
KeyboardLayoutView.cpp
Keymap.cpp
KeymapListItem.cpp
+ VirtualKeyboardInputDevice.cpp
VirtualKeyboardWindow.cpp
: be tracker input_server localestub libshared.a $(TARGET_LIBSTDC++)
;
-DoCatalogs Sudoku :
- x-vnd.Haiku-Sudoku
- :
- KeyboardLayout.cpp
- KeyboardLayoutView.cpp
- Keymap.cpp
- KeymapListItem.cpp
- VirtualKeyboardWindow.cpp
-;
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.cpp b/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.cpp
index 310db946a3..603be726f9 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.cpp
+++ b/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.cpp
@@ -26,7 +26,8 @@ static const rgb_color kDeadKeyColor = {152, 203, 255, 255};
static const rgb_color kLitIndicatorColor = {116, 212, 83, 255};
-KeyboardLayoutView::KeyboardLayoutView(const char* name)
+KeyboardLayoutView::KeyboardLayoutView(const char* name,
+ BInputServerDevice* dev)
:
BView(name, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_FRAME_EVENTS),
fOffscreenBitmap(NULL),
@@ -37,7 +38,8 @@ KeyboardLayoutView::KeyboardLayoutView(const char* name)
fButtons(0),
fDragKey(NULL),
fDropTarget(NULL),
- fOldSize(0, 0)
+ fOldSize(0, 0),
+ fDevice(dev)
{
fLayout = new KeyboardLayout;
memset(fKeyState, 0, sizeof(fKeyState));
@@ -229,8 +231,7 @@ KeyboardLayoutView::MouseUp(BPoint point)
_InvalidateKey(key);
if (fDragKey == NULL && fKeymap != NULL) {
- // Send fake key down message to target
- _SendFakeKeyDown(key);
+ _SendKeyDown(key);
}
}
}
@@ -373,7 +374,7 @@ KeyboardLayoutView::MessageReceived(BMessage* message)
}
} else {
// Send the old key to the target, so it's not lost entirely
- _SendFakeKeyDown(fDropTarget);
+ _SendKeyDown(fDropTarget);
fKeymap->SetKey(fDropTarget->code, fModifiers, fDeadKey,
(const char*)data, dataSize);
@@ -1074,7 +1075,7 @@ KeyboardLayoutView::_EvaluateDropTarget(BPoint point)
void
-KeyboardLayoutView::_SendFakeKeyDown(const Key* key)
+KeyboardLayoutView::_SendKeyDown(const Key* key)
{
BMessage message(B_KEY_DOWN);
message.AddInt64("when", system_time());
@@ -1099,6 +1100,6 @@ KeyboardLayoutView::_SendFakeKeyDown(const Key* key)
message.AddInt8("byte", string[0]);
delete[] string;
}
-
- fTarget.SendMessage(&message);
+ fDevice->EnqueueMessage(&message);
+
}
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.h b/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.h
index 1f3e5eee62..b8d643712e 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.h
+++ b/src/add-ons/input_server/devices/virtualkeyboard/KeyboardLayoutView.h
@@ -6,6 +6,7 @@
#define KEYBOARD_LAYOUT_VIEW_H
+#include
#include
#include
@@ -17,7 +18,8 @@ class Keymap;
class KeyboardLayoutView : public BView {
public:
- KeyboardLayoutView(const char* name);
+ KeyboardLayoutView(const char* name,
+ BInputServerDevice* dev);
~KeyboardLayoutView();
void SetKeyboardLayout(KeyboardLayout* layout);
@@ -90,8 +92,8 @@ private:
BRect _FrameFor(const Key* key);
void _SetFontSize(BView* view, key_kind keyKind);
void _EvaluateDropTarget(BPoint point);
- void _SendFakeKeyDown(const Key* key);
-
+ void _SendKeyDown(const Key* key);
+
BBitmap* fOffscreenBitmap;
BView* fOffscreenView;
@@ -119,6 +121,9 @@ private:
BPoint fOffset;
float fFactor;
float fGap;
+
+ BInputServerDevice* fDevice;
+
};
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboard.rdef b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboard.rdef
index 26da884636..3b77c2251d 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboard.rdef
+++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboard.rdef
@@ -1,38 +1 @@
-resource app_signature "application/x-vnd.VirtualKeyboard";
-
-resource app_name_catalog_entry "x-vnd.VirtualKeyboard:System name:VirtualKeyboard";
-
-resource app_version {
- major = 1,
- middle = 0,
- minor = 0,
-
- variety = 1,
- internal = 0,
-
- short_info = "VirtualKeybaord",
- long_info = "An on-screen keyboard for Haiku"
-};
-
-resource vector_icon {
- $"6E63696605020016023910813A2974BB43733A501C4B20D94AA7F400E9FFB902"
- $"001602B82588B66C3639EE80BB7BCD4B41FC4B6A3B0066FF9002011603BC39E2"
- $"364286B516B5BB0AE64B8EF94A7E0500FF56E5FFC1050004006D0E0A04525E5C"
- $"CAE766C6EB5E4B0A0442544648524E525C0A04525C524E5C445E500A04464852"
- $"4E5C44503E0A02B8DABA5FB913BA320A02BA25B92DB942BA0F0803B70BBCFDB8"
- $"C7BB84B7BBBB82000CC151BD52C151BD52C151BD52C0B0BDBEC0B0BDBEC105BD"
- $"83C0EEBD21C116BD40C0C6BD01C00CBD38C022BD28BFCCBD68BFEBBDBDBFCBBD"
- $"A7C016BDDBC08ABDBEC08ABDBEC072BDD0C080BE0CC065BDF9C0ADBE2CC19CBD"
- $"CEC15EBE0BC20ABD6244BCC9C1A4BCF5C0ABBC64BF88BD14BFD6BCC6BEE4BDB8"
- $"BFE6BE44BFB33CC052BE81C100BE6EC0E2BE7AC100BE6E0406FA0FBD8FC04CBC"
- $"96BFB3BD553FBCDC3FBDCE3FBE873FBE3BBF8DBED4BF27BE94BE7ABEDABEB4BE"
- $"4EBE41BDB5BE94BDCFBE7ABDB5BE940802C63340C74DC0670802C5C6C01FC6D8"
- $"C0CB0802C791BFECC5F9C0E50802C58DC0A5C712BFA00007C361C29EC361C29E"
- $"C33FC2BBC39AC332C35FC30EC3D5C357C496C30FC468C33EC4C4C2E1C463C25D"
- $"C4D4C29EC4D4C29EC537C245C515C26DC558C21DC50AC1AA4EC1DDC4C1C177C4"
- $"4945C461C1A9C449450E0A030303020130001001178322040A0001012000100A"
- $"0101022000100A0201032000100A030303020130101801178322040A00010120"
- $"10180A0101022010180A0201032010180A040100000A03030302011001178322"
- $"040A000101000A010102000A020103000A030A0D090A0B0C0807060504100117"
- $"812204"
-};
\ No newline at end of file
+resource app_signature "application/x-vnd.Haiku-VirtualKeyboardInputServerDevice";
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp
index 24088465e2..2fea12e7aa 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp
+++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.cpp
@@ -4,6 +4,8 @@
*/
#include "VirtualKeyboardInputDevice.h"
+#include
+
extern "C" BInputServerDevice*
instantiate_input_device()
{
@@ -15,23 +17,24 @@ VirtualKeyboardInputDevice::VirtualKeyboardInputDevice()
:
BInputServerDevice()
{
- fKeyboardWindow = new VirtualKeyboardWindow();
+ fKeyboardWindow = new VirtualKeyboardWindow(this);
}
-status_t
-VirtualKeyboardInputDevice::SystemShuttingDown()
+VirtualKeyboardInputDevice::~VirtualKeyboardInputDevice()
{
- if (fKeyboardWindow)
- fKeyboardWindow->PostMessage(SYSTEM_SHUTTING_DOWN);
- return B_OK;
}
status_t
VirtualKeyboardInputDevice::InitCheck()
{
- return BInputServerDevice::InitCheck();
+ static input_device_ref keyboard = {"VirtualKeyboard",
+ B_KEYBOARD_DEVICE, (void*) this};
+ static input_device_ref* devices[2] = {&keyboard, NULL};
+
+ RegisterDevices(devices);
+ return B_OK;
}
@@ -39,5 +42,16 @@ status_t
VirtualKeyboardInputDevice::Start(const char* name, void* cookie)
{
fKeyboardWindow->Show();
-
+ return B_OK;
+}
+
+
+status_t
+VirtualKeyboardInputDevice::Stop(const char* name, void* cookie)
+{
+ if (fKeyboardWindow) {
+ fKeyboardWindow->Quit();
+ fKeyboardWindow = NULL;
+ }
+ return B_OK;
}
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.h b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.h
index 86e0d2e716..786fedfbbd 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.h
+++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardInputDevice.h
@@ -9,19 +9,17 @@
#include "VirtualKeyboardWindow.h"
+
class VirtualKeyboardInputDevice : public BInputServerDevice {
public:
- VirtualKeyboardInputDevice();
- virtual status_t InitCheck();
- virtual status_t Start(const char* name, void* cookie);
- virtual status_t Stop(const char* name, void* cookie);
- virtual status_t Control(const char* name, void* cookie,
- uint32 command, BMessage* message);
- virtual status_t SystemShuttingDown();
+ VirtualKeyboardInputDevice();
+ ~VirtualKeyboardInputDevice();
+ virtual status_t InitCheck();
+ virtual status_t Start(const char* name, void* cookie);
+ virtual status_t Stop(const char* name, void* cookie);
private:
- friend class VirtualKeyboardWindow;
- VirtualKeyboardWindow* fKeyboardWindow;
+ VirtualKeyboardWindow* fKeyboardWindow;
};
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp
index 8d7b9989be..ece2c56aa6 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp
+++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.cpp
@@ -30,11 +30,12 @@ compare_key_list_items(const void* a, const void* b)
}
-VirtualKeyboardWindow::VirtualKeyboardWindow()
+VirtualKeyboardWindow::VirtualKeyboardWindow(BInputServerDevice* dev)
:
BWindow(BRect(0,0,0,0),"Virtual Keyboard",
B_NO_BORDER_WINDOW_LOOK, B_FLOATING_ALL_WINDOW_FEEL,
- B_WILL_ACCEPT_FIRST_CLICK | B_AVOID_FRONT)
+ B_WILL_ACCEPT_FIRST_CLICK | B_AVOID_FOCUS),
+ fDevice(dev)
{
BScreen screen;
BRect screenRect(screen.Frame());
@@ -57,7 +58,7 @@ VirtualKeyboardWindow::VirtualKeyboardWindow()
static_cast(fMapListView->FirstItem());
fCurrentKeymap.Load(current->EntryRef());
- fKeyboardView = new KeyboardLayoutView("Keyboard");
+ fKeyboardView = new KeyboardLayoutView("Keyboard",fDevice);
fKeyboardView->GetKeyboardLayout()->SetDefault();
fKeyboardView->SetEditable(false);
fKeyboardView->SetKeymap(&fCurrentKeymap);
diff --git a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h
index 1813dc4214..7dde640330 100644
--- a/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h
+++ b/src/add-ons/input_server/devices/virtualkeyboard/VirtualKeyboardWindow.h
@@ -5,6 +5,7 @@
#ifndef VIRTUAL_KEYBOARD_WINDOW_H
#define VIRTUAL_KEYBOARD_WINDOW_H
+#include
#include
#include
@@ -19,7 +20,7 @@ class BMenu;
class VirtualKeyboardWindow : public BWindow{
public:
- VirtualKeyboardWindow();
+ VirtualKeyboardWindow(BInputServerDevice* dev);
virtual void MessageReceived(BMessage* message);
private:
@@ -28,6 +29,7 @@ private:
BMenu* fFontMenu;
BMenu* fLayoutMenu;
Keymap fCurrentKeymap;
+ BInputServerDevice* fDevice;
private:
void _LoadLayouts(BMenu* menu);