/* Otherwise only process it if it was physically on an openbox
internal window */
else {
- Window target, parent, root, *children;
- unsigned int nchildren;
ObWindow *w;
- /* Find the top level ancestor of the subwindow, besides the
- root */
- target = e->xbutton.subwindow;
- ob_debug("subwindow 0x%x\n", target);
- while (XQueryTree(ob_display, target, &root, &parent, &children,
- &nchildren) != 0)
- {
- XFree(children);
- if (parent == root) {
- ob_debug("parent is root\n");
- break;
- }
- target = parent;
- }
- ob_debug("toplevel 0x%x\n", target);
-
- w = g_hash_table_lookup(window_map, &target);
- ob_debug("w 0x%x\n", w);
-
- if ((w = g_hash_table_lookup(window_map, &target)) &&
+ if ((w = g_hash_table_lookup(window_map, &e->xbutton.subwindow)) &&
WINDOW_IS_INTERNAL(w))
{
event_handle_user_input(client, e);
/* Allow control while going thru the menu */
else if (ev->type == KeyPress && (state & ~ControlMask) == 0) {
+ frame->got_press = TRUE;
+
if (keycode == ob_keycode(OB_KEY_ESCAPE)) {
menu_frame_hide_all();
ret = TRUE;
Allow ControlMask only, and don't bother if the menu is empty */
else if (ev->type == KeyRelease && (state & ~ControlMask) == 0 &&
- frame->entries)
+ frame->entries && frame->got_press)
{
if (keycode == ob_keycode(OB_KEY_RETURN)) {
/* Enter runs the active item or goes into the submenu.