Input_server: fix archiving of input method replicants
- Make sure the archive contains the replicant pop-up menu - Make sure said menu is properly re-targetted when instanciating Fixes #13138 Signed-off-by: Adrien Destugues <[email protected]>
This commit is contained in:
committed by
Adrien Destugues
parent
856ecc7b19
commit
baf9ae1d47
@@ -262,6 +262,11 @@ _BMethodAddOn_::AddMethod()
|
|||||||
msg.AddInt32("cookie", fCookie);
|
msg.AddInt32("cookie", fCookie);
|
||||||
msg.AddString("name", fName);
|
msg.AddString("name", fName);
|
||||||
msg.AddData("icon", B_RAW_TYPE, fIcon, 16*16*1);
|
msg.AddData("icon", B_RAW_TYPE, fIcon, 16*16*1);
|
||||||
|
BMessage menuMsg;
|
||||||
|
if (fMenu != NULL)
|
||||||
|
fMenu->Archive(&menuMsg);
|
||||||
|
msg.AddMessage("menu", &menuMsg);
|
||||||
|
msg.AddMessenger("target", fMessenger);
|
||||||
if (((InputServer*)be_app)->MethodReplicant())
|
if (((InputServer*)be_app)->MethodReplicant())
|
||||||
return ((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
|
return ((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -367,13 +367,35 @@ MethodReplicant::AddMethod(BMessage* message)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BMessage menuMsg;
|
||||||
|
if (message->FindMessage("menu", &menuMsg) != B_OK) {
|
||||||
|
fprintf(stderr, "can't find menu in message\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PRINT_OBJECT(menuMsg);
|
||||||
|
|
||||||
|
BMessenger messenger;
|
||||||
|
if (message->FindMessenger("target", &messenger) != B_OK) {
|
||||||
|
fprintf(stderr, "can't find target in message\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BMenu* menu = static_cast<BMenu*>(BMenu::Instantiate(&menuMsg));
|
||||||
|
if (menu == NULL) {
|
||||||
|
PRINT(("can't instantiate menu\n"));
|
||||||
|
} else
|
||||||
|
menu->SetTargetForItems(messenger);
|
||||||
|
|
||||||
MethodMenuItem* item = FindItemByCookie(cookie);
|
MethodMenuItem* item = FindItemByCookie(cookie);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
fprintf(stderr, "item with cookie %" B_PRIx32 " already exists\n", cookie);
|
fprintf(stderr, "item with cookie %" B_PRIx32 " already exists\n", cookie);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
item = new MethodMenuItem(cookie, name, icon);
|
if (menu != NULL) {
|
||||||
|
item = new MethodMenuItem(cookie, name, icon, menu, messenger);
|
||||||
|
} else
|
||||||
|
item = new MethodMenuItem(cookie, name, icon);
|
||||||
fMenu.AddItem(item);
|
fMenu.AddItem(item);
|
||||||
item->SetTarget(this);
|
item->SetTarget(this);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user