Bool findSettingAndPluginToUpdateFromPath (CCSGSettingsWrapper *settings, const char *path, const gchar *keyName, CCSContext *context, CCSPlugin **plugin, CCSSetting **setting, char **uncleanKeyName) { char *pluginName; unsigned int screenNum; if (!decomposeGSettingsPath (path, &pluginName, &screenNum)) return FALSE; *plugin = ccsFindPlugin (context, pluginName); if (*plugin) { *uncleanKeyName = translateKeyForCCS (keyName); *setting = ccsFindSetting (*plugin, *uncleanKeyName); if (!*setting) { /* Couldn't find setting straight off the bat, * try and find the best match */ GVariant *value = ccsGSettingsWrapperGetValue (settings, keyName); if (value) { GList *possibleSettingTypes = variantTypeToPossibleSettingType (g_variant_get_type_string (value)); GList *iter = possibleSettingTypes; while (iter) { *setting = attemptToFindCCSSettingFromLossyName (ccsGetPluginSettings (*plugin), keyName, (CCSSettingType) GPOINTER_TO_INT (iter->data)); if (*setting) break; iter = iter->next; } g_list_free (possibleSettingTypes); g_variant_unref (value); } } } g_free (pluginName); if (!*plugin || !*setting) return FALSE; return TRUE; }
static void ccpSetOptionFromContext (CompObject *object, CompOption *o, const char *plugin) { CCP_CORE (&core); CCSPlugin *bsp; CCSSetting *setting; CompOptionValue value; Bool screen = (object->type == COMP_OBJECT_TYPE_SCREEN); int screenNum = 0; /* we currently only support screen and display opton types */ if (object->type != COMP_OBJECT_TYPE_SCREEN && object->type != COMP_OBJECT_TYPE_DISPLAY) return; if (screen) { char *name = compObjectName (object); if (name) { screenNum = atoi (name); free (name); } } bsp = ccsFindPlugin (cc->context, (plugin) ? plugin : CORE_VTABLE_NAME); if (!bsp) return; setting = ccsFindSetting (bsp, o->name, screen, screenNum); if (!setting) return; if (!ccpTypeCheck (setting, o)) return; compInitOptionValue (&value); ccpSettingToValue (object, setting, &value); cc->applyingSettings = TRUE; (*core.setOptionForPlugin) (object, plugin, o->name, &value); cc->applyingSettings = FALSE; compFiniOptionValue (&value, o->type); }
static CCSSetting * findDisplaySettingForPlugin (CCSContext *context, const char *plugin, const char *setting) { CCSPlugin *p; CCSSetting *s; p = ccsFindPlugin (context, plugin); if (!p) return NULL; s = ccsFindSetting (p, setting); if (!s) return NULL; return s; }
static void ccpSetContextFromOption (CompObject *object, CompOption *o, const char *plugin) { CCP_CORE (&core); CCSPlugin *bsp; CCSSetting *setting; Bool screen = (object->type == COMP_OBJECT_TYPE_SCREEN); int screenNum = 0; /* we currently only support screen and display opton types */ if (object->type != COMP_OBJECT_TYPE_SCREEN && object->type != COMP_OBJECT_TYPE_DISPLAY) return; if (screen) { char *name = compObjectName (object); if (name) { screenNum = atoi (name); free (name); } } bsp = ccsFindPlugin (cc->context, (plugin) ? plugin : CORE_VTABLE_NAME); if (!bsp) return; setting = ccsFindSetting (bsp, o->name, screen, screenNum); if (!setting) return; if (!ccpTypeCheck (setting, o)) return; ccpValueToSetting (object, setting, &o->value); ccsWriteChangedSettings (cc->context); }
static void ccsGNOMEIntegrationBackendUpdateIntegratedSettings (CCSIntegration *integration, CCSContext *context, CCSIntegratedSettingList integratedSettings) { CCGNOMEIntegrationBackendPrivate *priv = (CCGNOMEIntegrationBackendPrivate *) ccsObjectGetPrivate (integration); Bool needInit = TRUE; CCSIntegratedSettingList iter = integratedSettings; while (iter) { CCSIntegratedSetting *integrated = iter->data; const char *settingName = ccsIntegratedSettingInfoSettingName ((CCSIntegratedSettingInfo *)integrated); const char *pluginName = ccsIntegratedSettingInfoPluginName ((CCSIntegratedSettingInfo *) integrated); /* Special case for mouse button modifier etc */ if ((strcmp (settingName, "mouse_button_modifier") == 0) || (strcmp (settingName, "resize_with_right_button") == 0)) { CCSSetting *s; if (needInit) { ccsBackendReadInit (priv->backend, priv->context); needInit = FALSE; } s = findDisplaySettingForPlugin (priv->context, "core", "window_menu_button"); if (s) ccsBackendReadSetting (priv->backend, priv->context, s); s = findDisplaySettingForPlugin (priv->context, "move", "initiate_button"); if (s) ccsBackendReadSetting (priv->backend, priv->context, s); s = findDisplaySettingForPlugin (priv->context, "resize", "initiate_button"); if (s) ccsBackendReadSetting (priv->backend, priv->context, s); } else { CCSPlugin *plugin = NULL; plugin = ccsFindPlugin (priv->context, pluginName); if (plugin) { CCSSetting *setting; setting = ccsFindSetting (plugin, settingName); if (setting) { if (needInit) { ccsBackendReadInit (priv->backend, priv->context); needInit = FALSE; } ccsBackendReadSetting (priv->backend, priv->context, setting); } } } iter = iter->next; } }