static void handle_preference_init_string (void) { MetaStringPreference *cursor = preferences_string; while (cursor->base.key != NULL) { char *value; /* Complex keys have a mapping function to check validity */ if (cursor->handler) { if (cursor->target) meta_bug ("%s has both a target and a handler\n", cursor->base.key); g_settings_get_mapped (SETTINGS (cursor->base.schema), cursor->base.key, cursor->handler, NULL); } else { if (!cursor->target) meta_bug ("%s must have handler or target\n", cursor->base.key); if (*(cursor->target)) g_free (*(cursor->target)); value = g_settings_get_string (SETTINGS (cursor->base.schema), cursor->base.key); *(cursor->target) = value; } ++cursor; } }
/** * games_settings_get_keyval: * @settings: a #GSettings * @key: the key name * @keyval: (out): * @modifiers: (out): * * Returns the keyboard key associated with @key in @group, or 0 if * the value could not be parsed as a keyval. * * Returns: a keyboard key value */ void games_settings_get_keyval (GSettings *settings, const char *key, guint *keyval, GdkModifierType *modifiers) { KeyEntry entry; g_return_if_fail (G_IS_SETTINGS (settings)); g_return_if_fail (key != NULL && key[0] != '\0'); g_settings_get_mapped (settings, key, (GSettingsGetMapping) variant_to_keyval, &entry); if (keyval) *keyval = entry.keyval; if (modifiers) *modifiers = entry.modifiers; }
static void handle_preference_update_string (GSettings *settings, gchar *key) { MetaStringPreference *cursor = preferences_string; char *value; gboolean inform_listeners = FALSE; while (cursor->base.key != NULL && strcmp (key, cursor->base.key) != 0) ++cursor; if (cursor->base.key==NULL) /* Didn't recognise that key. */ return; /* Complex keys have a mapping function to check validity */ if (cursor->handler) { if (cursor->target) meta_bug ("%s has both a target and a handler\n", cursor->base.key); g_settings_get_mapped (SETTINGS (cursor->base.schema), cursor->base.key, cursor->handler, NULL); } else { if (!cursor->target) meta_bug ("%s must have handler or target\n", cursor->base.key); value = g_settings_get_string (SETTINGS (cursor->base.schema), cursor->base.key); inform_listeners = (g_strcmp0 (value, *(cursor->target)) != 0); if (*(cursor->target)) g_free (*(cursor->target)); *(cursor->target) = value; } if (inform_listeners) queue_changed (cursor->base.pref); }