Tracker: AttributeChanged() on current pose list, fixes #19770.
When filtering this is the filtered pose list, else this is the pose list in list mode or the visible pose list in icon mode. Remove filtered pose list fixup from hrev44493 to resync the lists afterwords which fixes issue with duplicate symlinked files appearing on other volumes that appear to be created when saving linked files while filtering. Change-Id: I6d6c85fe222960f47cc206322eeb4441f7fa73aa Reviewed-on: https://review.haiku-os.org/c/haiku/+/10970 Haiku-Format: Haiku-format Bot <[email protected]> Tested-by: Commit checker robot <[email protected]> Reviewed-by: John Scipione <[email protected]>
This commit is contained in:
@@ -5931,6 +5931,9 @@ BPoseView::StopWatchingParentsOf(const entry_ref* ref)
|
|||||||
bool
|
bool
|
||||||
BPoseView::AttributeChanged(const BMessage* message)
|
BPoseView::AttributeChanged(const BMessage* message)
|
||||||
{
|
{
|
||||||
|
ASSERT(ContainerWindow() != NULL);
|
||||||
|
ASSERT(CurrentPoseList() != NULL);
|
||||||
|
|
||||||
node_ref itemNode;
|
node_ref itemNode;
|
||||||
message->FindInt32("device", &itemNode.device);
|
message->FindInt32("device", &itemNode.device);
|
||||||
message->FindInt64("node", (int64*)&itemNode.node);
|
message->FindInt64("node", (int64*)&itemNode.node);
|
||||||
@@ -5957,7 +5960,7 @@ BPoseView::AttributeChanged(const BMessage* message)
|
|||||||
|
|
||||||
int32 index;
|
int32 index;
|
||||||
attr_info info;
|
attr_info info;
|
||||||
PoseList* posesFound = fPoseList->FindAllPoses(&itemNode);
|
PoseList* posesFound = CurrentPoseList()->FindAllPoses(&itemNode);
|
||||||
int32 posesCount = posesFound->CountItems();
|
int32 posesCount = posesFound->CountItems();
|
||||||
for (int i = 0; i < posesCount; i++) {
|
for (int i = 0; i < posesCount; i++) {
|
||||||
BPose* pose = posesFound->ItemAt(i);
|
BPose* pose = posesFound->ItemAt(i);
|
||||||
@@ -5984,12 +5987,9 @@ BPoseView::AttributeChanged(const BMessage* message)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool visible = fPoseList->FindPose(poseModel->NodeRef(), &index) != NULL;
|
bool visible = CurrentPoseList()->FindPose(poseModel->NodeRef(), &index) != NULL;
|
||||||
int32 poseListIndex = index;
|
int32 poseListIndex = index;
|
||||||
|
|
||||||
if (IsFiltering())
|
|
||||||
visible = fFilteredPoseList->FindPose(poseModel->NodeRef(), &index) != NULL;
|
|
||||||
|
|
||||||
BPoint poseLoc;
|
BPoint poseLoc;
|
||||||
if (ViewMode() == kListMode)
|
if (ViewMode() == kListMode)
|
||||||
poseLoc.Set(0, index * fListElemHeight);
|
poseLoc.Set(0, index * fListElemHeight);
|
||||||
@@ -6029,28 +6029,12 @@ BPoseView::AttributeChanged(const BMessage* message)
|
|||||||
}
|
}
|
||||||
poseModel->CloseNode();
|
poseModel->CloseNode();
|
||||||
|
|
||||||
if (IsFiltering()) {
|
|
||||||
if (!visible && FilterPose(pose)) {
|
|
||||||
visible = true;
|
|
||||||
float scrollBy = 0;
|
|
||||||
BRect bounds = Bounds();
|
|
||||||
AddPoseToList(fFilteredPoseList, true, true, pose, bounds, scrollBy, true);
|
|
||||||
continue;
|
|
||||||
} else if (visible && !FilterPose(pose)) {
|
|
||||||
RemoveFilteredPose(pose, index);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (attrName != NULL) {
|
if (attrName != NULL) {
|
||||||
// note: the following code is wrong, because this sort of hashing
|
// note: the following code is wrong, because this sort of hashing
|
||||||
// may overlap and we get aliasing
|
// may overlap and we get aliasing
|
||||||
uint32 attrHash = AttrHashString(attrName, info.type);
|
uint32 attrHash = AttrHashString(attrName, info.type);
|
||||||
if (attrHash == PrimarySort() || attrHash == SecondarySort()) {
|
if (attrHash == PrimarySort() || attrHash == SecondarySort())
|
||||||
_CheckPoseSortOrder(fPoseList, pose, poseListIndex);
|
_CheckPoseSortOrder(CurrentPoseList(), pose, poseListIndex);
|
||||||
if (IsFiltering() && visible)
|
|
||||||
_CheckPoseSortOrder(fFilteredPoseList, pose, index);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
int32 fields;
|
int32 fields;
|
||||||
if (message->FindInt32("fields", &fields) != B_OK)
|
if (message->FindInt32("fields", &fields) != B_OK)
|
||||||
@@ -6060,9 +6044,7 @@ BPoseView::AttributeChanged(const BMessage* message)
|
|||||||
uint32 attrHash = sAttrColumnMap[i].attrHash;
|
uint32 attrHash = sAttrColumnMap[i].attrHash;
|
||||||
if (attrHash == PrimarySort() || attrHash == SecondarySort()) {
|
if (attrHash == PrimarySort() || attrHash == SecondarySort()) {
|
||||||
if ((fields & sAttrColumnMap[i].fieldMask) != 0) {
|
if ((fields & sAttrColumnMap[i].fieldMask) != 0) {
|
||||||
_CheckPoseSortOrder(fPoseList, pose, poseListIndex);
|
_CheckPoseSortOrder(CurrentPoseList(), pose, poseListIndex);
|
||||||
if (IsFiltering() && visible)
|
|
||||||
_CheckPoseSortOrder(fFilteredPoseList, pose, index);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user