X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=a7ed67fdab9664cddc32e8973e0b19666f3b0396;hb=4cd886e5188549ab48a11b70cb40b65efe916b6c;hp=a35c5258a24858a85f7ba5b65ade8f2cc6ff67e6;hpb=950516124f49000bd8df0481df0c54a14a05b7f9;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index a35c5258..a7ed67fd 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -658,36 +658,77 @@ static void event_handle_client(ObClient *client, XEvent *e) client_iconify(client, TRUE, TRUE); frame_adjust_focus(client->frame, FALSE); break; - case EnterNotify: + case LeaveNotify: + con = frame_context(client, e->xcrossing.window); switch (con) { case OB_FRAME_CONTEXT_MAXIMIZE: + client->frame->max_hover = FALSE; + frame_adjust_state(client->frame); + break; case OB_FRAME_CONTEXT_ALLDESKTOPS: + client->frame->desk_hover = FALSE; + frame_adjust_state(client->frame); + break; case OB_FRAME_CONTEXT_SHADE: + client->frame->shade_hover = FALSE; + frame_adjust_state(client->frame); + break; case OB_FRAME_CONTEXT_ICONIFY: + client->frame->iconify_hover = FALSE; + frame_adjust_state(client->frame); + break; case OB_FRAME_CONTEXT_CLOSE: - g_message("hi"); + client->frame->close_hover = FALSE; frame_adjust_state(client->frame); break; default: break; } - con = frame_context(client, e->xcrossing.subwindow); - if (client_normal(client)) { - if (ob_state() == OB_STATE_STARTING) { - /* move it to the top of the focus order */ - guint desktop = client->desktop; - if (desktop == DESKTOP_ALL) desktop = screen_desktop; - focus_order[desktop] = g_list_remove(focus_order[desktop], - client); - focus_order[desktop] = g_list_prepend(focus_order[desktop], - client); - } else if (config_focus_follow) { + break; + case EnterNotify: + con = frame_context(client, e->xcrossing.window); + switch (con) { + case OB_FRAME_CONTEXT_MAXIMIZE: + client->frame->max_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_ALLDESKTOPS: + client->frame->desk_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_SHADE: + client->frame->shade_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_ICONIFY: + client->frame->iconify_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_CLOSE: + client->frame->close_hover = TRUE; + frame_adjust_state(client->frame); + break; + case OB_FRAME_CONTEXT_FRAME: + if (client_normal(client)) { + if (ob_state() == OB_STATE_STARTING) { + /* move it to the top of the focus order */ + guint desktop = client->desktop; + if (desktop == DESKTOP_ALL) desktop = screen_desktop; + focus_order[desktop] = g_list_remove(focus_order[desktop], + client); + focus_order[desktop] = g_list_prepend(focus_order[desktop], + client); + } else if (config_focus_follow) { #ifdef DEBUG_FOCUS - ob_debug("EnterNotify on %lx, focusing window\n", - client->window); + ob_debug("EnterNotify on %lx, focusing window\n", + client->window); #endif - client_focus(client); + client_focus(client); + } } + break; + default: + break; } break; case ConfigureRequest: @@ -717,15 +758,16 @@ static void event_handle_client(ObClient *client, XEvent *e) /* if we are iconic (or shaded (fvwm does this)) ignore the event */ if (client->iconic || client->shaded) return; - if (e->xconfigurerequest.value_mask & CWBorderWidth) - client->border_width = e->xconfigurerequest.border_width; - /* resize, then move, as specified in the EWMH section 7.7 */ if (e->xconfigurerequest.value_mask & (CWWidth | CWHeight | - CWX | CWY)) { + CWX | CWY | + CWBorderWidth)) { int x, y, w, h; ObCorner corner; + if (e->xconfigurerequest.value_mask & CWBorderWidth) + client->border_width = e->xconfigurerequest.border_width; + x = (e->xconfigurerequest.value_mask & CWX) ? e->xconfigurerequest.x : client->area.x; y = (e->xconfigurerequest.value_mask & CWY) ? @@ -761,7 +803,8 @@ static void event_handle_client(ObClient *client, XEvent *e) corner = OB_CORNER_TOPLEFT; } - client_configure(client, corner, x, y, w, h, FALSE, TRUE); + client_configure_full(client, corner, x, y, w, h, FALSE, TRUE, + TRUE); } if (e->xconfigurerequest.value_mask & CWStackMode) { @@ -926,11 +969,11 @@ static void event_handle_client(ObClient *client, XEvent *e) if (e->xclient.data.l[0] & 1 << 10) w = e->xclient.data.l[3]; else - w = client->area.y; + w = client->area.width; if (e->xclient.data.l[0] & 1 << 11) h = e->xclient.data.l[4]; else - h = client->area.y; + h = client->area.height; client->gravity = tmpg; { @@ -990,8 +1033,9 @@ static void event_handle_client(ObClient *client, XEvent *e) client_update_protocols(client); client_setup_decor_and_functions(client); } - else if (msgtype == prop_atoms.net_wm_strut) + else if (msgtype == prop_atoms.net_wm_strut) { client_update_strut(client); + } else if (msgtype == prop_atoms.net_wm_icon || msgtype == prop_atoms.kwm_win_icon) client_update_icons(client); @@ -1050,7 +1094,7 @@ static void event_handle_menu(ObClient *client, XEvent *e) /* will call the menu_hide() for each submenu as well */ if (!it) - menu_hide(menu_visible->data); + menu_control_keyboard_nav(ob_keycode(OB_KEY_ESCAPE)); break; case MotionNotify: