From: Hiroyuki I. <ZXB...@ni...> - 2010-01-16 00:46:39
|
伊東と申します。 void gdk_window_invalidate_rect(GdkWindow *window, const GdkRectangle *rect, gboolean invalidate_children); は rect に NULL をつかうと window 全体を更新しますが、 Gdk::Window#invalidate に nil を渡すと gdk_window_invalidate_region() が呼ばれるために下記のエラーが表示されます。 Gdk-CRITICAL **:gdk_region_empty: assertion `region != NULL' failed 下記の様に変更すると Gdk::Window#invalidate に nil を渡すことで window 全体の更新が出来て便利だと思うのですが、いかがでしょうか。 Index: src/rbgdkwindow.c =================================================================== --- src/rbgdkwindow.c (リビジョン 3728) +++ src/rbgdkwindow.c (作業コピー) @@ -374,14 +374,14 @@ gdkwin_invalidate(self, area, invalidate_children) VALUE self, area, invalidate_children; { - if (rb_obj_is_kind_of(area, GTYPE2CLASS(GDK_TYPE_RECTANGLE))){ + if (rb_obj_is_kind_of(area, GTYPE2CLASS(GDK_TYPE_REGION))){ + gdk_window_invalidate_region(_SELF(self), + RVAL2BOXED(area, GDK_TYPE_REGION), + RVAL2CBOOL(invalidate_children)); + } else { gdk_window_invalidate_rect(_SELF(self), RVAL2BOXED(area, GDK_TYPE_RECTANGLE), RVAL2CBOOL(invalidate_children)); - } else { - gdk_window_invalidate_region(_SELF(self), - RVAL2BOXED(area, GDK_TYPE_REGION), - RVAL2CBOOL(invalidate_children)); } return self; } |