Hello community,

here is the log from the commit of package kdenlive for openSUSE:Factory 
checked in at 2016-02-23 16:55:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kdenlive (Old)
 and      /work/SRC/openSUSE:Factory/.kdenlive.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kdenlive"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kdenlive/kdenlive.changes        2016-02-09 
13:32:36.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.kdenlive.new/kdenlive.changes   2016-02-23 
16:55:48.000000000 +0100
@@ -1,0 +2,9 @@
+Sat Feb 13 08:08:20 UTC 2016 - tittiatc...@gmail.com
+
+- Update to KDE Applications 15.12.2
+   * KDE Applications 15.12.2 
+   * https://www.kde.org/announcements/announce-applications-15.12.2.php
+   * boo#966605
+
+
+-------------------------------------------------------------------

Old:
----
  kdenlive-15.12.1.tar.xz

New:
----
  kdenlive-15.12.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kdenlive.spec ++++++
--- /var/tmp/diff_new_pack.S2lqZN/_old  2016-02-23 16:55:49.000000000 +0100
+++ /var/tmp/diff_new_pack.S2lqZN/_new  2016-02-23 16:55:49.000000000 +0100
@@ -19,13 +19,13 @@
 %define mlt_version 0.9.6
 
 Name:           kdenlive
-Version:        15.12.1
+Version:        15.12.2
 Release:        0
 Summary:        Non-linear video editor
 License:        GPL-3.0+
 Group:          Productivity/Multimedia/Video/Editors and Convertors
 Url:            http://www.kdenlive.org/
-Source0:        
http://download.kde.org/stable/applications/15.12.1/src/%{name}-%{version}.tar.xz
+Source0:        
http://download.kde.org/stable/applications/15.12.2/src/%{name}-%{version}.tar.xz
 Patch1:         use-mlt_datadir.patch
 BuildRequires:  desktop-file-utils
 BuildRequires:  fdupes

++++++ kdenlive-15.12.1.tar.xz -> kdenlive-15.12.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/CMakeLists.txt 
new/kdenlive-15.12.2/CMakeLists.txt
--- old/kdenlive-15.12.1/CMakeLists.txt 2016-01-08 00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/CMakeLists.txt 2016-02-12 06:18:54.000000000 +0100
@@ -6,7 +6,7 @@
 # KDE Application Version, managed by release script
 set (KDE_APPLICATIONS_VERSION_MAJOR "15")
 set (KDE_APPLICATIONS_VERSION_MINOR "12")
-set (KDE_APPLICATIONS_VERSION_MICRO "1")
+set (KDE_APPLICATIONS_VERSION_MICRO "2")
 
 set(KDENLIVE_VERSION 
${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO})
 cmake_minimum_required(VERSION 2.8.12)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/data/kdenlive.appdata.xml 
new/kdenlive-15.12.2/data/kdenlive.appdata.xml
--- old/kdenlive-15.12.1/data/kdenlive.appdata.xml      2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/data/kdenlive.appdata.xml      2016-02-12 
06:18:54.000000000 +0100
@@ -13,6 +13,7 @@
   <name xml:lang="de">Kdenlive</name>
   <name xml:lang="en-GB">Kdenlive</name>
   <name xml:lang="es">Kdenlive</name>
+  <name xml:lang="et">Kdenlive</name>
   <name xml:lang="fi">Kdenlive</name>
   <name xml:lang="fr">Kdenlive</name>
   <name xml:lang="gl">Kdenlive</name>
@@ -40,6 +41,7 @@
   <summary xml:lang="de">Video-Editor</summary>
   <summary xml:lang="en-GB">Video Editor</summary>
   <summary xml:lang="es">Editor de video</summary>
+  <summary xml:lang="et">Videoredaktor</summary>
   <summary xml:lang="fi">Videoeditori</summary>
   <summary xml:lang="fr">Éditeur vidéo</summary>
   <summary xml:lang="gl">Editor de vídeo</summary>
@@ -64,6 +66,7 @@
     <p xml:lang="de">Kdenlive ist ein Video-Editor für nichtlinearen Schnitt. 
Es basiert auf MLT und verarbeitet viele Audio- und Video-Formate. Sie können 
Effekte und Übergänge benutzen und in Formate Ihrer Wahl umwandeln.</p>
     <p xml:lang="en-GB">Kdenlive is a non linear video editor. It is based on 
the MLT framework and accepts many audio and video formats, allows you to add 
effects, transitions and render into the format of your choice.</p>
     <p xml:lang="es">Kdenlive es un editor no lineal de video. Está basado en 
la infraestructura MLT y acepta numerosos formatos de audio y video, 
permitiendo agregar efectos, transiciones y procesar el video final en el 
formato deseado.</p>
+    <p xml:lang="et">Kdenline on mittelineaarne videoredaktor. See tugineb MTL 
raamistikule ja võimaldab tarvitada paljusid heli- ja videovorminguid, lisada 
efekte ja üleminekuid ning renderdada tulemuse vajalikku vormingusse.</p>
     <p xml:lang="fi">Kdenlive on epälineaarinen videoeditori. Se perustuu 
MLT-frameworkiin ja toimii monen eri ääni- ja videoformaatin kanssa. Voit 
lisätä efektejä ja siirtymiä, sekä renderöidä projektin haluamaasi 
tiedostomuotoon.</p>
     <p xml:lang="fr">Kdenlive est un éditeur vidéo non-linéaire. Il est basé 
sur le moteur MLT et accèpte de nombreux formats audio et vidéos, permet 
d'ajouter des effets et transitions, et exporte le rendu dans le format de 
votre choix.</p>
     <p xml:lang="gl">Kdenlive é un editor de vídeo non lineal. Está baseado na 
infraestrutura MLT e permite moitos formatos de son e vídeo, e permite engadir 
efectos, engadir transicións, e exportar en calquera formato.</p>
@@ -91,6 +94,7 @@
     <p xml:lang="de">Funktionen:</p>
     <p xml:lang="en-GB">Features:</p>
     <p xml:lang="es">Características:</p>
+    <p xml:lang="et">Omadused:</p>
     <p xml:lang="fi">Ominaisuuksia:</p>
     <p xml:lang="fr">Fonctionnalités :</p>
     <p xml:lang="gl">Funcionalidades:</p>
@@ -115,6 +119,7 @@
       <li xml:lang="de">Intuitive Mehrspur-Benutzeroberfläche.</li>
       <li xml:lang="en-GB">Intuitive multitrack interface.</li>
       <li xml:lang="es">Interfaz multipista intuitiva.</li>
+      <li xml:lang="et">Hõlpsasti mõistetav mitme paneeliga liides</li>
       <li xml:lang="fi">Selkeä moniraitainen käyttöliittymä</li>
       <li xml:lang="fr">Interface multipiste intuitive.</li>
       <li xml:lang="gl">Interface intuitiva con varias pistas.</li>
@@ -139,6 +144,7 @@
       <li xml:lang="de">Viele Effekte und Übergänge.</li>
       <li xml:lang="en-GB">Many effects and transitions.</li>
       <li xml:lang="es">Muchos efectos y transiciones.</li>
+      <li xml:lang="et">Palju efekte ja üleminekuid</li>
       <li xml:lang="fi">Monia erilaisia efektejä ja siirtymiä</li>
       <li xml:lang="fr">Nombreux effets et transitions.</li>
       <li xml:lang="gl">Moitos efectos e transicións.</li>
@@ -162,6 +168,7 @@
       <li xml:lang="de">Farbbereiche</li>
       <li xml:lang="en-GB">Colour scopes</li>
       <li xml:lang="es">Indicadores de color</li>
+      <li xml:lang="et">Värviskoobid</li>
       <li xml:lang="fi">Väriavaruuksien säätömahdollisuus</li>
       <li xml:lang="fr">Graphes des couleurs</li>
       <li xml:lang="gl">Ámbitos de cores.</li>
@@ -186,6 +193,7 @@
       <li xml:lang="de">Einfacher DVD-Assistent</li>
       <li xml:lang="en-GB">Basic DVD Wizard</li>
       <li xml:lang="es">Asistente básico de DVD</li>
+      <li xml:lang="et">Lihtne DVD nõustaja</li>
       <li xml:lang="fi">Yksinkertainen DVD:n luonti</li>
       <li xml:lang="fr">Assistant DVD de base</li>
       <li xml:lang="gl">Asistente básico para DVD</li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/data/kdenlive.xml 
new/kdenlive-15.12.2/data/kdenlive.xml
--- old/kdenlive-15.12.1/data/kdenlive.xml      2016-01-08 00:09:47.000000000 
+0100
+++ new/kdenlive-15.12.2/data/kdenlive.xml      2016-02-12 06:18:54.000000000 
+0100
@@ -12,6 +12,7 @@
     <comment xml:lang="el">Έγγραφο έργου βίντεο Kdenlive</comment>
     <comment xml:lang="en_GB">Kdenlive video project document</comment>
     <comment xml:lang="es">Documento de proyecto de video de Kdenlive</comment>
+    <comment xml:lang="et">Kdenlive videoprojekti dokument</comment>
     <comment xml:lang="fi">Kdenlive-videoprojektitiedosto</comment>
     <comment xml:lang="fr">Projet vidéo Kdenlive</comment>
     <comment xml:lang="gl">Documento dun proxecto de vídeo de 
Kdenlive</comment>
@@ -43,6 +44,7 @@
     <comment xml:lang="el">Τίτλος βίντεο Kdenlive</comment>
     <comment xml:lang="en_GB">Kdenlive video title</comment>
     <comment xml:lang="es">Título de video de Kdenlive</comment>
+    <comment xml:lang="et">Kdenlive videotiitel</comment>
     <comment xml:lang="fi">Kdenlive-video-otsikko</comment>
     <comment xml:lang="fr">Titre vidéo  Kdenlive</comment>
     <comment xml:lang="gl">Título de vídeo de Kdenlive</comment>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/data/org.kde.kdenlive.desktop 
new/kdenlive-15.12.2/data/org.kde.kdenlive.desktop
--- old/kdenlive-15.12.1/data/org.kde.kdenlive.desktop  2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/data/org.kde.kdenlive.desktop  2016-02-12 
06:18:54.000000000 +0100
@@ -130,8 +130,10 @@
 Keywords[ca]=edició;vídeo;àudio;mlt;kde;
 Keywords[ca@valencia]=edició;vídeo;àudio;mlt;kde;
 Keywords[da]=redigering;video;lyd;mlt;kde;
+Keywords[de]=Editing;Bearbeitung;Schnitt;Videoschnitt;Video;Audio;MLT;
 Keywords[en_GB]=editing;video;audio;mlt;kde;
 Keywords[es]=edición;video;audio;mlt;kde;
+Keywords[et]=redigeerimine;muutmine;video;audio;heli;mlt;kde;
 Keywords[fi]=editing;video;audio;mlt;kde;editointi;ääni;
 Keywords[fr]=montage;vidéo;audio;mlt;kde;
 Keywords[gl]=editing;edición;video;vídeo;audio;son;mlt;kde;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/dialogs/renderwidget.cpp 
new/kdenlive-15.12.2/src/dialogs/renderwidget.cpp
--- old/kdenlive-15.12.1/src/dialogs/renderwidget.cpp   2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/dialogs/renderwidget.cpp   2016-02-12 
06:18:54.000000000 +0100
@@ -950,20 +950,19 @@
     // script file
     QFile file(scriptPath);
     int stemCount = playlistPaths.count();
+    bool stemExport = (trackNames.count() > 0);
 
     for (int stemIdx = 0; stemIdx < stemCount; stemIdx++) {
         QString dest(destBase);
 
         // on stem export append track name to each filename
-        if (stemCount > 1) {
+        if (stemExport) {
             QFileInfo dfi(dest);
             QStringList filePath;
             // construct the full file path
             filePath << dfi.absolutePath() << QDir::separator() << 
dfi.completeBaseName() + "_" <<
-                    QString(trackNames.at(stemIdx)).replace(" ","_") << "." << 
dfi.suffix();
-            dest = filePath.join("");
-            // debug output
-            qDebug() << "dest: " << dest;
+                    QString(trackNames.at(stemIdx)).replace(QLatin1String(" 
"),QLatin1String("_")) << QStringLiteral(".") << dfi.suffix();
+            dest = filePath.join(QLatin1String(""));
         }
 
         // Check whether target file has an extension.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/doc/documentchecker.cpp 
new/kdenlive-15.12.2/src/doc/documentchecker.cpp
--- old/kdenlive-15.12.1/src/doc/documentchecker.cpp    2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/doc/documentchecker.cpp    2016-02-12 
06:18:54.000000000 +0100
@@ -201,7 +201,6 @@
         item->setData(0, idRole, l);
         item->setData(0, statusRole, LUMAMISSING);
     }
-
     
m_ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(m_missingClips.isEmpty()
 && missingProxies.isEmpty() && missingSources.isEmpty());
     max = m_missingClips.count();
     m_missingProxyIds.clear();
@@ -241,6 +240,7 @@
             item->setData(0, typeOriginalResource, e.attribute("resource"));
         } else if (status == TITLE_FONT_ELEMENT) {
             item->setIcon(0, KoIconUtils::themedIcon("dialog-warning"));
+            item->setData(0, statusRole, CLIPPLACEHOLDER);
             item->setToolTip(1, e.attribute("name"));
             QString ft = e.attribute("resource");
             QString newft = QFontInfo(QFont(ft)).family();
@@ -892,7 +892,6 @@
     }
 }
 
-
 void DocumentChecker::slotCheckButtons()
 {
     if (m_ui.treeWidget->currentItem()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/doc/documentvalidator.cpp 
new/kdenlive-15.12.2/src/doc/documentvalidator.cpp
--- old/kdenlive-15.12.1/src/doc/documentvalidator.cpp  2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/doc/documentvalidator.cpp  2016-02-12 
06:18:54.000000000 +0100
@@ -1120,7 +1120,6 @@
             else trackRenaming.insert(entryId, newId);
             entry.setAttribute("producer", newId);
         }
-
         if (!trackRenaming.isEmpty()) {
             for (int i = 0; i < producers.count(); ++i) {
                 QDomElement prod = producers.at(i).toElement();
@@ -1183,6 +1182,10 @@
                 QDomElement entry = m_doc.createElement("entry");
                 entry.setAttribute("producer", id);
                 main_playlist.appendChild(entry);
+                QString service = EffectsList::property(prod, 
QStringLiteral("mlt_service"));
+                if (service == QLatin1String("kdenlivetitle")) {
+                    fixTitleProducerLocale(prod);
+                }
                 QDomElement source = m_source_producers.value(id);
                 if (!source.isNull()) {
                     updateProducerInfo(prod, source);
@@ -1190,6 +1193,8 @@
                     entry.setAttribute("out", 
QString::number(source.attribute("duration").toInt() - 1));
                 }
                 frag.appendChild(prod);
+                // Changing prod parent removes it from list, so rewind index
+                i--;
             }
             else {
                 QDomElement originalProd = prod.cloneNode().toElement();
@@ -1264,6 +1269,9 @@
                 entry.setAttribute("out", 
QString::number(prod.attribute("duration").toInt() - 1));
                 entry.setAttribute("producer", id);
                 main_playlist.appendChild(entry);
+                if (type == 6) {
+                    fixTitleProducerLocale(originalProd);
+                }
                 frag.appendChild(originalProd);
                 ids << id;
             }
@@ -1879,3 +1887,49 @@
     }
 }
 
+
+void DocumentValidator::fixTitleProducerLocale(QDomElement &producer)
+{
+    QString data = EffectsList::property(producer, "xmldata");
+    QDomDocument doc;
+    doc.setContent(data);
+    QDomNodeList nodes = doc.elementsByTagName(QStringLiteral("position"));
+    bool fixed = false;
+    for (int i = 0; i < nodes.count(); i++) {
+        QDomElement pos = nodes.at(i).toElement();
+        QString x = pos.attribute(QStringLiteral("x"));
+        QString y = pos.attribute(QStringLiteral("y"));
+        if (x.contains(QLatin1Char(','))) {
+            // x pos was saved in locale format, fix
+            x = x.section(QStringLiteral(","), 0, 0);
+            pos.setAttribute(QStringLiteral("x"), x);
+            fixed = true;
+        }
+        if (y.contains(QLatin1Char(','))) {
+            // x pos was saved in locale format, fix
+            y = y.section(QStringLiteral(","), 0, 0);
+            pos.setAttribute(QStringLiteral("y"), y);
+            fixed = true;
+        }
+    }
+    nodes = doc.elementsByTagName(QStringLiteral("content"));
+    for (int i = 0; i < nodes.count(); i++) {
+        QDomElement pos = nodes.at(i).toElement();
+        QString x = pos.attribute(QStringLiteral("font-outline"));
+        QString y = pos.attribute(QStringLiteral("textwidth"));
+        if (x.contains(QLatin1Char(','))) {
+            // x pos was saved in locale format, fix
+            x = x.section(QStringLiteral(","), 0, 0);
+            pos.setAttribute(QStringLiteral("font-outline"), x);
+            fixed = true;
+        }
+        if (y.contains(QLatin1Char(','))) {
+            // x pos was saved in locale format, fix
+            y = y.section(QStringLiteral(","), 0, 0);
+            pos.setAttribute(QStringLiteral("textwidth"), y);
+            fixed = true;
+        }
+    }
+    if (fixed) EffectsList::setProperty(producer, QStringLiteral("xmldata"), 
doc.toString());
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/doc/documentvalidator.h 
new/kdenlive-15.12.2/src/doc/documentvalidator.h
--- old/kdenlive-15.12.1/src/doc/documentvalidator.h    2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/doc/documentvalidator.h    2016-02-12 
06:18:54.000000000 +0100
@@ -59,6 +59,8 @@
     bool updateEffectParameters(const QDomNodeList &parameters, const 
QScriptValue *updateRules, const double serviceVersion, const double 
effectVersion);
     */
     QString factorizeGeomValue(QString value, double factor);
+    /** @brief Kdenlive <= 0.9.10 saved title clip item position/opacity with 
locale which was wrong, fix. */
+    void fixTitleProducerLocale(QDomElement &producer);
 };
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/effectslist/effectslistview.cpp 
new/kdenlive-15.12.2/src/effectslist/effectslistview.cpp
--- old/kdenlive-15.12.1/src/effectslist/effectslistview.cpp    2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/effectslist/effectslistview.cpp    2016-02-12 
06:18:54.000000000 +0100
@@ -126,7 +126,6 @@
     connect(m_effectsList, &EffectsListWidget::itemSelectionChanged, this, 
&EffectsListView::slotUpdateInfo);
     connect(m_effectsList, &EffectsListWidget::itemDoubleClicked, this, 
&EffectsListView::slotEffectSelected);
     connect(m_effectsList, SIGNAL(displayMenu(QTreeWidgetItem *, const QPoint 
&)), this, SLOT(slotDisplayMenu(QTreeWidgetItem *, const QPoint &)));
-    connect(search_effect, SIGNAL(hiddenChanged(QTreeWidgetItem*,bool)), this, 
SLOT(slotUpdateSearch(QTreeWidgetItem*,bool)));
     connect(m_effectsList, &EffectsListWidget::applyEffect, this, 
&EffectsListView::addEffect);
     connect(search_effect, SIGNAL(textChanged(QString)), this, 
SLOT(slotAutoExpand(QString)));
 
@@ -134,6 +133,7 @@
     if (m_mode == TransitionMode) {
         return;
     }
+    connect(search_effect, SIGNAL(hiddenChanged(QTreeWidgetItem*,bool)), this, 
SLOT(slotUpdateSearch(QTreeWidgetItem*,bool)));
     switch (KdenliveSettings::selected_effecttab()) {
       case EffectsListWidget::EFFECT_VIDEO:
         effectsVideo->setChecked(true);
@@ -378,7 +378,7 @@
 
     QTreeWidgetItem *item = m_effectsList->currentItem();
     QString effectId = item->text(0);
-    QString path = 
QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/effects";
+    QString path = 
QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/effects/";
 
     QDir directory = QDir(path);
     QStringList filter;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdenlive-15.12.1/src/effectstack/collapsibleeffect.cpp 
new/kdenlive-15.12.2/src/effectstack/collapsibleeffect.cpp
--- old/kdenlive-15.12.1/src/effectstack/collapsibleeffect.cpp  2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/effectstack/collapsibleeffect.cpp  2016-02-12 
06:18:54.000000000 +0100
@@ -318,7 +318,9 @@
     if (!disable || KdenliveSettings::disable_effect_parameters()) {
         widgetFrame->setEnabled(!disable);
     }
-    if (emitInfo) emit effectStateChanged(disable, effectIndex(), 
needsMonitorEffectScene());
+    if (emitInfo) {
+        emit effectStateChanged(disable, effectIndex(), 
needsMonitorEffectScene());
+    }
 }
 
 void CollapsibleEffect::slotDeleteEffect()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdenlive-15.12.1/src/effectstack/effectstackview2.cpp 
new/kdenlive-15.12.2/src/effectstack/effectstackview2.cpp
--- old/kdenlive-15.12.1/src/effectstack/effectstackview2.cpp   2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/effectstack/effectstackview2.cpp   2016-02-12 
06:18:54.000000000 +0100
@@ -265,20 +265,18 @@
 
 void EffectStackView2::slotTrackItemSelected(int ix, const TrackInfo &info, 
Monitor *m)
 {
-    if (m_status == TIMELINE_TRACK && ix == m_trackindex) {
-        // Track effects already displayed
-        return;
+    if (m_status != TIMELINE_TRACK || ix != m_trackindex) {
+        m_clipref = NULL;
+        m_status = TIMELINE_TRACK;
+        m_effectMetaInfo.monitor = m;
+        m_currentEffectList = info.effectsList;
+        m_trackInfo = info;
+        m_clipref = NULL;
+        m_masterclipref = NULL;
+        m_ui.checkAll->setToolTip(QString());
+        m_ui.checkAll->setText(i18n("Effects for track %1", 
info.trackName.isEmpty() ? QString::number(ix) : info.trackName));
     }
-    m_clipref = NULL;
-    m_status = TIMELINE_TRACK;
-    m_effectMetaInfo.monitor = m;
-    m_currentEffectList = info.effectsList;
-    m_trackInfo = info;
-    m_clipref = NULL;
-    m_masterclipref = NULL;
     setEnabled(true);
-    m_ui.checkAll->setToolTip(QString());
-    m_ui.checkAll->setText(i18n("Effects for track %1", 
info.trackName.isEmpty() ? QString::number(ix) : info.trackName));
     m_ui.checkAll->setEnabled(true);
     m_trackindex = ix;
     setupListView();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdenlive-15.12.1/src/effectstack/widgets/geometrywidget.cpp 
new/kdenlive-15.12.2/src/effectstack/widgets/geometrywidget.cpp
--- old/kdenlive-15.12.1/src/effectstack/widgets/geometrywidget.cpp     
2016-01-08 00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/effectstack/widgets/geometrywidget.cpp     
2016-02-12 06:18:54.000000000 +0100
@@ -345,11 +345,12 @@
     }
 
     Mlt::GeometryItem item;
-    m_geometry->fetch(&item, m_monitor->render->seekFramePosition() - 
m_clipPos);
+    int framePos = qBound<int>(0, m_monitor->render->seekFramePosition() - 
m_clipPos, maxframe - minframe);
+    m_geometry->fetch(&item, framePos);
     checkSingleKeyframe();
     m_monitor->slotShowEffectScene(MonitorSceneGeometry);
     m_monitor->setUpEffectGeometry(QRect(item.x(), item.y(), item.w(), 
item.h()), calculateCenters());
-    slotPositionChanged(m_monitor->render->seekFramePosition() - m_clipPos, 
false);
+    slotPositionChanged(framePos, false);
 }
 
 void GeometryWidget::addParameter(const QDomElement &elem)
@@ -733,8 +734,15 @@
 {
     int pos = m_timePos->getValue();
     Mlt::GeometryItem item;
-    if (m_geometry->fetch(&item, pos) || item.key() == false)
-        return;
+    if (m_geometry->fetch(&item, pos) || item.key() == false) {
+        // Check if we are in a "one keyframe" situation
+        if (m_singleKeyframe && !m_geometry->next_key(&item, 0)) {
+            // Ok we have only one keyframe, edit this one
+        } else {
+            //TODO: show error message
+            return;
+        }
+    }
     item.mix(value);
     m_geometry->insert(item);
     emit parameterChanged();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/mainwindow.cpp 
new/kdenlive-15.12.2/src/mainwindow.cpp
--- old/kdenlive-15.12.1/src/mainwindow.cpp     2016-01-08 00:09:47.000000000 
+0100
+++ new/kdenlive-15.12.2/src/mainwindow.cpp     2016-02-12 06:18:54.000000000 
+0100
@@ -35,6 +35,7 @@
 #include "monitor/monitormanager.h"
 #include "doc/kdenlivedoc.h"
 #include "timeline/timeline.h"
+#include "timeline/track.h"
 #include "timeline/customtrackview.h"
 #include "effectslist/effectslistview.h"
 #include "effectslist/effectbasket.h"
@@ -122,6 +123,15 @@
     return a.first < b.first;
 }*/
 
+// determine the the default KDE style as defined BY THE USER
+// (as opposed to whatever style KDE considers default)
+static QString defaultStyle(const char *fallback=Q_NULLPTR)
+{
+    KSharedConfigPtr kdeGlobals = 
KSharedConfig::openConfig(QStringLiteral("kdeglobals"), KConfig::NoGlobals);
+    KConfigGroup cg(kdeGlobals, "KDE");
+    return cg.readEntry("widgetStyle", fallback);
+}
+
 MainWindow::MainWindow(const QString &MltPath, const QUrl &Url, const QString 
& clipsToLoad, QWidget *parent) :
     KXmlGuiWindow(parent),
     m_timelineArea(NULL),
@@ -151,6 +161,19 @@
     KActionMenu *stylesAction= new KActionMenu(i18n("Style"), this);
     QActionGroup *stylesGroup = new QActionGroup(stylesAction);
 
+
+    // GTK theme does not work well with Kdenlive, and does not support color 
theming, so avoid it
+    QStringList availableStyles = QStyleFactory::keys();
+    QString desktopStyle = QApplication::style()->objectName();
+    if (QString::compare(desktopStyle, QLatin1String("GTK+"), 
Qt::CaseInsensitive) == 0 && KdenliveSettings::widgetstyle().isEmpty()) {
+        if (availableStyles.contains(QLatin1String("breeze"), 
Qt::CaseInsensitive)) {
+            // Auto switch to Breeze theme
+            KdenliveSettings::setWidgetstyle(QStringLiteral("Breeze"));
+        } else if (availableStyles.contains(QLatin1String("fusion"), 
Qt::CaseInsensitive)) {
+            KdenliveSettings::setWidgetstyle(QStringLiteral("Fusion"));
+        }
+    }
+
     // Add default style action
     QAction *defaultStyle = new QAction(i18n("Default"), stylesGroup);
     defaultStyle->setCheckable(true);
@@ -159,7 +182,6 @@
         defaultStyle->setChecked(true);
     }
 
-    QStringList availableStyles = QStyleFactory::keys();
     foreach(const QString &style, availableStyles) {
         QAction *a = new QAction(style, stylesGroup);
         a->setCheckable(true);
@@ -177,14 +199,6 @@
     ThemeManager::instance()->setCurrentTheme(KdenliveSettings::colortheme());
     connect(ThemeManager::instance(), SIGNAL(signalThemeChanged(const QString 
&)), this, SLOT(slotThemeChanged(const QString &)), Qt::DirectConnection);
 
-    QString desktopStyle = QApplication::style()->objectName();
-    if (!desktopStyle.isEmpty() && QString::compare(desktopStyle, 
QLatin1String("breeze"), Qt::CaseInsensitive) != 0 && 
QString::compare(desktopStyle, QLatin1String("oxygen"), Qt::CaseInsensitive) != 
0 && KdenliveSettings::widgetstyle().isEmpty()) {
-        if (availableStyles.contains(QLatin1String("breeze"), 
Qt::CaseInsensitive)) {
-            // Auto switch to Breeze theme
-            KdenliveSettings::setWidgetstyle(QStringLiteral("Breeze"));
-        }
-    }
-
     if (!KdenliveSettings::widgetstyle().isEmpty() && 
QString::compare(desktopStyle, KdenliveSettings::widgetstyle(), 
Qt::CaseInsensitive) != 0) {
         // User wants a custom widget style, init
         doChangeStyle();
@@ -2901,7 +2915,6 @@
     QString mltSuffix(".mlt");
     QList<QString> playlistPaths;
     QList<QString> trackNames;
-    const QList <TrackInfo> trackInfoList = 
pCore->projectManager()->currentTimeline()->getTracksInfo();
     int tracksCount = 1;
     bool stemExport = m_renderWidget->isStemAudioExportEnabled();
 
@@ -2985,7 +2998,9 @@
     bool exportAudio;
     if (m_renderWidget->automaticAudioExport()) {
         exportAudio = 
pCore->projectManager()->currentTimeline()->checkProjectAudio();
-    } else exportAudio = m_renderWidget->selectedAudioExport();
+    } else {
+       exportAudio = m_renderWidget->selectedAudioExport();
+    }
 
     // Set playlist audio volume to 100%
     QDomDocument doc;
@@ -3045,22 +3060,29 @@
 
     // check which audio tracks have to be exported
     if (stemExport) {
-        CustomTrackView* ctv = 
pCore->projectManager()->currentTimeline()->projectView();
-        int trackInfoCount = trackInfoList.count();
-        tracksCount = 0;
+        Timeline* ct = pCore->projectManager()->currentTimeline();
+        int allTracksCount = ct->tracksCount();
 
-        for (int i = 0; i < trackInfoCount; i++) {
-            TrackInfo info = trackInfoList.at(trackInfoCount - i - 1);
-            if (!info.isMute && ctv->hasAudio(i)) {
+        // reset tracks count (tracks to be rendered)
+        tracksCount = 0;
+        // begin with track 1 (track zero is a hidden black track)
+        for (int i = 1; i < allTracksCount; i++) {
+            Track* track = ct->track(i);
+            // add only tracks to render list that are not muted and have audio
+            if (track && !track->info().isMute && track->hasAudio()) {
                 QDomDocument docCopy = doc.cloneNode(true).toDocument();
+                QString trackName = track->info().trackName;
+
                 // save track name
-                trackNames << info.trackName;
-                qDebug() << "Track-Name: " << info.trackName;
-                // create stem export playlist content
-                QDomNodeList tracks = docCopy.elementsByTagName("track");
-                for (int j = trackInfoCount; j >= 0; j--) {
-                    if (j != (trackInfoCount - i)) {
-                        tracks.at(j).toElement().setAttribute("hide", "both");
+                trackNames << trackName;
+                qDebug() << "Track-Name: " << trackName;
+
+                // create stem export doc content
+                QDomNodeList tracks = 
docCopy.elementsByTagName(QStringLiteral("track"));
+                for (int j = 0; j < allTracksCount; j++) {
+                    if (j != i) {
+                        // mute other tracks
+                        
tracks.at(j).toElement().setAttribute(QStringLiteral("hide"), 
QStringLiteral("both"));
                     }
                 }
                 docList << docCopy;
@@ -3077,7 +3099,7 @@
 
         // add track number to path name
         if (stemExport) {
-            plPath = plPath + "_" + QString(trackNames.at(i)).replace(" ", 
"_");
+            plPath = plPath + "_" + 
QString(trackNames.at(i)).replace(QLatin1String(" "), QLatin1String("_"));
         }
         // add mlt suffix
         plPath += mltSuffix;
@@ -3343,7 +3365,11 @@
 
 void MainWindow::doChangeStyle()
 {
-    
QApplication::setStyle(QStyleFactory::create(KdenliveSettings::widgetstyle()));
+    QString newStyle = KdenliveSettings::widgetstyle();
+    if (newStyle.isEmpty() || newStyle == QStringLiteral("Default")) {
+        newStyle = defaultStyle("Breeze");
+    }
+    QApplication::setStyle(QStyleFactory::create(newStyle));
     // Changing widget style resets color theme, so update color theme again
     ThemeManager::instance()->slotChangePalette();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/renderer.cpp 
new/kdenlive-15.12.2/src/renderer.cpp
--- old/kdenlive-15.12.1/src/renderer.cpp       2016-01-08 00:09:47.000000000 
+0100
+++ new/kdenlive-15.12.2/src/renderer.cpp       2016-02-12 06:18:54.000000000 
+0100
@@ -2373,6 +2373,11 @@
                 int x2 = keyFrames.at(i + 1).section('=', 0, 0).toInt();
                 double y2 = keyFrames.at(i + 1).section('=', 1, 1).toDouble();
                 if (x2 == -1) x2 = duration;
+                // non-overlapping sections
+                if (i > 0) {
+                    y1 += (y2 - y1) / (x2 - x1);
+                    ++x1;
+                }
 
                 for (int j = 0; j < params.count(); ++j) {
                     filter->set(params.at(j).name().toUtf8().constData(), 
params.at(j).value().toUtf8().constData());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdenlive-15.12.1/src/timeline/customtrackview.cpp 
new/kdenlive-15.12.2/src/timeline/customtrackview.cpp
--- old/kdenlive-15.12.1/src/timeline/customtrackview.cpp       2016-01-08 
00:09:47.000000000 +0100
+++ new/kdenlive-15.12.2/src/timeline/customtrackview.cpp       2016-02-12 
06:18:54.000000000 +0100
@@ -2388,12 +2388,13 @@
 {
     if (pos < GenTime()) {
         // editing a track effect
-        if 
(!m_document->renderer()->mltEnableEffects(m_timeline->tracksCount() - track, 
pos, effectIndexes, disable)) {
+        if (!m_document->renderer()->mltEnableEffects(track, pos, 
effectIndexes, disable)) {
             emit displayMessage(i18n("Problem editing effect"), ErrorMessage);
             return;
         }
-        m_timeline->enableTrackEffects(track - 1, effectIndexes, disable);
+        m_timeline->enableTrackEffects(track, effectIndexes, disable);
         emit updateTrackEffectState(track);
+        emit showTrackEffects(track, m_timeline->getTrackInfo(track));
         return;
     }
     // editing a clip effect


Reply via email to