Use the new g_strv_contains
[platform/upstream/glib.git] / gio / gsettings-mapping.c
index f83e238..12b7f34 100644 (file)
@@ -12,9 +12,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  *
  * Author: Vincent Untz <vuntz@gnome.org>
  */
@@ -346,7 +344,7 @@ g_settings_set_mapping (const GValue       *value,
       if (g_variant_type_equal (expected_type, G_VARIANT_TYPE_BYTE))
         {
           if (G_VALUE_HOLDS_CHAR (value))
-            return g_variant_new_byte (g_value_get_char (value));
+            return g_variant_new_byte (g_value_get_schar (value));
           else
             return g_variant_new_byte (g_value_get_uchar (value));
         }
@@ -377,6 +375,14 @@ g_settings_set_mapping (const GValue       *value,
         return g_variant_new_signature (g_value_get_string (value));
     }
 
+  else if (G_VALUE_HOLDS (value, G_TYPE_STRV))
+    {
+      if (g_value_get_boxed (value) == NULL)
+        return NULL;
+      return g_variant_new_strv ((const gchar **) g_value_get_boxed (value),
+                                 -1);
+    }
+
   else if (G_VALUE_HOLDS_ENUM (value))
     {
       GEnumValue *enumval;
@@ -445,7 +451,7 @@ g_settings_get_mapping (GValue   *value,
       if (G_VALUE_HOLDS_UCHAR (value))
         g_value_set_uchar (value, g_variant_get_byte (variant));
       else if (G_VALUE_HOLDS_CHAR (value))
-        g_value_set_char (value, (gchar) g_variant_get_byte (variant));
+        g_value_set_schar (value, (gint8)g_variant_get_byte (variant));
       else
         return FALSE;
       return TRUE;
@@ -498,7 +504,13 @@ g_settings_get_mapping (GValue   *value,
     }
   else if (g_variant_is_of_type (variant, G_VARIANT_TYPE ("as")))
     {
-      if (G_VALUE_HOLDS_FLAGS (value))
+      if (G_VALUE_HOLDS (value, G_TYPE_STRV))
+        {
+          g_value_take_boxed (value, g_variant_dup_strv (variant, NULL));
+          return TRUE;
+        }
+
+      else if (G_VALUE_HOLDS_FLAGS (value))
         {
           GFlagsClass *fclass;
           GFlagsValue *fvalue;
@@ -569,6 +581,8 @@ g_settings_mapping_is_compatible (GType               gvalue_type,
           g_variant_type_equal (variant_type, G_VARIANT_TYPE ("ay")) ||
           g_variant_type_equal (variant_type, G_VARIANT_TYPE_OBJECT_PATH) ||
           g_variant_type_equal (variant_type, G_VARIANT_TYPE_SIGNATURE));
+  else if (gvalue_type == G_TYPE_STRV)
+    ok = g_variant_type_equal (variant_type, G_VARIANT_TYPE ("as"));
   else if (G_TYPE_IS_ENUM (gvalue_type))
     ok = g_variant_type_equal (variant_type, G_VARIANT_TYPE_STRING);
   else if (G_TYPE_IS_FLAGS (gvalue_type))