From 1ea39e562a277d63a542c67c784e942c749f8d88 Mon Sep 17 00:00:00 2001
From: Edgard Castro <castro@edgard.org>
Date: Tue, 15 Nov 2016 04:33:10 -0200
Subject: [PATCH] feat(bspwm): Additional dimmed states configuration

---
 include/modules/bspwm.hpp |  4 ++++
 src/modules/bspwm.cpp     | 24 ++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/include/modules/bspwm.hpp b/include/modules/bspwm.hpp
index 13c9396a..1ce39729 100644
--- a/include/modules/bspwm.hpp
+++ b/include/modules/bspwm.hpp
@@ -15,6 +15,10 @@ namespace modules {
     WORKSPACE_EMPTY,
     WORKSPACE_OCCUPIED,
     WORKSPACE_DIMMED,  // used when the monitor is out of focus
+    WORKSPACE_DIMMED_ACTIVE,
+    WORKSPACE_DIMMED_URGENT,
+    WORKSPACE_DIMMED_EMPTY,
+    WORKSPACE_DIMMED_OCCUPIED
   };
   enum class state_mode {
     MODE_NONE,
diff --git a/src/modules/bspwm.cpp b/src/modules/bspwm.cpp
index 162f1b28..20d37961 100644
--- a/src/modules/bspwm.cpp
+++ b/src/modules/bspwm.cpp
@@ -31,6 +31,14 @@ namespace modules {
       m_statelabels.insert(
           make_pair(state_ws::WORKSPACE_EMPTY, load_optional_label(m_conf, name(), "label-empty", DEFAULT_WS_LABEL)));
       m_statelabels.insert(make_pair(state_ws::WORKSPACE_DIMMED, load_optional_label(m_conf, name(), "label-dimmed")));
+      m_statelabels.insert(make_pair(
+          state_ws::WORKSPACE_DIMMED_ACTIVE, load_optional_label(m_conf, name(), "label-dimmed-active")));
+      m_statelabels.insert(make_pair(
+          state_ws::WORKSPACE_DIMMED_URGENT, load_optional_label(m_conf, name(), "label-dimmed-urgent")));
+      m_statelabels.insert(make_pair(
+          state_ws::WORKSPACE_DIMMED_EMPTY, load_optional_label(m_conf, name(), "label-dimmed-empty")));
+      m_statelabels.insert(make_pair(
+          state_ws::WORKSPACE_DIMMED_OCCUPIED, load_optional_label(m_conf, name(), "label-dimmed-occupied")));
     }
 
     if (m_formatter->has(TAG_LABEL_MODE)) {
@@ -248,6 +256,22 @@ namespace modules {
 
         if (!m_monitors.back()->focused) {
           label->replace_defined_values(m_statelabels.find(state_ws::WORKSPACE_DIMMED)->second);
+          switch (workspace_flag) {
+              case state_ws::WORKSPACE_ACTIVE:
+                  label->replace_defined_values(m_statelabels.find(state_ws::WORKSPACE_DIMMED_ACTIVE)->second);
+                  break;
+              case state_ws::WORKSPACE_OCCUPIED:
+                  label->replace_defined_values(m_statelabels.find(state_ws::WORKSPACE_DIMMED_OCCUPIED)->second);
+                  break;
+              case state_ws::WORKSPACE_URGENT:
+                  label->replace_defined_values(m_statelabels.find(state_ws::WORKSPACE_DIMMED_URGENT)->second);
+                  break;
+              case state_ws::WORKSPACE_EMPTY:
+                  label->replace_defined_values(m_statelabels.find(state_ws::WORKSPACE_DIMMED_EMPTY)->second);
+                  break;
+              default:
+                  break;
+          }
         }
 
         label->reset_tokens();