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 <[email protected]> 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
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev