From c4ccb03451e07f0489208f8e7403cd597e8dbf31 Mon Sep 17 00:00:00 2001
From: Per Hedbor <ph@opera.com>
Date: Wed, 15 Mar 2000 08:52:24 +0100
Subject: [PATCH] Do not try to call gtk_object_get_data on non-gtk objects,
 it's not all that good an idea. :-)

Rev: src/post_modules/GTK/source/support.c:1.13
---
 src/post_modules/GTK/source/support.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/post_modules/GTK/source/support.c b/src/post_modules/GTK/source/support.c
index d5cabb6ecb..216798b3a4 100644
--- a/src/post_modules/GTK/source/support.c
+++ b/src/post_modules/GTK/source/support.c
@@ -307,6 +307,16 @@ GdkImage *gdkimage_from_pikeimage( struct object *img, int fast, GdkImage *i )
   return i;
 }
 
+#define IS_OBJECT_PROGRAM(X)                 \
+!( ((X) == pgtk_style_program)               \
+|| ((X) == pgtk_CTreeNode_program)           \
+|| ((X) == pgtk_CTreeRow_program)            \
+|| ((X) == pgtk_icon_list_item_program)      \
+|| ((X) == pgtk_plot_dataset_program)        \
+|| ((X) == pgtk_psfont_program)              \
+|| ((X) == pgtk_selection_data_program)      \
+|| ((X) == pgtk_sheet_child_program))
+
 void push_gtkobjectclass(void *obj, struct program *def)
 {
   struct object *o;
@@ -315,11 +325,12 @@ void push_gtkobjectclass(void *obj, struct program *def)
     push_int(0);
     return;
   }
-  if( (o=gtk_object_get_data(GTK_OBJECT(obj), "pike_object")) )
-  {
-    ref_push_object( o );
-    return;
-  }
+  if( IS_OBJECT_PROGRAM(def) )
+    if( (o=gtk_object_get_data(((void *)obj), "pike_object")) )
+    {
+      ref_push_object( o );
+      return;
+    }
   o = low_clone( def );
   call_c_initializers( o );
   ((struct object_wrapper *)o->storage)->obj = obj;
-- 
GitLab