/*
* Test to check if removing controls is borked
*
* Authors:
* Iain Holmes <iain@ximian.com>
* Michael Meeks <michael@ximian.com>
*
* Copyright (C) 2001 Ximian, Inc.
*/
#include <gnome.h>
#include <bonobo.h>
gboolean do_remote = FALSE;
gboolean do_local = TRUE;
GtkWidget *window, *vbox, *button, *placeholder1, *placeholder2;
GtkWidget *remote_widget = NULL, *inproc_widget = NULL;
#define TEST_OAFIID "OAFIID:Bonobo_Sample_Entry"
static void
remove_and_add (GtkWidget *click, gpointer useless_user_data)
{
if (do_remote) {
gtk_object_ref (GTK_OBJECT (remote_widget));
gtk_container_remove (GTK_CONTAINER (placeholder1), remote_widget);
}
if (do_local) {
gtk_object_ref (GTK_OBJECT (inproc_widget));
gtk_container_remove (GTK_CONTAINER (placeholder2), inproc_widget);
}
g_print ("Removed............\n");
if (do_remote)
gtk_container_add (GTK_CONTAINER (placeholder1), remote_widget);
if (do_local)
gtk_container_add (GTK_CONTAINER (placeholder2), inproc_widget);
g_print ("Added..............\n");
}
static void
make_remote_widget (void)
{
g_assert (remote_widget == NULL);
remote_widget = bonobo_widget_new_control (TEST_OAFIID, CORBA_OBJECT_NIL);
gtk_widget_show (remote_widget);
gtk_container_add (GTK_CONTAINER (placeholder1), remote_widget);
}
static void
make_inproc_widget (void)
{
BonoboControl *control;
GtkWidget *entry;
g_assert (inproc_widget == NULL);
entry = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (entry), "In-proc");
gtk_widget_show (entry);
control = bonobo_control_new (gtk_entry_new ());
bonobo_object_unref (BONOBO_OBJECT (control));
control = bonobo_control_new (entry);
inproc_widget = bonobo_widget_new_control_from_objref (
BONOBO_OBJREF (control), CORBA_OBJECT_NIL);
gtk_widget_show (inproc_widget);
gtk_container_add (GTK_CONTAINER (placeholder2), inproc_widget);
}
static gboolean
idle_init (gpointer data)
{
if (do_remote)
make_remote_widget ();
if (do_local)
make_inproc_widget ();
return FALSE;
}
static gboolean
quit_cb (GtkWindow *window, GdkEvent *event, gpointer dummy)
{
if (do_local)
gtk_widget_destroy (inproc_widget);
gtk_main_quit ();
return TRUE;
}
int
main (int argc, char **argv)
{
CORBA_ORB orb;
gnome_init_with_popt_table ("Fun test", "1.0", argc, argv,
oaf_popt_options, 0, NULL);
orb = oaf_init (argc, argv);
if (bonobo_init (orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) {
g_error ("Bigger problems than controls not working");
exit (0);
}
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
(GtkSignalFunc) quit_cb, NULL);
placeholder1 = gtk_frame_new ("Out of proc");
gtk_box_pack_start (GTK_BOX (vbox), placeholder1, TRUE, TRUE, 0);
placeholder2 = gtk_frame_new ("In proc");
gtk_box_pack_start (GTK_BOX (vbox), placeholder2, TRUE, TRUE, 0);
button = gtk_button_new_with_label ("Remove and add");
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (remove_and_add), NULL);
gtk_widget_show_all (window);
g_timeout_add (0, idle_init, NULL);
bonobo_main ();
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1