Opened 13 years ago

Closed 3 years ago

#661 closed bug (fixed)

CannaIM deskbar replicant popup menu not working; replicant handle menu displayed instead.

Reported by: koki@… Owned by: korli
Priority: normal Milestone: R1
Component: - General Version: R1/Development
Keywords: Cc: bxi07354@…, jackburton
Blocked By: Blocking:
Has a Patch: yes Platform: All

Description (last modified by korli)

When installing Canna input method, a replicant is loaded in the Deskbar.

Clicking on this replicant with the mouse should display a popup menu, but in Haiku it doesn't. Instead, the replicant handle menu is displayed.

Was not sure what component this belonged to; feel free to change it if necessary.

Attachments (5)

after_installing.png (8.1 KB) - added by mt 4 years ago.
after_restarting.png (7.1 KB) - added by mt 4 years ago.
replicant_menu.png (6.9 KB) - added by mt 4 years ago.
syslog (167.2 KB) - added by mt 4 years ago.
0001-Revert-64-bit-fixes-for-input_server.patch (7.6 KB) - added by mt 4 years ago.

Download all attachments as: .zip

Change History (31)

comment:1 Changed 13 years ago by koki@…

Cc: bxi07354@… added

comment:2 Changed 13 years ago by korli

This is dependent on message scripting feature. It is being fixed, but could be longer than expected.

comment:3 Changed 13 years ago by korli

FYI, several scripts which have to work first :

hey Deskbar get Messenger of Shelf of View Status of Window Deskbar hey Deskbar get Name of Replicant 0 of Shelf of View Status of Window Deskbar hey Deskbar get View of Replicant 0 of Shelf of View Status of Window Deskbar

BTW I think Haiku input_server should be changed to simply query (doesn't work on R5 because the replicant has no name) : hey Deskbar get View of Replicant MethodReplicant of Shelf of View Status of Window Deskbar

comment:4 Changed 13 years ago by korli

Resolution: fixed

comment:5 Changed 13 years ago by korli

should be fixed in revision 17841

comment:6 Changed 13 years ago by korli

Status: newclosed

comment:7 Changed 13 years ago by koki@…

Nice improvements! We are getting close.

As tested on build 17843, CannaIM deskbar popup menu now works, but there two small oddities:

1) For some reason the submenu that should display among other things the About window when Canna is in Japanese mode appears empty.

2) The replicant handle is still being displayed; it should not.

Should I open separate bug reports for the above?

comment:8 Changed 13 years ago by korli

About these oddities, they must be related to our interface kit implementation: the canna method and method replicant were working on R5 last time I tried. Stefano, could you have a look at the menu oddity ?

comment:9 Changed 13 years ago by korli

Cc: stefano.ceccherini@… added

comment:10 Changed 13 years ago by jackburton

"1) For some reason the submenu that should display among other things the About window when Canna is in Japanese mode appears empty."

I'll have a look at this. Might be a bug in BShelf or BDragger.

"2) The replicant handle is still being displayed; it should not."

This could be related to #116.

comment:11 Changed 13 years ago by bxi07354@…

(In reply to comment #6)

"1) For some reason the submenu that should display among other things the About window when Canna is in Japanese mode appears empty."

BMenu::Archive doesn't do deep.

if (err == B_OK && deep) {

TODO store items and rects

}

comment:12 Changed 13 years ago by korli

Popup menu is now working somehow. Weirdly it seems to appear disabled, and I don't know why.

comment:13 Changed 13 years ago by bxi07354@…

The mistake was found by BMenu::InitData(BMessage *data). data->FindBool("_disable", &fEnabled);

BSeparatorItem is not displayed. status_t BSeparatorItem::Archive(BMessage* archive, bool deep) const {

if (!archive->HasString(B_CLASS_FIELD))

  • archive->AddString(B_CLASS_FIELD, "BMenuItem");

+ archive->AddString(B_CLASS_FIELD, "BSeparatorItem");

The return value(item) is not necessarily MethodMenuItem*. void MethodReplicant::MouseDown(BPoint point) {

.... BMenuItem *item = fMenu.Go(where, true, true, BRect(where - BPoint(4, 4),

where + BPoint(4, 4)));

if (item && cast_as(item, MethodMenuItem)) {

BMessage msg(IS_SET_METHOD); msg.AddInt32("cookie", ((MethodMenuItem *)item)->Cookie()); ....

comment:14 Changed 13 years ago by korli

This was somehow fixed in revision 18071. Is there anything still valid ?

comment:15 Changed 13 years ago by korli

barber, I applied the last part of your patch in revision 18093, and even tested it successfully. Thanks a lot!

comment:16 Changed 13 years ago by bxi07354@…

(In reply to comment #6)

"1) For some reason the submenu that should display among other things the About window when Canna is in Japanese mode appears empty."

This was solved by revision 18093. Thank you.

comment:17 Changed 13 years ago by korli

Description: modified (diff)
Platform: All
Resolution: fixed
Status: closedreopened

tested again in revision 18880. The menu itself is empty in the deskbar replicant.

comment:18 Changed 13 years ago by korli

Cc: jackburton added

comment:19 Changed 13 years ago by jackburton

Korli, might this change be the culprit ? http://svn.berlios.de/viewcvs/haiku/haiku/trunk/src/kits/interface/View.cpp?rev=18490&r1=18086&r2=18490

AFAIK, we should add the "error" field to the scripting message even if it's B_OK.

comment:20 Changed 13 years ago by korli

Resolution: fixed
Status: reopenedclosed

thanks Stefano, indeed it was this change and another. it's now fixed.

comment:21 Changed 4 years ago by mt

Resolution: fixed
Status: closedreopened

Hi, I tested hrev49588 (gcc2 / gcc4 hybrid), this bug seems to occur again.

  • After installing a input method, input method menu and icon don't appear.
  • After restarting the system, draggier & replicant menu appears.
  • There is "Deskbar refuses to add method replicant: General system error" in SYSLOG, though I don't know it is related to this bug.

Changed 4 years ago by mt

Attachment: after_installing.png added

Changed 4 years ago by mt

Attachment: after_restarting.png added

Changed 4 years ago by mt

Attachment: replicant_menu.png added

Changed 4 years ago by mt

Attachment: syslog added

comment:22 Changed 4 years ago by mt

kcg369 pointed out it to me. http://kcg369.b.osdn.me/2014/05/20/64-bit-fixes-for-input_server/ This bug was recurrence due to the different types of messaging functions for handling cookie. We need to unify type of the functions (Int32 or Pointer).

I tested the patch for gcc2 and x86_64, it seems to fix menu and icon. But I don't know whether the cookie is int32 or a pointer.

comment:23 Changed 4 years ago by mt

Has a Patch: set

comment:24 Changed 3 years ago by pulkomandy

Version: R1/Development

Looking at the full commit (http://cgit.haiku-os.org/haiku/commit/?id=57ab0395ad31761e27ef6d5aa3af68cc3e4d71b2), there are places where we put a pointer there. When using an int32, we only use the low part of the pointer, which can work most of the time, but in rare cases two pointers will have the same low-part and become mixed up.

We have several solutions:

  • Use void* as in the original change, and adjust Canna to still work,
  • Use int32, and on 64-bit platforms, use an hash map to map the 32-bit cookie back to a 64-bit pointer pointer,
  • Use void* on non-gcc2 platforms, keep int32 for gcc2 for binary compatibility, and apps need to take care of the difference depending on the architecture.

I'm not very happy with any of these 3 solutions, however.

comment:25 Changed 3 years ago by korli

I thought this was already handled in #8831.

comment:26 Changed 3 years ago by pulkomandy

Resolution: fixed
Status: reopenedclosed

Applied in hrev50542.

Note: See TracTickets for help on using tickets.