From: Axel S. <Axe...@in...> - 2010-05-04 08:50:22
|
On 04.05.2010, at 10:42, Christoph Bauer wrote: > Hi Axel, > >> Hi Christoph, >> >> I might have misunderstood the semantics of clipboardRequestText. I >> assumed that it blocks until the passed-in function was called. As a >> consequence, I free the function pointer of the passed-in function >> immediately after the C call to clipboard_request_text returns. It >> seems that on my platform (MacOS) the primary clipboard does not work >> as expected. Could you (a) confirm that the following program crashes >> and (b) try to use clipboardRequestContents since this function frees >> the reception function after it has been executed. >> >> Cheers, >> Axel >> >> import Graphics.UI.Gtk >> import Data.Char >> main = do >> initGUI >> putStrLn "1" >> clipboard <- clipboardGet selectionPrimary >> putStrLn "2" >> clipboardRequestText clipboard >> (\ mbS -> do >> putStrLn "3" >> case mbS of >> Nothing -> return () >> Just s -> clipboardSetText clipboard (map toUpper s)) > > > (a) the program doesn't crash. I had to append a "mainGUI" > to make it crash. Oh, ok. > (b) I use now > > clipboardRequestContents clipboard targetString > $ do > mbS <- selectionDataGetText > case mbS of > Nothing -> selectionDataSetText "ABC" >> return () > Just s -> selectionDataSetText (translate s) >> return > () > I guess, getting the text works, but selectionDataSetText fails. > Unfortunatly SelectionDataM is not an instace of MonadIO. So neither > I can insert a liftIO . putStrLn nor I can call clipboarSetText. Yes, it is instance of IO! You should be able to just liftIO IO- actions. liftIO is in Control.Monad.Trans. Cheers, Axel > Regards, > Christoph |