Example #1
0
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;
}
Example #2
0
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;
}