# HG changeset patch # User Peter Nelson # Date 2022-09-13 22:14:14 # Node ID 95c6a625aaea948d478b2b73c2596c5c15a0eed9 # Parent 9d2f253eafd4734ab42ea95c17b5ea5a13be907a Fix: Online Players list mouse hover behaviour. Hover highlight was visible even if the mouse pointer was in a different window, and the window refreshed itself every frame if the mouse pointer was not over its matrix widget. Resolved by using OnMouseOver() instead of OnMouseLoop(), and only redrawing if the hover position has changed. diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2115,21 +2115,19 @@ public: } } - virtual void OnMouseLoop() override + void OnMouseOver(Point pt, int widget) override { - if (GetWidgetFromPos(this, _cursor.pos.x - this->left, _cursor.pos.y - this->top) != WID_CL_MATRIX) { - this->hover_index = -1; - this->SetDirty(); - return; - } - - NWidgetBase *nwi = this->GetWidget(WID_CL_MATRIX); - int y = _cursor.pos.y - this->top - nwi->pos_y - 2; - int index = y / this->line_height; - - if (index != this->hover_index) { - this->hover_index = index; - this->SetDirty(); + if (widget != WID_CL_MATRIX) { + if (this->hover_index != -1) { + this->hover_index = -1; + this->SetWidgetDirty(WID_CL_MATRIX); + } + } else { + int index = this->GetRowFromWidget(pt.y, widget, 0, -1); + if (index != this->hover_index) { + this->hover_index = index; + this->SetWidgetDirty(WID_CL_MATRIX); + } } } };