diff --git a/src/bar.cpp b/src/bar.cpp index 6ebbea2..00acaad 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -72,7 +72,7 @@ Bar::Bar(Monitor* mon) _pangoContext.reset(pango_font_map_create_context(pango_cairo_font_map_get_default())); if (!_pangoContext) die("pango_font_map_create_context"); for (auto i=0u; iheight/2); for (auto ind = 0; ind < indicators; ind++) { diff --git a/src/bar.hpp b/src/bar.hpp index bddbbb6..0fd7710 100644 --- a/src/bar.hpp +++ b/src/bar.hpp @@ -22,7 +22,7 @@ public: }; struct Tag { - znet_tapesoftware_dwl_wm_monitor_v1_tag_state state; + int state; int numClients; int focusedClient; BarComponent component; @@ -65,7 +65,7 @@ public: bool visible() const; void show(wl_output* output); void hide(); - void setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, int numClients, int focusedClient); + void setTag(int tag, int state, int numClients, int focusedClient); void setSelected(bool selected); void setLayout(const std::string& layout); void setTitle(const std::string& title); diff --git a/src/common.hpp b/src/common.hpp index 548f67e..88db973 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -26,6 +26,7 @@ union Arg { }; struct Monitor; +enum TagState { None, Active = 0x01, Urgent = 0x02 }; enum { ClkNone, ClkTagBar, ClkLayoutSymbol, ClkWinTitle, ClkStatusText }; struct Button { int control; diff --git a/src/main.cpp b/src/main.cpp index 0602eac..dc8fcec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -227,9 +227,14 @@ static const struct znet_tapesoftware_dwl_wm_monitor_v1_listener dwlWmMonitorLis }, .tag = [](void* mv, znet_tapesoftware_dwl_wm_monitor_v1*, uint32_t tag, uint32_t state, uint32_t numClients, int32_t focusedClient) { auto mon = static_cast(mv); - mon->bar->setTag(tag, static_cast(state), numClients, focusedClient); + int tagState = TagState::None; + if (state & ZNET_TAPESOFTWARE_DWL_WM_MONITOR_V1_TAG_STATE_ACTIVE) + tagState |= TagState::Active; + if (state & ZNET_TAPESOFTWARE_DWL_WM_MONITOR_V1_TAG_STATE_URGENT) + tagState |= TagState::Urgent; + mon->bar->setTag(tag, tagState, numClients, focusedClient); uint32_t mask = 1 << tag; - if (state & ZNET_TAPESOFTWARE_DWL_WM_MONITOR_V1_TAG_STATE_ACTIVE) { + if (tagState & TagState::Active) { mon->tags |= mask; } else { mon->tags &= ~mask;