int KPrinterImpl::dcopPrint(const TQString& cmd, const TQStringList& files, bool removeflag) { kdDebug(500) << "tdeprint: print command: " << cmd << endl; int result = 0; DCOPClient *dclient = kapp->dcopClient(); if (!dclient || (!dclient->isAttached() && !dclient->attach())) { return result; } TQByteArray data, replyData; TQCString replyType; TQDataStream arg( data, IO_WriteOnly ); arg << cmd; arg << files; arg << removeflag; if (dclient->call( "kded", "tdeprintd", "print(TQString,TQStringList,bool)", data, replyType, replyData )) { if (replyType == "int") { TQDataStream _reply_stream( replyData, IO_ReadOnly ); _reply_stream >> result; } }
int main(int argc, char **argv) { bool ok; KApplication app(argc, argv, "kmobile_client", false); // get our DCOP client and attach so that we may use it DCOPClient *client = app.dcopClient(); client->attach(); QByteArray data; QDataStream ds(data, IO_WriteOnly); // ds << QString("a"); QCString replyType; QByteArray replyData; ok = client->call("kmobile", "kmobileIface", "deviceNames()", data, replyType, replyData); QDataStream reply(replyData, IO_ReadOnly); QStringList deviceNames; reply >> deviceNames; kdDebug() << QString("%1\n").arg(ok?"Ok":"Failure"); kdDebug() << QString("Number of currently registered drivers: %1\n").arg(deviceNames.count()); for (int i=0; i<deviceNames.count(); i++) kdDebug() << QString("Device %1: %2\n").arg(i+1).arg(deviceNames[i]); // return app.exec(); }
void Style::testStyle() { // Read entire XML into DOM Tree QFile file(selectedStyle); file.open(IO_ReadOnly); dom.setContent(file.readAll()); file.close(); // attach to dcop DCOPClient *client = kapp->dcopClient(); if (!client->isAttached()) client->attach(); // kicker settings KConfig *kickerConf = new KConfig("kickerrc"); kickerConf->setGroup("General"); QDomElement Kicker = dom.elementsByTagName("kicker").item(0).toElement(); kickerConf->writeEntry("LegacyKMenu", !checkKickoff->isChecked()); kickerConf->writeEntry("Transparent", getProperty(Kicker, "Transparent", "value")); kickerConf->writeEntry("SizePercentage", getProperty(Kicker, "SizePercentage", "value")); kickerConf->writeEntry("CustomSize", getProperty(Kicker, "CustomSize", "value")); kickerConf->writeEntry("Position", getProperty(Kicker, "Position", "value")); kickerConf->writeEntry("Alignment", getProperty(Kicker, "Alignment", "value")); kickerConf->sync(); delete kickerConf; // restart kicker client->send("kicker", "kicker", "restart()", ""); // kwin settings KConfig *kwinConf = new KConfig("kwinrc"); kwinConf->setGroup("Style"); QDomElement KWin = dom.elementsByTagName("kwin").item(0).toElement(); kwinConf->writeEntry("PluginLib", getProperty(KWin, "PluginLib", "value")); kwinConf->sync(); delete kwinConf; // restart kwin client->send("kwin", "KWinInterface", "reconfigure()", ""); // widget settings KConfig *globalConf = new KConfig("kdeglobals"); globalConf->setGroup("General"); QDomElement Widget = dom.elementsByTagName("widget").item(0).toElement(); globalConf->writeEntry("widgetStyle", getProperty(Widget, "widgetStyle", "value")); globalConf->sync(); delete globalConf; KIPC::sendMessageAll(KIPC::StyleChanged); }
Slave* Slave::holdSlave( const QString &protocol, const KURL& url ) { //kdDebug(7002) << "holdSlave '" << protocol << "' for " << url.prettyURL() << endl; // Firstly take into account all special slaves if (protocol == "data") return 0; DCOPClient *client = kapp->dcopClient(); if (!client->isAttached()) client->attach(); QString prefix = locateLocal("socket", KGlobal::instance()->instanceName()); KTempFile socketfile(prefix, QString::fromLatin1(".slave-socket")); if ( socketfile.status() != 0 ) return 0; #ifdef __CYGWIN__ socketfile.close(); socketfile.unlink(); #endif #ifndef Q_WS_WIN KServerSocket *kss = new KServerSocket(QFile::encodeName(socketfile.name())); Slave *slave = new Slave(kss, protocol, socketfile.name()); #else Slave *slave = 0; #endif QByteArray params, reply; QCString replyType; QDataStream stream(params, IO_WriteOnly); stream << url << socketfile.name(); QCString launcher = KApplication::launcher(); if (!client->call(launcher, launcher, "requestHoldSlave(KURL,QString)", params, replyType, reply)) { delete slave; return 0; } QDataStream stream2(reply, IO_ReadOnly); pid_t pid; stream2 >> pid; if (!pid) { delete slave; return 0; } #ifndef Q_WS_WIN slave->setPID(pid); QTimer::singleShot(1000*SLAVE_CONNECTION_TIMEOUT_MIN, slave, SLOT(timeout())); #endif return slave; }
KDE_EXPORT void wake_laptop_daemon() { DCOPClient *dclient = kapp->dcopClient(); if (!dclient || (!dclient->isAttached() && !dclient->attach())) return; TQByteArray data; TQDataStream arg( data, IO_WriteOnly ); (void) dclient->send( "kded", "klaptopdaemon", "restart()", data ); }
void Desktop::loadBgPixmap(void) { // if (!m_bgDirty) return; DCOPClient *client = kapp->dcopClient(); if (!client->isAttached()) client->attach(); QByteArray data, data2, replyData; QCString replyType; if (client->call("kdesktop", "KBackgroundIface", "isCommon()", data, replyType, replyData)) { QDataStream reply(replyData, IO_ReadOnly); if (replyType == "bool") { reply >> m_isCommon; }
int main( int argc, char** argv ) { if (( argc < 2) || (argv[1][0] == '-' )) { fprintf( stderr, "Usage: dcopstart <application> [url1] [url2] ...\n" ); exit(0); } DCOPClient client; client.attach(); dcop = &client; QCString app; QCString objid; QCString function; /*char **args = 0;*/ startApp( argv[1], argc - 2, (const char**)&argv[2] ); return 0; }
int main(int argc, char **argv) { KApplication app(argc, argv, "kerp_client", false); // get our DCOP client and attach so that we may use it DCOPClient *client = app.dcopClient(); client->attach(); // do a 'send' for now QByteArray data; QDataStream ds(data, IO_WriteOnly); if (argc > 1) ds << QString(argv[1]); else ds << QString("http://www.kde.org"); client->send("kerp", "kerpIface", "openURL(QString)", data); return app.exec(); }
void KRootPixmap::enableExports() { #ifdef Q_WS_X11 kdDebug(270) << k_lineinfo << "activating background exports.\n"; DCOPClient *client = kapp->dcopClient(); if(!client->isAttached()) client->attach(); QByteArray data; QDataStream args(data, IO_WriteOnly); args << 1; QCString appname("kdesktop"); int screen_number = DefaultScreen(qt_xdisplay()); if(screen_number) appname.sprintf("kdesktop-screen-%d", screen_number); client->send(appname, "KBackgroundIface", "setExport(int)", data); #endif }
void RunnerGUI::doubleClickedOnDetails(int para, int /*pos*/) { static QRegExp reFileAndLine("^(.*)\\[([0-9]+)\\]:"); QString line = m_testerWidget->details()->text(para); m_testerWidget->details()->setSelection(para, 0, para, line.length()-1); if ( reFileAndLine.search(line) != -1 ) { DCOPClient client; client.attach(); QByteArray data; QDataStream arg(&data, QIODevice::WriteOnly); bool ok; arg << QString(reFileAndLine.cap(1)) << (reFileAndLine.cap(2).toInt(&ok) - 1); client.send("kdevelop-*", "KDevPartController", "editDocument(QString,int)", data); client.send("kdevelop-*", "MainWindow", "raise()", ""); client.detach(); } }
int main(int argc, char *argv[]) { KAboutData aboutData( "kmousetool", I18N_NOOP("KMouseTool"), KMOUSETOOL_VERSION, description, KAboutData::License_GPL, "(c) 2002-2003, Jeff Roush\n(c) 2003, Gunnar Schmi Dt", 0, "http://www.mousetool.com", "*****@*****.**"); aboutData.addAuthor("Gunnar Schmi Dt", I18N_NOOP("Current maintainer"), "*****@*****.**", "http://www.schmi-dt.de"); aboutData.addAuthor("Olaf Schmidt", I18N_NOOP("Usability improvements"), "*****@*****.**"); aboutData.addAuthor("Jeff Roush", I18N_NOOP("Original author"), "*****@*****.**", "http://www.mousetool.com"); aboutData.addCredit("Joe Betts"); KCmdLineArgs::init( argc, argv, &aboutData ); KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. KUniqueApplication::addCmdLineOptions(); if (!KUniqueApplication::start()) { DCOPClient *client = new DCOPClient(); client->attach(); QByteArray data; QCString replyType; QByteArray replyData; if ( !client->call("kmousetool", "qt/KMouseToolUI", "show()", data, replyType, replyData, true) || !client->call("kmousetool", "qt/KMouseToolUI", "raise()", data, replyType, replyData, true) ) fprintf(stderr, "The DCOP calls failed\n"); delete client; exit(0); } KUniqueApplication a; KMouseTool *kmousetool = new KMouseTool(); if (!kapp->config()->readBoolEntry("IsMinimized", false)) kmousetool->show(); return a.exec(); }
void Slave::hold(const KURL &url) { if(d->derived) { // TODO: clean up before KDE 4 HoldParams params; params.url = &url; virtual_hook(VIRTUAL_HOLD, ¶ms); return; } /*end if*/ ref(); { QByteArray data; QDataStream stream(data, IO_WriteOnly); stream << url; slaveconn.send(CMD_SLAVE_HOLD, data); slaveconn.close(); dead = true; emit slaveDied(this); } deref(); // Call KLauncher::waitForSlave(pid); { DCOPClient *client = kapp->dcopClient(); if(!client->isAttached()) client->attach(); QByteArray params, reply; QCString replyType; QDataStream stream(params, IO_WriteOnly); pid_t pid = m_pid; stream << pid; QCString launcher = KApplication::launcher(); client->call(launcher, launcher, "waitForSlave(pid_t)", params, replyType, reply); } }
void KTheme::apply() { kdDebug() << "Going to apply theme: " << m_name << endl; QString themeDir = m_kgd->findResourceDir( "themes", m_name + "/" + m_name + ".xml") + m_name + "/"; kdDebug() << "Theme dir: " << themeDir << endl; // 2. Background theme QDomNodeList desktopList = m_dom.elementsByTagName( "desktop" ); KConfig desktopConf( "kdesktoprc" ); desktopConf.setGroup( "Background Common" ); for ( uint i = 0; i <= desktopList.count(); i++ ) { QDomElement desktopElem = desktopList.item( i ).toElement(); if ( !desktopElem.isNull() ) { // TODO optimize, don't write several times the common section bool common = static_cast<bool>( desktopElem.attribute( "common", "true" ).toUInt() ); desktopConf.writeEntry( "CommonDesktop", common ); desktopConf.writeEntry( "DeskNum", desktopElem.attribute( "number", "0" ).toUInt() ); desktopConf.setGroup( QString( "Desktop%1" ).arg( i ) ); desktopConf.writeEntry( "BackgroundMode", getProperty( desktopElem, "mode", "id" ) ); desktopConf.writeEntry( "Color1", QColor( getProperty( desktopElem, "color1", "rgb" ) ) ); desktopConf.writeEntry( "Color2", QColor( getProperty( desktopElem, "color2", "rgb" ) ) ); desktopConf.writeEntry( "BlendMode", getProperty( desktopElem, "blending", "mode" ) ); desktopConf.writeEntry( "BlendBalance", getProperty( desktopElem, "blending", "balance" ) ); desktopConf.writeEntry( "ReverseBlending", static_cast<bool>( getProperty( desktopElem, "blending", "reverse" ).toUInt() ) ); desktopConf.writeEntry( "Pattern", getProperty( desktopElem, "pattern", "name" ) ); desktopConf.writeEntry( "Wallpaper", unprocessFilePath( "desktop", getProperty( desktopElem, "wallpaper", "url" ) ) ); desktopConf.writeEntry( "WallpaperMode", getProperty( desktopElem, "wallpaper", "mode" ) ); if ( common ) break; // stop here } } // 11. Screensaver QDomElement saverElem = m_dom.elementsByTagName( "screensaver" ).item( 0 ).toElement(); if ( !saverElem.isNull() ) { desktopConf.setGroup( "ScreenSaver" ); desktopConf.writeEntry( "Saver", saverElem.attribute( "name" ) ); } desktopConf.sync(); // TODO sync and signal only if <desktop> elem present // reconfigure kdesktop. kdesktop will notify all clients DCOPClient *client = kapp->dcopClient(); if ( !client->isAttached() ) client->attach(); client->send("kdesktop", "KBackgroundIface", "configure()", ""); // FIXME Xinerama // 3. Icons QDomElement iconElem = m_dom.elementsByTagName( "icons" ).item( 0 ).toElement(); if ( !iconElem.isNull() ) { KConfig * iconConf = KGlobal::config(); iconConf->setGroup( "Icons" ); iconConf->writeEntry( "Theme", iconElem.attribute( "name", "crystalsvg" ), true, true ); QDomNodeList iconList = iconElem.childNodes(); for ( uint i = 0; i < iconList.count(); i++ ) { QDomElement iconSubElem = iconList.item( i ).toElement(); QString object = iconSubElem.attribute( "object" ); if ( object == "desktop" ) iconConf->setGroup( "DesktopIcons" ); else if ( object == "mainToolbar" ) iconConf->setGroup( "MainToolbarIcons" ); else if ( object == "panel" ) iconConf->setGroup( "PanelIcons" ); else if ( object == "small" ) iconConf->setGroup( "SmallIcons" ); else if ( object == "toolbar" ) iconConf->setGroup( "ToolbarIcons" ); QString iconName = iconSubElem.tagName(); if ( iconName.contains( "Color" ) ) { QColor iconColor = QColor( iconSubElem.attribute( "rgb" ) ); iconConf->writeEntry( iconName, iconColor, true, true ); } else if ( iconName.contains( "Value" ) || iconName == "Size" ) iconConf->writeEntry( iconName, iconSubElem.attribute( "value" ).toUInt(), true, true ); else if ( iconName.contains( "Effect" ) ) iconConf->writeEntry( iconName, iconSubElem.attribute( "name" ), true, true ); else iconConf->writeEntry( iconName, static_cast<bool>( iconSubElem.attribute( "value" ).toUInt() ), true, true ); } iconConf->sync(); for ( int i = 0; i < KIcon::LastGroup; i++ ) KIPC::sendMessageAll( KIPC::IconChanged, i ); KService::rebuildKSycoca( m_parent ); } // 4. Sounds QDomElement soundsElem = m_dom.elementsByTagName( "sounds" ).item( 0 ).toElement(); if ( !soundsElem.isNull() ) { KConfig soundConf( "knotify.eventsrc" ); KConfig kwinSoundConf( "kwin.eventsrc" ); QDomNodeList eventList = soundsElem.elementsByTagName( "event" ); for ( uint i = 0; i < eventList.count(); i++ ) { QDomElement eventElem = eventList.item( i ).toElement(); QString object = eventElem.attribute( "object" ); if ( object == "global" ) { soundConf.setGroup( eventElem.attribute( "name" ) ); soundConf.writeEntry( "soundfile", unprocessFilePath( "sounds", eventElem.attribute( "url" ) ) ); soundConf.writeEntry( "presentation", soundConf.readNumEntry( "presentation" ) | 1 ); } else if ( object == "kwin" ) { kwinSoundConf.setGroup( eventElem.attribute( "name" ) ); kwinSoundConf.writeEntry( "soundfile", unprocessFilePath( "sounds", eventElem.attribute( "url" ) ) ); kwinSoundConf.writeEntry( "presentation", soundConf.readNumEntry( "presentation" ) | 1 ); } } soundConf.sync(); kwinSoundConf.sync(); client->send("knotify", "", "reconfigure()", ""); // TODO signal kwin sounds change? } // 5. Colors QDomElement colorsElem = m_dom.elementsByTagName( "colors" ).item( 0 ).toElement(); if ( !colorsElem.isNull() ) { QDomNodeList colorList = colorsElem.childNodes(); KConfig * colorConf = KGlobal::config(); QString sCurrentScheme = locateLocal("data", "kdisplay/color-schemes/thememgr.kcsrc"); KSimpleConfig *colorScheme = new KSimpleConfig( sCurrentScheme ); colorScheme->setGroup("Color Scheme" ); for ( uint i = 0; i < colorList.count(); i++ ) { QDomElement colorElem = colorList.item( i ).toElement(); QString object = colorElem.attribute( "object" ); if ( object == "global" ) colorConf->setGroup( "General" ); else if ( object == "kwin" ) colorConf->setGroup( "WM" ); QString colName = colorElem.tagName(); QColor curColor = QColor( colorElem.attribute( "rgb" ) ); colorConf->writeEntry( colName, curColor, true, true ); // kdeglobals colorScheme->writeEntry( colName, curColor ); // thememgr.kcsrc } colorConf->setGroup( "KDE" ); colorConf->writeEntry( "colorScheme", "thememgr.kcsrc", true, true ); colorConf->writeEntry( "contrast", colorsElem.attribute( "contrast", "7" ), true, true ); colorScheme->writeEntry( "contrast", colorsElem.attribute( "contrast", "7" ) ); colorConf->sync(); delete colorScheme; KIPC::sendMessageAll( KIPC::PaletteChanged ); } // 6.Cursors QDomElement cursorsElem = m_dom.elementsByTagName( "cursors" ).item( 0 ).toElement(); if ( !cursorsElem.isNull() ) { KConfig mouseConf( "kcminputrc" ); mouseConf.setGroup( "Mouse" ); mouseConf.writeEntry( "cursorTheme", cursorsElem.attribute( "name" )); // FIXME is there a way to notify KDE of cursor changes? } // 7. KWin QDomElement wmElem = m_dom.elementsByTagName( "wm" ).item( 0 ).toElement(); if ( !wmElem.isNull() ) { KConfig kwinConf( "kwinrc" ); kwinConf.setGroup( "Style" ); QString type = wmElem.attribute( "type" ); if ( type == "builtin" ) kwinConf.writeEntry( "PluginLib", wmElem.attribute( "name" ) ); //else // TODO support custom themes QDomNodeList buttons = wmElem.elementsByTagName ("buttons"); if ( buttons.count() > 0 ) { kwinConf.writeEntry( "CustomButtonPositions", true ); kwinConf.writeEntry( "ButtonsOnLeft", getProperty( wmElem, "buttons", "left" ) ); kwinConf.writeEntry( "ButtonsOnRight", getProperty( wmElem, "buttons", "right" ) ); } else { kwinConf.writeEntry( "CustomButtonPositions", false ); } kwinConf.writeEntry( "BorderSize", getProperty( wmElem, "border", "size" ) ); kwinConf.sync(); client->send( "kwin", "", "reconfigure()", "" ); } // 8. Konqueror QDomElement konqElem = m_dom.elementsByTagName( "konqueror" ).item( 0 ).toElement(); if ( !konqElem.isNull() ) { KConfig konqConf( "konquerorrc" ); konqConf.setGroup( "Settings" ); konqConf.writeEntry( "BgImage", unprocessFilePath( "konqueror", getProperty( konqElem, "wallpaper", "url" ) ) ); konqConf.writeEntry( "BgColor", QColor( getProperty( konqElem, "bgcolor", "rgb" ) ) ); konqConf.sync(); client->send("konqueror*", "KonquerorIface", "reparseConfiguration()", ""); // FIXME seems not to work :( } // 9. Kicker QDomElement panelElem = m_dom.elementsByTagName( "panel" ).item( 0 ).toElement(); if ( !panelElem.isNull() ) { KConfig kickerConf( "kickerrc" ); kickerConf.setGroup( "General" ); QString kickerBgUrl = getProperty( panelElem, "background", "url" ); if ( !kickerBgUrl.isEmpty() ) { kickerConf.writeEntry( "UseBackgroundTheme", true ); kickerConf.writeEntry( "BackgroundTheme", unprocessFilePath( "panel", kickerBgUrl ) ); kickerConf.writeEntry( "ColorizeBackground", static_cast<bool>( getProperty( panelElem, "background", "colorize" ).toUInt() ) ); } kickerConf.writeEntry( "Transparent", static_cast<bool>( getProperty( panelElem, "transparent", "value" ).toUInt() ) ); kickerConf.writeEntry( "Position", static_cast<int> (getProperty( panelElem, "position", "value" ).toUInt() )); kickerConf.writeEntry( "ShowLeftHideButton", static_cast<bool>( getProperty( panelElem, "showlefthidebutton", "value").toInt())); kickerConf.writeEntry( "ShowRightHideButton", static_cast<bool>( getProperty( panelElem, "showrighthidebutton", "value").toInt())); kickerConf.sync(); client->send("kicker", "Panel", "configure()", ""); } // 10. Widget style QDomElement widgetsElem = m_dom.elementsByTagName( "widgets" ).item( 0 ).toElement(); if ( !widgetsElem.isNull() ) { KConfig * widgetConf = KGlobal::config(); widgetConf->setGroup( "General" ); widgetConf->writeEntry( "widgetStyle", widgetsElem.attribute( "name" ), true, true ); widgetConf->sync(); KIPC::sendMessageAll( KIPC::StyleChanged ); } // 12. Fonts QDomElement fontsElem = m_dom.elementsByTagName( "fonts" ).item( 0 ).toElement(); if ( !fontsElem.isNull() ) { KConfig * fontsConf = KGlobal::config(); KConfig * kde1xConf = new KSimpleConfig( QDir::homeDirPath() + "/.kderc" ); kde1xConf->setGroup( "General" ); QDomNodeList fontList = fontsElem.childNodes(); for ( uint i = 0; i < fontList.count(); i++ ) { QDomElement fontElem = fontList.item( i ).toElement(); QString fontName = fontElem.tagName(); QString fontValue = fontElem.attribute( "value" ); QString fontObject = fontElem.attribute( "object" ); if ( fontObject == "FMSettings" ) { desktopConf.setGroup( fontObject ); desktopConf.writeEntry( fontName, fontValue, true, true ); desktopConf.sync(); } else { fontsConf->setGroup( fontObject ); fontsConf->writeEntry( fontName, fontValue, true, true ); } kde1xConf->writeEntry( fontName, fontValue, true, true ); } fontsConf->sync(); kde1xConf->sync(); KIPC::sendMessageAll( KIPC::FontChanged ); } }
extern "C" KDE_EXPORT int kdemain(int argc, char **argv) { { QCString multiHead = getenv("KDE_MULTIHEAD"); if(multiHead.lower() == "true") { Display *dpy = XOpenDisplay(NULL); if(!dpy) { fprintf(stderr, "%s: FATAL ERROR: couldn't open display %s\n", argv[0], XDisplayName(NULL)); exit(1); } int number_of_screens = ScreenCount(dpy); kicker_screen_number = DefaultScreen(dpy); int pos; QCString display_name = XDisplayString(dpy); XCloseDisplay(dpy); dpy = 0; if((pos = display_name.findRev('.')) != -1) display_name.remove(pos, 10); QCString env; if(number_of_screens != 1) { for(int i = 0; i < number_of_screens; i++) { if(i != kicker_screen_number && fork() == 0) { kicker_screen_number = i; // break here because we are the child process, we don't // want to fork() anymore break; } } env.sprintf("DISPLAY=%s.%d", display_name.data(), kicker_screen_number); if(putenv(strdup(env.data()))) { fprintf(stderr, "%s: WARNING: unable to set DISPLAY environment variable\n", argv[0]); perror("putenv()"); } } } } KGlobal::locale()->setMainCatalogue("kicker"); QCString appname; if(kicker_screen_number == 0) appname = "kicker"; else appname.sprintf("kicker-screen-%d", kicker_screen_number); KAboutData aboutData(appname.data(), I18N_NOOP("KDE Panel"), version, description, KAboutData::License_BSD, I18N_NOOP("(c) 1999-2004, The KDE Team")); aboutData.addAuthor("Aaron J. Seigo", I18N_NOOP("Current maintainer"), "*****@*****.**"); aboutData.addAuthor("Matthias Elter", 0, "*****@*****.**"); aboutData.addAuthor("Matthias Ettrich", 0, "*****@*****.**"); aboutData.addAuthor("Wilco Greven", 0, "*****@*****.**"); aboutData.addAuthor("Rik Hemsley", 0, "*****@*****.**"); aboutData.addAuthor("Daniel M. Duley", 0, "*****@*****.**"); aboutData.addAuthor("Preston Brown", 0, "*****@*****.**"); aboutData.addAuthor("John Firebaugh", 0, "*****@*****.**"); aboutData.addAuthor("Waldo Bastian", I18N_NOOP("Kiosk mode"), "*****@*****.**"); aboutData.addCredit("Jessica Hall", /* I18N_NOOP("KConfigXT") */ 0, "*****@*****.**"); aboutData.addCredit("Stefan Nikolaus", /* I18N_NOOP("Bug fixes") */ 0, "*****@*****.**"); aboutData.addCredit("Benoît Minisini", /* I18N_NOOP("Bug fixes") */ 0, "*****@*****.**"); KCmdLineArgs::init(argc, argv, &aboutData); if(!Kicker::start()) { kdError() << "kicker is already running!" << endl; return 0; } if(signal(SIGTERM, sighandler) == SIG_IGN) signal(SIGTERM, SIG_IGN); if(signal(SIGINT, sighandler) == SIG_IGN) signal(SIGINT, SIG_IGN); if(signal(SIGHUP, sighandler) == SIG_IGN) signal(SIGHUP, SIG_IGN); // send it even before KApplication ctor, because ksmserver will launch another app as soon // as QApplication registers with it DCOPClient *cl = new DCOPClient; cl->attach(); DCOPRef r("ksmserver", "ksmserver"); r.setDCOPClient(cl); r.send("suspendStartup", QCString("kicker")); delete cl; Kicker *kicker = new Kicker; int rv = kicker->exec(); delete kicker; return rv; }
KCMThinkpadModule::KCMThinkpadModule(TQWidget* parent, const char* name, const TQStringList&) : TDECModule(KCMThinkpadModuleFactory::instance(), parent, name) { TDEAboutData* about = new TDEAboutData(I18N_NOOP("kcmthinkpad"), I18N_NOOP("TDE Control Module for IBM Thinkpad " "Laptop Hardware"), 0, 0, TDEAboutData::License_GPL, "(c) 2004 Jonathan Riddell"); about->addAuthor("Jonathan Riddell", I18N_NOOP("Original author"), "*****@*****.**"); setAboutData( about ); TQVBoxLayout* layout = new TQVBoxLayout(this); m_KCMThinkpadGeneral = new KCMThinkpadGeneral(this); layout->addWidget( m_KCMThinkpadGeneral ); layout->addStretch(); load(); //try and open /dev/nvram m_nvramReadable = false; m_nvramWriteable = false; #ifdef Q_OS_FREEBSD // Look if the sysctl tree of acpi_ibm is in place u_int n = 0; size_t len = sizeof(n); if (m_nvramReadable = ( sysctlbyname("dev.acpi_ibm.0.volume", &n, &len, NULL, 0) != -1 )) m_nvramWriteable = ( sysctlbyname("dev.acpi_ibm.0.volume", NULL, NULL, &n, len) != -1 ); if (!m_nvramReadable) { setButtons(buttons() & ~Default); m_KCMThinkpadGeneral->bgGeneral->setEnabled(false); m_KCMThinkpadGeneral->tlOff->setText(i18n("In order to use the Thinkpad Buttons KMilo Plugin, " "you have to load the acpi_ibm(4) driver.")); } else if (!m_nvramWriteable) { m_KCMThinkpadGeneral->tlOff->setText(i18n("Could not write to dev.acpi_ibm.0.volume. " "Using software volume, required for " "R30/R31 models, or using a custom volume " "change step is disabled.")); #else TQFile nvramFile(m_nvramFile); if ( nvramFile.open(IO_ReadOnly) ) { m_nvramReadable = true; nvramFile.close(); } if ( nvramFile.open(IO_WriteOnly) ) { m_nvramWriteable = true; nvramFile.close(); } if (!m_nvramReadable) { setButtons(buttons() & ~Default); m_KCMThinkpadGeneral->bgGeneral->setEnabled(false); } else if (!m_nvramWriteable) { m_KCMThinkpadGeneral->tlOff->setText(i18n("Could not write to %1. " "To use the software volume, required for " "R30/R31 models and to use a custom volume " "change step, set the nvram device to world " "writeable: <em>chmod 666 " "/dev/nvram</em>").arg(m_nvramFile)); #endif } else { m_KCMThinkpadGeneral->tlOff->setText(i18n("Thinkpad Buttons KMilo Plugin Ready For Configuration")); } connect( m_KCMThinkpadGeneral, TQT_SIGNAL(changed()), TQT_SLOT(changed())); } void KCMThinkpadModule::save() { if (!m_nvramReadable) { return; } DCOPClient client; TDEConfig config(CONFIG_FILE); config.setGroup("thinkpad"); config.writeEntry("run", m_KCMThinkpadGeneral->mCbRun->isChecked()); config.writeEntry("softwareVolume", m_KCMThinkpadGeneral->mCbSoftwareVolume->isChecked()); config.writeEntry("volumeStep", m_KCMThinkpadGeneral->mSpinboxVolumeStep->value()); config.writeEntry("buttonThinkpad", m_KCMThinkpadGeneral->commandExec->url()); config.writeEntry("buttonHome", m_KCMThinkpadGeneral->commandExecHome->url()); config.writeEntry("buttonSearch", m_KCMThinkpadGeneral->commandExecSearch->url()); config.writeEntry("buttonMail", m_KCMThinkpadGeneral->commandExecMail->url()); config.writeEntry("buttonZoom", m_KCMThinkpadGeneral->commandExecZoom->url()); config.sync(); if (client.attach()) { TQByteArray data, replyData; TQCString replyType; if (!client.call("kded", "kmilod", "reconfigure()", data, replyType, replyData)) { kdDebug() << "KCMThinkpad::showTextMsg: " << "there was an error using DCOP on kmilod::reconfigure()." << endl; } } else { kdDebug() << "KCMThinkpadModule: cannot attach to DCOP server, " << "no automatic config update." << endl; } } void KCMThinkpadModule::load() { load( false ); }
Slave *Slave::createSlave(const QString &protocol, const KURL &url, int &error, QString &error_text) { // kdDebug(7002) << "createSlave '" << protocol << "' for " << url.prettyURL() << endl; // Firstly take into account all special slaves if(protocol == "data") return new DataProtocol(); DCOPClient *client = kapp->dcopClient(); if(!client->isAttached()) client->attach(); QString prefix = locateLocal("socket", KGlobal::instance()->instanceName()); KTempFile socketfile(prefix, QString::fromLatin1(".slave-socket")); if(socketfile.status() != 0) { error_text = i18n("Unable to create io-slave: %1").arg(strerror(errno)); error = KIO::ERR_CANNOT_LAUNCH_PROCESS; return 0; } #ifdef __CYGWIN__ socketfile.close(); #endif KServerSocket *kss = new KServerSocket(QFile::encodeName(socketfile.name())); Slave *slave = new Slave(kss, protocol, socketfile.name()); // WABA: if the dcopserver is running under another uid we don't ask // klauncher for a slave, because the slave might have that other uid // as well, which might either be a) undesired or b) make it impossible // for the slave to connect to the application. // In such case we start the slave via KProcess. // It's possible to force this by setting the env. variable // KDE_FORK_SLAVES, Clearcase seems to require this. static bool bForkSlaves = !QCString(getenv("KDE_FORK_SLAVES")).isEmpty(); if(bForkSlaves || !client->isAttached() || client->isAttachedToForeignServer()) { QString _name = KProtocolInfo::exec(protocol); if(_name.isEmpty()) { error_text = i18n("Unknown protocol '%1'.").arg(protocol); error = KIO::ERR_CANNOT_LAUNCH_PROCESS; delete slave; return 0; } QString lib_path = KLibLoader::findLibrary(_name.latin1()); if(lib_path.isEmpty()) { error_text = i18n("Can not find io-slave for protocol '%1'.").arg(protocol); error = KIO::ERR_CANNOT_LAUNCH_PROCESS; return 0; } KProcess proc; proc << locate("exe", "kioslave") << lib_path << protocol << "" << socketfile.name(); kdDebug(7002) << "kioslave" << ", " << lib_path << ", " << protocol << ", " << QString::null << ", " << socketfile.name() << endl; proc.start(KProcess::DontCare); slave->setPID(proc.pid()); QTimer::singleShot(1000 * SLAVE_CONNECTION_TIMEOUT_MIN, slave, SLOT(timeout())); return slave; } QByteArray params, reply; QCString replyType; QDataStream stream(params, IO_WriteOnly); stream << protocol << url.host() << socketfile.name(); QCString launcher = KApplication::launcher(); if(!client->call(launcher, launcher, "requestSlave(QString,QString,QString)", params, replyType, reply)) { error_text = i18n("Cannot talk to klauncher"); error = KIO::ERR_SLAVE_DEFINED; delete slave; return 0; } QDataStream stream2(reply, IO_ReadOnly); QString errorStr; pid_t pid; stream2 >> pid >> errorStr; if(!pid) { error_text = i18n("Unable to create io-slave:\nklauncher said: %1").arg(errorStr); error = KIO::ERR_CANNOT_LAUNCH_PROCESS; delete slave; return 0; } slave->setPID(pid); QTimer::singleShot(1000 * SLAVE_CONNECTION_TIMEOUT_MIN, slave, SLOT(timeout())); return slave; }
bool KUniqueApplication::start() { if( s_uniqueTestDone ) return true; s_uniqueTestDone = true; addCmdLineOptions(); // Make sure to add cmd line options #ifdef Q_WS_WIN s_nofork = true; #else TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs("kuniqueapp"); s_nofork = !args->isSet("fork"); delete args; #endif TQCString appName = TDECmdLineArgs::about->appName(); if (s_nofork) { if (s_multipleInstances) { TQCString pid; pid.setNum(getpid()); appName = appName + "-" + pid; } // Check to make sure that we're actually able to register with the DCOP // server. #ifndef Q_WS_WIN //TODO if(dcopClient()->registerAs(appName, false).isEmpty()) { startKdeinit(); if(dcopClient()->registerAs(appName, false).isEmpty()) { kdError() << "KUniqueApplication: Can't setup DCOP communication." << endl; ::exit(255); } } #endif // We'll call newInstance in the constructor. Do nothing here. return true; } DCOPClient *dc; int fd[2]; signed char result; if (0 > pipe(fd)) { kdError() << "KUniqueApplication: pipe() failed!" << endl; ::exit(255); } int fork_result = fork(); switch(fork_result) { case -1: kdError() << "KUniqueApplication: fork() failed!" << endl; ::exit(255); break; case 0: // Child ::close(fd[0]); if (s_multipleInstances) appName.append("-").append(TQCString().setNum(getpid())); dc = dcopClient(); { TQCString regName = dc->registerAs(appName, false); if (regName.isEmpty()) { // Check DISPLAY if (TQCString(getenv(DISPLAY)).isEmpty()) { kdError() << "KUniqueApplication: Can't determine DISPLAY. Aborting." << endl; result = -1; // Error ::write(fd[1], &result, 1); ::exit(255); } // Try to launch tdeinit. startKdeinit(); regName = dc->registerAs(appName, false); if (regName.isEmpty()) { kdError() << "KUniqueApplication: Can't setup DCOP communication." << endl; result = -1; delete dc; // Clean up DCOP commmunication ::write(fd[1], &result, 1); ::exit(255); } } if (regName != appName) { // Already running. Ok. result = 0; delete dc; // Clean up DCOP commmunication ::write(fd[1], &result, 1); ::close(fd[1]); #if 0 #ifdef Q_WS_X11 // say we're up and running ( probably no new window will appear ) TDEStartupInfoId id; if( kapp != NULL ) // TDEApplication constructor unsets the env. variable id.initId( kapp->startupId()); else id = TDEStartupInfo::currentStartupIdEnv(); if( !id.none()) { Display* disp = XOpenDisplay( NULL ); if( disp != NULL ) // use extra X connection { TDEStartupInfo::sendFinishX( disp, id ); XCloseDisplay( disp ); } } #else //FIXME(E): implement #endif #endif return false; } dc->setPriorityCall(true); } { #ifdef Q_WS_X11 TDEStartupInfoId id; if( kapp != NULL ) // TDEApplication constructor unsets the env. variable id.initId( kapp->startupId()); else id = TDEStartupInfo::currentStartupIdEnv(); if( !id.none()) { // notice about pid change Display* disp = XOpenDisplay( NULL ); if( disp != NULL ) // use extra X connection { TDEStartupInfoData data; data.addPid( getpid()); TDEStartupInfo::sendChangeX( disp, id, data ); XCloseDisplay( disp ); } } #else //FIXME(E): Implement #endif } result = 0; ::write(fd[1], &result, 1); ::close(fd[1]); return true; // Finished. default: // Parent // DCOPClient::emergencyClose(); // dcopClient()->detach(); if (s_multipleInstances) appName.append("-").append(TQCString().setNum(fork_result)); ::close(fd[1]); for(;;) { int n = ::read(fd[0], &result, 1); if (n == 1) break; if (n == 0) { kdError() << "KUniqueApplication: Pipe closed unexpectedly." << endl; ::exit(255); } if (errno != EINTR) { kdError() << "KUniqueApplication: Error reading from pipe." << endl; ::exit(255); } } ::close(fd[0]); if (result != 0) ::exit(result); // Error occurred in child. dc = new DCOPClient(); if (!dc->attach()) { kdError() << "KUniqueApplication: Parent process can't attach to DCOP." << endl; delete dc; // Clean up DCOP commmunication ::exit(255); } if (!dc->isApplicationRegistered(appName)) { kdError() << "KUniqueApplication: Registering failed!" << endl; } TQCString new_asn_id; #if defined Q_WS_X11 TDEStartupInfoId id; if( kapp != NULL ) // TDEApplication constructor unsets the env. variable id.initId( kapp->startupId()); else id = TDEStartupInfo::currentStartupIdEnv(); if( !id.none()) new_asn_id = id.id(); #endif TQByteArray data, reply; TQDataStream ds(data, IO_WriteOnly); TDECmdLineArgs::saveAppArgs(ds); ds << new_asn_id; dc->setPriorityCall(true); TQCString replyType; if (!dc->call(appName, TDECmdLineArgs::about->appName(), "newInstance()", data, replyType, reply)) { kdError() << "Communication problem with " << TDECmdLineArgs::about->appName() << ", it probably crashed." << endl; delete dc; // Clean up DCOP commmunication ::exit(255); } dc->setPriorityCall(false); if (replyType != "int") { kdError() << "KUniqueApplication: DCOP communication error!" << endl; delete dc; // Clean up DCOP commmunication ::exit(255); } TQDataStream rs(reply, IO_ReadOnly); int exitCode; rs >> exitCode; delete dc; // Clean up DCOP commmunication ::exit(exitCode); break; } return false; // make insure++ happy }
extern "C" KDE_EXPORT int kdemain( int argc, char **argv ) { // here we go, construct the Kate version QString kateVersion = KateApp::kateVersion(); KAboutData aboutData ("kate", I18N_NOOP("Kate"), kateVersion.latin1(), I18N_NOOP( "Kate - Advanced Text Editor" ), KAboutData::License_LGPL_V2, I18N_NOOP( "(c) 2000-2005 The Kate Authors" ), 0, "http://kate.kde.org"); aboutData.addAuthor ("Christoph Cullmann", I18N_NOOP("Maintainer"), "*****@*****.**", "http://www.babylon2k.de"); aboutData.addAuthor ("Anders Lund", I18N_NOOP("Core Developer"), "*****@*****.**", "http://www.alweb.dk"); aboutData.addAuthor ("Joseph Wenninger", I18N_NOOP("Core Developer"), "*****@*****.**","http://stud3.tuwien.ac.at/~e9925371"); aboutData.addAuthor ("Hamish Rodda",I18N_NOOP("Core Developer"), "*****@*****.**"); aboutData.addAuthor ("Waldo Bastian", I18N_NOOP( "The cool buffersystem" ), "*****@*****.**" ); aboutData.addAuthor ("Charles Samuels", I18N_NOOP("The Editing Commands"), "*****@*****.**"); aboutData.addAuthor ("Matt Newell", I18N_NOOP("Testing, ..."), "*****@*****.**"); aboutData.addAuthor ("Michael Bartl", I18N_NOOP("Former Core Developer"), "*****@*****.**"); aboutData.addAuthor ("Michael McCallum", I18N_NOOP("Core Developer"), "*****@*****.**"); aboutData.addAuthor ("Jochen Wilhemly", I18N_NOOP( "KWrite Author" ), "*****@*****.**" ); aboutData.addAuthor ("Michael Koch",I18N_NOOP("KWrite port to KParts"), "*****@*****.**"); aboutData.addAuthor ("Christian Gebauer", 0, "*****@*****.**" ); aboutData.addAuthor ("Simon Hausmann", 0, "*****@*****.**" ); aboutData.addAuthor ("Glen Parker",I18N_NOOP("KWrite Undo History, Kspell integration"), "*****@*****.**"); aboutData.addAuthor ("Scott Manson",I18N_NOOP("KWrite XML Syntax highlighting support"), "*****@*****.**"); aboutData.addAuthor ("John Firebaugh",I18N_NOOP("Patches and more"), "*****@*****.**"); aboutData.addAuthor ("Dominik Haumann", I18N_NOOP("Developer & Highlight wizard"), "*****@*****.**"); aboutData.addCredit ("Matteo Merli",I18N_NOOP("Highlighting for RPM Spec-Files, Perl, Diff and more"), "*****@*****.**"); aboutData.addCredit ("Rocky Scaletta",I18N_NOOP("Highlighting for VHDL"), "*****@*****.**"); aboutData.addCredit ("Yury Lebedev",I18N_NOOP("Highlighting for SQL"),""); aboutData.addCredit ("Chris Ross",I18N_NOOP("Highlighting for Ferite"),""); aboutData.addCredit ("Nick Roux",I18N_NOOP("Highlighting for ILERPG"),""); aboutData.addCredit ("Carsten Niehaus", I18N_NOOP("Highlighting for LaTeX"),""); aboutData.addCredit ("Per Wigren", I18N_NOOP("Highlighting for Makefiles, Python"),""); aboutData.addCredit ("Jan Fritz", I18N_NOOP("Highlighting for Python"),""); aboutData.addCredit ("Daniel Naber","",""); aboutData.addCredit ("Roland Pabel",I18N_NOOP("Highlighting for Scheme"),""); aboutData.addCredit ("Cristi Dumitrescu",I18N_NOOP("PHP Keyword/Datatype list"),""); aboutData.addCredit ("Carsten Pfeiffer", I18N_NOOP("Very nice help"), ""); aboutData.addCredit (I18N_NOOP("All people who have contributed and I have forgotten to mention"),"",""); aboutData.setTranslator(I18N_NOOP2("NAME OF TRANSLATORS","Your names"), I18N_NOOP2("EMAIL OF TRANSLATORS","Your emails")); // command line args init and co KCmdLineArgs::init (argc, argv, &aboutData); KCmdLineArgs::addCmdLineOptions (options); KCmdLineArgs::addTempFileOption(); KateApp::addCmdLineOptions (); // get our command line args ;) KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); // now, first try to contact running kate instance if needed if ( args->isSet("use") || (::getenv("KATE_PID")!=0) ) { DCOPClient client; client.attach (); // get all attached clients ;) QCStringList allClients = client.registeredApplications(); // search for a kate app client, use the first found QCString kateApp; if ( args->isSet("start") ) { for (unsigned int i=0; i < allClients.count(); i++) { if (allClients[i] == "kate" || allClients[i].left(5) == "kate-") { DCOPRef ref( allClients[i], "KateApplication" ); QString s = ref.call( "session" ); if ( QString(args->getOption("start")) == s ) { kateApp = allClients[i]; break; } } } } else if ( (args->isSet("pid")) || (::getenv("KATE_PID") !=0 ) ) { QCString tryApp; if ( args->isSet("pid") ) tryApp = args->getOption("pid"); else tryApp = ::getenv("KATE_PID"); if ( client.isApplicationRegistered( tryApp.prepend("kate-") ) ) kateApp = tryApp; } else { for (unsigned int i=0; i < allClients.count(); ++i) { if (allClients[i] == "kate" || allClients[i].left(5) == "kate-") { kateApp = allClients[i]; break; } } } // found a matching kate client ;) if (!kateApp.isEmpty()) { kdDebug () << "kate app: " << kateApp << endl; // make kdeinit happy client.registerAs( "kate" ); DCOPRef kRef (kateApp, "KateApplication"); if (args->isSet ("start")) kRef.call( "activateSession", QString (args->getOption("start")) ); QString enc = args->isSet("encoding") ? args->getOption("encoding") : QCString(""); bool tempfileSet = KCmdLineArgs::isTempFileSet(); for (int z=0; z<args->count(); z++) kRef.call( "openURL", args->url(z), enc, tempfileSet ); if( args->isSet( "stdin" ) ) { QTextIStream input(stdin); // set chosen codec QTextCodec *codec = args->isSet("encoding") ? QTextCodec::codecForName(args->getOption("encoding")) : 0; if (codec) input.setCodec (codec); QString line; QString text; do { line = input.readLine(); text.append( line + "\n" ); } while( !line.isNull() ); kRef.call( "openInput", text ); } int line = 0; int column = 0; bool nav = false; if (args->isSet ("line")) { line = args->getOption ("line").toInt(); nav = true; } if (args->isSet ("column")) { column = args->getOption ("column").toInt(); nav = true; } if (nav) kRef.call( "setCursor", line, column ); // since the user tried to open a document, let us assume [s]he // wants to see that document. // ### what to do about the infamous focus stealing prevention? uint mwn = kRef.call("activeMainWindowNumber"); QCString smwn; DCOPRef wRef( kateApp, QCString( "__KateMainWindow#") + smwn.setNum(mwn) ); if ( wRef.call("minimized") ) { if ( wRef.call( "maximized" ) ) wRef.call( "maximize" ); else wRef.call("restore"); } wRef.call( "raise" ); // stop startup notification KStartupInfo::appStarted( ); return 0; } } // construct the real kate app object ;) KateApp app (args); // app execution should already end :) if (app.shouldExit()) { return 0; } // execute ourself ;) return app.exec(); }
/** * Do the actual DCOP call */ int runDCOP(KStringList args, UserList users, Session session, const QString sessionName, bool readStdin, bool updateUserTime) { bool DCOPrefmode = false; QCString app; QCString objid; QCString function; KStringList params; DCOPClient *client = 0L; int retval = 0; if(!args.isEmpty() && args[0].find("DCOPRef(") == 0) { int delimPos = args[0].findRev(','); if(delimPos == -1) { cerr_ << "Error: '" << args[0] << "' is not a valid DCOP reference." << endl; exit(-1); } app = args[0].mid(8, delimPos - 8); delimPos++; objid = args[0].mid(delimPos, args[0].length() - delimPos - 1); if(args.count() > 1) function = args[1]; if(args.count() > 2) { params = args; params.remove(params.begin()); params.remove(params.begin()); } DCOPrefmode = true; } else { if(!args.isEmpty()) app = args[0]; if(args.count() > 1) objid = args[1]; if(args.count() > 2) function = args[2]; if(args.count() > 3) { params = args; params.remove(params.begin()); params.remove(params.begin()); params.remove(params.begin()); } } bool firstRun = true; UserList::Iterator it; QStringList sessions; bool presetDCOPServer = false; // char *dcopStr = 0L; QString dcopServer; for(it = users.begin(); it != users.end() || firstRun; ++it) { firstRun = false; // cout_ << "Iterating '" << it.key() << "'" << endl; if(session == QuerySessions) { QStringList sessions = dcopSessionList(it.key(), it.data()); if(sessions.isEmpty()) { if(users.count() <= 1) { cout_ << "No active sessions"; if(!(*it).isEmpty()) cout_ << " for user " << *it; cout_ << endl; } } else { cout_ << "Active sessions "; if(!(*it).isEmpty()) cout_ << "for user " << *it << " "; cout_ << ":" << endl; QStringList::Iterator sIt = sessions.begin(); for(; sIt != sessions.end(); ++sIt) cout_ << " " << *sIt << endl; cout_ << endl; } continue; } if(getenv("DCOPSERVER")) { sessions.append(getenv("DCOPSERVER")); presetDCOPServer = true; } if(users.count() > 1 || (users.count() == 1 && (getenv("DCOPSERVER") == 0 /*&& getenv( "DISPLAY" ) == 0*/))) { sessions = dcopSessionList(it.key(), it.data()); if(sessions.isEmpty()) { if(users.count() > 1) continue; else { cerr_ << "ERROR: No active KDE sessions!" << endl << "If you are sure there is one, please set the $DCOPSERVER variable manually" << endl << "before calling dcop." << endl; exit(-1); } } else if(!sessionName.isEmpty()) { if(sessions.contains(sessionName)) { sessions.clear(); sessions.append(sessionName); } else { cerr_ << "ERROR: The specified session doesn't exist!" << endl; exit(-1); } } else if(sessions.count() > 1 && session != AllSessions) { cerr_ << "ERROR: Multiple available KDE sessions!" << endl << "Please specify the correct session to use with --session or use the" << endl << "--all-sessions option to broadcast to all sessions." << endl; exit(-1); } } if(users.count() > 1 || (users.count() == 1 && (getenv("ICEAUTHORITY") == 0 || getenv("DISPLAY") == 0))) { // Check for ICE authority file and if the file can be read by us QString home = it.data(); QString iceFile = it.data() + "/.ICEauthority"; QFileInfo fi(iceFile); if(iceFile.isEmpty()) { cerr_ << "WARNING: Cannot determine home directory for user " << it.key() << "!" << endl << "Please check permissions or set the $ICEAUTHORITY variable manually before" << endl << "calling dcop." << endl; } else if(fi.exists()) { if(fi.isReadable()) { char *envStr = strdup(("ICEAUTHORITY=" + iceFile).ascii()); putenv(envStr); // cerr_ << "ice: " << envStr << endl; } else { cerr_ << "WARNING: ICE authority file " << iceFile << "is not readable by you!" << endl << "Please check permissions or set the $ICEAUTHORITY variable manually before" << endl << "calling dcop." << endl; } } else { if(users.count() > 1) continue; else { cerr_ << "WARNING: Cannot find ICE authority file " << iceFile << "!" << endl << "Please check permissions or set the $ICEAUTHORITY" << " variable manually before" << endl << "calling dcop." << endl; } } } // Main loop // If users is an empty list we're calling for the currently logged // in user. In this case we don't have a session, but still want // to iterate the loop once. QStringList::Iterator sIt = sessions.begin(); for(; sIt != sessions.end() || users.isEmpty(); ++sIt) { if(!presetDCOPServer && !users.isEmpty()) { QString dcopFile = it.data() + "/" + *sIt; QFile f(dcopFile); if(!f.open(IO_ReadOnly)) { cerr_ << "Can't open " << dcopFile << " for reading!" << endl; exit(-1); } QStringList l(QStringList::split('\n', f.readAll())); dcopServer = l.first(); if(dcopServer.isEmpty()) { cerr_ << "WARNING: Unable to determine DCOP server for session " << *sIt << "!" << endl << "Please check permissions or set the $DCOPSERVER variable manually before" << endl << "calling dcop." << endl; exit(-1); } } delete client; client = new DCOPClient; if(!dcopServer.isEmpty()) client->setServerAddress(dcopServer.ascii()); bool success = client->attach(); if(!success) { cerr_ << "ERROR: Couldn't attach to DCOP server!" << endl; retval = QMAX(retval, 1); if(users.isEmpty()) break; else continue; } dcop = client; int argscount = args.count(); if(DCOPrefmode) argscount++; switch(argscount) { case 0: queryApplications(""); break; case 1: if(endsWith(app, '*')) queryApplications(app); else queryObjects(app, ""); break; case 2: if(endsWith(objid, '*')) queryObjects(app, objid); else queryFunctions(app, objid); break; case 3: default: if(updateUserTime) sendUserTime(app); if(readStdin) { KStringList::Iterator replaceArg = params.end(); KStringList::Iterator it = params.begin(); for(; it != params.end(); ++it) if(*it == "%1") replaceArg = it; // Read from stdin until EOF and call function for each // read line while(!cin_.atEnd()) { QString buf = cin_.readLine(); if(replaceArg != params.end()) *replaceArg = buf.local8Bit(); if(!buf.isNull()) { int res = callFunction(app, objid, function, params); retval = QMAX(retval, res); } } } else { // Just call function // cout_ << "call " << app << ", " << objid << ", " << function << ", (params)" << endl; int res = callFunction(app, objid, function, params); retval = QMAX(retval, res); } break; } // Another sIt++ would make the loop infinite... if(users.isEmpty()) break; } // Another it++ would make the loop infinite... if(it == users.end()) break; } return retval; }
int main(int argc, char **argv) { // nspluginviewer is a helper app, it shouldn't do session management at all setenv("SESSION_MANAGER", "", 1); // trap X errors kdDebug(1430) << "1 - XSetErrorHandler" << endl; XSetErrorHandler(x_errhandler); setvbuf(stderr, NULL, _IONBF, 0); kdDebug(1430) << "2 - parseCommandLine" << endl; parseCommandLine(argc, argv); #if QT_VERSION < 0x030100 // Create application kdDebug(1430) << "3 - XtToolkitInitialize" << endl; XtToolkitInitialize(); g_appcon = XtCreateApplicationContext(); Display *dpy = XtOpenDisplay(g_appcon, NULL, "nspluginviewer", "nspluginviewer", 0, 0, &argc, argv); _notifiers[0].setAutoDelete(TRUE); _notifiers[1].setAutoDelete(TRUE); _notifiers[2].setAutoDelete(TRUE); kdDebug(1430) << "4 - KXtApplication app" << endl; KLocale::setMainCatalogue("nsplugin"); KXtApplication app(dpy, argc, argv, "nspluginviewer"); #else kdDebug(1430) << "3 - create QXtEventLoop" << endl; QXtEventLoop integrator("nspluginviewer"); parseCommandLine(argc, argv); KLocale::setMainCatalogue("nsplugin"); kdDebug(1430) << "4 - create KApplication" << endl; KApplication app(argc, argv, "nspluginviewer"); GlibEvents glibevents; #endif { KConfig cfg("kcmnspluginrc", true); cfg.setGroup("Misc"); int v = KCLAMP(cfg.readNumEntry("Nice Level", 0), 0, 19); if(v > 0) { nice(v); } v = cfg.readNumEntry("Max Memory", 0); if(v > 0) { rlimit rl; memset(&rl, 0, sizeof(rl)); if(0 == getrlimit(RLIMIT_AS, &rl)) { rl.rlim_cur = kMin(v, int(rl.rlim_max)); setrlimit(RLIMIT_AS, &rl); } } } // initialize the dcop client kdDebug(1430) << "5 - app.dcopClient" << endl; DCOPClient *dcop = app.dcopClient(); if(!dcop->attach()) { KMessageBox::error(NULL, i18n("There was an error connecting to the Desktop " "communications server. Please make sure that " "the 'dcopserver' process has been started, and " "then try again."), i18n("Error Connecting to DCOP Server")); exit(1); } kdDebug(1430) << "6 - dcop->registerAs" << endl; if(g_dcopId) g_dcopId = dcop->registerAs(g_dcopId, false); else g_dcopId = dcop->registerAs("nspluginviewer"); dcop->setNotifications(true); // create dcop interface kdDebug(1430) << "7 - new NSPluginViewer" << endl; NSPluginViewer *viewer = new NSPluginViewer("viewer", 0); // start main loop #if QT_VERSION < 0x030100 kdDebug(1430) << "8 - XtAppProcessEvent" << endl; while(!g_quit) XtAppProcessEvent(g_appcon, XtIMAll); #else kdDebug(1430) << "8 - app.exec()" << endl; app.exec(); #endif // delete viewer delete viewer; }
int main(int argc, char **argv) { int argi = 1; while((argi < argc) && (argv[argi][0] == '-')) { switch(argv[argi][1]) { case 'l': bLaunchApp = true; break; case 'a': bAppIdOnly = true; break; default: usage(); } argi++; } if(argc <= argi) usage(); DCOPClient client; client.attach(); dcop = &client; QCString app; QCString objid; QCString function; char **args = 0; if((argc > argi) && (strncmp(argv[argi], "DCOPRef(", 8)) == 0) { char *delim = strchr(argv[argi], ','); if(!delim) { fprintf(stderr, "Error: '%s' is not a valid DCOP reference.\n", argv[argi]); return 1; } *delim = 0; app = argv[argi++] + 8; delim++; delim[strlen(delim) - 1] = 0; objid = delim; } else { if(argc > argi) app = argv[argi++]; if(argc > argi) objid = argv[argi++]; } if(argc > argi) function = argv[argi++]; if(argc > argi) { args = &argv[argi]; argc = argc - argi; } else { argc = 0; } KStringList params; for(int i = 0; i < argc; i++) params.append(args[i]); bool ok = findObject(app, objid, function, params); if(ok) return 0; if(bLaunchApp) { ok = launchApp(app); if(!ok) return 2; ok = findObject(app, objid, function, params); } return 1; }