Axel Simon <axel.si...@in.tum.de> writes: > Andy, > > I don't think you should use connectGeneric since this -- I think -- > only works with one particular way of connecting to signals. Please > copy the code from the onInsertText signal. In general, you should > only use the automatically generated connect_XXX functions. Below code is okay?
------------------------------> new version start <------------------------------ insertText :: EditableClass self => Signal self (String -> Int -> IO Int) insertText = Signal (\after obj user -> connect_PTR_INT_PTR__NONE "insert-text" after obj (\strPtr strLen posPtr -> do str <- if strLen < 0 then peekUTFString strPtr else peekUTFStringLen (strPtr, strLen) pos <- peek (posPtr :: Ptr {#type gint#}) pos' <- user str (fromIntegral pos) poke (posPtr :: Ptr {#type gint#}) (fromIntegral pos'))) ------------------------------> new version end <------------------------------ -- Andy > > Axel. > > On Apr 3, 2010, at 9:03, Andy Stewart wrote: > >> Hi Matt, >> >> Sorry for inconvenience! >> >> I have fix this bug in darcs version with below code: >> >> ------------------------------> new version start >> <------------------------------ >> insertText :: EditableClass self => Signal self (String -> Int -> >> IO Int) >> insertText = Signal (connect_STRINGPTR_INT__INTPTR "insert-text") >> >> -- | Singal helper functions. >> connect_STRINGPTR_INT__INTPTR :: >> EditableClass self => SignalName -> >> ConnectAfter -> self -> >> (String -> Int -> IO Int) -> >> IO (ConnectId self) >> connect_STRINGPTR_INT__INTPTR signal after obj user = >> connectGeneric signal after obj >> (\strPtr strLen posPtr -> do >> str <- if strLen<0 then peekUTFString strPtr >> else peekUTFStringLen (strPtr, strLen) >> pos <- peek (posPtr :: Ptr {#type gint#}) >> pos' <- user str (fromIntegral pos) >> poke (posPtr :: Ptr {#type gint#}) (fromIntegral pos')) >> ------------------------------> new version end >> <------------------------------ >> >> Thanks for your report! >> >> -- Andy >> >> Matt Arsenault <arse...@rpi.edu> writes: >> >>> Hi, >>> >>> I happened to come across a problem with the insertText signal for >>> Editable in Gtk. >>> >>> I'm having problems getting the autotools to actually build, so I >>> haven't exactly fixed it myself. >>> >>> In gtk/Graphics/UI/Gtk/Entry/Editable.chs.pp: >>> >>>> insertText :: EditableClass self => Signal self (String -> Int - >>>> > Int >>> -> IO ()) >>>> insertText = Signal (connect_STRING_INT_INT__NONE "insert-text") >>> >>> >>> However, this is wrong. This doesn't match what the >>> onInsertText/afterInsertText do, and what the callback is supposed to >>> be. >>> >>> The C callback is supposed to be >>> (GtkEditable *editable, >>> gchar *new_text, >>> gint new_text_length, >>> gint *position, >>> gpointer user_data) >>> >>> Where the position argument is an in and out argument which is >>> kind of >>> weird. onInsertText/afterInsertText handle this, but insertText does >>> not. insertText will just treat a pointer as an int, and doesn't >>> respect >>> the out argument aspect at all. >>> >>> onInsertText: >>> >>>> onInsertText, afterInsertText :: EditableClass self => self >>>> -> (String -> Int -> IO Int) >>>> -> IO (ConnectId self) >>>> onInsertText obj handler = >>>> connect_PTR_INT_PTR__NONE "insert_text" False obj >>>> (\strPtr strLen posPtr -> do >>>> str <- if strLen<0 then peekUTFString strPtr >>>> else peekUTFStringLen (strPtr, strLen) >>>> pos <- peek (posPtr :: Ptr {#type gint#}) >>>> pos' <- handler str (fromIntegral pos) >>>> poke (posPtr :: Ptr {#type gint#}) (fromIntegral pos') >>>> ) >>> >>> >>> This should be something more like this, except I haven't actually >>> tested it since I gave up on trying to get current darcs gtk2hs built >>> and didn't have time to fight with it. >>> >>>> insertText :: EditableClass self => Signal self (String -> Int - >>>> > IO >>> Int) >>>> insertText = Signal $ >>>> connect_PTR_INT_PTR__NONE "insert_text" >>>> (\strPtr strLen posPtr -> do >>>> str <- if strLen<0 then peekUTFString strPtr >>>> else peekUTFStringLen (strPtr, strLen) >>>> pos <- peek (posPtr :: Ptr {#type gint#}) >>>> pos' <- handler str (fromIntegral pos) >>>> poke (posPtr :: Ptr {#type gint#}) (fromIntegral pos') >>>> ) >>> >>> >>> - Matt Arsenault >>> >>> >>> >>> --------------------------------------------------------------------- >>> --------- >>> Download Intel® Parallel Studio Eval >>> Try the new software tools for yourself. Speed compiling, find bugs >>> proactively, and fine-tune applications for parallel performance. >>> See why Intel Parallel Studio got high marks during beta. >>> http://p.sf.net/sfu/intel-sw-dev >> >> >> ---------------------------------------------------------------------- >> -------- >> Download Intel® Parallel Studio Eval >> Try the new software tools for yourself. Speed compiling, find bugs >> proactively, and fine-tune applications for parallel performance. >> See why Intel Parallel Studio got high marks during beta. >> http://p.sf.net/sfu/intel-sw-dev >> _______________________________________________ >> Gtk2hs-devel mailing list >> Gtk2hs-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Gtk2hs-devel mailing list Gtk2hs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel