From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Gtkada: attach signals to menus Date: Sun, 19 Jun 2016 20:33:34 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <1df56f78-8ea3-4cdc-aa54-05249464495f@googlegroups.com> NNTP-Posting-Host: w/2xSGckQeJEFvqsQFNodA.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:30815 Date: 2016-06-19T20:33:34+02:00 List-Id: On 2016-06-19 17:02, Stephen Leake wrote: > Basic menus work, but I can't figure out how to compute the submenu on the fly. > > Here's my attempt: [...] > If I use "On_Activate" for On_Menu_Table, the submenu is not shown. So I tried "On_Select"; still no submenu, and it crashes with This is because you do not "show" submenu you create. > (menu_demo.exe:5884): Gtk-WARNING **: GtkWindow 001915B0 is mapped but visible child GtkMenu 08B2C468 is not mapped This is because you do it each time new. Looks like a GTK bug to me, but the usage is not intended. > I know how to compute a dynamic submenu in Emacs and Win32; there must be a way to do this in Gtk. Here I changed your signal handler: procedure On_Menu_Table (Self : access Gtk.Menu_Item.Gtk_Menu_Item_Record'Class) is use Gtk.Menu_Item; use Gtk.Widget; Table_Item : constant Gtk_Menu_Item := Gtk_Menu_Item (Self); begin if Table_Item.Get_Submenu = null then -- Do it only once declare Menu : constant Gtk.Menu.Gtk_Menu := Gtk.Menu.Gtk_Menu_New; Item : Gtk_Menu_Item; begin Item := Gtk_Menu_Item_New_With_Mnemonic ("_Add"); Menu.Append (Item); Item := Gtk_Menu_Item_New_With_Mnemonic ("_Edit"); Menu.Append (Item); Item := Gtk_Menu_Item_New_With_Mnemonic ("_Delete"); Menu.Append (Item); Menu.Show_All; -- Make it visible Table_Item.Set_Submenu (Menu); end; end if; end On_Menu_Table; -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de