[gimp] app: use GWeakRef instead of g_object_add_weak_pointer().
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: use GWeakRef instead of g_object_add_weak_pointer().
- Date: Wed, 4 Oct 2017 21:45:32 +0000 (UTC)
commit 7be856a47d1267936c583ed41dcba9b3e6f757c0
Author: Jehan <jehan girinstud io>
Date: Wed Oct 4 23:38:24 2017 +0200
app: use GWeakRef instead of g_object_add_weak_pointer().
Other than multi-threading (which here is not the problem), using
GWeakRef has the other advantage that it makes the type of pointer
obvious, hence avoiding the kind of errors as fixed in commit 12df796.
One can't just change the pointer value directly, and has to use
g_weak_ref_set(), so such problem won't happen again.
app/tools/gimpgegltool.c | 15 ++++++-------
app/tools/gimpoperationtool.c | 43 ++++++++++++++++++++++++++++------------
app/tools/gimpoperationtool.h | 2 +-
3 files changed, 38 insertions(+), 22 deletions(-)
---
diff --git a/app/tools/gimpgegltool.c b/app/tools/gimpgegltool.c
index 747767c..8ae2248 100644
--- a/app/tools/gimpgegltool.c
+++ b/app/tools/gimpgegltool.c
@@ -392,6 +392,7 @@ gimp_gegl_tool_dialog (GimpFilterTool *filter_tool)
GtkWidget *main_vbox;
GtkWidget *hbox;
GtkWidget *combo;
+ GtkWidget *options_gui;
GList *opclasses;
GList *iter;
@@ -474,17 +475,15 @@ gimp_gegl_tool_dialog (GimpFilterTool *filter_tool)
gtk_box_reorder_child (GTK_BOX (main_vbox), tool->description_label, 1);
/* The options vbox */
- o_tool->options_gui =
- gtk_label_new (_("Select an operation from the list above"));
- g_object_add_weak_pointer (G_OBJECT (o_tool->options_gui),
- (gpointer) &o_tool->options_gui);
- gimp_label_set_attributes (GTK_LABEL (o_tool->options_gui),
+ options_gui = gtk_label_new (_("Select an operation from the list above"));
+ gimp_label_set_attributes (GTK_LABEL (options_gui),
PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
-1);
- gtk_misc_set_padding (GTK_MISC (o_tool->options_gui), 0, 4);
+ gtk_misc_set_padding (GTK_MISC (options_gui), 0, 4);
gtk_container_add (GTK_CONTAINER (o_tool->options_box),
- o_tool->options_gui);
- gtk_widget_show (o_tool->options_gui);
+ options_gui);
+ g_weak_ref_set (&o_tool->options_gui_ref, options_gui);
+ gtk_widget_show (options_gui);
}
static void
diff --git a/app/tools/gimpoperationtool.c b/app/tools/gimpoperationtool.c
index d11ec22..f7bbf67 100644
--- a/app/tools/gimpoperationtool.c
+++ b/app/tools/gimpoperationtool.c
@@ -188,13 +188,19 @@ gimp_operation_tool_initialize (GimpTool *tool,
if (filter_tool->config)
{
- gimp_operation_tool_sync_op (op_tool, TRUE);
+ GtkWidget *options_gui;
- if (! op_tool->options_gui)
+ gimp_operation_tool_sync_op (op_tool, TRUE);
+ options_gui = g_weak_ref_get (&op_tool->options_gui_ref);
+ if (! options_gui)
{
gimp_operation_tool_create_gui (op_tool);
gimp_operation_tool_add_gui (op_tool);
}
+ else
+ {
+ g_object_unref (options_gui);
+ }
}
return TRUE;
@@ -273,6 +279,7 @@ gimp_operation_tool_dialog (GimpFilterTool *filter_tool)
{
GimpOperationTool *op_tool = GIMP_OPERATION_TOOL (filter_tool);
GtkWidget *main_vbox;
+ GtkWidget *options_gui;
main_vbox = gimp_filter_tool_dialog_get_vbox (filter_tool);
@@ -285,8 +292,12 @@ gimp_operation_tool_dialog (GimpFilterTool *filter_tool)
g_object_add_weak_pointer (G_OBJECT (op_tool->options_box),
(gpointer) &op_tool->options_box);
- if (op_tool->options_gui)
- gimp_operation_tool_add_gui (op_tool);
+ options_gui = g_weak_ref_get (&op_tool->options_gui_ref);
+ if (options_gui)
+ {
+ gimp_operation_tool_add_gui (op_tool);
+ g_object_unref (options_gui);
+ }
}
static void
@@ -497,13 +508,14 @@ static void
gimp_operation_tool_create_gui (GimpOperationTool *op_tool)
{
GimpFilterTool *filter_tool = GIMP_FILTER_TOOL (op_tool);
+ GtkWidget *options_gui;
gint off_x, off_y;
GeglRectangle area;
gint aux;
gimp_filter_tool_get_drawable_area (filter_tool, &off_x, &off_y, &area);
- op_tool->options_gui =
+ options_gui =
gimp_prop_gui_new (G_OBJECT (filter_tool->config),
G_TYPE_FROM_INSTANCE (filter_tool->config), 0,
&area,
@@ -511,9 +523,7 @@ gimp_operation_tool_create_gui (GimpOperationTool *op_tool)
(GimpCreatePickerFunc) gimp_filter_tool_add_color_picker,
(GimpCreateControllerFunc) gimp_filter_tool_add_controller,
filter_tool);
-
- g_object_add_weak_pointer (G_OBJECT (op_tool->options_gui),
- (gpointer) &op_tool->options_gui);
+ g_weak_ref_set (&op_tool->options_gui_ref, options_gui);
for (aux = 1; ; aux++)
{
@@ -554,8 +564,12 @@ static void
gimp_operation_tool_add_gui (GimpOperationTool *op_tool)
{
GtkSizeGroup *size_group = NULL;
+ GtkWidget *options_gui;
GList *list;
+ options_gui = g_weak_ref_get (&op_tool->options_gui_ref);
+ g_return_if_fail (options_gui);
+
for (list = op_tool->aux_inputs; list; list = g_list_next (list))
{
AuxInput *input = list->data;
@@ -577,9 +591,10 @@ gimp_operation_tool_add_gui (GimpOperationTool *op_tool)
if (size_group)
g_object_unref (size_group);
- gtk_box_pack_start (GTK_BOX (op_tool->options_box), op_tool->options_gui,
+ gtk_box_pack_start (GTK_BOX (op_tool->options_box), options_gui,
TRUE, TRUE, 0);
- gtk_widget_show (op_tool->options_gui);
+ gtk_widget_show (options_gui);
+ g_object_unref (options_gui);
}
@@ -682,6 +697,7 @@ gimp_operation_tool_set_operation (GimpOperationTool *op_tool,
{
GimpTool *tool;
GimpFilterTool *filter_tool;
+ GtkWidget *options_gui;
g_return_if_fail (GIMP_IS_OPERATION_TOOL (op_tool));
@@ -705,11 +721,12 @@ gimp_operation_tool_set_operation (GimpOperationTool *op_tool,
gimp_filter_tool_set_widget (filter_tool, NULL);
- if (op_tool->options_gui)
+ options_gui = g_weak_ref_get (&op_tool->options_gui_ref);
+ if (options_gui)
{
gimp_filter_tool_disable_color_picking (filter_tool);
-
- gtk_widget_destroy (op_tool->options_gui);
+ g_object_unref (options_gui);
+ gtk_widget_destroy (options_gui);
}
if (! operation)
diff --git a/app/tools/gimpoperationtool.h b/app/tools/gimpoperationtool.h
index 98b2bd2..c30143b 100644
--- a/app/tools/gimpoperationtool.h
+++ b/app/tools/gimpoperationtool.h
@@ -44,7 +44,7 @@ struct _GimpOperationTool
/* dialog */
GtkWidget *options_box;
- GtkWidget *options_gui;
+ GWeakRef options_gui_ref;
};
struct _GimpOperationToolClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]