Fix compositing manager detection

Add advanced option to allow a DCOP call to bypass the local call-->send translation shortcut
pull/16/head
Timothy Pearson 10 years ago
parent 41b8113879
commit 9ea35022d2

@ -1737,31 +1737,39 @@ bool DCOPClient::call(const TQCString &remApp, const TQCString &remObjId,
TQCString& replyType, TQByteArray &replyData, TQCString& replyType, TQByteArray &replyData,
bool useEventLoop) bool useEventLoop)
{ {
return call( remApp, remObjId, remFun, data, replyType, replyData, useEventLoop, -1 ); return call( remApp, remObjId, remFun, data, replyType, replyData, useEventLoop, -1, false );
} }
bool DCOPClient::call(const TQCString &remApp, const TQCString &remObjId, bool DCOPClient::call(const TQCString &remApp, const TQCString &remObjId,
const TQCString &remFun, const TQByteArray &data, const TQCString &remFun, const TQByteArray &data,
TQCString& replyType, TQByteArray &replyData, TQCString& replyType, TQByteArray &replyData,
bool useEventLoop, int timeout) bool useEventLoop, int timeout)
{
return call( remApp, remObjId, remFun, data, replyType, replyData, useEventLoop, timeout, false );
}
bool DCOPClient::call(const TQCString &remApp, const TQCString &remObjId,
const TQCString &remFun, const TQByteArray &data,
TQCString& replyType, TQByteArray &replyData,
bool useEventLoop, int timeout, bool forceRemote)
{ {
if (remApp.isEmpty()) if (remApp.isEmpty())
return false; return false;
DCOPClient *localClient = findLocalClient( remApp ); DCOPClient *localClient = findLocalClient( remApp );
if ( localClient ) { if ( localClient && !forceRemote ) {
bool saveTransaction = d->transaction; bool saveTransaction = d->transaction;
TQ_INT32 saveTransactionId = d->transactionId; TQ_INT32 saveTransactionId = d->transactionId;
TQCString saveSenderId = d->senderId; TQCString saveSenderId = d->senderId;
d->senderId = 0; // Local call d->senderId = 0; // Local call
bool b = localClient->receive( remApp, remObjId, remFun, data, replyType, replyData ); bool b = localClient->receive( remApp, remObjId, remFun, data, replyType, replyData );
TQ_INT32 id = localClient->transactionId(); TQ_INT32 id = localClient->transactionId();
if (id) { if (id) {
// Call delayed. We have to wait till it has been processed. // Call delayed. We have to wait till it has been processed.
do { do {
TQApplication::eventLoop()->processEvents( TQEventLoop::WaitForMore); TQApplication::eventLoop()->processEvents(TQEventLoop::WaitForMore);
} while( !localClient->isLocalTransactionFinished(id, replyType, replyData)); } while( !localClient->isLocalTransactionFinished(id, replyType, replyData));
b = true; b = true;
} }

@ -292,12 +292,25 @@ class DCOP_EXPORT DCOPClient : public TQObject
* @param useEventLoop if true the event loop will be started when * @param useEventLoop if true the event loop will be started when
* the call blocks too long * the call blocks too long
* @param timeout timeout for the call in miliseconds, or -1 for no timeout * @param timeout timeout for the call in miliseconds, or -1 for no timeout
* @param forceRemote if set do not allow calls within the current application
* to bypass the remote call mechanism
* @return true if successful, false otherwise * @return true if successful, false otherwise
* *
* @since 3.2 * @since 3.2
* *
* @see send() * @see send()
*/ */
bool call(const TQCString &remApp, const TQCString &remObj,
const TQCString &remFun, const TQByteArray &data,
TQCString& replyType, TQByteArray &replyData,
bool useEventLoop/*=false*/, int timeout/*=-1*/,
bool forceRemote/*=false*/);
/**
* @deprecated
*/
// KDE4 merge with above
bool call(const TQCString &remApp, const TQCString &remObj, bool call(const TQCString &remApp, const TQCString &remObj,
const TQCString &remFun, const TQByteArray &data, const TQCString &remFun, const TQByteArray &data,
TQCString& replyType, TQByteArray &replyData, TQCString& replyType, TQByteArray &replyData,

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2011 Timothy Pearson <kb9vqf@pearsoncomputing.net> * * Copyright (C) 2011-2014 Timothy Pearson <kb9vqf@pearsoncomputing.net> *
* * * *
* This program is free software; you can redistribute it and/or modify * * This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by * * it under the terms of the GNU General Public License as published by *
@ -44,7 +44,7 @@ static TDECmdLineOptions options[] =
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
TDEAboutData about("kdetcompmgr", I18N_NOOP("kdetcompmgr"), version, description, TDEAboutData about("kdetcompmgr", I18N_NOOP("kdetcompmgr"), version, description,
TDEAboutData::License_GPL, "(C) 2011 Timothy Pearson", 0, 0, "kb9vqf@pearsoncomputing.net"); TDEAboutData::License_GPL, "(C) 2011-2014 Timothy Pearson", 0, 0, "kb9vqf@pearsoncomputing.net");
about.addAuthor( "Timothy Pearson", 0, "kb9vqf@pearsoncomputing.net" ); about.addAuthor( "Timothy Pearson", 0, "kb9vqf@pearsoncomputing.net" );
TDECmdLineArgs::init(argc, argv, &about); TDECmdLineArgs::init(argc, argv, &about);
TDECmdLineArgs::addCmdLineOptions( options ); TDECmdLineArgs::addCmdLineOptions( options );
@ -54,21 +54,19 @@ int main(int argc, char **argv)
TDEConfig config("twinrc", true); TDEConfig config("twinrc", true);
config.setGroup( "Notification Messages" ); config.setGroup( "Notification Messages" );
if (!config.readBoolEntry("UseTranslucency",false)) { if (!config.readBoolEntry("UseTranslucency",false)) {
// Attempt to load the kompmgr pid file // Attempt to load the compton-tde pid file
const char *home;
struct passwd *p;
p = getpwuid(getuid());
if (p)
home = p->pw_dir;
else
home = getenv("HOME");
char *filename; char *filename;
const char *configfile = "/.kompmgr.pid"; const char *pidfile = "compton-tde.pid";
int n = strlen(home)+strlen(configfile)+1; char uidstr[sizeof(uid_t)*8+1];
filename = (char*)malloc(n*sizeof(char)); sprintf(uidstr, "%d", getuid());
int n = strlen(P_tmpdir)+strlen(uidstr)+strlen(pidfile)+3;
filename = (char*)malloc(n*sizeof(char)+1);
memset(filename,0,n); memset(filename,0,n);
strcat(filename, home); strcat(filename, P_tmpdir);
strcat(filename, configfile); strcat(filename, "/.");
strcat(filename, uidstr);
strcat(filename, "-");
strcat(filename, pidfile);
// Now that we did all that by way of introduction...read the file! // Now that we did all that by way of introduction...read the file!
FILE *pFile; FILE *pFile;
@ -76,7 +74,7 @@ int main(int argc, char **argv)
pFile = fopen(filename, "r"); pFile = fopen(filename, "r");
int kompmgrpid = 0; int kompmgrpid = 0;
if (pFile) { if (pFile) {
printf("[kdetcompmgr] Using '%s' as kompmgr pidfile\n", filename); printf("[kdetcompmgr] Using '%s' as compton-tde pidfile\n", filename);
// obtain file size // obtain file size
fseek (pFile , 0 , SEEK_END); fseek (pFile , 0 , SEEK_END);
unsigned long lSize = ftell (pFile); unsigned long lSize = ftell (pFile);

Loading…
Cancel
Save