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:
@@ -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
|
||||||
@@ -549,7 +546,7 @@ void ServerWindow::SetLayerFontState(Layer *layer){
|
|||||||
// in ServerFont class. DW, could you add one?
|
// in ServerFont class. DW, could you add one?
|
||||||
//layer->_layerdata->font->
|
//layer->_layerdata->font->
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask & B_FONT_SIZE){
|
if (mask & B_FONT_SIZE){
|
||||||
float size;
|
float size;
|
||||||
fSession->ReadFloat(&size);
|
fSession->ReadFloat(&size);
|
||||||
@@ -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,13 +679,14 @@ 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.
|
||||||
localRoot->AddChild(newLayer);
|
if (localRoot)
|
||||||
|
localRoot->AddChild(newLayer);
|
||||||
|
|
||||||
// attach newLayer's children...
|
// attach newLayer's children...
|
||||||
for(int i = 0; i < childCount; i++)
|
for(int i = 0; i < childCount; i++)
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -65,108 +65,127 @@ 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();
|
||||||
|
|
||||||
void ReplaceDecorator(void);
|
void ReplaceDecorator(void);
|
||||||
void Quit(void);
|
void Quit(void);
|
||||||
void Show(void);
|
void Show(void);
|
||||||
void Hide(void);
|
void Hide(void);
|
||||||
bool IsHidden(void);
|
bool IsHidden(void);
|
||||||
void Minimize(bool status);
|
void Minimize(bool status);
|
||||||
void Zoom(void);
|
void Zoom(void);
|
||||||
void SetFocus(bool value);
|
void SetFocus(bool value);
|
||||||
bool HasFocus(void);
|
bool HasFocus(void);
|
||||||
void RequestDraw(BRect rect);
|
void RequestDraw(BRect rect);
|
||||||
void RequestDraw(void);
|
void RequestDraw(void);
|
||||||
|
|
||||||
void WorkspaceActivated(int32 workspace, bool active);
|
void WorkspaceActivated(int32 workspace, bool active);
|
||||||
void WorkspacesChanged(int32 oldone,int32 newone);
|
void WorkspacesChanged(int32 oldone,int32 newone);
|
||||||
void WindowActivated(bool active);
|
void WindowActivated(bool active);
|
||||||
void ScreenModeChanged(const BRect frame, const color_space cspace);
|
void ScreenModeChanged(const BRect frame, const color_space cspace);
|
||||||
|
|
||||||
void SetFrame(const BRect &rect);
|
void SetFrame(const BRect &rect);
|
||||||
BRect Frame(void);
|
BRect Frame(void);
|
||||||
|
|
||||||
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);
|
||||||
static int32 MonitorWin(void *data);
|
static int32 MonitorWin(void *data);
|
||||||
static void HandleMouseEvent(PortMessage *msg);
|
static void HandleMouseEvent(PortMessage *msg);
|
||||||
static void HandleKeyEvent(int32 code, int8 *buffer);
|
static void HandleKeyEvent(int32 code, int8 *buffer);
|
||||||
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)
|
||||||
Workspace *GetWorkspace(void);
|
{ return fWorkspaces; }
|
||||||
void SetWorkspace(Workspace *wkspc);
|
Workspace* GetWorkspace(void);
|
||||||
|
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:
|
||||||
friend class ServerApp;
|
friend class ServerApp;
|
||||||
friend class WinBorder;
|
friend class WinBorder;
|
||||||
friend class Screen;
|
friend class Screen;
|
||||||
friend class Layer;
|
friend class Layer;
|
||||||
|
|
||||||
BString fTitle;
|
BString fTitle;
|
||||||
int32 fLook,
|
int32 fLook,
|
||||||
fFeel,
|
fFeel,
|
||||||
fFlags;
|
fFlags;
|
||||||
uint32 fWorkspaces;
|
uint32 fWorkspaces;
|
||||||
Workspace *fWorkspace;
|
Workspace* fWorkspace;
|
||||||
bool fIsActive;
|
bool fIsActive;
|
||||||
|
|
||||||
ServerApp *fServerApp;
|
ServerApp* fServerApp;
|
||||||
WinBorder *fWinBorder;
|
WinBorder* fWinBorder;
|
||||||
|
|
||||||
team_id fClientTeamID;
|
team_id fClientTeamID;
|
||||||
thread_id fMonitorThreadID;
|
thread_id fMonitorThreadID;
|
||||||
|
|
||||||
port_id fMessagePort;
|
port_id fMessagePort;
|
||||||
port_id fClientWinPort;
|
port_id fClientWinPort;
|
||||||
port_id fClientLooperPort;
|
port_id fClientLooperPort;
|
||||||
|
|
||||||
BLocker fLocker;
|
BLocker fLocker;
|
||||||
BRect fFrame;
|
BRect fFrame;
|
||||||
uint32 fToken;
|
uint32 fToken;
|
||||||
int32 fHandlerToken;
|
int32 fHandlerToken;
|
||||||
|
|
||||||
BSession *fSession;
|
BSession* fSession;
|
||||||
Layer *fTopLayer;
|
Layer* fTopLayer;
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user