mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
prevent messages stack
This commit is contained in:
@@ -161,10 +161,7 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
`True` if the message will be sent, or `False` if it is disabled.
|
`True` if the message will be sent, or `False` if it is disabled.
|
||||||
"""
|
"""
|
||||||
message_type = type(message)
|
message_type = type(message)
|
||||||
if (
|
if self._prevent_events and message_type in self._prevent_events[-1]:
|
||||||
self._prevent_message_types_stack
|
|
||||||
and message_type in self._prevent_message_types_stack[-1]
|
|
||||||
):
|
|
||||||
return False
|
return False
|
||||||
return type(message) not in self._disabled_messages
|
return type(message) not in self._disabled_messages
|
||||||
|
|
||||||
@@ -475,12 +472,11 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
if message.no_dispatch:
|
if message.no_dispatch:
|
||||||
return
|
return
|
||||||
|
|
||||||
with self.prevent(*message._prevent):
|
# Allow apps to treat events and messages separately
|
||||||
# Allow apps to treat events and messages separately
|
if isinstance(message, Event):
|
||||||
if isinstance(message, Event):
|
await self.on_event(message)
|
||||||
await self.on_event(message)
|
else:
|
||||||
else:
|
await self._on_message(message)
|
||||||
await self._on_message(message)
|
|
||||||
await self._flush_next_callbacks()
|
await self._flush_next_callbacks()
|
||||||
|
|
||||||
def _get_dispatch_methods(
|
def _get_dispatch_methods(
|
||||||
@@ -557,27 +553,14 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
```
|
```
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if self._prevent_message_types_stack:
|
if self._prevent_events:
|
||||||
self._prevent_message_types_stack.append(
|
self._prevent_events.append(self._prevent_events[-1].union(message_types))
|
||||||
self._prevent_message_types_stack[-1].union(message_types)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
self._prevent_message_types_stack.append(set(message_types))
|
self._prevent_events.append(set(message_types))
|
||||||
try:
|
try:
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
self._prevent_message_types_stack.pop()
|
self._prevent_events.pop()
|
||||||
|
|
||||||
def is_prevented(self, message_type: type[Message]) -> bool:
|
|
||||||
"""Check if a message type is currently prevented from posting with [prevent][textual.message_pump.MessagePump.prevent].
|
|
||||||
|
|
||||||
Args:
|
|
||||||
message_type: A message type.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
`True` if the message type is currently prevented, otherwise `False`
|
|
||||||
"""
|
|
||||||
return message_type in self._prevent_message_types_stack
|
|
||||||
|
|
||||||
async def post_message(self, message: Message) -> bool:
|
async def post_message(self, message: Message) -> bool:
|
||||||
"""Post a message or an event to this message pump.
|
"""Post a message or an event to this message pump.
|
||||||
@@ -594,8 +577,6 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
return False
|
return False
|
||||||
if not self.check_message_enabled(message):
|
if not self.check_message_enabled(message):
|
||||||
return True
|
return True
|
||||||
if self._prevent_message_types_stack:
|
|
||||||
message._prevent.update(self._prevent_message_types_stack[-1])
|
|
||||||
await self._message_queue.put(message)
|
await self._message_queue.put(message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -618,8 +599,6 @@ class MessagePump(metaclass=MessagePumpMeta):
|
|||||||
return False
|
return False
|
||||||
if not self.check_message_enabled(message):
|
if not self.check_message_enabled(message):
|
||||||
return False
|
return False
|
||||||
if self._prevent_message_types_stack:
|
|
||||||
message._prevent.update(self._prevent_message_types_stack[-1])
|
|
||||||
await self._message_queue.put(message)
|
await self._message_queue.put(message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user