'\"
'\" Copyright (c) 1990-1993 The Regents of the University of California.
'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\" 
'\" RCS: @(#) $Id: ConfigWind.3,v 1.2 1998/09/14 18:22:46 stanton Exp $
'\" 
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.4 2000/08/25 06:18:32 ericm Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 5.5c 11c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH Tk_ConfigureWindow 3 4.0 Tk "Tk Library Procedures"
.BS
.SH NAME
Tk_ConfigureWindow, Tk_MoveWindow, Tk_ResizeWindow, Tk_MoveResizeWindow, Tk_SetWindowBorderWidth, Tk_ChangeWindowAttributes, Tk_SetWindowBackground, Tk_SetWindowBackgroundPixmap, Tk_SetWindowBorder, Tk_SetWindowBorderPixmap, Tk_SetWindowColormap, Tk_DefineCursor, Tk_UndefineCursor \- change window configuration or attributes
.SH SYNOPSIS
.nf
\fB#include <tk.h>\fR
.sp
\fBTk_ConfigureWindow\fR(\fItkwin, valueMask, valuePtr\fR)
.sp
\fBTk_MoveWindow\fR(\fItkwin, x, y\fR)
.sp
\fBTk_ResizeWindow\fR(\fItkwin, width, height\fR)
.sp
\fBTk_MoveResizeWindow\fR(\fItkwin, x,  y, width, height\fR)
.sp
\fBTk_SetWindowBorderWidth\fR(\fItkwin, borderWidth\fR)
.sp
\fBTk_ChangeWindowAttributes\fR(\fItkwin, valueMask, attsPtr\fR)
.sp
\fBTk_SetWindowBackground\fR(\fItkwin, pixel\fR)
.sp
\fBTk_SetWindowBackgroundPixmap\fR(\fItkwin, pixmap\fR)
.sp
\fBTk_SetWindowBorder\fR(\fItkwin, pixel\fR)
.sp
\fBTk_SetWindowBorderPixmap\fR(\fItkwin, pixmap\fR)
.sp
\fBTk_SetWindowColormap\fR(\fItkwin, colormap\fR)
.sp
\fBTk_DefineCursor\fR(\fItkwin, cursor\fR)
.sp
\fBTk_UndefineCursor\fR(\fItkwin\fR)
.SH ARGUMENTS
.AS XSetWindowAttributes borderWidth
.AP Tk_Window tkwin in
Token for window.
.AP "unsigned int" valueMask in
OR-ed mask of values like \fBCWX\fR or \fBCWBorderPixel\fR,
indicating which fields of \fI*valuePtr\fR or \fI*attsPtr\fR to use.
.AP XWindowChanges *valuePtr in
Points to a structure containing new values for the configuration
parameters selected by \fIvalueMask\fR.  Fields not selected
by \fIvalueMask\fR are ignored.
.AP int x in
New x-coordinate for \fItkwin\fR's top left pixel (including
border, if any) within tkwin's parent.
.AP int y in
New y-coordinate for \fItkwin\fR's top left pixel (including
border, if any) within tkwin's parent.
.AP "int" width in
New width for \fItkwin\fR (interior, not including border).
.AP "int" height in
New height for \fItkwin\fR (interior, not including border).
.AP "int" borderWidth in
New width for \fItkwin\fR's border.
.AP XSetWindowAttributes *attsPtr in
Points to a structure containing new values for the attributes
given by the \fIvalueMask\fR argument.  Attributes not selected
by \fIvalueMask\fR are ignored.
.AP "unsigned long" pixel in
New background or border color for window.
.AP Pixmap pixmap in
New pixmap to use for background or border of \fItkwin\fR.  WARNING:
cannot necessarily be deleted immediately, as for Xlib calls.  See
note below.
.AP Colormap colormap in
New colormap to use for \fItkwin\fR.
.AP Tk_Cursor cursor in
New cursor to use for \fItkwin\fR.  If \fBNone\fR is specified, then
\fItkwin\fR will not have its own cursor;  it will use the cursor
of its parent.
.BE

.SH DESCRIPTION
.PP
These procedures are analogous to the X library procedures
with similar names, such as \fBXConfigureWindow\fR.  Each
one of the above procedures calls the corresponding X procedure
and also saves the configuration information in Tk's local
structure for the window.  This allows the information to
be retrieved quickly by the application (using macros such
as \fBTk_X\fR and \fBTk_Height\fR) without having to contact
the X server.  In addition, if no X window has actually been
created for \fItkwin\fR yet, these procedures do not issue
X operations or cause event handlers to be invoked;  they save
the information in Tk's local
structure for the window;  when the window is created later,
the saved information will be used to configure the window.
.PP
See the X library documentation for details on what these
procedures do and how they use their arguments.
.PP
In the procedures \fBTk_ConfigureWindow\fR, \fBTk_MoveWindow\fR,
\fBTk_ResizeWindow\fR, \fBTk_MoveResizeWindow\fR, and
\fBTk_SetWindowBorderWidth\fR,
if \fItkwin\fR is an internal window then event handlers interested
in configure events are invoked immediately, before the procedure
returns.  If \fItkwin\fR is a top-level window
then the event handlers will be invoked later, after X has seen
the request and returned an event for it.
.PP
Applications using Tk should never call procedures like
\fBXConfigureWindow\fR directly;  they should always use the
corresponding Tk procedures.
.PP
The size and location of a window should only be modified by the
appropriate geometry manager for that window and never by a window
itself (but see \fBTk_MoveToplevelWindow\fR for moving a top-level
window).
.PP
You may not use \fBTk_ConfigureWindow\fR to change the
stacking order of a window (\fIvalueMask\fR may not contain the
\fBCWSibling\fR or \fBCWStackMode\fR bits).
To change the stacking order, use the procedure \fBTk_RestackWindow\fR.
.PP
The procedure \fBTk_SetWindowColormap\fR will automatically add
\fItkwin\fR to the \fBTK_COLORMAP_WINDOWS\fR property of its
nearest top-level ancestor if the new colormap is different from
that of \fItkwin\fR's parent and \fItkwin\fR isn't already in
the \fBTK_COLORMAP_WINDOWS\fR property.

.SH BUGS
.PP
\fBTk_SetWindowBackgroundPixmap\fR and \fBTk_SetWindowBorderPixmap\fR
differ slightly from their Xlib counterparts in that the \fIpixmap\fR
argument may not necessarily be deleted immediately after calling
one of these procedures.  This is because \fItkwin\fR's window
may not exist yet at the time of the call, in which case \fIpixmap\fR
is merely saved and used later when \fItkwin\fR's window is actually
created.  If you wish to delete \fIpixmap\fR, then call
\fBTk_MakeWindowExist\fR first to be sure that \fItkwin\fR's window exists
and \fIpixmap\fR has been passed to the X server.
.PP
A similar problem occurs for the \fIcursor\fR argument passed to
\fBTk_DefineCursor\fR.  The solution is the same as for pixmaps above:
call \fBTk_MakeWindowExist\fR before freeing the cursor.

.SH "SEE ALSO"
Tk_MoveToplevelWindow, Tk_RestackWindow

.SH KEYWORDS
attributes, border, color, configure, height, pixel, pixmap, width, window, x, y
