#include <KFileItem>
#include <KNotification>
#include <KNotifyConfigWidget>
+#if KDE_IS_VERSION(4,3,80)
+#include <knewstuff3/downloaddialog.h>
+#include <knewstuff3/knewstuffaction.h>
+#else
#include <knewstuff2/engine.h>
#include <knewstuff2/ui/knewstuffaction.h>
+#define KNS3 KNS
+#endif /* KDE_IS_VERSION(4,3,80) */
#include <KToolBar>
#include <KColorScheme>
tabifyDockWidget(m_clipMonitorDock, m_recMonitorDock);
#endif
setCentralWidget(m_timelineArea);
-
-
setupGUI();
+ // Find QDockWidget tab bars and show / hide widget title bars on right click
+ QList <QTabBar *> tabs = findChildren<QTabBar *>();
+ for (int i = 0; i < tabs.count(); i++) {
+ tabs.at(i)->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(tabs.at(i), SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(slotSwitchTitles()));
+ }
+
/*ScriptingPart* sp = new ScriptingPart(this, QStringList());
guiFactory()->addClient(sp);*/
m_projectMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), m_playZone, m_loopZone);
m_clipMonitor->setupMenu(static_cast<QMenu*>(factory()->container("monitor_go", this)), m_playZone, m_loopZone, static_cast<QMenu*>(factory()->container("marker_menu", this)));
- m_projectList->setupGeneratorMenu(static_cast<QMenu*>(factory()->container("generators", this)), static_cast<QMenu*>(factory()->container("transcoders", this)));
+
+ QMenu *clipInTimeline = static_cast<QMenu*>(factory()->container("clip_in_timeline", this));
+ clipInTimeline->setIcon(KIcon("go-jump"));
+ m_projectList->setupGeneratorMenu(static_cast<QMenu*>(factory()->container("generators", this)),
+ static_cast<QMenu*>(factory()->container("transcoders", this)),
+ clipInTimeline);
QAction *action;
// build themes menus
m_timelineContextMenu->addAction(actionCollection()->action("delete_space"));
m_timelineContextMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Paste)));
+ m_timelineContextClipMenu->addAction(actionCollection()->action("clip_in_project_tree"));
+ m_timelineContextClipMenu->addAction(actionCollection()->action("edit_item_duration"));
m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip"));
m_timelineContextClipMenu->addAction(actionCollection()->action("group_clip"));
m_timelineContextClipMenu->addAction(actionCollection()->action("ungroup_clip"));
//TODO: re-enable custom effects menu when it is implemented
m_timelineContextClipMenu->addMenu(m_customEffectsMenu);
+ m_timelineContextTransitionMenu->addAction(actionCollection()->action("edit_item_duration"));
m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_timeline_clip"));
m_timelineContextTransitionMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy)));
m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor);
slotConnectMonitors();
+ // Disable drop B frames, see Kdenlive issue #1330, see also kdenlivesettingsdialog.cpp
+ KdenliveSettings::setDropbframes(false);
+
// Open or create a file. Command line argument passed in Url has
// precedence, then "openlastproject", then just a plain empty file.
// If opening Url fails, openlastproject will _not_ be used.
m_projectList->setRenderer(m_projectMonitor->render);
//connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
+ connect(m_projectList, SIGNAL(deleteProjectClips(QStringList, QMap<QString, QString>)), this, SLOT(slotDeleteProjectClips(QStringList, QMap<QString, QString>)));
connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
connect(m_projectList, SIGNAL(showClipProperties(QList <DocClipBase *>, QMap<QString, QString>)), this, SLOT(slotShowClipProperties(QList <DocClipBase *>, QMap<QString, QString>)));
connect(m_projectList, SIGNAL(getFileProperties(const QDomElement, const QString &, int, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, int, bool)));
statusBar()->setStyleSheet(QString("QStatusBar QLabel {font-size:%1pt;} QStatusBar::item { border: 0px; font-size:%1pt;padding:0px; }").arg(statusBar()->font().pointSize()));
QString style1 = "QToolBar { border: 0px } QToolButton { border-style: inset; border:1px solid #999999;border-radius: 3px;margin: 0px 3px;padding: 0px;} QToolButton:checked { background-color: rgba(224, 224, 0, 100); border-style: inset; border:1px solid #cc6666;border-radius: 3px;}";
- // create edit mode buttons
+ //create edit mode buttons
m_normalEditTool = new KAction(KIcon("kdenlive-normal-edit"), i18n("Normal mode"), this);
m_normalEditTool->setShortcut(i18nc("Normal editing", "n"));
toolbar->addAction(m_normalEditTool);
collection->addAction("manage_profiles", profilesAction);
connect(profilesAction, SIGNAL(triggered(bool)), this, SLOT(slotEditProfiles()));
- KNS::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas");
+ KNS3::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas");
- KNS::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles");
+ KNS3::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles");
- KNS::standardAction(i18n("Download New Project Profiles..."), this, SLOT(slotGetNewMltProfileStuff()), actionCollection(), "get_new_mlt_profiles");
+ KNS3::standardAction(i18n("Download New Project Profiles..."), this, SLOT(slotGetNewMltProfileStuff()), actionCollection(), "get_new_mlt_profiles");
+
+ KNS3::standardAction(i18n("Download New Title Templates..."), this, SLOT(slotGetNewTitleStuff()), actionCollection(), "get_new_titles");
KAction* wizAction = new KAction(KIcon("configure"), i18n("Run Config Wizard"), this);
collection->addAction("run_wizard", wizAction);
ungroupClip->setData("ungroup_clip");
connect(ungroupClip, SIGNAL(triggered(bool)), this, SLOT(slotUnGroupClips()));
+ KAction* editItemDuration = new KAction(KIcon("measure"), i18n("Edit Duration"), this);
+ collection->addAction("edit_item_duration", editItemDuration);
+ connect(editItemDuration, SIGNAL(triggered(bool)), this, SLOT(slotEditItemDuration()));
+
+ KAction* clipInProjectTree = new KAction(KIcon("go-jump-definition"), i18n("Clip in Project Tree"), this);
+ collection->addAction("clip_in_project_tree", clipInProjectTree);
+ connect(clipInProjectTree, SIGNAL(triggered(bool)), this, SLOT(slotClipInProjectTree()));
+
KAction* insertOvertwrite = new KAction(KIcon(), i18n("Insert Clip Zone in Timeline (Overwrite)"), this);
insertOvertwrite->setShortcut(Qt::Key_V);
collection->addAction("overwrite_to_in_point", insertOvertwrite);
showTimeline->setChecked(true);
connect(showTimeline, SIGNAL(triggered(bool)), this, SLOT(slotShowTimeline(bool)));
+ QAction *showTitleBar = new KAction(i18n("Show Title Bars"), this);
+ collection->addAction("show_titlebars", showTitleBar);
+ showTitleBar->setCheckable(true);
+ connect(showTitleBar, SIGNAL(triggered(bool)), this, SLOT(slotShowTitleBars(bool)));
+ showTitleBar->setChecked(KdenliveSettings::showtitlebars());
+ slotShowTitleBars(KdenliveSettings::showtitlebars());
+
/*QAction *maxCurrent = new KAction(i18n("Maximize Current Widget"), this);
collection->addAction("maximize_current", maxCurrent);
maxCurrent->setCheckable(true);
connectDocumentInfo(doc);
connectDocument(trackView, doc);
} else m_timelineArea->setTabBarHidden(false);
+ m_monitorManager->activateMonitor("clip");
m_closeAction->setEnabled(m_timelineArea->count() > 1);
}
m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList());
m_effectStack->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode());
+ m_projectList->updateProjectFormat(m_activeDocument->timecode());
if (m_renderWidget) m_renderWidget->setProfile(m_activeDocument->mltProfile());
m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description());
//m_activeDocument->clipManager()->resetProducersList(m_projectMonitor->render->producersList());
if (updateFps) m_activeTimeline->updateProjectFps();
m_activeDocument->setModified(true);
m_commandStack->activeStack()->clear();
+ //Update the mouse position display so it will display in DF/NDF format by default based on the project setting.
+ slotUpdateMousePosition(0);
// We need to desactivate & reactivate monitors to get a refresh
//m_monitorManager->switchMonitors();
}
m_renderWidget->setRenderProfile(m_activeDocument->getDocumentProperty("renderdestination"), m_activeDocument->getDocumentProperty("rendercategory"), m_activeDocument->getDocumentProperty("renderprofile"), m_activeDocument->getDocumentProperty("renderurl"));
}
}
+ slotCheckRenderStatus();
/*TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
if (currentTab) m_renderWidget->setTimeline(currentTab);
m_renderWidget->setDocument(m_activeDocument);*/
m_renderWidget->showNormal();
}
+void MainWindow::slotCheckRenderStatus()
+{
+ // Make sure there are no missing clips
+ if (m_renderWidget) m_renderWidget->missingClips(m_projectList->hasMissingClips());
+}
+
void MainWindow::setRenderingProgress(const QString &url, int progress)
{
if (m_renderWidget) m_renderWidget->setRenderJob(url, progress);
disconnect(m_activeTimeline, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
disconnect(m_projectList, SIGNAL(loadingIsOver()), m_activeTimeline->projectView(), SLOT(slotUpdateAllThumbs()));
disconnect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
+ disconnect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus()));
disconnect(m_projectList, SIGNAL(clipNeedsReload(const QString&, bool)), m_activeTimeline->projectView(), SLOT(slotUpdateClip(const QString &, bool)));
m_effectStack->clear();
}
connect(m_projectList, SIGNAL(projectModified()), doc, SLOT(setModified()));
connect(m_projectList, SIGNAL(clipNameChanged(const QString, const QString)), trackView->projectView(), SLOT(clipNameChanged(const QString, const QString)));
+ connect(m_projectList, SIGNAL(findInTimeline(const QString&)), this, SLOT(slotClipInTimeline(const QString&)));
+
connect(trackView, SIGNAL(cursorMoved()), m_projectMonitor, SLOT(activateMonitor()));
connect(trackView, SIGNAL(insertTrack(int)), this, SLOT(slotInsertTrack(int)));
connect(trackView, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs()));
connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
+ connect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus()));
- trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup);
+ trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup, (QMenu*)(factory()->container("marker_menu", this)));
m_activeTimeline = trackView;
if (m_renderWidget) {
+ slotCheckRenderStatus();
m_renderWidget->setProfile(doc->mltProfile());
m_renderWidget->setGuides(doc->guidesXml(), doc->projectDuration());
m_renderWidget->setDocumentPath(doc->projectFolder().path(KUrl::AddTrailingSlash));
m_activeTimeline->updateProjectFps();
m_activeDocument->checkProjectClips();
if (KdenliveSettings::dropbframes()) slotUpdatePreviewSettings();
-
+ //Update the mouse position display so it will display in DF/NDF format by default based on the project setting.
+ slotUpdateMousePosition(0);
// set tool to select tool
m_buttonSelectTool->setChecked(true);
}
m_projectMonitor->activateMonitor();
if (m_activeTimeline)
m_activeTimeline->projectView()->slotInsertTrack(ix);
+ if (m_activeDocument)
+ m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList());
}
void MainWindow::slotDeleteTrack(int ix)
m_projectMonitor->activateMonitor();
if (m_activeTimeline)
m_activeTimeline->projectView()->slotDeleteTrack(ix);
+ if (m_activeDocument)
+ m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList());
}
void MainWindow::slotChangeTrack(int ix)
}
}
+void MainWindow::slotEditItemDuration()
+{
+ if (m_activeTimeline) {
+ m_activeTimeline->projectView()->editItemDuration();
+ }
+}
+
void MainWindow::slotAddProjectClip(KUrl url)
{
if (m_activeDocument)
if (progress >= 0) {
if (!message.isEmpty()) m_messageLabel->setMessage(message, InformationMessage);//statusLabel->setText(message);
m_statusProgressBar->setVisible(true);
+ } else if (progress == -2) {
+ if (!message.isEmpty()) m_messageLabel->setMessage(message, ErrorMessage);
+ m_statusProgressBar->setVisible(false);
} else {
m_messageLabel->setMessage(QString(), DefaultMessage);
m_statusProgressBar->setVisible(false);
if (dia_ui->exec() == QDialog::Accepted) {
QMap <QString, QString> newprops;
newprops.insert("xmldata", dia_ui->xml().toString());
- if (dia_ui->duration() != clip->duration().frames(m_activeDocument->fps()) - 1) {
+ if (dia_ui->outPoint() != clip->duration().frames(m_activeDocument->fps()) - 1) {
// duration changed, we need to update duration
- newprops.insert("out", QString::number(dia_ui->duration()));
+ newprops.insert("out", QString::number(dia_ui->outPoint()));
}
EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
m_activeDocument->commandStack()->push(command);
- m_activeTimeline->projectView()->slotUpdateClip(clip->getId());
+ //m_activeTimeline->projectView()->slotUpdateClip(clip->getId());
m_activeDocument->setModified(true);
}
delete dia_ui;
removeEventFilter(this);
}
+void MainWindow::slotClipInTimeline(const QString &clipId)
+{
+ if (m_activeTimeline && m_activeDocument) {
+ QList<ItemInfo> matching = m_activeTimeline->projectView()->findId(clipId);
+
+ QMenu *inTimelineMenu = static_cast<QMenu*>(factory()->container("clip_in_timeline", this));
+ inTimelineMenu->clear();
+
+ QList <QAction *> actionList;
+
+ for (int i = 0; i < matching.count(); ++i) {
+ QString track = QString::number(matching.at(i).track);
+ QString start = m_activeDocument->timecode().getTimecode(matching.at(i).startPos);
+ int j = 0;
+ QAction *a = new QAction(track + ": " + start, this);
+ a->setData(QStringList() << track << start);
+ connect(a, SIGNAL(triggered()), this, SLOT(slotSelectClipInTimeline()));
+ while (j < actionList.count()) {
+ if (actionList.at(j)->text() > a->text()) break;
+ j++;
+ }
+ actionList.insert(j, a);
+
+ }
+ inTimelineMenu->addActions(actionList);
+
+ if (matching.empty())
+ inTimelineMenu->setEnabled(false);
+ else
+ inTimelineMenu->setEnabled(true);
+ }
+}
+
+void MainWindow::slotClipInProjectTree()
+{
+ if (m_activeTimeline) {
+ const QStringList &clipIds = m_activeTimeline->projectView()->selectedClips();
+ if (clipIds.isEmpty()) return;
+ m_projectListDock->raise();
+ for (int i = 0; i < clipIds.count(); i++) {
+ m_projectList->selectItemById(clipIds.at(i));
+ }
+ if (m_projectMonitor->isActive())
+ slotSwitchMonitors();
+ }
+}
+
+void MainWindow::slotSelectClipInTimeline()
+{
+ if (m_activeTimeline) {
+ QAction *action = qobject_cast<QAction *>(sender());
+ QStringList data = action->data().toStringList();
+ m_activeTimeline->projectView()->selectFound(data.at(0), data.at(1));
+ }
+}
+
void MainWindow::keyPressEvent(QKeyEvent *ke)
{
if (m_findActivated) {
if (m_activeTimeline) m_activeTimeline->projectView()->setOutPoint();
}
+int MainWindow::getNewStuff(const QString &configFile)
+{
+ KNS3::Entry::List entries;
+#if KDE_IS_VERSION(4,3,80)
+ KNS3::DownloadDialog dialog(configFile);
+ dialog.exec();
+ entries = dialog.changedEntries();
+ foreach(const KNS3::Entry &entry, entries) {
+ if (entry.status() == KNS3::Entry::Installed)
+ kDebug() << "// Installed files: " << entry.installedFiles();
+ }
+#else
+ KNS::Engine engine(0);
+ if (engine.init(configFile))
+ entries = engine.downloadDialogModal(this);
+ foreach(KNS::Entry *entry, entries) {
+ if (entry->status() == KNS::Entry::Installed)
+ kDebug() << "// Installed files: " << entry->installedFiles();
+ }
+#endif /* KDE_IS_VERSION(4,3,80) */
+ return entries.size();
+}
+
+void MainWindow::slotGetNewTitleStuff()
+{
+ if (getNewStuff("kdenlive_titles.knsrc") > 0) {
+ TitleWidget::refreshTitleTemplates();
+ }
+}
+
void MainWindow::slotGetNewLumaStuff()
{
- //KNS::Entry::List download();
- KNS::Entry::List entries = KNS::Engine::download();
- // list of changed entries
- kDebug() << "// PARSING KNS";
- foreach(KNS::Entry* entry, entries) {
- // care only about installed ones
- if (entry->status() == KNS::Entry::Installed) {
- foreach(const QString &file, entry->installedFiles()) {
- kDebug() << "// CURRENTLY INSTALLED: " << file;
- }
- }
+ if (getNewStuff("kdenlive_wipes.knsrc") > 0) {
+ initEffects::refreshLumas();
+ m_activeTimeline->projectView()->reloadTransitionLumas();
}
- qDeleteAll(entries);
- initEffects::refreshLumas();
- m_activeTimeline->projectView()->reloadTransitionLumas();
}
void MainWindow::slotGetNewRenderStuff()
{
- //KNS::Entry::List download();
-
- KNS::Engine engine(0);
- if (engine.init("kdenlive_render.knsrc")) {
- KNS::Entry::List entries = engine.downloadDialogModal(this);
-
- if (entries.size() > 0) {
- foreach(KNS::Entry* entry, entries) {
- // care only about installed ones
- if (entry->status() == KNS::Entry::Installed) {
- foreach(const QString &file, entry->installedFiles()) {
- kDebug() << "// CURRENTLY INSTALLED: " << file;
- }
- }
- }
- }
- if (m_renderWidget) m_renderWidget->reloadProfiles();
+ if (getNewStuff("kdenlive_renderprofiles.knsrc") > 0) {
+ if (m_renderWidget)
+ m_renderWidget->reloadProfiles();
}
}
void MainWindow::slotGetNewMltProfileStuff()
{
- //KNS::Entry::List download();
-
- KNS::Engine engine(0);
- if (engine.init("kdenlive_mltprofiles.knsrc")) {
- KNS::Entry::List entries = engine.downloadDialogModal(this);
-
- if (entries.size() > 0) {
- foreach(KNS::Entry* entry, entries) {
- // care only about installed ones
- if (entry->status() == KNS::Entry::Installed) {
- foreach(const QString &file, entry->installedFiles()) {
- kDebug() << "// CURRENTLY INSTALLED: " << file;
- }
- }
- }
-
- // update the list of profiles in settings dialog
- KdenliveSettingsDialog* d = static_cast <KdenliveSettingsDialog*>(KConfigDialog::exists("settings"));
- if (d) d->checkProfile();
- }
+ if (getNewStuff("kdenlive_projectprofiles.knsrc") > 0) {
+ // update the list of profiles in settings dialog
+ KdenliveSettingsDialog* d = static_cast <KdenliveSettingsDialog*>(KConfigDialog::exists("settings"));
+ if (d)
+ d->checkProfile();
}
}
KdenliveSettings::setFrametimecode(ix == 1);
m_clipMonitor->updateTimecodeFormat();
m_projectMonitor->updateTimecodeFormat();
+ m_activeTimeline->projectView()->clearSelection();
}
void MainWindow::slotRemoveFocus()
if (interface && interface->isServiceRegistered("org.kde.ksmserver")) {
QDBusInterface smserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface");
smserver.call("logout", 1, 2, 2);
+ } else if (interface && interface->isServiceRegistered("org.gnome.SessionManager")) {
+ QDBusInterface smserver("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager");
+ smserver.call("Shutdown");
}
}
void MainWindow::slotSwitchMonitors()
{
- m_monitorManager->slotSwitchMonitors();
+ m_monitorManager->slotSwitchMonitors(!m_clipMonitor->isActive());
if (m_projectMonitor->isActive()) m_activeTimeline->projectView()->setFocus();
else m_projectList->focusTree();
}
m_activeTimeline->projectView()->insertClipCut(m_clipMonitor->activeClip(), info.at(1).toInt(), info.at(2).toInt());
}
+
+void MainWindow::slotDeleteProjectClips(QStringList ids, QMap<QString, QString> folderids)
+{
+ for (int i = 0; i < ids.size(); ++i) {
+ m_activeTimeline->slotDeleteClip(ids.at(i));
+ }
+ m_activeDocument->clipManager()->slotDeleteClips(ids);
+ if (!folderids.isEmpty()) m_projectList->deleteProjectFolder(folderids);
+
+}
+
+void MainWindow::slotShowTitleBars(bool show)
+{
+ if (show) {
+ m_effectStackDock->setTitleBarWidget(0);
+ m_clipMonitorDock->setTitleBarWidget(0);
+ m_projectMonitorDock->setTitleBarWidget(0);
+#ifndef Q_WS_MAC
+ m_recMonitorDock->setTitleBarWidget(0);
+#endif
+ m_effectListDock->setTitleBarWidget(0);
+ m_transitionConfigDock->setTitleBarWidget(0);
+ m_projectListDock->setTitleBarWidget(0);
+ m_undoViewDock->setTitleBarWidget(0);
+ } else {
+ if (!m_effectStackDock->isFloating()) m_effectStackDock->setTitleBarWidget(new QWidget(this));
+ if (!m_clipMonitorDock->isFloating()) m_clipMonitorDock->setTitleBarWidget(new QWidget(this));
+ if (!m_projectMonitorDock->isFloating()) m_projectMonitorDock->setTitleBarWidget(new QWidget(this));
+#ifndef Q_WS_MAC
+ if (!m_recMonitorDock->isFloating()) m_recMonitorDock->setTitleBarWidget(new QWidget(this));
+#endif
+ if (!m_effectListDock->isFloating()) m_effectListDock->setTitleBarWidget(new QWidget(this));
+ if (!m_transitionConfigDock->isFloating()) m_transitionConfigDock->setTitleBarWidget(new QWidget(this));
+ if (!m_projectListDock->isFloating()) m_projectListDock->setTitleBarWidget(new QWidget(this));
+ if (!m_undoViewDock->isFloating()) m_undoViewDock->setTitleBarWidget(new QWidget(this));
+ }
+ KdenliveSettings::setShowtitlebars(show);
+}
+
+void MainWindow::slotSwitchTitles()
+{
+ slotShowTitleBars(!KdenliveSettings::showtitlebars());
+}
+
#include "mainwindow.moc"