File: asdatabase.h

package info (click to toggle)
afterstep 2.2.12-18.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,184 kB
  • sloc: ansic: 201,695; sh: 5,894; xml: 3,721; makefile: 2,094; perl: 1,558; cpp: 811
file content (210 lines) | stat: -rw-r--r-- 8,977 bytes parent folder | download | duplicates (6)
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#ifndef AS_STYLE_H
#define AS_STYLE_H

#include "afterstep.h"

#ifdef __cplusplus
extern "C" {
#endif

struct wild_reg_exp;

/*  we clean up flags usage in style and use :
 *  set_flags/flags pair instead of  on_flags/off_flags
 */
/* this are flags defining that particular value is set and enable/disabled */
#define STYLE_ICON              (1 << 0)   /* also goes into style->icon_file */
#define STYLE_STARTUP_DESK      (1 << 1)   /* also goes into style->Desk */
#define STYLE_BORDER_WIDTH      (1 << 2)   /* style->border_width */
#define STYLE_HANDLE_WIDTH      (1 << 3)   /* style->resize_width */
#define STYLE_DEFAULT_GEOMETRY  (1 << 4)   /* to override PPosition's geometry */
#define STYLE_VIEWPORTX         (1 << 5)   /* style->ViewportX */
#define STYLE_VIEWPORTY         (1 << 6)   /* style->ViewportY */
#define STYLE_GRAVITY           (1 << 7)   /* if user wants us to override gravity from WM_NORMAL_HINTS */
#define STYLE_LAYER             (1 << 8)   /* style->layer - layer is defined */
#define STYLE_FRAME             (1 << 9)   /* style->frame - frame is defined */
#define STYLE_WINDOWBOX         (1 << 10)  /* style->windowbox - windowbox is defined */
#define STYLE_WINDOW_OPACITY    (1 << 11)  /* style->window_opacity - opacity of the window is defined */


/* this are pure flags */
#define STYLE_PAGER		(1 << 4)   
#define STYLE_IGNORE_RESTACK	(1 << 5)   /* if set - client will not be able to rise/lower 
											  the window */
#define STYLE_FULLSCREEN		(1 << 6)
#define STYLE_KDE_HINTS         (1 << 7)    /* if set - then we should honor KDE Hints */
#define STYLE_CURRENT_VIEWPORT  (1 << 8)   /* Ignore ConfigRequests for the client */   
#define STYLE_IGNORE_CONFIG     (1 << 9)   /* Ignore ConfigRequests for the client */   
#define STYLE_LONG_LIVING       (1 << 10)
#define STYLE_STICKY            (1 << 11)
#define STYLE_TITLE             (1 << 12)
#define STYLE_CIRCULATE         (1 << 13)
#define STYLE_WINLIST           (1 << 14)
#define STYLE_START_ICONIC      (1 << 15)
#define STYLE_ICON_TITLE        (1 << 16)
#define STYLE_FOCUS             (1 << 17)
#define STYLE_AVOID_COVER       (1 << 18)
#define STYLE_VERTICAL_TITLE    (1 << 19)    /* if this window has a vertical titlebar */
#define STYLE_HANDLES           (1 << 20)
#define STYLE_PPOSITION         (1 << 21)    /* if set - then we should honor PPosition */
#define STYLE_GROUP_HINTS       (1 << 22)    /* if set - then we should use Group Hint for initial placement */
#define STYLE_TRANSIENT_HINTS   (1 << 23)    /* if set - then we should use Transient Hint for initial placement */
#define STYLE_MOTIF_HINTS       (1 << 24)    /* if set - then we should honor Motif Hints */
#define STYLE_GNOME_HINTS       (1 << 25)    /* if set - then we should honor Gnome Hints */
#define STYLE_EXTWM_HINTS       (1 << 26)    /* if set - then we should honor Extended WM Hints */
#define STYLE_XRESOURCES_HINTS  (1 << 27)    /* if set - then we should honor data from .XDefaults */
#define STYLE_FOCUS_ON_MAP      (1 << 28)    /* if set - window will be focused as soon as its mapped */


/* the following is needed for MATCH_ enum - see styledb.c for more */
#define STYLE_MYSTYLES          (1 << 29)   /*  */
#define STYLE_BUTTONS           (1 << 30)   /*  */
#define STYLE_FLAGS             (1 << 31)   /*  */

#define STYLE_DEFAULTS		(STYLE_PAGER | STYLE_TITLE|STYLE_CIRCULATE|STYLE_WINLIST| \
							 STYLE_FOCUS|STYLE_FOCUS_ON_MAP|STYLE_HANDLES| \
							 STYLE_ICON_TITLE|STYLE_PPOSITION|STYLE_GROUP_HINTS| \
							 STYLE_TRANSIENT_HINTS|STYLE_MOTIF_HINTS|STYLE_KDE_HINTS| \
							 STYLE_GNOME_HINTS|STYLE_EXTWM_HINTS|STYLE_LONG_LIVING)

/************************************************************************************
 * Data structure definitions :
 ************************************************************************************/
/*
 * This one is used to read up data from the config file/ save data into config file
 * ( basically just an interface with libASConfig )
 */
typedef struct name_list
{
  struct name_list *next;	/* pointer to the next list elemaent structure */
  char *name;			/* the name of the window */

  /* new approach :
   * If flag is set in both set_flags and flags
   - then it is present in config and value is On
   * If flag is set in set_flags but not in flags
   - then it is present in config and value is Off
   * if flag is not set in set_flags
   - then it is not present in config and value is Undefined
   */
  unsigned long set_flags;
  unsigned long flags;
  /* flag that defines which of the following data members are set in config: */
  unsigned long set_data_flags;

  char *icon_file;		/* icon name */
  ASGeometry default_geometry ;
  int Desk;			/* Desktop number */
  int layer;			/* layer number */
  int ViewportX, ViewportY;

  int border_width;
  int resize_width;
  int gravity ;

  char *window_styles[BACK_STYLES];
  char *frame_name;
  char *windowbox_name;

  int   window_opacity;

  unsigned long on_buttons;
  unsigned long off_buttons;
}
name_list;

/*
 * this is somewhat compiled/preprocessed version, suitable for database storin,
 * and searching through:
 */
typedef struct ASDatabaseRecord
{
  unsigned long magic ;         /* magic number identifying valid record */

  struct wild_reg_exp *regexp ;
  unsigned long set_flags;      /* (set_flags&flags) will get you flags that are ON */
  unsigned long flags;          /* (set_flags&(~flags)) will get you flags that are OFF */
  unsigned long set_buttons;    /* (set_buttons&buttons) will get you buttons that are ON */
  unsigned long buttons;        /* (set_buttons&(~buttons)) will get you buttons that are OFF */
  unsigned long set_data_flags; /* flag that defines which of the following data members are set in config: */
  ASGeometry default_geometry ;
  int desk;                     /* Startup Desktop number */
  int layer;                    /* Startup layer number */
  int viewport_x, viewport_y;   /* Startup viewport */
  int border_width;
  int resize_width;
  int gravity;

  char *icon_file;
  char *frame_name;
  char *windowbox_name;
  int   window_opacity;

  char *window_styles[BACK_STYLES];
  Bool  own_strings ;

}ASDatabaseRecord;

typedef struct ASDatabase
{
	size_t allocated_num ;

	ASDatabaseRecord *styles_table ;/* list of all available styles excluding default */
	size_t            styles_num ;  /* number of entries in above table */
	size_t            default_styles_idx ;  /* number of entries in above table */

	ASDatabaseRecord  style_default;/* this one is not included in above table to speed up search */

	int *match_list ;               /* indexes of matched styles in last search (-1 default style)*/
}ASDatabase;

/************************************************************************************
 * This is the high level interface that should be used by application to
 * sort through and find matches in the Database :
 ************************************************************************************/
ASDatabaseRecord *make_asdb_record ( name_list * nl, struct wild_reg_exp *regexp,
									 ASDatabaseRecord *reusable_memory );
/* NULL terminated list of names/aliases sorted in order of descending importance */
ASDatabaseRecord *fill_asdb_record (ASDatabase *db, char **names,
									ASDatabaseRecord *reusable_memory, Bool dup_strings);
void destroy_asdb_record(ASDatabaseRecord *rec, Bool reusable);
ASDatabaseRecord *get_asdb_record (ASDatabase * db, int index);
Bool is_default_asdb_record( ASDatabase * db, ASDatabaseRecord *db_rec );


ASDatabase* build_asdb( name_list *nl );
void destroy_asdb( ASDatabase **db );
/*
 * Note that Database cannot be build on stack
 * But Record can. Make sure not to destroy something you should not.
 */

void print_asdb_matched_rec( stream_func func, void *stream, ASDatabase *db, ASDatabaseRecord *db_rec );
void print_asdb( stream_func func, void *stream, ASDatabase *db );
void print_asdb_match_list( stream_func func, void *stream, ASDatabase *db );
void print_asdb_record( stream_func func, void *stream, ASDatabaseRecord *db_rec, const char *prompt );

/************************************************************************************
 * this are low level functions typically used by configuration management facilities
 * like ASCP and such :
 ************************************************************************************/
void style_init (name_list * nl);
name_list *style_new (name_list ** tail);
/* this one just copies all the pointers, without allocating any more memory */
void style_copy (name_list * to, name_list * from);
/* this one actually allocates memory for copies of the strings : */
name_list *style_dup (name_list * from);
void style_delete (name_list * style, name_list ** phead);
void delete_name_list ( name_list **head);

/* This one will have to go : */
struct ASWindow;
void style_fill_by_name (name_list * nl, struct ASWindow *t);

#ifdef __cplusplus
}
#endif



#endif /* AS_STYLE_H */