Hi, Thanks a lot for your valuable suggestion. I followed your instructions and added the suggested lines. I had done minor modification to overcome failure for multiple definition & warning due to one assertion failure.
I tried gtk-demo, but only background was drawn, no widget were visible. After that, I compiled the gtk+ example, helloworld & executed. I observed that background is drawn. But, no text is displayed for the button label. I also tried to change button/label color by changing the gtkrc, that had also no effect. Now, can anyone suggest me a wawy to overcome this situation? My packages are glib-2.18.3 configured with --build=i386-linux --disable-gtk-doc --disable-man --enable-debug cairo-1.8.6 configured with --enable-directfb --disable-xlib --disable-win32 pixman-0.13.2 pango-1.22.3 configured with --without-x Here is the change: diff -pur directfb_patched/gdkwindow-directfb.c directfb_patched_m/gdkwindow-directfb.c --- directfb_patched/gdkwindow-directfb.c 2009-01-06 21:26:17.000000000 +0530 +++ directfb_patched_m/gdkwindow-directfb.c 2009-01-06 22:13:35.000000000 +0530 @@ -67,6 +67,7 @@ static void gdk_window_impl_direc static void gdk_window_impl_directfb_init (GdkWindowImplDirectFB *window); static void gdk_window_impl_directfb_class_init (GdkWindowImplDirectFBClass *klass); static void gdk_window_impl_directfb_finalize (GObject *object); +static void gdk_window_impl_iface_init (GdkWindowImplIface *iface); void gdk_window_directfb_hide (GdkWindow *window); @@ -95,6 +96,12 @@ typedef struct static GSList *update_windows = NULL; static guint update_idle = 0; +G_DEFINE_TYPE_WITH_CODE (GdkWindowImplDirectFB, + gdk_window_impl_directfb, + GDK_TYPE_DRAWABLE_IMPL_DIRECTFB, + G_IMPLEMENT_INTERFACE (GDK_TYPE_WINDOW_IMPL, + gdk_window_impl_iface_init)); + static void gdk_window_directfb_process_all_updates (void) { @@ -114,6 +121,7 @@ gdk_window_directfb_process_all_updates while (tmp_list) { GdkWindowObject *private = GDK_WINDOW_OBJECT( tmp_list->data ); + GdkWindowImplDirectFB *wimpl = GDK_WINDOW_IMPL_DIRECTFB( private->impl ); if (private->update_freeze_count) { @@ -206,7 +214,7 @@ gdk_window_impl_directfb_paintable_init - +#if 0 GType gdk_window_impl_directfb_get_type (void) { @@ -245,6 +253,7 @@ gdk_window_impl_directfb_get_type (void) return object_type; } +#endif GType _gdk_window_impl_get_type (void) @@ -420,6 +429,10 @@ _gdk_windowing_window_init (void) _gdk_parent_root = g_object_new (GDK_TYPE_WINDOW, NULL); private = GDK_WINDOW_OBJECT (_gdk_parent_root); + + private->impl = g_object_new (_gdk_window_impl_get_type (), NULL); + printf("DFB:%s:allocating window impl\n",__FUNCTION__); + impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl); private->window_type = GDK_WINDOW_ROOT; @@ -442,7 +455,7 @@ _gdk_windowing_window_init (void) desc.flags = DWDESC_CAPS; desc.caps = 0; desc.caps |= DWCAPS_NODECORATION; - desc.caps |= DWCAPS_ALPHACHANNEL; +// desc.caps |= DWCAPS_ALPHACHANNEL; desc.flags |= ( DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_POSX | DWDESC_POSY ); desc.posx = 0; @@ -455,6 +468,7 @@ _gdk_windowing_window_init (void) } impl->drawable.surface->GetPixelFormat(impl->drawable.surface,&impl->drawable.format); private->depth = DFB_BITS_PER_PIXEL(impl->drawable.format); + printf("DFB:depth=%d\n",private->depth); /* Now we can set up the system colormap */ @@ -489,6 +503,8 @@ gdk_directfb_window_new (GdkWindow window = g_object_new (GDK_TYPE_WINDOW, NULL); private = GDK_WINDOW_OBJECT (window); + private->impl = g_object_new (_gdk_window_impl_get_type (), NULL); + printf("DFB:%s:allocating window impl\n",__FUNCTION__); parent_private = GDK_WINDOW_OBJECT (parent); parent_impl = GDK_WINDOW_IMPL_DIRECTFB (parent_private->impl); @@ -2730,6 +2746,10 @@ GdkWindow *gdk_directfb_create_child_win window = g_object_new (GDK_TYPE_WINDOW, NULL); private = GDK_WINDOW_OBJECT (window); + + private->impl = g_object_new (_gdk_window_impl_get_type (), NULL); + printf("DFB:%s:allocating window impl\n",__FUNCTION__); + parent_private = GDK_WINDOW_OBJECT (parent); parent_impl = GDK_WINDOW_IMPL_DIRECTFB (parent_private->impl); private->parent = parent_private; @@ -2809,6 +2829,10 @@ gdk_window_foreign_new_for_display (GdkD /* we hold a reference count on ourselves */ g_object_ref (window); private = GDK_WINDOW_OBJECT (window); + + private->impl = g_object_new (_gdk_window_impl_get_type (), NULL); + printf("DFB:%s:allocating window impl\n",__FUNCTION__); + private->parent = parent_private; private->window_type = GDK_WINDOW_TOPLEVEL; impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl); Regards Dhananjoy On Tue, Jan 6, 2009 at 11:08 AM, Minsu Han <minsu81....@samsung.com> wrote: > > Hi. > > I also had a same problem. But now I know why this problem is happened. > > I think the problem is there's no impl(GdkWindowImplDirectFB) object in > _gdk_windowing_window_init(). > > So when you refer impl pointer, there's some segmentation fault. > > > > In _gdk_windowing_window_init(). > > { > > ... > > _gdk_parent_root = g_object_new (GDK_TYPE_WINDOW, NULL); > > private = GDK_WINDOW_OBJECT (_gdk_parent_root); > > impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl); > > impl->gdkWindow = _gdk_parent_root; > > ... > > } > > > > In my case, I declare GdkWindowImplDirectFB info using > G_DEFINE_TYPE_WITH_CODE. > > And initialize impl data. > > impl = g_object_new(_gdk_window_impl_get_type(), NULL ); > > > > Maybe it should be added in _gdk_windowing_window_init(), > gdk_directfb_window_new(), gdk_directfb_create_child_window(), > gdk_window_foreign_new_for_display(). > > After that, gtk-demo will be worked correctly. > > > > BR > > minsu.han > > >
_______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev