News:

As usual while waiting for the next release - don't forget to check the nightly builds in the forum.

Main Menu

Does doxygen documentation window and parenthesis completion work for you?

Started by BlueHazzard, September 05, 2020, 07:13:06 PM

Previous topic - Next topic

BlueHazzard

Hi,
i investigate on ticket https://sourceforge.net/p/codeblocks/tickets/1001/ 
Now i am wondering does the doxygen documentation popup and the parenthesis completion for functions work for you?
Can you give me your operating system and codeblocks/wxWidgets version?

For me on windows 7 and windows 10 wxWidgets v3.1.3-72-g014f04b437 it does not work.


For devs:
The problem is, that cbStyledTextCtrl does not send the wxEVT_COMMAND_LIST_ITEM_SELECTED event, what is responsible for some internal state management and the popup for the documentation window

BlueHazzard


Miguel Gimenez

With C::B 13.12 on Mint 18.2 (wx3.0.2) both features work OK, I will check more recent releases.

Miguel Gimenez

C::B 16.01 on Debian Stretch works OK.

EDIT: 17.12 on XP (wx2.8.12) works OK.

oBFusCATed

What do you mean by "works"? It seems to work fine for me on linux with wx3.0.5.

Keep in mind that there is a big overhaul of the popup code in the wxWidgets we haven't backported, yet.
I started the work, but there were two problems back then - wx2.8 support and compiling some .mm files on macOS.
The former is no longer an issue, the latter still is.

So before doing any work related to this the we should backport their changes first!
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Miguel Gimenez

I mean "it does what it is supposed to do", i.e. code completion inserts the selected function name adding parentheses and shows associated doxygen information if any is available.

Current C::B revision (12198) compiled with wx3.1.3 or wx3.1.4 and running on Windows 7 fails. This means:
  - If you write, p.e. print and select printf from the code completion popup, you get printf without parentheses
  - If the function is documented with Doxygen, the documentation is not shown.

Miguel Gimenez

I have bounded the problem with two nightlies:
2019/04/20, SVN11628, wx3.1.1 works
2020/02/08, SVN11957, wx3.1.3 does not work

The ones in between lack the wxWidgets files or crash when starting:

codeblocks.exe caused a Stack Overflow at location 000000006C5A0A42 in module wxmsw313u_gcc_cb.dll

This is on Windows 10.

EDIT: SVN11628 works with wx3.1.1, but fails with wx3.1.4

BlueHazzard

QuoteKeep in mind that there is a big overhaul of the popup code in the wxWidgets we haven't backported, yet.
I started the work, but there were two problems back then - wx2.8 support and compiling some .mm files on macOS.
The former is no longer an issue, the latter still is.

Can you point to a source file or commit of wxWidgets? Or any other point i can look for this?

@Miguel Gimenez
Thank you for the testing. So it seems that it is a problem with the popup code on windows past wx3.1.1

Miguel Gimenez

wxWidgets commit Reimplement wxPopupWindow as a WS_POPUP window under MSW (that went right into wx3.1.2 release) made C::B crash when a popup was about to be shown. This was discussed in ticket 773, https://sourceforge.net/p/codeblocks/tickets/773/

https://github.com/wxWidgets/wxWidgets/commit/56c419116838045f23f046112960d4e42f98f80d

Later NewPagodi restored popup behaviour under MSW with commit Add wxPU_CONTAINS_CONTROLS style for wxPopupWindow

https://github.com/wxWidgets/wxWidgets/commit/07f64c3b75c79b79b46a7e8ac8db585a618c57da

but looks like an event generation (or something similar) was not restored, leaving parentheses generation and documentation popup out of the game.

I have made the bisection between wx3.1.1 and wx3.1.3 using current C::B head, and I have also tested current master just in case; it also fails.

oBFusCATed

Quote from: BlueHazzard on September 09, 2020, 02:33:20 PM
Can you point to a source file or commit of wxWidgets? Or any other point i can look for this?
Nope. git log for the include/stc and src/stc folders in wxWidgets and you'll see it. But the change is massive and it is not the one described by Miguel Gimenez.

Quote from: Miguel Gimenez on September 08, 2020, 07:48:54 PM
I mean "it does what it is supposed to do", i.e. code completion inserts the selected function name adding parentheses and shows associated doxygen information if any is available.
"Works" was directed at BlueHazzard, sorry for not being clear about it.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Miguel Gimenez

If you edit src/common/popupcmn.cpp in wxMaster and change


bool wxPopupWindowBase::Create(wxWindow* WXUNUSED(parent), int WXUNUSED(flags))
{
    // By default, block event propagation at this window as it usually
    // doesn't make sense. This notably prevents wxScrolledWindow from trying
    // to scroll popup contents into view if a popup is shown from it but
    // extends beyond its window boundaries.
    SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS);

     return true;
}


to


bool wxPopupWindowBase::Create(wxWindow* WXUNUSED(parent), int WXUNUSED(flags))
{
     return true;
}


then documentation popup and parentheses completion work again.

This change was made by Vadz four days after the one that made C::B crash, and wasn't reverted by NewPagodi when he restored wxPopupWindow original behaviour.

https://github.com/wxWidgets/wxWidgets/commit/9562ca2b70c5421a9f3e94d6ea818efad0ac265b#diff-ae8d87556bfe1b32c101c69c2fb1cec4


BlueHazzard

So this is a wxWidgets bug?

NewPagodi  introduced new popup code for windows.
This introduced a bug https://trac.wxwidgets.org/ticket/18243
Vadz fixed it with this culprit code,
NewPagodi reverted, but missed the change from vadz?

so this should be reported to wxWidgets?

Edit: How did you even found this :)

Miguel Gimenez

20/10/2018, Vadz changed the popup code. This change made C::B crash when showing a popup

https://github.com/wxWidgets/wxWidgets/commit/56c419116838045f23f046112960d4e42f98f80d

24/10/2018, Vadz blocked event transmission to parents. No apparent side effect, as C::B crashed because of previous commit, but this commit is the real culprit.

https://github.com/wxWidgets/wxWidgets/commit/9562ca2b70c5421a9f3e94d6ea818efad0ac265b

28/01/2019, NewPagodi restores behaviour prior to 20/10/2018 but doesn't revert the 24/10/2018 commit, possibly because he overlooked it. Now C::B does not crash, but documentation popup and parentheses addition fail.

https://github.com/wxWidgets/wxWidgets/commit/07f64c3b75c79b79b46a7e8ac8db585a618c57da

IMHO this should be reported to wxWidgets, unless somebody finds a workaround.

QuoteHow did you even found this
The main problem was C::B crashiing between the first and the third commit, so I couldn't use bisection.

I made a diff between the code after the third commit and the code just before the first commit, and then removed all changes not related to popups. As you said it looked like an event problem, so a visual inspection led me to the code blocking event transmission (see line 230 in the attached file)