From: Jean-Baptiste Mardelle Date: Sat, 26 Sep 2009 23:44:46 +0000 (+0000) Subject: Add option to shutdown after rendering, only works for KDE sessions: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=e9617ed4bae8178da9d5572298a9d46adb9303a3;p=kdenlive Add option to shutdown after rendering, only works for KDE sessions: http://www.kdenlive.org/mantis/view.php?id=1162 svn path=/trunk/kdenlive/; revision=3944 --- diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index fbab57bc..5c2f461e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1669,6 +1669,7 @@ void MainWindow::slotRenderProject() if (!m_renderWidget) { QString projectfolder = m_activeDocument ? m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) : KdenliveSettings::defaultprojectfolder(); m_renderWidget = new RenderWidget(projectfolder, this); + connect(m_renderWidget, SIGNAL(shutdown()), this, SLOT(slotShutdown())); connect(m_renderWidget, SIGNAL(selectedRenderProfile(const QString &, const QString &, const QString&)), this, SLOT(slotSetDocumentRenderProfile(const QString &, const QString &, const QString&))); connect(m_renderWidget, SIGNAL(prepareRenderingData(bool, bool, const QString&)), this, SLOT(slotPrepareRendering(bool, bool, const QString&))); connect(m_renderWidget, SIGNAL(abortProcess(const QString &)), this, SIGNAL(abortRenderJob(const QString &))); @@ -2861,4 +2862,16 @@ void MainWindow::slotRevert() doOpenFile(url, NULL); } + +void MainWindow::slotShutdown() +{ + if (m_activeDocument) m_activeDocument->setModified(false); + // Call shutdown + QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); + if (interface && interface->isServiceRegistered("org.kde.ksmserver")) { + QDBusInterface smserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface"); + smserver.call("logout", 1, 2, 2); + } +} + #include "mainwindow.moc" diff --git a/src/mainwindow.h b/src/mainwindow.h index b953edf2..85d9863e 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -317,6 +317,7 @@ private slots: void slotSetZoom(int value); void slotUpdateClipMarkers(DocClipBase *clip); void slotRevert(); + void slotShutdown(); signals: Q_SCRIPTABLE void abortRenderJob(const QString &url); diff --git a/src/recmonitor.cpp b/src/recmonitor.cpp index 35adf535..d5450088 100644 --- a/src/recmonitor.cpp +++ b/src/recmonitor.cpp @@ -380,7 +380,7 @@ void RecMonitor::slotStartCapture(bool play) m_captureProcess->setStandardOutputProcess(m_displayProcess); m_captureProcess->setWorkingDirectory(KdenliveSettings::capturefolder()); kDebug() << "Capture: Running dvgrab " << m_captureArgs.join(" "); - + m_captureProcess->start(KdenliveSettings::dvgrab_path(), m_captureArgs); if (play) m_captureProcess->write(" ", 1); m_discAction->setEnabled(true); diff --git a/src/renderwidget.cpp b/src/renderwidget.cpp index 8c3906fb..8af8002b 100644 --- a/src/renderwidget.cpp +++ b/src/renderwidget.cpp @@ -42,6 +42,8 @@ #include #include #include +#include +#include const int GroupRole = Qt::UserRole; const int ExtensionRole = GroupRole + 1; @@ -186,6 +188,11 @@ RenderWidget::RenderWidget(const QString &projectfolder, QWidget * parent) : if (m_renderer.isEmpty()) m_renderer = "kdenlive_render"; } + QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); + if (!interface || !interface->isServiceRegistered("org.kde.ksmserver")) { + m_view.shutdown->setEnabled(false); + } + focusFirstVisibleItem(); } @@ -815,6 +822,7 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const void RenderWidget::checkRenderStatus() { + // check if we have a job waiting to render if (m_blockProcessing) return; QTreeWidgetItem *item = m_view.running_jobs->topLevelItem(0); while (item) { @@ -822,9 +830,11 @@ void RenderWidget::checkRenderStatus() item = m_view.running_jobs->itemBelow(item); } item = m_view.running_jobs->topLevelItem(0); + bool waitingJob = false; while (item) { if (item->data(1, Qt::UserRole + 2).toInt() == WAITINGJOB) { item->setData(1, Qt::UserRole + 1, QTime::currentTime()); + waitingJob = true; if (item->data(1, Qt::UserRole + 4).isNull()) { // Normal render process if (QProcess::startDetached(m_renderer, item->data(1, Qt::UserRole + 3).toStringList()) == false) { @@ -846,6 +856,7 @@ void RenderWidget::checkRenderStatus() } item = m_view.running_jobs->itemBelow(item); } + if (waitingJob == false && m_view.shutdown->isChecked()) emit shutdown(); } int RenderWidget::waitingJobsCount() const diff --git a/src/renderwidget.h b/src/renderwidget.h index 90064792..371731d6 100644 --- a/src/renderwidget.h +++ b/src/renderwidget.h @@ -162,6 +162,7 @@ signals: (profile destination, profile name and url of rendered file */ void selectedRenderProfile(const QString &, const QString &, const QString &); void prepareRenderingData(bool scriptExport, bool zoneOnly, const QString &chapterFile); + void shutdown(); }; diff --git a/src/widgets/renderwidget_ui.ui b/src/widgets/renderwidget_ui.ui index 4825b31b..1004d42a 100644 --- a/src/widgets/renderwidget_ui.ui +++ b/src/widgets/renderwidget_ui.ui @@ -338,7 +338,7 @@ Job Queue - + Qt::Horizontal @@ -351,14 +351,14 @@ - + Abort Job - + Close @@ -426,13 +426,20 @@ - + Clean Up + + + + Shutdown computer after renderings + + +