Merge pull request #869 from Textualize/max-idle

add max_idle for screen
This commit is contained in:
Will McGugan
2022-10-11 15:56:47 +01:00
committed by GitHub
2 changed files with 10 additions and 1 deletions

View File

@@ -10,6 +10,7 @@ from __future__ import annotations
import asyncio
import inspect
from asyncio import CancelledError, Queue, QueueEmpty, Task
from time import time
from functools import partial
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Iterable
from weakref import WeakSet
@@ -75,6 +76,8 @@ class MessagePump(metaclass=MessagePumpMeta):
self._pending_message: Message | None = None
self._task: Task | None = None
self._timers: WeakSet[Timer] = WeakSet()
self._last_idle: float = time()
self._max_idle: float | None = None
@property
def task(self) -> Task:
@@ -337,7 +340,12 @@ class MessagePump(metaclass=MessagePumpMeta):
break
finally:
self._message_queue.task_done()
if self._message_queue.empty():
current_time = time()
if self._message_queue.empty() or (
self._max_idle is not None
and current_time - self._last_idle > self._max_idle
):
self._last_idle = current_time
if not self._closed:
event = events.Idle(self)
for _cls, method in self._get_dispatch_methods(

View File

@@ -51,6 +51,7 @@ class Screen(Widget):
self._dirty_widgets: set[Widget] = set()
self._update_timer: Timer | None = None
self._callbacks: list[CallbackType] = []
self._max_idle = UPDATE_PERIOD
@property
def is_transparent(self) -> bool: