Ignore:
Timestamp:
Jun 19, 2008, 2:23:46 PM (14 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Added lock-screen bugWfeature using PAM (likely to work only with passwords yet)
  • Removed this UGLY space character SOMEONE left on the configure.ac. THAT WAS HORRIIIIIBLE.
File:
1 edited

Legend:

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

    r2456 r2457  
    7575    int eof = 0, refresh = 1, command = 0;
    7676    long long unsigned int last_key_time = 0;
     77    int lock_offset = 0;
    7778
    7879    default_shell = getenv("SHELL");
     
    125126    screen_list->screensaver_data = NULL;
    126127    screen_list->in_screensaver = 0;
     128    screen_list->locked = 0;
     129    memset(screen_list->lockmsg, 0, 1024);
     130    memset(screen_list->lockpass, 0, 1024);
    127131
    128132    recurrent_list = (struct recurrent_list*) malloc(sizeof(struct recurrent_list));
     
    215219        {
    216220            unsigned int c = caca_get_event_key_ch(&ev);
    217 
    218221            if(command)
    219222            {
     
    265268                    refresh = 1;
    266269                    break;
     270                case 'x':
     271                case 0x18: //CACA_KEY_CTRL_X:
     272                    memset(screen_list->lockpass, 0, 1024);
     273                    screen_list->locked = 1;
     274                    lock_offset = 0;
     275                    refresh = 1;
     276                    break;
    267277                case 'h':
    268278                case 0x08: //CACA_KEY_CTRL_H:
     
    285295                    continue;
    286296                }
    287 
    288 
    289                 switch(c)
     297                else if(screen_list->locked)
    290298                {
    291                 case 0x01: //CACA_KEY_CTRL_A:
    292                     command = 1; break;
    293                 case CACA_KEY_UP:
    294                     write(screen_list->screen[screen_list->pty]->fd, "\x1b[A", 3); break;
    295                 case CACA_KEY_DOWN:
    296                     write(screen_list->screen[screen_list->pty]->fd, "\x1b[B", 3); break;
    297                 case CACA_KEY_RIGHT:
    298                     write(screen_list->screen[screen_list->pty]->fd, "\x1b[C", 3); break;
    299                 case CACA_KEY_LEFT:
    300                     write(screen_list->screen[screen_list->pty]->fd, "\x1b[D", 3); break;
    301                 case CACA_KEY_ESCAPE:
    302                     if(screen_list->help)
     299                    if(c==0x08)
    303300                    {
    304                         screen_list->help = 0;
    305                         refresh = 1;
    306                         break;
     301                        if(lock_offset)
     302                        {
     303                            screen_list->lockpass[lock_offset-1] = 0;
     304                            lock_offset--;
     305                        }
    307306                    }
    308                 default:
    309                     write(screen_list->screen[screen_list->pty]->fd, &c, 1); break;
     307                    else if(c==0x0d) // RETURN
     308                    {
     309                        memset(screen_list->lockmsg, 0, 1024);
     310                        if(validate_lock(screen_list, getenv("USER"), screen_list->lockpass))
     311                        {
     312                            memset(screen_list->lockpass, 0, 1024);
     313                            screen_list->locked = 0;
     314                            lock_offset = 0;
     315                            refresh = 1;
     316                        }
     317                        else
     318                        {
     319                            memset(screen_list->lockpass, 0, 1024);
     320                            lock_offset = 0;
     321                            refresh = 1;
     322                        }
     323                    }
     324                    else
     325                    {
     326                        if(lock_offset < 1023)
     327                        {
     328                            screen_list->lockpass[lock_offset++] = c;
     329                            screen_list->lockpass[lock_offset]   = 0;
     330                        }
     331                    }
     332                }
     333                else
     334                {
     335                    switch(c)
     336                    {
     337                    case 0x01: //CACA_KEY_CTRL_A:
     338                        command = 1; break;
     339                    case CACA_KEY_UP:
     340                        write(screen_list->screen[screen_list->pty]->fd, "\x1b[A", 3); break;
     341                    case CACA_KEY_DOWN:
     342                        write(screen_list->screen[screen_list->pty]->fd, "\x1b[B", 3); break;
     343                    case CACA_KEY_RIGHT:
     344                        write(screen_list->screen[screen_list->pty]->fd, "\x1b[C", 3); break;
     345                    case CACA_KEY_LEFT:
     346                        write(screen_list->screen[screen_list->pty]->fd, "\x1b[D", 3); break;
     347                    case CACA_KEY_ESCAPE:
     348                        if(screen_list->help)
     349                        {
     350                            screen_list->help = 0;
     351                            refresh = 1;
     352                            break;
     353                        }
     354                    default:
     355                        write(screen_list->screen[screen_list->pty]->fd, &c, 1); break;
     356                    }
    310357                }
    311358            }
     
    344391
    345392        /* Resfresh screen */
    346         if((refresh || screen_list->in_bell) &&
    347            (get_ms() - last_key_time < screen_list->screensaver_timeout))
    348         {
    349             refresh = 0;
    350             refresh_screens(cv, dp, screen_list);
    351         }
    352         if((get_ms() - last_key_time > screen_list->screensaver_timeout))
    353         {
    354             if(!screen_list->in_screensaver)
    355                 screensaver_init(cv, dp, screen_list);
    356             screen_list->in_screensaver = 1;
    357 
    358             caca_set_cursor(dp, 0);
    359             draw_screensaver(cv, dp, screen_list);
     393
     394        if(screen_list->locked)
     395        {
     396            draw_lock(cv, screen_list);
    360397            caca_refresh_display(dp);
    361398        }
     399        else
     400        {
     401
     402            if((refresh || screen_list->in_bell) &&
     403               (get_ms() - last_key_time < screen_list->screensaver_timeout))
     404            {
     405                refresh = 0;
     406                refresh_screens(cv, dp, screen_list);
     407            }
     408
     409            if((get_ms() - last_key_time > screen_list->screensaver_timeout))
     410            {
     411                if(!screen_list->in_screensaver)
     412                    screensaver_init(cv, dp, screen_list);
     413                screen_list->in_screensaver = 1;
     414
     415                caca_set_cursor(dp, 0);
     416                draw_screensaver(cv, dp, screen_list);
     417                caca_refresh_display(dp);
     418            }
     419        }
    362420
    363421        eof = 1;
    364         for(i = 0; i < screen_list->count; i++)
     422        for(i=0; i < screen_list->count; i++)
    365423            if(screen_list->screen[i]->fd >= 0)
    366424                eof = 0;
Note: See TracChangeset for help on using the changeset viewer.