Tried something, didn't work, some cleanup left.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12845 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+125
-144
@@ -108,18 +108,18 @@ write_to_buffer(int8 **_buffer, Type value)
|
|||||||
|
|
||||||
*_buffer = (int8 *)(typedBuffer);
|
*_buffer = (int8 *)(typedBuffer);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
// #pragma mark -
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Contructor
|
\brief Constructor
|
||||||
|
|
||||||
Does a lot of stuff to set up for the window - new decorator, new winborder, spawn a
|
Does a lot of stuff to set up for the window - new decorator, new winborder, spawn a
|
||||||
monitor thread.
|
monitor thread.
|
||||||
*/
|
*/
|
||||||
ServerWindow::ServerWindow( const char *string,
|
ServerWindow::ServerWindow(const char *string, ServerApp *winapp,
|
||||||
ServerApp *winapp,
|
port_id winport, port_id looperPort, int32 handlerID)
|
||||||
port_id winport,
|
|
||||||
port_id looperPort,
|
|
||||||
int32 handlerID)
|
|
||||||
: fServerApp(winapp),
|
: fServerApp(winapp),
|
||||||
// fClientWinPort is the port to which the app awaits messages from the server
|
// fClientWinPort is the port to which the app awaits messages from the server
|
||||||
fClientWinPort(winport),
|
fClientWinPort(winport),
|
||||||
@@ -158,54 +158,34 @@ void
|
|||||||
ServerWindow::Init(BRect frame, uint32 wlook,
|
ServerWindow::Init(BRect frame, uint32 wlook,
|
||||||
uint32 wfeel, uint32 wflags, uint32 wwksindex)
|
uint32 wfeel, uint32 wflags, uint32 wwksindex)
|
||||||
{
|
{
|
||||||
char newName[60];
|
char name[60];
|
||||||
sprintf(newName, "%ld: %s", fClientTeamID, fName);
|
snprintf(name, sizeof(name), "%ld: %s", fClientTeamID, fName);
|
||||||
fWinBorder = new WinBorder( frame,
|
|
||||||
newName,
|
fWinBorder = new WinBorder(frame, name, wlook, wfeel, wflags,
|
||||||
wlook,
|
wwksindex, this, desktop->GetDisplayDriver());
|
||||||
wfeel,
|
|
||||||
wflags,
|
|
||||||
wwksindex,
|
|
||||||
this,
|
|
||||||
desktop->GetDisplayDriver());
|
|
||||||
|
|
||||||
// Spawn our message-monitoring thread
|
// Spawn our message-monitoring thread
|
||||||
fMonitorThreadID = spawn_thread(MonitorWin, fName, B_NORMAL_PRIORITY, this);
|
fMonitorThreadID = spawn_thread(MonitorWin, fName, B_NORMAL_PRIORITY, this);
|
||||||
|
if (fMonitorThreadID >= B_OK)
|
||||||
if(fMonitorThreadID != B_NO_MORE_THREADS && fMonitorThreadID != B_NO_MEMORY)
|
|
||||||
resume_thread(fMonitorThreadID);
|
resume_thread(fMonitorThreadID);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
//!Tears down all connections the main app_server objects, and deletes some internals.
|
//!Tears down all connections the main app_server objects, and deletes some internals.
|
||||||
ServerWindow::~ServerWindow(void)
|
ServerWindow::~ServerWindow(void)
|
||||||
{
|
{
|
||||||
STRACE(("*ServerWindow (%s):~ServerWindow()\n",fName));
|
STRACE(("*ServerWindow (%s):~ServerWindow()\n", fName));
|
||||||
|
|
||||||
if (fWinBorder)
|
|
||||||
{
|
|
||||||
delete fWinBorder;
|
|
||||||
fWinBorder = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
fCurrentLayer = NULL;
|
delete fWinBorder;
|
||||||
|
delete fMsgSender;
|
||||||
|
delete fMsgReader;
|
||||||
|
|
||||||
if(fMsgSender)
|
|
||||||
{
|
|
||||||
delete fMsgSender;
|
|
||||||
fMsgSender=NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fMsgReader)
|
|
||||||
{
|
|
||||||
delete fMsgReader;
|
|
||||||
fMsgReader=NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
STRACE(("#ServerWindow(%s) will exit NOW\n", fName));
|
STRACE(("#ServerWindow(%s) will exit NOW\n", fName));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Forces the window border to update its decorator
|
//! Forces the window border to update its decorator
|
||||||
void ServerWindow::ReplaceDecorator(void)
|
void
|
||||||
|
ServerWindow::ReplaceDecorator(void)
|
||||||
{
|
{
|
||||||
if (!IsLocked())
|
if (!IsLocked())
|
||||||
debugger("you must lock a ServerWindow object before calling ::ReplaceDecorator()\n");
|
debugger("you must lock a ServerWindow object before calling ::ReplaceDecorator()\n");
|
||||||
@@ -213,44 +193,47 @@ void ServerWindow::ReplaceDecorator(void)
|
|||||||
STRACE(("ServerWindow %s: Replace Decorator\n",fName));
|
STRACE(("ServerWindow %s: Replace Decorator\n",fName));
|
||||||
fWinBorder->UpdateDecorator();
|
fWinBorder->UpdateDecorator();
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
//! Requests that the ServerWindow's BWindow quit
|
//! Requests that the ServerWindow's BWindow quit
|
||||||
void ServerWindow::Quit(void)
|
void
|
||||||
|
ServerWindow::Quit(void)
|
||||||
{
|
{
|
||||||
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
||||||
STRACE(("ServerWindow %s: Quit\n",fName));
|
STRACE(("ServerWindow %s: Quit\n",fName));
|
||||||
BMessage msg;
|
|
||||||
|
BMessage msg(B_QUIT_REQUESTED);
|
||||||
msg.what = B_QUIT_REQUESTED;
|
|
||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
//! Shows the window's WinBorder
|
//! Shows the window's WinBorder
|
||||||
void ServerWindow::Show(void)
|
void
|
||||||
|
ServerWindow::Show(void)
|
||||||
{
|
{
|
||||||
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
||||||
STRACE(("ServerWindow %s: Show\n",fName));
|
STRACE(("ServerWindow %s: Show\n",fName));
|
||||||
|
|
||||||
if(!fWinBorder->IsHidden())
|
if (!fWinBorder->IsHidden())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fWinBorder->GetRootLayer()->ShowWinBorder(fWinBorder);
|
fWinBorder->GetRootLayer()->ShowWinBorder(fWinBorder);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
//! Hides the window's WinBorder
|
//! Hides the window's WinBorder
|
||||||
void ServerWindow::Hide(void)
|
void
|
||||||
|
ServerWindow::Hide(void)
|
||||||
{
|
{
|
||||||
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
||||||
STRACE(("ServerWindow %s: Hide\n",fName));
|
STRACE(("ServerWindow %s: Hide\n",fName));
|
||||||
|
|
||||||
if(fWinBorder->IsHidden())
|
if (fWinBorder->IsHidden())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fWinBorder->GetRootLayer()->HideWinBorder(fWinBorder);
|
fWinBorder->GetRootLayer()->HideWinBorder(fWinBorder);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
void ServerWindow::Minimize(bool status)
|
|
||||||
|
void
|
||||||
|
ServerWindow::Minimize(bool status)
|
||||||
{
|
{
|
||||||
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
||||||
// This function doesn't need much -- check to make sure that we should and
|
// This function doesn't need much -- check to make sure that we should and
|
||||||
@@ -258,94 +241,92 @@ void ServerWindow::Minimize(bool status)
|
|||||||
// does all the heavy lifting for us. :)
|
// does all the heavy lifting for us. :)
|
||||||
bool sendMessages = false;
|
bool sendMessages = false;
|
||||||
|
|
||||||
if (status)
|
if (status) {
|
||||||
{
|
if (!fWinBorder->IsHidden()) {
|
||||||
if (!fWinBorder->IsHidden())
|
|
||||||
{
|
|
||||||
Hide();
|
Hide();
|
||||||
sendMessages = true;
|
sendMessages = true;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
if (fWinBorder->IsHidden()) {
|
||||||
{
|
|
||||||
if (fWinBorder->IsHidden())
|
|
||||||
{
|
|
||||||
Show();
|
Show();
|
||||||
sendMessages = true;
|
sendMessages = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sendMessages)
|
if (sendMessages) {
|
||||||
{
|
|
||||||
BMessage msg;
|
BMessage msg;
|
||||||
msg.what = B_MINIMIZE;
|
msg.what = B_MINIMIZE;
|
||||||
msg.AddInt64("when", real_time_clock_usecs());
|
msg.AddInt64("when", real_time_clock_usecs());
|
||||||
msg.AddBool("minimize", status);
|
msg.AddBool("minimize", status);
|
||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Sends a message to the client to perform a Zoom
|
//! Sends a message to the client to perform a Zoom
|
||||||
void ServerWindow::Zoom(void)
|
void
|
||||||
|
ServerWindow::Zoom(void)
|
||||||
{
|
{
|
||||||
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
// NOTE: if you do something else, other than sending a port message, PLEASE lock
|
||||||
BMessage msg;
|
BMessage msg(B_ZOOM);
|
||||||
msg.what=B_ZOOM;
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
/*!
|
/*!
|
||||||
\brief Notifies window of a change in screen resolution
|
\brief Notifies window of a change in screen resolution
|
||||||
\param frame Size of the new resolution
|
\param frame Size of the new resolution
|
||||||
\param color_space Color space of the new screen mode
|
\param color_space Color space of the new screen mode
|
||||||
*/
|
*/
|
||||||
void ServerWindow::ScreenModeChanged(const BRect frame, const color_space cspace)
|
void
|
||||||
|
ServerWindow::ScreenModeChanged(const BRect frame, const color_space colorSpace)
|
||||||
{
|
{
|
||||||
STRACE(("ServerWindow %s: ScreenModeChanged\n",fName));
|
STRACE(("ServerWindow %s: ScreenModeChanged\n", fName));
|
||||||
BMessage msg;
|
|
||||||
|
BMessage msg(B_SCREEN_CHANGED);
|
||||||
msg.what = B_SCREEN_CHANGED;
|
|
||||||
msg.AddRect("frame", frame);
|
msg.AddRect("frame", frame);
|
||||||
msg.AddInt32("mode", (int32)cspace);
|
msg.AddInt32("mode", (int32)colorSpace);
|
||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
/*!
|
/*!
|
||||||
\brief Locks the window
|
\brief Locks the window
|
||||||
\return B_OK if everything is ok, B_ERROR if something went wrong
|
\return B_OK if everything is ok, B_ERROR if something went wrong
|
||||||
*/
|
*/
|
||||||
status_t ServerWindow::Lock(void)
|
status_t
|
||||||
|
ServerWindow::Lock(void)
|
||||||
{
|
{
|
||||||
STRACE(("\nServerWindow %s: Lock\n",fName));
|
STRACE(("\nServerWindow %s: Lock\n", fName));
|
||||||
|
|
||||||
return (fLocker.Lock())?B_OK:B_ERROR;
|
return fLocker.Lock() ? B_OK : B_ERROR;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
//! Unlocks the window
|
//! Unlocks the window
|
||||||
void ServerWindow::Unlock(void)
|
void
|
||||||
|
ServerWindow::Unlock(void)
|
||||||
{
|
{
|
||||||
STRACE(("ServerWindow %s: Unlock\n\n",fName));
|
STRACE(("ServerWindow %s: Unlock\n\n", fName));
|
||||||
|
|
||||||
fLocker.Unlock();
|
fLocker.Unlock();
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
/*!
|
/*!
|
||||||
\brief Determines whether or not the window is locked
|
\brief Determines whether or not the window is locked
|
||||||
\return True if locked, false if not.
|
\return True if locked, false if not.
|
||||||
*/
|
*/
|
||||||
bool ServerWindow::IsLocked(void) const
|
bool
|
||||||
|
ServerWindow::IsLocked(void) const
|
||||||
{
|
{
|
||||||
return fLocker.IsLocked();
|
return fLocker.IsLocked();
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
/*!
|
/*!
|
||||||
\brief Sets the font state for a layer
|
\brief Sets the font state for a layer
|
||||||
\param layer The layer to set the font
|
\param layer The layer to set the font
|
||||||
*/
|
*/
|
||||||
inline
|
inline
|
||||||
void ServerWindow::SetLayerFontState(Layer *layer, LinkMsgReader &link)
|
void
|
||||||
|
ServerWindow::SetLayerFontState(Layer *layer, LinkMsgReader &link)
|
||||||
{
|
{
|
||||||
STRACE(("ServerWindow %s: SetLayerFontStateMessage for layer %s\n",
|
STRACE(("ServerWindow %s: SetLayerFontStateMessage for layer %s\n",
|
||||||
fName, layer->fName->String()));
|
fName, layer->fName->String()));
|
||||||
@@ -353,9 +334,11 @@ void ServerWindow::SetLayerFontState(Layer *layer, LinkMsgReader &link)
|
|||||||
|
|
||||||
layer->fLayerData->ReadFontFromLink(link);
|
layer->fLayerData->ReadFontFromLink(link);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
void ServerWindow::SetLayerState(Layer *layer, LinkMsgReader &link)
|
void
|
||||||
|
ServerWindow::SetLayerState(Layer *layer, LinkMsgReader &link)
|
||||||
{
|
{
|
||||||
STRACE(("ServerWindow %s: SetLayerState for layer %s\n",fName,
|
STRACE(("ServerWindow %s: SetLayerState for layer %s\n",fName,
|
||||||
layer->fName->String()));
|
layer->fName->String()));
|
||||||
@@ -364,9 +347,11 @@ void ServerWindow::SetLayerState(Layer *layer, LinkMsgReader &link)
|
|||||||
layer->fLayerData->ReadFromLink(link);
|
layer->fLayerData->ReadFromLink(link);
|
||||||
// TODO: Rebuild clipping here?
|
// TODO: Rebuild clipping here?
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
Layer * ServerWindow::CreateLayerTree(Layer *localRoot, LinkMsgReader &link)
|
Layer *
|
||||||
|
ServerWindow::CreateLayerTree(Layer *localRoot, LinkMsgReader &link)
|
||||||
{
|
{
|
||||||
// NOTE: no need to check for a lock. This is a private method.
|
// NOTE: no need to check for a lock. This is a private method.
|
||||||
|
|
||||||
@@ -379,7 +364,7 @@ Layer * ServerWindow::CreateLayerTree(Layer *localRoot, LinkMsgReader &link)
|
|||||||
bool hidden;
|
bool hidden;
|
||||||
int32 childCount;
|
int32 childCount;
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
|
|
||||||
link.Read<int32>(&token);
|
link.Read<int32>(&token);
|
||||||
link.ReadString(&name);
|
link.ReadString(&name);
|
||||||
link.Read<BRect>(&frame);
|
link.Read<BRect>(&frame);
|
||||||
@@ -389,40 +374,39 @@ Layer * ServerWindow::CreateLayerTree(Layer *localRoot, LinkMsgReader &link)
|
|||||||
link.Read<uint32>(&flags);
|
link.Read<uint32>(&flags);
|
||||||
link.Read<bool>(&hidden);
|
link.Read<bool>(&hidden);
|
||||||
link.Read<int32>(&childCount);
|
link.Read<int32>(&childCount);
|
||||||
|
|
||||||
STRACE(("ServerWindow(%s)::CreateLayerTree()-> layer %s, token %ld\n", fName,name,token));
|
STRACE(("ServerWindow(%s)::CreateLayerTree()-> layer %s, token %ld\n", fName,name,token));
|
||||||
|
|
||||||
Layer *newLayer;
|
Layer *newLayer = new Layer(frame, name, token, resizeMask,
|
||||||
newLayer = new Layer(frame, name, token, resizeMask,
|
|
||||||
flags, desktop->GetDisplayDriver());
|
flags, desktop->GetDisplayDriver());
|
||||||
if (name)
|
|
||||||
free(name);
|
free(name);
|
||||||
|
|
||||||
// there is no way of setting this, other than manually :-)
|
// there is no way of setting this, other than manually :-)
|
||||||
newLayer->fHidden = hidden;
|
newLayer->fHidden = hidden;
|
||||||
newLayer->fEventMask = eventMask;
|
newLayer->fEventMask = eventMask;
|
||||||
newLayer->fEventOptions = eventOptions;
|
newLayer->fEventOptions = eventOptions;
|
||||||
newLayer->fOwner = fWinBorder;
|
newLayer->fOwner = fWinBorder;
|
||||||
|
|
||||||
// add the new Layer to the tree structure.
|
// add the new Layer to the tree structure.
|
||||||
if(localRoot)
|
if (localRoot)
|
||||||
localRoot->AddChild(newLayer, NULL);
|
localRoot->AddChild(newLayer, NULL);
|
||||||
|
|
||||||
return newLayer;
|
return newLayer;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
void ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link)
|
|
||||||
|
void
|
||||||
|
ServerWindow::DispatchMessage(int32 code, LinkMsgReader &link)
|
||||||
{
|
{
|
||||||
if (fCurrentLayer == NULL && code != AS_LAYER_CREATE_ROOT)
|
if (fCurrentLayer == NULL && code != AS_LAYER_CREATE_ROOT) {
|
||||||
{
|
|
||||||
printf("ServerWindow %s received unexpected code - message offset %ld before top_view attached.\n",fName, code - SERVER_TRUE);
|
printf("ServerWindow %s received unexpected code - message offset %ld before top_view attached.\n",fName, code - SERVER_TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RootLayer *myRootLayer = fWinBorder->GetRootLayer();
|
RootLayer *myRootLayer = fWinBorder->GetRootLayer();
|
||||||
|
|
||||||
switch(code)
|
switch (code) {
|
||||||
{
|
|
||||||
//--------- BView Messages -----------------
|
//--------- BView Messages -----------------
|
||||||
case AS_LAYER_SCROLL:
|
case AS_LAYER_SCROLL:
|
||||||
{
|
{
|
||||||
@@ -2042,7 +2026,7 @@ ServerWindow::DispatchGraphicsMessage(int32 code, LinkMsgReader &link)
|
|||||||
desktop->GetDisplayDriver()->ConstrainClippingRegion(NULL);
|
desktop->GetDisplayDriver()->ConstrainClippingRegion(NULL);
|
||||||
fWinBorder->GetRootLayer()->Unlock();
|
fWinBorder->GetRootLayer()->Unlock();
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
/*!
|
/*!
|
||||||
\brief Message-dispatching loop for the ServerWindow
|
\brief Message-dispatching loop for the ServerWindow
|
||||||
|
|
||||||
@@ -2050,17 +2034,17 @@ ServerWindow::DispatchGraphicsMessage(int32 code, LinkMsgReader &link)
|
|||||||
\param data The thread's ServerWindow
|
\param data The thread's ServerWindow
|
||||||
\return Throwaway code. Always 0.
|
\return Throwaway code. Always 0.
|
||||||
*/
|
*/
|
||||||
int32 ServerWindow::MonitorWin(void *data)
|
int32
|
||||||
|
ServerWindow::MonitorWin(void *data)
|
||||||
{
|
{
|
||||||
ServerWindow *win = (ServerWindow *)data;
|
ServerWindow *win = (ServerWindow *)data;
|
||||||
LinkMsgReader *ses = win->fMsgReader;
|
LinkMsgReader *ses = win->fMsgReader;
|
||||||
|
|
||||||
bool quitting = false;
|
bool quitting = false;
|
||||||
int32 code;
|
int32 code;
|
||||||
status_t err = B_OK;
|
status_t err = B_OK;
|
||||||
|
|
||||||
while(!quitting)
|
while (!quitting) {
|
||||||
{
|
|
||||||
// printf("info: ServerWindow::MonitorWin listening on port %ld.\n", win->fMessagePort);
|
// printf("info: ServerWindow::MonitorWin listening on port %ld.\n", win->fMessagePort);
|
||||||
code = AS_CLIENT_DEAD;
|
code = AS_CLIENT_DEAD;
|
||||||
err = ses->GetNextMessage(&code);
|
err = ses->GetNextMessage(&code);
|
||||||
@@ -2069,34 +2053,33 @@ int32 ServerWindow::MonitorWin(void *data)
|
|||||||
|
|
||||||
win->Lock();
|
win->Lock();
|
||||||
|
|
||||||
switch(code)
|
switch (code) {
|
||||||
{
|
|
||||||
case AS_DELETE_WINDOW:
|
case AS_DELETE_WINDOW:
|
||||||
case AS_CLIENT_DEAD:
|
case AS_CLIENT_DEAD:
|
||||||
{
|
{
|
||||||
// this means the client has been killed
|
// this means the client has been killed
|
||||||
STRACE(("ServerWindow %s received 'AS_CLIENT_DEAD/AS_DELETE_WINDOW' message code\n",win->Title()));
|
STRACE(("ServerWindow %s received 'AS_CLIENT_DEAD/AS_DELETE_WINDOW' message code\n",win->Title()));
|
||||||
// RootLayer *myRootLayer = win->fWinBorder->GetRootLayer();
|
|
||||||
|
|
||||||
// quitting = true;
|
//RootLayer *rootLayer = fWinBorder->GetRootLayer();
|
||||||
|
|
||||||
// we are preparing to delete a ServerWindow, RootLayer should be aware
|
// we are preparing to delete a ServerWindow, RootLayer should be aware
|
||||||
// of that and stop for a moment.
|
// of that and stop for a moment.
|
||||||
// also we must wait a bit for the associated WinBorder to become hidden
|
// also we must wait a bit for the associated WinBorder to become hidden
|
||||||
// while(1)
|
//while(1) {
|
||||||
// {
|
// myRootLayer->Lock();
|
||||||
// myRootLayer->Lock();
|
// if (IsHidden())
|
||||||
// if (win->IsHidden())
|
// break;
|
||||||
// break;
|
// else
|
||||||
// else
|
// rootLayer->Unlock();
|
||||||
// myRootLayer->Unlock();
|
//}
|
||||||
// }
|
|
||||||
// ServerWindow's destructor takes care of pulling this object off the desktop.
|
// ServerWindow's destructor takes care of pulling this object off the desktop.
|
||||||
if (!win->fWinBorder->IsHidden())
|
if (!win->fWinBorder->IsHidden())
|
||||||
CRITICAL("ServerWindow: a window must be hidden before it's deleted\n");
|
CRITICAL("ServerWindow: a window must be hidden before it's deleted\n");
|
||||||
delete win;
|
|
||||||
// myRootLayer->Unlock();
|
|
||||||
|
|
||||||
|
delete win;
|
||||||
|
// rootLayer->Unlock();
|
||||||
|
|
||||||
exit_thread(0);
|
exit_thread(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2164,8 +2147,8 @@ ServerWindow::_CopyBits(RootLayer* rootLayer, Layer* layer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
void
|
||||||
void ServerWindow::SendMessageToClient(const BMessage* msg, int32 target, bool usePreferred) const
|
ServerWindow::SendMessageToClient(const BMessage* msg, int32 target, bool usePreferred) const
|
||||||
{
|
{
|
||||||
ssize_t size = msg->FlattenedSize();
|
ssize_t size = msg->FlattenedSize();
|
||||||
char* buffer = new char[size];
|
char* buffer = new char[size];
|
||||||
@@ -2177,11 +2160,9 @@ void ServerWindow::SendMessageToClient(const BMessage* msg, int32 target, bool u
|
|||||||
fClientLooperPort, target, usePreferred, 100000);
|
fClientLooperPort, target, usePreferred, 100000);
|
||||||
if (ret < B_OK)
|
if (ret < B_OK)
|
||||||
fprintf(stderr, "ServerWindow::SendMessageToClient(): %s\n", strerror(ret));
|
fprintf(stderr, "ServerWindow::SendMessageToClient(): %s\n", strerror(ret));
|
||||||
|
|
||||||
} else
|
} else
|
||||||
printf("PANIC: ServerWindow %s: can't flatten message in 'SendMessageToClient()'\n", fName);
|
printf("PANIC: ServerWindow %s: can't flatten message in 'SendMessageToClient()'\n", fName);
|
||||||
|
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Copyright (c) 2001-2002, Haiku, Inc.
|
// Copyright (c) 2001-2005, Haiku, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
// copy of this software and associated documentation files (the "Software"),
|
// copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -65,8 +65,7 @@ class Layer;
|
|||||||
coordinating and linking a window's WinBorder half with its messaging half, dispatching
|
coordinating and linking a window's WinBorder half with its messaging half, dispatching
|
||||||
mouse and key events from the server to its window, and other such things.
|
mouse and key events from the server to its window, and other such things.
|
||||||
*/
|
*/
|
||||||
class ServerWindow
|
class ServerWindow {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
ServerWindow( const char *string,
|
ServerWindow( const char *string,
|
||||||
ServerApp *winapp,
|
ServerApp *winapp,
|
||||||
@@ -74,7 +73,7 @@ public:
|
|||||||
port_id looperPort,
|
port_id looperPort,
|
||||||
int32 handlerID);
|
int32 handlerID);
|
||||||
virtual ~ServerWindow(void);
|
virtual ~ServerWindow(void);
|
||||||
|
|
||||||
void Init( BRect frame,
|
void Init( BRect frame,
|
||||||
uint32 wlook, uint32 wfeel, uint32 wflags,
|
uint32 wlook, uint32 wfeel, uint32 wflags,
|
||||||
uint32 wwksindex);
|
uint32 wwksindex);
|
||||||
@@ -92,7 +91,7 @@ public:
|
|||||||
void Minimize(bool status);
|
void Minimize(bool status);
|
||||||
void Zoom(void);
|
void Zoom(void);
|
||||||
void ScreenModeChanged(const BRect frame, const color_space cspace);
|
void ScreenModeChanged(const BRect frame, const color_space cspace);
|
||||||
|
|
||||||
// util methods.
|
// util methods.
|
||||||
void SendMessageToClient(const BMessage* msg,
|
void SendMessageToClient(const BMessage* msg,
|
||||||
int32 target = B_NULL_TOKEN,
|
int32 target = B_NULL_TOKEN,
|
||||||
@@ -117,6 +116,7 @@ private:
|
|||||||
Layer* CreateLayerTree(Layer *localRoot, LinkMsgReader &link);
|
Layer* CreateLayerTree(Layer *localRoot, LinkMsgReader &link);
|
||||||
void SetLayerState(Layer *layer, LinkMsgReader &link);
|
void SetLayerState(Layer *layer, LinkMsgReader &link);
|
||||||
void SetLayerFontState(Layer *layer, LinkMsgReader &link);
|
void SetLayerFontState(Layer *layer, LinkMsgReader &link);
|
||||||
|
void ClientDied(bool crashed);
|
||||||
|
|
||||||
// message handle methods.
|
// message handle methods.
|
||||||
void DispatchMessage(int32 code, LinkMsgReader &link);
|
void DispatchMessage(int32 code, LinkMsgReader &link);
|
||||||
|
|||||||
Reference in New Issue
Block a user