Fix various errors in handling specifiers and/or scripting messages. This
makes the Get, Count and Delete Replicant scripting directives work correctly, and consequently fixes the Remove BSnow button (ticket #1897), as well as commands like: hey Tracker Get Replicant BSnow of Shelf of View PoseView of Window 1 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28361 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -559,13 +559,12 @@ BShelf::MessageReceived(BMessage *msg)
|
|||||||
err = _GetProperty(&specifier, &reply);
|
err = _GetProperty(&specifier, &reply);
|
||||||
if (err == B_OK)
|
if (err == B_OK)
|
||||||
err = reply.FindInt32("index", &i);
|
err = reply.FindInt32("index", &i);
|
||||||
bool popped = (msg->PopSpecifier()==B_OK);
|
|
||||||
if (err == B_OK && !popped && msg->what == B_DELETE_PROPERTY) { // Delete Replicant
|
if (err == B_OK && msg->what == B_DELETE_PROPERTY) { // Delete Replicant
|
||||||
err = DeleteReplicant(i);
|
err = DeleteReplicant(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (err == B_OK && popped
|
if (err == B_OK && msg->what == B_GET_SUPPORTED_SUITES) {
|
||||||
&& msg->what == B_GET_SUPPORTED_SUITES) {
|
|
||||||
err = replyMsg.AddString("suites", "suite/vnd.Be-replicant");
|
err = replyMsg.AddString("suites", "suite/vnd.Be-replicant");
|
||||||
if (err == B_OK) {
|
if (err == B_OK) {
|
||||||
BPropertyInfo propInfo(sReplicantPropertyList);
|
BPropertyInfo propInfo(sReplicantPropertyList);
|
||||||
@@ -573,16 +572,14 @@ BShelf::MessageReceived(BMessage *msg)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (err == B_OK)
|
if (err == B_OK )
|
||||||
repMessage = ReplicantAt(i, &replicant, &ID, &err);
|
repMessage = ReplicantAt(i, &replicant, &ID, &err);
|
||||||
if (err == B_OK && replicant) {
|
if (err == B_OK && replicant) {
|
||||||
if (!popped) { // Get Replicant
|
|
||||||
BMessage archive;
|
BMessage archive;
|
||||||
err = replicant->Archive(&archive);
|
err = replicant->Archive(&archive);
|
||||||
if (err == B_OK)
|
if (err == B_OK)
|
||||||
err = replyMsg.AddMessage("result", &archive);
|
err = replyMsg.AddMessage("result", &archive);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
// now handles the replicant suite
|
// now handles the replicant suite
|
||||||
err = B_BAD_SCRIPT_SYNTAX;
|
err = B_BAD_SCRIPT_SYNTAX;
|
||||||
if (msg->what != B_GET_PROPERTY)
|
if (msg->what != B_GET_PROPERTY)
|
||||||
@@ -680,6 +677,10 @@ BShelf::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
|
|||||||
BView *replicant = NULL;
|
BView *replicant = NULL;
|
||||||
switch (shelfPropInfo.FindMatch(msg, 0, specifier, form, property)) {
|
switch (shelfPropInfo.FindMatch(msg, 0, specifier, form, property)) {
|
||||||
case 0:
|
case 0:
|
||||||
|
if (msg->what == B_COUNT_PROPERTIES) {
|
||||||
|
target = this;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 1:
|
case 1:
|
||||||
if (msg->PopSpecifier() != B_OK ) {
|
if (msg->PopSpecifier() != B_OK ) {
|
||||||
target = this;
|
target = this;
|
||||||
@@ -698,9 +699,7 @@ BShelf::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
|
|||||||
ReplicantAt(i, &replicant, &ID, &err);
|
ReplicantAt(i, &replicant, &ID, &err);
|
||||||
|
|
||||||
if (err == B_OK && replicant != NULL) {
|
if (err == B_OK && replicant != NULL) {
|
||||||
if (index <= 0 && msg->what == B_GET_SUPPORTED_SUITES)
|
|
||||||
return this;
|
return this;
|
||||||
msg->PopSpecifier();
|
|
||||||
} else {
|
} else {
|
||||||
BMessage replyMsg(B_MESSAGE_NOT_UNDERSTOOD);
|
BMessage replyMsg(B_MESSAGE_NOT_UNDERSTOOD);
|
||||||
replyMsg.AddInt32("error", B_BAD_INDEX);
|
replyMsg.AddInt32("error", B_BAD_INDEX);
|
||||||
|
|||||||
Reference in New Issue
Block a user