コード例 #1
0
ファイル: screen.c プロジェクト: HerrSchrader/McBetty
/* Initialize the main screen.
	Start with top menu system.
	Initialize all screens.
	We clear the whole screen.
	We start the PLAYING screen.
*/
void 
mainscreen_init(void) {
	
	init_font();
	set_font(MEDIUMFONT);	
		
	win_scroll_init();
	
	win_cursor_init();
	
	// popup window
	win_init(&popup_win, POPUP_STARTPAGE * 8, 8, POPUP_PAGES * 8, 112, 1, popup_txt);
	popup_win.font = SMALLFONT;	
	popup_win.flags |= WINFLG_CENTER | WINFLG_LFTADJ;
	popup_win.buffer_size = POPUP_TXT_SIZE;
	popup_active = 0;
	deferred_screen = NO_SCREEN;
	
	playing_screen_init( &(screen_list[PLAYING_SCREEN]) );
	playlist_screen_init( &(screen_list[PLAYLIST_SCREEN]) );
	tracklist_screen_init( &(screen_list[TRACKLIST_SCREEN]) );
	search_screen_init( &(screen_list[SEARCH_SCREEN]) );
	
	set_keypress_handler(mainscreen_keypress);
	screen_enter(PLAYING_SCREEN);

};
コード例 #2
0
ファイル: auth.c プロジェクト: firejox/mils
auth_t* auth_create (const char *serve_name) {
    auth_t *au = xmalloc (sizeof (auth_t));

    au->pconv.conv = auth_conv;
    au->pconv.appdata_ptr = au;

    au->pamh = NULL;


    au->ist = NULL;

    au->epfd = epoll_create1 (0);
    if (au->epfd == -1) {
        fprintf (stderr, "epoll create failed: %s\n",
                 strerror (errno));
        exit (-1);
    }

    screen_enter (au->epfd);

    au->v = view_create();

    au->name = xstrdup (serve_name);

    return au;
}
コード例 #3
0
ファイル: screen.c プロジェクト: HerrSchrader/McBetty
/* This is called when the current task does not know which screen is shown, 
	so that switch_screen() can not be used.
	We simply exit the current screen and enter the new one.
	
	if a popup is active, do not switch screens,
		set deferred_screen instead
*/
void
show_screen(enum SCREEN newscreen){
	screen_exit(cur_screen);
	if (popup_active)
		deferred_screen = newscreen;
	else
		screen_enter(newscreen);	
};
コード例 #4
0
ファイル: screen.c プロジェクト: HerrSchrader/McBetty
void 
popup_end(){
	if (timed_popup) {
		task_del(close_popup_task);
		timer_del(&popup_tmr);	
	};

	popup_active = 0;
	set_keypress_handler(mainscreen_keypress);
	
	if (deferred_screen != NO_SCREEN)
		screen_enter(deferred_screen);
	else {
		popup_restore();
		screen_visible(cur_screen, 1);
		screen_redraw(cur_screen);
	};
};
コード例 #5
0
ファイル: main.c プロジェクト: firejox/mils
int main(void) {
    int epfd, ret;
    struct epoll_event tmp;
    input_state_t *ist;
    data_handler_t *dht;
    view_t *v;
    line_text_t *lt;
    int timeout = -1;
    keysym_t sym;

    epfd = epoll_create1(0);
    if (epfd == -1) {
        perror ("epoll create failed");
        exit(-1);
    }

    screen_enter (epfd);
    ist = input_state_create (epfd);
    v = view_create ();
    lt = view_user_input_ref (v);

    view_update (v, VIEW_USER);
    while ((ret = epoll_wait (epfd, &tmp, 1, timeout)) > -1) {
        if (ret) {
            dht = tmp.data.ptr;
            dht->handler (dht->fd, dht->data);
        }

        
       sym = get_input_state_info (ist, &timeout);
       switch (sym) {
           case XKB_KEY_NoSymbol:
               break;
           case XKB_KEY_Return:
               goto input_end;
           case XKB_KEY_BackSpace:
               line_text_handle_event (lt, DELETE_LEFT_CH);
               break;
           case XKB_KEY_Delete:
               line_text_handle_event (lt, DELETE_RIGHT_CH);
               break;
           case XKB_KEY_Left:
               line_text_handle_event (lt, CURSOR_MOVE_LEFT);
               break;
           case XKB_KEY_Right:
               line_text_handle_event (lt, CURSOR_MOVE_RIGHT);
               break;
           default:
               line_text_handle_event (lt, APPEND_CH, keysym_to_utf32(sym));
               break;
       }
       if (sym != XKB_KEY_NoSymbol)
           view_update (v, VIEW_USER);
    
    }

input_end:

    line_text_unref (lt);

    view_destory (v);
    input_state_destroy (ist);
    screen_leave (epfd);
    return 0;
}