modified the way BView data is received.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7149 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adi Oanca
2004-04-03 15:05:49 +00:00
parent 9d5fb2696a
commit 3350f57dd7
2 changed files with 124 additions and 108 deletions
+21 -24
View File
@@ -21,6 +21,7 @@
// //
// File Name: ServerWindow.cpp // File Name: ServerWindow.cpp
// Author: DarkWyrm <[email protected]> // Author: DarkWyrm <[email protected]>
// Adi Oanca <[email protected]>
// Description: Shadow BWindow class // Description: Shadow BWindow class
// //
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@@ -152,35 +153,28 @@ ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook,
winLink.Attach<port_id>(fMessagePort); winLink.Attach<port_id>(fMessagePort);
winLink.Flush(); winLink.Flush();
// Wait for top_view data and create ServerWindow's top most Layer
int32 vCode; int32 vCode;
int32 vToken;
BRect vFrame;
uint32 vResizeMode;
uint32 vFlags;
char* vName = NULL;
// check the next 2 messages to make sure we receive top_view's attributes.
fSession->ReadInt32(&vCode); fSession->ReadInt32(&vCode);
if(vCode != AS_LAYER_CREATE_ROOT) if(vCode != AS_LAYER_CREATE_ROOT)
debugger("SERVER ERROR: ServerWindow(xxx): NO top_view data received!\n"); debugger("SERVER ERROR: ServerWindow(xxx): NO top_view data received! - 1\n");
fSession->ReadInt32(&vToken);
fSession->ReadRect(&vFrame);
fSession->ReadUInt32(&vResizeMode);
fSession->ReadUInt32(&vFlags);
vName = fSession->ReadString();
// Create the top layer. fSession->ReadInt32(&vCode);
fTopLayer = new Layer(vFrame, vName, vToken, vResizeMode, vFlags, desktop->GetDisplayDriver()); if(vCode != AS_LAYER_CREATE)
debugger("SERVER ERROR: ServerWindow(xxx): NO top_view data received! - 2\n");
// start receiving top_view data. pass NULL as the parent view.
// This should be the *only* place where this happens.
fTopLayer = CreateLayerTree(NULL);
fTopLayer->SetAsTopLayer(true); fTopLayer->SetAsTopLayer(true);
cl = fTopLayer;
// Create a WindoBorder object for our ServerWindow. // Create a WindoBorder object for our ServerWindow.
fWinBorder = new WinBorder( fFrame, fTitle.String(), fWinBorder = new WinBorder( fFrame, fTitle.String(),
wlook, wfeel, wflags, wlook, wfeel, wflags,
this, desktop->GetDisplayDriver()); this, desktop->GetDisplayDriver());
delete vName;
cl = fTopLayer;
STRACE(("ServerWindow %s:\n",fTitle.String())); STRACE(("ServerWindow %s:\n",fTitle.String()));
STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n",rect.left,rect.top,rect.right,rect.bottom)); STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n",rect.left,rect.top,rect.right,rect.bottom));
STRACE(("\tPort: %ld\n",fMessagePort)); STRACE(("\tPort: %ld\n",fMessagePort));
@@ -268,6 +262,7 @@ STRACE(("ServerWindow %s: Quit\n",fTitle.String()));
//! Shows the window's WinBorder //! Shows the window's WinBorder
void ServerWindow::Show(void) void ServerWindow::Show(void)
{ {
// whaaat?
if(!fWinBorder->IsHidden()) if(!fWinBorder->IsHidden())
return; return;
@@ -310,6 +305,8 @@ void ServerWindow::Show(void)
desktop->fGeneralLock.Unlock(); desktop->fGeneralLock.Unlock();
STRACE(("ServerWindow(%s)::Show() - General lock released\n", fWinBorder->GetName())); STRACE(("ServerWindow(%s)::Show() - General lock released\n", fWinBorder->GetName()));
} }
snooze(1000000);
fWinBorder->MoveBy(100,100);
} }
//! Hides the window's WinBorder //! Hides the window's WinBorder
@@ -591,7 +588,7 @@ void ServerWindow::SetLayerFontState(Layer *layer){
fSession->ReadUInt32(&flags); // uint32 fSession->ReadUInt32(&flags); // uint32
layer->_layerdata->font.SetFlags(flags); layer->_layerdata->font.SetFlags(flags);
} }
STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_FONT_STATE: Layer: %s\n",fTitle.String(), cl->_name->String())); STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_FONT_STATE: Layer: %s\n",fTitle.String(), layer->_name->String()));
} }
void ServerWindow::SetLayerState(Layer *layer){ void ServerWindow::SetLayerState(Layer *layer){
@@ -642,13 +639,11 @@ void ServerWindow::SetLayerState(Layer *layer){
layer->_layerdata->clippReg = NULL; layer->_layerdata->clippReg = NULL;
} }
} }
STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_STATE: Layer: %s\n",fTitle.String(), cl->_name->String())); STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_STATE: Layer: %s\n",fTitle.String(), layer->_name->String()));
} }
void ServerWindow::CreateLayerTree(Layer *localRoot){ Layer* ServerWindow::CreateLayerTree(Layer *localRoot){
STRACE(("ServerWindow(%s)::CreateLayerTree()\n", fTitle.String())); STRACE(("ServerWindow(%s)::CreateLayerTree()\n", fTitle.String()));
if(!localRoot)
debugger("ServerWindow(%s)::CreateLayerTree() - NO localRoot Layer specified!\n");
int32 token; int32 token;
BRect frame; BRect frame;
@@ -684,12 +679,13 @@ STRACE(("ServerWindow(%s)::CreateLayerTree()\n", fTitle.String()));
//lastly, the BView's graphic state //lastly, the BView's graphic state
fSession->ReadInt32(&dummyMsg); fSession->ReadInt32(&dummyMsg);
if (dummyMsg == AS_LAYER_SET_FONT_STATE) if (dummyMsg == AS_LAYER_SET_STATE)
SetLayerState(newLayer); SetLayerState(newLayer);
else else
debugger("ServerWindow(%s) - AS_LAYER_SET_STATE Expected!\n"); debugger("ServerWindow(%s) - AS_LAYER_SET_STATE Expected!\n");
// add the new Layer to the tree structure. // add the new Layer to the tree structure.
if (localRoot)
localRoot->AddChild(newLayer); localRoot->AddChild(newLayer);
// attach newLayer's children... // attach newLayer's children...
@@ -701,7 +697,8 @@ STRACE(("ServerWindow(%s)::CreateLayerTree()\n", fTitle.String()));
else else
debugger("ServerWindow(%s) - AS_LAYER_CREATE Expected!\n"); debugger("ServerWindow(%s) - AS_LAYER_CREATE Expected!\n");
} }
STRACE(("DONE: ServerWindow %s: Message AS_CREATE_LAYER: Parent: %s, Child: %s\n", fTitle.String(), cl->_name->String(), name)); STRACE(("DONE: ServerWindow %s: Message AS_CREATE_LAYER: Parent: %s, Child: %s\n", fTitle.String(), newLayer->_name->String(), name));
return newLayer;
} }
void ServerWindow::DispatchMessage(int32 code) void ServerWindow::DispatchMessage(int32 code)
+39 -20
View File
@@ -65,10 +65,18 @@ class Layer;
class ServerWindow class ServerWindow
{ {
public: public:
ServerWindow(BRect rect, const char *string, uint32 wlook, uint32 wfeel, uint32 wflags, ServerWindow( BRect rect,
ServerApp *winapp, port_id winport, port_id looperPort, port_id replyport, const char *string,
uint32 index, int32 handlerID); uint32 wlook,
~ServerWindow(void); uint32 wfeel,
uint32 wflags,
ServerApp *winapp,
port_id winport,
port_id looperPort,
port_id replyport,
uint32 index,
int32 handlerID);
virtual ~ServerWindow(void);
void Init(); void Init();
@@ -95,7 +103,8 @@ public:
status_t Lock(void); status_t Lock(void);
void Unlock(void); void Unlock(void);
bool IsLocked(void); bool IsLocked(void);
thread_id ThreadID(void) const { return fMonitorThreadID;} thread_id ThreadID(void) const
{ return fMonitorThreadID;}
void DispatchMessage(int32 code); void DispatchMessage(int32 code);
void DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer); void DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer);
@@ -105,32 +114,44 @@ public:
void PostMessage(int32 code, size_t size=0, int8 *buffer=NULL); void PostMessage(int32 code, size_t size=0, int8 *buffer=NULL);
//! Returns the index of the workspaces to which it belongs //! Returns the index of the workspaces to which it belongs
int32 GetWorkspaceIndex(void) { return fWorkspaces; } int32 GetWorkspaceIndex(void)
{ return fWorkspaces; }
Workspace* GetWorkspace(void); Workspace* GetWorkspace(void);
void SetWorkspace(Workspace *wkspc); void SetWorkspace(Workspace *wkspc);
//! Returns the window's title //! Returns the window's title
const char *Title(void) { return fTitle.String(); } const char* Title(void)
{ return fTitle.String(); }
void CreateLayerTree(Layer *localRoot); Layer* CreateLayerTree(Layer *localRoot);
void SetLayerState(Layer *layer); void SetLayerState(Layer *layer);
void SetLayerFontState(Layer *layer); void SetLayerFontState(Layer *layer);
Layer* FindLayer(const Layer* start, int32 token) const; Layer* FindLayer(const Layer* start, int32 token) const;
void SendMessageToClient( const BMessage* msg ) const; void SendMessageToClient( const BMessage* msg ) const;
int32 Look(void) const { return fLook; } int32 Look(void) const
int32 Feel(void) const { return fFeel; } { return fLook; }
uint32 Flags(void) const { return fFlags; } int32 Feel(void) const
team_id ClientTeamID(void) const { return fClientTeamID; } { return fFeel; }
ServerApp *App(void) const { return fServerApp; } uint32 Flags(void) const
uint32 Workspaces(void) const { return fWorkspaces; } { return fFlags; }
WinBorder *GetWinBorder(void) const { return fWinBorder; } team_id ClientTeamID(void) const
{ return fClientTeamID; }
ServerApp* App(void) const
{ return fServerApp; }
uint32 Workspaces(void) const
{ return fWorkspaces; }
WinBorder* GetWinBorder(void) const
{ return fWinBorder; }
// server "private" - try not to use // server "private" - try not to use
void QuietlySetWorkspaces(uint32 wks) { fWorkspaces = wks; } void QuietlySetWorkspaces(uint32 wks)
void QuietlySetFeel(int32 feel) { fFeel = feel; } { fWorkspaces = wks; }
int32 ClientToken(void) const { return fHandlerToken; } void QuietlySetFeel(int32 feel)
{ fFeel = feel; }
int32 ClientToken(void) const
{ return fHandlerToken; }
FMWList fWinFMWList; FMWList fWinFMWList;
protected: protected:
@@ -167,6 +188,4 @@ protected:
Layer* cl; // short for currentLayer. We'll use it a lot, that's why it's short :-) Layer* cl; // short for currentLayer. We'll use it a lot, that's why it's short :-)
}; };
void ActivateWindow(ServerWindow *oldwin,ServerWindow *newwin);
#endif #endif