~profzoom/ubuntu/quantal/wmaker/bug-1079925

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * WindowMaker interface definitions
 *
 * Copyright (C) 1997-2003 Alfredo K. Kojima
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public
 *  License along with this library; if not, write to the Free
 *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef _WMLIB_H_
#define _WMLIB_H_

/* the definitions in this file can change at any time. WINGs has more
 * stable definitions */

#include <X11/Xlib.h>
#include <X11/Xmd.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef struct {
    CARD32 flags;
    CARD32 window_style;
    CARD32 window_level;
    CARD32 reserved;
    Pixmap miniaturize_pixmap;	       /* pixmap for miniaturize button */
    Pixmap close_pixmap;	       /* pixmap for close button */
    Pixmap miniaturize_mask;	       /* miniaturize pixmap mask */
    Pixmap close_mask;		       /* close pixmap mask */
    CARD32 extra_flags;
} GNUstepWMAttributes;

#define GSWindowStyleAttr 	(1<<0)
#define GSWindowLevelAttr 	(1<<1)
#define GSMiniaturizePixmapAttr	(1<<3)
#define GSClosePixmapAttr	(1<<4)
#define GSMiniaturizeMaskAttr	(1<<5)
#define GSCloseMaskAttr		(1<<6)
#define GSExtraFlagsAttr       	(1<<7)



#define GSClientResizeFlag	(1<<0)
#define GSFullKeyboardEventsFlag (1<<1)
#define GSMenuWindowFlag	(1<<2)
#define GSIconWindowFlag	(1<<3)
#define GSSkipWindowListFlag	(1<<4)
#define GSNoApplicationIconFlag	(1<<5)
#define GSDarkGrayTitlebarFlag	(1<<8)


#define WMFHideOtherApplications	10
#define WMFHideApplication		12


#ifndef _DEFINED_GNUSTEP_WINDOW_INFO
#define	_DEFINED_GNUSTEP_WINDOW_INFO
/*
 * Window levels are taken from GNUstep (gui/AppKit/NSWindow.h)
 * NSDesktopWindowLevel intended to be the level at which things
 * on the desktop sit ... so you should be able
 * to put a desktop background just below it.
 *
 * Applications are actually permitted to use any value in the
 * range INT_MIN+1 to INT_MAX
 */
enum {
    WMDesktopWindowLevel = -1000, /* GNUstep addition     */
    WMNormalWindowLevel = 0,
    WMFloatingWindowLevel = 3,
    WMSubmenuWindowLevel = 3,
    WMTornOffMenuWindowLevel = 3,
    WMMainMenuWindowLevel = 20,
    WMDockWindowLevel = 21,       /* Deprecated - use NSStatusWindowLevel */
    WMStatusWindowLevel = 21,
    WMModalPanelWindowLevel = 100,
    WMPopUpMenuWindowLevel = 101,
    WMScreenSaverWindowLevel = 1000
};


/* window attributes */
enum {
    WMBorderlessWindowMask = 0,
    WMTitledWindowMask = 1,
    WMClosableWindowMask = 2,
    WMMiniaturizableWindowMask = 4,
    WMResizableWindowMask = 8,
    WMIconWindowMask = 64,
    WMMiniWindowMask = 128
};
#endif

typedef struct _wmAppContext WMAppContext;

typedef struct _wmMenu WMMenu;

typedef void (*WMMenuAction)(void *clientdata, int code, Time timestamp);

typedef void (*WMFreeFunction)(void *clientdata);

int WMProcessEvent(WMAppContext *app, XEvent *event);


WMAppContext *WMAppCreateWithMain(Display *display, int screen_number,
                                  Window main_window);

WMAppContext *WMAppCreate(Display *display, int screen_number);

int WMAppAddWindow(WMAppContext *app, Window window);

int WMAppSetMainMenu(WMAppContext *app, WMMenu *menu);


int WMRealizeMenus(WMAppContext *app);


void WMSetWindowAttributes(Display *dpy, Window window,
                           GNUstepWMAttributes *attributes);


void WMHideApplication(WMAppContext *app);
void WMHideOthers(WMAppContext *app);

/*
 * WARNING: the menu related functions might be removed in the future.
 */
WMMenu *WMMenuCreate(WMAppContext *app, char *title);

int WMMenuAddItem(WMMenu *menu, char *text, WMMenuAction action,
                  void *clientData, WMFreeFunction freedata, char *rtext);

int WMMenuInsertItem(WMMenu *menu, int index, char *text,
                     WMMenuAction *action, char *rtext);

int WMMenuRemoveItem(WMMenu *menu, int index);

int WMMenuAddSubmenu(WMMenu *menu, char *title, WMMenu *submenu);

void WMMenuSetEnabled(WMMenu *menu, int index, int enabled);

void WMMenuDestroy(WMMenu *menu, int submenus);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif