WINDOW* vwm_fmod_wndlist(gpointer anything) { const char *title=" Window List "; WINDOW *window; int width = 0,height = 0; MENU *menu; ITEM **item_list; gchar **titles; guint item_count; if(viper_window_find_by_class((gpointer)vwm_fmod_wndlist) != NULL) return NULL; viper_thread_enter(); titles = viper_deck_get_wndlist(); item_count = g_strv_length(titles); if(item_count == 0) { viper_thread_leave(); return NULL; } menu = viper_menu_create(titles); item_list = (ITEM**)g_malloc0(sizeof(ITEM*)*(item_count+1)); // override the default of 1 column X 16 entries per row set_menu_format(menu,20,1); // hide character mark on left hand side set_menu_mark(menu," "); scale_menu(menu,&height,&width); width++; if((strlen(title) + 10) > width) width = (strlen(title) + 10); window = viper_window_create((gchar*)title,0.95,2,width,height,TRUE); viper_menu_bind(menu,window,0,0,width,height); // set_menu_sub(menu,window); set_menu_fore(menu, VIPER_COLORS(COLOR_MAGENTA,COLOR_WHITE) | A_REVERSE | A_BOLD); set_menu_back(menu,VIPER_COLORS(COLOR_BLACK,COLOR_WHITE)); // post_menu(menu); /* viper_event_set(window,"window-activate",vwm_fmod_wndlist_ON_ACTIVATE,NULL); */ viper_event_set(window,"window-destroy",vwm_fmod_wndlist_ON_DESTROY, (gpointer)menu); viper_window_set_key_func(window,vwm_fmod_wndlist_ON_KEYSTROKE); viper_window_set_userptr(window,(gpointer)menu); viper_window_set_state(window,STATE_EMINENT); viper_thread_leave(); g_strfreev(titles); return window; }
WINDOW* vwmterm_init(gpointer anything) { extern WINDOW *SCREEN_WINDOW; extern ps_runq_t *vwm_runq; vterm_t *vterm; WINDOW *window; gint width,height; int master_fd; int fflags; getmaxyx(SCREEN_WINDOW,height,width); if(height>30 && width>84) { height=25; width=80; } else { /* calculate scaled window size */ window_get_size_scaled(NULL,&width,&height,0.85,0.65); if(width>80) width=80; if(height>25) height=25; } vterm=vterm_create(width,height,0); vterm_set_colors(vterm,COLOR_WHITE,COLOR_BLACK); master_fd=vterm_get_pty_fd(vterm); // configure SIGIO acceleration #ifdef SIGPOLL vwmterm_sigset(SIGPOLL,vwmterm_SIGIO); #else vwmterm_sigset(SIGIO,vwmterm_SIGIO); #endif fcntl(master_fd,F_SETOWN,getpid()); fflags=fcntl(master_fd,F_GETFL); fcntl(master_fd,F_SETFL,fflags | FASYNC); viper_thread_enter(); // create window window=viper_window_create(" VTerm ",0.5,0.5,width,height,TRUE); viper_window_set_state(window,STATE_UNSET | STATE_NORESIZE); viper_window_set_limits(window,15,2,WSIZE_UNCHANGED,WSIZE_UNCHANGED); // libviper set the default bkgd OR to WHITE on BLACK. undo it. wbkgdset(window,0); wattron(window,VIPER_COLORS(COLOR_WHITE,COLOR_BLACK)); // init terminal vterm_wnd_set(vterm,window); vterm_erase(vterm); // attache event handlers viper_event_set(window,"window-resized",vwmterm_ON_RESIZE,(gpointer)vterm); viper_event_set(window,"window-close",vwmterm_ON_CLOSE,(gpointer)vterm); viper_event_set(window,"window-destroy",vwmterm_ON_DESTROY, (gpointer)vterm); viper_window_set_key_func(window,vwmterm_ON_KEYSTROKE); viper_window_set_userptr(window,(gpointer)vterm); // push pseudo-thread onto run queue psthread_add(vwm_runq,vwmterm_psthread,(gpointer)window); viper_thread_leave(); return window; }