1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
5
#include "bonobo/bonobo-marshal.h"
7
#define TEST_MESSAGE "test-message"
8
#define CLOSURE_MESSAGE "closure-message"
11
quit_after_timeout (gpointer data)
18
message_quit_cb (BonoboAppClient *app_client, const gchar *message, GValueArray *args)
20
g_timeout_add (1000, quit_after_timeout, NULL);
25
message_cb (BonoboAppClient *app_client, const gchar *message, GValueArray *args)
29
g_return_val_if_fail (strcmp (message, TEST_MESSAGE) == 0, NULL);
30
g_return_val_if_fail (args->n_values == 2, NULL);
31
g_return_val_if_fail (G_VALUE_HOLDS_DOUBLE (&args->values[0]), NULL);
32
g_return_val_if_fail (G_VALUE_HOLDS_STRING (&args->values[1]), NULL);
34
g_message ("message_cb: %s(%f, \"%s\")", message,
35
g_value_get_double (&args->values[0]),
36
g_value_get_string (&args->values[1]));
38
retval = g_new0 (GValue, 1);
39
g_value_init (retval, G_TYPE_DOUBLE);
40
g_value_set_double (retval, 2 * g_value_get_double (&args->values[0]));
45
test_app_hook (BonoboApplication *app, gpointer data)
47
g_message ("App '%s' created; data == %p", app->name, data);
51
new_instance_cb (BonoboApplication *app, gint argc, char *argv[])
55
g_message ("new-instance received. argc = %i; argv follows:", argc);
56
for (i = 0; i < argc; ++i)
57
g_message ("argv[%i] = \"%s\"", i, argv[i]);
58
g_message ("new-instance: returning argc (%i)", argc);
64
closure_message_cb (BonoboApplication *app, gint arg_1, gdouble arg_2, gpointer data2)
66
g_message("closure_message_cb: %p, %i, %f, %p",
67
app, arg_1, arg_2, data2);
73
main (int argc, char *argv [])
75
BonoboApplication *app;
77
Bonobo_RegistrationResult reg_res;
78
BonoboAppClient *client;
79
double msg_arg = 3.141592654;
81
gchar const *envp[] = { "LANG", NULL };
83
if (bonobo_init (&argc, argv) == FALSE)
84
g_error ("Can not bonobo_init");
87
bonobo_application_add_hook (test_app_hook, (gpointer) 0xdeadbeef);
89
app = bonobo_application_new ("Libbonobo-Test-Uniqapp");
91
closure = g_cclosure_new (G_CALLBACK (closure_message_cb),
92
(gpointer) 0xdeadbeef, NULL);
93
g_closure_set_marshal (closure, bonobo_marshal_DOUBLE__LONG_DOUBLE);
94
bonobo_application_register_message (app, CLOSURE_MESSAGE,
95
"This is a test message",
97
G_TYPE_DOUBLE, G_TYPE_LONG,
98
G_TYPE_DOUBLE, G_TYPE_NONE);
99
serverinfo = bonobo_application_create_serverinfo (app, envp);
100
reg_res = bonobo_application_register_unique (app, serverinfo, &client);
106
case Bonobo_ACTIVATION_REG_ALREADY_ACTIVE: {
107
BonoboAppClientMsgDesc const *msgdescs;
111
g_message ("I am an application client.");
112
bonobo_object_unref (BONOBO_OBJECT (app));
115
msgdescs = bonobo_app_client_msg_list (client);
118
for (i = 0; msgdescs[i].name; ++i)
119
g_message ("Application supports message '%s'", msgdescs[i].name);
121
g_message ("Sending message string '%s' with argument %f",
122
TEST_MESSAGE, msg_arg);
123
retval = bonobo_app_client_msg_send (client, TEST_MESSAGE, NULL,
124
G_TYPE_DOUBLE, msg_arg,
125
G_TYPE_STRING, "this is a string",
127
g_message ("Return value: %f", g_value_get_double (retval));
129
g_value_unset (retval);
133
g_message ("Sending message string '%s' with arguments %i and %f",
134
CLOSURE_MESSAGE, 10, 3.141592654);
135
retval = bonobo_app_client_msg_send (client, CLOSURE_MESSAGE,
138
G_TYPE_DOUBLE, 3.141592654,
140
g_message ("Return value: %f", g_value_get_double (retval));
142
g_value_unset (retval);
146
g_message ("Sending new-instance, with argc/argv");
147
i = bonobo_app_client_new_instance (client, argc, argv, NULL);
148
g_message ("new-instance returned %i", i);
150
g_message ("Asking the server to quit");
151
retval = bonobo_app_client_msg_send (client, "quit", NULL, G_TYPE_NONE);
153
g_value_unset (retval);
157
g_object_unref (client);
158
return bonobo_debug_shutdown ();
160
case Bonobo_ACTIVATION_REG_SUCCESS:
161
g_message ("I am an application server");
162
g_signal_connect (app, "message::test-message",
163
G_CALLBACK (message_cb), NULL);
164
g_signal_connect (app, "new-instance",
165
G_CALLBACK (new_instance_cb), NULL);
166
bonobo_application_new_instance (app, argc, argv);
167
g_signal_connect (app, "message::quit",
168
G_CALLBACK (message_quit_cb), NULL);
171
case Bonobo_ACTIVATION_REG_ERROR:
173
g_error("bonobo activation error when registering unique application");
178
if (app) bonobo_object_unref (BONOBO_OBJECT (app));
180
return bonobo_debug_shutdown ();