You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.0 KiB
133 lines
3.0 KiB
#include <kuserprofile.h>
|
|
#include <ktrader.h>
|
|
#include <kservice.h>
|
|
#include <kmimetype.h>
|
|
#include <assert.h>
|
|
#include <kstandarddirs.h>
|
|
#include <kservicegroup.h>
|
|
#include <kimageio.h>
|
|
#include <kprotocolinfo.h>
|
|
#include <kprocess.h>
|
|
#include <qtimer.h>
|
|
|
|
#include "kdcopcheck.h"
|
|
#include <dcopclient.h>
|
|
|
|
#include <kapplication.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
void debug(QString txt)
|
|
{
|
|
fprintf(stderr, "%s\n", txt.ascii());
|
|
}
|
|
|
|
void debug(const char *txt)
|
|
{
|
|
fprintf(stderr, "%s\n", txt);
|
|
}
|
|
void debug(const char *format, const char *txt)
|
|
{
|
|
fprintf(stderr, format, txt);
|
|
fprintf(stderr, "\n");
|
|
}
|
|
|
|
TestService::TestService(const QString &exec)
|
|
{
|
|
m_exec = exec;
|
|
proc << exec;
|
|
|
|
proc.start();
|
|
|
|
connect(kapp->dcopClient(), SIGNAL( applicationRegistered(const QCString&)),
|
|
this, SLOT(newApp(const QCString&)));
|
|
connect(kapp->dcopClient(), SIGNAL( applicationRemoved(const QCString&)),
|
|
this, SLOT(endApp(const QCString&)));
|
|
connect(&proc, SIGNAL(processExited(KProcess *)),
|
|
this, SLOT(appExit()));
|
|
|
|
QTimer::singleShot(20*1000, this, SLOT(stop()));
|
|
result = KService::DCOP_None;
|
|
}
|
|
|
|
void TestService::newApp(const QCString &appId)
|
|
{
|
|
QString id = appId;
|
|
if (id == m_exec)
|
|
{
|
|
result = KService::DCOP_Unique;
|
|
stop();
|
|
}
|
|
else if (id.startsWith(m_exec))
|
|
{
|
|
result = KService::DCOP_Multi;
|
|
stop();
|
|
}
|
|
qWarning("Register %s", appId.data());
|
|
}
|
|
|
|
void TestService::endApp(const QCString &appId)
|
|
{
|
|
qWarning("Unegister %s", appId.data());
|
|
}
|
|
|
|
void TestService::appExit()
|
|
{
|
|
qWarning("Exit");
|
|
}
|
|
|
|
void TestService::stop()
|
|
{
|
|
kapp->exit_loop();
|
|
}
|
|
|
|
int TestService::exec()
|
|
{
|
|
kapp->enter_loop();
|
|
return result;
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
putenv("IGNORE_SYCOCA_VERSION=true");
|
|
KApplication k(argc,argv,"whatever",false/*noGUI*/); // KMessageBox needs KApp for makeStdCaption
|
|
|
|
k.dcopClient()->setNotifications(true);
|
|
|
|
KService::List list = KService::allServices();
|
|
|
|
qWarning("I found %d services.", list.count());
|
|
int i = 0;
|
|
for(KService::List::ConstIterator it = list.begin(); it != list.end(); ++it)
|
|
{
|
|
if (((*it)->DCOPServiceType() == KService::DCOP_None) &&
|
|
!(*it)->desktopEntryPath().startsWith("SuSE") &&
|
|
(*it)->hasServiceType("Application"))
|
|
{
|
|
if ((*it)->exec().startsWith((*it)->desktopEntryName()))
|
|
{
|
|
i++;
|
|
|
|
TestService *test = new TestService((*it)->desktopEntryName());
|
|
int n = test->exec();
|
|
delete test;
|
|
|
|
QString result;
|
|
if (n == KService::DCOP_None)
|
|
result = "None";
|
|
else if (n == KService::DCOP_Unique)
|
|
result = "Unique";
|
|
else if (n == KService::DCOP_Multi)
|
|
result = "Multi";
|
|
|
|
qWarning("%s %s", (*it)->desktopEntryPath().latin1(),
|
|
result.latin1());
|
|
}
|
|
}
|
|
}
|
|
qWarning("%d left after filtering.", i);
|
|
}
|
|
|
|
#include "kdcopcheck.moc"
|