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