Commit 9eb284f7cd3ecedc7e488d250cebaf22031902d4
1 parent
4beab7ef
Exists in
master
and in
4 other branches
Keeping a list of keypads in the object model.
Showing
2 changed files
with
15 additions
and
1 deletions
Show diff stats
src/objects/keypad/private.h
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 | } | ... | ... |