switch(e->type) {
case EnterNotify:
case LeaveNotify:
- if (e->xcrossing.detail == NotifyInferior)
- return TRUE;
- break;
+ return keyboard_interactively_grabbed();
case FocusIn:
case FocusOut:
/* I don't think this should ever happen with our event masks, but
ed->ignored = FALSE;
/* deal with it in the kernel */
- if (group)
+
+ if (menu_frame_visible &&
+ (e->type == EnterNotify || e->type == LeaveNotify))
+ {
+ /* crossing events for menu */
+ event_handle_menu(e);
+ } else if (group)
event_handle_group(group, e);
else if (client)
event_handle_client(client, e);
xerror_set_ignore(FALSE);
}
- /* crossing events for menu */
- if (e->type == EnterNotify || e->type == LeaveNotify)
- if (menu_frame_visible)
- event_handle_menu(e);
-
/* user input (action-bound) events */
if (e->type == ButtonPress || e->type == ButtonRelease ||
e->type == MotionNotify || e->type == KeyPress ||
}
break;
case LeaveNotify:
- if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) {
- if (e->entry->type != OB_MENU_ENTRY_TYPE_SUBMENU)
- menu_frame_select(e->frame, NULL);
- }
- case MotionNotify:
- if ((e = menu_entry_frame_under(ev->xmotion.x_root,
- ev->xmotion.y_root))) {
- /* XXX menu_frame_entry_move_on_screen(f); */
- menu_frame_select(e->frame, e);
+ if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window)) &&
+ (f = find_active_menu()) && f->selected == e &&
+ e->entry->type != OB_MENU_ENTRY_TYPE_SUBMENU)
+ {
+ menu_frame_select(e->frame, NULL);
}
- break;
case KeyPress:
if (ev->xkey.keycode == ob_keycode(OB_KEY_ESCAPE))
menu_frame_hide_all();
if (grab) {
if (kgrabs++ == 0) {
ret = XGrabKeyboard(ob_display, RootWindow(ob_display, ob_screen),
- FALSE, GrabModeAsync, GrabModeAsync,
+ False, GrabModeAsync, GrabModeAsync,
event_curtime) == Success;
if (!ret)
--kgrabs;
text_a->texture[0].data.text.string = sub ? sub->title : "";
break;
case OB_MENU_ENTRY_TYPE_SEPARATOR:
+ text_a = self->a_text_normal;
break;
}
XMapWindow(ob_display, self->window);
- if (screen_pointer_pos(&dx, &dy) && (e = menu_entry_frame_under(dx, dy)))
+ if (screen_pointer_pos(&dx, &dy) && (e = menu_entry_frame_under(dx, dy)) &&
+ e->frame == self)
++e->ignore_enters;
return TRUE;