module Graphics.UI.AppIndicator.Signals (
  connect_NONE__NONE,
  connect_GLIBSTRING__NONE,
  connect_GLIBSTRING_GLIBSTRING__NONE,
  connect_BOOL__NONE,
  connect_INT_INT__NONE
) where

import           System.Glib.FFI       (CString, Ptr)
import           System.Glib.GError    (failOnGError)
import           System.Glib.GObject   (GObject, GObjectClass)
import           System.Glib.Signals   (ConnectAfter, ConnectId, SignalName,
                                        connectGeneric)
import           System.Glib.UTFString (peekUTFString)
import qualified System.Glib.UTFString as Glib

connect_NONE__NONE ::
  GObjectClass obj => SignalName ->
  ConnectAfter -> obj ->
  IO () ->
  IO (ConnectId obj)
connect_NONE__NONE signal after obj user =
  connectGeneric signal after obj action
  where action :: Ptr GObject -> IO ()
        action _ = failOnGError user

connect_GLIBSTRING__NONE ::
  (Glib.GlibString a', GObjectClass obj) => SignalName ->
  ConnectAfter -> obj ->
  (a' -> IO ()) ->
  IO (ConnectId obj)
connect_GLIBSTRING__NONE signal after obj user =
  connectGeneric signal after obj action
  where action :: Ptr GObject -> CString -> IO ()
        action _ str1 =
          failOnGError $
          peekUTFString str1 >>= \str1' ->
          user str1'

connect_GLIBSTRING_GLIBSTRING__NONE ::
  (Glib.GlibString a', Glib.GlibString b', GObjectClass obj) => SignalName ->
  ConnectAfter -> obj ->
  (a' -> b' -> IO ()) ->
  IO (ConnectId obj)
connect_GLIBSTRING_GLIBSTRING__NONE signal after obj user =
  connectGeneric signal after obj action
  where action :: Ptr GObject -> CString -> CString -> IO ()
        action _ str1 str2 =
          failOnGError $
          peekUTFString str2 >>= \str2' ->
          peekUTFString str1 >>= \str1' ->
          user str1' str2'

connect_BOOL__NONE ::
  GObjectClass obj => SignalName ->
  ConnectAfter -> obj ->
  (Bool -> IO ()) ->
  IO (ConnectId obj)
connect_BOOL__NONE signal after obj user =
  connectGeneric signal after obj action
  where action :: Ptr GObject -> Bool -> IO ()
        action _ bool1 =
          failOnGError $
          user bool1

connect_INT_INT__NONE ::
  GObjectClass obj => SignalName ->
  ConnectAfter -> obj ->
  (Int -> Int -> IO ()) ->
  IO (ConnectId obj)
connect_INT_INT__NONE signal after obj user =
  connectGeneric signal after obj action
  where action :: Ptr GObject -> Int -> Int -> IO ()
        action _ int1 int2 =
          failOnGError $
          user int1 int2