From a13385a081ff53c47f44237e2e19ca0879034da9 Mon Sep 17 00:00:00 2001
From: David Capello <david@igarastudio.com>
Date: Tue, 18 Sep 2018 22:54:53 -0300
Subject: [PATCH] Fix timeline scroll behavior when we are moving frames or
 layers

Minor change to e8977bb6a354dfd06c28968cb6d13d258c555333 for #1780
just to avoid scrolling frames if we are moving only layers or
viceversa (don't scroll layers if we are moving frames).
---
 src/app/ui/timeline/timeline.cpp | 52 +++++++++++++++++++++-----------
 1 file changed, 35 insertions(+), 17 deletions(-)

diff --git a/src/app/ui/timeline/timeline.cpp b/src/app/ui/timeline/timeline.cpp
index 7457e900c..5013c3527 100644
--- a/src/app/ui/timeline/timeline.cpp
+++ b/src/app/ui/timeline/timeline.cpp
@@ -1050,27 +1050,45 @@ bool Timeline::onProcessMessage(Message* msg)
         switch (m_state) {
 
             case STATE_MOVING_RANGE: {
-                frame_t firstDrawableFrame;
-                frame_t lastDrawableFrame;
-                getDrawableFrames(&firstDrawableFrame, &lastDrawableFrame);
+                frame_t newFrame;
+                if (m_range.type() == Range::kLayers) {
+                  // If we are moving only layers we don't change the
+                  // current frame.
+                  newFrame = m_frame;
+                }
+                else {
+                  frame_t firstDrawableFrame;
+                  frame_t lastDrawableFrame;
+                  getDrawableFrames(&firstDrawableFrame, &lastDrawableFrame);
 
-                layer_t firstDrawableLayer;
-                layer_t lastDrawableLayer;
-                getDrawableLayers(&firstDrawableLayer, &lastDrawableLayer);
-
-                layer_t newLayer = hit.layer;
-                frame_t newFrame = hit.frame;
-
-                if (hit.frame < firstDrawableFrame)
+                  if (hit.frame < firstDrawableFrame)
                     newFrame = firstDrawableFrame - 1;
-                else if (hit.frame > lastDrawableFrame)
+                  else if (hit.frame > lastDrawableFrame)
                     newFrame = lastDrawableFrame + 1;
-                if (hit.layer < firstDrawableLayer)
-                    newLayer = firstDrawableLayer - 1;
-                else if (hit.layer > lastDrawableLayer)
-                    newLayer = lastDrawableLayer + 1;
+                  else
+                    newFrame = hit.frame;
+                }
 
-                showCel(newLayer,newFrame);
+                layer_t newLayer;
+                if (m_range.type() == Range::kFrames) {
+                  // If we are moving only frames we don't change the
+                  // current layer.
+                  newLayer = getLayerIndex(m_layer);
+                }
+                else {
+                  layer_t firstDrawableLayer;
+                  layer_t lastDrawableLayer;
+                  getDrawableLayers(&firstDrawableLayer, &lastDrawableLayer);
+
+                  if (hit.layer < firstDrawableLayer)
+                    newLayer = firstDrawableLayer - 1;
+                  else if (hit.layer > lastDrawableLayer)
+                    newLayer = lastDrawableLayer + 1;
+                  else
+                    newLayer = hit.layer;
+                }
+
+                showCel(newLayer, newFrame);
                 break;
             }