]> Pileus Git - ~andy/gtk/blobdiff - gdk/x11/xsettings-client.c
x11: Fold xsettings-common.[ch] into xsettings-client.[ch]
[~andy/gtk] / gdk / x11 / xsettings-client.c
index 20cc728630a53a82f149b1bd53f5a8469223b57b..93d3bc1e5bc1c7132ac169e7ed5db284f5cb6637 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "xsettings-client.h"
 
+#include <glib.h>
+
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -243,10 +245,10 @@ parse_settings (unsigned char *data,
       setting->name[name_len] = '\0';
       buffer.pos += pad_len;
 
+      /* last change serial (we ignore it) */
       result = fetch_card32 (&buffer, &v_int);
       if (result != XSETTINGS_SUCCESS)
        goto out;
-      setting->last_change_serial = v_int;
 
       switch (type)
        {
@@ -531,25 +533,11 @@ xsettings_client_destroy (XSettingsClient *client)
   free (client);
 }
 
-XSettingsResult
+const XSettingsSetting *
 xsettings_client_get_setting (XSettingsClient   *client,
-                             const char        *name,
-                             XSettingsSetting **setting)
+                             const char        *name)
 {
-  XSettingsSetting *search;
-  
-  if (client->settings == NULL)
-    return XSETTINGS_NO_ENTRY;
-
-  search = g_hash_table_lookup (client->settings, name);
-
-  if (search)
-    {
-      *setting = xsettings_setting_copy (search);
-      return *setting ? XSETTINGS_SUCCESS : XSETTINGS_NO_MEM;
-    }
-  else
-    return XSETTINGS_NO_ENTRY;
+  return g_hash_table_lookup (client->settings, name);
 }
 
 Bool
@@ -588,3 +576,42 @@ xsettings_client_process_event (XSettingsClient *client,
   
   return False;
 }
+
+int
+xsettings_setting_equal (XSettingsSetting *setting_a,
+                        XSettingsSetting *setting_b)
+{
+  if (setting_a->type != setting_b->type)
+    return 0;
+
+  if (strcmp (setting_a->name, setting_b->name) != 0)
+    return 0;
+
+  switch (setting_a->type)
+    {
+    case XSETTINGS_TYPE_INT:
+      return setting_a->data.v_int == setting_b->data.v_int;
+    case XSETTINGS_TYPE_COLOR:
+      return (setting_a->data.v_color.red == setting_b->data.v_color.red &&
+             setting_a->data.v_color.green == setting_b->data.v_color.green &&
+             setting_a->data.v_color.blue == setting_b->data.v_color.blue &&
+             setting_a->data.v_color.alpha == setting_b->data.v_color.alpha);
+    case XSETTINGS_TYPE_STRING:
+      return strcmp (setting_a->data.v_string, setting_b->data.v_string) == 0;
+    }
+
+  return 0;
+}
+
+void
+xsettings_setting_free (XSettingsSetting *setting)
+{
+  if (setting->type == XSETTINGS_TYPE_STRING)
+    free (setting->data.v_string);
+
+  if (setting->name)
+    free (setting->name);
+  
+  free (setting);
+}
+