{-# LINE 2 "./Graphics/UI/Gtk/Embedding/Socket.chs" #-} -- -*-haskell-*- -- GIMP Toolkit (GTK) Widget Socket -- -- Author : Axel Simon, Andy Stewart -- -- Created: 23 May 2001 -- -- Copyright (C) 1999-2005 Axel Simon -- Copyright (C) 2009 Andy Stewart -- -- 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) -- -- Container for widgets from other processes -- module Graphics.UI.Gtk.Embedding.Socket ( -- * Detail -- -- | Together with 'Plug', 'Socket' provides the ability to embed widgets from -- one process into another process in a fashion that is transparent to the -- user. One process creates a 'Socket' widget and, passes the that widget's -- window ID to the other process, which then creates a 'Plug' with that window -- ID. Any widgets contained in the 'Plug' then will appear inside the first -- applications window. -- -- The socket's window ID is obtained by using 'socketGetId'. Before using -- this function, the socket must have been realized, and for hence, have been -- added to its parent. -- -- * Obtaining the window ID of a socket. -- -- > socket <- socketNew -- > widgetShow socket -- > containerAdd parent socket -- > -- > -- The following call is only necessary if one of -- > -- the ancestors of the socket is not yet visible. -- > -- -- > widgetRealize socket -- > socketId <- socketGetId socket -- > putStrLn ("The ID of the sockets window is " ++ show socketId) -- -- Note that if you pass the window ID of the socket to another process that -- will create a plug in the socket, you must make sure that the socket widget -- is not destroyed until that plug is created. Violating this rule will cause -- unpredictable consequences, the most likely consequence being that the plug -- will appear as a separate toplevel window. You can check if the plug has -- been created by calling 'socketHasPlug'. -- If this returns @True@, then the plug has been successfully created inside -- of the socket. -- -- When Gtk+ is notified that the embedded window has been destroyed, then -- it will destroy the socket as well. You should always, therefore, be -- prepared for your sockets to be destroyed at any time when the main event -- loop is running. -- -- The communication between a 'Socket' and a 'Plug' follows the XEmbed -- protocol. This protocol has also been implemented in other toolkits, e.g. -- Qt, allowing the same level of integration when embedding a Qt widget in -- Gtk+ or vice versa. -- * Class Hierarchy -- | -- @ -- | 'GObject' -- | +----'Object' -- | +----'Widget' -- | +----'Container' -- | +----Socket -- @ {-# LINE 116 "./Graphics/UI/Gtk/Embedding/Socket.chs" #-} ) where import Control.Monad (liftM) import Data.Maybe (isJust) import System.Glib.FFI import System.Glib.Attributes import System.Glib.Properties import Graphics.UI.Gtk.Abstract.Object (makeNewObject) import Graphics.UI.Gtk.Types {-# LINE 126 "./Graphics/UI/Gtk/Embedding/Socket.chs" #-} import Graphics.UI.Gtk.Signals {-# LINE 127 "./Graphics/UI/Gtk/Embedding/Socket.chs" #-} import Graphics.UI.Gtk.Embedding.Embedding import Graphics.UI.Gtk.General.Structs {-# LINE 133 "./Graphics/UI/Gtk/Embedding/Socket.chs" #-}