// the code was taken from pilotDaemon.cc in KPilot // static OSDWidget::KDesktopLockStatus OSDWidget::isKDesktopLockRunning() { if (!Preferences::oSDCheckDesktopLock()) return NotLocked; DCOPClient *dcopptr = KApplication::kApplication()->dcopClient(); // Can't tell, very weird if (!dcopptr || !dcopptr->isAttached()) { kdWarning() << k_funcinfo << ": Could not make DCOP connection." << endl; return DCOPError; } QByteArray data,returnValue; QCString returnType; if (!dcopptr->call("kdesktop","KScreensaverIface","isBlanked()", data,returnType,returnValue,true)) { // KDesktop is not running. Maybe we are in a KDE4 desktop... kdDebug() << k_funcinfo << ": Check for screensaver failed." << endl; return DCOPError; } if (returnType == "bool") { bool b; QDataStream reply(returnValue,IO_ReadOnly); reply >> b; return (b ? Locked : NotLocked); }
bool DCOPRef::sendInternal(const QCString &fun, const QCString &args, const QByteArray &data) { if(isNull()) { qWarning("DCOPRef: send '%s' on null reference error", STR(fun)); return false; } Q_UNUSED(data); QCString sig = fun; if(fun.find('(') == -1) { sig += args; if(args.find("<unknown") != -1) qWarning( "DCOPRef: unknown type error " "<\"%s\",\"%s\">::send(\"%s\",%s", STR(m_app), STR(m_obj), STR(fun), args.data() + 1); } DCOPClient *dc = dcopClient(); if(!dc || !dc->isAttached()) { qWarning("DCOPRef::send(): no DCOP client or client not attached error"); return false; } return dc->send(m_app, m_obj, sig, data); }
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; } }
DCOPReply DCOPRef::callInternal(const QCString &fun, const QCString &args, const QByteArray &data, EventLoopFlag useEventLoop, int timeout) { DCOPReply reply; if(isNull()) { qWarning("DCOPRef: call '%s' on null reference error", STR(fun)); return reply; } QCString sig = fun; if(fun.find('(') == -1) { sig += args; if(args.find("<unknown") != -1) qWarning( "DCOPRef: unknown type error " "<\"%s\",\"%s\">::call(\"%s\",%s", STR(m_app), STR(m_obj), STR(fun), args.data() + 1); } DCOPClient *dc = dcopClient(); if(!dc || !dc->isAttached()) { qWarning("DCOPRef::call(): no DCOP client or client not attached error"); return reply; } dc->call(m_app, m_obj, sig, data, reply.type, reply.data, useEventLoop == UseEventLoop, timeout); return reply; }
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; }
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 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 ); } }
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; }