Opened 14 years ago

Closed 12 years ago

Last modified 12 years ago

#613 closed bug (fixed)

[Tracker] doesn't let you to rename system folders

Reported by: diver Owned by: axeld
Priority: normal Milestone: R1
Component: Kits/Interface Kit Version:
Keywords: Cc: jonas.kirilla
Blocked By: Blocking:
Has a Patch: no Platform: All


Tracker doesn't let you to rename system folders.

Attachments (1)

bt.png (39.5 KB ) - added by jackburton 12 years ago.
backtrace to see the code path

Download all attachments as: .zip

Change History (10)

comment:1 by axeld, 14 years ago

You mean beyond the alert that comes up and asks you to press shift??

comment:2 by diver, 14 years ago


comment:3 by jackburton, 13 years ago

Platform: All

AFAIR in BeOS when a modal window shows up, it doesn't "steal" the focus from the current active window. In haiku, it does. What does this mean ? That when the OverrideAlert quits, the tracker window receives the activation message, thus calling WindowActivated() on the TextWidget, which never enters editing mode.

comment:4 by jonas.kirilla, 13 years ago

Cc: jonas.kirilla added

comment:5 by nielx, 12 years ago

Does this mean that this bug is actually an Interface Kit bug?

comment:6 by jackburton, 12 years ago

Component: - ApplicationsKits/Interface Kit

I added a debugger call in TextWidget::StopEdit() and this is the backtrace when I try to rename a system folder (attached).

So looks like I am right, on beos the window doesn't lose the active status when there's a BAlert originating from it.

by jackburton, 12 years ago

Attachment: bt.png added

backtrace to see the code path

comment:7 by jackburton, 12 years ago

Resolution: fixed
Status: newclosed

Fixed in hrev23062, but needs review.

comment:8 by jackburton, 12 years ago

BTW I should explain what happens here:

BTextWidget::StartEdit() is called, then the OverrideAlert shows up. The B_WINDOW_ACTIVATED message is sent to the ContainerWindow which contains the BTextWidget with "activated" = false. But this message is not handled, since the OverrideAlert is synchronous, and the ContainerWindow is locked. As soon as the user dismiss the alert, the ContainerWindow unlocks and the messages are handled. But that message is already old, it should've been handled before. That's why the BAlert uses UpdateIfNeeded() in a loop. Testing on beos is needed to check which messages are handled.

comment:9 by axeld, 12 years ago

Revised in hrev23196; DispatchMessage() now always only takes the last B_WINDOW_ACTIVATED message into account, reverted hrev23062.

Note: See TracTickets for help on using tickets.