Skip to content

Commit

Permalink
Fix: Inconsistent layer number if we change from background layer to …
Browse files Browse the repository at this point in the history
…layer

This patch fixes #4084.

Currently if we set layer to background and then back to layer, last
used name isn't preserved. This patch makes layer save last used layer name before
it gets converted to background so it won't get lost.
  • Loading branch information
tetektoza committed Oct 6, 2023
1 parent 27ec013 commit afc5269
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 4 deletions.
7 changes: 6 additions & 1 deletion src/app/cmd/configure_background.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,13 @@ ConfigureBackground::ConfigureBackground(Layer* layer)
LayerFlags newFlags = LayerFlags(int(layer->flags())
| int(LayerFlags::BackgroundLayerFlags));

// save previous layer name so it will be the same
// if user changes layer from background to layer once again
layer->setLayerPrevName(layer->name());

add(new cmd::SetLayerFlags(layer, newFlags));
add(new cmd::SetLayerName(layer, "Background"));
add(new cmd::SetLayerName(layer, layer->prevBgName().empty() ?
"Background" : layer->prevBgName()));

if (layer->isImage() &&
static_cast<LayerImage*>(layer)->opacity() < 255) {
Expand Down
7 changes: 5 additions & 2 deletions src/app/cmd/layer_from_background.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#endif

#include "app/cmd/layer_from_background.h"

#include "app/cmd/set_layer_flags.h"
#include "app/cmd/set_layer_name.h"
#include "doc/layer.h"
Expand All @@ -32,8 +31,12 @@ LayerFromBackground::LayerFromBackground(Layer* layer)
LayerFlags newFlags = LayerFlags(int(layer->flags())
& ~int(LayerFlags::BackgroundLayerFlags));

layer->setBgPrevName(layer->name());

add(new cmd::SetLayerFlags(layer, newFlags));
add(new cmd::SetLayerName(layer, "Layer 0"));

// set previous set layer name before layer got changed to background
add(new cmd::SetLayerName(layer, layer->prevName()));
}

} // namespace cmd
Expand Down
8 changes: 7 additions & 1 deletion src/doc/layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ namespace doc {

const std::string& name() const { return m_name; }
void setName(const std::string& name) { m_name = name; }
void setLayerPrevName(const std::string& name) { m_prev_name = name; }
void setBgPrevName(const std::string& name) { m_prev_bg_name = name; }
const std::string& prevName() const { return m_prev_name; }
const std::string& prevBgName() const { return m_prev_bg_name; }

Sprite* sprite() const { return m_sprite; }
LayerGroup* parent() const { return m_parent; }
Expand Down Expand Up @@ -129,8 +133,10 @@ namespace doc {

private:
std::string m_name; // layer name
std::string m_prev_name; // previous layer name (before conversion to bg)
std::string m_prev_bg_name; // previous background layer name (before conversion to layer)
Sprite* m_sprite; // owner of the layer
LayerGroup* m_parent; // parent layer
LayerGroup* m_parent; // parent layer
LayerFlags m_flags; // stack order cannot be changed

// Disable assigment
Expand Down

0 comments on commit afc5269

Please sign in to comment.