roman@sparc7.hri.com (Roman Budzianowski) (09/05/90)
I've added a simple Virtual Screen feature to tvtwm. In the .twmrc you put: VScreens { "news" 1200 0 "mail" 1200 900 "home" 0 0 } and bind a button to the menu : f.menu "VirtualScreens". It provides a primitive "rooms-like" feel, and it's easier than scrolling (more accurate). Here are the diffs if you are interested : diff -c tvtwm/gram.y tvtwm.orig/gram.y *** tvtwm/gram.y Fri Aug 31 17:04:08 1990 --- tvtwm.orig/gram.y Thu Aug 30 09:18:00 1990 *************** *** 53,59 **** static MenuRoot *root, *pull = NULL; static MenuRoot *GetRoot(); ! static Bool AddVScreen(); static Bool CheckWarpScreenArg(), CheckWarpRingArg(); static Bool CheckColormapArg(); static void GotButton(), GotKey(), GotTitleButton(); --- 53,59 ---- static MenuRoot *root, *pull = NULL; static MenuRoot *GetRoot(); ! static Bool CheckWarpScreenArg(), CheckWarpRingArg(); static Bool CheckColormapArg(); static void GotButton(), GotKey(), GotTitleButton(); *************** *** 80,86 **** %token <num> ALL OR CURSORS PIXMAPS ICONS COLOR MONOCHROME FUNCTION %token <num> ICONMGR_SHOW ICONMGR WINDOW_FUNCTION ZOOM ICONMGRS %token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE ! %token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING STICKY VSCREENS %token <num> NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION %token <num> META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME %token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE --- 80,86 ---- %token <num> ALL OR CURSORS PIXMAPS ICONS COLOR MONOCHROME FUNCTION %token <num> ICONMGR_SHOW ICONMGR WINDOW_FUNCTION ZOOM ICONMGRS %token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE ! %token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING STICKY %token <num> NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION %token <num> META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME %token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE *************** *** 195,202 **** win_list | STICKY { list = &Scr->StickyL; } win_list - | VSCREENS { list = &Scr->VScreens; } - vscreen_list | MENU string LP string COLON string RP { root = GetRoot($2, $4, $6); } menu { root->real_menu = TRUE;} --- 195,200 ---- *************** *** 398,410 **** NewFontCursor(&Scr->DestroyCursor, $2); } ; - vscreen_list : LB vscreen_entries RB - ; - vscreen_entries : /* Empty */ - | vscreen_entries vscreen_entry - ; - vscreen_entry : string number number { AddVScreen(list,$1,$2,$3); } - color_list : LB color_entries RB ; --- 396,401 ---- *************** *** 847,863 **** return False; } ! static Bool AddVScreen(l,s,x,y) ! name_list** l; ! register char* s; ! register int x,y; ! { ! XPoint *pt = (XPoint*)malloc(sizeof(XPoint)); ! pt->x=x; pt->y=y; ! AddToList(list,s,(char*)pt); ! return True; ! } ! twmrc_error_prefix () { fprintf (stderr, "%s: line %d: ", ProgramName, yylineno); --- 838,844 ---- return False; } ! twmrc_error_prefix () { fprintf (stderr, "%s: line %d: ", ProgramName, yylineno); diff -c tvtwm/menus.c tvtwm.orig/menus.c *** tvtwm/menus.c Fri Aug 31 18:11:26 1990 --- tvtwm.orig/menus.c Thu Aug 30 09:18:02 1990 *************** *** 136,173 **** /*********************************************************************** * * Procedure: - * InitVScreensMenu - initialize vscreens menu - * - *********************************************************************** - */ - void InitVScreensMenu(menu) - MenuRoot *menu; - { - static Bool inited=False; - name_list *nl = Scr->VScreens; - - if(inited) - return; - - menu->first = NULL; - menu->last = NULL; - menu->items = 0; - menu->width = 0; - menu->mapped = NEVER_MAPPED; - - AddToMenu(menu, "Virtual Screens", NULLSTR, NULL, F_TITLE,NULLSTR,NULLSTR); - - while(nl){ - AddToMenu(menu, nl->name, nl->ptr, NULL, F_SCROLLTOVSCREEN, - NULLSTR, NULLSTR); - nl = nl->next; - } - MakeMenu(menu); - } - - /*********************************************************************** - * - * Procedure: * AddFuncKey - add a function key to the list * * Inputs: --- 136,141 ---- *************** *** 653,661 **** if (strcmp(name, TWM_WINDOWS) == 0) Scr->Windows = tmp; - if (strcmp(name, TWM_VSCREENS) == 0) - Scr->VScreensMenu = tmp; - return (tmp); } --- 621,626 ---- *************** *** 996,1005 **** MakeMenu(menu); } - if (menu == Scr->VScreensMenu) - InitVScreensMenu(menu); - - if (menu->w == None || menu->items == 0) return False; /* Prevent recursively bringing up menus. */ --- 961,966 ---- *************** *** 1229,1240 **** ScrollDesktop(func); break; - case F_SCROLLTOVSCREEN: - { - XPoint* pt = (XPoint*)action; - MoveDesktop(pt->x,pt->y); - break; - } case F_DELTASTOP: if (WindowMoved) do_next_action = FALSE; break; --- 1190,1195 ---- diff -c tvtwm/menus.h tvtwm.orig/menus.h *** tvtwm/menus.h Fri Aug 31 14:53:08 1990 --- tvtwm.orig/menus.h Thu Aug 30 09:18:02 1990 *************** *** 41,47 **** #define TWM_ROOT "bLoB_GoOp" /* my private root menu */ #define TWM_WINDOWS "TwmWindows" /* for f.menu "TwmWindows" */ - #define TWM_VSCREENS "VirtualScreens" /* for f.menu "VirtualScreens" */ #define MAX_FILE_SIZE 4096 /* max chars to read from file for cut */ --- 41,46 ---- diff -c tvtwm/parse.c tvtwm.orig/parse.c *** tvtwm/parse.c Fri Aug 31 14:27:54 1990 --- tvtwm.orig/parse.c Thu Aug 30 09:18:02 1990 *************** *** 599,605 **** { "virtualdesktopbackgroundpixmap",SKEYWORD, kws_VirtualDesktopBackgroundPixmap }, { "virtualdesktopforeground",CKEYWORD, kwc_VirtualDesktopForeground }, - { "vscreens", VSCREENS, 0}, { "w", WINDOW, 0 }, { "wait", WAIT, 0 }, { "warpcursor", WARP_CURSOR, 0 }, --- 599,604 ---- diff -c tvtwm/parse.h tvtwm.orig/parse.h *** tvtwm/parse.h Fri Aug 31 18:04:44 1990 --- tvtwm.orig/parse.h Thu Aug 30 09:18:03 1990 *************** *** 108,115 **** #define F_FUNCTION 108 /* string */ #define F_WARPTOSCREEN 109 /* string */ #define F_COLORMAP 110 /* string */ - #define F_SCROLLTOVSCREEN 111 /* string */ - #define D_NORTH 1 #define D_SOUTH 2 --- 108,113 ---- diff -c tvtwm/screen.h tvtwm.orig/screen.h *** tvtwm/screen.h Fri Aug 31 16:01:56 1990 --- tvtwm.orig/screen.h Thu Aug 30 09:18:03 1990 *************** *** 79,85 **** int vdtPositionX; /* where the virtual desktop is currently positioned */ int vdtPositionY; /* where the virtual desktop is currently positioned */ - name_list *VScreens; /* virtual screens in the desktop */ name_list *Icons; /* list of icon pixmaps */ TitlebarPixmaps tbpm; /* titlebar pixmaps */ Pixmap UnknownPm; /* the unknown icon pixmap */ --- 79,84 ---- *************** *** 92,98 **** MenuRoot *MenuList; /* head of the menu list */ MenuRoot *LastMenu; /* the last menu (mostly unused?) */ MenuRoot *Windows; /* the TwmWindows menu */ ! MenuRoot *VScreensMenu; /* the VirtualScreens menu */ TwmWindow *Ring; /* one of the windows in window ring */ TwmWindow *RingLeader; /* current winodw in ring */ --- 91,97 ---- MenuRoot *MenuList; /* head of the menu list */ MenuRoot *LastMenu; /* the last menu (mostly unused?) */ MenuRoot *Windows; /* the TwmWindows menu */ ! TwmWindow *Ring; /* one of the windows in window ring */ TwmWindow *RingLeader; /* current winodw in ring */
roman@sparc7.hri.com (Roman Budzianowski) (09/05/90)
I've added a simple Virtual Screen feature to tvtwm. In the .twmrc you put: VScreens { "news" 1200 0 "mail" 1200 900 "home" 0 0 } and bind a button to the menu : f.menu "VirtualScreens". It provides a primitive "rooms-like" feel, and it's easier than scrolling (more accurate). Starting clients (say in .xinitrc) with virtual geometry works (xterm -geometry +1300+20 will place the window in the "news" screen). Here are the diffs if you are interested : diff -c tvtwm/gram.y tvtwm.orig/gram.y *** tvtwm/gram.y Fri Aug 31 17:04:08 1990 --- tvtwm.orig/gram.y Thu Aug 30 09:18:00 1990 *************** *** 53,59 **** static MenuRoot *root, *pull = NULL; static MenuRoot *GetRoot(); ! static Bool AddVScreen(); static Bool CheckWarpScreenArg(), CheckWarpRingArg(); static Bool CheckColormapArg(); static void GotButton(), GotKey(), GotTitleButton(); --- 53,59 ---- static MenuRoot *root, *pull = NULL; static MenuRoot *GetRoot(); ! static Bool CheckWarpScreenArg(), CheckWarpRingArg(); static Bool CheckColormapArg(); static void GotButton(), GotKey(), GotTitleButton(); *************** *** 80,86 **** %token <num> ALL OR CURSORS PIXMAPS ICONS COLOR MONOCHROME FUNCTION %token <num> ICONMGR_SHOW ICONMGR WINDOW_FUNCTION ZOOM ICONMGRS %token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE ! %token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING STICKY VSCREENS %token <num> NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION %token <num> META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME %token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE --- 80,86 ---- %token <num> ALL OR CURSORS PIXMAPS ICONS COLOR MONOCHROME FUNCTION %token <num> ICONMGR_SHOW ICONMGR WINDOW_FUNCTION ZOOM ICONMGRS %token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE ! %token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING STICKY %token <num> NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION %token <num> META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME %token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE *************** *** 195,202 **** win_list | STICKY { list = &Scr->StickyL; } win_list - | VSCREENS { list = &Scr->VScreens; } - vscreen_list | MENU string LP string COLON string RP { root = GetRoot($2, $4, $6); } menu { root->real_menu = TRUE;} --- 195,200 ---- *************** *** 398,410 **** NewFontCursor(&Scr->DestroyCursor, $2); } ; - vscreen_list : LB vscreen_entries RB - ; - vscreen_entries : /* Empty */ - | vscreen_entries vscreen_entry - ; - vscreen_entry : string number number { AddVScreen(list,$1,$2,$3); } - color_list : LB color_entries RB ; --- 396,401 ---- *************** *** 847,863 **** return False; } ! static Bool AddVScreen(l,s,x,y) ! name_list** l; ! register char* s; ! register int x,y; ! { ! XPoint *pt = (XPoint*)malloc(sizeof(XPoint)); ! pt->x=x; pt->y=y; ! AddToList(list,s,(char*)pt); ! return True; ! } ! twmrc_error_prefix () { fprintf (stderr, "%s: line %d: ", ProgramName, yylineno); --- 838,844 ---- return False; } ! twmrc_error_prefix () { fprintf (stderr, "%s: line %d: ", ProgramName, yylineno); diff -c tvtwm/menus.c tvtwm.orig/menus.c *** tvtwm/menus.c Fri Aug 31 18:11:26 1990 --- tvtwm.orig/menus.c Thu Aug 30 09:18:02 1990 *************** *** 136,173 **** /*********************************************************************** * * Procedure: - * InitVScreensMenu - initialize vscreens menu - * - *********************************************************************** - */ - void InitVScreensMenu(menu) - MenuRoot *menu; - { - static Bool inited=False; - name_list *nl = Scr->VScreens; - - if(inited) - return; - - menu->first = NULL; - menu->last = NULL; - menu->items = 0; - menu->width = 0; - menu->mapped = NEVER_MAPPED; - - AddToMenu(menu, "Virtual Screens", NULLSTR, NULL, F_TITLE,NULLSTR,NULLSTR); - - while(nl){ - AddToMenu(menu, nl->name, nl->ptr, NULL, F_SCROLLTOVSCREEN, - NULLSTR, NULLSTR); - nl = nl->next; - } - MakeMenu(menu); - } - - /*********************************************************************** - * - * Procedure: * AddFuncKey - add a function key to the list * * Inputs: --- 136,141 ---- *************** *** 653,661 **** if (strcmp(name, TWM_WINDOWS) == 0) Scr->Windows = tmp; - if (strcmp(name, TWM_VSCREENS) == 0) - Scr->VScreensMenu = tmp; - return (tmp); } --- 621,626 ---- *************** *** 996,1005 **** MakeMenu(menu); } - if (menu == Scr->VScreensMenu) - InitVScreensMenu(menu); - - if (menu->w == None || menu->items == 0) return False; /* Prevent recursively bringing up menus. */ --- 961,966 ---- *************** *** 1229,1240 **** ScrollDesktop(func); break; - case F_SCROLLTOVSCREEN: - { - XPoint* pt = (XPoint*)action; - MoveDesktop(pt->x,pt->y); - break; - } case F_DELTASTOP: if (WindowMoved) do_next_action = FALSE; break; --- 1190,1195 ---- diff -c tvtwm/menus.h tvtwm.orig/menus.h *** tvtwm/menus.h Fri Aug 31 14:53:08 1990 --- tvtwm.orig/menus.h Thu Aug 30 09:18:02 1990 *************** *** 41,47 **** #define TWM_ROOT "bLoB_GoOp" /* my private root menu */ #define TWM_WINDOWS "TwmWindows" /* for f.menu "TwmWindows" */ - #define TWM_VSCREENS "VirtualScreens" /* for f.menu "VirtualScreens" */ #define MAX_FILE_SIZE 4096 /* max chars to read from file for cut */ --- 41,46 ---- diff -c tvtwm/parse.c tvtwm.orig/parse.c *** tvtwm/parse.c Fri Aug 31 14:27:54 1990 --- tvtwm.orig/parse.c Thu Aug 30 09:18:02 1990 *************** *** 599,605 **** { "virtualdesktopbackgroundpixmap",SKEYWORD, kws_VirtualDesktopBackgroundPixmap }, { "virtualdesktopforeground",CKEYWORD, kwc_VirtualDesktopForeground }, - { "vscreens", VSCREENS, 0}, { "w", WINDOW, 0 }, { "wait", WAIT, 0 }, { "warpcursor", WARP_CURSOR, 0 }, --- 599,604 ---- diff -c tvtwm/parse.h tvtwm.orig/parse.h *** tvtwm/parse.h Fri Aug 31 18:04:44 1990 --- tvtwm.orig/parse.h Thu Aug 30 09:18:03 1990 *************** *** 108,115 **** #define F_FUNCTION 108 /* string */ #define F_WARPTOSCREEN 109 /* string */ #define F_COLORMAP 110 /* string */ - #define F_SCROLLTOVSCREEN 111 /* string */ - #define D_NORTH 1 #define D_SOUTH 2 --- 108,113 ---- diff -c tvtwm/screen.h tvtwm.orig/screen.h *** tvtwm/screen.h Fri Aug 31 16:01:56 1990 --- tvtwm.orig/screen.h Thu Aug 30 09:18:03 1990 *************** *** 79,85 **** int vdtPositionX; /* where the virtual desktop is currently positioned */ int vdtPositionY; /* where the virtual desktop is currently positioned */ - name_list *VScreens; /* virtual screens in the desktop */ name_list *Icons; /* list of icon pixmaps */ TitlebarPixmaps tbpm; /* titlebar pixmaps */ Pixmap UnknownPm; /* the unknown icon pixmap */ --- 79,84 ---- *************** *** 92,98 **** MenuRoot *MenuList; /* head of the menu list */ MenuRoot *LastMenu; /* the last menu (mostly unused?) */ MenuRoot *Windows; /* the TwmWindows menu */ ! MenuRoot *VScreensMenu; /* the VirtualScreens menu */ TwmWindow *Ring; /* one of the windows in window ring */ TwmWindow *RingLeader; /* current winodw in ring */ --- 91,97 ---- MenuRoot *MenuList; /* head of the menu list */ MenuRoot *LastMenu; /* the last menu (mostly unused?) */ MenuRoot *Windows; /* the TwmWindows menu */ ! TwmWindow *Ring; /* one of the windows in window ring */ TwmWindow *RingLeader; /* current winodw in ring */
jody@shell.COM (Jody Winston) (09/06/90)
Notice that several lines are rapped in the patch file About line 118 in the patch file - AddToMenu(menu, "Virtual Screens", NULLSTR, NULL,F_TITLE,NULLSTR,NULLSTR); About line 223 in the patch file int vdtPositionX; /* where the virtual desktop is currently positioned */ int vdtPositionY; /* where the virtual desktop is currently positioned */ Jody Winston jody@shell.com ..!{sun,psuvax1,bcm,rice,decwrl,cs.utexas.edu}!shell!jody Shell Development Company, Bellaire Research Center P.O. Box 481, Room 2103, Houston, TX 77001 (Voice: 713 663-2676)