263 lines
9.6 KiB
C
263 lines
9.6 KiB
C
/*
|
|
* tkMacOSXWm.h --
|
|
*
|
|
* Declarations of Macintosh specific window manager structures.
|
|
*
|
|
* Copyright 2001-2009, Apple Inc.
|
|
* Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net>
|
|
*
|
|
* See the file "license.terms" for information on usage and redistribution
|
|
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
*/
|
|
|
|
#ifndef _TKMACWM
|
|
#define _TKMACWM
|
|
|
|
#include "tkMacOSXInt.h"
|
|
#include "tkMenu.h"
|
|
|
|
/*
|
|
* A data structure of the following type holds information for
|
|
* each window manager protocol (such as WM_DELETE_WINDOW) for
|
|
* which a handler (i.e. a Tcl command) has been defined for a
|
|
* particular top-level window.
|
|
*/
|
|
|
|
typedef struct ProtocolHandler {
|
|
Atom protocol; /* Identifies the protocol. */
|
|
struct ProtocolHandler *nextPtr;
|
|
/* Next in list of protocol handlers for
|
|
* the same top-level window, or NULL for
|
|
* end of list. */
|
|
Tcl_Interp *interp; /* Interpreter in which to invoke command. */
|
|
char command[4]; /* Tcl command to invoke when a client
|
|
* message for this protocol arrives.
|
|
* The actual size of the structure varies
|
|
* to accommodate the needs of the actual
|
|
* command. THIS MUST BE THE LAST FIELD OF
|
|
* THE STRUCTURE. */
|
|
} ProtocolHandler;
|
|
|
|
#define HANDLER_SIZE(cmdLength) \
|
|
((unsigned) (sizeof(ProtocolHandler) - 3 + cmdLength))
|
|
|
|
/*
|
|
* A data structure of the following type holds window-manager-related
|
|
* information for each top-level window in an application.
|
|
*/
|
|
|
|
typedef struct TkWmInfo {
|
|
TkWindow *winPtr; /* Pointer to main Tk information for
|
|
* this window. */
|
|
Window reparent; /* If the window has been reparented, this
|
|
* gives the ID of the ancestor of the window
|
|
* that is a child of the root window (may
|
|
* not be window's immediate parent). If
|
|
* the window isn't reparented, this has the
|
|
* value None. */
|
|
Tk_Uid titleUid; /* Title to display in window caption. If
|
|
* NULL, use name of widget. */
|
|
char *iconName; /* Name to display in icon. */
|
|
Window master; /* Master window for TRANSIENT_FOR property,
|
|
* or None. */
|
|
XWMHints hints; /* Various pieces of information for
|
|
* window manager. */
|
|
char *leaderName; /* Path name of leader of window group
|
|
* (corresponds to hints.window_group).
|
|
* Malloc-ed. Note: this field doesn't
|
|
* get updated if leader is destroyed. */
|
|
char *masterWindowName; /* Path name of window specified as master
|
|
* in "wm transient" command, or NULL.
|
|
* Malloc-ed. Note: this field doesn't
|
|
* get updated if masterWindowName is
|
|
* destroyed. */
|
|
Tk_Window icon; /* Window to use as icon for this window,
|
|
* or NULL. */
|
|
Tk_Window iconFor; /* Window for which this window is icon, or
|
|
* NULL if this isn't an icon for anyone. */
|
|
|
|
/*
|
|
* Information used to construct an XSizeHints structure for
|
|
* the window manager:
|
|
*/
|
|
|
|
int sizeHintsFlags; /* Flags word for XSizeHints structure.
|
|
* If the PBaseSize flag is set then the
|
|
* window is gridded; otherwise it isn't
|
|
* gridded. */
|
|
int minWidth, minHeight; /* Minimum dimensions of window, in
|
|
* grid units, not pixels. */
|
|
int maxWidth, maxHeight; /* Maximum dimensions of window, in
|
|
* grid units, not pixels. */
|
|
Tk_Window gridWin; /* Identifies the window that controls
|
|
* gridding for this top-level, or NULL if
|
|
* the top-level isn't currently gridded. */
|
|
int widthInc, heightInc; /* Increments for size changes (# pixels
|
|
* per step). */
|
|
struct {
|
|
int x; /* numerator */
|
|
int y; /* denominator */
|
|
} minAspect, maxAspect; /* Min/max aspect ratios for window. */
|
|
int reqGridWidth, reqGridHeight;
|
|
/* The dimensions of the window (in
|
|
* grid units) requested through
|
|
* the geometry manager. */
|
|
int gravity; /* Desired window gravity. */
|
|
|
|
/*
|
|
* Information used to manage the size and location of a window.
|
|
*/
|
|
|
|
int width, height; /* Desired dimensions of window, specified
|
|
* in grid units. These values are
|
|
* set by the "wm geometry" command and by
|
|
* ConfigureNotify events (for when wm
|
|
* resizes window). -1 means user hasn't
|
|
* requested dimensions. */
|
|
int x, y; /* Desired X and Y coordinates for window.
|
|
* These values are set by "wm geometry",
|
|
* plus by ConfigureNotify events (when wm
|
|
* moves window). These numbers are
|
|
* different than the numbers stored in
|
|
* winPtr->changes because (a) they could be
|
|
* measured from the right or bottom edge
|
|
* of the screen (see WM_NEGATIVE_X and
|
|
* WM_NEGATIVE_Y flags) and (b) if the window
|
|
* has been reparented then they refer to the
|
|
* parent rather than the window itself. */
|
|
int parentWidth, parentHeight;
|
|
/* Width and height of reparent, in pixels
|
|
* *including border*. If window hasn't been
|
|
* reparented then these will be the outer
|
|
* dimensions of the window, including
|
|
* border. */
|
|
int xInParent, yInParent; /* Offset of window within reparent, measured
|
|
* from upper-left outer corner of parent's
|
|
* border to upper-left outer corner of child's
|
|
* border. If not reparented then these are
|
|
* zero. */
|
|
int configX, configY; /* x,y position of toplevel when window is
|
|
* switched into fullscreen state, */
|
|
int configWidth, configHeight;
|
|
/* Dimensions passed to last request that we
|
|
* issued to change geometry of window. Used
|
|
* to eliminate redundant resize operations. */
|
|
|
|
/*
|
|
* Information about the virtual root window for this top-level,
|
|
* if there is one.
|
|
*/
|
|
|
|
Window vRoot; /* Virtual root window for this top-level,
|
|
* or None if there is no virtual root
|
|
* window (i.e. just use the screen's root). */
|
|
int vRootX, vRootY; /* Position of the virtual root inside the
|
|
* root window. If the WM_VROOT_OFFSET_STALE
|
|
* flag is set then this information may be
|
|
* incorrect and needs to be refreshed from
|
|
* the X server. If vRoot is None then these
|
|
* values are both 0. */
|
|
unsigned int vRootWidth, vRootHeight;
|
|
/* Dimensions of the virtual root window.
|
|
* If vRoot is None, gives the dimensions
|
|
* of the containing screen. This information
|
|
* is never stale, even though vRootX and
|
|
* vRootY can be. */
|
|
|
|
/*
|
|
* List of children of the toplevel which have private colormaps.
|
|
*/
|
|
|
|
TkWindow **cmapList; /* Array of window with private colormaps. */
|
|
int cmapCount; /* Number of windows in array. */
|
|
|
|
/*
|
|
* Miscellaneous information.
|
|
*/
|
|
|
|
ProtocolHandler *protPtr; /* First in list of protocol handlers for
|
|
* this window (NULL means none). */
|
|
int cmdArgc; /* Number of elements in cmdArgv below. */
|
|
const char **cmdArgv; /* Array of strings to store in the
|
|
* WM_COMMAND property. NULL means nothing
|
|
* available. */
|
|
char *clientMachine; /* String to store in WM_CLIENT_MACHINE
|
|
* property, or NULL. */
|
|
int flags; /* Miscellaneous flags, defined below. */
|
|
|
|
/*
|
|
* Macintosh information.
|
|
*/
|
|
WindowClass macClass;
|
|
UInt64 attributes, configAttributes;
|
|
TkWindow *scrollWinPtr; /* Ptr to scrollbar handling grow widget. */
|
|
TkMenu *menuPtr;
|
|
NSWindow *window;
|
|
} WmInfo;
|
|
|
|
|
|
/*
|
|
* Flag values for WmInfo structures:
|
|
*
|
|
* WM_NEVER_MAPPED - non-zero means window has never been
|
|
* mapped; need to update all info when
|
|
* window is first mapped.
|
|
* WM_UPDATE_PENDING - non-zero means a call to UpdateGeometryInfo
|
|
* has already been scheduled for this
|
|
* window; no need to schedule another one.
|
|
* WM_NEGATIVE_X - non-zero means x-coordinate is measured in
|
|
* pixels from right edge of screen, rather
|
|
* than from left edge.
|
|
* WM_NEGATIVE_Y - non-zero means y-coordinate is measured in
|
|
* pixels up from bottom of screen, rather than
|
|
* down from top.
|
|
* WM_UPDATE_SIZE_HINTS - non-zero means that new size hints need to be
|
|
* propagated to window manager.
|
|
* WM_SYNC_PENDING - set to non-zero while waiting for the window
|
|
* manager to respond to some state change.
|
|
* WM_VROOT_OFFSET_STALE - non-zero means that (x,y) offset information
|
|
* about the virtual root window is stale and
|
|
* needs to be fetched fresh from the X server.
|
|
* WM_ABOUT_TO_MAP - non-zero means that the window is about to
|
|
* be mapped by TkWmMapWindow. This is used
|
|
* by UpdateGeometryInfo to modify its behavior.
|
|
* WM_MOVE_PENDING - non-zero means the application has requested
|
|
* a new position for the window, but it hasn't
|
|
* been reflected through the window manager
|
|
* yet.
|
|
* WM_COLORMAPS_EXPLICIT - non-zero means the colormap windows were
|
|
* set explicitly via "wm colormapwindows".
|
|
* WM_ADDED_TOPLEVEL_COLORMAP - non-zero means that when "wm colormapwindows"
|
|
* was called the top-level itself wasn't
|
|
* specified, so we added it implicitly at
|
|
* the end of the list.
|
|
* WM_WIDTH_NOT_RESIZABLE - non-zero means that we're not supposed to
|
|
* allow the user to change the width of the
|
|
* window (controlled by "wm resizable"
|
|
* command).
|
|
* WM_HEIGHT_NOT_RESIZABLE - non-zero means that we're not supposed to
|
|
* allow the user to change the height of the
|
|
* window (controlled by "wm resizable"
|
|
* command).
|
|
*/
|
|
|
|
#define WM_NEVER_MAPPED 0x0001
|
|
#define WM_UPDATE_PENDING 0x0002
|
|
#define WM_NEGATIVE_X 0x0004
|
|
#define WM_NEGATIVE_Y 0x0008
|
|
#define WM_UPDATE_SIZE_HINTS 0x0010
|
|
#define WM_SYNC_PENDING 0x0020
|
|
#define WM_VROOT_OFFSET_STALE 0x0040
|
|
#define WM_ABOUT_TO_MAP 0x0080
|
|
#define WM_MOVE_PENDING 0x0100
|
|
#define WM_COLORMAPS_EXPLICIT 0x0200
|
|
#define WM_ADDED_TOPLEVEL_COLORMAP 0x0400
|
|
#define WM_WIDTH_NOT_RESIZABLE 0x0800
|
|
#define WM_HEIGHT_NOT_RESIZABLE 0x1000
|
|
#define WM_TOPMOST 0x2000
|
|
#define WM_FULLSCREEN 0x4000
|
|
#define WM_TRANSPARENT 0x8000
|
|
|
|
#endif
|
|
|