Re: Showing Gtk.Menu on pressing mouse button freezes the system



Hi,

You should avoid using events from Clutter to trigger events in Gtk+ (and the other way). A quick workaround is to give the hand back to the mainloop before you keep propagating the event (usually with a timeout 0).

The same issue was worked around in Gnome map : https://bugzilla.gnome.org/show_bug.cgi?id=745248

Cheers,

-
Lionel

On 05/04/16 17:35, Козлов Кирилл wrote:
Hello.

I have a test application that uses GtkClutter. Popup menu Gtk.Menu is not shown while handling 
button_press_event of Clutter.Actor — instead the system freezes.
Versions of packages used are:
libgtk-3-0 — 3.18.9-1
libclutter-1.0-0 — 1.26.0-2
libclutter-gtk-1.0-0 — 1.6.6-1

Your help would be very appreciated.

*** main.vala
    Gtk.Builder builder;
    Gtk.Window window;
    GtkClutter.Embed clutterEmbed;
    Gtk.Menu popupmenu;
    Clutter.Actor mainstage;

    bool actor_clicked (Clutter.ButtonEvent evt)
    {
       popupmenu.popup (null, null, null, evt.button, evt.time);
       return true;
    }

    int main (string [] args)
    {
       if ((GtkClutter.init (ref args)) != Clutter.InitError.SUCCESS)
          return 1;

       builder = new Gtk.Builder ();
       try
       {
          builder.add_from_file ("popup_main.glade");
       }
       catch (GLib.Error ex)
       {
          assert (false);
       }

       window = new Gtk.Window ();
       clutterEmbed = new GtkClutter.Embed ();
       popupmenu = builder.get_object ("menu_main") as Gtk.Menu;
       mainstage = clutterEmbed.get_stage ();

       window.add (clutterEmbed);
       mainstage.button_press_event.connect (actor_clicked);

       window.show_all ();

       Gtk.main ();
       return 0;
    }

*** popup_main.glade
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
   <requires lib="gtk+" version="3.12"/>
   <object class="GtkMenu" id="menu_main">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <child>
       <object class="GtkMenuItem" id="option1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="label" translatable="yes">Element 1</property>
         <property name="use_underline">True</property>
       </object>
     </child>
     <child>
       <object class="GtkMenuItem" id="option2">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="label" translatable="yes">Element 2</property>
       </object>
     </child>
     <child>
       <object class="GtkMenuItem" id="option3">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="label" translatable="yes">Element 3</property>
       </object>
     </child>
   </object>
</interface>
_______________________________________________
clutter-list mailing list
clutter-list gnome org
https://mail.gnome.org/mailman/listinfo/clutter-list



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]