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 <waddlesplash@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Diff
src/kits/tracker/PoseView.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 43 insertions(+), 23 deletions(-)
@@ -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);
}
}
}