change event propagation to be based on parent/child lineage, not z-axis stacking, plus some more alterations to try to get enter/leave working

This commit is contained in:
Paul Davis 2013-12-12 10:03:33 -05:00
parent 9fb3247350
commit 88732abd01
8 changed files with 217 additions and 132 deletions

View file

@ -150,10 +150,12 @@ protected:
bool on_motion_notify_event (GdkEventMotion *);
bool on_enter_notify_event (GdkEventCrossing*);
bool on_leave_notify_event (GdkEventCrossing*);
bool on_key_press_event (GdkEventKey*);
bool on_key_release_event (GdkEventKey*);
bool button_handler (GdkEventButton *);
bool motion_notify_handler (GdkEventMotion *);
bool deliver_event (Duple, GdkEvent *);
bool deliver_event (GdkEvent *);
void enter_leave_items (int state);
void enter_leave_items (Duple const &, int state);
@ -162,8 +164,10 @@ private:
void item_going_away (Item *, boost::optional<Rect>);
bool send_leave_event (Item const *, double, double) const;
/** Items that the pointer is currently within */
std::set<Item const *> within_items;
/** Item currently chosen for event delivery based on pointer position */
Item const * _current_item;
/** Item pending as _current_item */
Item const * _new_current_item;
/** the item that is currently grabbed, or 0 */
Item const * _grabbed_item;
/** the item that currently has key focus or 0 */