[alove] 18 Oct 2004 - This page illustrates a couple ways to create full-screen toplevel windows. I wrote these for Windows XP, but the bottom one is confirmed to work for Linux too. If someone can tell me how to zoom a window in other OS versions, please let me know. package require Tcl 8.4 wm title . "Full-screen with decorations" set a [expr {int([winfo screenwidth .] * 0.5)}] set b [expr {int([winfo screenheight .] * 0.5)}] wm geometry . 400x300+[expr $a - 200]+[expr $b - 150] ;# window is centered update idletasks wm attributes . -topmost no wm state . zoomed ;# This command for Windows only frame .x -highlightthickness 0 -bg #c8efff place .x -x 0 -y 0 -relwidth 1 -relheight 1 bind . "wm iconify ." [alove] 11 Oct 2004 - This one has no decorations. package require Tcl 8.4 wm title . "Full-screen with NO decorations" wm overrideredirect . yes ;# removes window decorations wm geometry . [winfo screenwidth .]x[winfo screenheight .]+0+0 update idletasks ;# updates the full-screen wm attributes . -topmost yes ;# stays on top - needed for Linux ;# on Win9x, if =no, alt-tab will malfunction frame .x -highlightthickness 0 -bg #c8efff place .x -x 0 -y 0 -relwidth 1 -relheight 1 button .x.min -text "Minimize" -bg #ffdbff -font "arial 10 bold" \ -command x_iconify place .x.min -x [expr [winfo screenwidth .] - 140] -y 10 button .x.end -text "Close" -bg #ffdbff -font "arial 10 bold" \ -command "destroy ." place .x.end -x [expr [winfo screenwidth .] - 60] -y 10 bind . "wm overrideredirect . yes; focus -force ." bind . x_iconify proc x_iconify {} { wm overrideredirect . no wm iconify . } This one works on WindowsXP, probably Win9x, and according to [rdt], now also on Linux. Just click on the "minimize" button or the key. The trick is to use to detect that the window is being deiconified. The "focus force ." is necessary for Windows, otherwise the doesn't work until you click on the window first. Adam Love -- [rdt] says on Linux, this works if the 'wm overrideredirect ...' comes before the 'wm geometry ...' if the 'wm attributes ...' is commented out it gives an error. [alove] Thanks, I've corrected the code above. NOTE: If you set topmost=no, you will have problems with alt-tab on Windows - the icon will disappear and you can only close the program via the task manager (end task). (question by Andy M) Tried this on Fedora Core 2 Linux, but I lose focus after running overrideredirect, and the bind . above doesn't seem to get it back. Keyboard input doesn't get directed to my script now, but I have some timers that still cycle, so I know the script isn't hung, and without the overrideredirect, the script runs ok. Tried "focus -force .", but the wm has lost control of the window. Suggestions? --- [SC] Tried this on my two-screen xinerama linux setup and of course the window spans 'both' screens. A little bit of digging reveals the culprit as the X11 WidthOfScreen macro and a little more reveals that finding the true width of the screen isn't that hard. Here's a little bit of C code as memo of how it might be done: /* screen-info.c * * Compile with: * cc -o screen-info screen-info.c -I/usr/X11R6/include -L/usr/X11R6/lib -lXinerama -lX11 -lXext * */ #include #include #include #include #include int main(int argc, char *argv[]) { Display *display; Screen *screen; int i; display = XOpenDisplay(NULL); if(!display) { printf("Couldn't open display %s\n",display); } if ( XineramaIsActive( display ) ) { int nscreens; XineramaScreenInfo * info = XineramaQueryScreens( display, &nscreens ); printf("Xinerama is active\n"); for( i = 0; i< nscreens; i++ ) { printf( "Screen %d: (%d) %d+%d+%dx%d\n", i, info[i].screen_number, info[i].x_org, info[i].y_org, info[i].width, info[i].height ); } } else { printf("Xinerama is not active\n"); } screen = DefaultScreenOfDisplay(display); printf( "DefaultScreenOfDisplay, %d x %d\n", WidthOfScreen(screen), HeightOfScreen(screen) ); return(0); }