⛏️ index : haiku.git

author John Scipione <jscipione@gmail.com> 2025-11-25 22:48:51.0 -05:00:00
committer waddlesplash <waddlesplash@gmail.com> 2025-11-27 4:10:53.0 +00:00:00
commit
5388208c0b313c4347f7973698e6eacc6d5c1bba [patch]
tree
c9ac218623ac523ef28c0340772d2c65f1e5fc7a
parent
a8deca6c410d4e89afd057c450009037d337b814
download
5388208c0b313c4347f7973698e6eacc6d5c1bba.tar.gz

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(-)

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);
		}
	}
}