r50 - in trunk/src/target/OM-2007: applications/openmoko-taskmanager qmake

mickey at gta01.hmw-consulting.de mickey at gta01.hmw-consulting.de
Mon Sep 25 14:50:21 CEST 2006


Author: mickey
Date: 2006-09-25 12:50:20 +0000 (Mon, 25 Sep 2006)
New Revision: 50

Added:
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.h
Modified:
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/openmoko-taskmanager.pro
   trunk/src/target/OM-2007/qmake/openmoko-include.pro
Log:
taskmanager application now can change status bar via dbus


Added: trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.c	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.c	2006-09-25 12:50:20 UTC (rev 50)
@@ -0,0 +1,71 @@
+#include "callbacks.h"
+#include "footer.h"
+#include "main.h"
+
+#include <gtk/gtk.h>
+
+/* footer */
+void footer_leftbutton_clicked(GtkWidget *widget, gpointer my_data)
+{
+    g_debug( "left button clicked" );
+
+    GtkMessageDialog* dialog = gtk_message_dialog_new(GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+                                     GTK_DIALOG_DESTROY_WITH_PARENT,
+                                     GTK_MESSAGE_ERROR,
+                                     GTK_BUTTONS_CLOSE,
+                                     "Display Task List Now..." );
+    gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy(GTK_WIDGET(dialog));
+}
+
+void footer_rightbutton_clicked(GtkWidget *widget, gpointer my_data)
+{
+    g_debug( "right button clicked" );
+
+    GtkMessageDialog* dialog = gtk_message_dialog_new(GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+            GTK_DIALOG_DESTROY_WITH_PARENT,
+            GTK_MESSAGE_ERROR,
+            GTK_BUTTONS_CLOSE,
+            "Flip current/list application now..." );
+    gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy(GTK_WIDGET(dialog));
+}
+
+/* dbus */
+DBusHandlerResult signal_filter(DBusConnection *connection, DBusMessage *message, void *user_data)
+{
+    g_debug( "signal_filter called" );
+    g_debug( "type of message was %d", dbus_message_get_type(message) );
+    g_debug( "path of message was %s", dbus_message_get_path(message) );
+    g_debug( "interface of message was %s", dbus_message_get_interface(message) );
+
+    /* Application object is the user data */
+    Application* app = user_data;
+
+    /* A signal from the bus saying we are about to be disconnected */
+    if (dbus_message_is_signal
+        (message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
+        /* Tell the main loop to quit */
+        g_main_loop_quit(app->loop);
+        /* We have handled this message, don't pass it on */
+        return DBUS_HANDLER_RESULT_HANDLED;
+        }
+        /* A message on our interface */
+        else if (dbus_message_is_signal(message, "org.openmoko.dbus.TaskManager", "push_statusbar_message")) {
+            DBusError error;
+            char *s;
+            dbus_error_init (&error);
+            if (dbus_message_get_args
+                (message, &error, DBUS_TYPE_STRING, &s, DBUS_TYPE_INVALID)) {
+                g_debug("Setting status bar text to '%s", s);
+                footer_set_status( app->footer, s );
+                //FIXME: SIGSEGV, when uncommented. It now leaks! :M:
+                //dbus_free(s);
+                } else {
+                    g_print("Ping received, but error getting message: %s", error.message);
+                    dbus_error_free (&error);
+                }
+                return DBUS_HANDLER_RESULT_HANDLED;
+        }
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}


Property changes on: trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.h	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.h	2006-09-25 12:50:20 UTC (rev 50)
@@ -0,0 +1,10 @@
+#include <gtk/gtk.h>
+#include <dbus/dbus.h>
+#include "main.h"
+
+/* footer */
+void footer_leftbutton_clicked(GtkWidget *widget, gpointer my_data);
+void footer_rightbutton_clicked(GtkWidget *widget, gpointer my_data);
+
+/* dbus */
+DBusHandlerResult signal_filter (DBusConnection *connection, DBusMessage *message, void *user_data);


Property changes on: trunk/src/target/OM-2007/applications/openmoko-taskmanager/callbacks.h
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.c	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.c	2006-09-25 12:50:20 UTC (rev 50)
@@ -37,7 +37,6 @@
 
 static void footer_class_init (FooterClass *klass) /* Class Initialization */
 {
-    g_printf( "footer_class_init\n" );
     footer_signals[FOOTER_SIGNAL] = g_signal_new ("footer",
             G_TYPE_FROM_CLASS (klass),
             G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
@@ -71,12 +70,14 @@
 
 GtkWidget* footer_new() /* Construction */
 {
-    g_printf( "footer_new\n" );
     return GTK_WIDGET(g_object_new(footer_get_type(), NULL));
 }
 
-void footer_clear (Footer *f) /* Destruction */
+void footer_clear(Footer *f) /* Destruction */
 {
-    g_printf( "footer_clear\n" );
 }
 
+void footer_set_status(Footer *f, const char* s)
+{
+    gtk_statusbar_push( f->statusbar, 1, s );
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.h	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/footer.h	2006-09-25 12:50:20 UTC (rev 50)
@@ -1,5 +1,5 @@
-#ifndef __OPENMOKO_FOOTER_H__
-#define __OPENMOKO_FOOTER_H__
+#ifndef OPENMOKO_FOOTER_H
+#define OPENMOKO_FOOTER_H
 
 #include <glib.h>
 #include <glib-object.h>
@@ -36,6 +36,8 @@
 GtkWidget*     footer_new             (void);
 void           footer_clear           (Footer *f);
 
+void           footer_set_status      (Footer *f, const char* s);
+
 G_END_DECLS
 
-#endif /* __OPENMOKO_FOOTER_H__ */
+#endif /* OPENMOKO_FOOTER_H */

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.c	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.c	2006-09-25 12:50:20 UTC (rev 50)
@@ -1,19 +1,41 @@
-#include "footer.h"
+#include "main.h"
+#include "callbacks.h"
 
-#include <gtk/gtk.h>
-
 int main( int argc, char **argv )
 {
+    Application* app = g_malloc( sizeof(Application) );
+    DBusError error;
+    dbus_error_init(&error);
+
+    app->loop = g_main_loop_new( NULL, FALSE );
+
+    // using the low-level dbus interface here to get the point across
+    // final version should rather create a task manager gobject and hook
+    // into the dbus-glib API
+    app->bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
+    if (!app->bus) {
+        g_warning ("Failed to connect to the D-BUS daemon: %s", error.message);
+        dbus_error_free(&error);
+        return 1;
+    }
+
     gtk_init (&argc, &argv);
 
-    GtkWidget* window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
-    gtk_widget_show( window );
+    app->window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+    gtk_widget_show( app->window );
+    app->footer = FOOTER(footer_new());
+    gtk_container_add( GTK_CONTAINER(app->window), GTK_WIDGET(app->footer) );
+    // this violates the privacy concept, but it's a demo for now...
+    g_signal_connect( GTK_WIDGET(app->footer->leftbutton), "clicked", G_CALLBACK(footer_leftbutton_clicked), NULL );
+    g_signal_connect( GTK_WIDGET(app->footer->rightbutton), "clicked", G_CALLBACK(footer_rightbutton_clicked), NULL );
 
-    Footer* footer = footer_new();
-    gtk_container_add( GTK_CONTAINER(window), GTK_WIDGET(footer) );
+    gtk_widget_show_all( GTK_WIDGET(app->footer) );
 
-    gtk_widget_show_all( footer );
-    gtk_main();
+    dbus_connection_setup_with_g_main(app->bus, NULL);
+    dbus_bus_add_match(app->bus, "type='signal',interface='org.openmoko.dbus.TaskManager'", &error );
+    dbus_connection_add_filter(app->bus, signal_filter, app, NULL );
 
+    g_main_loop_run( app->loop );
+    g_free( app );
     return 0;
 }

Added: trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.h	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.h	2006-09-25 12:50:20 UTC (rev 50)
@@ -0,0 +1,17 @@
+#ifndef MYAPP_MAIN_H
+#define MYAPP_MAIN_H
+
+#include "footer.h"
+#include <glib/gmain.h>
+#include <dbus/dbus.h>
+#include <gtk/gtkwidget.h>
+
+/* Types */
+typedef struct _Application {
+    DBusConnection* bus;
+    GMainLoop* loop;
+    GtkWidget* window;
+    Footer* footer;
+} Application;
+
+#endif /* MAIN_H */


Property changes on: trunk/src/target/OM-2007/applications/openmoko-taskmanager/main.h
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/openmoko-taskmanager.pro
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/openmoko-taskmanager.pro	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/openmoko-taskmanager.pro	2006-09-25 12:50:20 UTC (rev 50)
@@ -1,6 +1,10 @@
-HEADERS = footer.h
-SOURCES = footer.c main.c
+HEADERS = footer.h callbacks.h main.h
+SOURCES = footer.c callbacks.c main.c
 
-PKGCONFIG += gtk+-2.0
+PKGCONFIG += gtk+-2.0 dbus-glib-1
 
+SERVICES = services.xml
+
+DEFINES += DBUS_API_SUBJECT_TO_CHANGE
+
 include ( ../../qmake/openmoko-include.pro )

Modified: trunk/src/target/OM-2007/qmake/openmoko-include.pro
===================================================================
--- trunk/src/target/OM-2007/qmake/openmoko-include.pro	2006-09-23 13:43:11 UTC (rev 49)
+++ trunk/src/target/OM-2007/qmake/openmoko-include.pro	2006-09-25 12:50:20 UTC (rev 50)
@@ -12,3 +12,11 @@
 MOC_DIR=.moc/$(PLATFORM)
 OBJECTS_DIR=.obj/$(PLATFORM)
 
+QMAKE_DBUS_CC  = dbus-binding-tool
+dbus-binding-tool.commands = $${QMAKE_DBUS_CC} --mode=glib-server ${QMAKE_FILE_IN} >${QMAKE_FILE_OUT}
+dbus-binding-tool.output = $$OUT_PWD/${QMAKE_FILE_BASE}.h
+dbus-binding-tool.input = SERVICES
+dbus-binding-tool.CONFIG = no_link
+dbus-binding-tool.variable_out = HEADERS
+dbus-binding-tool = SERVICES
+QMAKE_EXTRA_UNIX_COMPILERS += dbus-binding-tool





More information about the commitlog mailing list