messaging fixes to RootLayer and ViewDriver
minor tweaks to ServerWindow git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10977 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -941,6 +941,12 @@ void RootLayer::MouseEventHandler(int32 code, BPortLink& msg)
|
|||||||
WinBorder *activeFocus=NULL;
|
WinBorder *activeFocus=NULL;
|
||||||
BRegion invalidRegion;
|
BRegion invalidRegion;
|
||||||
|
|
||||||
|
// TODO: Figure out the be:view_where field in B_MOUSE_DOWN for RootLayer
|
||||||
|
// A little sniffing around R5's B_MOUSE_DOWN messages has revealed an
|
||||||
|
// undocumented field: a BPoint entry called "be:view_where" which probably
|
||||||
|
// helps the window determine the target view. Testing so far has revealed
|
||||||
|
// that it has the same value as the "where" field
|
||||||
|
|
||||||
BMessage downmsg(B_MOUSE_DOWN);
|
BMessage downmsg(B_MOUSE_DOWN);
|
||||||
downmsg.AddInt64("when",evt.when);
|
downmsg.AddInt64("when",evt.when);
|
||||||
downmsg.AddPoint("where",evt.where);
|
downmsg.AddPoint("where",evt.where);
|
||||||
@@ -996,7 +1002,6 @@ void RootLayer::MouseEventHandler(int32 code, BPortLink& msg)
|
|||||||
{
|
{
|
||||||
target->Window()->Lock();
|
target->Window()->Lock();
|
||||||
target->MouseDown(evt, true);
|
target->MouseDown(evt, true);
|
||||||
target->Window()->SendMessageToClient(&downmsg);
|
|
||||||
target->Window()->Unlock();
|
target->Window()->Unlock();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1152,7 +1157,7 @@ void RootLayer::KeyboardEventHandler(int32 code, BPortLink& msg)
|
|||||||
// generated string
|
// generated string
|
||||||
// 8) Character string generated by the keystroke
|
// 8) Character string generated by the keystroke
|
||||||
// 9) int8[16] state of all keys
|
// 9) int8[16] state of all keys
|
||||||
|
|
||||||
bigtime_t time;
|
bigtime_t time;
|
||||||
int32 scancode, modifiers;
|
int32 scancode, modifiers;
|
||||||
int8 utf[3];
|
int8 utf[3];
|
||||||
@@ -1166,8 +1171,8 @@ void RootLayer::KeyboardEventHandler(int32 code, BPortLink& msg)
|
|||||||
msg.Read<bigtime_t>(&time);
|
msg.Read<bigtime_t>(&time);
|
||||||
msg.Read<int32>(&scancode);
|
msg.Read<int32>(&scancode);
|
||||||
msg.Read<int32>(&raw_char);
|
msg.Read<int32>(&raw_char);
|
||||||
msg.Read<int32>(&modifiers);
|
|
||||||
msg.Read<int32>(&repeatcount);
|
msg.Read<int32>(&repeatcount);
|
||||||
|
msg.Read<int32>(&modifiers);
|
||||||
msg.Read(utf, sizeof(utf));
|
msg.Read(utf, sizeof(utf));
|
||||||
msg.ReadString(&string);
|
msg.ReadString(&string);
|
||||||
msg.Read(keystates,sizeof(int8)*16);
|
msg.Read(keystates,sizeof(int8)*16);
|
||||||
@@ -1322,9 +1327,10 @@ void RootLayer::KeyboardEventHandler(int32 code, BPortLink& msg)
|
|||||||
{
|
{
|
||||||
BMessage keymsg(B_KEY_DOWN);
|
BMessage keymsg(B_KEY_DOWN);
|
||||||
keymsg.AddInt64("when",time);
|
keymsg.AddInt64("when",time);
|
||||||
|
// keymsg.AddInt32("modifiers",modifiers);
|
||||||
keymsg.AddInt32("key",scancode);
|
keymsg.AddInt32("key",scancode);
|
||||||
keymsg.AddInt32("be:key_repeat",scancode);
|
if(repeatcount>1)
|
||||||
keymsg.AddInt32("modifiers",modifiers);
|
keymsg.AddInt32("be:key_repeat",repeatcount);
|
||||||
keymsg.AddData("states",B_INT8_TYPE,keystates,sizeof(int8)*16);
|
keymsg.AddData("states",B_INT8_TYPE,keystates,sizeof(int8)*16);
|
||||||
for(uint8 i=0;i<4; i++)
|
for(uint8 i=0;i<4; i++)
|
||||||
{
|
{
|
||||||
@@ -1332,8 +1338,11 @@ void RootLayer::KeyboardEventHandler(int32 code, BPortLink& msg)
|
|||||||
keymsg.AddInt8("byte",utf[i]);
|
keymsg.AddInt8("byte",utf[i]);
|
||||||
}
|
}
|
||||||
keymsg.AddString("bytes",string);
|
keymsg.AddString("bytes",string);
|
||||||
keymsg.AddInt32("raw_char",raw_char);
|
// keymsg.AddInt32("raw_char",raw_char);
|
||||||
|
|
||||||
|
printf("RootLayer keyboard message:\n");
|
||||||
|
keymsg.PrintToStream();
|
||||||
|
printf("\n");
|
||||||
win->SendMessageToClient(&keymsg);
|
win->SendMessageToClient(&keymsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <View.h> // for B_XXXXX_MOUSE_BUTTON defines
|
#include <View.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <GraphicsDefs.h>
|
#include <GraphicsDefs.h>
|
||||||
#include <PortLink.h>
|
#include <PortLink.h>
|
||||||
@@ -192,7 +192,7 @@ ServerWindow::~ServerWindow(void)
|
|||||||
STRACE(("*ServerWindow (%s):~ServerWindow()\n",fTitle.String()));
|
STRACE(("*ServerWindow (%s):~ServerWindow()\n",fTitle.String()));
|
||||||
|
|
||||||
desktop->RemoveWinBorder(fWinBorder);
|
desktop->RemoveWinBorder(fWinBorder);
|
||||||
STRACE(("SW(%s) Successfully removed from the desktop\n", fTitle.String()));
|
STRACE(("ServerWindow(%s) Successfully removed from the desktop\n", fTitle.String()));
|
||||||
|
|
||||||
if(fMsgSender)
|
if(fMsgSender)
|
||||||
{
|
{
|
||||||
@@ -712,7 +712,7 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link)
|
|||||||
case AS_LAYER_CREATE_ROOT:
|
case AS_LAYER_CREATE_ROOT:
|
||||||
{
|
{
|
||||||
STRACE(("ServerWindow %s: Message AS_LAYER_CREATE_ROOT\n", fTitle.String()));
|
STRACE(("ServerWindow %s: Message AS_LAYER_CREATE_ROOT\n", fTitle.String()));
|
||||||
|
|
||||||
// Start receiving top_view data -- pass NULL as the parent view.
|
// Start receiving top_view data -- pass NULL as the parent view.
|
||||||
// This should be the *only* place where this happens.
|
// This should be the *only* place where this happens.
|
||||||
if (cl != NULL)
|
if (cl != NULL)
|
||||||
@@ -808,13 +808,11 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link)
|
|||||||
patt = ld->patt.GetInt64();
|
patt = ld->patt.GetInt64();
|
||||||
|
|
||||||
// TODO: Implement when ServerFont::SetfamilyAndStyle(int32) exists
|
// TODO: Implement when ServerFont::SetfamilyAndStyle(int32) exists
|
||||||
|
// TODO: Implement *what*? SetFamilyAndStyle exists. :)
|
||||||
fMsgSender->StartMessage(SERVER_TRUE);
|
fMsgSender->StartMessage(SERVER_TRUE);
|
||||||
|
|
||||||
// Attach font state
|
// Attach font state
|
||||||
|
fMsgSender->Attach<uint32>(ld->font.GetFamilyAndStyle());
|
||||||
// TODO: need a ServerFont::GetFamAndStyle
|
|
||||||
// fMsgSender->Attach<uint32>(0UL uint32 ld->font.GetFamAndStyle());
|
|
||||||
fMsgSender->Attach<uint32>(0UL);
|
|
||||||
fMsgSender->Attach<float>(ld->font.Size());
|
fMsgSender->Attach<float>(ld->font.Size());
|
||||||
fMsgSender->Attach<float>(ld->font.Shear());
|
fMsgSender->Attach<float>(ld->font.Shear());
|
||||||
fMsgSender->Attach<float>(ld->font.Rotation());
|
fMsgSender->Attach<float>(ld->font.Rotation());
|
||||||
@@ -2115,18 +2113,21 @@ void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link)
|
|||||||
}
|
}
|
||||||
case AS_LAYER_DRAG_IMAGE:
|
case AS_LAYER_DRAG_IMAGE:
|
||||||
{
|
{
|
||||||
|
// TODO: Implement AS_LAYER_DRAG_IMAGE
|
||||||
STRACE(("ServerWindow %s: Message AS_DRAG_IMAGE unimplemented\n",fTitle.String()));
|
STRACE(("ServerWindow %s: Message AS_DRAG_IMAGE unimplemented\n",fTitle.String()));
|
||||||
DTRACE(("ServerWindow %s: Message AS_DRAG_IMAGE unimplemented\n",fTitle.String()));
|
DTRACE(("ServerWindow %s: Message AS_DRAG_IMAGE unimplemented\n",fTitle.String()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AS_LAYER_DRAG_RECT:
|
case AS_LAYER_DRAG_RECT:
|
||||||
{
|
{
|
||||||
|
// TODO: Implement AS_LAYER_DRAG_RECT
|
||||||
STRACE(("ServerWindow %s: Message AS_DRAG_RECT unimplemented\n",fTitle.String()));
|
STRACE(("ServerWindow %s: Message AS_DRAG_RECT unimplemented\n",fTitle.String()));
|
||||||
DTRACE(("ServerWindow %s: Message AS_DRAG_RECT unimplemented\n",fTitle.String()));
|
DTRACE(("ServerWindow %s: Message AS_DRAG_RECT unimplemented\n",fTitle.String()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AS_LAYER_GET_MOUSE_COORDS:
|
case AS_LAYER_GET_MOUSE_COORDS:
|
||||||
{
|
{
|
||||||
|
// TODO: Implement AS_LAYER_MOUSE_COORDS
|
||||||
STRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS unimplemented\n",fTitle.String()));
|
STRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS unimplemented\n",fTitle.String()));
|
||||||
DTRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS unimplemented\n",fTitle.String()));
|
DTRACE(("ServerWindow %s: Message AS_GET_MOUSE_COORDS unimplemented\n",fTitle.String()));
|
||||||
// Attached Data:
|
// Attached Data:
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ void VDView::Draw(BRect rect)
|
|||||||
|
|
||||||
void VDView::MouseDown(BPoint pt)
|
void VDView::MouseDown(BPoint pt)
|
||||||
{
|
{
|
||||||
|
#ifdef ENABLE_INPUT_SERVER_EMULATION
|
||||||
// Attach data:
|
// Attach data:
|
||||||
// 1) int64 - time of mouse click
|
// 1) int64 - time of mouse click
|
||||||
// 2) float - x coordinate of mouse click
|
// 2) float - x coordinate of mouse click
|
||||||
@@ -154,17 +155,16 @@ void VDView::MouseDown(BPoint pt)
|
|||||||
// 4) int32 - modifier keys down
|
// 4) int32 - modifier keys down
|
||||||
// 5) int32 - buttons down
|
// 5) int32 - buttons down
|
||||||
// 6) int32 - clicks
|
// 6) int32 - clicks
|
||||||
#ifdef ENABLE_INPUT_SERVER_EMULATION
|
|
||||||
BPoint p;
|
uint32 buttons, mod, clicks=1;
|
||||||
|
|
||||||
uint32 buttons,
|
|
||||||
mod=modifiers(),
|
|
||||||
clicks=1; // can't get the # of clicks without a *lot* of extra work :(
|
|
||||||
|
|
||||||
int64 time=(int64)real_time_clock();
|
int64 time=(int64)real_time_clock();
|
||||||
|
|
||||||
GetMouse(&p,&buttons);
|
BMessage *msg=Window()->CurrentMessage();
|
||||||
|
msg->FindPoint("where",&pt);
|
||||||
|
msg->FindInt32("modifiers",(int32*)&mod);
|
||||||
|
msg->FindInt32("buttons",(int32*)&buttons);
|
||||||
|
msg->FindInt32("clicks",(int32*)&clicks);
|
||||||
|
|
||||||
serverlink->StartMessage(B_MOUSE_DOWN);
|
serverlink->StartMessage(B_MOUSE_DOWN);
|
||||||
serverlink->Attach(&time, sizeof(int64));
|
serverlink->Attach(&time, sizeof(int64));
|
||||||
serverlink->Attach(&pt.x,sizeof(float));
|
serverlink->Attach(&pt.x,sizeof(float));
|
||||||
@@ -283,19 +283,23 @@ void VDWindow::MessageReceived(BMessage *msg)
|
|||||||
int8 utf8data[4];
|
int8 utf8data[4];
|
||||||
BString string;
|
BString string;
|
||||||
int8 keyarray[16];
|
int8 keyarray[16];
|
||||||
|
|
||||||
systime=(int64)real_time_clock();
|
systime=(int64)real_time_clock();
|
||||||
msg->FindInt32("key",&scancode);
|
msg->FindInt32("key",&scancode);
|
||||||
msg->FindInt32("be:key_repeat",&repeatcount);
|
if(msg->FindInt32("be:key_repeat",&repeatcount)!=B_OK)
|
||||||
|
{
|
||||||
|
// TODO: see if repeatcount should be 0 or 1 when not repeating in ViewDriver
|
||||||
|
repeatcount=1;
|
||||||
|
}
|
||||||
msg->FindInt32("modifiers",&modifiers);
|
msg->FindInt32("modifiers",&modifiers);
|
||||||
msg->FindInt32("raw_char",&asciicode);
|
msg->FindInt32("raw_char",&asciicode);
|
||||||
|
|
||||||
msg->FindInt8("byte",0,utf8data);
|
msg->FindInt8("byte",0,utf8data);
|
||||||
if(msg->FindInt8("byte",1,utf8data+1)!=B_OK)
|
if(msg->FindInt8("byte",1,utf8data+1)!=B_OK)
|
||||||
utf8data[1]=0;
|
utf8data[1]=0;
|
||||||
if(msg->FindInt8("byte",1,utf8data+2)!=B_OK)
|
if(msg->FindInt8("byte",2,utf8data+2)!=B_OK)
|
||||||
utf8data[2]=0;
|
utf8data[2]=0;
|
||||||
if(msg->FindInt8("byte",1,utf8data+3)!=B_OK)
|
if(msg->FindInt8("byte",3,utf8data+3)!=B_OK)
|
||||||
utf8data[3]=0;
|
utf8data[3]=0;
|
||||||
msg->FindString("bytes",&string);
|
msg->FindString("bytes",&string);
|
||||||
for(int8 i=0;i<15;i++)
|
for(int8 i=0;i<15;i++)
|
||||||
@@ -307,8 +311,7 @@ void VDWindow::MessageReceived(BMessage *msg)
|
|||||||
view->serverlink->Attach(repeatcount);
|
view->serverlink->Attach(repeatcount);
|
||||||
view->serverlink->Attach(modifiers);
|
view->serverlink->Attach(modifiers);
|
||||||
view->serverlink->Attach(utf8data,sizeof(int8)*3);
|
view->serverlink->Attach(utf8data,sizeof(int8)*3);
|
||||||
view->serverlink->Attach(string.Length()+1);
|
view->serverlink->AttachString(string.String());
|
||||||
view->serverlink->Attach(string.String());
|
|
||||||
view->serverlink->Attach(keyarray,sizeof(int8)*16);
|
view->serverlink->Attach(keyarray,sizeof(int8)*16);
|
||||||
view->serverlink->Flush();
|
view->serverlink->Flush();
|
||||||
break;
|
break;
|
||||||
@@ -351,8 +354,7 @@ void VDWindow::MessageReceived(BMessage *msg)
|
|||||||
view->serverlink->Attach(asciicode);
|
view->serverlink->Attach(asciicode);
|
||||||
view->serverlink->Attach(modifiers);
|
view->serverlink->Attach(modifiers);
|
||||||
view->serverlink->Attach(utf8data,sizeof(int8)*3);
|
view->serverlink->Attach(utf8data,sizeof(int8)*3);
|
||||||
view->serverlink->Attach(string.Length()+1);
|
view->serverlink->AttachString(string.String());
|
||||||
view->serverlink->Attach(string.String());
|
|
||||||
view->serverlink->Attach(keyarray,sizeof(int8)*16);
|
view->serverlink->Attach(keyarray,sizeof(int8)*16);
|
||||||
view->serverlink->Flush();
|
view->serverlink->Flush();
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user