1 /*
2  * Copyright © 2001 Red Hat, Inc.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation, and that the name of Red Hat not be used in advertising or
9  * publicity pertaining to distribution of the software without specific,
10  * written prior permission.  Red Hat makes no representations about the
11  * suitability of this software for any purpose.  It is provided "as is"
12  * without express or implied warranty.
13  *
14  * RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
16  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
18  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
19  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  *
21  * Author:  Owen Taylor, Red Hat, Inc.
22  */
23 #ifndef XSETTINGS_COMMON_H
24 #define XSETTINGS_COMMON_H
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* __cplusplus */
29 
30 typedef struct _XSettingsBuffer XSettingsBuffer;
31 typedef struct _XSettingsColor XSettingsColor;
32 typedef struct _XSettingsList XSettingsList;
33 typedef struct _XSettingsSetting XSettingsSetting;
34 
35 /* Types of settings possible. Enum values correspond to
36  * protocol values.
37  */
38 typedef enum {
39     XSETTINGS_TYPE_INT = 0,
40     XSETTINGS_TYPE_STRING = 1,
41     XSETTINGS_TYPE_COLOR = 2,
42     XSETTINGS_TYPE_NONE = 0xff
43 } XSettingsType;
44 
45 typedef enum {
46     XSETTINGS_SUCCESS,
47     XSETTINGS_NO_MEM,
48     XSETTINGS_ACCESS,
49     XSETTINGS_FAILED,
50     XSETTINGS_NO_ENTRY,
51     XSETTINGS_DUPLICATE_ENTRY
52 } XSettingsResult;
53 
54 struct _XSettingsBuffer {
55     char byte_order;
56     size_t len;
57     unsigned char *data;
58     unsigned char *pos;
59 };
60 
61 struct _XSettingsColor {
62     unsigned short red, green, blue, alpha;
63 };
64 
65 struct _XSettingsList {
66     XSettingsSetting *setting;
67     XSettingsList *next;
68 };
69 
70 struct _XSettingsSetting {
71     char *name;
72     XSettingsType type;
73 
74     union {
75         int v_int;
76         char *v_string;
77         XSettingsColor v_color;
78     } data;
79 
80     unsigned long last_change_serial;
81 };
82 
83 XSettingsSetting *xsettings_setting_copy(XSettingsSetting *setting);
84 void xsettings_setting_free(XSettingsSetting *setting);
85 int xsettings_setting_equal(XSettingsSetting *setting_a, XSettingsSetting *setting_b);
86 
87 void xsettings_list_free(XSettingsList *list);
88 XSettingsList *xsettings_list_copy(XSettingsList *list);
89 XSettingsResult xsettings_list_insert(XSettingsList **list, XSettingsSetting *setting);
90 XSettingsSetting *xsettings_list_lookup(XSettingsList *list, const char *name);
91 XSettingsResult xsettings_list_delete(XSettingsList **list, const char *name);
92 
93 char xsettings_byte_order(void);
94 
95 #define XSETTINGS_PAD(n, m) ((n + m - 1) & (~(m - 1)))
96 
97 #ifdef __cplusplus
98 }
99 #endif /* __cplusplus */
100 
101 #endif /* XSETTINGS_COMMON_H */
102