[gcompris] gletters, fixed a memory leak.
- From: Bruno Coudoin <bcoudoin src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcompris] gletters, fixed a memory leak.
- Date: Thu, 15 Aug 2013 07:24:31 +0000 (UTC)
commit 231431a97000b9545798f0438395b5f41712bf2f
Author: Bruno Coudoin <bruno coudoin free fr>
Date: Thu Aug 15 08:31:16 2013 +0200
gletters, fixed a memory leak.
src/gletters-activity/gletters.c | 37 +++++++++++++++++++------------------
1 files changed, 19 insertions(+), 18 deletions(-)
---
diff --git a/src/gletters-activity/gletters.c b/src/gletters-activity/gletters.c
index 609fa98..aca5af5 100644
--- a/src/gletters-activity/gletters.c
+++ b/src/gletters-activity/gletters.c
@@ -233,7 +233,7 @@ static void start_board (GcomprisBoard *agcomprisBoard)
GHashTable *config = gc_db_get_board_conf();
gc_locale_set(g_hash_table_lookup( config, "locale"));
-
+
gchar *control_sound = g_hash_table_lookup( config, "with_sound");
if (control_sound)
@@ -254,7 +254,7 @@ static void start_board (GcomprisBoard *agcomprisBoard)
uppercase_only = TRUE;
else
uppercase_only = FALSE;
-
+
load_letters(uppercase_only);
g_hash_table_destroy(config);
@@ -318,7 +318,7 @@ set_level (guint level)
}
}
-/*
+/*
* For uppercase mode, both upper- or lowercase can be typed
*/
static int is_letter_equal(gchar *letter1, gchar *letter2)
@@ -413,14 +413,14 @@ static gint key_press(guint keyval, gchar *commit_str, gchar *preedit_str)
letter = g_new0(gchar,6);
g_unichar_to_utf8 (unichar_letter, letter);
-
+
if(item_on_focus==NULL)
{
for (i=0;i<items->len;i++)
{
item=g_ptr_array_index(items,i);
g_assert (item!=NULL);
-
+
if (is_letter_equal(letter, item->letter))
{
item_on_focus=item;
@@ -564,7 +564,7 @@ static void gletters_next_level_unlocked()
items=g_ptr_array_new();
items2del=g_ptr_array_new();
-
+
/* Delete the letters_table */
if(letters_table) {
g_hash_table_destroy (letters_table);
@@ -724,7 +724,7 @@ static void gletters_destroy_all_items()
g_ptr_array_free (items2del, TRUE);
items2del=NULL;
}
-
+
/* Delete the letters_table */
if(letters_table) {
g_hash_table_destroy (letters_table);
@@ -743,9 +743,9 @@ static GooCanvasItem *gletters_create_item(GooCanvasItem *parent)
/* Keep track of letters already used */
if (!letters_table)
{
- letters_table = g_hash_table_new(g_str_hash, g_str_equal);
+ letters_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
}
-
+
guint i;
if(word)
{
@@ -757,10 +757,11 @@ static GooCanvasItem *gletters_create_item(GooCanvasItem *parent)
}
/* Add letter to hash table of all falling letters. */
- g_hash_table_add (letters_table, g_strdup(word));
+ gchar *word2 = g_strdup(word);
+ g_hash_table_replace (letters_table, word2, word2);
g_debug("Dropping %s\n",word);
-
- /* Play sound for the letter */
+
+ /* Play sound for the letter */
if (with_sound)
{
gchar *str2 = NULL;
@@ -778,17 +779,17 @@ static GooCanvasItem *gletters_create_item(GooCanvasItem *parent)
gc_sound_play_ogg ("sounds/drip.wav", NULL);
}
}
-
+
else
{
/* Should display the dialog box here */
gc_dialog(_("ERROR: Unable to get letter from wordlist"),gletters_next_level);
g_error("ERROR: Unable to get letter from wordlist");
return NULL;
- }
+ }
// create and init item
item = g_new(LettersItem,1);
-
+
/* Now set and display the letter */
if (uppercase_only)
{
@@ -906,7 +907,7 @@ static void player_win(LettersItem *item)
g_object_set (item->rootitem, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL);
g_timeout_add (500,(GSourceFunc) gletters_delete_items, NULL);
-
+
if(gcomprisBoard->sublevel > gcomprisBoard->number_of_sublevel)
{
@@ -919,7 +920,7 @@ static void player_win(LettersItem *item)
gcomprisBoard->sublevel = 1;
if(gcomprisBoard->level>gcomprisBoard->maxlevel)
gcomprisBoard->level = gcomprisBoard->maxlevel;
-
+
setSpeed(gcomprisBoard->level);
gletters_next_level_unlocked();
}
@@ -1001,7 +1002,7 @@ conf_ok(GHashTable *table)
else
uppercase_only = FALSE;
}
-
+
if (profile_conf)
g_hash_table_destroy(config);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]