Exemplo n.º 1
0
Arquivo: area.c Projeto: bartman/wmii
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;
}
Exemplo n.º 2
0
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 );
   }
}