X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=a35c5258a24858a85f7ba5b65ade8f2cc6ff67e6;hb=950516124f49000bd8df0481df0c54a14a05b7f9;hp=69c85100c9c89909ddf26a45376e5a660a6576b8;hpb=b8715ba30901551998adff78603015a5dd089cb0;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 69c85100..a35c5258 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -600,6 +600,7 @@ static void event_handle_client(ObClient *client, XEvent *e) XEvent ce; Atom msgtype; int i=0; + ObFrameContext con; switch (e->type) { case ButtonPress: @@ -658,6 +659,19 @@ static void event_handle_client(ObClient *client, XEvent *e) frame_adjust_focus(client->frame, FALSE); break; case EnterNotify: + switch (con) { + case OB_FRAME_CONTEXT_MAXIMIZE: + case OB_FRAME_CONTEXT_ALLDESKTOPS: + case OB_FRAME_CONTEXT_SHADE: + case OB_FRAME_CONTEXT_ICONIFY: + case OB_FRAME_CONTEXT_CLOSE: + g_message("hi"); + 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 */ @@ -711,7 +725,7 @@ static void event_handle_client(ObClient *client, XEvent *e) CWX | CWY)) { int x, y, w, h; ObCorner corner; - + x = (e->xconfigurerequest.value_mask & CWX) ? e->xconfigurerequest.x : client->area.x; y = (e->xconfigurerequest.value_mask & CWY) ? @@ -720,6 +734,16 @@ static void event_handle_client(ObClient *client, XEvent *e) e->xconfigurerequest.width : client->area.width; h = (e->xconfigurerequest.value_mask & CWHeight) ? e->xconfigurerequest.height : client->area.height; + + { + int newx = x; + int newy = y; + client_find_onscreen(client, &newx, &newy, w, h, TRUE); + if (e->xconfigurerequest.value_mask & CWX) + x = newx; + if (e->xconfigurerequest.value_mask & CWY) + y = newy; + } switch (client->gravity) { case NorthEastGravity: @@ -908,8 +932,20 @@ static void event_handle_client(ObClient *client, XEvent *e) else h = client->area.y; client->gravity = tmpg; + + { + int newx = x; + int newy = y; + client_find_onscreen(client, &newx, &newy, w, h, TRUE); + if (e->xclient.data.l[0] & 1 << 8) + x = newx; + if (e->xclient.data.l[0] & 1 << 9) + y = newy; + } + client_configure(client, OB_CORNER_TOPLEFT, x, y, w, h, FALSE, TRUE); + client->gravity = oldg; } break; @@ -1008,6 +1044,7 @@ static void event_handle_menu(ObClient *client, XEvent *e) e->xbutton.y_root); break; } + break; } }