I want to make a menubar.deselect() when the mouse leave the application
(i want avoid, that the popupmenu will still on top, if the user change
into a other application).
Problem: When the menu is popup i get only events from this menu.
I can move the mousepointer around the toplevel window but i get the
motion event from the menu. When i leave the toplevel window, i get a
leave event from the menu.
I think its wrong (bug), because leave the toplevelwindow i shout get the
event from the window, not from the menu.
The leave and enter event of the menu also occur, when i move the mouse in
the popup menu and the menuitem change. I think this is not a very good
implementation, because the menu-widget was not leaved.
For better understanding a add a small program.
Have i make something wrong ?
Is this a bug ? (use w2k, pygtk 2.0, gtk 2.2.4)
If it is correct - Why (and how can i solve my problem) ?
Have somebody other the same failure ?
Thanks for any help !
martin
---
import gtk
def _cb_win_leave(widget, event, data=None):
print window leave, widget
def _cb_win_enter(widget, event, data=None):
print window enter, widget
def _cb_win_motion(widget, event, data=None):
print window motion, widget
def _cb_menu_leave(widget, event, data=None):
print _menu_ leave, widget
def _cb_menu_enter(widget, event, data=None):
print _menu_ enter, widget
def _cb_menu_motion(widget, event, data=None):
print _menu_ motion, widget
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.show()
window.set_default_size(210, 300)
window.add_events(gtk.gdk.LEAVE_NOTIFY|gtk.gdk.ENTER_NOTIFY|gtk.gdk.MOTION_NOTIFY)
window.connect(leave_notify_event, _cb_win_leave)
window.connect(enter_notify_event, _cb_win_enter)
window.connect(motion_notify_event, _cb_win_motion)
menu_items = ( # menupath, accel, callback, callbackaction, itemtype,
stock
( /File, None, None , 0, Branch ),
( /File/Open, None, None , 1, None),
( /Edit, None, None , 0, Branch ),
( /Edit/Undo, None, None , 1, None),
( /Edit/Cut, None, None , 1, None),
( /Edit/Paste, None, None , 1, None),
( /Edit/Copy, None, None , 1, None)
)
accel_group = gtk.AccelGroup()
item_factory = gtk.ItemFactory(gtk.MenuBar, main, accel_group)
item_factory.create_items(menu_items)
menubar = item_factory.get_widget(main)
menubar.show()
item = item_factory.get_widget(/Edit)
item.add_events(gtk.gdk.LEAVE_NOTIFY|gtk.gdk.ENTER_NOTIFY|gtk.gdk.MOTION_NOTIFY)
item.connect(leave_notify_event, _cb_menu_leave)
item.connect(enter_notify_event, _cb_menu_enter)
item.connect(motion_notify_event, _cb_menu_motion)
item = item_factory.get_widget(/File)
item.add_events(gtk.gdk.LEAVE_NOTIFY|gtk.gdk.ENTER_NOTIFY|gtk.gdk.MOTION_NOTIFY)
item.connect(leave_notify_event, _cb_menu_leave)
item.connect(enter_notify_event, _cb_menu_enter)
item.connect(motion_notify_event, _cb_menu_motion)
box = gtk.VBox()
box.show()
box.pack_start(menubar, gtk.FALSE, gtk.FALSE)
b = gtk.Button(Fill rest of the area)
b.connect(clicked, gtk.mainquit)
b.show()
box.pack_start(b)
window.add(box)
gtk.main()
___
pygtk mailing list [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/