[gnome-games/wip/abhinavsingh/gamepad-config: 21/25] gamepad: Separate mappings in GamepadMappingsManager
- From: Abhinav Singh <abhinavsingh src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/abhinavsingh/gamepad-config: 21/25] gamepad: Separate mappings in GamepadMappingsManager
- Date: Mon, 10 Jul 2017 15:44:46 +0000 (UTC)
commit c715d73d19cd24503ec4d6b21e0f8a1191498bfa
Author: theawless <theawless gmail com>
Date: Wed Jun 21 02:43:18 2017 +0530
gamepad: Separate mappings in GamepadMappingsManager
This will allow querying the default mappings or the user mappings
for a gamepad separately.
https://bugzilla.gnome.org/show_bug.cgi?id=780754
src/gamepad/gamepad-mappings-manager.c | 45 ++++++++++++++++++++++++--------
src/gamepad/gamepad-mappings-manager.h | 2 +
2 files changed, 36 insertions(+), 11 deletions(-)
---
diff --git a/src/gamepad/gamepad-mappings-manager.c b/src/gamepad/gamepad-mappings-manager.c
index 32bb2b9..af0a66b 100644
--- a/src/gamepad/gamepad-mappings-manager.c
+++ b/src/gamepad/gamepad-mappings-manager.c
@@ -12,7 +12,8 @@ struct _GamesGamepadMappingsManager {
GObject parent_instance;
GHashTable *names;
- GHashTable *mappings;
+ GHashTable *default_mappings;
+ GHashTable *user_mappings;
};
G_DEFINE_TYPE (GamesGamepadMappingsManager, games_gamepad_mappings_manager, G_TYPE_OBJECT);
@@ -27,7 +28,8 @@ gchar *games_application_get_config_dir (void);
static void
add_mapping (GamesGamepadMappingsManager *self,
- const gchar *mapping_string)
+ const gchar *mapping_string,
+ GHashTable *mappings)
{
const gchar *platform;
gchar **split;
@@ -46,7 +48,7 @@ add_mapping (GamesGamepadMappingsManager *self,
g_hash_table_insert (self->names,
g_strdup (split[0]),
g_strdup (split[1]));
- g_hash_table_insert (self->mappings,
+ g_hash_table_insert (mappings,
g_strdup (split[0]),
g_strdup (split[2]));
g_strfreev (split);
@@ -55,6 +57,7 @@ add_mapping (GamesGamepadMappingsManager *self,
static void
add_from_input_stream (GamesGamepadMappingsManager *self,
GInputStream *input_stream,
+ GHashTable *mappings,
GError **error)
{
GDataInputStream *data_stream;
@@ -79,7 +82,7 @@ add_from_input_stream (GamesGamepadMappingsManager *self,
if (mapping_string == NULL)
break;
- add_mapping (self, mapping_string);
+ add_mapping (self, mapping_string, mappings);
g_free (mapping_string);
}
g_object_unref (data_stream);
@@ -88,6 +91,7 @@ add_from_input_stream (GamesGamepadMappingsManager *self,
static void
add_from_file_uri (GamesGamepadMappingsManager *self,
const gchar *file_uri,
+ GHashTable *mappings,
GError **error)
{
GFile *file;
@@ -106,7 +110,7 @@ add_from_file_uri (GamesGamepadMappingsManager *self,
return;
}
- add_from_input_stream (self, G_INPUT_STREAM (stream), &inner_error);
+ add_from_input_stream (self, G_INPUT_STREAM (stream), mappings, &inner_error);
if (G_UNLIKELY (inner_error != NULL)) {
g_propagate_error (error, inner_error);
g_object_unref (stream);
@@ -134,10 +138,12 @@ games_gamepad_mappings_manager_new (void)
if (self->names == NULL)
self->names = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- if (self->mappings == NULL)
- self->mappings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ if (self->default_mappings == NULL)
+ self->default_mappings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ if (self->user_mappings == NULL)
+ self->user_mappings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- add_from_file_uri (self, default_mappings_uri, &inner_error);
+ add_from_file_uri (self, default_mappings_uri, self->default_mappings, &inner_error);
if (G_UNLIKELY (inner_error != NULL)) {
g_warning (error_message, default_mappings_uri, inner_error->message);
g_clear_error (&inner_error);
@@ -150,7 +156,7 @@ games_gamepad_mappings_manager_new (void)
dir,
"/gamecontrollerdb.txt",
NULL);
- add_from_file_uri (self, user_mappings_uri, &inner_error);
+ add_from_file_uri (self, user_mappings_uri, self->user_mappings, &inner_error);
if (G_UNLIKELY (inner_error != NULL)) {
g_warning (error_message, user_mappings_uri, inner_error->message);
g_clear_error (&inner_error);
@@ -174,6 +180,20 @@ games_gamepad_mappings_manager_get_instance (void)
}
gchar *
+games_gamepad_mappings_manager_get_default_mapping (GamesGamepadMappingsManager *self,
+ const gchar *guid)
+{
+ const gchar *mapping;
+
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (guid != NULL, NULL);
+
+ mapping = g_hash_table_lookup (self->default_mappings, guid);
+
+ return g_strdup (mapping);
+}
+
+gchar *
games_gamepad_mappings_manager_get_mapping (GamesGamepadMappingsManager *self,
const gchar *guid)
{
@@ -182,7 +202,9 @@ games_gamepad_mappings_manager_get_mapping (GamesGamepadMappingsManager *self,
g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (guid != NULL, NULL);
- mapping = g_hash_table_lookup (self->mappings, guid);
+ mapping = g_hash_table_lookup (self->user_mappings, guid);
+ if (mapping == NULL)
+ mapping = g_hash_table_lookup (self->default_mappings, guid);
return g_strdup (mapping);
}
@@ -195,7 +217,8 @@ finalize (GObject *object)
GamesGamepadMappingsManager *self = GAMES_GAMEPAD_MAPPINGS_MANAGER (object);
g_hash_table_unref (self->names);
- g_hash_table_unref (self->mappings);
+ g_hash_table_unref (self->default_mappings);
+ g_hash_table_unref (self->user_mappings);
G_OBJECT_CLASS (games_gamepad_mappings_manager_parent_class)->finalize (object);
}
diff --git a/src/gamepad/gamepad-mappings-manager.h b/src/gamepad/gamepad-mappings-manager.h
index c15be3b..aa39b63 100644
--- a/src/gamepad/gamepad-mappings-manager.h
+++ b/src/gamepad/gamepad-mappings-manager.h
@@ -10,6 +10,8 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GamesGamepadMappingsManager, games_gamepad_mappings_manager, GAMES,
GAMEPAD_MAPPINGS_MANAGER, GObject)
GamesGamepadMappingsManager *games_gamepad_mappings_manager_get_instance (void);
+gchar *games_gamepad_mappings_manager_get_default_mapping (GamesGamepadMappingsManager *self,
+ const gchar *guid);
gchar *games_gamepad_mappings_manager_get_mapping (GamesGamepadMappingsManager *self,
const gchar *guid);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]