Modified some classes to succesfully comunicate with BWindow/BView. the default decorator has been impoved. From now borders are build ARROUND the window area.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4432 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adi Oanca
2003-08-31 17:38:34 +00:00
parent bf17b6ac95
commit 7641924e66
17 changed files with 430 additions and 182 deletions
+36 -33
View File
@@ -32,6 +32,7 @@
#include <PortLink.h>
#include "AppServer.h"
#include "Layer.h"
#include "RootLayer.h"
#include "ServerWindow.h"
#include "ServerApp.h"
#include "ServerProtocol.h"
@@ -40,6 +41,7 @@
#include "DesktopClasses.h"
#include "TokenHandler.h"
#include "Utils.h"
#include "DisplayDriver.h"
//#define DEBUG_SERVERWINDOW
//#define DEBUG_SERVERWINDOW_MOUSE
@@ -109,12 +111,18 @@ ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook,
// _sender is the monitored window's event port
_sender=winport;
_winlink=new PortLink(_sender);
_winlink=new PortLink(_sender);
_applink= (winapp)? new PortLink(winapp->_receiver) : NULL;
// _receiver is the port to which the app sends messages for the server
_receiver=create_port(30,_title->String());
ses = new BSession( _receiver, _sender );
// Send a reply to our window - it is expecting _receiver port.
ses->WriteData( &_receiver, sizeof(port_id) );
ses->Sync();
_active=false;
@@ -151,6 +159,10 @@ ServerWindow::~ServerWindow(void)
delete _title;
delete _winlink;
delete _winborder;
delete ses;
ses = NULL;
}
kill_thread(_monitorthread);
}
@@ -390,9 +402,9 @@ bool ServerWindow::IsLocked(void)
return _locker.IsLocked();
}
void ServerWindow::DispatchMessage(PortMessage *msg)
void ServerWindow::DispatchMessage( int32 code )
{
switch(msg->Code())
switch( code )
{
case AS_LAYER_CREATE:
{
@@ -459,6 +471,9 @@ void ServerWindow::DispatchMessage(PortMessage *msg)
}
case AS_SHOW_WINDOW:
{
#ifdef DEBUG_SERVERWINDOW
printf("ServerWindow %s: Message AS_SHOW\n",_title->String());
#endif
Show();
break;
}
@@ -629,7 +644,7 @@ void ServerWindow::DispatchMessage(PortMessage *msg)
}
default:
{
printf("ServerWindow %s received unexpected code - message offset %lx\n",_title->String(),msg->Code()-SERVER_TRUE);
printf("ServerWindow %s received unexpected code - message offset %lx\n",_title->String(), code - SERVER_TRUE);
break;
}
}
@@ -1181,23 +1196,17 @@ void ServerWindow::DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer)
*/
int32 ServerWindow::MonitorWin(void *data)
{
ServerWindow *win=(ServerWindow *)data;
PortMessage msg;
int32 msgstat;
int8 *msgbuffer=NULL;
ssize_t buffersize;
ServerWindow *win = (ServerWindow *)data;
status_t rv;
int32 code;
for(;;)
{
msgstat=msg.ReadFromPort(win->_receiver);
rv = win->ses->ReadInt32( &code );
if(msgstat==B_OK)
{
switch(msg.Code())
{
case B_QUIT_REQUESTED:
{
if ( rv != B_BAD_PORT_ID ){
switch( code ){
case B_QUIT_REQUESTED:{
#ifdef DEBUG_SERVERWINDOW
printf("ServerWindow %s received Quit request\n",win->Title());
#endif
@@ -1208,20 +1217,18 @@ int32 ServerWindow::MonitorWin(void *data)
win->_applink->Flush();
break;
}
case AS_BEGIN_UPDATE:
{
win->DispatchGraphicsMessage(buffersize,msgbuffer);
default:{
win->DispatchMessage( code );
break;
}
default:
// win->DispatchMessage(msgcode,msgbuffer);
win->DispatchMessage(&msg);
break;
}
}
else{
exit_thread(1);
return 1;
}
if(msg.Code()==B_QUIT_REQUESTED)
if( code == B_QUIT_REQUESTED )
break;
}
@@ -1279,11 +1286,10 @@ void ServerWindow::HandleMouseEvent(PortMessage *msg)
BPoint pt(x,y);
// If we have clicked on a window,
active_winborder=_winborder=(WinBorder*)root->GetChildAt(pt);
active_winborder = _winborder = WindowContainsPoint(pt);
if(_winborder)
{
mousewin=_winborder->Window();
// _winborder->MouseDown(buffer);
_winborder->MouseDown((int8*)msg->Buffer());
}
break;
@@ -1311,7 +1317,7 @@ void ServerWindow::HandleMouseEvent(PortMessage *msg)
set_is_sliding_tab(false);
set_is_moving_window(false);
set_is_resizing_window(false);
_winborder=(WinBorder*)root->GetChildAt(pt);
_winborder = WindowContainsPoint(pt);
active_winborder=NULL;
if(_winborder)
{
@@ -1319,7 +1325,6 @@ void ServerWindow::HandleMouseEvent(PortMessage *msg)
// Eventually, we will build in MouseUp messages with buttons specified
// For now, we just "assume" no mouse specification with a 0.
// _winborder->MouseUp(buffer);
_winborder->MouseUp((int8*)msg->Buffer());
}
break;
@@ -1345,16 +1350,14 @@ void ServerWindow::HandleMouseEvent(PortMessage *msg)
if(is_moving_window() || is_resizing_window() || is_sliding_tab())
{
// active_winborder->MouseMoved(buffer);
active_winborder->MouseMoved((int8*)msg->Buffer());
}
else
{
_winborder=(WinBorder*)root->GetChildAt(pt);
_winborder = WindowContainsPoint(pt);
if(_winborder)
{
mousewin=_winborder->Window();
// _winborder->MouseMoved(buffer);
_winborder->MouseMoved((int8*)msg->Buffer());
}
}