@@ -1620,17 +1620,14 @@ def process_event(self, event):
1620
1620
if isinstance (event , KeyboardEvent ):
1621
1621
if event .key_code == Screen .KEY_BACK :
1622
1622
if self ._column > 0 :
1623
- # Delete character in front of cursor - use value to trigger
1624
- # events.
1625
- self .value = "" .join ([
1626
- self ._value [:self ._column - 1 ],
1627
- self ._value [self ._column :]])
1623
+ # Delete character in front of cursor.
1624
+ self ._set_and_check_value ("" .join ([self ._value [:self ._column - 1 ],
1625
+ self ._value [self ._column :]]))
1628
1626
self ._column -= 1
1629
1627
if event .key_code == Screen .KEY_DELETE :
1630
1628
if self ._column < len (self ._value ):
1631
- self .value = "" .join ([
1632
- self ._value [:self ._column ],
1633
- self ._value [self ._column + 1 :]])
1629
+ self ._set_and_check_value ("" .join ([self ._value [:self ._column ],
1630
+ self ._value [self ._column + 1 :]]))
1634
1631
elif event .key_code == Screen .KEY_LEFT :
1635
1632
self ._column -= 1
1636
1633
self ._column = max (self ._column , 0 )
@@ -1643,9 +1640,8 @@ def process_event(self, event):
1643
1640
self ._column = len (self ._value )
1644
1641
elif event .key_code >= 32 :
1645
1642
# Insert any visible text at the current cursor position.
1646
- self .value = chr (event .key_code ).join ([
1647
- self ._value [:self ._column ],
1648
- self ._value [self ._column :]])
1643
+ self ._set_and_check_value (chr (event .key_code ).join ([self ._value [:self ._column ],
1644
+ self ._value [self ._column :]]))
1649
1645
self ._column += 1
1650
1646
else :
1651
1647
# Ignore any other key press.
@@ -1670,20 +1666,25 @@ def process_event(self, event):
1670
1666
def required_height (self , offset , width ):
1671
1667
return 1
1672
1668
1673
- @property
1674
- def value (self ):
1675
- return self ._value
1676
-
1677
1669
@property
1678
1670
def frame_update_count (self ):
1679
1671
# Force refresh for cursor if needed.
1680
1672
return 5 if self ._has_focus and not self ._frame .reduce_cpu else 0
1681
1673
1674
+ @property
1675
+ def value (self ):
1676
+ return self ._value
1677
+
1682
1678
@value .setter
1683
1679
def value (self , new_value ):
1680
+ self ._set_and_check_value (new_value , reset = True )
1681
+
1682
+ def _set_and_check_value (self , new_value , reset = False ):
1684
1683
# Only trigger the notification after we've changed the value.
1685
1684
old_value = self ._value
1686
1685
self ._value = new_value if new_value else ""
1686
+ if reset :
1687
+ self .reset ()
1687
1688
if old_value != self ._value and self ._on_change :
1688
1689
self ._on_change ()
1689
1690
if self ._validator :
@@ -2074,6 +2075,7 @@ def value(self, new_value):
2074
2075
self ._value = new_value .split ("\n " )
2075
2076
else :
2076
2077
self ._value = new_value
2078
+ self .reset ()
2077
2079
if old_value != self ._value and self ._on_change :
2078
2080
self ._on_change ()
2079
2081
0 commit comments