    {-# LINE 2 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
    {-# LANGUAGE OverloadedStrings #-}

    {-# LINE 3 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
    -- -*-haskell-*-
    -- GIMP Toolkit (GTK) Widget ToolButton
    --
    -- Author : Duncan Coutts
    --
    -- Created: 7 April 2005
    --
    -- Copyright (C) 2005 Duncan Coutts
    --
    -- This library is free software; you can redistribute it and/or
    -- modify it under the terms of the GNU Lesser General Public
    -- License as published by the Free Software Foundation; either
    -- version 2.1 of the License, or (at your option) any later version.
    --
    -- This library is distributed in the hope that it will be useful,
    -- but WITHOUT ANY WARRANTY; without even the implied warranty of
    -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -- Lesser General Public License for more details.
    --
    -- |
    -- Maintainer : gtk2hs-users@lists.sourceforge.net
    -- Stability : provisional
    -- Portability : portable (depends on GHC)
    --
    -- A 'ToolItem' subclass that displays buttons
    --
    -- * Module available since Gtk+ version 2.4
    --
    module Graphics.UI.Gtk.MenuComboToolbar.ToolButton (
    -- * Detail
    --
    -- | 'ToolButton's are 'ToolItems' containing buttons.
    --
    -- Use 'toolButtonNew' to create a new 'ToolButton'. Use
    -- 'toolButtonNewWithStock' to create a 'ToolButton' containing a stock item.
    --
    -- The label of a 'ToolButton' is determined by the properties
    -- \"label_widget\", \"label\", and \"stock_id\". If \"label_widget\" is
    -- not @Nothing@,
    -- then that widget is used as the label. Otherwise, if \"label\" is
    -- not @Nothing@,
    -- that string is used as the label. Otherwise, if \"stock_id\" is not
    -- @Nothing@, the label is
    -- determined by the stock item. Otherwise, the button does not have a label.
    --
    -- The icon of a 'ToolButton' is determined by the properties
    -- \"icon_widget\" and \"stock_id\". If \"icon_widget\" is not @Nothing@, then
    -- that widget is used as the icon. Otherwise, if \"stock_id\" is not @Nothing@,
    -- the icon is determined by the stock item. Otherwise, the button does not have
    -- a label.

    -- * Class Hierarchy
    -- |
    -- @
    -- | 'GObject'
    -- | +----'Object'
    -- | +----'Widget'
    -- | +----'Container'
    -- | +----'Bin'
    -- | +----'ToolItem'
    -- | +----ToolButton
    -- | +----'MenuToolButton'
    -- | +----'ToggleToolButton'
    -- @

    -- * Types
      ToolButton,
      ToolButtonClass,
      castToToolButton, gTypeToolButton,
      toToolButton,

    -- * Constructors
      toolButtonNew,
      toolButtonNewFromStock,

    -- * Methods
      toolButtonSetLabel,
      toolButtonGetLabel,
      toolButtonSetUseUnderline,
      toolButtonGetUseUnderline,
      toolButtonSetStockId,
      toolButtonGetStockId,
      toolButtonSetIconWidget,
      toolButtonGetIconWidget,
      toolButtonSetLabelWidget,
      toolButtonGetLabelWidget,

      toolButtonSetIconName,
      toolButtonGetIconName,

    -- * Attributes
      toolButtonLabel,
      toolButtonUseUnderline,
      toolButtonLabelWidget,
      toolButtonStockId,

      toolButtonIconName,

      toolButtonIconWidget,

    -- * Signals
      onToolButtonClicked,
      afterToolButtonClicked,

      ) where

    import Control.Monad (liftM)

    import System.Glib.FFI
    import System.Glib.UTFString
    import System.Glib.Attributes
    import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
    import Graphics.UI.Gtk.Types
    {-# LINE 118 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
    import Graphics.UI.Gtk.Signals
    {-# LINE 119 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
    import Graphics.UI.Gtk.General.StockItems

    {-# LINE 122 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}

    --------------------
    -- Constructors

    -- | Creates a new 'ToolButton' using @iconWidget@ as icon and @label@ as
    -- label.
    --
    toolButtonNew :: (WidgetClass iconWidget, GlibString string) =>
        Maybe iconWidget -- ^ @iconWidget@ - a widget that will be used as icon
                         -- widget, or @Nothing@
     -> Maybe string -- ^ @label@ - a string that will be used as label, or
                         -- @Nothing@
     -> IO ToolButton
    toolButtonNew :: forall iconWidget string.
    (WidgetClass iconWidget, GlibString string) =>
    Maybe iconWidget -> Maybe string -> IO ToolButton
    toolButtonNew Maybe iconWidget
    iconWidget Maybe string
    label =
      (ForeignPtr ToolButton -> ToolButton, FinalizerPtr ToolButton)
    -> IO (Ptr ToolButton) -> IO ToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr ToolButton -> ToolButton, FinalizerPtr ToolButton)
    forall {a}. (ForeignPtr ToolButton -> ToolButton, FinalizerPtr a)
    mkToolButton (IO (Ptr ToolButton) -> IO ToolButton)
    -> IO (Ptr ToolButton) -> IO ToolButton
    forall a b. (a -> b) -> a -> b
    $
      (Ptr ToolItem -> Ptr ToolButton)
    -> IO (Ptr ToolItem) -> IO (Ptr ToolButton)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr ToolItem -> Ptr ToolButton
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr ToolItem -> Ptr ToolButton) (IO (Ptr ToolItem) -> IO (Ptr ToolButton))
    -> IO (Ptr ToolItem) -> IO (Ptr ToolButton)
    forall a b. (a -> b) -> a -> b
    $
      (string -> (Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> Maybe string
    -> (Ptr CChar -> IO (Ptr ToolItem))
    -> IO (Ptr ToolItem)
    forall a b c.
    (a -> (Ptr b -> IO c) -> IO c)
    -> Maybe a -> (Ptr b -> IO c) -> IO c
    maybeWith string -> (Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a. string -> (Ptr CChar -> IO a) -> IO a
    forall s a. GlibString s => s -> (Ptr CChar -> IO a) -> IO a
    withUTFString Maybe string
    label ((Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \Ptr CChar
    labelPtr ->
      (\(Widget ForeignPtr Widget
    arg1) Ptr CChar
    arg2 -> ForeignPtr Widget
    -> (Ptr Widget -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr Widget
    arg1 ((Ptr Widget -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (Ptr Widget -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \Ptr Widget
    argPtr1 ->Ptr Widget -> Ptr CChar -> IO (Ptr ToolItem)
    gtk_tool_button_new Ptr Widget
    argPtr1 Ptr CChar
    arg2)
    {-# LINE 141 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (maybe (Widget nullForeignPtr) toWidget iconWidget)
        Ptr CChar
    labelPtr

    -- | Creates a new 'ToolButton' containing the image and text from a stock
    -- item.
    --
    -- It is an error if @stockId@ is not a name of a stock item.
    --
    toolButtonNewFromStock ::
        StockId -- ^ @stockId@ - the name of the stock item
     -> IO ToolButton
    toolButtonNewFromStock :: StockId -> IO ToolButton
    toolButtonNewFromStock StockId
    stockId =
      (ForeignPtr ToolButton -> ToolButton, FinalizerPtr ToolButton)
    -> IO (Ptr ToolButton) -> IO ToolButton
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr ToolButton -> ToolButton, FinalizerPtr ToolButton)
    forall {a}. (ForeignPtr ToolButton -> ToolButton, FinalizerPtr a)
    mkToolButton (IO (Ptr ToolButton) -> IO ToolButton)
    -> IO (Ptr ToolButton) -> IO ToolButton
    forall a b. (a -> b) -> a -> b
    $
      (Ptr ToolItem -> Ptr ToolButton)
    -> IO (Ptr ToolItem) -> IO (Ptr ToolButton)
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM (Ptr ToolItem -> Ptr ToolButton
    forall a b. Ptr a -> Ptr b
    castPtr :: Ptr ToolItem -> Ptr ToolButton) (IO (Ptr ToolItem) -> IO (Ptr ToolButton))
    -> IO (Ptr ToolItem) -> IO (Ptr ToolButton)
    forall a b. (a -> b) -> a -> b
    $
      StockId -> (Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall s a. GlibString s => s -> (Ptr CChar -> IO a) -> IO a
    forall a. StockId -> (Ptr CChar -> IO a) -> IO a
    withUTFString StockId
    stockId ((Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem))
    -> (Ptr CChar -> IO (Ptr ToolItem)) -> IO (Ptr ToolItem)
    forall a b. (a -> b) -> a -> b
    $ \Ptr CChar
    stockIdPtr ->
      Ptr CChar -> IO (Ptr ToolItem)
    gtk_tool_button_new_from_stock
    {-# LINE 157 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        stockIdPtr

    --------------------
    -- Methods

    -- | Sets @label@ as the label used for the tool button. The \"label\"
    -- property only has an effect if not overridden by a non-@Nothing@
    -- \"label_widget\" property. If both the \"label_widget\" and \"label\"
    -- properties are @Nothing@, the label is determined by the \"stock_id\"
    -- property. If the \"stock_id\" property is also @Nothing@, @button@ will not
    -- have a label.
    --
    toolButtonSetLabel :: (ToolButtonClass self, GlibString string) => self
     -> Maybe string -- ^ @label@ - a string that will be used as label, or
                     -- @Nothing@.
     -> IO ()
    toolButtonSetLabel :: forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> Maybe string -> IO ()
    toolButtonSetLabel self
    self Maybe string
    label =
      (string -> (Ptr CChar -> IO ()) -> IO ())
    -> Maybe string -> (Ptr CChar -> IO ()) -> IO ()
    forall a b c.
    (a -> (Ptr b -> IO c) -> IO c)
    -> Maybe a -> (Ptr b -> IO c) -> IO c
    maybeWith string -> (Ptr CChar -> IO ()) -> IO ()
    forall a. string -> (Ptr CChar -> IO a) -> IO a
    forall s a. GlibString s => s -> (Ptr CChar -> IO a) -> IO a
    withUTFString Maybe string
    label ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr CChar
    labelPtr ->
      (\(ToolButton ForeignPtr ToolButton
    arg1) Ptr CChar
    arg2 -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO ()) -> IO ())
    -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> Ptr CChar -> IO ()
    gtk_tool_button_set_label Ptr ToolButton
    argPtr1 Ptr CChar
    arg2)
    {-# LINE 176 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
        Ptr CChar
    labelPtr

    -- | Returns the label used by the tool button, or @Nothing@ if the tool
    -- button doesn't have a label. or uses a the label from a stock item.
    --
    toolButtonGetLabel :: (ToolButtonClass self, GlibString string) => self -> IO (Maybe string)
    toolButtonGetLabel :: forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> IO (Maybe string)
    toolButtonGetLabel self
    self =
      (\(ToolButton ForeignPtr ToolButton
    arg1) -> ForeignPtr ToolButton
    -> (Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar))
    -> (Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar)
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> IO (Ptr CChar)
    gtk_tool_button_get_label Ptr ToolButton
    argPtr1)
    {-# LINE 185 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
      IO (Ptr CChar)
    -> (Ptr CChar -> IO (Maybe string)) -> IO (Maybe string)
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= (Ptr CChar -> IO string) -> Ptr CChar -> IO (Maybe string)
    forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
    maybePeek Ptr CChar -> IO string
    forall s. GlibString s => Ptr CChar -> IO s
    peekUTFString

    -- | If set, an underline in the label property indicates that the next
    -- character should be used for the mnemonic accelerator key in the overflow
    -- menu. For example, if the label property is \"_Open\" and @useUnderline@ is
    -- @True@, the label on the tool button will be \"Open\" and the item on the
    -- overflow menu will have an underlined \'O\'.
    --
    -- Labels shown on tool buttons never have mnemonics on them; this property
    -- only affects the menu item on the overflow menu.
    --
    toolButtonSetUseUnderline :: ToolButtonClass self => self -> Bool -> IO ()
    toolButtonSetUseUnderline :: forall self. ToolButtonClass self => self -> Bool -> IO ()
    toolButtonSetUseUnderline self
    self Bool
    useUnderline =
      (\(ToolButton ForeignPtr ToolButton
    arg1) CInt
    arg2 -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO ()) -> IO ())
    -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> CInt -> IO ()
    gtk_tool_button_set_use_underline Ptr ToolButton
    argPtr1 CInt
    arg2)
    {-# LINE 200 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
        (Bool -> CInt
    forall a. Num a => Bool -> a
    fromBool Bool
    useUnderline)

    -- | Returns whether underscores in the label property are used as mnemonics
    -- on menu items on the overflow menu. See 'toolButtonSetUseUnderline'.
    --
    toolButtonGetUseUnderline :: ToolButtonClass self => self -> IO Bool
    toolButtonGetUseUnderline :: forall self. ToolButtonClass self => self -> IO Bool
    toolButtonGetUseUnderline self
    self =
      (CInt -> Bool) -> IO CInt -> IO Bool
    forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
    liftM CInt -> Bool
    forall a. (Eq a, Num a) => a -> Bool
    toBool (IO CInt -> IO Bool) -> IO CInt -> IO Bool
    forall a b. (a -> b) -> a -> b
    $
      (\(ToolButton ForeignPtr ToolButton
    arg1) -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO CInt) -> IO CInt
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO CInt) -> IO CInt)
    -> (Ptr ToolButton -> IO CInt) -> IO CInt
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> IO CInt
    gtk_tool_button_get_use_underline Ptr ToolButton
    argPtr1)
    {-# LINE 210 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)

    -- | Sets the name of the stock item. See 'toolButtonNewFromStock'. The
    -- stock_id property only has an effect if not overridden by non-@Nothing@
    -- \"label\" and \"icon_widget\" properties.
    --
    toolButtonSetStockId :: ToolButtonClass self => self
     -> Maybe StockId -- ^ @stockId@ - a name of a stock item, or @Nothing@
     -> IO ()
    toolButtonSetStockId :: forall self. ToolButtonClass self => self -> Maybe StockId -> IO ()
    toolButtonSetStockId self
    self Maybe StockId
    stockId =
      (StockId -> (Ptr CChar -> IO ()) -> IO ())
    -> Maybe StockId -> (Ptr CChar -> IO ()) -> IO ()
    forall a b c.
    (a -> (Ptr b -> IO c) -> IO c)
    -> Maybe a -> (Ptr b -> IO c) -> IO c
    maybeWith StockId -> (Ptr CChar -> IO ()) -> IO ()
    forall s a. GlibString s => s -> (Ptr CChar -> IO a) -> IO a
    forall a. StockId -> (Ptr CChar -> IO a) -> IO a
    withUTFString Maybe StockId
    stockId ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr CChar
    stockIdPtr ->
      (\(ToolButton ForeignPtr ToolButton
    arg1) Ptr CChar
    arg2 -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO ()) -> IO ())
    -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> Ptr CChar -> IO ()
    gtk_tool_button_set_stock_id Ptr ToolButton
    argPtr1 Ptr CChar
    arg2)
    {-# LINE 222 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
        Ptr CChar
    stockIdPtr

    -- | Returns the name of the stock item. See 'toolButtonSetStockId'.
    --
    toolButtonGetStockId :: ToolButtonClass self => self -> IO (Maybe StockId)
    toolButtonGetStockId :: forall self. ToolButtonClass self => self -> IO (Maybe StockId)
    toolButtonGetStockId self
    self =
      (\(ToolButton ForeignPtr ToolButton
    arg1) -> ForeignPtr ToolButton
    -> (Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar))
    -> (Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar)
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> IO (Ptr CChar)
    gtk_tool_button_get_stock_id Ptr ToolButton
    argPtr1)
    {-# LINE 230 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
      IO (Ptr CChar)
    -> (Ptr CChar -> IO (Maybe StockId)) -> IO (Maybe StockId)
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= (Ptr CChar -> IO StockId) -> Ptr CChar -> IO (Maybe StockId)
    forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
    maybePeek Ptr CChar -> IO StockId
    forall s. GlibString s => Ptr CChar -> IO s
    peekUTFString

    -- | Sets @icon@ as the widget used as icon on @button@. If @iconWidget@ is
    -- @Nothing@ the icon is determined by the \"stock_id\" property. If the
    -- \"stock_id\" property is also @Nothing@, the button will not have an icon.
    --
    toolButtonSetIconWidget :: (ToolButtonClass self, WidgetClass iconWidget) => self
     -> Maybe iconWidget -- ^ @iconWidget@ - the widget used as icon, or @Nothing@
     -> IO ()
    toolButtonSetIconWidget :: forall self iconWidget.
    (ToolButtonClass self, WidgetClass iconWidget) =>
    self -> Maybe iconWidget -> IO ()
    toolButtonSetIconWidget self
    self Maybe iconWidget
    iconWidget =
      (\(ToolButton ForeignPtr ToolButton
    arg1) (Widget ForeignPtr Widget
    arg2) -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO ()) -> IO ())
    -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->ForeignPtr Widget -> (Ptr Widget -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr Widget
    arg2 ((Ptr Widget -> IO ()) -> IO ()) -> (Ptr Widget -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr Widget
    argPtr2 ->Ptr ToolButton -> Ptr Widget -> IO ()
    gtk_tool_button_set_icon_widget Ptr ToolButton
    argPtr1 Ptr Widget
    argPtr2)
    {-# LINE 242 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
        (Widget -> (iconWidget -> Widget) -> Maybe iconWidget -> Widget
    forall b a. b -> (a -> b) -> Maybe a -> b
    maybe (ForeignPtr Widget -> Widget
    Widget ForeignPtr Widget
    forall a. ForeignPtr a
    nullForeignPtr) iconWidget -> Widget
    forall o. WidgetClass o => o -> Widget
    toWidget Maybe iconWidget
    iconWidget)

    -- | Return the widget used as icon widget on @button@. See
    -- 'toolButtonSetIconWidget'.
    --
    toolButtonGetIconWidget :: ToolButtonClass self => self
     -> IO (Maybe Widget) -- ^ returns The widget used as icon on @button@, or
                          -- @Nothing@.
    toolButtonGetIconWidget :: forall self. ToolButtonClass self => self -> IO (Maybe Widget)
    toolButtonGetIconWidget self
    self =
      (IO (Ptr Widget) -> IO Widget)
    -> IO (Ptr Widget) -> IO (Maybe Widget)
    forall a. (IO (Ptr a) -> IO a) -> IO (Ptr a) -> IO (Maybe a)
    maybeNull ((ForeignPtr Widget -> Widget, FinalizerPtr Widget)
    -> IO (Ptr Widget) -> IO Widget
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr Widget -> Widget, FinalizerPtr Widget)
    forall {a}. (ForeignPtr Widget -> Widget, FinalizerPtr a)
    mkWidget) (IO (Ptr Widget) -> IO (Maybe Widget))
    -> IO (Ptr Widget) -> IO (Maybe Widget)
    forall a b. (a -> b) -> a -> b
    $
      (\(ToolButton ForeignPtr ToolButton
    arg1) -> ForeignPtr ToolButton
    -> (Ptr ToolButton -> IO (Ptr Widget)) -> IO (Ptr Widget)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO (Ptr Widget)) -> IO (Ptr Widget))
    -> (Ptr ToolButton -> IO (Ptr Widget)) -> IO (Ptr Widget)
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> IO (Ptr Widget)
    gtk_tool_button_get_icon_widget Ptr ToolButton
    argPtr1)
    {-# LINE 254 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)

    -- | Sets @labelWidget@ as the widget that will be used as the label for
    -- @button@. If @labelWidget@ is @Nothing@ the \"label\" property is used as
    -- label. If \"label\" is also @Nothing@, the label in the stock item
    -- determined by the \"stock_id\" property is used as label. If \"stock_id\" is
    -- also @Nothing@, @button@ does not have a label.
    --
    toolButtonSetLabelWidget :: (ToolButtonClass self, WidgetClass labelWidget) => self
     -> Maybe labelWidget -- ^ @labelWidget@ - the widget used as label, or
                          -- @Nothing@
     -> IO ()
    toolButtonSetLabelWidget :: forall self iconWidget.
    (ToolButtonClass self, WidgetClass iconWidget) =>
    self -> Maybe iconWidget -> IO ()
    toolButtonSetLabelWidget self
    self Maybe labelWidget
    labelWidget =
      (\(ToolButton ForeignPtr ToolButton
    arg1) (Widget ForeignPtr Widget
    arg2) -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO ()) -> IO ())
    -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->ForeignPtr Widget -> (Ptr Widget -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr Widget
    arg2 ((Ptr Widget -> IO ()) -> IO ()) -> (Ptr Widget -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr Widget
    argPtr2 ->Ptr ToolButton -> Ptr Widget -> IO ()
    gtk_tool_button_set_label_widget Ptr ToolButton
    argPtr1 Ptr Widget
    argPtr2)
    {-# LINE 268 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
        (Widget -> (labelWidget -> Widget) -> Maybe labelWidget -> Widget
    forall b a. b -> (a -> b) -> Maybe a -> b
    maybe (ForeignPtr Widget -> Widget
    Widget ForeignPtr Widget
    forall a. ForeignPtr a
    nullForeignPtr) labelWidget -> Widget
    forall o. WidgetClass o => o -> Widget
    toWidget Maybe labelWidget
    labelWidget)

    -- | Returns the widget used as label on @button@. See
    -- 'toolButtonSetLabelWidget'.
    --
    toolButtonGetLabelWidget :: ToolButtonClass self => self
     -> IO (Maybe Widget) -- ^ returns The widget used as label on @button@, or
                          -- @Nothing@.
    toolButtonGetLabelWidget :: forall self. ToolButtonClass self => self -> IO (Maybe Widget)
    toolButtonGetLabelWidget self
    self =
      (IO (Ptr Widget) -> IO Widget)
    -> IO (Ptr Widget) -> IO (Maybe Widget)
    forall a. (IO (Ptr a) -> IO a) -> IO (Ptr a) -> IO (Maybe a)
    maybeNull ((ForeignPtr Widget -> Widget, FinalizerPtr Widget)
    -> IO (Ptr Widget) -> IO Widget
    forall obj.
    GObjectClass obj =>
    (ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
    makeNewObject (ForeignPtr Widget -> Widget, FinalizerPtr Widget)
    forall {a}. (ForeignPtr Widget -> Widget, FinalizerPtr a)
    mkWidget) (IO (Ptr Widget) -> IO (Maybe Widget))
    -> IO (Ptr Widget) -> IO (Maybe Widget)
    forall a b. (a -> b) -> a -> b
    $
      (\(ToolButton ForeignPtr ToolButton
    arg1) -> ForeignPtr ToolButton
    -> (Ptr ToolButton -> IO (Ptr Widget)) -> IO (Ptr Widget)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO (Ptr Widget)) -> IO (Ptr Widget))
    -> (Ptr ToolButton -> IO (Ptr Widget)) -> IO (Ptr Widget)
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> IO (Ptr Widget)
    gtk_tool_button_get_label_widget Ptr ToolButton
    argPtr1)
    {-# LINE 280 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)

    -- | Sets the icon for the tool button from a named themed icon. See the docs
    -- for 'IconTheme' for more details. The \"icon_name\" property only has an
    -- effect if not overridden by the \"label\", \"icon_widget\" and \"stock_id\"
    -- properties.
    --
    -- * Available since Gtk+ version 2.8
    --
    toolButtonSetIconName :: (ToolButtonClass self, GlibString string) => self
     -> string -- ^ @iconName@ - the name of the themed icon
     -> IO ()
    toolButtonSetIconName :: forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> string -> IO ()
    toolButtonSetIconName self
    self string
    iconName =
      string -> (Ptr CChar -> IO ()) -> IO ()
    forall a. string -> (Ptr CChar -> IO a) -> IO a
    forall s a. GlibString s => s -> (Ptr CChar -> IO a) -> IO a
    withUTFString string
    iconName ((Ptr CChar -> IO ()) -> IO ()) -> (Ptr CChar -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr CChar
    iconNamePtr ->
      (\(ToolButton ForeignPtr ToolButton
    arg1) Ptr CChar
    arg2 -> ForeignPtr ToolButton -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO ()) -> IO ())
    -> (Ptr ToolButton -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> Ptr CChar -> IO ()
    gtk_tool_button_set_icon_name Ptr ToolButton
    argPtr1 Ptr CChar
    arg2)
    {-# LINE 296 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
        Ptr CChar
    iconNamePtr

    -- | Returns the name of the themed icon for the tool button, see
    -- 'toolButtonSetIconName'.
    --
    -- * Available since Gtk+ version 2.8
    --
    toolButtonGetIconName :: (ToolButtonClass self, GlibString string) => self
     -> IO string -- ^ returns the icon name or @\"\"@ if the tool button has no
                  -- themed icon.
    toolButtonGetIconName :: forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> IO string
    toolButtonGetIconName self
    self =
      (\(ToolButton ForeignPtr ToolButton
    arg1) -> ForeignPtr ToolButton
    -> (Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar)
    forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
    withForeignPtr ForeignPtr ToolButton
    arg1 ((Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar))
    -> (Ptr ToolButton -> IO (Ptr CChar)) -> IO (Ptr CChar)
    forall a b. (a -> b) -> a -> b
    $ \Ptr ToolButton
    argPtr1 ->Ptr ToolButton -> IO (Ptr CChar)
    gtk_tool_button_get_icon_name Ptr ToolButton
    argPtr1)
    {-# LINE 309 "./Graphics/UI/Gtk/MenuComboToolbar/ToolButton.chs" #-}
        (toToolButton self)
      IO (Ptr CChar) -> (Ptr CChar -> IO string) -> IO string
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= \Ptr CChar
    strPtr -> if Ptr CChar
    strPtr Ptr CChar -> Ptr CChar -> Bool
    forall a. Eq a => a -> a -> Bool
    == Ptr CChar
    forall a. Ptr a
    nullPtr
                    then string -> IO string
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return string
    ""
                    else Ptr CChar -> IO string
    forall s. GlibString s => Ptr CChar -> IO s
    peekUTFString Ptr CChar
    strPtr

    --------------------
    -- Attributes

    -- | Text to show in the item.
    --
    -- Default value: @Nothing@
    --
    toolButtonLabel :: (ToolButtonClass self, GlibString string) => Attr self (Maybe string)
    toolButtonLabel :: forall self string.
    (ToolButtonClass self, GlibString string) =>
    Attr self (Maybe string)
    toolButtonLabel = (self -> IO (Maybe string))
    -> (self -> Maybe string -> IO ())
    -> ReadWriteAttr self (Maybe string) (Maybe string)
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO (Maybe string)
    forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> IO (Maybe string)
    toolButtonGetLabel
      self -> Maybe string -> IO ()
    forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> Maybe string -> IO ()
    toolButtonSetLabel

    -- | If set, an underline in the label property indicates that the next
    -- character should be used for the mnemonic accelerator key in the overflow
    -- menu.
    --
    -- Default value: @False@
    --
    toolButtonUseUnderline :: ToolButtonClass self => Attr self Bool
    toolButtonUseUnderline :: forall self. ToolButtonClass self => Attr self Bool
    toolButtonUseUnderline = (self -> IO Bool)
    -> (self -> Bool -> IO ()) -> ReadWriteAttr self Bool Bool
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO Bool
    forall self. ToolButtonClass self => self -> IO Bool
    toolButtonGetUseUnderline
      self -> Bool -> IO ()
    forall self. ToolButtonClass self => self -> Bool -> IO ()
    toolButtonSetUseUnderline

    -- | Widget to use as the item label.
    --
    toolButtonLabelWidget :: (ToolButtonClass self, WidgetClass labelWidget) => ReadWriteAttr self (Maybe Widget) (Maybe labelWidget)
    toolButtonLabelWidget :: forall self labelWidget.
    (ToolButtonClass self, WidgetClass labelWidget) =>
    ReadWriteAttr self (Maybe Widget) (Maybe labelWidget)
    toolButtonLabelWidget = (self -> IO (Maybe Widget))
    -> (self -> Maybe labelWidget -> IO ())
    -> ReadWriteAttr self (Maybe Widget) (Maybe labelWidget)
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO (Maybe Widget)
    forall self. ToolButtonClass self => self -> IO (Maybe Widget)
    toolButtonGetLabelWidget
      self -> Maybe labelWidget -> IO ()
    forall self iconWidget.
    (ToolButtonClass self, WidgetClass iconWidget) =>
    self -> Maybe iconWidget -> IO ()
    toolButtonSetLabelWidget

    -- | The stock icon displayed on the item.
    --
    -- Default value: @Nothing@
    --
    toolButtonStockId :: ToolButtonClass self => ReadWriteAttr self (Maybe StockId) (Maybe StockId)
    toolButtonStockId :: forall self.
    ToolButtonClass self =>
    ReadWriteAttr self (Maybe StockId) (Maybe StockId)
    toolButtonStockId = (self -> IO (Maybe StockId))
    -> (self -> Maybe StockId -> IO ())
    -> ReadWriteAttr self (Maybe StockId) (Maybe StockId)
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO (Maybe StockId)
    forall self. ToolButtonClass self => self -> IO (Maybe StockId)
    toolButtonGetStockId
      self -> Maybe StockId -> IO ()
    forall self. ToolButtonClass self => self -> Maybe StockId -> IO ()
    toolButtonSetStockId

    -- | The name of the themed icon displayed on the item. This property only has
    -- an effect if not overridden by \"label\", \"icon_widget\" or \"stock_id\"
    -- properties.
    --
    -- Default value: \"\"
    --
    toolButtonIconName :: (ToolButtonClass self, GlibString string) => Attr self string
    toolButtonIconName :: forall self string.
    (ToolButtonClass self, GlibString string) =>
    Attr self string
    toolButtonIconName = (self -> IO string)
    -> (self -> string -> IO ()) -> ReadWriteAttr self string string
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO string
    forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> IO string
    toolButtonGetIconName
      self -> string -> IO ()
    forall self string.
    (ToolButtonClass self, GlibString string) =>
    self -> string -> IO ()
    toolButtonSetIconName

    -- | Icon widget to display in the item.
    --
    toolButtonIconWidget :: (ToolButtonClass self, WidgetClass iconWidget) => ReadWriteAttr self (Maybe Widget) (Maybe iconWidget)
    toolButtonIconWidget :: forall self labelWidget.
    (ToolButtonClass self, WidgetClass labelWidget) =>
    ReadWriteAttr self (Maybe Widget) (Maybe labelWidget)
    toolButtonIconWidget = (self -> IO (Maybe Widget))
    -> (self -> Maybe iconWidget -> IO ())
    -> ReadWriteAttr self (Maybe Widget) (Maybe iconWidget)
    forall o a b.
    (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b
    newAttr
      self -> IO (Maybe Widget)
    forall self. ToolButtonClass self => self -> IO (Maybe Widget)
    toolButtonGetIconWidget
      self -> Maybe iconWidget -> IO ()
    forall self iconWidget.
    (ToolButtonClass self, WidgetClass iconWidget) =>
    self -> Maybe iconWidget -> IO ()
    toolButtonSetIconWidget

    --------------------
    -- Signals

    -- | This signal is emitted when the tool button is clicked with the mouse or
    -- activated with the keyboard.
    --
    onToolButtonClicked, afterToolButtonClicked :: ToolButtonClass self => self
     -> IO ()
     -> IO (ConnectId self)
    onToolButtonClicked :: forall self.
    ToolButtonClass self =>
    self -> IO () -> IO (ConnectId self)
    onToolButtonClicked = String -> Bool -> self -> IO () -> IO (ConnectId self)
    forall obj.
    GObjectClass obj =>
    String -> Bool -> obj -> IO () -> IO (ConnectId obj)
    connect_NONE__NONE String
    "clicked" Bool
    False
    afterToolButtonClicked :: forall self.
    ToolButtonClass self =>
    self -> IO () -> IO (ConnectId self)
    afterToolButtonClicked = String -> Bool -> self -> IO () -> IO (ConnectId self)
    forall obj.
    GObjectClass obj =>
    String -> Bool -> obj -> IO () -> IO (ConnectId obj)
    connect_NONE__NONE String
    "clicked" Bool
    True

    foreign import ccall safe "gtk_tool_button_new"
      gtk_tool_button_new :: ((Ptr Widget) -> ((Ptr CChar) -> (IO (Ptr ToolItem))))

    foreign import ccall safe "gtk_tool_button_new_from_stock"
      gtk_tool_button_new_from_stock :: ((Ptr CChar) -> (IO (Ptr ToolItem)))

    foreign import ccall safe "gtk_tool_button_set_label"
      gtk_tool_button_set_label :: ((Ptr ToolButton) -> ((Ptr CChar) -> (IO ())))

    foreign import ccall safe "gtk_tool_button_get_label"
      gtk_tool_button_get_label :: ((Ptr ToolButton) -> (IO (Ptr CChar)))

    foreign import ccall safe "gtk_tool_button_set_use_underline"
      gtk_tool_button_set_use_underline :: ((Ptr ToolButton) -> (CInt -> (IO ())))

    foreign import ccall safe "gtk_tool_button_get_use_underline"
      gtk_tool_button_get_use_underline :: ((Ptr ToolButton) -> (IO CInt))

    foreign import ccall safe "gtk_tool_button_set_stock_id"
      gtk_tool_button_set_stock_id :: ((Ptr ToolButton) -> ((Ptr CChar) -> (IO ())))

    foreign import ccall safe "gtk_tool_button_get_stock_id"
      gtk_tool_button_get_stock_id :: ((Ptr ToolButton) -> (IO (Ptr CChar)))

    foreign import ccall safe "gtk_tool_button_set_icon_widget"
      gtk_tool_button_set_icon_widget :: ((Ptr ToolButton) -> ((Ptr Widget) -> (IO ())))

    foreign import ccall safe "gtk_tool_button_get_icon_widget"
      gtk_tool_button_get_icon_widget :: ((Ptr ToolButton) -> (IO (Ptr Widget)))

    foreign import ccall safe "gtk_tool_button_set_label_widget"
      gtk_tool_button_set_label_widget :: ((Ptr ToolButton) -> ((Ptr Widget) -> (IO ())))

    foreign import ccall safe "gtk_tool_button_get_label_widget"
      gtk_tool_button_get_label_widget :: ((Ptr ToolButton) -> (IO (Ptr Widget)))

    foreign import ccall safe "gtk_tool_button_set_icon_name"
      gtk_tool_button_set_icon_name :: ((Ptr ToolButton) -> ((Ptr CChar) -> (IO ())))

    foreign import ccall safe "gtk_tool_button_get_icon_name"
      gtk_tool_button_get_icon_name :: ((Ptr ToolButton) -> (IO (Ptr CChar)))