diff --git a/ext/fox16/FXRuby.cpp b/ext/fox16/FXRuby.cpp index ec68669d5fee0c15e20cd9791272010074f2bd98..40440315b861d0b74ddcf6274980cc1676c756d7 100644 --- a/ext/fox16/FXRuby.cpp +++ b/ext/fox16/FXRuby.cpp @@ -204,12 +204,11 @@ FXInputHandle FXRbGetReadFileHandle(VALUE obj) { #ifdef RUBY_1_9 rb_io_t *fptr; GetOpenFile(obj, fptr); - FILE *fpr=fptr->stdio_file; + return fptr->fd; #else OpenFile *fptr; GetOpenFile(obj, fptr); FILE *fpr=GetReadFile(fptr); -#endif /* RUBY_1_9 */ #ifdef WIN32 #ifdef __CYGWIN__ return (FXInputHandle) get_osfhandle(fileno(fpr)); @@ -219,6 +218,7 @@ FXInputHandle FXRbGetReadFileHandle(VALUE obj) { #else return (FXInputHandle) fileno(fpr); #endif +#endif /* RUBY_1_9 */ } @@ -227,12 +227,11 @@ FXInputHandle FXRbGetWriteFileHandle(VALUE obj) { #ifdef RUBY_1_9 rb_io_t *fptr; GetOpenFile(obj, fptr); - FILE *fpw=fptr->stdio_file; + return fptr->fd; #else OpenFile *fptr; GetOpenFile(obj, fptr); FILE *fpw=GetWriteFile(fptr); -#endif /* RUBY_1_9 */ #ifdef WIN32 #ifdef __CYGWIN__ return (FXInputHandle) get_osfhandle(fileno(fpw)); @@ -242,6 +241,7 @@ FXInputHandle FXRbGetWriteFileHandle(VALUE obj) { #else return (FXInputHandle) fileno(fpw); #endif +#endif /* RUBY_1_9 */ } @@ -431,7 +431,7 @@ VALUE FXRbMakeArray(const FXRectangle* rectangles,FXuint nrectangles){ rb_ary_push(result,FXRbGetRubyObj(&rectangles[i],"FXRectangle *")); return result; } - + // Returns a Ruby array of FXSegments VALUE FXRbMakeArray(const FXSegment* segments,FXuint nsegments){ VALUE result=rb_ary_new(); @@ -1170,7 +1170,7 @@ void* FXRbGetExpectedData(VALUE recv,FXSelector key,VALUE value){ } return 0; } - + if(type==SEL_DRAGGED){ SWIG_Ruby_ConvertPtr(value,&ptr,FXRbTypeQuery("FXEvent *"),1); return ptr; @@ -1344,7 +1344,7 @@ void FXRbRange2LoHi(VALUE range,FXdouble& lo,FXdouble& hi){ } } } - + //---------------------------------------------------------------------- void FXRbCallVoidMethod(FXObject* recv, ID func) { @@ -1594,7 +1594,7 @@ FXRbMenuRadio::~FXRbMenuRadio(){ void FXRbTreeList::enumerateItem(FXTreeItem* item,FXObjectListOf<FXTreeItem>& items){ // Add this item to the list items.append(item); - + // Add this item's children FXRbTreeList::enumerateItems(item->getFirst(),item->getLast(),items); } @@ -1623,7 +1623,7 @@ void FXRbTreeList::enumerateItems(FXTreeItem* fm,FXTreeItem* to,FXObjectListOf<F void FXRbFoldingList::enumerateItem(FXFoldingItem* item,FXObjectListOf<FXFoldingItem>& items){ // Add this item to the list items.append(item); - + // Add this item's children FXRbFoldingList::enumerateItems(item->getFirst(),item->getLast(),items); } @@ -1658,7 +1658,7 @@ FXint FXRbComboBox::sortFunc(const FXListItem* a,const FXListItem* b){ return static_cast<FXint>(NUM2INT(result)); } - + // Sort function stand-in for FXFoldingList FXint FXRbFoldingList::sortFunc(const FXFoldingItem* a,const FXFoldingItem* b){ VALUE itemA = FXRbGetRubyObj(const_cast<FXFoldingItem*>(a), "FXFoldingItem *"); @@ -1694,7 +1694,7 @@ FXint FXRbListBox::sortFunc(const FXListItem* a,const FXListItem* b){ return static_cast<FXint>(NUM2INT(result)); } - + // Sort function stand-in for FXTreeList FXint FXRbTreeList::sortFunc(const FXTreeItem* a,const FXTreeItem* b){ VALUE itemA = FXRbGetRubyObj(const_cast<FXTreeItem*>(a), "FXTreeItem *"); @@ -2013,7 +2013,7 @@ extern "C" void Init_ui(void); #ifdef USE_RB_REQUIRE #define REQUIRE(fname) rb_require((fname)) #else -#define REQUIRE(fname) rb_funcall(rb_mKernel,rb_intern("require"),1,rb_str_new2((fname))) +#define REQUIRE(fname) rb_funcall(rb_mKernel,rb_intern("require"),1,rb_str_new2((fname))) #endif extern "C" void @@ -2053,14 +2053,14 @@ Init_fox16(void) { REQUIRE("fox16/version"); REQUIRE("fox16/kwargs"); REQUIRE("fox16/exceptions_for_fxerror"); - + id_assocs=rb_intern("@assocs"); id_backtrace=rb_intern("backtrace"); id_cmp=rb_intern("<=>"); id_begin=rb_intern("begin"); id_end=rb_intern("end"); id_exclude_endp=rb_intern("exclude_end?"); - + FXRuby_Objects=st_init_numtable(); appSensitiveObjs=st_init_numtable(); appSensitiveDCs=st_init_numtable(); diff --git a/test/TC_FXApp.rb b/test/TC_FXApp.rb index 3c706ece54732c8e4944e2b5392c7ecd811eece7..11ca3438028df6650c13142147abe4ef7c0c2289 100755 --- a/test/TC_FXApp.rb +++ b/test/TC_FXApp.rb @@ -1,5 +1,7 @@ require 'test/unit' require 'fox16' +require 'testcase' +require 'socket' include Fox @@ -14,3 +16,40 @@ class TC_FXApp < Test::Unit::TestCase end end +class TC_FXApp2 < TestCase + def setup + super(self.class.name) + end + + def check_events(pipe_rd, pipe_wr) + app.addInput(pipe_wr, INPUT_WRITE, app, FXApp::ID_QUIT) + app.run + app.removeInput(pipe_wr, INPUT_WRITE) + + app.addInput(pipe_rd, INPUT_READ, app, FXApp::ID_QUIT) + data_sent = false + app.addTimeout(1) do + data_sent = true + pipe_wr.write " " + end + app.run + app.removeInput(pipe_rd, INPUT_READ) + pipe_wr.close + pipe_rd.close + + assert data_sent, "the read input event shouldn't fire before some data is available" + end + + def test_addInput_on_pipe + check_events *IO.pipe + end + + def test_addInput_on_socket + s = TCPServer.open 'localhost', 0 + pipe_wr = TCPSocket.open 'localhost', s.addr[1] + pipe_rd = s.accept + s.close + + check_events pipe_rd, pipe_wr + end +end