|
Packit |
9ca0cf |
/*
|
|
Packit |
9ca0cf |
* Copyright © 2001 Red Hat, Inc.
|
|
Packit |
9ca0cf |
*
|
|
Packit |
9ca0cf |
* Permission to use, copy, modify, distribute, and sell this software and its
|
|
Packit |
9ca0cf |
* documentation for any purpose is hereby granted without fee, provided that
|
|
Packit |
9ca0cf |
* the above copyright notice appear in all copies and that both that
|
|
Packit |
9ca0cf |
* copyright notice and this permission notice appear in supporting
|
|
Packit |
9ca0cf |
* documentation, and that the name of Red Hat not be used in advertising or
|
|
Packit |
9ca0cf |
* publicity pertaining to distribution of the software without specific,
|
|
Packit |
9ca0cf |
* written prior permission. Red Hat makes no representations about the
|
|
Packit |
9ca0cf |
* suitability of this software for any purpose. It is provided "as is"
|
|
Packit |
9ca0cf |
* without express or implied warranty.
|
|
Packit |
9ca0cf |
*
|
|
Packit |
9ca0cf |
* RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
|
|
Packit |
9ca0cf |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
|
|
Packit |
9ca0cf |
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
Packit |
9ca0cf |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
|
Packit |
9ca0cf |
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
Packit |
9ca0cf |
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
Packit |
9ca0cf |
*
|
|
Packit |
9ca0cf |
* Author: Owen Taylor, Red Hat, Inc.
|
|
Packit |
9ca0cf |
*/
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
#include <glib.h>
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
#include "string.h"
|
|
Packit |
9ca0cf |
#include "stdlib.h"
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
#include <X11/Xlib.h>
|
|
Packit |
9ca0cf |
#include <X11/Xmd.h> /* For CARD32 */
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
#include "xsettings-common.h"
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
XSettingsSetting *
|
|
Packit |
9ca0cf |
xsettings_setting_new (const gchar *name)
|
|
Packit |
9ca0cf |
{
|
|
Packit |
9ca0cf |
XSettingsSetting *result;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
result = g_slice_new0 (XSettingsSetting);
|
|
Packit |
9ca0cf |
result->name = g_strdup (name);
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
return result;
|
|
Packit |
9ca0cf |
}
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
static gboolean
|
|
Packit |
9ca0cf |
xsettings_variant_equal0 (GVariant *a,
|
|
Packit |
9ca0cf |
GVariant *b)
|
|
Packit |
9ca0cf |
{
|
|
Packit |
9ca0cf |
if (a == b)
|
|
Packit |
9ca0cf |
return TRUE;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
if (!a || !b)
|
|
Packit |
9ca0cf |
return FALSE;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
return g_variant_equal (a, b);
|
|
Packit |
9ca0cf |
}
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
GVariant *
|
|
Packit |
9ca0cf |
xsettings_setting_get (XSettingsSetting *setting)
|
|
Packit |
9ca0cf |
{
|
|
Packit |
9ca0cf |
gint i;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
for (i = G_N_ELEMENTS (setting->value) - 1; 0 <= i; i--)
|
|
Packit |
9ca0cf |
if (setting->value[i])
|
|
Packit |
9ca0cf |
return setting->value[i];
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
return NULL;
|
|
Packit |
9ca0cf |
}
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
void
|
|
Packit |
9ca0cf |
xsettings_setting_set (XSettingsSetting *setting,
|
|
Packit |
9ca0cf |
gint tier,
|
|
Packit |
9ca0cf |
GVariant *value,
|
|
Packit |
9ca0cf |
guint32 serial)
|
|
Packit |
9ca0cf |
{
|
|
Packit |
9ca0cf |
GVariant *old_value;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
old_value = xsettings_setting_get (setting);
|
|
Packit |
9ca0cf |
if (old_value)
|
|
Packit |
9ca0cf |
g_variant_ref (old_value);
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
if (setting->value[tier])
|
|
Packit |
9ca0cf |
g_variant_unref (setting->value[tier]);
|
|
Packit |
9ca0cf |
setting->value[tier] = value ? g_variant_ref_sink (value) : NULL;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
if (!xsettings_variant_equal0 (old_value, xsettings_setting_get (setting)))
|
|
Packit |
9ca0cf |
setting->last_change_serial = serial;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
if (old_value)
|
|
Packit |
9ca0cf |
g_variant_unref (old_value);
|
|
Packit |
9ca0cf |
}
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
void
|
|
Packit |
9ca0cf |
xsettings_setting_free (XSettingsSetting *setting)
|
|
Packit |
9ca0cf |
{
|
|
Packit |
9ca0cf |
gint i;
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
for (i = 0; i < G_N_ELEMENTS (setting->value); i++)
|
|
Packit |
9ca0cf |
if (setting->value[i])
|
|
Packit |
9ca0cf |
g_variant_unref (setting->value[i]);
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
g_free (setting->name);
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
g_slice_free (XSettingsSetting, setting);
|
|
Packit |
9ca0cf |
}
|
|
Packit |
9ca0cf |
|
|
Packit |
9ca0cf |
char
|
|
Packit |
9ca0cf |
xsettings_byte_order (void)
|
|
Packit |
9ca0cf |
{
|
|
Packit |
9ca0cf |
CARD32 myint = 0x01020304;
|
|
Packit |
9ca0cf |
return (*(char *)&myint == 1) ? MSBFirst : LSBFirst;
|
|
Packit |
9ca0cf |
}
|