Cleanup for ServerWindow object
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8060 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -75,11 +75,7 @@
|
|||||||
# define STRACE_MOUSE(x) ;
|
# define STRACE_MOUSE(x) ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! TokenHandler object used to provide IDs for all windows in the system
|
//------------------------------------------------------------------------------
|
||||||
TokenHandler win_token_handler;
|
|
||||||
|
|
||||||
//! Active winborder - used for tracking windows during moves, resizes, and tab slides
|
|
||||||
WinBorder *active_winborder=NULL;
|
|
||||||
|
|
||||||
template<class Type> Type
|
template<class Type> Type
|
||||||
read_from_buffer(int8 **_buffer)
|
read_from_buffer(int8 **_buffer)
|
||||||
@@ -92,7 +88,7 @@ read_from_buffer(int8 **_buffer)
|
|||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
static int8 *read_pattern_from_buffer(int8 **_buffer)
|
static int8 *read_pattern_from_buffer(int8 **_buffer)
|
||||||
{
|
{
|
||||||
int8 *pattern = *_buffer;
|
int8 *pattern = *_buffer;
|
||||||
@@ -101,7 +97,7 @@ static int8 *read_pattern_from_buffer(int8 **_buffer)
|
|||||||
|
|
||||||
return pattern;
|
return pattern;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
template<class Type> void
|
template<class Type> void
|
||||||
write_to_buffer(int8 **_buffer, Type value)
|
write_to_buffer(int8 **_buffer, Type value)
|
||||||
{
|
{
|
||||||
@@ -112,7 +108,7 @@ write_to_buffer(int8 **_buffer, Type value)
|
|||||||
|
|
||||||
*_buffer = (int8 *)(typedBuffer);
|
*_buffer = (int8 *)(typedBuffer);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
\brief Contructor
|
\brief Contructor
|
||||||
|
|
||||||
@@ -139,7 +135,6 @@ ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook,
|
|||||||
fClientTeamID = winapp->ClientTeamID();
|
fClientTeamID = winapp->ClientTeamID();
|
||||||
fWorkspaces = index;
|
fWorkspaces = index;
|
||||||
|
|
||||||
fWorkspace = NULL;
|
|
||||||
fWinBorder = NULL;
|
fWinBorder = NULL;
|
||||||
fTopLayer = NULL;
|
fTopLayer = NULL;
|
||||||
|
|
||||||
@@ -179,7 +174,7 @@ ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook,
|
|||||||
STRACE(("\tPort: %ld\n",fMessagePort));
|
STRACE(("\tPort: %ld\n",fMessagePort));
|
||||||
STRACE(("\tWorkspace: %ld\n",index));
|
STRACE(("\tWorkspace: %ld\n",index));
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
void ServerWindow::Init(void)
|
void ServerWindow::Init(void)
|
||||||
{
|
{
|
||||||
fWinBorder = new WinBorder( fFrame, fTitle.String(), fLook, fFeel, 0UL,
|
fWinBorder = new WinBorder( fFrame, fTitle.String(), fLook, fFeel, 0UL,
|
||||||
@@ -198,7 +193,7 @@ void ServerWindow::Init(void)
|
|||||||
if(fMonitorThreadID != B_NO_MORE_THREADS && fMonitorThreadID != B_NO_MEMORY)
|
if(fMonitorThreadID != B_NO_MORE_THREADS && fMonitorThreadID != B_NO_MEMORY)
|
||||||
resume_thread(fMonitorThreadID);
|
resume_thread(fMonitorThreadID);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
//!Tears down all connections with the user application, kills the monitoring thread.
|
//!Tears down all connections with the user application, kills the monitoring thread.
|
||||||
ServerWindow::~ServerWindow(void)
|
ServerWindow::~ServerWindow(void)
|
||||||
{
|
{
|
||||||
@@ -229,40 +224,28 @@ ServerWindow::~ServerWindow(void)
|
|||||||
desktop->fGeneralLock.Unlock();
|
desktop->fGeneralLock.Unlock();
|
||||||
STRACE(("#ServerWindow(%s) will exit NOW!!!\n", fTitle.String()));
|
STRACE(("#ServerWindow(%s) will exit NOW!!!\n", fTitle.String()));
|
||||||
}
|
}
|
||||||
|
//5700 - fara servo , fara cas
|
||||||
/*!
|
//6300 - 1,4
|
||||||
\brief Requests an update of the specified rectangle
|
//6700 - 1,6
|
||||||
\param rect The area to update, in the parent's coordinates
|
//7100 - 1,4
|
||||||
|
//7500 - 1,6
|
||||||
This could be considered equivalent to BView::Invalidate()
|
//------------------------------------------------------------------------------
|
||||||
*/
|
|
||||||
void ServerWindow::RequestDraw(BRect rect)
|
|
||||||
{
|
|
||||||
STRACE(("ServerWindow %s: Request Draw\n",fTitle.String()));
|
|
||||||
BMessage msg;
|
|
||||||
|
|
||||||
msg.what = _UPDATE_;
|
|
||||||
msg.AddRect("_rect", rect);
|
|
||||||
|
|
||||||
SendMessageToClient(&msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Requests an update for the entire window
|
|
||||||
void ServerWindow::RequestDraw(void)
|
|
||||||
{
|
|
||||||
RequestDraw(fFrame);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! 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())
|
||||||
|
debugger("you must lock a ServerWindow object before calling ::ReplaceDecorator()\n");
|
||||||
|
|
||||||
STRACE(("ServerWindow %s: Replace Decorator\n",fTitle.String()));
|
STRACE(("ServerWindow %s: Replace Decorator\n",fTitle.String()));
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
if (!IsLocked())
|
||||||
|
debugger("you must lock a ServerWindow object before calling ::Quit()\n");
|
||||||
|
|
||||||
STRACE(("ServerWindow %s: Quit\n",fTitle.String()));
|
STRACE(("ServerWindow %s: Quit\n",fTitle.String()));
|
||||||
BMessage msg;
|
BMessage msg;
|
||||||
|
|
||||||
@@ -270,10 +253,13 @@ void ServerWindow::Quit(void)
|
|||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
//! Shows the window's WinBorder
|
//! Shows the window's WinBorder
|
||||||
void ServerWindow::Show(void)
|
void ServerWindow::Show(void)
|
||||||
{
|
{
|
||||||
|
if (!IsLocked())
|
||||||
|
debugger("you must lock a ServerWindow object before calling ::Show()\n");
|
||||||
|
|
||||||
if(!fWinBorder->IsHidden())
|
if(!fWinBorder->IsHidden())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -345,10 +331,13 @@ void ServerWindow::Show(void)
|
|||||||
debugger("WARNING: NULL fWinBorder\n");
|
debugger("WARNING: NULL fWinBorder\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
//! Hides the window's WinBorder
|
//! Hides the window's WinBorder
|
||||||
void ServerWindow::Hide(void)
|
void ServerWindow::Hide(void)
|
||||||
{
|
{
|
||||||
|
if (!IsLocked())
|
||||||
|
debugger("you must lock a ServerWindow object before calling ::Hide()\n");
|
||||||
|
|
||||||
if(fWinBorder->IsHidden())
|
if(fWinBorder->IsHidden())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -391,19 +380,19 @@ void ServerWindow::Hide(void)
|
|||||||
STRACE(("ServerWindow(%s)::Hide() - General lock released\n", fWinBorder->GetName()));
|
STRACE(("ServerWindow(%s)::Hide() - General lock released\n", fWinBorder->GetName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*
|
/*
|
||||||
\brief Determines whether the window is hidden or not
|
\brief Determines whether the window is hidden or not
|
||||||
\return true if hidden, false if not
|
\return true if hidden, false if not
|
||||||
*/
|
*/
|
||||||
bool ServerWindow::IsHidden(void)
|
bool ServerWindow::IsHidden(void) const
|
||||||
{
|
{
|
||||||
if(fWinBorder)
|
if(fWinBorder)
|
||||||
return fWinBorder->IsHidden();
|
return fWinBorder->IsHidden();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
void ServerWindow::Minimize(bool status)
|
void ServerWindow::Minimize(bool status)
|
||||||
{
|
{
|
||||||
// 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
|
||||||
@@ -439,7 +428,7 @@ void ServerWindow::Minimize(bool 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)
|
||||||
{
|
{
|
||||||
@@ -447,34 +436,7 @@ void ServerWindow::Zoom(void)
|
|||||||
msg.what=B_ZOOM;
|
msg.what=B_ZOOM;
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
|
||||||
\brief Handles focus and redrawing when changing focus states
|
|
||||||
|
|
||||||
The ServerWindow is set to (in)active and its decorator is redrawn based on its active status
|
|
||||||
*/
|
|
||||||
void ServerWindow::SetFocus(bool value)
|
|
||||||
{
|
|
||||||
STRACE(("ServerWindow %s: Set Focus to %s - UNIMPLEMENTED\n",fTitle.String(),value?"true":"false"));
|
|
||||||
/*
|
|
||||||
if(fIsActive!=value)
|
|
||||||
{
|
|
||||||
fIsActive=value;
|
|
||||||
fWinBorder->SetFocus(value);
|
|
||||||
// fWinBorder->RequestDraw();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Determines whether or not the window is active
|
|
||||||
\return true if active, false if not
|
|
||||||
*/
|
|
||||||
bool ServerWindow::HasFocus(void)
|
|
||||||
{
|
|
||||||
return fIsActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Notifies window of workspace (de)activation
|
\brief Notifies window of workspace (de)activation
|
||||||
\param workspace Index of the workspace changed
|
\param workspace Index of the workspace changed
|
||||||
@@ -492,7 +454,7 @@ void ServerWindow::WorkspaceActivated(int32 workspace, bool active)
|
|||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
\brief Notifies window of a workspace switch
|
\brief Notifies window of a workspace switch
|
||||||
\param oldone index of the previous workspace
|
\param oldone index of the previous workspace
|
||||||
@@ -509,7 +471,7 @@ void ServerWindow::WorkspacesChanged(int32 oldone,int32 newone)
|
|||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
\brief Notifies window of a change in focus
|
\brief Notifies window of a change in focus
|
||||||
\param active New active status of the window
|
\param active New active status of the window
|
||||||
@@ -524,7 +486,7 @@ void ServerWindow::WindowActivated(bool active)
|
|||||||
|
|
||||||
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
|
||||||
@@ -541,27 +503,7 @@ void ServerWindow::ScreenModeChanged(const BRect frame, const color_space cspace
|
|||||||
|
|
||||||
SendMessageToClient(&msg);
|
SendMessageToClient(&msg);
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*
|
|
||||||
\brief Sets the frame size of the window
|
|
||||||
\rect New window size
|
|
||||||
*/
|
|
||||||
void ServerWindow::SetFrame(const BRect &rect)
|
|
||||||
{
|
|
||||||
STRACE(("ServerWindow %s: Set Frame to (%.1f,%.1f,%.1f,%.1f)\n",fTitle.String(),
|
|
||||||
rect.left,rect.top,rect.right,rect.bottom));
|
|
||||||
fFrame=rect;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Returns the frame of the window in screen coordinates
|
|
||||||
\return The frame of the window in screen coordinates
|
|
||||||
*/
|
|
||||||
BRect ServerWindow::Frame(void)
|
|
||||||
{
|
|
||||||
return fFrame;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\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
|
||||||
@@ -572,7 +514,7 @@ status_t ServerWindow::Lock(void)
|
|||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
@@ -580,22 +522,23 @@ void ServerWindow::Unlock(void)
|
|||||||
|
|
||||||
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)
|
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
|
||||||
*/
|
*/
|
||||||
void ServerWindow::SetLayerFontState(Layer *layer)
|
void ServerWindow::SetLayerFontState(Layer *layer)
|
||||||
{
|
{
|
||||||
|
// NOTE: no need to check for a lock. This is a private method.
|
||||||
uint16 mask;
|
uint16 mask;
|
||||||
|
|
||||||
fSession->ReadUInt16(&mask);
|
fSession->ReadUInt16(&mask);
|
||||||
@@ -661,9 +604,10 @@ void ServerWindow::SetLayerFontState(Layer *layer)
|
|||||||
STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_FONT_STATE: Layer: %s\n",
|
STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_FONT_STATE: Layer: %s\n",
|
||||||
fTitle.String(), layer->fName->String()));
|
fTitle.String(), layer->fName->String()));
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
void ServerWindow::SetLayerState(Layer *layer)
|
void ServerWindow::SetLayerState(Layer *layer)
|
||||||
{
|
{
|
||||||
|
// NOTE: no need to check for a lock. This is a private method.
|
||||||
rgb_color highColor, lowColor, viewColor;
|
rgb_color highColor, lowColor, viewColor;
|
||||||
pattern patt;
|
pattern patt;
|
||||||
int32 clipRegRects;
|
int32 clipRegRects;
|
||||||
@@ -716,9 +660,10 @@ void ServerWindow::SetLayerState(Layer *layer)
|
|||||||
STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_STATE: Layer: %s\n",fTitle.String(),
|
STRACE(("DONE: ServerWindow %s: Message AS_LAYER_SET_STATE: Layer: %s\n",fTitle.String(),
|
||||||
layer->fName->String()));
|
layer->fName->String()));
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
Layer * ServerWindow::CreateLayerTree(Layer *localRoot)
|
Layer * ServerWindow::CreateLayerTree(Layer *localRoot)
|
||||||
{
|
{
|
||||||
|
// NOTE: no need to check for a lock. This is a private method.
|
||||||
STRACE(("ServerWindow(%s)::CreateLayerTree()\n", fTitle.String()));
|
STRACE(("ServerWindow(%s)::CreateLayerTree()\n", fTitle.String()));
|
||||||
|
|
||||||
int32 token;
|
int32 token;
|
||||||
@@ -779,7 +724,7 @@ Layer * ServerWindow::CreateLayerTree(Layer *localRoot)
|
|||||||
|
|
||||||
return newLayer;
|
return newLayer;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
void ServerWindow::DispatchMessage(int32 code)
|
void ServerWindow::DispatchMessage(int32 code)
|
||||||
{
|
{
|
||||||
switch(code)
|
switch(code)
|
||||||
@@ -904,7 +849,7 @@ void ServerWindow::DispatchMessage(int32 code)
|
|||||||
|
|
||||||
if (!(newLayer->IsHidden())){
|
if (!(newLayer->IsHidden())){
|
||||||
// cl is the parent of newLayer, so this call is OK.
|
// cl is the parent of newLayer, so this call is OK.
|
||||||
cl->FullInvalidate(newLayer->fFull.Frame());
|
cl->FullInvalidate(BRegion(newLayer->fFull));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -1715,7 +1660,7 @@ void ServerWindow::DispatchMessage(int32 code)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
\brief Iterator for graphics update messages
|
\brief Iterator for graphics update messages
|
||||||
\param msgsize Size of the buffer containing the graphics messages
|
\param msgsize Size of the buffer containing the graphics messages
|
||||||
@@ -2260,7 +2205,7 @@ void ServerWindow::DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
\brief Message-dispatching loop for the ServerWindow
|
\brief Message-dispatching loop for the ServerWindow
|
||||||
|
|
||||||
@@ -2277,19 +2222,20 @@ int32 ServerWindow::MonitorWin(void *data)
|
|||||||
|
|
||||||
while(!quitting)
|
while(!quitting)
|
||||||
{
|
{
|
||||||
|
code = AS_CLIENT_DEAD;
|
||||||
ses->ReadInt32(&code);
|
ses->ReadInt32(&code);
|
||||||
|
|
||||||
|
win->Lock();
|
||||||
|
|
||||||
switch(code)
|
switch(code)
|
||||||
{
|
{
|
||||||
case 0:
|
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' message code\n",win->Title()));
|
||||||
// TODO: A message code should *never* be 0. The source sending this message
|
|
||||||
// needs to be changed to something like AS_CLIENT_DEAD or something.
|
|
||||||
|
|
||||||
STRACE(("ServerWindow %s received '0' message code\n",win->Title()));
|
|
||||||
quitting = true;
|
quitting = true;
|
||||||
|
// TODO: this is not that simple. Desktop Class should delete a window.
|
||||||
|
// something like: Desktop::DeleteWindow(thisWindow).
|
||||||
delete win;
|
delete win;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2317,47 +2263,17 @@ int32 ServerWindow::MonitorWin(void *data)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
win->Unlock();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
/*!
|
|
||||||
\brief Send a message to the ServerWindow
|
|
||||||
\param code ID code of the message to post
|
|
||||||
\param size size of the data buffer
|
|
||||||
\param buffer Any attached data
|
|
||||||
*/
|
|
||||||
void ServerWindow::PostMessage(int32 code, size_t size, int8 *buffer)
|
|
||||||
{
|
|
||||||
write_port(fMessagePort,code, buffer, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Returns the Workspace object to which the window belongs
|
|
||||||
|
|
||||||
If the window belongs to all workspaces, it returns the current workspace
|
|
||||||
*/
|
|
||||||
Workspace *ServerWindow::GetWorkspace(void)
|
|
||||||
{
|
|
||||||
//TODO: resolve
|
|
||||||
if(fWorkspaces==B_ALL_WORKSPACES)
|
|
||||||
return NULL;//fWorkspaces->GetScreen()->GetActiveWorkspace();
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Assign the window to a particular workspace object
|
|
||||||
\param The ServerWindow's new workspace
|
|
||||||
*/
|
|
||||||
void ServerWindow::SetWorkspace(Workspace *wkspc)
|
|
||||||
{
|
|
||||||
STRACE(("ServerWindow %s: Set Workspace\n",fTitle.String()));
|
|
||||||
fWorkspace=wkspc;
|
|
||||||
}
|
|
||||||
|
|
||||||
Layer* ServerWindow::FindLayer(const Layer* start, int32 token) const
|
Layer* ServerWindow::FindLayer(const Layer* start, int32 token) const
|
||||||
{
|
{
|
||||||
|
if (!IsLocked())
|
||||||
|
debugger("you must lock a ServerWindow object before calling ::FindLayer()\n");
|
||||||
|
|
||||||
if(!start)
|
if(!start)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -2404,9 +2320,12 @@ Layer* ServerWindow::FindLayer(const Layer* start, int32 token) const
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
void ServerWindow::SendMessageToClient(const BMessage* msg) const
|
void ServerWindow::SendMessageToClient(const BMessage* msg) const
|
||||||
{
|
{
|
||||||
|
if (!IsLocked())
|
||||||
|
debugger("you must lock a ServerWindow object before calling ::SendMessageToClient()\n");
|
||||||
|
|
||||||
ssize_t size;
|
ssize_t size;
|
||||||
char *buffer;
|
char *buffer;
|
||||||
|
|
||||||
@@ -2420,26 +2339,5 @@ void ServerWindow::SendMessageToClient(const BMessage* msg) const
|
|||||||
|
|
||||||
delete buffer;
|
delete buffer;
|
||||||
}
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
/*!
|
|
||||||
\brief Handles window activation stuff. Called by Desktop functions
|
|
||||||
*/
|
|
||||||
void ActivateWindow(ServerWindow *oldwin,ServerWindow *newwin)
|
|
||||||
{
|
|
||||||
STRACE(("ActivateWindow: old=%s, new=%s\n",oldwin?oldwin->Title():"NULL",newwin?newwin->Title():"NULL"));
|
|
||||||
if(oldwin==newwin)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if(oldwin)
|
|
||||||
oldwin->SetFocus(false);
|
|
||||||
|
|
||||||
if(newwin)
|
|
||||||
newwin->SetFocus(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@log
|
|
||||||
*added handlers for AS_LAYER_(MOVE/RESIZE)TO messages
|
|
||||||
*added AS_LAYER_GET_COORD handler
|
|
||||||
*changed some methods to use BMessage class for sending messages to BWindow
|
|
||||||
*/
|
|
||||||
|
|||||||
@@ -71,67 +71,67 @@ public:
|
|||||||
virtual ~ServerWindow(void);
|
virtual ~ServerWindow(void);
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
// ServerWindow must be locked for these ones.
|
||||||
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);
|
|
||||||
|
// methods for sending various messages to client.
|
||||||
|
bool IsHidden(void) const;
|
||||||
void Minimize(bool status);
|
void Minimize(bool status);
|
||||||
void Zoom(void);
|
void Zoom(void);
|
||||||
void SetFocus(bool value);
|
|
||||||
bool HasFocus(void);
|
|
||||||
void RequestDraw(BRect rect);
|
|
||||||
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);
|
|
||||||
BRect Frame(void);
|
|
||||||
|
|
||||||
status_t Lock(void);
|
status_t Lock(void);
|
||||||
void Unlock(void);
|
void Unlock(void);
|
||||||
bool IsLocked(void);
|
bool IsLocked(void) const;
|
||||||
thread_id ThreadID(void) const { return fMonitorThreadID;}
|
|
||||||
|
|
||||||
void DispatchMessage(int32 code);
|
|
||||||
void DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer);
|
|
||||||
static int32 MonitorWin(void *data);
|
|
||||||
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);
|
|
||||||
void SetWorkspace(Workspace *wkspc);
|
// util methods.
|
||||||
|
|
||||||
//! Returns the window's title
|
|
||||||
const char *Title(void) { return fTitle.String(); }
|
|
||||||
|
|
||||||
Layer *CreateLayerTree(Layer *localRoot);
|
|
||||||
void SetLayerState(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;
|
||||||
|
|
||||||
|
// a few, not that important methods returning some internal settings.
|
||||||
int32 Look(void) const { return fLook; }
|
int32 Look(void) const { return fLook; }
|
||||||
int32 Feel(void) const { return fFeel; }
|
int32 Feel(void) const { return fFeel; }
|
||||||
uint32 Flags(void) const { return fFlags; }
|
uint32 Flags(void) const { return fFlags; }
|
||||||
team_id ClientTeamID(void) const { return fClientTeamID; }
|
|
||||||
ServerApp *App(void) const { return fServerApp; }
|
|
||||||
uint32 Workspaces(void) const { return fWorkspaces; }
|
uint32 Workspaces(void) const { return fWorkspaces; }
|
||||||
|
|
||||||
|
// to who we belong. who do we own. our title.
|
||||||
|
ServerApp *App(void) const { return fServerApp; }
|
||||||
WinBorder *GetWinBorder(void) const { return fWinBorder; }
|
WinBorder *GetWinBorder(void) const { return fWinBorder; }
|
||||||
|
const char *Title(void) const { return fTitle.String(); }
|
||||||
// server "private" - try not to use
|
|
||||||
|
// related thread/team_id(s).
|
||||||
|
team_id ClientTeamID(void) const { return fClientTeamID; }
|
||||||
|
thread_id ThreadID(void) const { return fMonitorThreadID;}
|
||||||
|
|
||||||
|
// server "private" - try not to use.
|
||||||
void QuietlySetWorkspaces(uint32 wks) { fWorkspaces = wks; }
|
void QuietlySetWorkspaces(uint32 wks) { fWorkspaces = wks; }
|
||||||
void QuietlySetFeel(int32 feel) { fFeel = feel; }
|
void QuietlySetFeel(int32 feel) { fFeel = feel; }
|
||||||
int32 ClientToken(void) const { return fHandlerToken; }
|
int32 ClientToken(void) const { return fHandlerToken; }
|
||||||
|
|
||||||
FMWList fWinFMWList;
|
FMWList fWinFMWList;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// methods for retrieving and creating a tree strcture of Layers.
|
||||||
|
Layer *CreateLayerTree(Layer *localRoot);
|
||||||
|
void SetLayerState(Layer *layer);
|
||||||
|
void SetLayerFontState(Layer *layer);
|
||||||
|
|
||||||
|
// message handle methods.
|
||||||
|
void DispatchMessage(int32 code);
|
||||||
|
void DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer);
|
||||||
|
static int32 MonitorWin(void *data);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class ServerApp;
|
friend class ServerApp;
|
||||||
friend class WinBorder;
|
friend class WinBorder;
|
||||||
@@ -143,8 +143,6 @@ protected:
|
|||||||
int32 fFeel;
|
int32 fFeel;
|
||||||
int32 fFlags;
|
int32 fFlags;
|
||||||
uint32 fWorkspaces;
|
uint32 fWorkspaces;
|
||||||
Workspace *fWorkspace;
|
|
||||||
bool fIsActive;
|
|
||||||
|
|
||||||
ServerApp *fServerApp;
|
ServerApp *fServerApp;
|
||||||
WinBorder *fWinBorder;
|
WinBorder *fWinBorder;
|
||||||
|
|||||||
Reference in New Issue
Block a user