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.AddString("name", fName);
|
||||
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())
|
||||
return ((InputServer*)be_app)->MethodReplicant()->SendMessage(&msg);
|
||||
else
|
||||
|
||||
@@ -367,13 +367,35 @@ MethodReplicant::AddMethod(BMessage* message)
|
||||
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);
|
||||
if (item != NULL) {
|
||||
fprintf(stderr, "item with cookie %" B_PRIx32 " already exists\n", cookie);
|
||||
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);
|
||||
item->SetTarget(this);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user