aboutsummaryrefslogtreecommitdiffstats
path: root/src/wm_layer_control.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wm_layer_control.cpp')
-rw-r--r--src/wm_layer_control.cpp52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/wm_layer_control.cpp b/src/wm_layer_control.cpp
index 887fc58..3e3d0d5 100644
--- a/src/wm_layer_control.cpp
+++ b/src/wm_layer_control.cpp
@@ -861,18 +861,7 @@ bool LayerControl::moveForeGround(const shared_ptr<WMClient> client)
bool LayerControl::moveRemote(unsigned layer, const std::string& area)
{
bool ret = false;
- std::string remote_layer;
- std::string ecu_name = area;
-
- if (area.find('.') != std::string::npos)
- {
- std::vector<std::string> elements;
- elements = parseString(area, '.');
- ecu_name = elements[0];
- }
-
- remote_layer = this->areaToRemoteLayer(ecu_name);
-
+ std::string remote_layer = this->areaToRemoteLayer(area);
auto remote = this->getWMLayer(remote_layer);
if(remote != nullptr)
@@ -944,13 +933,46 @@ std::string LayerControl::hasRemoteLayer(unsigned layer)
return "";
}
-std::string LayerControl::areaToRemoteLayer(std::string area)
+std::string LayerControl::areaToRemoteLayer(const std::string& area)
{
+ std::vector<std::string> elements;
+
+ if (area.find('.') != std::string::npos)
+ {
+ elements = parseString(area, '.');
+ }
+ else
+ {
+ elements.push_back(area);
+ }
+
for (auto itr = wm_remoteLayerName.begin(); itr != wm_remoteLayerName.end(); ++itr)
{
- if (std::regex_search(*itr, std::regex(area, std::regex::icase)))
+ unsigned int idx = 0;
+ for (auto itr_elem = elements.begin(); itr_elem != elements.end(); ++itr_elem)
{
- return *itr;
+ if (std::regex_search(*itr, std::regex(*itr_elem, std::regex::icase)))
+ {
+ if (++idx == elements.size())
+ {
+ return *itr;
+ }
+ }
+ else
+ {
+ // TODO: workaround, skip normal case
+ if ((itr_elem->compare("normal") == 0) || (itr_elem->compare("full") == 0))
+ {
+ if (++idx == elements.size())
+ {
+ return *itr;
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
}
}