- geom.label_width = geom.width - geom.bevel * 2 -
- (geom.button_size + geom.bevel) * (_layout.size() - 1);
+ // figure out whats being shown, and the width of the label
+ geom.label_width = geom.width - geom.bevel * 2;
+ bool n, d, i, t, m ,c;
+ n = d = i = t = m = c = false;
+ for (const char *l = _layout.c_str(); *l; ++l) {
+ switch (*l) {
+ case 'n':
+ case 'N':
+ if (!(_decorations & Client::Decor_Icon)) break;
+ n = true;
+ geom.label_width -= geom.button_size + geom.bevel;
+ break;
+ case 'd':
+ case 'D':
+ if (!(_decorations & Client::Decor_AllDesktops)) break;
+ d = true;
+ geom.label_width -= geom.button_size + geom.bevel;
+ break;
+ case 'i':
+ case 'I':
+ if (!(_decorations & Client::Decor_Iconify)) break;
+ i = true;
+ geom.label_width -= geom.button_size + geom.bevel;
+ break;
+ case 't':
+ case 'T':
+ t = true;
+ break;
+ case 'm':
+ case 'M':
+ if (!(_decorations & Client::Decor_Maximize)) break;
+ m = true;
+ geom.label_width -= geom.button_size + geom.bevel;
+ break;
+ case 'c':
+ case 'C':
+ if (!(_decorations & Client::Decor_Close)) break;
+ c = true;
+ geom.label_width -= geom.button_size + geom.bevel;
+ break;
+ }
+ }