tkMacOSXWm.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:12k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkMacOSXWm.h --
  3.  *
  4.  * Declarations of Macintosh specific window manager structures.
  5.  *
  6.  * Copyright 2001, Apple Computer, Inc.
  7.  * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net>
  8.  *
  9.  * See the file "license.terms" for information on usage and redistribution of
  10.  * this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11.  *
  12.  * The following terms apply to all files originating from Apple
  13.  * Computer, Inc. ("Apple") and associated with the software
  14.  * unless explicitly disclaimed in individual files.
  15.  *
  16.  *
  17.  * Apple hereby grants permission to use, copy, modify,
  18.  * distribute, and license this software and its documentation
  19.  * for any purpose, provided that existing copyright notices are
  20.  * retained in all copies and that this notice is included
  21.  * verbatim in any distributions. No written agreement, license,
  22.  * or royalty fee is required for any of the authorized
  23.  * uses. Modifications to this software may be copyrighted by
  24.  * their authors and need not follow the licensing terms
  25.  * described here, provided that the new terms are clearly
  26.  * indicated on the first page of each file where they apply.
  27.  *
  28.  *
  29.  * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE
  30.  * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
  31.  * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
  32.  * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF,
  33.  * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE
  34.  * POSSIBILITY OF SUCH DAMAGE.  APPLE, THE AUTHORS AND
  35.  * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
  36.  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  37.  * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS
  38.  * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE
  39.  * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE
  40.  * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  41.  *
  42.  * GOVERNMENT USE: If you are acquiring this software on behalf
  43.  * of the U.S. government, the Government shall have only
  44.  * "Restricted Rights" in the software and related documentation
  45.  * as defined in the Federal Acquisition Regulations (FARs) in
  46.  * Clause 52.227.19 (c) (2).  If you are acquiring the software
  47.  * on behalf of the Department of Defense, the software shall be
  48.  * classified as "Commercial Computer Software" and the
  49.  * Government shall have only "Restricted Rights" as defined in
  50.  * Clause 252.227-7013 (c) (1) of DFARs.  Notwithstanding the
  51.  * foregoing, the authors grant the U.S. Government and others
  52.  * acting in its behalf permission to use and distribute the
  53.  * software in accordance with the terms specified in this
  54.  * license.
  55.  *
  56.  * RCS: @(#) $Id: tkMacOSXWm.h,v 1.2.2.5 2007/04/29 02:26:51 das Exp $
  57.  */
  58. #ifndef _TKMACWM
  59. #define _TKMACWM
  60. #include "tkMacOSXInt.h"
  61. /*
  62.  * A data structure of the following type holds information for
  63.  * each window manager protocol (such as WM_DELETE_WINDOW) for
  64.  * which a handler (i.e. a Tcl command) has been defined for a
  65.  * particular top-level window.
  66.  */
  67. typedef struct ProtocolHandler {
  68.     Atom protocol; /* Identifies the protocol. */
  69.     struct ProtocolHandler *nextPtr;
  70. /* Next in list of protocol handlers for
  71.  * the same top-level window, or NULL for
  72.  * end of list. */
  73.     Tcl_Interp *interp; /* Interpreter in which to invoke command. */
  74.     char command[4]; /* Tcl command to invoke when a client
  75.  * message for this protocol arrives.
  76.  * The actual size of the structure varies
  77.  * to accommodate the needs of the actual
  78.  * command. THIS MUST BE THE LAST FIELD OF
  79.  * THE STRUCTURE. */
  80. } ProtocolHandler;
  81. #define HANDLER_SIZE(cmdLength) 
  82. ((unsigned) (sizeof(ProtocolHandler) - 3 + cmdLength))
  83. /*
  84.  * A data structure of the following type holds window-manager-related
  85.  * information for each top-level window in an application.
  86.  */
  87. typedef struct TkWmInfo {
  88.     TkWindow *winPtr; /* Pointer to main Tk information for
  89.  * this window. */
  90.     Window reparent; /* If the window has been reparented, this
  91.  * gives the ID of the ancestor of the window
  92.  * that is a child of the root window (may
  93.  * not be window's immediate parent). If
  94.  * the window isn't reparented, this has the
  95.  * value None. */
  96.     Tk_Uid titleUid; /* Title to display in window caption. If
  97.  * NULL, use name of widget. */
  98.     char *iconName; /* Name to display in icon. */
  99.     Window master; /* Master window for TRANSIENT_FOR property,
  100.  * or None. */
  101.     XWMHints hints; /* Various pieces of information for
  102.  * window manager. */
  103.     char *leaderName; /* Path name of leader of window group
  104.  * (corresponds to hints.window_group).
  105.  * Malloc-ed. Note:  this field doesn't
  106.  * get updated if leader is destroyed. */
  107.     char *masterWindowName; /* Path name of window specified as master
  108.  * in "wm transient" command, or NULL.
  109.  * Malloc-ed. Note:  this field doesn't
  110.  * get updated if masterWindowName is
  111.  * destroyed. */
  112.     Tk_Window icon; /* Window to use as icon for this window,
  113.  * or NULL. */
  114.     Tk_Window iconFor; /* Window for which this window is icon, or
  115.  * NULL if this isn't an icon for anyone. */
  116.     /*
  117.      * Information used to construct an XSizeHints structure for
  118.      * the window manager:
  119.      */
  120.     int sizeHintsFlags; /* Flags word for XSizeHints structure.
  121.  * If the PBaseSize flag is set then the
  122.  * window is gridded; otherwise it isn't
  123.  * gridded. */
  124.     int minWidth, minHeight; /* Minimum dimensions of window, in
  125.  * grid units, not pixels. */
  126.     int maxWidth, maxHeight; /* Maximum dimensions of window, in
  127.  * grid units, not pixels. */
  128.     Tk_Window gridWin; /* Identifies the window that controls
  129.  * gridding for this top-level, or NULL if
  130.  * the top-level isn't currently gridded. */
  131.     int widthInc, heightInc; /* Increments for size changes (# pixels
  132.  * per step). */
  133.     struct {
  134. int x; /* numerator */
  135. int y; /* denominator */
  136.     } minAspect, maxAspect; /* Min/max aspect ratios for window. */
  137.     int reqGridWidth, reqGridHeight;
  138. /* The dimensions of the window (in
  139.  * grid units) requested through
  140.  * the geometry manager. */
  141.     int gravity; /* Desired window gravity. */
  142.     /*
  143.      * Information used to manage the size and location of a window.
  144.      */
  145.     int width, height; /* Desired dimensions of window, specified
  146.  * in grid units. These values are
  147.  * set by the "wm geometry" command and by
  148.  * ConfigureNotify events (for when wm
  149.  * resizes window). -1 means user hasn't
  150.  * requested dimensions. */
  151.     int x, y; /* Desired X and Y coordinates for window.
  152.  * These values are set by "wm geometry",
  153.  * plus by ConfigureNotify events (when wm
  154.  * moves window). These numbers are
  155.  * different than the numbers stored in
  156.  * winPtr->changes because (a) they could be
  157.  * measured from the right or bottom edge
  158.  * of the screen (see WM_NEGATIVE_X and
  159.  * WM_NEGATIVE_Y flags) and (b) if the window
  160.  * has been reparented then they refer to the
  161.  * parent rather than the window itself. */
  162.     int parentWidth, parentHeight;
  163. /* Width and height of reparent, in pixels
  164.  * *including border*. If window hasn't been
  165.  * reparented then these will be the outer
  166.  * dimensions of the window, including
  167.  * border. */
  168.     int xInParent, yInParent; /* Offset of window within reparent, measured
  169.  * from upper-left outer corner of parent's
  170.  * border to upper-left outer corner of child's
  171.  * border. If not reparented then these are
  172.  * zero. */
  173.     int configX, configY; /* x,y position of toplevel when window is
  174.  * switched into fullscreen state, */
  175.     int configWidth, configHeight;
  176. /* Dimensions passed to last request that we
  177.  * issued to change geometry of window. Used
  178.  * to eliminate redundant resize operations. */
  179.     /*
  180.      * Information about the virtual root window for this top-level,
  181.      * if there is one.
  182.      */
  183.     Window vRoot; /* Virtual root window for this top-level,
  184.  * or None if there is no virtual root
  185.  * window (i.e. just use the screen's root). */
  186.     int vRootX, vRootY; /* Position of the virtual root inside the
  187.  * root window. If the WM_VROOT_OFFSET_STALE
  188.  * flag is set then this information may be
  189.  * incorrect and needs to be refreshed from
  190.  * the X server. If vRoot is None then these
  191.  * values are both 0. */
  192.     unsigned int vRootWidth, vRootHeight;
  193. /* Dimensions of the virtual root window.
  194.  * If vRoot is None, gives the dimensions
  195.  * of the containing screen. This information
  196.  * is never stale, even though vRootX and
  197.  * vRootY can be. */
  198.     /*
  199.      * List of children of the toplevel which have private colormaps.
  200.      */
  201.     TkWindow **cmapList; /* Array of window with private colormaps. */
  202.     int cmapCount; /* Number of windows in array. */
  203.     /*
  204.      * Miscellaneous information.
  205.      */
  206.     ProtocolHandler *protPtr; /* First in list of protocol handlers for
  207.  * this window (NULL means none). */
  208.     int cmdArgc; /* Number of elements in cmdArgv below. */
  209.     const char **cmdArgv; /* Array of strings to store in the
  210.  * WM_COMMAND property. NULL means nothing
  211.  * available. */
  212.     char *clientMachine; /* String to store in WM_CLIENT_MACHINE
  213.  * property, or NULL. */
  214.     int flags; /* Miscellaneous flags, defined below. */
  215.     /*
  216.      * Macintosh information.
  217.      */
  218.     WindowClass macClass;
  219.     WindowAttributes attributes, configAttributes;
  220.     TkWindow *scrollWinPtr; /* Ptr to scrollbar handling grow widget. */
  221.     short style; /* Legacy window style. */
  222. } WmInfo;
  223. /*
  224.  * Flag values for WmInfo structures:
  225.  *
  226.  * WM_NEVER_MAPPED - non-zero means window has never been
  227.  * mapped; need to update all info when
  228.  * window is first mapped.
  229.  * WM_UPDATE_PENDING - non-zero means a call to UpdateGeometryInfo
  230.  * has already been scheduled for this
  231.  * window; no need to schedule another one.
  232.  * WM_NEGATIVE_X - non-zero means x-coordinate is measured in
  233.  * pixels from right edge of screen, rather
  234.  * than from left edge.
  235.  * WM_NEGATIVE_Y - non-zero means y-coordinate is measured in
  236.  * pixels up from bottom of screen, rather than
  237.  * down from top.
  238.  * WM_UPDATE_SIZE_HINTS - non-zero means that new size hints need to be
  239.  * propagated to window manager.
  240.  * WM_SYNC_PENDING - set to non-zero while waiting for the window
  241.  * manager to respond to some state change.
  242.  * WM_VROOT_OFFSET_STALE - non-zero means that (x,y) offset information
  243.  * about the virtual root window is stale and
  244.  * needs to be fetched fresh from the X server.
  245.  * WM_ABOUT_TO_MAP - non-zero means that the window is about to
  246.  * be mapped by TkWmMapWindow. This is used
  247.  * by UpdateGeometryInfo to modify its behavior.
  248.  * WM_MOVE_PENDING - non-zero means the application has requested
  249.  * a new position for the window, but it hasn't
  250.  * been reflected through the window manager
  251.  * yet.
  252.  * WM_COLORMAPS_EXPLICIT - non-zero means the colormap windows were
  253.  * set explicitly via "wm colormapwindows".
  254.  * WM_ADDED_TOPLEVEL_COLORMAP - non-zero means that when "wm colormapwindows"
  255.  * was called the top-level itself wasn't
  256.  * specified, so we added it implicitly at
  257.  * the end of the list.
  258.  * WM_WIDTH_NOT_RESIZABLE - non-zero means that we're not supposed to
  259.  * allow the user to change the width of the
  260.  * window (controlled by "wm resizable"
  261.  * command).
  262.  * WM_HEIGHT_NOT_RESIZABLE - non-zero means that we're not supposed to
  263.  * allow the user to change the height of the
  264.  * window (controlled by "wm resizable"
  265.  * command).
  266.  */
  267. #define WM_NEVER_MAPPED 0x0001
  268. #define WM_UPDATE_PENDING 0x0002
  269. #define WM_NEGATIVE_X 0x0004
  270. #define WM_NEGATIVE_Y 0x0008
  271. #define WM_UPDATE_SIZE_HINTS 0x0010
  272. #define WM_SYNC_PENDING 0x0020
  273. #define WM_VROOT_OFFSET_STALE 0x0040
  274. #define WM_ABOUT_TO_MAP 0x0080
  275. #define WM_MOVE_PENDING 0x0100
  276. #define WM_COLORMAPS_EXPLICIT 0x0200
  277. #define WM_ADDED_TOPLEVEL_COLORMAP 0x0400
  278. #define WM_WIDTH_NOT_RESIZABLE 0x0800
  279. #define WM_HEIGHT_NOT_RESIZABLE 0x1000
  280. #define WM_TOPMOST 0x2000
  281. #define WM_FULLSCREEN 0x4000
  282. #define WM_TRANSPARENT 0x8000
  283. #endif