/** * gst_validate_media_info_load: (skip): */ GstValidateMediaInfo * gst_validate_media_info_load (const gchar * path, GError ** err) { GKeyFile *kf = g_key_file_new (); GstValidateMediaInfo *mi; gchar *str; if (!g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, err)) { g_key_file_free (kf); return NULL; } mi = g_new (GstValidateMediaInfo, 1); gst_validate_media_info_init (mi); mi->uri = g_key_file_get_string (kf, "file-info", "uri", err); if (err && *err) goto end; mi->file_size = g_key_file_get_uint64 (kf, "file-info", "file-size", err); if (err && *err) goto end; mi->duration = g_key_file_get_uint64 (kf, "media-info", "file-duration", NULL); mi->seekable = g_key_file_get_boolean (kf, "media-info", "seekable", NULL); mi->is_image = g_key_file_get_boolean (kf, "media-info", "is-image", NULL); str = g_key_file_get_string (kf, "media-info", "caps", NULL); if (str) { mi->stream_info = gst_validate_stream_info_from_caps_string (str); g_free (str); } mi->playback_error = g_key_file_get_string (kf, "playback-tests", "playback-error", NULL); mi->reverse_playback_error = g_key_file_get_string (kf, "playback-tests", "reverse-playback-error", NULL); mi->track_switch_error = g_key_file_get_string (kf, "playback-tests", "track-switch-error", NULL); if (mi->playback_error && strlen (mi->playback_error) == 0) { g_free (mi->playback_error); mi->playback_error = NULL; } if (mi->reverse_playback_error && strlen (mi->reverse_playback_error) == 0) { g_free (mi->reverse_playback_error); mi->reverse_playback_error = NULL; } if (mi->track_switch_error && strlen (mi->track_switch_error) == 0) { g_free (mi->track_switch_error); mi->track_switch_error = NULL; } end: g_key_file_free (kf); return mi; }
bool PluginInfoCache::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin) { CString pluginGroup = pluginPath.utf8(); if (!g_key_file_has_group(m_cacheFile.get(), pluginGroup.data())) return false; time_t lastModified; if (!WebCore::getFileModificationTime(pluginPath, lastModified)) return false; time_t cachedLastModified = static_cast<time_t>(g_key_file_get_uint64(m_cacheFile.get(), pluginGroup.data(), "mtime", nullptr)); if (lastModified != cachedLastModified) return false; plugin.path = pluginPath; plugin.info.file = WebCore::pathGetFileName(pluginPath); GUniquePtr<char> stringValue(g_key_file_get_string(m_cacheFile.get(), pluginGroup.data(), "name", nullptr)); plugin.info.name = String::fromUTF8(stringValue.get()); stringValue.reset(g_key_file_get_string(m_cacheFile.get(), pluginGroup.data(), "description", nullptr)); plugin.info.desc = String::fromUTF8(stringValue.get()); #if PLUGIN_ARCHITECTURE(X11) stringValue.reset(g_key_file_get_string(m_cacheFile.get(), pluginGroup.data(), "mime-description", nullptr)); NetscapePluginModule::parseMIMEDescription(String::fromUTF8(stringValue.get()), plugin.info.mimes); #endif plugin.requiresGtk2 = g_key_file_get_boolean(m_cacheFile.get(), pluginGroup.data(), "requires-gtk2", nullptr); return true; }
struct piiptyyt_state *state_read(GError **err_p) { gchar *contents = NULL; gsize length = 0; GError *err = NULL; if(!g_file_get_contents(state_path(), &contents, &length, &err)) { if(err->code != ENOENT) { g_propagate_error(err_p, err); return NULL; } else { g_error_free(err); contents = g_strdup(""); } } struct piiptyyt_state *st = NULL; GKeyFile *kf = g_key_file_new(); gboolean ok = g_key_file_load_from_data(kf, contents, length, 0, err_p); if(ok) { st = g_new(struct piiptyyt_state, 1); st->username = g_key_file_get_string(kf, "auth", "username", NULL); st->auth_token = g_key_file_get_string(kf, "auth", "auth_token", NULL); st->auth_secret = g_key_file_get_string(kf, "auth", "auth_secret", NULL); st->userid = g_key_file_get_uint64(kf, "auth", "userid", NULL); } g_key_file_free(kf); g_free(contents); return st; }
/** * fm_folder_config_get_uint64 * @fc: a configuration descriptor * @key: a key to search * @val: (out): location to save the value * * Returns the value associated with @key as an unsigned integer. * * Returns: %TRUE if key was found and value is an unsigned integer. * * Since: 1.2.0 */ gboolean fm_folder_config_get_uint64(FmFolderConfig *fc, const char *key, guint64 *val) { GError *error = NULL; #if GLIB_CHECK_VERSION(2, 26, 0) guint64 ret = g_key_file_get_uint64(fc->kf, fc->group, key, &error); #else gchar *s, *end; guint64 ret; s = g_key_file_get_value(fc->kf, fc->group, key, &error); #endif if (error) { g_error_free(error); return FALSE; } #if !GLIB_CHECK_VERSION(2, 26, 0) ret = g_ascii_strtoull(s, &end, 10); if (*s == '\0' || *end != '\0') { g_free(s); return FALSE; } g_free(s); #endif *val = ret; return TRUE; }
/* * Interpret a [Map provider ...] section from the application configuration * file and add it to the given list store. The settings for default providers, * such as OpenStreetMap, are automatically completed. */ static void ph_config_read_map_provider(GtkListStore *list, const gchar *group) { const gchar *name = group + PH_CONFIG_PREFIX_MAP_PROVIDER_LENGTH; GtkTreeIter iter; PHMapProvider *provider = NULL; gsize i; gtk_list_store_append(list, &iter); for (i = 0; i < G_N_ELEMENTS(ph_config_default_map_providers); ++i) { const PHMapProvider *def = &ph_config_default_map_providers[i]; if (strcmp(def->name, name) == 0) provider = ph_map_provider_copy(def); } if (provider == NULL) { /* not one of the default providers */ provider = g_new0(PHMapProvider, 1); provider->name = g_strdup(name); } if (g_key_file_has_key(ph_config->key_file, group, "url", NULL)) { g_free(provider->url); provider->url = g_key_file_get_string(ph_config->key_file, group, "url", NULL); } if (g_key_file_has_key(ph_config->key_file, group, "tile-size", NULL)) provider->tile_size = (guint) g_key_file_get_uint64(ph_config->key_file, group, "tile-size", NULL); if (g_key_file_has_key(ph_config->key_file, group, "zoom-min", NULL)) provider->zoom_min = (guint) g_key_file_get_uint64(ph_config->key_file, group, "zoom-min", NULL); if (g_key_file_has_key(ph_config->key_file, group, "zoom-max", NULL)) provider->zoom_max = (guint) g_key_file_get_uint64(ph_config->key_file, group, "zoom-max", NULL); if (g_key_file_has_key(ph_config->key_file, group, "zoom-detail", NULL)) provider->zoom_detail = (guint) g_key_file_get_uint64( ph_config->key_file, group, "zoom-detail", NULL); ph_map_provider_to_list(provider, list, &iter); ph_map_provider_free(provider); }
static gboolean gst_dvb_base_bin_conf_set_uint (GstElement * dvbbasebin, const gchar * property, GKeyFile * kf, const gchar * channel_name, const gchar * key) { guint64 v; v = g_key_file_get_uint64 (kf, channel_name, key, NULL); g_object_set (dvbbasebin, property, (guint) v, NULL); return TRUE; }
static J4statusPluginContext * _j4status_sensors_init(J4statusCoreInterface *core) { gchar **sensors = NULL; gboolean show_details = FALSE; guint64 interval = 0; if ( sensors_init(NULL) != 0 ) return NULL; GKeyFile *key_file; key_file = j4status_config_get_key_file("Sensors"); if ( key_file != NULL ) { sensors = g_key_file_get_string_list(key_file, "Sensors", "Sensors", NULL, NULL); show_details = g_key_file_get_boolean(key_file, "Sensors", "ShowDetails", NULL); interval = g_key_file_get_uint64(key_file, "Sensors", "Interval", NULL); g_key_file_free(key_file); } J4statusPluginContext *context; context = g_new0(J4statusPluginContext, 1); context->core = core; context->config.show_details = show_details; if ( sensors == NULL ) _j4status_sensors_add_sensors(context, NULL); else { sensors_chip_name chip; gchar **sensor; for ( sensor = sensors ; *sensor != NULL ; ++sensor ) { if ( sensors_parse_chip_name(*sensor, &chip) != 0 ) continue; _j4status_sensors_add_sensors(context, &chip); sensors_free_chip_name(&chip); } } g_strfreev(sensors); if ( context->sections == NULL ) { g_message("Missing configuration: No sensor to monitor, aborting"); _j4status_sensors_uninit(context); return NULL; } g_timeout_add_seconds(MAX(2, interval), _j4status_sensors_update, context); return context; }
/* * Get the maximum total size, in megabytes, of the tile cache directory. This * is an unsigned integer value. */ void ph_config_get_max_tile_cache_size(GValue *value) { guint max_size; g_return_if_fail(ph_config != NULL); g_return_if_fail(G_VALUE_HOLDS_UINT(value)); max_size = g_key_file_get_uint64(ph_config->key_file, "tile-cache", "max-size", NULL); g_value_set_uint(value, (max_size != 0) ? max_size : 100); }
gboolean load_config(const gchar *filename, RaucConfig **config, GError **error) { GError *ierror = NULL; g_autoptr(RaucConfig) c = g_new0(RaucConfig, 1); gboolean res = FALSE; g_autoptr(GKeyFile) key_file = NULL; gchar **groups; gsize group_count; GList *slotlist = NULL; GHashTable *slots = NULL; GList *l; gchar *bootloader; const gchar **pointer; gboolean dtbvariant; gchar *variant_data; key_file = g_key_file_new(); res = g_key_file_load_from_file(key_file, filename, G_KEY_FILE_NONE, &ierror); if (!res) { g_propagate_error(error, ierror); goto free; } /* parse [system] section */ c->system_compatible = key_file_consume_string(key_file, "system", "compatible", &ierror); if (!c->system_compatible) { g_propagate_error(error, ierror); res = FALSE; goto free; } bootloader = key_file_consume_string(key_file, "system", "bootloader", NULL); if (!bootloader) { g_set_error_literal( error, R_CONFIG_ERROR, R_CONFIG_ERROR_BOOTLOADER, "No bootloader selected in system config"); res = FALSE; goto free; } pointer = &supported_bootloaders[0]; while (*pointer) { if (g_strcmp0(bootloader, *pointer) == 0) { c->system_bootloader = bootloader; break; } pointer++; } if (!c->system_bootloader) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_BOOTLOADER, "Unsupported bootloader '%s' selected in system config", bootloader); res = FALSE; goto free; } if (g_strcmp0(c->system_bootloader, "barebox") == 0) { c->system_bb_statename = key_file_consume_string(key_file, "system", "barebox-statename", NULL); } c->max_bundle_download_size = g_key_file_get_uint64(key_file, "system", "max-bundle-download-size", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { g_debug("No value for key \"max-bundle-download-size\" in [system] defined " "- using default value of %d bytes.", DEFAULT_MAX_BUNDLE_DOWNLOAD_SIZE); c->max_bundle_download_size = DEFAULT_MAX_BUNDLE_DOWNLOAD_SIZE; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } if (c->max_bundle_download_size == 0) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_MAX_BUNDLE_DOWNLOAD_SIZE, "Invalid value (%" G_GUINT64_FORMAT ") for key \"max-bundle-download-size\" in system config", c->max_bundle_download_size); res = FALSE; goto free; } g_key_file_remove_key(key_file, "system", "max-bundle-download-size", NULL); c->mount_prefix = key_file_consume_string(key_file, "system", "mountprefix", NULL); if (!c->mount_prefix) { g_debug("No mount prefix provided, using /mnt/rauc/ as default"); c->mount_prefix = g_strdup("/mnt/rauc/"); } if (g_strcmp0(c->system_bootloader, "grub") == 0) { c->grubenv_path = resolve_path(filename, key_file_consume_string(key_file, "system", "grubenv", NULL)); if (!c->grubenv_path) { g_debug("No grubenv path provided, using /boot/grub/grubenv as default"); c->grubenv_path = g_strdup("/boot/grub/grubenv"); } } c->activate_installed = g_key_file_get_boolean(key_file, "system", "activate-installed", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { c->activate_installed = TRUE; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_key(key_file, "system", "activate-installed", NULL); c->system_variant_type = R_CONFIG_SYS_VARIANT_NONE; /* parse 'variant-dtb' key */ dtbvariant = g_key_file_get_boolean(key_file, "system", "variant-dtb", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { dtbvariant = FALSE; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_key(key_file, "system", "variant-dtb", NULL); if (dtbvariant) c->system_variant_type = R_CONFIG_SYS_VARIANT_DTB; /* parse 'variant-file' key */ variant_data = key_file_consume_string(key_file, "system", "variant-file", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { variant_data = NULL; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } if (variant_data) { if (c->system_variant_type != R_CONFIG_SYS_VARIANT_NONE) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_INVALID_FORMAT, "Only one of the keys 'variant-file', variant-dtb','variant-name' is allowed"); res = FALSE; goto free; } c->system_variant_type = R_CONFIG_SYS_VARIANT_FILE; c->system_variant = variant_data; } /* parse 'variant-name' key */ variant_data = key_file_consume_string(key_file, "system", "variant-name", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { variant_data = NULL; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } if (variant_data) { if (c->system_variant_type != R_CONFIG_SYS_VARIANT_NONE) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_INVALID_FORMAT, "Only one of the keys 'variant-file', variant-dtb','variant-name' is allowed"); res = FALSE; goto free; } c->system_variant_type = R_CONFIG_SYS_VARIANT_NAME; c->system_variant = variant_data; } c->statusfile_path = resolve_path(filename, key_file_consume_string(key_file, "system", "statusfile", NULL)); if (!check_remaining_keys(key_file, "system", &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_group(key_file, "system", NULL); /* parse [keyring] section */ c->keyring_path = resolve_path(filename, key_file_consume_string(key_file, "keyring", "path", NULL)); c->use_bundle_signing_time = g_key_file_get_boolean(key_file, "keyring", "use-bundle-signing-time", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND) || g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { c->use_bundle_signing_time = FALSE; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_key(key_file, "keyring", "use-bundle-signing-time", NULL); if (!check_remaining_keys(key_file, "keyring", &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_group(key_file, "keyring", NULL); /* parse [casync] section */ c->store_path = key_file_consume_string(key_file, "casync", "storepath", NULL); if (!check_remaining_keys(key_file, "casync", &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_group(key_file, "casync", NULL); /* parse [autoinstall] section */ c->autoinstall_path = resolve_path(filename, key_file_consume_string(key_file, "autoinstall", "path", NULL)); if (!check_remaining_keys(key_file, "autoinstall", &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_group(key_file, "autoinstall", NULL); /* parse [handlers] section */ c->systeminfo_handler = resolve_path(filename, key_file_consume_string(key_file, "handlers", "system-info", NULL)); c->preinstall_handler = resolve_path(filename, key_file_consume_string(key_file, "handlers", "pre-install", NULL)); c->postinstall_handler = resolve_path(filename, key_file_consume_string(key_file, "handlers", "post-install", NULL)); if (!check_remaining_keys(key_file, "handlers", &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_group(key_file, "handlers", NULL); /* parse [slot.*.#] sections */ slots = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, r_free_slot); groups = g_key_file_get_groups(key_file, &group_count); for (gsize i = 0; i < group_count; i++) { RaucSlot *slot = g_new0(RaucSlot, 1); gchar **groupsplit; groupsplit = g_strsplit(groups[i], ".", -1); /* We treat sections starting with "slot." as slots */ if (g_str_equal(groupsplit[0], RAUC_SLOT_PREFIX)) { gchar* value; /* Assure slot strings consist of 3 parts, delimited by dots */ if (g_strv_length(groupsplit) != 3) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_INVALID_FORMAT, "Invalid slot name format: %s", groups[i]); res = FALSE; goto free; } value = g_strconcat(groupsplit[1], ".", groupsplit[2], NULL); if (!value) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_INVALID_FORMAT, "Invalid slot name"); res = FALSE; goto free; } slot->name = g_intern_string(value); g_free(value); slot->description = key_file_consume_string(key_file, groups[i], "description", NULL); if (!slot->description) slot->description = g_strdup(""); slot->sclass = g_intern_string(groupsplit[1]); value = resolve_path(filename, key_file_consume_string(key_file, groups[i], "device", &ierror)); if (!value) { g_propagate_error(error, ierror); res = FALSE; goto free; } slot->device = value; value = key_file_consume_string(key_file, groups[i], "type", NULL); if (!value) value = g_strdup("raw"); slot->type = value; value = key_file_consume_string(key_file, groups[i], "bootname", NULL); slot->bootname = value; slot->readonly = g_key_file_get_boolean(key_file, groups[i], "readonly", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { slot->readonly = FALSE; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_key(key_file, groups[i], "readonly", NULL); slot->force_install_same = g_key_file_get_boolean(key_file, groups[i], "force-install-same", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { g_clear_error(&ierror); /* try also deprecatet flag ignore-checksum */ slot->force_install_same = g_key_file_get_boolean(key_file, groups[i], "ignore-checksum", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { slot->force_install_same = FALSE; g_clear_error(&ierror); } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } } else if (ierror) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_key(key_file, groups[i], "force-install-same", NULL); g_key_file_remove_key(key_file, groups[i], "ignore-checksum", NULL); slot->extra_mount_opts = key_file_consume_string(key_file, groups[i], "extra-mount-opts", NULL); g_hash_table_insert(slots, (gchar*)slot->name, slot); } g_strfreev(groupsplit); } /* Add parent pointers */ slotlist = g_hash_table_get_keys(slots); for (l = slotlist; l != NULL; l = l->next) { RaucSlot *s; g_autofree gchar* group_name = NULL; gchar* value; group_name = g_strconcat(RAUC_SLOT_PREFIX ".", l->data, NULL); value = key_file_consume_string(key_file, group_name, "parent", NULL); if (!value) { g_key_file_remove_group(key_file, group_name, NULL); continue; } s = g_hash_table_lookup(slots, value); if (!s) { g_set_error( error, R_CONFIG_ERROR, R_CONFIG_ERROR_PARENT, "Parent slot '%s' not found!", value); res = FALSE; goto free; } ((RaucSlot*)g_hash_table_lookup(slots, l->data))->parent = s; if (!check_remaining_keys(key_file, group_name, &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_key_file_remove_group(key_file, group_name, NULL); } g_list_free(slotlist); c->slots = slots; if (!check_remaining_groups(key_file, &ierror)) { g_propagate_error(error, ierror); res = FALSE; goto free; } g_strfreev(groups); res = TRUE; free: if (res) *config = g_steal_pointer(&c); else *config = NULL; return res; }
static void status_file_get_slot_status(GKeyFile *key_file, const gchar *group, RaucSlotStatus *slotstatus) { GError *ierror = NULL; gchar *digest; guint64 count; if (!g_key_file_has_group(key_file, group)) g_debug("Group %s not found in key file.", group); g_free(slotstatus->bundle_compatible); g_free(slotstatus->bundle_version); g_free(slotstatus->bundle_description); g_free(slotstatus->bundle_build); g_free(slotstatus->status); g_clear_pointer(&slotstatus->checksum.digest, g_free); g_free(slotstatus->installed_timestamp); g_free(slotstatus->activated_timestamp); slotstatus->bundle_compatible = key_file_consume_string(key_file, group, "bundle.compatible", NULL); slotstatus->bundle_version = key_file_consume_string(key_file, group, "bundle.version", NULL); slotstatus->bundle_description = key_file_consume_string(key_file, group, "bundle.description", NULL); slotstatus->bundle_build = key_file_consume_string(key_file, group, "bundle.build", NULL); slotstatus->status = key_file_consume_string(key_file, group, "status", NULL); digest = key_file_consume_string(key_file, group, "sha256", NULL); if (digest) { slotstatus->checksum.type = G_CHECKSUM_SHA256; slotstatus->checksum.digest = digest; slotstatus->checksum.size = g_key_file_get_uint64(key_file, group, "size", NULL); } slotstatus->installed_timestamp = key_file_consume_string(key_file, group, "installed.timestamp", NULL); count = g_key_file_get_uint64(key_file, group, "installed.count", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE)) g_message("Value of key \"installed.count\" in group [%s] " "is no valid unsigned integer - setting to zero.", group); else if (ierror && !g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) g_message("Unexpected error while trying to read key \"installed.count\" in group [%s] " "- setting to zero: %s", group, ierror->message); g_clear_error(&ierror); if (count > G_MAXUINT32) { g_message("Value of key \"installed.count\" in group [%s] " "is greater than G_MAXUINT32 - setting to zero.", group); count = 0; } slotstatus->installed_count = count; slotstatus->activated_timestamp = key_file_consume_string(key_file, group, "activated.timestamp", NULL); count = g_key_file_get_uint64(key_file, group, "activated.count", &ierror); if (g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE)) g_message("Value of key \"activated.count\" in group [%s] " "is no valid unsigned integer - setting to zero.", group); else if (ierror && !g_error_matches(ierror, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) g_message("Unexpected error while trying to read key \"activated.count\" in group [%s] " "- setting to zero: %s", group, ierror->message); g_clear_error(&ierror); if (count > G_MAXUINT32) { g_message("Value of key \"activated.count\" in group [%s] " "is greater than G_MAXUINT32 - setting to zero.", group); count = 0; } slotstatus->activated_count = count; }
// load preferences from file void load_preferences (char *filepad) { char txt[100]; GString *label = g_string_new_len("", 20); int i, p, choice = -1; GdkDevice *device, *nodevice; GList *list; TS keus; if (settings == NULL) settings = g_key_file_new(); if (g_key_file_load_from_file(settings, filepad, G_KEY_FILE_NONE, NULL) == FALSE) { // set defaults gchar *data; gsize len; // default settings when xpen.cfg not found g_key_file_set_integer (settings, "display", "x", -1); g_key_file_set_integer (settings, "display", "y", -1); g_key_file_set_integer (settings, "display", "lx", -1); g_key_file_set_integer (settings, "display", "ly", -1); g_key_file_set_integer (settings, "display", "dx", 300); g_key_file_set_integer (settings, "display", "dy", 400); g_key_file_set_double (settings, "display", "opacity", 0.7); g_key_file_set_string (settings, "display", "font", gtk_font_button_get_font_name(GTK_FONT_BUTTON(fontbutton))); g_key_file_set_boolean (settings, "display", "tooltips", TRUE); g_key_file_set_string (settings, "reader", "device", "stylus"); g_key_file_set_integer (settings, "reader", "speed", 6); g_key_file_set_uint64 (settings, "reader", "lijnkleur", 0x514942); g_key_file_set_uint64 (settings, "reader", "rasterkleur", 0xAB8C6D); g_key_file_set_boolean (settings, "reader", "raster", TRUE); g_key_file_set_boolean (settings, "reader", "speech", FALSE); g_key_file_set_string (settings, "reader", "command", "aplay -q"); g_key_file_set_integer (settings, "reader", "voice", 0); g_key_file_set_integer (settings, "keys", "paste0", 37); g_key_file_set_integer (settings, "keys", "paste1", 55); g_key_file_set_integer (settings, "keys", "backspace0", 0); g_key_file_set_integer (settings, "keys", "backspace1", 22); g_key_file_set_integer (settings, "GB1", "key", 0); g_key_file_set_integer (settings, "GB1", "mode", 0); g_key_file_set_integer (settings, "BIG5", "key", CTRL_R); g_key_file_set_integer (settings, "BIG5", "mode", BIG5); g_key_file_set_integer (settings, "DIGITS", "key", ALT_L); g_key_file_set_integer (settings, "DIGITS", "mode", DIGITS); g_key_file_set_integer (settings, "LOWERCASE", "key", ALT_L); g_key_file_set_integer (settings, "LOWERCASE", "mode", LOWERCASE); g_key_file_set_integer (settings, "UPPERCASE", "key", 0); g_key_file_set_integer (settings, "UPPERCASE", "mode", 0); g_key_file_set_integer (settings, "PUNC", "key", 0); g_key_file_set_integer (settings, "PUNC", "mode", 0); g_key_file_set_integer (settings, "DEFAULT", "key", ESC); g_key_file_set_integer (settings, "DEFAULT", "mode", (GB1|GB2|DIGITS)); g_key_file_set_string (settings, "keydefs", "label1", "Control-Left"); g_key_file_set_integer (settings, "keydefs", "key1", CTRL_L); g_key_file_set_string (settings, "keydefs", "label2", "Control-Right"); g_key_file_set_integer (settings, "keydefs", "key2", CTRL_R); g_key_file_set_string (settings, "keydefs", "label3", "Shift-Left"); g_key_file_set_integer (settings, "keydefs", "key3", SHIFT_L); g_key_file_set_string (settings, "keydefs", "label4", "Shift-Right"); g_key_file_set_integer (settings, "keydefs", "key4", SHIFT_R); g_key_file_set_string (settings, "keydefs", "label5", "Alt-Left"); g_key_file_set_integer (settings, "keydefs", "key5", ALT_L); g_key_file_set_string (settings, "keydefs", "label6", "Alt-Right"); g_key_file_set_integer (settings, "keydefs", "key6", ALT_R); g_key_file_set_string (settings, "keydefs", "label7", "Escape"); g_key_file_set_integer (settings, "keydefs", "key7", ESC); g_key_file_set_string (settings, "keydefs", "label8", "Caps-Lock"); g_key_file_set_integer (settings, "keydefs", "key8", CAPS); g_key_file_set_string (settings, "keydefs", "label9", "Num-Lock"); g_key_file_set_integer (settings, "keydefs", "key9", NUMS); g_key_file_set_string (settings, "keydefs", "label10", "Scroll-Lock"); g_key_file_set_integer (settings, "keydefs", "key10", SCROLLS); g_key_file_set_string (settings, "keydefs", "label11", "Pause/Break"); g_key_file_set_integer (settings, "keydefs", "key11", PAUSE); g_key_file_set_string (settings, "keydefs", "label12", "not set"); g_key_file_set_integer (settings, "keydefs", "key12", 0); g_key_file_set_string (settings, "keydefs", "label13", "not set"); g_key_file_set_integer (settings, "keydefs", "key13", 0); data = g_key_file_to_data (settings, &len, NULL); // save defaults g_file_set_contents (filepad, data, len, NULL); g_free(data); } // fill the preferences structure conf.x = g_key_file_get_integer (settings, "display", "x", NULL); conf.y = g_key_file_get_integer (settings, "display", "y", NULL); conf.lx = g_key_file_get_integer (settings, "display", "lx", NULL); conf.ly = g_key_file_get_integer (settings, "display", "ly", NULL); conf.dx = g_key_file_get_integer (settings, "display", "dx", NULL); conf.dy = g_key_file_get_integer (settings, "display", "dy", NULL); conf.opacity = g_key_file_get_double (settings, "display", "opacity", NULL); conf.tips = g_key_file_get_boolean (settings, "display", "tooltips", NULL); conf.font = g_key_file_get_string (settings, "display", "font", NULL); conf.device = g_key_file_get_string (settings, "reader", "device", NULL); conf.speed = g_key_file_get_integer (settings, "reader", "speed", NULL); conf.lijnkleur = g_key_file_get_uint64 (settings, "reader", "lijnkleur", NULL); conf.rasterkleur = g_key_file_get_uint64 (settings, "reader", "rasterkleur", NULL); conf.raster = g_key_file_get_boolean (settings, "reader", "raster", NULL); conf.speech = g_key_file_get_boolean (settings, "reader", "speech", NULL); conf.voice = g_key_file_get_integer (settings, "reader", "voice", NULL); conf.paste[0] = g_key_file_get_integer (settings, "keys", "paste0", NULL); conf.paste[1] = g_key_file_get_integer (settings, "keys", "paste1", NULL); conf.backspace[0] = g_key_file_get_integer (settings, "keys", "backspace0", NULL); conf.backspace[1] = g_key_file_get_integer (settings, "keys", "backspace1", NULL); conf.keymode[0].key = g_key_file_get_integer (settings, "GB1", "key", NULL); conf.keymode[0].mode = g_key_file_get_integer (settings, "GB1", "mode", NULL); conf.keymode[1].key = g_key_file_get_integer (settings, "BIG5", "key", NULL); conf.keymode[1].mode = g_key_file_get_integer (settings, "BIG5", "mode", NULL); conf.keymode[2].key = g_key_file_get_integer (settings, "DIGITS", "key", NULL); conf.keymode[2].mode = g_key_file_get_integer (settings, "DIGITS", "mode", NULL); conf.keymode[3].key = g_key_file_get_integer (settings, "LOWERCASE", "key", NULL); conf.keymode[3].mode = g_key_file_get_integer (settings, "LOWERCASE", "mode", NULL); conf.keymode[4].key = g_key_file_get_integer (settings, "UPPERCASE", "key", NULL); conf.keymode[4].mode = g_key_file_get_integer (settings, "UPPERCASE", "mode", NULL); conf.keymode[5].key = g_key_file_get_integer (settings, "PUNC", "key", NULL); conf.keymode[5].mode = g_key_file_get_integer (settings, "PUNC", "mode", NULL); conf.keymode[6].key = g_key_file_get_integer (settings, "DEFAULT", "key", NULL); conf.keymode[6].mode = g_key_file_get_integer (settings, "DEFAULT", "mode", NULL); // set speech + command GTK_TOGGLE_BUTTON(checkbutton9)->active = conf.speech; gtk_combo_box_set_active(GTK_COMBO_BOX(combobox1), conf.voice); for (i=0; i<13; i++) { g_string_sprintf(label, "key%d", i+1); conf.defkey[i].key = g_key_file_get_integer (settings, "keydefs", label->str, NULL); g_string_sprintf(label, "label%d", i+1); conf.defkey[i].label = g_key_file_get_string (settings, "keydefs", label->str, NULL); } // start setting all widgets with the values from the configuration (conf) // set tooltips GTK_TOGGLE_BUTTON(checkbutton8)->active = conf.tips; // set the 13 buttons/entries in preferences for (i=0; i<13; i++) { if (conf.defkey[i].key > 0) { g_string_sprintf(label, "key = %d", conf.defkey[i].key); gtk_button_set_label(GTK_BUTTON(conf.defkey[i].button), label->str); gtk_entry_set_text(GTK_ENTRY(conf.defkey[i].entry), conf.defkey[i].label); } else { gtk_button_set_label(GTK_BUTTON(conf.defkey[i].button), "not set"); gtk_entry_set_text(GTK_ENTRY(conf.defkey[i].entry), ""); } } g_string_free(label, TRUE); // set the default recognition mode mode = conf.keymode[6].mode; keus = (mode & BIG5) ? Traditional : Simplified; selecteer(keus); // set the labels of the hotkeys (preferences) for (i=0; i<7; i++) { bool found; hotkey[conf.keymode[i].key] |= conf.keymode[i].mode; // set the hotkeys found = FALSE; for (p=0; p<13; p++) { if (conf.defkey[p].key > 0) { if (conf.keymode[i].key == conf.defkey[p].key) { strcpy(txt, conf.defkey[p].label); found = TRUE; break; } } } if (found == FALSE) { if (conf.keymode[i].key > 0) sprintf(txt, "key = %d", conf.keymode[i].key); else strcpy(txt, "not set"); } gtk_button_set_label(GTK_BUTTON(modebits[i].button), txt); // set the default checkboxes (preferences) if (conf.keymode[6].mode & GB1) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[0].check), TRUE); if (conf.keymode[6].mode & BIG5) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[1].check), TRUE); if (conf.keymode[6].mode & DIGITS) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[2].check), TRUE); if (conf.keymode[6].mode & LOWERCASE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[3].check), TRUE); if (conf.keymode[6].mode & UPPERCASE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[4].check), TRUE); if (conf.keymode[6].mode & PUNC) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(modebits[5].check), TRUE); } // fill combobox with input-devices list = gdk_devices_list(); device = (GdkDevice *) list->data; // default device nodevice = NULL; for (p=0; list->next; p++) { strcpy(txt, gdk_device_get_name((GdkDevice *)list->data)); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), txt); if (strstr(txt, conf.device)) { device = (GdkDevice *) list->data; choice = p; } nodevice = (GdkDevice *) list->data; list = list->next; } if (choice == -1) { // prefered device not found choice = p-1; device = nodevice; } //g_list_free(list); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), choice); gdk_device_set_source (device, GDK_SOURCE_PEN); gdk_device_set_mode(device, GDK_MODE_SCREEN); // set line color lijnkleur.pixel = conf.lijnkleur; sprintf(txt, "#%.6X", lijnkleur.pixel); gdk_color_parse(txt, &lijnkleur); gtk_color_button_set_color(GTK_COLOR_BUTTON(colorbutton1), &lijnkleur); // set raster color rasterkleur.pixel = conf.rasterkleur; sprintf(txt, "#%.6X", rasterkleur.pixel); gdk_color_parse(txt, &rasterkleur); gtk_color_button_set_color(GTK_COLOR_BUTTON(colorbutton2), &rasterkleur); // set raster on/off check button GTK_TOGGLE_BUTTON(checkbutton1)->active = conf.raster; // set main window opacity slider gtk_adjustment_set_value(opacity, conf.opacity); // set the 9 candidate buttons with a default font for (i=0; i< 9; i++) { PangoFontDescription *pfont; pfont = pango_font_description_from_string(conf.font); gtk_widget_modify_font (GTK_WIDGET(knop[i]), pfont ); pango_font_description_free(pfont); } // set the font selection button with the font title gtk_font_button_set_font_name(GTK_FONT_BUTTON(fontbutton), conf.font); // set the recognize speed slider gtk_adjustment_set_value(speed, conf.speed); WTSetSpeed(conf.speed); // set the default paste and backspace entry fields gtk_entry_set_text(GTK_ENTRY(entry1), key2string(conf.paste[1], conf.paste[0])); gtk_entry_set_text(GTK_ENTRY(entry2), key2string(conf.backspace[1], conf.backspace[0])); }