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 Library      Forums      Links      Apps     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-2025 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.