Changeset 2356 for neercs


Ignore:
Timestamp:
Jun 11, 2008, 3:11:15 PM (12 years ago)
Author:
Pascal Terjan
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.