FLTK logo

[fltk.general] Re: Fl_Menu_Item popup() crash on list item right-click

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.general  ]
 
Previous Message ]New Message | Reply ]Next Message ]

Re: Fl_Menu_Item popup() crash on list item right-click Will B Jul 18, 2022  
 
On Monday, July 18, 2022 at 1:28:13 PM UTC-7 Will B wrote:
Greetings all,

When I do Fl_Menu_Item popup() call from right-clicking one of the items added to the list, I get a crash.  Here's the minimal code:

#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Hold_Browser.H>
#include <FL/Fl_Menu_Item.H>

#define SV_FLTK_FONT_31   31

Fl_Double_Window * mainWin = NULL;
Fl_Hold_Browser * hostList = NULL;

int nMenuFontSize = 11;


/*
  handle mouse click and other events from the host list
  (no parameters used so all parameter names removed)
*/
void svHandleHostListEvents (Fl_Widget *, void *)
{
  // right-click
  if (Fl::event_button() == FL_RIGHT_MOUSE)
  {
    // create context menu
    // text,shortcut,callback,user_data,flags,labeltype,labelfont,labelsize
    const Fl_Menu_Item miMain[] = {
      {"Connect",   0, 0, 0, 0, 0, SV_FLTK_FONT_31, nMenuFontSize},
      {"Edit",      0, 0, 0, 0, 0, SV_FLTK_FONT_31, nMenuFontSize},
      {"Delete...", 0, 0, 0, 0, 0, SV_FLTK_FONT_31, nMenuFontSize},
      {0}
    };

    // show context menu and return selected item, if any
    const Fl_Menu_Item * miRes = miMain->popup(Fl::event_x() + 14, Fl::event_y() - 10);

    if (miRes != NULL)
    {
      const char * strRes = miRes->text;

      printf("%s\n", strRes);
    }
  }
}


/* main program */
int main (int argc, char **argv)
{
  // tells FLTK we're a multithreaded app
  Fl::lock();

  // set graphics / display options
  Fl::visual(FL_DOUBLE | FL_RGB);

  // create main window
  mainWin = new Fl_Double_Window(1024, 768);
  mainWin->size_range(800, 600, 32767, 32767);
  mainWin->label("Minimal FLTK Example");
  mainWin->xclass("minimalfltk");

  // create host list
  hostList = new Fl_Hold_Browser(0, 0, 200, 550);
  hostList->clear_visible_focus();
  hostList->callback(svHandleHostListEvents, NULL);
  hostList->box(FL_THIN_DOWN_BOX);

  hostList->add("Test item1", NULL);
  hostList->add("Test item2", NULL);

  mainWin->end();
  mainWin->show(argc, argv);

  return Fl::run();
}

Here is the gdb backtrace after I right-click one of the added items:

Program received signal SIGSEGV, Segmentation fault.
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
120    ../sysdeps/x86_64/multiarch/../strlen.S: No such file or directory.
(gdb) bt
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x000055555559d6f8 in fontopen (name=0x0, size=11, core=false, angle=0) at fl_font_xft.cxx:147
#2  0x000055555559dc16 in Fl_Font_Descriptor::Fl_Font_Descriptor (this=0x555555620a60, name=0x0, fsize=11, fangle=0) at fl_font_xft.cxx:336
#3  0x000055555559d622 in fl_xft_font (driver=0x5555555f0eb0, fnum=31, size=11, angle=0) at fl_font_xft.cxx:125
#4  0x000055555559d6ad in Fl_Xlib_Graphics_Driver::font (this=0x5555555f0eb0, fnum=31, size=11) at fl_font_xft.cxx:139
#5  0x00005555555660e1 in fl_font (face=31, fsize=11) at ../FL/fl_draw.H:509
#6  0x00005555555a0bea in fl_normal_measure (o=0x7fffffffd330, W=@0x7fffffffd32c: 0, H=@0x7fffffffd39c: 21845) at fl_labeltype.cxx:42
#7  0x00005555555a0dc6 in Fl_Label::measure (this=0x7fffffffd330, W=@0x7fffffffd32c: 0, H=@0x7fffffffd39c: 21845) at fl_labeltype.cxx:93
#8  0x0000555555578808 in Fl_Menu_Item::measure (this=0x7fffffffd780, hp=0x7fffffffd39c, m=0x0) at Fl_Menu.cxx:165
#9  0x00005555555794e0 in menuwindow::menuwindow (this=0x7fffffffd550, m=0x7fffffffd780, X=487, Y=247, Wp=0, Hp=0, picked=0x0, t=0x0,
    menubar=0, menubar_title=0, right_edge=1920) at Fl_Menu.cxx:346
#10 0x000055555557b379 in Fl_Menu_Item::pulldown (this=0x7fffffffd780, X=487, Y=247, W=0, H=0, initial_item=0x0, pbutton=0x0, t=0x0, menubar=0)
    at Fl_Menu.cxx:858
#11 0x000055555557bde4 in Fl_Menu_Item::popup (this=0x7fffffffd780, X=39, Y=30, title=0x0, picked=0x0, button=0x0) at Fl_Menu.cxx:1028
#12 0x000055555556220f in svHandleHostListEvents () at minimal_fltk.cxx:35
#13 0x0000555555587d5d in Fl_Widget::do_callback (this=0x5555556217d0, o=0x5555556217d0, arg=0x0) at Fl_Widget.cxx:348
#14 0x0000555555562701 in Fl_Widget::do_callback (this=0x5555556217d0) at ../FL/Fl_Widget.H:861
#15 0x000055555556bbb3 in Fl_Browser_::handle (this=0x5555556217d0, event=2) at Fl_Browser_.cxx:927
#16 0x0000555555563e9b in send_event (event=2, to=0x5555556217d0, window=0x555555617680) at Fl.cxx:1220
#17 0x000055555556427c in Fl::handle_ (e=2, window=0x555555617680) at Fl.cxx:1417
#18 0x0000555555563f25 in Fl::handle (e=2, window=0x555555617680) at Fl.cxx:1300
#19 0x00005555555917d7 in fl_handle (thisevent=...) at Fl_x.cxx:2258
#20 0x000055555558bf46 in do_queued_events () at Fl_x.cxx:212
#21 0x000055555558ca9b in fd_callback () at Fl_x.cxx:469
#22 0x000055555558c4f5 in fl_wait (time_to_wait=1e+20) at Fl_x.cxx:278
#23 0x0000555555563137 in Fl::wait (time_to_wait=1e+20) at Fl.cxx:627
#24 0x000055555556316d in Fl::run () at Fl.cxx:642
#25 0x00005555555623b9 in main (argc=1, argv=0x7fffffffe228) at minimal_fltk.cxx:74


Even if I remove the , NULL  at the spot where I'm adding items to the hold-browser, I still get the crash, so I don't think it's that.

Does anyone see anything obvious that I'm missing?

By the way, the source-code styling choices for Groups is pretty dismal.  Have you guys thought of moving away from Groups to something more suitable for code listings and the like?

Thanks,

Will B

I forgot to include system information -- sorry.  Debian Linux 11, amd64 with the latest FLTK 1.3.8.  Debian doesn't have -dbg versions of FLTK, so I had to compile and install from sources with --enable-debug and the like.

Thanks!

Will B

--
You received this message because you are subscribed to the Google Groups "fltk.general" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fltkgeneral+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/fltkgeneral/b43e428e-6ae3-42e8-a10f-461801ccf990n%40googlegroups.com.
Direct Link to Message ]
 
     
Previous Message ]New Message | Reply ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.