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);
}
Exemplo n.º 2
0
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;
    }
}