Applied our coding style. Theoretically improved return values.
Data() now enters the debugger as well if called in unlocked state. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8191 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+194
-166
@@ -43,212 +43,240 @@ BClipboard *be_clipboard;
|
||||
|
||||
BClipboard::BClipboard(const char *name, bool transient)
|
||||
{
|
||||
if ( name )
|
||||
fName = strdup(name);
|
||||
else
|
||||
fName = strdup("system");
|
||||
fData = new BMessage();
|
||||
fCount = 0;
|
||||
fSystemCount = 0;
|
||||
if (name != NULL)
|
||||
fName = strdup(name);
|
||||
else
|
||||
fName = strdup("system");
|
||||
|
||||
BMessage message(B_REG_GET_CLIPBOARD_MESSENGER), reply;
|
||||
if ( (BRoster::Private().SendTo(&message, &reply, false) == B_OK) &&
|
||||
(reply.what == B_REG_SUCCESS) &&
|
||||
(reply.FindMessenger("messenger",&fClipHandler) == B_OK) )
|
||||
{
|
||||
BMessage handlerMessage(B_REG_ADD_CLIPBOARD), handlerReply;
|
||||
int32 result;
|
||||
if ( (handlerMessage.AddString("name",fName) == B_OK) &&
|
||||
(fClipHandler.SendMessage(&handlerMessage, &handlerReply) == B_OK) )
|
||||
handlerReply.FindInt32("result",&result);
|
||||
}
|
||||
fData = new BMessage();
|
||||
fCount = 0;
|
||||
fSystemCount = 0;
|
||||
|
||||
BMessage message(B_REG_GET_CLIPBOARD_MESSENGER), reply;
|
||||
if (BRoster::Private().SendTo(&message, &reply, false) == B_OK
|
||||
&& reply.what == B_REG_SUCCESS
|
||||
&& reply.FindMessenger("messenger", &fClipHandler) == B_OK) {
|
||||
BMessage handlerMessage(B_REG_ADD_CLIPBOARD), handlerReply;
|
||||
int32 result;
|
||||
if (handlerMessage.AddString("name", fName) == B_OK
|
||||
&& fClipHandler.SendMessage(&handlerMessage, &handlerReply) == B_OK)
|
||||
handlerReply.FindInt32("result", &result);
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
BClipboard::~BClipboard()
|
||||
{
|
||||
free(fName);
|
||||
delete fData;
|
||||
free(fName);
|
||||
delete fData;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
const char* BClipboard::Name() const
|
||||
{
|
||||
return (const char*)fName;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
uint32 BClipboard::LocalCount() const
|
||||
{
|
||||
/* fSystemCount contains the total number of writes to the clipboard.
|
||||
fCount contains the number of writes to the clipboard done by this
|
||||
BClipboard.
|
||||
*/
|
||||
return fSystemCount;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
uint32 BClipboard::SystemCount() const
|
||||
{
|
||||
int32 val;
|
||||
BMessage message(B_REG_GET_CLIPBOARD_COUNT), reply;
|
||||
if ( (message.AddString("name",fName) == B_OK) &&
|
||||
(fClipHandler.SendMessage(&message, &reply) == B_OK) &&
|
||||
(reply.FindInt32("count",&val) == B_OK) )
|
||||
return (uint32)val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::StartWatching(BMessenger target)
|
||||
{
|
||||
BMessage message(B_REG_CLIPBOARD_START_WATCHING), reply;
|
||||
if ( (message.AddString("name",fName) == B_OK) &&
|
||||
(message.AddMessenger("target", target ) == B_OK) &&
|
||||
(fClipHandler.SendMessage(&message, &reply) == B_OK) )
|
||||
{
|
||||
int32 result;
|
||||
reply.FindInt32("result",&result);
|
||||
return result;
|
||||
}
|
||||
return B_ERROR;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::StopWatching(BMessenger target)
|
||||
{
|
||||
BMessage message(B_REG_CLIPBOARD_STOP_WATCHING), reply;
|
||||
if ( (message.AddString("name",fName) == B_OK) &&
|
||||
(message.AddMessenger("target", target ) == B_OK) &&
|
||||
(fClipHandler.SendMessage(&message, &reply) == B_OK) )
|
||||
{
|
||||
int32 result;
|
||||
reply.FindInt32("result",&result);
|
||||
return result;
|
||||
}
|
||||
return B_ERROR;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
bool BClipboard::Lock()
|
||||
{
|
||||
/* Will this work correctly if clipboard is deleted while still waiting on
|
||||
fLock.Lock() ? */
|
||||
bool retVal;
|
||||
retVal = fLock.Lock();
|
||||
if ( retVal &&
|
||||
(DownloadFromSystem() != B_OK) )
|
||||
{
|
||||
retVal = false;
|
||||
fLock.Unlock();
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void BClipboard::Unlock()
|
||||
const char *
|
||||
BClipboard::Name() const
|
||||
{
|
||||
fLock.Unlock();
|
||||
return (const char *)fName;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
bool BClipboard::IsLocked() const
|
||||
|
||||
|
||||
uint32
|
||||
BClipboard::LocalCount() const
|
||||
{
|
||||
return fLock.IsLocked();
|
||||
/* fSystemCount contains the total number of writes to the clipboard.
|
||||
* fCount contains the number of writes to the clipboard done by this
|
||||
* BClipboard.
|
||||
*/
|
||||
return fSystemCount;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::Clear()
|
||||
|
||||
|
||||
uint32
|
||||
BClipboard::SystemCount() const
|
||||
{
|
||||
if ( AssertLocked() &&
|
||||
(fData->MakeEmpty() == B_OK) )
|
||||
return B_OK;
|
||||
return B_ERROR;
|
||||
int32 value;
|
||||
BMessage message(B_REG_GET_CLIPBOARD_COUNT), reply;
|
||||
if (message.AddString("name", fName) == B_OK
|
||||
&& fClipHandler.SendMessage(&message, &reply) == B_OK
|
||||
&& reply.FindInt32("count", &value) == B_OK)
|
||||
return (uint32)value;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::Commit()
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::StartWatching(BMessenger target)
|
||||
{
|
||||
if ( AssertLocked() &&
|
||||
(UploadToSystem() == B_OK) )
|
||||
return B_OK;
|
||||
return B_ERROR;
|
||||
BMessage message(B_REG_CLIPBOARD_START_WATCHING), reply;
|
||||
if (message.AddString("name", fName) == B_OK
|
||||
&& message.AddMessenger("target", target) == B_OK
|
||||
&& fClipHandler.SendMessage(&message, &reply) == B_OK) {
|
||||
int32 result;
|
||||
reply.FindInt32("result", &result);
|
||||
return result;
|
||||
}
|
||||
return B_ERROR;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::Revert()
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::StopWatching(BMessenger target)
|
||||
{
|
||||
if ( AssertLocked() &&
|
||||
(fData->MakeEmpty() == B_OK) &&
|
||||
(DownloadFromSystem() == B_OK) )
|
||||
return B_OK;
|
||||
return B_ERROR;
|
||||
BMessage message(B_REG_CLIPBOARD_STOP_WATCHING), reply;
|
||||
if (message.AddString("name", fName) == B_OK
|
||||
&& message.AddMessenger("target", target) == B_OK
|
||||
&& fClipHandler.SendMessage(&message, &reply) == B_OK) {
|
||||
int32 result;
|
||||
reply.FindInt32("result", &result);
|
||||
return result;
|
||||
}
|
||||
return B_ERROR;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
BMessenger BClipboard::DataSource() const
|
||||
|
||||
|
||||
bool
|
||||
BClipboard::Lock()
|
||||
{
|
||||
return fDataSource;
|
||||
// Will this work correctly if clipboard is deleted while still waiting on
|
||||
// fLock.Lock() ?
|
||||
bool locked = fLock.Lock();
|
||||
if (locked && DownloadFromSystem() != B_OK) {
|
||||
locked = false;
|
||||
fLock.Unlock();
|
||||
}
|
||||
|
||||
return locked;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
BMessage* BClipboard::Data() const
|
||||
|
||||
|
||||
void
|
||||
BClipboard::Unlock()
|
||||
{
|
||||
if ( IsLocked() )
|
||||
fLock.Unlock();
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
BClipboard::IsLocked() const
|
||||
{
|
||||
return fLock.IsLocked();
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::Clear()
|
||||
{
|
||||
if (!AssertLocked())
|
||||
return B_NOT_ALLOWED;
|
||||
|
||||
return fData->MakeEmpty();
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::Commit()
|
||||
{
|
||||
if (!AssertLocked())
|
||||
return B_NOT_ALLOWED;
|
||||
|
||||
return UploadToSystem();
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::Revert()
|
||||
{
|
||||
if (!AssertLocked())
|
||||
return B_NOT_ALLOWED;
|
||||
|
||||
status_t status = fData->MakeEmpty();
|
||||
if (status == B_OK)
|
||||
status = DownloadFromSystem();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
BMessenger
|
||||
BClipboard::DataSource() const
|
||||
{
|
||||
return fDataSource;
|
||||
}
|
||||
|
||||
|
||||
BMessage *
|
||||
BClipboard::Data() const
|
||||
{
|
||||
if (!AssertLocked())
|
||||
return NULL;
|
||||
|
||||
return fData;
|
||||
return NULL;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
// Private methods
|
||||
|
||||
|
||||
BClipboard::BClipboard(const BClipboard &)
|
||||
{
|
||||
/* This is private, and I don't use it, so I'm not going to implement it */
|
||||
// This is private, and I don't use it, so I'm not going to implement it
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
BClipboard & BClipboard::operator=(const BClipboard &)
|
||||
{
|
||||
/* This is private, and I don't use it, so I'm not going to implement it */
|
||||
// This is private, and I don't use it, so I'm not going to implement it
|
||||
return *this;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void BClipboard::_ReservedClipboard1()
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void BClipboard::_ReservedClipboard2()
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void BClipboard::_ReservedClipboard3()
|
||||
{
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
bool BClipboard::AssertLocked() const
|
||||
|
||||
|
||||
void BClipboard::_ReservedClipboard1() {}
|
||||
void BClipboard::_ReservedClipboard2() {}
|
||||
void BClipboard::_ReservedClipboard3() {}
|
||||
|
||||
|
||||
bool
|
||||
BClipboard::AssertLocked() const
|
||||
{
|
||||
// This function is for jumping to the debugger if not locked
|
||||
if(!fLock.IsLocked())
|
||||
{
|
||||
if (!fLock.IsLocked()) {
|
||||
debugger("The clipboard must be locked before proceeding.");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::DownloadFromSystem(bool force)
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::DownloadFromSystem(bool force)
|
||||
{
|
||||
// Apparently, the force paramater was used in some sort of
|
||||
// optimization in R5. Currently, we ignore it.
|
||||
BMessage message(B_REG_DOWNLOAD_CLIPBOARD), reply;
|
||||
if ( (message.AddString("name",fName) == B_OK) &&
|
||||
(fClipHandler.SendMessage(&message, &reply) == B_OK) &&
|
||||
(reply.FindMessage("data",fData) == B_OK) &&
|
||||
(reply.FindMessenger("data source",&fDataSource) == B_OK) &&
|
||||
(reply.FindInt32("count",(int32 *)(&fSystemCount)) == B_OK) )
|
||||
return B_OK;
|
||||
return B_ERROR;
|
||||
BMessage message(B_REG_DOWNLOAD_CLIPBOARD), reply;
|
||||
if (message.AddString("name", fName) == B_OK
|
||||
&& fClipHandler.SendMessage(&message, &reply) == B_OK
|
||||
&& reply.FindMessage("data", fData) == B_OK
|
||||
&& reply.FindMessenger("data source", &fDataSource) == B_OK
|
||||
&& reply.FindInt32("count", (int32 *)&fSystemCount) == B_OK)
|
||||
return B_OK;
|
||||
|
||||
return B_ERROR;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
status_t BClipboard::UploadToSystem()
|
||||
|
||||
|
||||
status_t
|
||||
BClipboard::UploadToSystem()
|
||||
{
|
||||
BMessage message(B_REG_UPLOAD_CLIPBOARD), reply;
|
||||
if ( (message.AddString("name",fName) == B_OK) &&
|
||||
(message.AddMessage("data",fData) == B_OK) &&
|
||||
(message.AddMessenger("data source", be_app_messenger ) == B_OK) &&
|
||||
(fClipHandler.SendMessage(&message, &reply) == B_OK) &&
|
||||
(reply.FindInt32("count",(int32 *)(&fSystemCount)) == B_OK) )
|
||||
{
|
||||
fCount++;
|
||||
return B_OK;
|
||||
}
|
||||
return B_ERROR;
|
||||
BMessage message(B_REG_UPLOAD_CLIPBOARD), reply;
|
||||
if (message.AddString("name", fName) == B_OK
|
||||
&& message.AddMessage("data", fData) == B_OK
|
||||
&& message.AddMessenger("data source", be_app_messenger) == B_OK
|
||||
&& fClipHandler.SendMessage(&message, &reply) == B_OK
|
||||
&& reply.FindInt32("count", (int32 *)&fSystemCount) == B_OK) {
|
||||
fCount++;
|
||||
return B_OK;
|
||||
}
|
||||
return B_ERROR;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user