|
|
|
@ -153,23 +153,7 @@ namespace Avalonia.Controls |
|
|
|
{ |
|
|
|
if (editingElement is CheckBox editingCheckBox) |
|
|
|
{ |
|
|
|
bool? uneditedValue = editingCheckBox.IsChecked; |
|
|
|
bool editValue = false; |
|
|
|
if(editingEventArgs is PointerPressedEventArgs args) |
|
|
|
{ |
|
|
|
// Editing was triggered by a mouse click
|
|
|
|
Point position = args.GetPosition(editingCheckBox); |
|
|
|
Rect rect = new Rect(0, 0, editingCheckBox.Bounds.Width, editingCheckBox.Bounds.Height); |
|
|
|
editValue = rect.Contains(position); |
|
|
|
} |
|
|
|
else if (_beganEditWithKeyboard) |
|
|
|
{ |
|
|
|
// Editing began by a user pressing spacebar
|
|
|
|
editValue = true; |
|
|
|
_beganEditWithKeyboard = false; |
|
|
|
} |
|
|
|
|
|
|
|
if (editValue) |
|
|
|
void EditValue() |
|
|
|
{ |
|
|
|
// User clicked the checkbox itself or pressed space, let's toggle the IsChecked value
|
|
|
|
if (editingCheckBox.IsThreeState) |
|
|
|
@ -192,6 +176,46 @@ namespace Avalonia.Controls |
|
|
|
editingCheckBox.IsChecked = !editingCheckBox.IsChecked; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bool? uneditedValue = editingCheckBox.IsChecked; |
|
|
|
if(editingEventArgs is PointerPressedEventArgs args) |
|
|
|
{ |
|
|
|
void ProcessPointerArgs() |
|
|
|
{ |
|
|
|
// Editing was triggered by a mouse click
|
|
|
|
Point position = args.GetPosition(editingCheckBox); |
|
|
|
Rect rect = new Rect(0, 0, editingCheckBox.Bounds.Width, editingCheckBox.Bounds.Height); |
|
|
|
if(rect.Contains(position)) |
|
|
|
{ |
|
|
|
EditValue(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void OnLayoutUpdated(object sender, EventArgs e) |
|
|
|
{ |
|
|
|
if(!editingCheckBox.Bounds.IsEmpty) |
|
|
|
{ |
|
|
|
editingCheckBox.LayoutUpdated -= OnLayoutUpdated; |
|
|
|
ProcessPointerArgs(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if(editingCheckBox.Bounds.IsEmpty) |
|
|
|
{ |
|
|
|
editingCheckBox.LayoutUpdated += OnLayoutUpdated; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
ProcessPointerArgs(); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (_beganEditWithKeyboard) |
|
|
|
{ |
|
|
|
// Editing began by a user pressing spacebar
|
|
|
|
_beganEditWithKeyboard = false; |
|
|
|
EditValue(); |
|
|
|
} |
|
|
|
|
|
|
|
return uneditedValue; |
|
|
|
} |
|
|
|
return false; |
|
|
|
|