void MainWorker::iterationTimerLoop() { static bool mutex = false; static unsigned int breakCounter = 0; #ifdef LEVEL_DATA debug(F("[DATA]: ")); debug(F("breakCounter is: ")); debug(breakCounter); debug(F(" ")); debug(F("Mutex is: ")); debug(mutex); debug(F("\r\n")); #endif HWdata.checkPins(); if ((breakCounter == 0) && (!mutex)) { mutex = true; wachdog.doCheckpoint(); mainLoop(); wachdog.doCheckpoint(); mutex = false; } else if ((breakCounter != 0) && (!mutex)) screensaver(TIMER_PERIOD * 60 - breakCounter); ++breakCounter; if ((breakCounter >= TIMER_PERIOD * 60) && (!mutex)) breakCounter = 0; }
int mvpw_event_flush(void) { GR_EVENT event; if (widget_count == 0) return -1; while (widget_count > 0) { GrCheckNextEvent(&event); switch (event.type) { case GR_EVENT_TYPE_EXPOSURE: exposure(&event.exposure); break; case GR_EVENT_TYPE_KEY_DOWN: keystroke(&event.keystroke); break; case GR_EVENT_TYPE_TIMER: timer(&event.timer); break; case GR_EVENT_TYPE_SCREENSAVER: screensaver(&event.screensaver); break; case GR_EVENT_TYPE_FDINPUT: fdinput(&event.fdinput); break; case GR_EVENT_TYPE_NONE: return 0; break; } } return 0; }
/*! Creates and returns a screensaver on the given token. \param token Identifies the screensaver to be created. \return The created state. */ Screensaver* ScreensaverFactoryPrivate::createScreensaver(const ScreensaverToken &token) { QStringList pluginPaths; // check plugin dirs from root of different drives QFileInfoList drives = QDir::drives(); for(int i=0; i < drives.count(); i++) { QFileInfo drive = drives.at(i); QString driveLetter = drive.absolutePath(); QString path = driveLetter + mPluginDirectory; if (QDir(path).exists()) { pluginPaths << path; } } // check plugin dir relative to current dir if (QDir(mPluginDirectory).exists() && !pluginPaths.contains(QDir(mPluginDirectory).absolutePath())) { pluginPaths << mPluginDirectory; } IScreensaverProvider *provider(0); QPluginLoader *loader = new QPluginLoader(); QObject *plugin(0); for(int i=0; i < pluginPaths.count(); i++) { QString path = pluginPaths.at(i); QString fileName = QDir(path).absoluteFilePath(token.mLibrary); loader->setFileName(fileName); plugin = loader->instance(); provider = qobject_cast<IScreensaverProvider*>(plugin); if (provider) { break; } } Screensaver *screensaver(0); if (provider) { screensaver = provider->createScreensaver(token); if (!screensaver) { qWarning() << "Screensaver creation failed."; qWarning() << token.mLibrary << "cannot provide" << token.mUri; loader->unload(); delete loader; } else { // unload plugin once screensaver gets deleted ScreensaverPluginUnloader *unloader = new ScreensaverPluginUnloader(loader); unloader->connect(screensaver, SIGNAL(destroyed()), SLOT(deleteLater())); } } else { qDebug() << "Screensaver creation failed."; qWarning() << token.mLibrary << "- provider not found"; loader->unload(); delete loader; } return screensaver; }
//---------------------------------------------------------------- // ScreenSaverInhibitor::screenSaverUnInhibit // void ScreenSaverInhibitor::screenSaverUnInhibit() { #if !defined(__APPLE__) && !defined(_WIN32) if (cookie_ && QDBusConnection::sessionBus().isConnected()) { QDBusInterface screensaver("org.freedesktop.ScreenSaver", "/ScreenSaver"); if (screensaver.isValid()) { screensaver.call(QDBus::NoBlock, "UnInhibit", QVariant(cookie_)); cookie_ = 0; } } #endif }
void kredentials::tryPassGetTicketsScreenSaverSafe(){ // check if screen saver is active (blanked) // if so, don't prompt the password dialog this time // and don't try to get new tickets, either the screen // saver unlock will do it, either it will pop-up once // screen saver will be deactivated // XXX TEMPORARILY disable dcop stuff while porting to KDE4 #if 0 DCOPRef screensaver("kdesktop", "KScreensaverIface"); DCOPReply reply = screensaver.call("isBlanked"); if (!reply.isValid()) { LOG<<"There is some error using DCOP to access screensaver status"; } else if (reply) { // screen saver is running return; } #endif tryPassGetTickets(); }
ServerProxy::EResult ServerProxy::parseMessage(const UInt8* code) { if (memcmp(code, kMsgDMouseMove, 4) == 0) { mouseMove(); } else if (memcmp(code, kMsgDMouseRelMove, 4) == 0) { mouseRelativeMove(); } else if (memcmp(code, kMsgDMouseWheel, 4) == 0) { mouseWheel(); } else if (memcmp(code, kMsgDKeyDown, 4) == 0) { keyDown(); } else if (memcmp(code, kMsgDKeyUp, 4) == 0) { keyUp(); } else if (memcmp(code, kMsgDMouseDown, 4) == 0) { mouseDown(); } else if (memcmp(code, kMsgDMouseUp, 4) == 0) { mouseUp(); } else if (memcmp(code, kMsgDKeyRepeat, 4) == 0) { keyRepeat(); } else if (memcmp(code, kMsgCKeepAlive, 4) == 0) { // echo keep alives and reset alarm ProtocolUtil::writef(m_stream, kMsgCKeepAlive); resetKeepAliveAlarm(); } else if (memcmp(code, kMsgCNoop, 4) == 0) { // accept and discard no-op } else if (memcmp(code, kMsgCEnter, 4) == 0) { enter(); } else if (memcmp(code, kMsgCLeave, 4) == 0) { leave(); } else if (memcmp(code, kMsgCClipboard, 4) == 0) { grabClipboard(); } else if (memcmp(code, kMsgCScreenSaver, 4) == 0) { screensaver(); } else if (memcmp(code, kMsgQInfo, 4) == 0) { queryInfo(); } else if (memcmp(code, kMsgCInfoAck, 4) == 0) { infoAcknowledgment(); } else if (memcmp(code, kMsgDClipboard, 4) == 0) { setClipboard(); } else if (memcmp(code, kMsgCResetOptions, 4) == 0) { resetOptions(); } else if (memcmp(code, kMsgDSetOptions, 4) == 0) { setOptions(); } else if (memcmp(code, kMsgDFileTransfer, 4) == 0) { fileChunkReceived(); } else if (memcmp(code, kMsgDDragInfo, 4) == 0) { dragInfoReceived(); } else if (memcmp(code, kMsgCClose, 4) == 0) { // server wants us to hangup LOG((CLOG_DEBUG1 "recv close")); m_client->disconnect(NULL); return kDisconnect; } else if (memcmp(code, kMsgEBad, 4) == 0) { LOG((CLOG_ERR "server disconnected due to a protocol error")); m_client->disconnect("server reported a protocol error"); return kDisconnect; } else { return kUnknown; } // send a reply. this is intended to work around a delay when // running a linux server and an OS X (any BSD?) client. the // client waits to send an ACK (if the system control flag // net.inet.tcp.delayed_ack is 1) in hopes of piggybacking it // on a data packet. we provide that packet here. i don't // know why a delayed ACK should cause the server to wait since // TCP_NODELAY is enabled. ProtocolUtil::writef(m_stream, kMsgCNoop); return kOkay; }
//---------------------------------------------------------------- // ScreenSaverInhibitor::screenSaverInhibit // void ScreenSaverInhibitor::screenSaverInhibit() { #ifdef __APPLE__ UpdateSystemActivity(UsrActivity); #elif defined(_WIN32) // http://www.codeproject.com/KB/system/disablescreensave.aspx // // Call the SystemParametersInfo function to query and reset the // screensaver time-out value. Use the user's default settings // in case your application terminates abnormally. // static UINT spiGetter[] = { SPI_GETLOWPOWERTIMEOUT, SPI_GETPOWEROFFTIMEOUT, SPI_GETSCREENSAVETIMEOUT }; static UINT spiSetter[] = { SPI_SETLOWPOWERTIMEOUT, SPI_SETPOWEROFFTIMEOUT, SPI_SETSCREENSAVETIMEOUT }; std::size_t numParams = sizeof(spiGetter) / sizeof(spiGetter[0]); for (std::size_t i = 0; i < numParams; i++) { UINT val = 0; BOOL ok = SystemParametersInfo(spiGetter[i], 0, &val, 0); YAE_ASSERT(ok); if (ok) { ok = SystemParametersInfo(spiSetter[i], val, NULL, 0); YAE_ASSERT(ok); } } #else // try using DBUS to talk to the screensaver... bool done = false; if (QDBusConnection::sessionBus().isConnected()) { QDBusInterface screensaver("org.freedesktop.ScreenSaver", "/ScreenSaver"); if (screensaver.isValid()) { // apparently SimulateUserActivity is not enough to keep Ubuntu // from starting the screensaver screensaver.call(QDBus::NoBlock, "SimulateUserActivity"); // try to inhibit the screensaver as well: if (!cookie_) { QDBusMessage out = screensaver.call(QDBus::Block, "Inhibit", QVariant(QApplication::applicationName()), QVariant("video playback")); if (out.type() == QDBusMessage::ReplyMessage && !out.arguments().empty()) { cookie_ = out.arguments().front().toUInt(); } } if (cookie_) { timerScreenSaverUnInhibit_.start(); } done = true; } } if (!done) { // FIXME: not sure how to do this yet std::cerr << "screenSaverInhibit" << std::endl; } #endif }
int main(int argc, char *argv[]) { LXQt::Application a(argc, argv); LXQt::Translator::translateApplication(); LXQt::PowerManager powermanager(&a); LXQt::ScreenSaver screensaver(&a); QCommandLineParser parser; parser.setApplicationDescription(QStringLiteral("lxqt-leave")); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption logoutOption(QStringLiteral("logout"), QCoreApplication::translate("main", "Logout.")); parser.addOption(logoutOption); QCommandLineOption lockscreenOption(QStringLiteral("lockscreen"), QCoreApplication::translate("main", "Lockscreen.")); parser.addOption(lockscreenOption); QCommandLineOption suspendOption(QStringLiteral("suspend"), QCoreApplication::translate("main", "Suspend.")); parser.addOption(suspendOption); QCommandLineOption hibernateOption(QStringLiteral("hibernate"), QCoreApplication::translate("main", "Hibernate.")); parser.addOption(hibernateOption); QCommandLineOption shutdownOption(QStringLiteral("shutdown"), QCoreApplication::translate("main", "Shutdown.")); parser.addOption(shutdownOption); QCommandLineOption rebootOption(QStringLiteral("reboot"), QCoreApplication::translate("main", "Reboot.")); parser.addOption(rebootOption); parser.process(a); if (parser.isSet(logoutOption)) { powermanager.logout(); return 0; } if (parser.isSet(lockscreenOption)) { a.connect(&screensaver, &LXQt::ScreenSaver::done, &a, &LXQt::Application::quit); screensaver.lockScreen(); a.exec(); return 0; } if (parser.isSet(suspendOption)) { powermanager.suspend(); return 0; } if (parser.isSet(hibernateOption)) { powermanager.hibernate(); return 0; } if (parser.isSet(shutdownOption)) { powermanager.shutdown(); return 0; } if (parser.isSet(rebootOption)) { powermanager.reboot(); return 0; } LeaveDialog dialog; dialog.setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, dialog.size(), qApp->desktop()->screenGeometry(QCursor::pos()))); dialog.setMaximumSize(dialog.minimumSize()); return dialog.exec(); }
void PowerManagementJob::start() { const QString operation = operationName(); //qDebug() << "starting operation ... " << operation; if (operation == QLatin1String("lockScreen")) { if (KAuthorized::authorizeKAction(QStringLiteral("lock_screen"))) { const QString interface(QStringLiteral("org.freedesktop.ScreenSaver")); QDBusInterface screensaver(interface, QStringLiteral("/ScreenSaver")); screensaver.asyncCall(QStringLiteral("Lock")); setResult(true); return; } qDebug() << "operation denied " << operation; setResult(false); return; } else if (operation == QLatin1String("suspend") || operation == QLatin1String("suspendToRam")) { Solid::PowerManagement::requestSleep(Solid::PowerManagement::SuspendState, 0, 0); setResult(Solid::PowerManagement::supportedSleepStates().contains(Solid::PowerManagement::SuspendState)); return; } else if (operation == QLatin1String("suspendToDisk")) { Solid::PowerManagement::requestSleep(Solid::PowerManagement::HibernateState, 0, 0); setResult(Solid::PowerManagement::supportedSleepStates().contains(Solid::PowerManagement::HibernateState)); return; } else if (operation == QLatin1String("suspendHybrid")) { Solid::PowerManagement::requestSleep(Solid::PowerManagement::HybridSuspendState, 0, 0); setResult(Solid::PowerManagement::supportedSleepStates().contains(Solid::PowerManagement::HybridSuspendState)); return; } else if (operation == QLatin1String("requestShutDown")) { requestShutDown(); setResult(true); return; } else if (operation == QLatin1String("switchUser")) { // Taken from kickoff/core/itemhandlers.cpp org::kde::krunner::App krunner(QStringLiteral("org.kde.krunner"), QStringLiteral("/App"), QDBusConnection::sessionBus()); krunner.switchUser(); setResult(true); return; } else if (operation == QLatin1String("beginSuppressingSleep")) { setResult(Solid::PowerManagement::beginSuppressingSleep(parameters().value(QStringLiteral("reason")).toString())); return; } else if (operation == QLatin1String("stopSuppressingSleep")) { setResult(Solid::PowerManagement::stopSuppressingSleep(parameters().value(QStringLiteral("cookie")).toInt())); return; } else if (operation == QLatin1String("beginSuppressingScreenPowerManagement")) { setResult(Solid::PowerManagement::beginSuppressingScreenPowerManagement(parameters().value(QStringLiteral("reason")).toString())); return; } else if (operation == QLatin1String("stopSuppressingScreenPowerManagement")) { setResult(Solid::PowerManagement::stopSuppressingScreenPowerManagement(parameters().value(QStringLiteral("cookie")).toInt())); return; } else if (operation == QLatin1String("setBrightness")) { setScreenBrightness(parameters().value(QStringLiteral("brightness")).toInt(), parameters().value(QStringLiteral("silent")).toBool()); setResult(true); return; } else if (operation == QLatin1String("setKeyboardBrightness")) { setKeyboardBrightness(parameters().value(QStringLiteral("brightness")).toInt(), parameters().value(QStringLiteral("silent")).toBool()); setResult(true); return; } qDebug() << "don't know what to do with " << operation; setResult(false); }