summaryrefslogtreecommitdiff
path: root/Bustle/GDBusMessage.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Bustle/GDBusMessage.hs')
-rw-r--r--Bustle/GDBusMessage.hs34
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 ""