On Wed, Feb 29, 2012 at 03:04:18PM +0100, Marc-André Lureau wrote: > By default, start a controller listener. > If ran with --menu, start a foreign-menu listener.
ACK for this one too > --- > gtk/controller/Makefile.am | 5 ++- > gtk/controller/dump.c | 117 > ++++++++++++++++++++++++++++++++++++++++++++ > gtk/controller/test.c | 21 ++++++-- > 3 files changed, 137 insertions(+), 6 deletions(-) > create mode 100644 gtk/controller/dump.c > > diff --git a/gtk/controller/Makefile.am b/gtk/controller/Makefile.am > index 20f1a48..916309e 100644 > --- a/gtk/controller/Makefile.am > +++ b/gtk/controller/Makefile.am > @@ -20,7 +20,7 @@ AM_VALAFLAGS = > \ > $(NULL) > > lib_LTLIBRARIES = libspice-controller.la > -noinst_PROGRAMS = test-controller > +noinst_PROGRAMS = test-controller spice-controller-dump > > BUILT_SOURCES = controller.vala.stamp > > @@ -60,6 +60,9 @@ libspice_controllerinclude_HEADERS = \ > test_controller_SOURCES = test.c > test_controller_LDADD = libspice-controller.la > > +spice_controller_dump_SOURCES = dump.c > +spice_controller_dump_LDADD = libspice-controller.la > + > controller.vala.stamp: $(libspice_controller_la_VALASOURCES) custom.vapi > @if test -z "$(VALAC)"; then \ > echo "" ; \ > diff --git a/gtk/controller/dump.c b/gtk/controller/dump.c > new file mode 100644 > index 0000000..6541dec > --- /dev/null > +++ b/gtk/controller/dump.c > @@ -0,0 +1,117 @@ > +/* Copyright (C) 2011 Red Hat, Inc. */ > + > +/* This library is free software; you can redistribute it and/or */ > +/* modify it under the terms of the GNU Lesser General Public */ > +/* License as published by the Free Software Foundation; either */ > +/* version 2.1 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 */ > +/* Lesser General Public License for more details. */ > + > +/* You should have received a copy of the GNU Lesser General Public */ > +/* License along with this library; if not, see > <http://www.gnu.org/licenses/>. */ > + > +#ifdef HAVE_CONFIG_H > +#include "config.h" > +#endif > + > +#include <stdio.h> > +#include <stdint.h> > + > +#ifdef WIN32 > +#include <windows.h> > +#else > +#include <sys/socket.h> > +#include <sys/types.h> > +#include <sys/un.h> > +#include <stdlib.h> > +#include <unistd.h> > +#include <string.h> > +#include <errno.h> > +#endif > + > +#include "spice-controller.h" > + > +SpiceCtrlController *ctrl = NULL; > +SpiceCtrlForeignMenu *menu = NULL; > +GMainLoop *loop = NULL; > + > +void signaled (GObject *gobject, const gchar *signal_name) > +{ > + g_message ("signaled: %s", signal_name); > +} > + > +void notified (GObject *gobject, GParamSpec *pspec, > + gpointer user_data) > +{ > + GValue value = { 0, }; > + GValue strvalue = { 0, }; > + > + g_return_if_fail (gobject != NULL); > + g_return_if_fail (pspec != NULL); > + > + g_value_init (&value, pspec->value_type); > + g_value_init (&strvalue, G_TYPE_STRING); > + g_object_get_property (gobject, pspec->name, &value); > + > + if (pspec->value_type == G_TYPE_STRV) { > + gchar** p = (gchar **)g_value_get_boxed (&value); > + g_message ("notify::%s == ", pspec->name); > + while (*p) > + g_message ("%s", *p++); > + } else if (G_TYPE_IS_OBJECT(pspec->value_type)) { > + GObject *o = g_value_get_object (&value); > + g_message ("notify::%s == %s", pspec->name, o ? G_OBJECT_TYPE_NAME (o) > : "null"); > + } else { > + g_value_transform (&value, &strvalue); > + g_message ("notify::%s = %s", pspec->name, g_value_get_string > (&strvalue)); > + } > + > + g_value_unset (&value); > + g_value_unset (&strvalue); > +} > + > +void connect_signals (gpointer obj) > +{ > + guint i, n_ids = 0; > + guint *ids = NULL; > + GType type = G_OBJECT_TYPE (obj); > + > + ids = g_signal_list_ids (type, &n_ids); > + for (i = 0; i < n_ids; i++) { > + const gchar *name = g_signal_name (ids[i]); > + g_signal_connect (obj, name, G_CALLBACK (signaled), (gpointer)name); > + } > +} > + > +int main (int argc, char *argv[]) > +{ > + g_type_init (); > + loop = g_main_loop_new (NULL, FALSE); > + > + if (argc > 1 && g_str_equal(argv[1], "--menu")) { > + menu = spice_ctrl_foreign_menu_new (); > + g_signal_connect (menu, "notify", G_CALLBACK (notified), NULL); > + connect_signals (menu); > + > + spice_ctrl_foreign_menu_listen (menu, NULL, NULL, NULL); > + } else { > + ctrl = spice_ctrl_controller_new (); > + g_signal_connect (ctrl, "notify", G_CALLBACK (notified), NULL); > + connect_signals (ctrl); > + > + spice_ctrl_controller_listen (ctrl, NULL, NULL, NULL); > + } > + > + g_main_loop_run (loop); > + > + if (ctrl != NULL) > + g_object_unref (ctrl); > + if (menu != NULL) > + g_object_unref (menu); > + > + return 0; > +} > + > diff --git a/gtk/controller/test.c b/gtk/controller/test.c > index e43d299..3f3eb55 100644 > --- a/gtk/controller/test.c > +++ b/gtk/controller/test.c > @@ -174,9 +174,9 @@ void notified (GObject *gobject, GParamSpec *pspec, > g_message ("notify::%s == ", pspec->name); > while (*p) > g_message ("%s", *p++); > - } else if (pspec->value_type == G_TYPE_OBJECT) { > + } else if (G_TYPE_IS_OBJECT(pspec->value_type)) { > GObject *o = g_value_get_object (&value); > - g_message ("notify::%s == %s", pspec->name, G_OBJECT_TYPE_NAME (o)); > + g_message ("notify::%s == %s", pspec->name, o ? G_OBJECT_TYPE_NAME (o) > : "null"); > } else { > g_value_transform (&value, &strvalue); > g_message ("notify::%s = %s", pspec->name, g_value_get_string > (&strvalue)); > @@ -186,6 +186,19 @@ void notified (GObject *gobject, GParamSpec *pspec, > g_value_unset (&strvalue); > } > > +void connect_signals (gpointer obj) > +{ > + guint i, n_ids = 0; > + guint *ids = NULL; > + GType type = G_OBJECT_TYPE (obj); > + > + ids = g_signal_list_ids (type, &n_ids); > + for (i = 0; i < n_ids; i++) { > + const gchar *name = g_signal_name (ids[i]); > + g_signal_connect (obj, name, G_CALLBACK (signaled), (gpointer)name); > + } > +} > + > int main (int argc, char *argv[]) > { > int spicec_pid = (argc > 1 ? atoi (argv[1]) : 0); > @@ -199,9 +212,7 @@ int main (int argc, char *argv[]) > ctrl = spice_ctrl_controller_new (); > loop = g_main_loop_new (NULL, FALSE); > g_signal_connect (ctrl, "notify", G_CALLBACK (notified), NULL); > - g_signal_connect (ctrl, "show", G_CALLBACK (signaled), "show"); > - g_signal_connect (ctrl, "hide", G_CALLBACK (signaled), "hide"); > - g_signal_connect (ctrl, "do_connect", G_CALLBACK (signaled), > "do_connect"); > + connect_signals (ctrl); > > #ifdef WIN32 > snprintf (pipe_name, PIPE_NAME_MAX_LEN, PIPE_NAME, spicec_pid); > -- > 1.7.7.6 > > _______________________________________________ > Spice-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/spice-devel
pgp4CaTe97YOs.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/spice-devel
