Generic_Window_Manager/gwm.h

396 lines
11 KiB
C

/* Copyright 1989 GROUPE BULL -- See license conditions in file COPYRIGHT
* Copyright 1989 Massachusetts Institute of Technology
*/
/***************************************************************\
* *
* BULL WINDOW MANAGER for X11 *
* *
* general include file, contains GWM specific typedef. *
* *
\***************************************************************/
#ifndef INCLUDE_WOOL_H
#include "wool.h"
#endif
#ifdef DEBUG
#include <stdio.h>
#endif /* DEBUG */
#define GWM_h
extern char GWM_version_name[];
/* some parameters */
#define WLPROFILE_USER_VARIABLE "GWMPROFILE"
#define WOOL_USER_PROFILE ".gwmrc"
#define WOOL_TEXT_EXTENSION ".gwm"
#define WLPATH_SHELL_VARIABLE "GWMPATH"
/* adaptation to the different X11 libraries */
#if defined(X11R1) || defined(X11R2)|| defined(X11R3)
# define NOBASEDIMS
# define NOXEHTYPE
#else /* R4, R5, R6... */
#define SHAPE
#endif
#if defined(X11R1)||defined(X11R2)||defined(X11R3)||defined(X11R4)
typedef char *XPointer;
#endif
/* useful macro: XFree of a pointer that may be null */
#define XFreeN(p) if (p) XFree(p)
/* customization flags */
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#ifndef Max
#define Max(x,y) (((x)<(y))?(y):(x))
#define Min(x,y) (((x)<(y))?(x):(y))
#define FlagOn(mask,flag) ((mask)&(flag))
#endif
#define HORIZONTAL 0
#define VERTICAL 1
typedef char *Pointer;
typedef long WoolAtom;
typedef char *AtomName;
typedef int Errno;
typedef int (*PtrToFunc) ();
typedef void (*PtrToProc) ();
/*
* error numbers
*/
#define OK 0
#define FatalError -1
EXT int ErrorStatus; /* setted at a string in XError */
/* X types */
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
typedef XEvent EventData, *Event;
extern Card32 EventProperties[];
extern int EventTimeFieldOffset[];
#define EPGrabRedirected (1<<0)
#define EPKeyOrButton (1<<1)
#define EPCrossing (1<<2)
#define EPFocus (1<<3)
#define EPXY (1<<4)
#define EPXYRoot (1<<5)
#define EPTime (1<<6)
#define EPRedirectable (1<<7)
#define event_is_key_or_button(evt) \
(EventProperties[(evt).type] & EPKeyOrButton)
#define event_is_grabbable(evt) \
(EventProperties[(evt).type] & EPGrabRedirected)
#define event_is_redirectable(evt) \
(EventProperties[(evt).type] & EPRedirectable)
#define event_is_crossing(evt) \
(EventProperties[(evt).type] & EPCrossing)
#define event_is_focus(evt) \
(EventProperties[(evt).type] & EPFocus)
#define LegalPointerEventMask(mask) ((mask) & (0xffff ^ 0x8003))
#ifndef WOB_h
#include "wob.h"
#endif
#define GWMUserEvent (LASTEvent+1)
/* The Context is a structure of all screen-dependent variables
* Multi-screen operation will be handled by switching contextes
*/
EXT GWMScreenContext *GWMManagedScreens;/* the list of all screens on the
display, being NULL if not
managed. */
EXT GWMScreenContext Context; /* the current screen (pointer to) */
EXT GWMScreenContext *ContextPtr; /* used by the following macro */
EXT GWMScreenContext GWM_OldContext; /* for FOR_ALL_SCREENS macro */
#define FOR_ALL_SCREENS \
{ GWMScreenContext OldContext = Context, *OldContextPtr = ContextPtr;\
for (ContextPtr = GWMManagedScreens;\
ContextPtr < GWMManagedScreens + ScreenCount(dpy); \
ContextPtr++) \
if(Context = *ContextPtr)
#define END_OF_ALL_SCREENS Context = OldContext; ContextPtr = OldContextPtr;}
/*
* ICCC structures
*/
#define WM_STATE_Withdrawn 0
#define WM_STATE_Normal 1
#define WM_STATE_Iconified 3
typedef struct _WM_STATE_PROP {
Card32 state; /* WM_STATE_Withdrawn, _Normal, _Iconified */
Window icon; /* X window id of the icon */
} *WM_STATE_PROP;
#define WM_STATE_PROP_Length 2 /* in Card32 elements */
/* max length of some properties */
#define WM_COLORMAP_WINDOWS_PROP_Length 80 /* number of sub-wins colormaps */
#define WM_PROTOCOLS_PROP_Length 40 /* number of protocols */
/*
* some useful macros
*/
#define check_window_size(wob) \
if(!wob -> box.width && !wob -> box.height) \
GWM_no_size_window_error(wob);
#define SAVE_EVENT_CONTEXT \
Event old_TriggeringEvent = TriggeringEvent; \
Wob old_TargetWob = TargetWob; \
ClientWindow old_TargetWindow = TargetWindow; \
GWMScreenContext old_Context = Context
#define RESTORE_EVENT_CONTEXT \
TriggeringEvent = old_TriggeringEvent; \
TargetWob = old_TargetWob; \
TargetWindow = old_TargetWindow; \
Context = old_Context
#define TrapXErrors(statement) (\
XSync(dpy, 0), XSetErrorHandler(NoXError), ErrorStatus = 0, \
statement, \
XSync(dpy, 0), XSetErrorHandler(XError), ErrorStatus)
#define FlushXErrors() \
XSetErrorHandler(NoXError), XSync(dpy, 0), XSetErrorHandler(XError)
/*
* tracing facilities:
* trace1(level, string, parameter);
* trace(level, string);
*/
#ifdef DEBUG
EXT int GWM_Tracelevel INIT(0);
#define trace(l, s) ((l<=GWM_Tracelevel) ? fprintf(stderr,s) : 0);
#define trace1(l, s, p) ((l<=GWM_Tracelevel) ? fprintf(stderr,s,p) : 0);
#define trace2(l, s, p,q) ((l<=GWM_Tracelevel) ? fprintf(stderr,s,p,q) : 0);
#else /* DEBUG */
#define trace(l, s)
#define trace1(l, s, p)
#define trace2(l, s, p,q)
#endif /* DEBUG */
#ifdef SECURE
extern char *eventtype[];
#endif /* SECURE */
#ifndef NULL
#define NULL 0
#endif
/*
* GWM global variables, common to the display
*/
EXT Display *dpy; /* THE display */
EXT Time GWMTime INIT(0);/* the latest known server date */
EXT XContext wob_context; /* to retrieve wobs via hooks */
EXT XContext client_context; /* to retrieve wobs via clients */
EXT int errno;
EXT Wob TargetWob INIT(0);
EXT ClientWindow TargetWindow INIT(0);
EXT Event TriggeringEvent INIT(0);
EXT char *GWM_Display;
EXT int GWM_ScreenCount;
EXT int GWM_DefaultScreen;
EXT ClientWindow GWM_window_being_decorated INIT(0);
EXT int GWM_ShapeExtension INIT(0); /* display has shape extension ? */
EXT int GWM_ShapeEventBase INIT(0); /* first event # of shape ext. */
EXT int GWM_ShapeErrorBase INIT(0); /* first error # of shape ext. */
/* switches */
EXT Wob GWM_ServerGrabbed INIT(0);
EXT Wob GWM_KeyboardGrabbed INIT(0);
EXT int GWM_ProcessingExistingWindows INIT(0);
EXT int GWM_Mapall INIT(0);
EXT int GWM_Synchronize INIT(0);
EXT int GWM_UserSynchronous INIT(1);
EXT int GWM_Monoscreen INIT(0);
EXT int GWM_No_set_focus INIT(0);
EXT char *GWM_ScreensNotManaged INIT(0);
EXT int GWM_Movegrid INIT(0);
EXT int GWM_Resizegrid INIT(0);
EXT int GWM_Move_meter INIT(0); /* is there a moving meter */
EXT int GWM_Resize_meter INIT(1); /* is there a resize meter */
EXT int GWM_InvertCursors INIT(1); /* for cursor-make */
EXT XEvent GWM_LastEvent; /* last key or button (user) event */
EXT Time GWM_DoubleClickDelay INIT(500); /* in millisecond */
EXT int GWM_check_input_focus_flag INIT(1);/* set focus check flag */
EXT int GWM_backup_old_property INIT(0);
EXT int GWM_GrabChildEvents INIT(0);
EXT int GWM_Propagate_user_events INIT(1);
EXT ClientWindow GWM_Window_being_opened INIT(0);
EXT int GWM_resize_style INIT(0);
EXT int GWM_window_cutting_size INIT(0);
EXT int GWM_Mwm_catch_corners INIT(0);
EXT int GWM_grab_keyboard_also INIT(0);
EXT int GWM_confine_grabs INIT(0);
EXT int GWM_confine_windows INIT(0);
EXT int GWM_quiet INIT(0);
EXT int GWM_reenter_on_opens INIT(1);
EXT int GWM_delete_read_properties INIT(False);
EXT int GWM_never_warp_pointer INIT(0);
EXT int GWM_kill_pid INIT(0);
EXT int GWM_kill_pid_sig INIT(0);
EXT int GWM_xpm_closeness INIT(40000);
EXT int GWM_allow_border_on_shaped_windows INIT(False);
#ifdef DEBUG
EXT int GWM_GrabServer INIT(0);
#else
EXT int GWM_GrabServer INIT(1);
#endif /* DEBUG */
/* masks */
EXT unsigned int ClientMask INIT(SubstructureRedirectMask);
EXT unsigned int ClientClientMask INIT(PropertyChangeMask
| StructureNotifyMask
| ColormapChangeMask);
EXT unsigned int RootMask INIT(SubstructureRedirectMask
| ColormapChangeMask
| PropertyChangeMask);
EXT unsigned int WobMask INIT(0);
EXT unsigned int MeterMask INIT(ExposureMask);
/* static data for remebering GWM state */
EXT int GWM_argc; /* unix argc argv of GWM */
EXT char ** GWM_argv;
EXT char ** GWM_is_restarting INIT(0);
EXT int GWM_is_ending INIT(0);
EXT int GWM_time_of_last_bus_error INIT(0);
EXT union { /* keep track of old prop */
XWMHints wm_hints;
} GWM_backup_of_old_property;
/* defaults */
EXT int DefaultBorderWidth INIT(1);
EXT int DefaultLabelHorizontalMargin INIT(4);
EXT int DefaultLabelVerticalMargin INIT(2);
EXT int DefaultPlugSeparator INIT(4);
EXT int DefaultBarSeparator INIT(0);
EXT int DefaultInnerBorderwidth INIT(ANY);
EXT int DefaultMenuDirection INIT(1);
EXT int DefaultBarMinWidth INIT(0);
EXT int DefaultBarMaxWidth INIT(1000);
EXT int DefaultMenuMinWidth INIT(1);
EXT int DefaultMenuMaxWidth INIT(10000);
EXT int DefaultFont;
/* X Atoms */
EXT Atom XA_WM_STATE;
EXT Atom XA_WM_COLORMAP_WINDOWS;
EXT Atom XA_WM_CHANGE_STATE;
EXT Atom XA_WM_PROTOCOLS;
EXT Atom XA_WM_TAKE_FOCUS;
EXT Atom XA_WM_SAVE_YOURSELF;
EXT Atom XA_WM_DELETE_WINDOW;
EXT Atom XA_GWM_EXECUTE;
EXT Atom XA_GWM_RUNNING;
/* WOOL Atoms of the context */
#ifdef INCLUDE_WL_ATOM_H
EXT WOOL_Atom WA_borderwidth;
EXT WOOL_Atom WA_borderpixel;
EXT WOOL_Atom WA_background;
EXT WOOL_Atom WA_foreground;
EXT WOOL_Atom WA_bordertile;
EXT WOOL_Atom WA_fsm;
EXT WOOL_Atom WA_menu;
EXT WOOL_Atom WA_tile;
EXT WOOL_Atom WA_cursor;
EXT WOOL_Atom WA_property;
EXT WOOL_Atom WA_describe_window;
EXT WOOL_Atom WA_window_description;
EXT WOOL_Atom WA_icon_description;
EXT WOOL_Atom WA_describe_screen;
EXT WOOL_Atom WA_window;
EXT WOOL_Atom WA_bar;
EXT WOOL_Atom WA_plug;
EXT WOOL_Atom WA_root;
EXT WOOL_Atom WA_icon;
EXT WOOL_Atom WA_root_window;
EXT WOOL_Atom WA_grabs;
EXT WOOL_Atom WA_grab;
EXT WOOL_Atom WA_ungrab;
EXT WOOL_Atom WA_opening;
EXT WOOL_Atom WA_closing;
EXT WOOL_Atom WA_mapped;
EXT WOOL_Atom WA_stacking_order;
EXT WOOL_Atom WA_iconify_window;
EXT WOOL_Atom WA_font;
EXT WOOL_Atom WA_horizontal_margin;
EXT WOOL_Atom WA_vertical_margin;
EXT WOOL_Atom WA_color;
EXT WOOL_Atom WA_gray;
EXT WOOL_Atom WA_mono;
EXT WOOL_Atom WA_ContextNamespace;
EXT WOOL_Atom WA_cursorNW;
EXT WOOL_Atom WA_cursorNE;
EXT WOOL_Atom WA_cursorN;
EXT WOOL_Atom WA_cursorSW;
EXT WOOL_Atom WA_cursorSE;
EXT WOOL_Atom WA_cursorS;
EXT WOOL_Atom WA_cursorE;
EXT WOOL_Atom WA_cursorW;
EXT WOOL_Atom WA_here;
EXT WOOL_Atom WA_class_name;
EXT WOOL_Atom WA_client_name;
EXT WOOL_Atom WA_icon_name;
EXT WOOL_Atom WA_starts_iconic;
EXT WOOL_Atom WA_x;
EXT WOOL_Atom WA_y;
EXT WOOL_Atom WA_gravity;
EXT WOOL_Atom WA_map_on_raise;
EXT WOOL_Atom WA_ignore_take_focus;
#endif /* INCLUDE_WL_ATOM_H */
#ifdef INCLUDE_WL_LIST_H
EXT WOOL_List WL_describe_window_call;
EXT WOOL_List WL_describe_screen_call;
EXT WOOL_List WL_iconify_window_call;
#endif /* INCLUDE_WL_LIST_H */
#ifdef INCLUDE_WL_STRING_H
EXT WOOL_String DefaultClientClass;
EXT WOOL_String DefaultClientName;
EXT WOOL_String DefaultWindowName;
EXT WOOL_String DefaultMachineName;
EXT WOOL_String DefaultIconName;
#endif /* INCLUDE_WL_STRING_H */