summaryrefslogtreecommitdiffstats
path: root/kdeui/qxembed.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/qxembed.h')
-rw-r--r--kdeui/qxembed.h234
1 files changed, 234 insertions, 0 deletions
diff --git a/kdeui/qxembed.h b/kdeui/qxembed.h
new file mode 100644
index 000000000..40772d801
--- /dev/null
+++ b/kdeui/qxembed.h
@@ -0,0 +1,234 @@
+/****************************************************************************
+ Definition of QXEmbed class
+
+ Copyright (C) 1999-2000 Troll Tech AS
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*****************************************************************************/
+
+#ifndef QXEMBED_H
+#define QXEMBED_H
+
+#include <qwidget.h>
+#include <kdelibs_export.h>
+
+#ifdef Q_WS_X11
+
+class QXEmbedData;
+
+/**
+ * A QXEmbed widget serves as an embedder that can manage one single embedded
+ * X-window. These so-called client windows can be arbitrary Qt or non Qt
+ * applications.
+ *
+ * There are two different ways of using QXEmbed,
+ * from the client side or from the embedder's side.
+ *
+ * Embedding from the client's side requires that the client knows the
+ * window identifier of the respective embedder widget. Use either
+ * embedClientIntoWindow() or the high-level wrapper processClientCmdline().
+ * This is only possible when the client is a Qt application.
+ *
+ * When using it from the embedder's side, you must know the window
+ * identifier of the window that should be embedded. Simply call embed()
+ * with this identifier as parameter. If the client is a Qt application,
+ * make sure it has called QXEmbed::initialize(). Otherwise you should
+ * probably call setProtocol(XPLAIN) before embed().
+ *
+ * Reimplement the change handler windowChanged() to catch embedding or
+ * the destruction of embedded windows. In the latter case, the
+ * embedder also emits a signal embeddedWindowDestroyed() for
+ * convenience.
+ *
+ * @short The QXEmbed widget is a graphical socket that can embed an external X-Window.
+*/
+class KDEUI_EXPORT QXEmbed : public QWidget
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ *
+ * Constructs a xembed widget.
+ *
+ * The parent, name and f arguments are passed to the QFrame
+ * constructor.
+ */
+ QXEmbed( QWidget *parent=0, const char *name=0, WFlags f = 0 );
+
+ /**
+ * Destructor. Cleans up the focus if necessary.
+ */
+ ~QXEmbed();
+
+ /**
+ * Embedded applications should call this function to make sure
+ * they support the XEMBED protocol. It is called automatically
+ * when you use embedClientIntoWindow() or
+ * processClientCmdline(). Clients might have to call it
+ * manually when you use embed().
+ */
+ static void initialize();
+
+ enum Protocol { XEMBED, XPLAIN };
+
+ /**
+ * Sets the protocol used for embedding windows.
+ * This function must be called before embedding a window.
+ * Protocol XEMBED provides maximal functionality (focus, tabs, etc)
+ * but requires explicit cooperation from the embedded window.
+ * Protocol XPLAIN provides maximal compatibility with
+ * embedded applications that do not support the XEMBED protocol.
+ * The default is XEMBED.
+ *
+ * Non KDE applications should be embedded with protocol XPLAIN.
+ * This does not happen automatically yet.
+ * You must call setProtocol() explicitly.
+ */
+
+ void setProtocol( Protocol proto );
+
+ /**
+ * Returns the protocol used for embedding the current window.
+ *
+ * @return the protocol used by QXEmbed.
+ */
+
+ Protocol protocol();
+
+ /**
+ * Embeds the window with the identifier w into this xembed widget.
+ *
+ * This function is useful if the embedder knows about the client window
+ * that should be embedded. Often it is vice versa: the client knows
+ * about its target embedder. In that case, it is not necessary to call
+ * embed(). Instead, the client will call the static function
+ * embedClientIntoWindow().
+ *
+ * @param w the identifier of the window to embed
+ * @see embeddedWinId()
+ */
+ void embed( WId w );
+
+ /**
+ * Returns the window identifier of the embedded window, or 0 if no
+ * window is embedded yet.
+ *
+ * @return the id of the embedded window (0 if no window is embedded)
+ */
+ WId embeddedWinId() const;
+
+ /**
+ * A function for clients that embed themselves. The widget
+ * client will be embedded in the window window. The application has
+ * to ensure that window is the handle of the window identifier of
+ * an QXEmbed widget.
+ *
+ * @short #processClientCmdline()
+ */
+ static void embedClientIntoWindow( QWidget* client, WId window );
+
+ /**
+ * A utility function for clients that embed theirselves. The widget
+ * client will be embedded in the window that is passed as
+ * -embed command line argument.
+ *
+ * The function returns true on success or false if no such command line
+ * parameter is specified.
+ *
+ * @see embedClientIntoWindow()
+ */
+ static bool processClientCmdline( QWidget* client, int& argc, char ** argv );
+
+ /**
+ * Sends a WM_DELETE_WINDOW message to the embedded window. This is what
+ * typically happens when you click on the close button of a window
+ * manager decoration. This should cause the embedded application to
+ * cleanly close the window. Signal embeddedWindowDestroyed() can be used
+ * to monitor the status of the embedded window.
+ */
+ void sendDelete( void );
+
+ /**
+ * Selects what shoud be done with the embedded window when the embedding
+ * window is destroyed. When the argument is true, the embedded window is
+ * kept alive, is hidden, and receives a WM_DELETE_WINDOW message using
+ * sendDelete(). This is the default. Otherwise, the destruction of the
+ * QXEmbed object simply destroys the embedded window.
+ *
+ * @see sendDelete()
+ */
+ void setAutoDelete( bool );
+
+ /**
+ * Returns the value of flag indicating what shoud be done with the
+ * embedded window when the embedding window is destroyed.
+ *
+ * @see setAutoDelete()
+ */
+ bool autoDelete() const;
+
+ /* Reimp */
+ QSize sizeHint() const;
+ QSize minimumSizeHint() const;
+ QSizePolicy sizePolicy() const;
+ bool eventFilter( QObject *, QEvent * );
+ bool customWhatsThis() const;
+ void enterWhatsThisMode(); // temporary, fix in Qt (Matthias, Mon Jul 17 15:20:55 CEST 2000 )
+ virtual void reparent( QWidget * parent, WFlags f, const QPoint & p, bool showIt = false );
+
+signals:
+ /**
+ * This signal is emitted when the embedded window has been lost (destroyed or reparented away)
+ *
+ * @see embeddedWinId()
+ */
+ // KDE4 rename to embeddedWindowLost()
+ void embeddedWindowDestroyed();
+
+protected:
+ bool event( QEvent * );
+ void keyPressEvent( QKeyEvent * );
+ void keyReleaseEvent( QKeyEvent * );
+ void focusInEvent( QFocusEvent * );
+ void focusOutEvent( QFocusEvent * );
+ void resizeEvent(QResizeEvent *);
+ void showEvent( QShowEvent * );
+ bool x11Event( XEvent* );
+
+ /**
+ * A change handler that indicates that the embedded window has been
+ * changed. The window handle can also be retrieved with
+ * embeddedWinId().
+ *
+ * @param w the handle of the window that changed
+ */
+ virtual void windowChanged( WId w );
+
+ bool focusNextPrevChild( bool next );
+
+private:
+ WId window;
+ QXEmbedData* d;
+ void checkGrab();
+ void sendSyntheticConfigureNotifyEvent();
+ void handleEmbed();
+};
+
+
+#endif
+#endif