Fix pasting into CharInput not affecting brush

This commit is contained in:
Isaiah Odhner 2023-07-11 01:48:07 -04:00
parent 2c1069d619
commit 85ba439cbd
2 changed files with 6 additions and 12 deletions

View File

@ -201,7 +201,6 @@ To preview ANSI art files in file managers like Nautilus, Thunar, Nemo, or Caja,
- Hitting Enter in View Bitmap mode exits the mode but may also trigger a menu item. Menu items ought to be disabled when hidden, and View Bitmap should prevent the key event from taking other actions if possible.
- Airbrush is continuous in space instead of time. It should keep spraying while the mouse stays still.
- After setting a custom zoom level, the magnifier tool will not return to the custom zoom level when un-magnifying and re-magnifying.
- Pasting into the character input box of the color palette changes the displayed character but not the character used for drawing.
- Dragging and dropping files may fail if the character input box is focused. Click in the area around the canvas to remove focus.
The program has only been tested on Linux. Issues on other platforms are as-yet _unknown_ :)

View File

@ -359,22 +359,17 @@ class CharInput(Input, inherit_bindings=False):
"""Limit the value to a single character."""
return value[-1] if value else " "
# Using watch_value caused a bug where the character would oscillate between multiple values
# Previously this used watch_value,
# and had a bug where the character would oscillate between multiple values
# due to a feedback loop between watch_value and on_char_input_char_selected.
# watch_value would queue up a CharSelected message, and then on_char_input_char_selected would
# receive an older CharSelected message and set the value to the old value,
# which would cause watch_value to queue up another CharSelected event, and it would cycle through values.
# (Usually it wasn't a problem because the key events would be processed in time.)
# async def watch_value(self, value: str) -> None:
# """Called when value changes."""
# self.post_message(self.CharSelected(value))
# Instead, we override on_key to send the message.
async def on_key(self, event: events.Key) -> None:
"""Called when a key is pressed."""
if event.is_printable:
assert event.character is not None, "is_printable should imply character is not None"
self.value = event.character
self.post_message(self.CharSelected(self.value))
def on_input_changed(self, event: Input.Changed) -> None:
"""Called when value changes."""
with self.prevent(Input.Changed):
self.post_message(self.CharSelected(event.value))
def validate_cursor_position(self, cursor_position: int) -> int:
"""Force the cursor position to 0 so that it's over the character."""