#include "mainloop.h"
#include "framerender.h"
#include "focus.h"
+#include "focus_cycle.h"
#include "moveresize.h"
#include "group.h"
#include "stacking.h"
{
/* use where the press occured */
con = frame_context(client, e->xbutton.window, px, py);
- con = mouse_button_frame_context(con, e->xbutton.button);
+ con = mouse_button_frame_context(con, e->xbutton.button,
+ e->xbutton.state);
if (e->type == ButtonRelease && e->xbutton.button == pb)
pb = 0, px = py = -1;
} else {
ObClient *sibling = NULL;
if (e->xclient.data.l[1]) {
- ObWindow *win = g_hash_table_lookup(window_map,
- &e->xclient.data.l[1]);
+ ObWindow *win = g_hash_table_lookup
+ (window_map, &e->xclient.data.l[1]);
if (WINDOW_IS_CLIENT(win) &&
WINDOW_AS_CLIENT(win) != client)
{
ret = FALSE;
else if (keycode == ob_keycode(OB_KEY_ESCAPE) && state == 0) {
- /* Escape closes the active menu */
- menu_frame_hide(frame);
+ /* Escape goes to the parent menu or closes the last one */
+ if (frame->parent)
+ menu_frame_select(frame, NULL, TRUE);
+ else
+ menu_frame_hide_all();
}
else if (keycode == ob_keycode(OB_KEY_RETURN) && (state == 0 ||
}
break;
case LeaveNotify:
+ /*ignore leaves when we're already in the window */
+ if (ev->xcrossing.detail == NotifyInferior)
+ break;
+
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)