Changeset 2356


Ignore:
Timestamp:
06/11/08 15:11:15 (5 years ago)
Author:
pterjan
Message:
  • Exit when requested by window manager
  • Exit when all terms are exited
  • Free the buffers during final cleanup
  • Don't wait for a key before exiting
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/main.c

    r2143 r2356  
    100100        for(i = 0; i < n; i++) 
    101101        { 
    102             FD_SET(screen[i].fd, &fdset); 
     102            if(screen[i].fd >= 0) 
     103                FD_SET(screen[i].fd, &fdset); 
    103104            if(screen[i].fd > maxfd) 
    104105                maxfd = screen[i].fd; 
     
    126127             * each of them starved at least once. */ 
    127128 
    128             if(!FD_ISSET(screen[i].fd, &fdset)) 
     129            if(screen[i].fd < 0 || !FD_ISSET(screen[i].fd, &fdset)) 
    129130                continue; 
    130131 
     
    142143                } 
    143144 
    144                 if(nr == 0 || errno != EWOULDBLOCK) 
    145                     eof = 1; 
     145                if(nr == 0 || errno != EWOULDBLOCK) { 
     146                    close(screen[i].fd);                         
     147                    screen[i].fd = -1; 
     148                } 
    146149 
    147150                break; 
     
    229232            { 
    230233                cucul_set_canvas_size(screen[i].cv, w, h); 
    231                 set_tty_size(screen[i].fd, w, h); 
     234                if(screen[i].fd >= 0) 
     235                    set_tty_size(screen[i].fd, w, h); 
    232236            } 
    233237            cucul_clear_canvas(cv); 
    234238            refresh = 1; 
    235239        } 
     240        else if(ret && (caca_get_event_type(&ev) & CACA_EVENT_QUIT)) 
     241        { 
     242            break; 
     243        } 
    236244 
    237245        /* Refresh screen */ 
     
    244252            for(i = 0; i < n; i++) 
    245253            { 
     254                if(screen[i].fd < 0) 
     255                    continue; 
    246256                int j = (pty + n - 1 - i) % n; 
    247257                cucul_blit(cv, (n - 1 - j) * XTAB + 1, 
     
    307317        } 
    308318 
     319        eof = 1; 
     320        for(i = 0; i < n; i++) 
     321            if(screen[i].fd >= 0) 
     322                eof = 0; 
    309323        if(eof) 
    310         { 
    311             for(i = 0; i < n; i++) 
    312                 if(screen[i].total) 
    313                     break; 
    314             if(i == n) 
    315                 break; 
    316         } 
    317     } 
    318  
    319     caca_get_event(dp, CACA_EVENT_KEY_PRESS, NULL, -1); 
     324            break; 
     325    } 
    320326 
    321327    /* Clean up */ 
     
    323329    cucul_free_canvas(cv); 
    324330    for(i = 0; i < n; i++) 
     331    { 
     332        free(screen[i].buf); 
    325333        cucul_free_canvas(screen[i].cv); 
     334    } 
    326335 
    327336    return 0; 
Note: See TracChangeset for help on using the changeset viewer.