From 5388208c0b313c4347f7973698e6eacc6d5c1bba Mon Sep 17 00:00:00 2001 From: John Scipione Date: Tue, 25 Nov 2025 22:48:51 -0500 Subject: [PATCH] Tracker: Fix EditFirstWidget() pose location in icon mode. The old code works because in icon-mode you have just one row but this is not the intended way to determine the pose location in icon mode (and mini-icon mode). Refactor CommitActivePose() and kEditName in PoseView. Use CurrentPoseList() to use filtered or regular pose list (but don't update both). In practical terms this should do nothing. Change-Id: Iedafb147a6963bdb1411491be25641141325c1bf Reviewed-on: https://review.haiku-os.org/c/haiku/+/10025 Reviewed-by: waddlesplash Tested-by: Commit checker robot --- src/kits/tracker/PoseView.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index b4da07e..847e822 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -1169,22 +1169,22 @@ void BPoseView::CommitActivePose(bool saveChanges) { - BPose* activePose = ActivePose(); - if (activePose != NULL) { - int32 index = fPoseList->IndexOf(ActivePose()); - if (IsFiltering()) - index = fFilteredPoseList->IndexOf(ActivePose()); - - BPoint loc(0, index * fListElemHeight); - if (ViewMode() != kListMode) - loc = ActivePose()->Location(this); - - activePose->Commit(saveChanges, loc, this, index); - BPose* pose = fActivePose; - fActivePose = NULL; - if (IsFiltering() && !FilterPose(pose)) - RemoveFilteredPose(pose, index); - } + if (ActivePose() == NULL) + return; + + int32 index = CurrentPoseList()->IndexOf(fActivePose); + + BPoint poseLoc; + if (ViewMode() == kListMode) + poseLoc = BPoint(0, index * fListElemHeight); + else + poseLoc = fActivePose->Location(this); + + fActivePose->Commit(saveChanges, poseLoc, this, index); + BPose* activePose = fActivePose; + fActivePose = NULL; + if (IsFiltering() && !FilterPose(activePose)) + RemoveFilteredPose(activePose, index); } @@ -2509,14 +2509,20 @@ case kEditName: { - if (ActivePose()) + if (ActivePose() != NULL) break; BPose* pose = fSelectionList->FirstItem(); - if (pose != NULL) { - BPoint where(0, CurrentPoseList()->IndexOf(pose) * fListElemHeight); - pose->EditFirstWidget(where, this); - } + if (pose == NULL) + break; + + BPoint poseLoc; + if (ViewMode() == kListMode) + poseLoc = BPoint(0, CurrentPoseList()->IndexOf(pose) * fListElemHeight); + else + poseLoc = pose->Location(this); + + pose->EditFirstWidget(poseLoc, this); break; } @@ -3483,7 +3489,14 @@ UpdateScrollRange(); CommitActivePose(); SelectPose(pose, index); - pose->EditFirstWidget(BPoint(0, index * fListElemHeight), this); + + BPoint poseLoc; + if (ViewMode() == kListMode) + poseLoc = BPoint(0, index * fListElemHeight); + else + poseLoc = pose->Location(this); + + pose->EditFirstWidget(poseLoc, this); } } @@ -3517,7 +3530,14 @@ UpdateScrollRange(); CommitActivePose(); SelectPose(pose, index); - pose->EditFirstWidget(BPoint(0, index * fListElemHeight), this); + + BPoint poseLoc; + if (ViewMode() == kListMode) + poseLoc = BPoint(0, index * fListElemHeight); + else + poseLoc = pose->Location(this); + + pose->EditFirstWidget(poseLoc, this); } } } -- gitore 0.2.3