diff options
Diffstat (limited to 'xembed/tests')
-rw-r--r-- | xembed/tests/Makefile.am | 23 | ||||
-rw-r--r-- | xembed/tests/gtk-client.c | 53 | ||||
-rw-r--r-- | xembed/tests/gtk-common.c | 182 | ||||
-rw-r--r-- | xembed/tests/gtk-common.h | 22 | ||||
-rw-r--r-- | xembed/tests/gtk-embedder.c | 185 | ||||
-rw-r--r-- | xembed/tests/qt-client.cpp | 44 | ||||
-rw-r--r-- | xembed/tests/qt-client.h | 13 | ||||
-rw-r--r-- | xembed/tests/qt-common.cpp | 30 | ||||
-rw-r--r-- | xembed/tests/qt-common.h | 10 | ||||
-rw-r--r-- | xembed/tests/qt-embedder.cpp | 32 |
10 files changed, 373 insertions, 221 deletions
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 >K+", 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 |