summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-04-22 03:47:54 +0000
committerOwen Taylor <otaylor@redhat.com>2002-04-22 03:47:54 +0000
commit23d7d60971b8428429f120cbf77f3fcf70304b67 (patch)
treefbe23e0aca7302112bfbd30a1c0dedde29396c65
parent7bcfe52e21363072766a7ab428a9ab3e8552f6ff (diff)
downloadxdg-specs-23d7d60971b8428429f120cbf77f3fcf70304b67.tar.xz
Mon Apr 22 00:05:41 2002 Owen Taylor <otaylor@redhat.com>
* tests/*: Expand the tests to tests recursively nested embedders.
-rw-r--r--xembed/ChangeLog5
-rw-r--r--xembed/tests/Makefile.am23
-rw-r--r--xembed/tests/gtk-client.c53
-rw-r--r--xembed/tests/gtk-common.c182
-rw-r--r--xembed/tests/gtk-common.h22
-rw-r--r--xembed/tests/gtk-embedder.c185
-rw-r--r--xembed/tests/qt-client.cpp44
-rw-r--r--xembed/tests/qt-client.h13
-rw-r--r--xembed/tests/qt-common.cpp30
-rw-r--r--xembed/tests/qt-common.h10
-rw-r--r--xembed/tests/qt-embedder.cpp32
11 files changed, 378 insertions, 221 deletions
diff --git a/xembed/ChangeLog b/xembed/ChangeLog
index 045390c..530ee63 100644
--- a/xembed/ChangeLog
+++ b/xembed/ChangeLog
@@ -1,3 +1,8 @@
+Mon Apr 22 00:05:41 2002 Owen Taylor <otaylor@redhat.com>
+
+ * tests/*: Expand the tests to tests recursively
+ nested embedders.
+
Sun Apr 21 15:30:21 2002 Owen Taylor <otaylor@redhat.com>
* spec/xembed-spec.xml: Typo fixes from Matthias Clasen,
diff --git a/xembed/tests/Makefile.am b/xembed/tests/Makefile.am
index c33cdf2..ecce952 100644
--- a/xembed/tests/Makefile.am
+++ b/xembed/tests/Makefile.am
@@ -8,29 +8,32 @@ INCLUDES = @all_includes@ @GTK_CFLAGS@ -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPR
qt_libs = $(LIB_QT) $(LIB_KDECORE) $(LIB_KDEUI) $(LIB_KFILE) $(LIBSOCKET)
-BUILT_SOURCES=moc_qt-client.cc moc_qt-embedder.cc
+BUILT_SOURCES=moc_qt-client.cpp moc_qt-embedder.cpp moc_qt-common.cpp
-moc_qt-client.cc: qt-client.h
+moc_qt-client.cpp: qt-client.h
$(MOC) $< -o $@
-moc_qt-embedder.cc: qt-embedder.h
+moc_qt-embedder.cpp: qt-embedder.h
$(MOC) $< -o $@
-qt_client_SOURCES = qt-client.cpp qt-client.h
-qt_client_LDADD = $(qt_libs) moc_qt-client.$(OBJEXT)
+moc_qt-common.cpp: qt-common.h
+ $(MOC) $< -o $@
+
+qt_client_SOURCES = qt-client.cpp qt-client.h qt-common.cpp qt-common.h
+qt_client_LDADD = $(qt_libs) moc_qt-client.$(OBJEXT) moc_qt-common.$(OBJEXT)
-qt_embedder_SOURCES = qt-embedder.cpp qt-embedder.h
-qt_embedder_LDADD = $(qt_libs) moc_qt-embedder.$(OBJEXT)
+qt_embedder_SOURCES = qt-embedder.cpp qt-embedder.h qt-common.cpp qt-common.h
+qt_embedder_LDADD = $(qt_libs) moc_qt-embedder.$(OBJEXT) moc_qt-common.$(OBJEXT)
-CLEANFILES = moc_qt-client.cc moc_qt-embedder.cc
+CLEANFILES = moc_qt-client.cpp moc_qt-embedder.cpp moc_qt-common.cpp
#
# GTK+ examples
#
-gtk_client_SOURCES = gtk-client.c
+gtk_client_SOURCES = gtk-client.c gtk-common.c gtk-common.h
gtk_client_LDADD = $(GTK_LIBS)
-gtk_embedder_SOURCES = gtk-embedder.c
+gtk_embedder_SOURCES = gtk-embedder.c gtk-common.c gtk-common.h
gtk_embedder_LDADD = $(GTK_LIBS)
diff --git a/xembed/tests/gtk-client.c b/xembed/tests/gtk-client.c
index 70af4b8..e881d48 100644
--- a/xembed/tests/gtk-client.c
+++ b/xembed/tests/gtk-client.c
@@ -3,6 +3,8 @@
#include <gtk/gtk.h>
+#include "gtk-common.h"
+
static void
remove_buttons (GtkWidget *widget, GtkWidget *other_button)
{
@@ -67,23 +69,59 @@ add_buttons (GtkWidget *widget, GtkWidget *box)
G_CALLBACK (remove_buttons), add_button);
}
+void
+add_child (GtkWidget *vbox,
+ gboolean qt)
+{
+ Socket *socket = socket_new ();
+
+ gtk_box_pack_start (GTK_BOX (vbox), socket->box, TRUE, TRUE, 0);
+ gtk_widget_show (socket->box);
+
+ socket_start_child (socket, FALSE, qt);
+}
+
+void
+add_gtk_child (GtkWidget *widget,
+ GtkWidget *vbox)
+{
+ add_child (vbox, FALSE);
+}
+
+void
+add_qt_child (GtkWidget *widget,
+ GtkWidget *vbox)
+{
+ add_child (vbox, TRUE);
+}
+
guint32
create_child_plug (guint32 xid)
{
GtkWidget *window;
GtkWidget *hbox;
+ GtkWidget *vbox;
GtkWidget *entry;
GtkWidget *button;
GtkWidget *label;
+ GtkWidget *frame;
window = gtk_plug_new (xid);
+ frame = gtk_frame_new (NULL);
+ gtk_container_add (GTK_CONTAINER (window), frame);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
+
g_signal_connect (window, "destroy",
G_CALLBACK (remote_destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
hbox = gtk_hbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (window), hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
label = gtk_label_new ("GTK+");
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
@@ -99,10 +137,19 @@ create_child_plug (guint32 xid)
button = gtk_button_new_with_mnemonic ("_Blink");
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
-
g_signal_connect (button, "clicked",
G_CALLBACK (blink), window);
+ button = gtk_button_new_with_mnemonic ("Add _GTK+");
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (add_gtk_child), vbox);
+
+ button = gtk_button_new_with_mnemonic ("Add _Qt");
+ gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (add_qt_child), vbox);
+
add_buttons (NULL, hbox);
gtk_widget_show_all (window);
@@ -147,6 +194,8 @@ main (int argc, char *argv[])
gtk_main ();
+ wait_for_children ();
+
return 0;
}
diff --git a/xembed/tests/gtk-common.c b/xembed/tests/gtk-common.c
new file mode 100644
index 0000000..abb2294
--- /dev/null
+++ b/xembed/tests/gtk-common.c
@@ -0,0 +1,182 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <gtk/gtk.h>
+
+#include "gtk-common.h"
+
+static int n_children = 0;
+
+struct _Child
+{
+ Socket *socket;
+};
+
+static void
+plug_added (GtkWidget *widget,
+ Socket *socket)
+{
+ g_print ("Plug added to socket\n");
+
+ gtk_widget_show (socket->socket);
+ gtk_widget_hide (socket->frame);
+}
+
+static gboolean
+plug_removed (GtkWidget *widget,
+ Socket *socket)
+{
+ g_print ("Plug removed from socket\n");
+
+ gtk_widget_hide (socket->socket);
+ gtk_widget_show (socket->frame);
+
+ return TRUE;
+}
+
+static void
+socket_destroy (GtkWidget *widget,
+ Socket *socket)
+{
+ if (socket->child)
+ socket->child->socket = NULL;
+ g_free (socket);
+}
+
+Socket *
+socket_new (void)
+{
+ GtkWidget *label;
+
+ Socket *socket = g_new (Socket, 1);
+
+ socket->box = gtk_vbox_new (FALSE, 0);
+
+ socket->socket = gtk_socket_new ();
+
+ gtk_box_pack_start (GTK_BOX (socket->box), socket->socket, TRUE, TRUE, 0);
+
+ socket->frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (socket->frame), GTK_SHADOW_IN);
+ gtk_box_pack_start (GTK_BOX (socket->box), socket->frame, TRUE, TRUE, 0);
+ gtk_widget_show (socket->frame);
+
+ label = gtk_label_new (NULL);
+ gtk_label_set_markup (GTK_LABEL (label), "<span color=\"red\">Empty</span>");
+ gtk_container_add (GTK_CONTAINER (socket->frame), label);
+ gtk_widget_show (label);
+
+ g_signal_connect (socket->socket, "plug_added",
+ G_CALLBACK (plug_added), socket);
+ g_signal_connect (socket->socket, "plug_removed",
+ G_CALLBACK (plug_removed), socket);
+ g_signal_connect_after (socket->socket, "destroy",
+ G_CALLBACK (socket_destroy), socket);
+
+ socket->child = NULL;
+
+ return socket;
+}
+
+static gboolean
+child_read_watch (GIOChannel *channel, GIOCondition cond, gpointer data)
+{
+ GIOStatus status;
+ GError *error = NULL;
+ Child *child = data;
+ char *line;
+ gsize term;
+ int xid;
+
+ status = g_io_channel_read_line (channel, &line, NULL, &term, &error);
+ switch (status)
+ {
+ case G_IO_STATUS_NORMAL:
+ if (child->socket && !GTK_SOCKET (child->socket->socket)->plug_window)
+ {
+ line[term] = '\0';
+ xid = strtol (line, NULL, 0);
+ if (xid == 0)
+ {
+ fprintf (stderr, "Invalid window id '%s'\n", line);
+ }
+ else
+ {
+ gtk_socket_add_id (GTK_SOCKET (child->socket->socket), xid);
+ }
+ }
+ g_free (line);
+ return TRUE;
+ case G_IO_STATUS_AGAIN:
+ return TRUE;
+ case G_IO_STATUS_EOF:
+ n_children--;
+ if (child->socket)
+ child->socket->child = NULL;
+ g_free (child);
+ g_io_channel_shutdown (channel, FALSE, NULL);
+ return FALSE;
+ case G_IO_STATUS_ERROR:
+ fprintf (stderr, "Error reading fd from child: %s\n", error->message);
+ exit (1);
+ return FALSE;
+ default:
+ g_assert_not_reached ();
+ return FALSE;
+ }
+
+}
+
+void
+socket_start_child (Socket *socket,
+ gboolean active,
+ gboolean qt)
+{
+ char *argv[3] = { NULL, NULL, NULL };
+ char buffer[20];
+ int out_fd;
+ GIOChannel *channel;
+ GError *error = NULL;
+
+ socket->child = g_new (Child, 1);
+ socket->child->socket = socket;
+
+ argv[0] = qt ? "./qt-client" : "./gtk-client";
+
+ if (active)
+ {
+ sprintf(buffer, "%#lx", (gulong) gtk_socket_get_id (GTK_SOCKET (socket->socket)));
+ argv[1] = buffer;
+ }
+
+ if (!g_spawn_async_with_pipes (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, &out_fd, NULL, &error))
+ {
+ fprintf (stderr, "Can't exec %s: %s\n", argv[0], error->message);
+ exit (1);
+ }
+
+ n_children++;
+ channel = g_io_channel_unix_new (out_fd);
+ g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, &error);
+ if (error)
+ {
+ fprintf (stderr, "Error making channel non-blocking: %s\n", error->message);
+ exit (1);
+ }
+
+ g_io_add_watch (channel, G_IO_IN | G_IO_HUP, child_read_watch, socket->child);
+ g_io_channel_unref (channel);
+}
+
+void
+wait_for_children ()
+{
+ if (n_children)
+ {
+ g_print ("Waiting for children to exit\n");
+
+ while (n_children)
+ g_main_context_iteration (NULL, TRUE);
+ }
+
+}
diff --git a/xembed/tests/gtk-common.h b/xembed/tests/gtk-common.h
new file mode 100644
index 0000000..ac77d46
--- /dev/null
+++ b/xembed/tests/gtk-common.h
@@ -0,0 +1,22 @@
+typedef struct _Child Child;
+typedef struct _Socket Socket;
+
+struct _Socket
+{
+ GtkWidget *box;
+ GtkWidget *frame;
+ GtkWidget *socket;
+
+ Child *child;
+};
+
+
+void wait_for_children (void);
+
+Socket *socket_new (void);
+void socket_start_child (Socket *socket,
+ gboolean active,
+ gboolean qt);
+
+
+
diff --git a/xembed/tests/gtk-embedder.c b/xembed/tests/gtk-embedder.c
index 8d7c1a1..d3a7495 100644
--- a/xembed/tests/gtk-embedder.c
+++ b/xembed/tests/gtk-embedder.c
@@ -4,20 +4,13 @@
#include <stdlib.h>
#include <stdio.h>
-int n_children = 0;
+#include "gtk-common.h"
GSList *sockets = NULL;
GtkWidget *window;
GtkWidget *vbox;
-typedef struct
-{
- GtkWidget *box;
- GtkWidget *frame;
- GtkWidget *socket;
-} Socket;
-
static void
quit_cb (gpointer callback_data,
guint callback_action,
@@ -51,68 +44,9 @@ socket_destroyed (GtkWidget *widget,
Socket *socket)
{
sockets = g_slist_remove (sockets, socket);
- g_free (socket);
}
static void
-plug_added (GtkWidget *widget,
- Socket *socket)
-{
- g_print ("Plug added to socket\n");
-
- gtk_widget_show (socket->socket);
- gtk_widget_hide (socket->frame);
-}
-
-static gboolean
-plug_removed (GtkWidget *widget,
- Socket *socket)
-{
- g_print ("Plug removed from socket\n");
-
- gtk_widget_hide (socket->socket);
- gtk_widget_show (socket->frame);
-
- return TRUE;
-}
-
-static Socket *
-create_socket (void)
-{
- GtkWidget *label;
-
- Socket *socket = g_new (Socket, 1);
-
- socket->box = gtk_vbox_new (FALSE, 0);
-
- socket->socket = gtk_socket_new ();
-
- gtk_box_pack_start (GTK_BOX (socket->box), socket->socket, TRUE, TRUE, 0);
-
- socket->frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (socket->frame), GTK_SHADOW_IN);
- gtk_box_pack_start (GTK_BOX (socket->box), socket->frame, TRUE, TRUE, 0);
- gtk_widget_show (socket->frame);
-
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), "<span color=\"red\">Empty</span>");
- gtk_container_add (GTK_CONTAINER (socket->frame), label);
- gtk_widget_show (label);
-
- sockets = g_slist_prepend (sockets, socket);
-
-
- g_signal_connect (G_OBJECT (socket->socket), "destroy",
- G_CALLBACK (socket_destroyed), socket);
- g_signal_connect (G_OBJECT (socket->socket), "plug_added",
- G_CALLBACK (plug_added), socket);
- g_signal_connect (G_OBJECT (socket->socket), "plug_removed",
- G_CALLBACK (plug_removed), socket);
-
- return socket;
-}
-
-void
remove_child (void)
{
if (sockets)
@@ -122,90 +56,21 @@ remove_child (void)
}
}
-static gboolean
-child_read_watch (GIOChannel *channel, GIOCondition cond, gpointer data)
-{
- GIOStatus status;
- GError *error = NULL;
- char *line;
- gsize term;
- int xid;
-
- status = g_io_channel_read_line (channel, &line, NULL, &term, &error);
- switch (status)
- {
- case G_IO_STATUS_NORMAL:
- line[term] = '\0';
- xid = strtol (line, NULL, 0);
- if (xid == 0)
- {
- fprintf (stderr, "Invalid window id '%s'\n", line);
- }
- else
- {
- Socket *socket = create_socket ();
- gtk_box_pack_start (GTK_BOX (vbox), socket->box, TRUE, TRUE, 0);
- gtk_widget_show (socket->box);
-
- gtk_socket_add_id (GTK_SOCKET (socket->socket), xid);
- }
- g_free (line);
- return TRUE;
- case G_IO_STATUS_AGAIN:
- return TRUE;
- case G_IO_STATUS_EOF:
- n_children--;
- g_io_channel_shutdown (channel, FALSE, NULL);
- return FALSE;
- case G_IO_STATUS_ERROR:
- fprintf (stderr, "Error reading fd from child: %s\n", error->message);
- exit (1);
- return FALSE;
- default:
- g_assert_not_reached ();
- return FALSE;
- }
-
-}
-
void
add_child (gboolean active,
gboolean qt)
{
- Socket *socket;
- char *argv[3] = { NULL, NULL, NULL };
- char buffer[20];
- int out_fd;
- GIOChannel *channel;
- GError *error = NULL;
-
- argv[0] = qt ? "./qt-client" : "./gtk-client";
-
- if (active)
- {
- socket = create_socket ();
- gtk_box_pack_start (GTK_BOX (vbox), socket->box, TRUE, TRUE, 0);
- gtk_widget_show (socket->box);
- sprintf(buffer, "%#lx", (gulong) gtk_socket_get_id (GTK_SOCKET (socket->socket)));
- argv[1] = buffer;
- }
-
- if (!g_spawn_async_with_pipes (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL, &out_fd, NULL, &error))
- {
- fprintf (stderr, "Can't exec %s: %s\n", argv[0], error->message);
- exit (1);
- }
+ Socket *socket = socket_new ();
- n_children++;
- channel = g_io_channel_unix_new (out_fd);
- g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, &error);
- if (error)
- {
- fprintf (stderr, "Error making channel non-blocking: %s\n", error->message);
- exit (1);
- }
-
- g_io_add_watch (channel, G_IO_IN | G_IO_HUP, child_read_watch, NULL);
+ gtk_box_pack_start (GTK_BOX (vbox), socket->box, TRUE, TRUE, 0);
+ gtk_widget_show (socket->box);
+
+ sockets = g_slist_prepend (sockets, socket);
+
+ socket_start_child (socket, active, qt);
+
+ g_signal_connect (socket->socket, "destroy",
+ G_CALLBACK (socket_destroyed), socket);
}
void
@@ -267,33 +132,23 @@ main (int argc, char *argv[])
button = gtk_button_new_with_label ("Add Active Qt Child");
gtk_box_pack_start (GTK_BOX(vbox), button, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked",
- G_CALLBACK (add_active_qt_child), NULL);
+ g_signal_connect (button, "clicked", G_CALLBACK (add_active_qt_child), NULL);
button = gtk_button_new_with_label ("Add Passive Qt Child");
gtk_box_pack_start (GTK_BOX(vbox), button, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked",
- GTK_SIGNAL_FUNC (add_passive_qt_child), NULL);
+ g_signal_connect (button, "clicked", GTK_SIGNAL_FUNC (add_passive_qt_child), NULL);
button = gtk_button_new_with_label ("Add Active GTK+ Child");
gtk_box_pack_start (GTK_BOX(vbox), button, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked",
- G_CALLBACK (add_active_gtk_child), NULL);
+ g_signal_connect (button, "clicked", G_CALLBACK (add_active_gtk_child), NULL);
button = gtk_button_new_with_label ("Add Passive GTK+ Child");
gtk_box_pack_start (GTK_BOX(vbox), button, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked",
- G_CALLBACK (add_passive_gtk_child), NULL);
+ g_signal_connect (button, "clicked", G_CALLBACK (add_passive_gtk_child), NULL);
button = gtk_button_new_with_label ("Remove Last Child");
gtk_box_pack_start (GTK_BOX(vbox), button, FALSE, FALSE, 0);
-
- g_signal_connect (GTK_OBJECT(button), "clicked",
- G_CALLBACK (remove_child), NULL);
+ g_signal_connect (button, "clicked", G_CALLBACK (remove_child), NULL);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
@@ -302,13 +157,7 @@ main (int argc, char *argv[])
gtk_main ();
- if (n_children)
- {
- g_print ("Waiting for children to exit\n");
-
- while (n_children)
- g_main_context_iteration (NULL, TRUE);
- }
+ wait_for_children ();
return 0;
}
diff --git a/xembed/tests/qt-client.cpp b/xembed/tests/qt-client.cpp
index 04f2223..ef40739 100644
--- a/xembed/tests/qt-client.cpp
+++ b/xembed/tests/qt-client.cpp
@@ -1,4 +1,5 @@
#include <kapp.h>
+#include <qhbox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qlayout.h>
@@ -8,9 +9,10 @@
#include <qxembed.h>
#include "qt-client.h"
+#include "qt-common.h"
-XEmbedQtButtonBox::XEmbedQtButtonBox (XEmbedQtClient *client)
- : QWidget (client)
+XEmbedQtButtonBox::XEmbedQtButtonBox (QWidget *parent, XEmbedQtClient *client)
+ : QWidget (parent)
{
QHBoxLayout *layout = new QHBoxLayout (this);
layout->setAutoAdd (TRUE);
@@ -27,22 +29,33 @@ XEmbedQtButtonBox::XEmbedQtButtonBox (XEmbedQtClient *client)
XEmbedQtClient::XEmbedQtClient ()
{
- QHBoxLayout *layout = new QHBoxLayout (this);
+ setFrameStyle (QFrame::Box | QFrame::Sunken);
+
+ QVBoxLayout *vlayout = new QVBoxLayout (this);
- layout->setAutoAdd (TRUE);
+ vlayout->setAutoAdd (TRUE);
+ vlayout->setMargin (5);
- new QLabel ("Qt", this);
+ hbox_ = new QHBox (this);
+
+ new QLabel ("Qt", hbox_);
- new QLineEdit (this);
+ new QLineEdit (hbox_);
QPushButton *button;
- button = new QPushButton( "&Close", this );
+ button = new QPushButton( "&Close", hbox_ );
QObject::connect (button, SIGNAL(clicked()), this, SLOT(close()));
- button = new QPushButton( "&Blink", this );
+ button = new QPushButton( "&Blink", hbox_ );
QObject::connect (button, SIGNAL(clicked()), this, SLOT(blink()));
+ button = new QPushButton( "Add &GTK+", hbox_ );
+ QObject::connect (button, SIGNAL(clicked()), this, SLOT(addGtkChild()));
+
+ button = new QPushButton( "Add &Qt", hbox_ );
+ QObject::connect (button, SIGNAL(clicked()), this, SLOT(addQtChild()));
+
addButtons();
}
@@ -57,13 +70,24 @@ XEmbedQtClient::blink()
}
void
+XEmbedQtClient::addGtkChild()
+{
+ new XEmbedQtChildSite (this, FALSE, FALSE);
+}
+
+void
+XEmbedQtClient::addQtChild()
+{
+ new XEmbedQtChildSite (this, FALSE, TRUE);
+}
+
+void
XEmbedQtClient::addButtons ()
{
- XEmbedQtButtonBox *box = new XEmbedQtButtonBox (this);
+ XEmbedQtButtonBox *box = new XEmbedQtButtonBox (hbox_, this);
box->show();
}
-
int main( int argc, char **argv )
{
KApplication a( argc, argv, "qt-client" );
diff --git a/xembed/tests/qt-client.h b/xembed/tests/qt-client.h
index 6911b22..0ec1d66 100644
--- a/xembed/tests/qt-client.h
+++ b/xembed/tests/qt-client.h
@@ -1,4 +1,6 @@
-#include <qmainwindow.h>
+#include <qframe.h>
+
+class QHBox;
class XEmbedQtClient;
@@ -8,10 +10,10 @@ class XEmbedQtButtonBox : public QWidget
public:
- XEmbedQtButtonBox (XEmbedQtClient *client);
+ XEmbedQtButtonBox (QWidget *parent, XEmbedQtClient *client);
};
-class XEmbedQtClient : public QWidget
+class XEmbedQtClient : public QFrame
{
Q_OBJECT
@@ -22,6 +24,11 @@ class XEmbedQtClient : public QWidget
public slots:
void addButtons ();
+ private:
+ QHBox *hbox_;
+
private slots:
void blink();
+ void addGtkChild();
+ void addQtChild();
};
diff --git a/xembed/tests/qt-common.cpp b/xembed/tests/qt-common.cpp
new file mode 100644
index 0000000..9021d7e
--- /dev/null
+++ b/xembed/tests/qt-common.cpp
@@ -0,0 +1,30 @@
+#include "qt-common.h"
+
+#include <qprocess.h>
+
+XEmbedQtChildSite::XEmbedQtChildSite (QWidget *parent, bool active, bool isQt)
+ : QXEmbed (parent)
+{
+ show ();
+
+ QProcess *proc = new QProcess (this);
+
+ proc->setCommunication (QProcess::Stdout);
+
+ if (isQt)
+ proc->addArgument ("./qt-client");
+ else
+ proc->addArgument ("./gtk-client");
+
+ if (active)
+ proc->addArgument (QString::number (winId ()));
+
+ proc->start ();
+
+ if (!active)
+ {
+ QString pid_str = proc->readLineStdout ();
+ embed (pid_str.toLong ());
+ }
+}
+
diff --git a/xembed/tests/qt-common.h b/xembed/tests/qt-common.h
new file mode 100644
index 0000000..28cc56f
--- /dev/null
+++ b/xembed/tests/qt-common.h
@@ -0,0 +1,10 @@
+#include <qxembed.h>
+
+class XEmbedQtChildSite : public QXEmbed
+{
+ Q_OBJECT
+
+ public:
+
+ XEmbedQtChildSite (QWidget *parent, bool active, bool isQt);
+};
diff --git a/xembed/tests/qt-embedder.cpp b/xembed/tests/qt-embedder.cpp
index 66cd84b..e004204 100644
--- a/xembed/tests/qt-embedder.cpp
+++ b/xembed/tests/qt-embedder.cpp
@@ -2,12 +2,10 @@
#include <qmenubar.h>
#include <qmessagebox.h>
#include <qpopupmenu.h>
-#include <qprocess.h>
#include <qpushbutton.h>
#include <qvbox.h>
-#include <qxembed.h>
-
+#include "qt-common.h"
#include "qt-embedder.h"
XEmbedQtEmbedder::XEmbedQtEmbedder ()
@@ -41,34 +39,12 @@ XEmbedQtEmbedder::XEmbedQtEmbedder ()
QObject::connect (button, SIGNAL(clicked()), this, SLOT(removeChild()));
}
-
void
XEmbedQtEmbedder::addChild (bool active, bool isQt)
{
- QXEmbed *embedder = new QXEmbed (vbox_);
- embedder->show ();
-
- embedders_.append (embedder);
-
- QProcess *proc = new QProcess (this);
-
- proc->setCommunication (QProcess::Stdout);
-
- if (isQt)
- proc->addArgument ("./qt-client");
- else
- proc->addArgument ("./gtk-client");
+ XEmbedQtChildSite *site = new XEmbedQtChildSite (vbox_, active, isQt);
- if (!active)
- proc->addArgument (QString::number (embedder->winId ()));
-
- proc->start ();
-
- if (active)
- {
- QString pid_str = proc->readLineStdout ();
- embedder->embed (pid_str.toLong ());
- }
+ embedders_.append (site);
}
void
@@ -80,7 +56,7 @@ XEmbedQtEmbedder::addActiveGtkChild ()
void
XEmbedQtEmbedder::addPassiveGtkChild ()
{
- addChild (TRUE, FALSE);
+ addChild (FALSE, FALSE);
}
void