Changeset 3462


Ignore:
Timestamp:
May 15, 2009, 1:27:36 PM (11 years ago)
Author:
Pascal Terjan
Message:
  • Only refresh canvas when we'll send refresh, and don't forget that we want to refresh when we skip
File:
1 edited

Legend:

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

    r3458 r3462  
    9999    size_t bytes;
    100100    void *buf;
    101     static struct timeval last_refresh = {0, 0}; /* FIXME store it at the right place */
    102     struct timeval t;
    103 
    104     gettimeofday(&t, NULL);
    105    
    106     if((t.tv_sec-last_refresh.tv_sec)*1000 +
    107        (t.tv_usec-last_refresh.tv_usec)/1000
    108        < screen_list->delay)
    109         return 0;
    110     last_refresh.tv_sec = t.tv_sec;
    111     last_refresh.tv_usec = t.tv_usec;
    112101
    113102    buf = caca_export_memory (screen_list->cv, "caca", &bytes);
     
    173162    int eof = 0, refresh = 1, command = 0, was_in_bell = 0;
    174163    long long unsigned int last_key_time = 0;
     164    long long unsigned int last_refresh_time = 0;
    175165    int mainret = 0;
    176166
     
    237227
    238228        /* Read program output */
    239         refresh = update_screens_contents(screen_list);
     229        refresh |= update_screens_contents(screen_list);
    240230
    241231        /* Check if we got something from the client */
     
    361351        refresh |= handle_recurrents(screen_list);
    362352
    363         /* Resfresh screen */
     353        /* Refresh screen */
    364354        if(!screen_list->attached)
    365355        {
     
    369359             */
    370360            sleep(1);
    371             refresh = 0;
    372         }
    373         /* Draw lock window */
    374         else if(screen_list->locked)
    375         {
    376             draw_lock(screen_list);
    377             refresh = 1;
    378361        }
    379362        else
    380363        {
    381             if((refresh || screen_list->in_bell || was_in_bell) &&
    382                (get_us() - last_key_time < screen_list->screensaver_timeout))
    383             {
    384                 was_in_bell = screen_list->in_bell;
    385                 refresh_screens(screen_list);
    386                 set_title(screen_list);
     364            long long unsigned int current_time = get_us();
     365            long long int tdiff = (current_time - last_refresh_time)/1000;
     366            /* Draw lock window */
     367            if(screen_list->locked)
     368            {
     369                draw_lock(screen_list);
    387370                refresh = 1;
    388 
    389             }
    390             if((get_us() - last_key_time > screen_list->screensaver_timeout))
     371            }
     372            else if((current_time - last_key_time >= screen_list->autolock_timeout))
     373            {
     374                screen_list->locked = 1;
     375                refresh = 1;
     376            }
     377            else if((current_time - last_key_time >= screen_list->screensaver_timeout))
    391378            {
    392379                if(!screen_list->in_screensaver)
     
    399386                refresh = 1;
    400387            }
    401 
    402             if((get_us() - last_key_time > screen_list->autolock_timeout))
    403             {
    404                 screen_list->locked = 1;
    405                 refresh = 1;
    406             }
    407 
    408         }
    409 
    410         if(refresh)
    411         {
    412             if(screen_list->attached)
    413                 request_refresh(screen_list);
    414             refresh = 0;
    415         }
    416 
     388            else if(refresh || was_in_bell)
     389            {
     390                if(tdiff >= screen_list->delay) {
     391                    was_in_bell = screen_list->in_bell;
     392                    refresh_screens(screen_list);
     393                    set_title(screen_list);
     394                    refresh = 1;
     395                }
     396            }
     397            if(refresh)
     398            {
     399                if(tdiff >= screen_list->delay) {
     400                    request_refresh(screen_list);
     401                    refresh = 0;
     402                    last_refresh_time = current_time;
     403                }
     404                else
     405                    debug("Skipping refresh (%d < %d)", tdiff, screen_list->delay);
     406            }
     407        }
    417408        eof = 1;
    418409        for(i=0; i < screen_list->count; i++)
Note: See TracChangeset for help on using the changeset viewer.