(svn r3247) - Fix: "[ 1335580 ] sticky windows not sticky anymore"

Determine clicked status of sticky icon from window flags rather than the widget click state. This keeps the status in one place where it can't get out of sync.
replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
peter1138 19 years ago
parent 44c70c24d3
commit 4191adb92c

@ -735,12 +735,7 @@ void UnclickSomeWindowButtons(Window *w, uint32 mask)
void UnclickWindowButtons(Window *w)
{
bool sticky = false;
if (w->desc_flags & WDF_STICKY_BUTTON && HASBIT(w->click_state, 2)) sticky = true;
UnclickSomeWindowButtons(w, (uint32)-1);
if (sticky) SETBIT(w->click_state, 2);
}

@ -235,7 +235,6 @@ static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_sti
WP(w,def_d).data_1 = mode;
if (show_stickied) {
w->flags4 |= WF_STICKY;
w->click_state ^= (1 << 3);
}
}
}

@ -394,6 +394,8 @@ void DrawWindowWidgets(const Window *w)
case WWT_STICKYBOX: {
assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere!
clicked = !!(w->flags4 & WF_STICKY);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : 0);
DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, r.left + 2 + clicked, r.top + 3 + clicked);
break;

@ -74,7 +74,6 @@ static void DispatchLeftClickEvent(Window* w, int x, int y)
}
if (w->desc_flags & WDF_STICKY_BUTTON && wi->type == WWT_STICKYBOX) {
TOGGLEBIT(w->click_state, e.click.widget);
w->flags4 ^= WF_STICKY;
InvalidateWidget(w, e.click.widget);
return;

Loading…
Cancel
Save