@@ -233,26 +233,7 @@ void CDialogHolder::OnFrame()
233
233
234
234
m_b_in_update = true ;
235
235
236
- if (m_is_foremost && !GEnv.isDedicatedServer )
237
- {
238
- auto & cursor = GetUICursor ();
239
- const bool need_cursor = TopInputReceiver () && TopInputReceiver ()->NeedCursor ();
240
-
241
- const u32 cur_time = Device.dwTimeContinual ;
242
-
243
- if (need_cursor)
244
- {
245
- if (!cursor.IsVisible ())
246
- {
247
- cursor.Show ();
248
- m_become_visible_time = cur_time;
249
- }
250
- }
251
- else if (float (cur_time - m_become_visible_time) > (psControllerCursorAutohideTime * 1000 .f ))
252
- {
253
- cursor.Hide ();
254
- }
255
- }
236
+ UpdateCursorVisibility ();
256
237
257
238
CUIDialogWnd* wnd = TopInputReceiver ();
258
239
if (wnd && wnd->IsEnabled ())
@@ -288,6 +269,33 @@ void CDialogHolder::CleanInternals()
288
269
GetUICursor ().Hide ();
289
270
}
290
271
272
+ void CDialogHolder::UpdateCursorVisibility ()
273
+ {
274
+ if (m_is_foremost && !GEnv.isDedicatedServer )
275
+ {
276
+ auto & cursor = GetUICursor ();
277
+ const bool cursor_is_visible = cursor.IsVisible ();
278
+ const bool need_cursor = TopInputReceiver () && TopInputReceiver ()->NeedCursor ();
279
+
280
+ const u32 cur_time = Device.dwTimeContinual ;
281
+
282
+ // These conditions are optimal, don't reorder.
283
+ if (need_cursor)
284
+ {
285
+ if (!cursor_is_visible)
286
+ {
287
+ cursor.Show ();
288
+ m_become_visible_time = cur_time;
289
+ }
290
+ }
291
+ else if (cursor_is_visible)
292
+ {
293
+ if (cur_time - m_become_visible_time > psControllerCursorAutohideTime * 1000 .f )
294
+ cursor.Hide ();
295
+ }
296
+ }
297
+ }
298
+
291
299
bool CDialogHolder::IR_UIOnKeyboardPress (int dik)
292
300
{
293
301
CUIDialogWnd* TIR = TopInputReceiver ();
@@ -426,6 +434,8 @@ bool CDialogHolder::IR_UIOnMouseWheel(float x, float y)
426
434
if (!TIR->IR_process ())
427
435
return false ;
428
436
437
+ UpdateCursorVisibility ();
438
+
429
439
// Vertical scroll is in higher priority
430
440
EUIMessages wheelMessage;
431
441
if (y > 0 )
@@ -449,6 +459,9 @@ bool CDialogHolder::IR_UIOnMouseMove(int dx, int dy)
449
459
return false ;
450
460
if (!TIR->IR_process ())
451
461
return false ;
462
+
463
+ UpdateCursorVisibility ();
464
+
452
465
if (GetUICursor ().IsVisible ())
453
466
{
454
467
GetUICursor ().UpdateCursorPosition (dx, dy);
0 commit comments