diff options
Diffstat (limited to 'Bustle/GDBusMessage.hs')
-rw-r--r-- | Bustle/GDBusMessage.hs | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/Bustle/GDBusMessage.hs b/Bustle/GDBusMessage.hs index d556748..030c106 100644 --- a/Bustle/GDBusMessage.hs +++ b/Bustle/GDBusMessage.hs @@ -68,7 +68,6 @@ import Foreign.ForeignPtr import Foreign.Ptr import Foreign.C import Foreign.Marshal.Alloc -import System.IO.Unsafe import System.Glib.GObject import System.Glib.UTFString @@ -222,30 +221,29 @@ messageNewSignal (ObjectPath o) (InterfaceName i) (MemberName m) = withCString m $ \m_ptr -> wrapNewGDBusMessage $ g_dbus_message_new_signal o_ptr i_ptr m_ptr --- FIXME: remove unsafePerformIOs – GDBusMessage is not immutable messageType :: GDBusMessage - -> MessageType -messageType message = unsafePerformIO $ + -> IO MessageType +messageType message = withForeignPtr (unGDBusMessage message) $ \c_message -> toEnum <$> g_dbus_message_get_message_type c_message messageSerial :: GDBusMessage - -> Serial -messageSerial message = unsafePerformIO $ + -> IO Serial +messageSerial message = withForeignPtr (unGDBusMessage message) $ \c_message -> g_dbus_message_get_serial c_message messageReplySerial :: GDBusMessage - -> Serial -messageReplySerial message = unsafePerformIO $ + -> IO Serial +messageReplySerial message = withForeignPtr (unGDBusMessage message) $ \c_message -> g_dbus_message_get_reply_serial c_message messageStr :: (String -> a) -> (Ptr GDBusMessage -> IO CString) -> GDBusMessage - -> Maybe a -messageStr ctor f message = unsafePerformIO $ + -> IO (Maybe a) +messageStr ctor f message = withForeignPtr (unGDBusMessage message) $ \c_message -> do c_str <- f c_message if c_str == nullPtr @@ -253,27 +251,27 @@ messageStr ctor f message = unsafePerformIO $ else Just . ctor <$> peekUTFString c_str messageSender :: GDBusMessage - -> Maybe BusName + -> IO (Maybe BusName) messageSender = messageStr BusName g_dbus_message_get_sender messageDestination :: GDBusMessage - -> Maybe BusName + -> IO (Maybe BusName) messageDestination = messageStr BusName g_dbus_message_get_destination messageErrorName :: GDBusMessage - -> Maybe String + -> IO (Maybe String) messageErrorName = messageStr id g_dbus_message_get_error_name messagePath :: GDBusMessage - -> Maybe ObjectPath + -> IO (Maybe ObjectPath) messagePath = messageStr ObjectPath g_dbus_message_get_path messageInterface :: GDBusMessage - -> Maybe InterfaceName + -> IO (Maybe InterfaceName) messageInterface = messageStr InterfaceName g_dbus_message_get_interface messageMember :: GDBusMessage - -> Maybe MemberName + -> IO (Maybe MemberName) messageMember = messageStr MemberName g_dbus_message_get_member messageGetBody :: GDBusMessage @@ -285,8 +283,8 @@ messageGetBody message = do else Just <$> makeNewGVariant (return body) messagePrintBody :: GDBusMessage - -> String -messagePrintBody message = unsafePerformIO $ do + -> IO String +messagePrintBody message = do body <- messageGetBody message case body of Nothing -> return "" |