[maemo-commits] [maemo-commits] r12620 - projects/tools/trunk/maemo_testing/maemo-examples
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Jul 3 13:45:30 EEST 2007
- Previous message: [maemo-commits] r12619 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r12621 - projects/tools/trunk/maemo_testing/maemo-examples
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: jampekka
Date: 2007-07-03 13:45:18 +0300 (Tue, 03 Jul 2007)
New Revision: 12620
Added:
projects/tools/trunk/maemo_testing/maemo-examples/example_alarm.c
projects/tools/trunk/maemo_testing/maemo-examples/example_alarm_dbus.xml
Modified:
projects/tools/trunk/maemo_testing/maemo-examples/Makefile
Log:
Added alarm example
Modified: projects/tools/trunk/maemo_testing/maemo-examples/Makefile
===================================================================
--- projects/tools/trunk/maemo_testing/maemo-examples/Makefile 2007-07-03 09:27:09 UTC (rev 12619)
+++ projects/tools/trunk/maemo_testing/maemo-examples/Makefile 2007-07-03 10:45:18 UTC (rev 12620)
@@ -1,7 +1,7 @@
VERSION=1.0
DESTDIR=/
CC=gcc
-LIBRARIES=gconf-2.0 hildon-libs hildon-fm gtk+-2.0 libosso gdk-2.0 gconf-2.0 libossohelp gnome-vfs-2.0 gstreamer-0.10 osso-addressbook-1.0 libebook-1.2
+LIBRARIES=gconf-2.0 hildon-libs hildon-fm gtk+-2.0 libosso gdk-2.0 gconf-2.0 libossohelp gnome-vfs-2.0 gstreamer-0.10 osso-addressbook-1.0 libebook-1.2 libalarm
CFLAGS= -Wall -pedantic `pkg-config --cflags $(LIBRARIES)`
CDEBUG=-g
# libgstinterfaces-0.10 is defined here to work around
@@ -36,7 +36,8 @@
example_drawing \
example_camera \
example_abook \
- example_bluetooth
+ example_bluetooth \
+ example_alarm
LIBEXAMPLES=\
libapplet.so \
@@ -82,9 +83,18 @@
$(LIBEXAMPLES): %.so: %.c
$(CC) -shared $(CFLAGS) $(LDFLAGS) -o $@ $<
+
+# Generate dbus-bindings for the alarm-example
+example_alarm_dbus.h: example_alarm_dbus.xml
+ dbus-binding-tool --prefix=hello_alarm --mode=glib-server example_alarm_dbus.xml > $@
+example_alarm.c: example_alarm_dbus.h
+
+example_alarm: example_alarm.c
+
clean:
-rm -f $(EXAMPLES) $(LIBEXAMPLES)
+ -rm -f example_alarm_dbus.h
dist: clean
cd .. && \
Added: projects/tools/trunk/maemo_testing/maemo-examples/example_alarm.c
===================================================================
--- projects/tools/trunk/maemo_testing/maemo-examples/example_alarm.c 2007-07-03 09:27:09 UTC (rev 12619)
+++ projects/tools/trunk/maemo_testing/maemo-examples/example_alarm.c 2007-07-03 10:45:18 UTC (rev 12620)
@@ -0,0 +1,235 @@
+#include <gtk/gtk.h>
+#include <alarm_event.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
+#include <time.h>
+#include <string.h>
+#include <hildon-widgets/hildon-banner.h>
+
+#include "example_common.h"
+
+/* Define structure app-wide data*/
+typedef struct
+{
+ HildonProgram *program;
+ HildonWindow *window;
+
+ DBusGConnection *bus;
+} AppData;
+
+/* Define new GObject structure
+ * HelloAlarm */
+typedef struct
+{
+ GObject parent;
+ /* Define a pointer to store
+ * appdata */
+ AppData *appdata;
+} HelloAlarm;
+
+/* Define HelloAlarm's class */
+typedef struct
+{
+ GObjectClass parent;
+
+ /* HelloAlarm's say_hello-method.
+ * This will be registered as a DBUS-method */
+ void (*say_hello)(HelloAlarm *self);
+} HelloAlarmClass;
+
+/* Callback to be called when application recieves
+ * alarm message from the alarmd */
+void hello_alarm_say_hello(HelloAlarm *self)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new(
+ GTK_WINDOW(self->appdata->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ "Hello Alarm!");
+
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+/* This file is generated from example_alarm_dbus.xml-file
+ * using dbus-binding-tool and is needed to get the object's
+ * DBUS export info (dbus_glib_hello_alarm_object_info).
+ * See the Makefile for how the tool is used */
+#include "example_alarm_dbus.h"
+
+/* Initialize class data for HelloAlarm */
+static void hello_alarm_class_init(HelloAlarmClass *klass)
+{
+ /* Define implementation location of the
+ * say_hello-method */
+ klass->say_hello = hello_alarm_say_hello;
+}
+
+/* Get GType of the HelloAlarm object */
+GType hello_alarm_get_type()
+{
+ static GType type = 0;
+ /* If the type is already registered,
+ * return it, otherwise register the
+ * GTypeInfoStructure */
+ if(!type)
+ {
+ static const GTypeInfo info =
+ {
+ sizeof(HelloAlarmClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc)hello_alarm_class_init, /* class_init */
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof(HelloAlarm),
+ 0, /* n_preallocs */
+ NULL, /* instance_init */
+ };
+
+ type = g_type_register_static(G_TYPE_OBJECT, "HelloAlarmType",
+ &info, 0);
+ }
+ return type;
+}
+
+/* Tell alarmd to send a alarm */
+static void set_alarm(GtkWidget *button, AppData *appdata)
+{
+ alarm_event_t event;
+ time_t current_time;
+ struct tm *alarm_time;
+
+ /* Reset the event-structure to zero */
+ memset(&event, 0, sizeof(event));
+
+ /* Get current time and add two seconds to it,
+ * meaning that alarm should be sent at
+ * this time */
+ time(¤t_time);
+ alarm_time = localtime(¤t_time);
+ alarm_time->tm_sec += 2;
+ /* Set the alarm time */
+ event.alarm_time = mktime(alarm_time);
+
+ /* Set interface, service name, path and method
+ * name of the HelloAlarm D-BUS interface */
+ event.dbus_interface = "org.maemo.alarm_example";
+ event.dbus_service = "org.maemo.alarm_example";
+ event.dbus_path = "/org/maemo/alarm_example";
+ event.dbus_name = "hello_alarm";
+
+ /* The application presents its own dialog,
+ * so the system provided isn't needed */
+ event.flags = ALARM_EVENT_NO_DIALOG;
+
+ /* Add the alarm to alarmd and
+ * verify that it was correctly created */
+ if(!alarm_event_add(&event))
+ {
+ hildon_banner_show_information(button, "gtk-dialog-error",
+ "Couldn't set alarm");
+ g_warning("Couldn't set alarm. Error code %d\n", alarmd_get_error());
+ return;
+ }
+
+ hildon_banner_show_information(button, NULL,
+ "Alarm set");
+}
+
+/* Register GObject's D-BUS interface and
+ * request a name for the service */
+static gboolean
+register_service(DBusGConnection *bus, GObject *obj,
+ const DBusGObjectInfo *info,
+ gchar *name, gchar *path, GError **error)
+{
+ DBusGProxy *system;
+ gboolean result;
+
+ /* Install GObject's info so glib knows
+ * what kind of interface to present on
+ * D-BUS */
+ dbus_g_object_type_install_info(G_TYPE_FROM_INSTANCE(obj),
+ info);
+ /* Register the object to D-BUS using
+ * given object path */
+ dbus_g_connection_register_g_object(bus,
+ path, obj);
+
+ /* Get proxy D-BUS-service */
+ system = dbus_g_proxy_new_for_name(bus,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+
+ /* Request a name for the service from D-BUS */
+ result = org_freedesktop_DBus_request_name(system,
+ name, 0, NULL, error);
+
+ /* Check that the name request went OK */
+ if(!result)
+ {
+ g_object_unref(system);
+ return FALSE;
+ }
+
+ g_object_unref(system);
+ return TRUE;
+}
+
+int main(int argc, char **argv)
+{
+ AppData appdata;
+ GError *error = NULL;
+ GtkWidget *button;
+ HelloAlarm *server;
+
+ /* Initialize the program */
+ example_gui_initialize(&appdata.program, &appdata.window,
+ &argc, &argv, "alarm-example");
+
+ /* Connect to D-BUS session bus and verify that
+ * it succeeded */
+ appdata.bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
+ if(!appdata.bus)
+ {
+ g_error("Couldn't get DBUS connection: %s\n", error->message);
+ g_error_free(error);
+ return 1;
+ }
+
+ /* Create and initialize a HelloAlarm object and
+ * register it to D-BUS */
+ server = g_object_new(hello_alarm_get_type(), NULL);
+ server->appdata = &appdata;
+ register_service(appdata.bus, G_OBJECT(server),
+ &dbus_glib_hello_alarm_object_info,
+ "org.maemo.alarm_example",
+ "/org/maemo/alarm_example", &error);
+
+ /* Check that the registration was successfull */
+ if(error)
+ {
+ g_error("Couldn't register service: %s", error->message);
+ g_error_free(error);
+ return 1;
+ }
+
+ /* Create a button and connect its clicked-event
+ * to set_alarm-function */
+ button = gtk_button_new_with_label("Set alarm");
+ gtk_container_add(GTK_CONTAINER(appdata.window), button);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(set_alarm), &appdata);
+
+ /* Run the mainloop */
+ example_gui_run(appdata.program, appdata.window);
+
+ /* Disconnect from the dbus */
+ dbus_g_connection_unref(appdata.bus);
+
+ return 0;
+}
Added: projects/tools/trunk/maemo_testing/maemo-examples/example_alarm_dbus.xml
===================================================================
--- projects/tools/trunk/maemo_testing/maemo-examples/example_alarm_dbus.xml 2007-07-03 09:27:09 UTC (rev 12619)
+++ projects/tools/trunk/maemo_testing/maemo-examples/example_alarm_dbus.xml 2007-07-03 10:45:18 UTC (rev 12620)
@@ -0,0 +1,9 @@
+<node name="/org/maemo/alarm_example">
+ <interface name="org.maemo.alarm_example">
+ <method name="hello_alarm">
+ <annotation
+ name="org.freedesktop.DBus.GLib.CSymbol"
+ value="hello_alarm_say_hello" />
+ </method>
+ </interface>
+</node>
- Previous message: [maemo-commits] r12619 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r12621 - projects/tools/trunk/maemo_testing/maemo-examples
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
