]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Various changes for getting an OpenGL context (almost) everywhere it is needed.
[kdenlive] / src / projectlist.cpp
index ad465df1591f49a14f55e0b2eb57fb91cc72e5e5..fcbc8e56ce924160378e0b79b52ad1b6407f3a87 100644 (file)
 #include <KHBox>
 
 #ifdef USE_NEPOMUK
-#include <nepomuk/global.h>
-#include <nepomuk/resourcemanager.h>
-#include <Nepomuk/Resource>
-//#include <nepomuk/tag.h>
+  #include <nepomuk/global.h>
+  #include <nepomuk/resourcemanager.h>
+  #include <Nepomuk/Resource>
+  //#include <nepomuk/tag.h>
 #endif
 
 #ifdef USE_NEPOMUKCORE
-#include <nepomuk2/resourcemanager.h>
-#include <Nepomuk2/Resource>
+  #include <nepomuk2/resourcemanager.h>
+  #include <Nepomuk2/Resource>
 #endif
 
 #include <QMouseEvent>
@@ -86,6 +86,7 @@
 #include <QtConcurrentRun>
 #include <QVBoxLayout>
 #include <KPassivePopup>
+#include <QGLWidget>
 
 
 MyMessageWidget::MyMessageWidget(QWidget *parent) : KMessageWidget(parent) {}
@@ -185,7 +186,7 @@ void SmallInfoLabel::slotSetJobCount(int jobCount)
     
 }
 
-ProjectList::ProjectList(QWidget *parent) :
+ProjectList::ProjectList(QGLWidget *glContext, QWidget *parent) :
     QWidget(parent)
   , m_render(NULL)
   , m_fps(-1)
@@ -204,6 +205,7 @@ ProjectList::ProjectList(QWidget *parent) :
   , m_abortAllJobs(false)
   , m_closing(false)
   , m_invalidClipDialog(NULL)
+  , m_mainGLContext(glContext)
 {
     qRegisterMetaType<stringMap> ("stringMap");
     QVBoxLayout *layout = new QVBoxLayout;
@@ -970,12 +972,18 @@ void ProjectList::slotUpdateClipProperties(ProjectItem *clip, QMap <QString, QSt
         emit clipNameChanged(clip->clipId(), properties.value("name"));
     }
     if (properties.contains("description")) {
+#ifdef USE_NEPOMUK
         ClipType type = clip->clipType();
+#endif
         monitorItemEditing(false);
         clip->setText(1, properties.value("description"));
         monitorItemEditing(true);
+
 #ifdef USE_NEPOMUK
-        if (KdenliveSettings::activate_nepomuk() && (type == Audio || type == Video || type == AV || type == Image || type == PLAYLIST)) {
+        bool hasType = (type == Audio || type == Video || type == AV ||
+                        type == Image || type == Playlist);
+
+        if (KdenliveSettings::activate_nepomuk() && hasType) {
             // Use Nepomuk system to store clip description
             Nepomuk::Resource f(clip->clipUrl().path());
             f.setDescription(properties.value("description"));
@@ -1525,6 +1533,10 @@ void ProjectList::getCachedThumbnail(SubProjectItem *item)
 
 void ProjectList::updateAllClips(bool displayRatioChanged, bool fpsChanged, const QStringList &brokenClips)
 {
+    // We are in a new thread, so we need a new OpenGL context for the remainder of the function.
+    QGLWidget ctx(0, m_mainGLContext);
+    ctx.makeCurrent();
+
     if (!m_allClipsProcessed) m_listView->setEnabled(false);
     m_listView->setSortingEnabled(false);
     QTreeWidgetItemIterator it(m_listView);