void area_setsel(Area *a, Frame *f) { View *v; v = a->view; /* XXX: Stack. */ for(; f && f->collapsed && f->anext; f=f->anext) ; for(; f && f->collapsed && f->aprev; f=f->aprev) ; if(a == v->sel && f) frame_focus(f); else a->sel = f; }
void manager_interpret_message( Display *conn, XClientMessageEvent event ) { frame_t *frame = frame_get( event.window ); if (event.message_type == EA_NET_CLOSE_WINDOW ) { printf( "\t_NET_CLOSE_WINDOW\n" ); /* Close the application */ Window window = frame->child->id; Atom *protocols; int num, i; XUnmapWindow( conn, window ); XGetWMProtocols( conn, window, &protocols, &num ); for (i = 0; i < num; i++ ) { if ( protocols[i] == XA_WM_DELETE_WINDOW ) { XEvent event_send; event_send.type = ClientMessage; event_send.xclient.type = ClientMessage; event_send.xclient.message_type = XA_WM_PROTOCOLS; event_send.xclient.format = 32; event_send.xclient.data.l[0] = XA_WM_DELETE_WINDOW; event_send.xclient.data.l[1] = event.data.l[0]; XSendEvent( conn, window, False, 0, &event_send ); window = None; } } if ( window != None ) XKillClient( conn, window ); } else if ( event.message_type == EA_NET_MOVERESIZE_WINDOW ) { /* Change the window position on client request */ if ( event.data.l[0] & (MR_FLAG_X | MR_FLAG_Y) ) frame_move( conn, frame, event.data.l[1], event.data.l[2] ); } else if ( event.message_type == EA_NET_ACTIVE_WINDOW ) { /* Change the window focus on client request */ frame_focus( conn, frame ); } }