[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Confusing about memory leak and GtkTreeView, GtkCellRendererCombo & GtkCellRendererSpin
- From: "Keedi Kim" <keedi perl kr>
- To: gtk-app-devel-list gnome org
- Subject: Confusing about memory leak and GtkTreeView, GtkCellRendererCombo & GtkCellRendererSpin
- Date: Fri, 12 Dec 2008 14:10:01 +0900
HI, :-)
Memory leak and reference counts are very confused.
I am using GtkTreeView with GtkCellRendererCombo and GtkCellRenderSpin.
So, I use Adjustment for GtkCellRendererSpin
and GtkListStore(or GtkTreeStore) for GtkCellRenderCombo.
Some of columns uses same Adj, and TreeModel, so saved them in renderer.
Rest of columns uses different so I saved them in GtkTreeModel and set
attributes.
Anyway, I'm very confusing about memory management.
I have understood I have to decrease reference count to avoid memory leak
when I use following API because they increase reference count:
g_object_set()
gtk_tree_store_set()
Now I have some question about those API, and GtkCellRenderer{Combo|Spin}.
1.
If I use GtkCellRenderSpin and make new GtkAdjustment
which is saved in the **Renderer**, then do I have to do g_object_unref(adj)
?
2.
If I use GtkCellRenderSpin and make new GtkAdjustment
which is saved in the **GtkTreeModel** with setting attribute,
then do I have to do g_object_unref(adj) ?
3.
If I use GtkCellRenderCombo and make new Gtk{Tree|List}Store
which is saved in the **Renderer**, then do I have to do
g_object_unref(model) ?
4.
If I use GtkCellRenderCombo and make new Gtk{Tree|List}Store
which is saved in the **GtkTreeModel** with setting attribute,
then do I have to do g_object_unref(adj) ?
5.
Is there any connection with floating issues?
When I save GtkAdjustment in Renderer
before saving, floating value is true
and after saving floating value is false,
But I save GtkAdjustment in GtkTreeModel,
before saving, and after saving floating value is still true.
And here is some code snippets for asking this issues.
* code snippet which saves GtkAdjustment in Renderer
code:
> {
> GtkAdjustment *adj;
> GtkCellRenderer *renderer;
> GtkTreeViewColumn *column;
>
> adj = GTK_ADJUSTMENT (gtk_adjustment_new (50.0, 0.0, 100.0, 5.0,
10.0, 0.0));
> renderer = gtk_cell_renderer_spin_new ();
>
> {
> gboolean colorness_float;
> colorness_float = g_object_is_floating (adj);
> g_debug ("=========> float: colorness(%d)\n", colorness_float);
> }
>
> g_object_set (renderer, "editable", TRUE, "adjustment", adj,
"digits", 0, NULL);
>
> {
> gboolean colorness_float;
> colorness_float = g_object_is_floating (adj);
> g_debug ("=========> float: colorness(%d)\n", colorness_float);
> }
>
> g_object_unref (adj); <----- /* DO I NEED THIS? */
>
> g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK
(brightness_edited), window);
>
> column = gtk_tree_view_column_new_with_attributes
(_(column_titles[VIEW_CAMERA_BRIGHTNESS]),
> renderer,
> "text",
MODEL_CAMERA_BRIGHTNESS,
> "visible",
MODEL_SUPPORT_CAMERA_PROPERTY,
> "sensitive",
MODEL_ONLINE,
> NULL);
> gtk_tree_view_column_set_resizable (column, FALSE);
> gtk_tree_view_column_set_clickable (column, FALSE);
> gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
> }
result:
> =========> float: colorness(1)
> =========> float: colorness(0)
* code snippet which saves GtkAdjustment and GtkListStore in GtkTreeModel.
code:
> {
> GtkAdjustment *bitrate_adj, *gop_size_adj;
> GtkListStore *quality_model;
> gchar quality_str[1024];
>
> bitrate_adj = GTK_ADJUSTMENT (gtk_adjustment_new (10.0, 10.0, 100.0,
10.0, 20.0, 0.0));
> gop_size_adj = GTK_ADJUSTMENT (gtk_adjustment_new (10.0, 10.0,
100.0, 10.0, 20.0, 0.0));
>
> quality_model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
> {
> GtkTreeIter combo_iter;
> gchar str[1024];
> gint value;
>
> value = 1;
> g_snprintf (str, 1024, _("%d (Highest)"), value);
> g_strlcpy (quality_str, str, 1024);
> gtk_list_store_append (quality_model, &combo_iter);
> gtk_list_store_set (quality_model, &combo_iter, 0, str, 1,
value, -1);
>
> value = 2;
> g_snprintf (str, 1024, "%d", value);
> gtk_list_store_append (quality_model, &combo_iter);
> gtk_list_store_set (quality_model, &combo_iter, 0, str, 1,
value, -1);
>
> value = 3;
> g_snprintf (str, 1024, _("%d (Lowest)"), value);
> gtk_list_store_append (quality_model, &combo_iter);
> gtk_list_store_set (quality_model, &combo_iter, 0, str, 1,
value, -1);
> }
>
> {
> gboolean bitrate_float, gop_size_float, quality_float;
>
> bitrate_float = g_object_is_floating (bitrate_adj);
> gop_size_float = g_object_is_floating (gop_size_adj);
> quality_float = g_object_is_floating (quality_model);
>
> g_debug ("=========> float: bitrate(%d), gop_size(%d),
quality(%d)\n", bitrate_float, gop_size_float, quality_float);
> }
>
> g_object_ref_sink (bitrate_adj);
> g_object_ref_sink (gop_size_adj);
>
> gtk_tree_store_set (GTK_TREE_STORE (model), iter,
> MODEL_VIDEO_FRAME_RATE, 1,
> MODEL_VIDEO_BITRATE, 10,
> MODEL_VIDEO_GOP_SIZE, 10,
> MODEL_VIDEO_QUALITY, 1,
> MODEL_VIDEO_QUALITY_STRING, quality_str,
> MODEL_VIDEO_BITRATE_ADJ, bitrate_adj,
> MODEL_VIDEO_GOP_SIZE_ADJ, gop_size_adj,
> MODEL_VIDEO_QUALITY_MODEL, quality_model,
> -1);
> {
> gboolean bitrate_float, gop_size_float, quality_float;
>
> bitrate_float = g_object_is_floating (bitrate_adj);
> gop_size_float = g_object_is_floating (gop_size_adj);
> quality_float = g_object_is_floating (quality_model);
>
> g_debug ("=========> float: bitrate(%d), gop_size(%d),
quality(%d)\n", bitrate_float, gop_size_float, quality_float);
> }
>
> g_object_unref (bitrate_adj); <----- /* DO I NEED THIS? */
> g_object_unref (gop_size_adj); <----- /* DO I NEED THIS? */
> g_object_unref (quality_model); <----- /* DO I NEED THIS? */
> }
result:
> =========> float: bitrate(1), gop_size(1), quality(0)
> =========> float: bitrate(0), gop_size(0), quality(0)
Any suggestions and help will be appreciated.
Thanks, :-)
P.S.
If there are documentations for this issues.
Could you please recommand the url please?
--
Best regards,
Keedi Kim
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]