Commit 9eb284f7cd3ecedc7e488d250cebaf22031902d4

Authored by Perry Werneck
1 parent 4beab7ef

Keeping a list of keypads in the object model.

src/objects/keypad/private.h
... ... @@ -94,6 +94,7 @@
94 94 gchar *label;
95 95  
96 96 GList *elements;
  97 + GList *widgets;
97 98  
98 99 };
99 100  
... ...
src/objects/keypad/widget.c
... ... @@ -58,6 +58,13 @@
58 58  
59 59 }
60 60  
  61 + static void destroy(GtkWidget *grid, KeypadModel * keypad) {
  62 +
  63 + keypad->widgets = g_list_remove(keypad->widgets,grid);
  64 + g_object_unref(keypad);
  65 +
  66 + }
  67 +
61 68 GtkWidget * pw3270_keypad_get_from_model(GObject *model) {
62 69  
63 70 g_return_val_if_fail(PW_IS_KEYPAD_MODEL(model),NULL);
... ... @@ -66,7 +73,13 @@
66 73 gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
67 74 gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);
68 75  
69   - g_list_foreach(PW_KEYPAD_MODEL(model)->elements,(GFunc) create_child, grid);
  76 + KeypadModel * keypad = PW_KEYPAD_MODEL(model);
  77 +
  78 + keypad->widgets = g_list_prepend(keypad->widgets,grid);
  79 + g_object_ref_sink(keypad);
  80 + g_signal_connect(G_OBJECT(grid),"destroy", G_CALLBACK(destroy),keypad);
  81 +
  82 + g_list_foreach(keypad->elements,(GFunc) create_child, grid);
70 83  
71 84 return grid;
72 85 }
... ...