hrev44510 adds 2 changesets to branch 'master' old head: 44f900e22159f63301079c68abb711ead5669a4d new head: c01e918c0a1ed600180bde084f51284c756a6d1c ---------------------------------------------------------------------------- 66c09a3: Delayed widget editing, crash avoidance Make the PoseView stop watching a TextWidget if it's being deleted. Could happen in race conditions for example, if you click to edit the name widget of a pose while the pose is being deleted soon after. c01e918: Cancel editing of Widget if sorting of poses occured. Since the position of the widget was registered at the first click, it likely changed and its causing drawing afterfacts (it's editing at its old location). [ Philippe Saint-Pierre <stpere@xxxxxxxxx> ] ---------------------------------------------------------------------------- 3 files changed, 9 insertions(+), 3 deletions(-) src/kits/tracker/PoseView.cpp | 7 +++++-- src/kits/tracker/PoseView.h | 2 +- src/kits/tracker/TextWidget.cpp | 3 +++ ############################################################################ Commit: 66c09a35546f869af3fef1968a3c423d04cc7495 URL: http://cgit.haiku-os.org/haiku/commit/?id=66c09a3 Author: Philippe Saint-Pierre <stpere@xxxxxxxxx> Date: Fri Aug 10 16:08:45 2012 UTC Delayed widget editing, crash avoidance Make the PoseView stop watching a TextWidget if it's being deleted. Could happen in race conditions for example, if you click to edit the name widget of a pose while the pose is being deleted soon after. ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 0a07665..c04d395 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -7137,9 +7137,10 @@ BPoseView::MouseDown(BPoint where) void -BPoseView::SetTextWidgetToCheck(BTextWidget* widget) +BPoseView::SetTextWidgetToCheck(BTextWidget* widget, BTextWidget* old) { - fTextWidgetToCheck = widget; + if (old == NULL || fTextWidgetToCheck == old) + fTextWidgetToCheck = widget; } diff --git a/src/kits/tracker/PoseView.h b/src/kits/tracker/PoseView.h index 09f21e8..ffd08fd 100644 --- a/src/kits/tracker/PoseView.h +++ b/src/kits/tracker/PoseView.h @@ -425,7 +425,7 @@ class BPoseView : public BView { virtual void AdaptToVolumeChange(BMessage*); virtual void AdaptToDesktopIntegrationChange(BMessage*); - void SetTextWidgetToCheck(BTextWidget*); + void SetTextWidgetToCheck(BTextWidget*, BTextWidget* = NULL); protected: // view setup diff --git a/src/kits/tracker/TextWidget.cpp b/src/kits/tracker/TextWidget.cpp index 1a0f93e..636b4f5 100644 --- a/src/kits/tracker/TextWidget.cpp +++ b/src/kits/tracker/TextWidget.cpp @@ -78,6 +78,9 @@ BTextWidget::BTextWidget(Model* model, BColumn* column, BPoseView* view) BTextWidget::~BTextWidget() { + if (fLastClickedTime != 0) + fParams.poseView->SetTextWidgetToCheck(NULL, this); + delete fText; } ############################################################################ Revision: hrev44510 Commit: c01e918c0a1ed600180bde084f51284c756a6d1c URL: http://cgit.haiku-os.org/haiku/commit/?id=c01e918 Author: Philippe Saint-Pierre <stpere@xxxxxxxxx> Date: Fri Aug 10 16:23:08 2012 UTC Cancel editing of Widget if sorting of poses occured. Since the position of the widget was registered at the first click, it likely changed and its causing drawing afterfacts (it's editing at its old location). ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index c04d395..0ec53c7 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -9169,6 +9169,8 @@ DumpOne(BPose* pose, void*) void BPoseView::SortPoses() { + if (fTextWidgetToCheck != NULL) + fTextWidgetToCheck->CancelWait(); CommitActivePose(); // PRINT(("pose list count %d\n", fPoseList->CountItems())); #if xDEBUG