remove char overflow caused by w
not having a consistent length
This commit is contained in:
parent
5dc24865f1
commit
acb0828906
21
spmenu.c
21
spmenu.c
|
@ -312,9 +312,9 @@ drawitem(struct item *item, int x, int y, int w)
|
||||||
{
|
{
|
||||||
char buffer[sizeof(item->text) + lrpad / 2];
|
char buffer[sizeof(item->text) + lrpad / 2];
|
||||||
Clr scm[3];
|
Clr scm[3];
|
||||||
int lp = lrpad / 2;
|
int lp = lrpad / 2; /* padding */
|
||||||
int wr, rd;
|
int wr, rd;
|
||||||
int rw;
|
int rw; /* width of text */
|
||||||
int fg = 7;
|
int fg = 7;
|
||||||
int bg = 0;
|
int bg = 0;
|
||||||
int bgfg = 0;
|
int bgfg = 0;
|
||||||
|
@ -337,8 +337,13 @@ drawitem(struct item *item, int x, int y, int w)
|
||||||
buffer[wr] = '\0'; /* clear out character */
|
buffer[wr] = '\0'; /* clear out character */
|
||||||
|
|
||||||
/* draw text */
|
/* draw text */
|
||||||
rw = TEXTW(buffer) - lrpad;
|
rw = TEXTWM(buffer) - lrpad;
|
||||||
drw_text(drw, x, y, rw + lp, bh, lp, buffer, 0, False);
|
#if USERTL
|
||||||
|
apply_fribidi(buffer);
|
||||||
|
drw_text(drw, x, y, rw + lp, bh, lp, fribidi_text, 0, True);
|
||||||
|
#else
|
||||||
|
drw_text(drw, x, y, rw + lp, bh, lp, buffer, 0, True);
|
||||||
|
#endif
|
||||||
x += rw + lp;
|
x += rw + lp;
|
||||||
lp = 0; /* no l padding, we only want it once */
|
lp = 0; /* no l padding, we only want it once */
|
||||||
|
|
||||||
|
@ -380,12 +385,16 @@ drawitem(struct item *item, int x, int y, int w)
|
||||||
|
|
||||||
buffer[wr] = '\0';
|
buffer[wr] = '\0';
|
||||||
|
|
||||||
|
/* width needs to be decreased now because we've already drawn some text
|
||||||
|
* if we haven't drawn text, this does nothing at all. */
|
||||||
|
w -= rw;
|
||||||
|
|
||||||
/* draw any text that doesn't use sgr sequences */
|
/* draw any text that doesn't use sgr sequences */
|
||||||
#if USERTL
|
#if USERTL
|
||||||
apply_fribidi(buffer);
|
apply_fribidi(buffer);
|
||||||
int r = drw_text(drw, x, y, w, bh, lp, fribidi_text, 0, False);
|
int r = drw_text(drw, x, y, w, bh, lp, fribidi_text, 0, True);
|
||||||
#else
|
#else
|
||||||
int r = drw_text(drw, x, y, w, bh, lp, buffer, 0, False);
|
int r = drw_text(drw, x, y, w, bh, lp, buffer, 0, True);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
drawhighlights(item, x, y, w);
|
drawhighlights(item, x, y, w);
|
||||||
|
|
Loading…
Reference in a new issue