void UIManager::updateHoveredWidget(bool now) { if(m_hoverUpdateScheduled && !now) return; auto func = [this] { if(!m_rootWidget) return; m_hoverUpdateScheduled = false; UIWidgetPtr hoveredWidget; //if(!g_window.isMouseButtonPressed(Fw::MouseLeftButton) && !g_window.isMouseButtonPressed(Fw::MouseRightButton)) { hoveredWidget = m_rootWidget->recursiveGetChildByPos(g_window.getMousePosition(), false); if(hoveredWidget && !hoveredWidget->isEnabled()) hoveredWidget = nullptr; //} if(hoveredWidget != m_hoveredWidget) { UIWidgetPtr oldHovered = m_hoveredWidget; m_hoveredWidget = hoveredWidget; if(oldHovered) { oldHovered->updateState(Fw::HoverState); oldHovered->onHoverChange(false); } if(hoveredWidget) { hoveredWidget->updateState(Fw::HoverState); hoveredWidget->onHoverChange(true); } } }; if(now) func(); else { m_hoverUpdateScheduled = true; g_dispatcher.addEvent(func); } }