1 /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ 2 /* vim:set et sts=4: */ 3 /* bus - The Input Bus 4 * Copyright (C) 2013 Peng Huang <shawn.p.huang@gmail.com> 5 * Copyright (C) 2013 Takao Fujiwara <takao.fujiwara1@gmail.com> 6 * Copyright (C) 2013 Red Hat, Inc. 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 21 * USA 22 */ 23 24 #if !defined (__IBUS_H_INSIDE__) && !defined (IBUS_COMPILATION) 25 #error "Only <ibus.h> can be included directly" 26 #endif 27 28 #ifndef __IBUS_REGISTRY_H_ 29 #define __IBUS_REGISTRY_H_ 30 31 /** 32 * SECTION: ibusregistry 33 * @short_description: Registry cache handling. 34 * @title: IBusRegistry 35 * @stability: Stable 36 * 37 * An #IBusRegistry loads IBus component files and generates the cache files. 38 * 39 * see_also: #IBusComponent 40 */ 41 42 #include "ibuscomponent.h" 43 44 /* 45 * Type macros. 46 */ 47 48 /* define GOBJECT macros */ 49 #define IBUS_TYPE_REGISTRY \ 50 (ibus_registry_get_type ()) 51 #define IBUS_REGISTRY(obj) \ 52 (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_REGISTRY, IBusRegistry)) 53 #define IBUS_REGISTRY_CLASS(klass) \ 54 (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_REGISTRY, IBusRegistryClass)) 55 #define IBUS_IS_REGISTRY(obj) \ 56 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_REGISTRY)) 57 #define IBUS_IS_REGISTRY_CLASS(klass) \ 58 (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_REGISTRY)) 59 #define IBUS_REGISTRY_GET_CLASS(obj) \ 60 (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_REGISTRY, IBusRegistryClass)) 61 62 G_BEGIN_DECLS 63 64 typedef struct _IBusRegistry IBusRegistry; 65 typedef struct _IBusRegistryPrivate IBusRegistryPrivate; 66 typedef struct _IBusRegistryClass IBusRegistryClass; 67 68 /** 69 * IBusRegistry: 70 * 71 * Registry cache handling. 72 * You can load the registry from compose files or a cache file. 73 */ 74 struct _IBusRegistry { 75 /* instance members */ 76 /*< private >*/ 77 IBusSerializable parent; 78 IBusRegistryPrivate *priv; 79 }; 80 81 struct _IBusRegistryClass { 82 /* class members */ 83 /*< private >*/ 84 IBusSerializableClass parent; 85 }; 86 87 GType ibus_registry_get_type (void); 88 89 /** 90 * ibus_registry_new: 91 * 92 * Creates a new #IBusRegistry 93 * 94 * Returns: A newly allocated #IBusRegistry. 95 */ 96 IBusRegistry *ibus_registry_new (void); 97 98 /** 99 * ibus_registry_load: 100 * @registry: An #IBusRegistry. 101 * 102 * Read all XML files in a IBus component directory (typically 103 * /usr/share/ibus/component/ *.xml) and update the registry object. 104 * IBUS_COMPONENT_PATH environment valuable is also available for 105 * the custom component directories, whose delimiter is ':'. 106 */ 107 void ibus_registry_load (IBusRegistry *registry); 108 109 /** 110 * ibus_registry_load_in_dir: 111 * @registry: An #IBusRegistry. 112 * @dirname: IBus component directory which includes XML files. 113 * 114 * Read all XML files in @dirname, create a #IBusComponent object for each file, 115 * and add the component objects to the registry. 116 * If @dirname is "/usr/share/ibus/component", this API and 117 * ibus_registry_load() are same. 118 */ 119 void ibus_registry_load_in_dir (IBusRegistry *registry, 120 const gchar *dirname); 121 122 /** 123 * ibus_registry_load_cache: 124 * @registry: An #IBusRegistry. 125 * @is_user: %TRUE if the registry cache is loaded in the user directory. 126 * 127 * Load the user or system registry cache. 128 * 129 * Returns: %TRUE if the cache exists and is loaded successfully, 130 * %FALSE otherwise. 131 */ 132 gboolean ibus_registry_load_cache (IBusRegistry *registry, 133 gboolean is_user); 134 135 /** 136 * ibus_registry_load_cache_file: 137 * @registry: An #IBusRegistry. 138 * @filename: The file path of the registry cache 139 * 140 * Load the registry cache @filename. 141 * 142 * Returns: %TRUE if the cache exists and is loaded successfully, 143 * %FALSE otherwise. 144 */ 145 gboolean ibus_registry_load_cache_file (IBusRegistry *registry, 146 const gchar *filename); 147 148 /** 149 * ibus_registry_save_cache: 150 * @registry: An #IBusRegistry. 151 * @is_user: %TRUE if the registry cache is saved in the user directory. 152 * 153 * Save the registry in a user directory or system directory. 154 * 155 * Returns: %TRUE if the cache is saved successfully, %FALSE otherwise. 156 */ 157 gboolean ibus_registry_save_cache (IBusRegistry *registry, 158 gboolean is_user); 159 160 /** 161 * ibus_registry_save_cache_file: 162 * @registry: An #IBusRegistry. 163 * @filename: The file path of the registry cache 164 * 165 * Save the registry cache @filename. 166 * 167 * Returns: %TRUE if the cache is saved successfully, %FALSE otherwise. 168 */ 169 gboolean ibus_registry_save_cache_file (IBusRegistry *registry, 170 const gchar *filename); 171 172 /** 173 * ibus_registry_output: 174 * @registry: An #IBusRegistry. 175 * @output: GString that holds the result. 176 * @indent: level of indent. 177 * 178 * Output #IBusRegistry as an XML-formatted string. 179 * The output string can be then shown on the screen or written to file. 180 */ 181 void ibus_registry_output (IBusRegistry *registry, 182 GString *output, 183 int indent); 184 185 /** 186 * ibus_registry_check_modification: 187 * @registry: An #IBusRegistry. 188 * 189 * Check if the registry is updated. 190 * 191 * Returns: %TRUE if mtime is changed; %FALSE otherwise. 192 */ 193 gboolean ibus_registry_check_modification 194 (IBusRegistry *registry); 195 196 /** 197 * ibus_registry_get_components: 198 * @registry: An #IBusRegistry. 199 * 200 * List components. 201 * 202 * Returns: (transfer container) (element-type IBusComponent): 203 * a list of #IBusComponent objects. 204 * The caller has to call g_list_free() for the returned list. 205 */ 206 GList *ibus_registry_get_components (IBusRegistry *registry); 207 208 /** 209 * ibus_registry_get_observed_paths: 210 * @registry: An #IBusRegistry. 211 * 212 * List observed paths. 213 * 214 * Returns: (transfer container) (element-type IBusObservedPath): 215 * a list of #IBusObservedPath objects. 216 * The caller has to call g_list_free() for the returned list. 217 */ 218 GList *ibus_registry_get_observed_paths 219 (IBusRegistry *registry); 220 221 /** 222 * ibus_registry_start_monitor_changes: 223 * @registry: An #IBusRegistry. 224 * 225 * Start to monitor observed paths. 226 */ 227 void ibus_registry_start_monitor_changes 228 (IBusRegistry *registry); 229 230 G_END_DECLS 231 #endif 232