r1860 - trunk/src/target/OM-2007/applications/openmoko-footer/src

rob at sita.openmoko.org rob at sita.openmoko.org
Fri Apr 27 16:44:55 CEST 2007


Author: rob
Date: 2007-04-27 16:44:54 +0200 (Fri, 27 Apr 2007)
New Revision: 1860

Modified:
   trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.c
   trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.h
   trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.c
   trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.h
   trunk/src/target/OM-2007/applications/openmoko-footer/src/main.c
   trunk/src/target/OM-2007/applications/openmoko-footer/src/main.h
Log:
Switch footer to using X properties for control (+ significant refactoring and
improvements.)


Modified: trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.c	2007-04-27 14:44:13 UTC (rev 1859)
+++ trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.c	2007-04-27 14:44:54 UTC (rev 1860)
@@ -98,14 +98,14 @@
   //function for "tap" action, execute "openmoko-clocks application".
     if (done == 1)
     {
-      g_debug ("tab");
+      g_debug ("tap");
       mbcommand(dpy, MB_CMD_NEXT, NULL);
       return;
     }
   //function for "tap with hold" action, pop a popupmenu to change time format.
     else if (done == 2)
     {
-      g_debug ("tab hold");
+      g_debug ("tap hold");
       mbcommand(dpy, MB_CMD_PREV, NULL);
     }
   /* Fixme : click event
@@ -116,54 +116,200 @@
   */
 }
 
-
-/* dbus */
-/**
-*@brief dbus filter function, which use to receive and filter dbus message.
-*@param connection	DBusConnection
-*@param message		DBusMessage
-*@param user_data	
-*@return none
-*/
-DBusHandlerResult signal_filter(DBusConnection *connection, DBusMessage *message, void *user_data)
+GdkFilterReturn
+target_window_event_filter_cb (GdkXEvent *xevent, GdkEvent *event, gpointer 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));
+  MokoFooterApp *app = (MokoFooterApp *)user_data;
 
-    /* Application object is the user data */
-    MokoFooter* app = user_data;
+  XEvent *xev;
+  gchar *message;
 
-    /* A signal from the bus saying we are about to be disconnected */
-    if (dbus_message_is_signal
-        (message, DBUS_INTERFACE_LOCAL, "Disconnected")) 
+  xev = (XEvent *) xevent;
+
+  if (xev->type == PropertyNotify)
+  {
+    if (xev->xproperty.atom == 
+        gdk_x11_get_xatom_by_name ("_MOKO_STATUS_MESSAGE"))
     {
-        /* 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;
+      Atom actual_type;
+      int actual_format;
+      unsigned long nitems;
+      unsigned long bytes;
+      guchar *data;
+      Display *xdisplay;
+      Window w;
+
+      xdisplay = gdk_x11_get_default_xdisplay ();
+
+      w = GDK_WINDOW_XID (app->target_window);
+
+      XGetWindowProperty (xdisplay,
+          w,
+          gdk_x11_get_xatom_by_name ("_MOKO_STATUS_MESSAGE"),
+          0, 512, FALSE,
+          AnyPropertyType,
+          &actual_type,
+          &actual_format,
+          &nitems,
+          &bytes,
+          &data);
+
+        if (nitems > 0)
+        {
+          message = g_strndup (data, nitems);
+          footer_set_status_message (FOOTER (app->footer), message);
+          g_free (message);
+        }
+
+        XFree (data);
     }
-        /* A message on our interface */
-    else if (dbus_message_is_signal(message, "org.openmoko.dbus.TaskManager", "push_statusbar_message")) 
+
+    if (xev->xproperty.atom == 
+        gdk_x11_get_xatom_by_name ("_MOKO_STATUS_PROGRESS"))
     {
-        DBusError error;
-        char *s;
-        dbus_error_init (&error);
-        if (dbus_message_get_args
-                (message, &error, DBUS_TYPE_STRING, &s, DBUS_TYPE_INVALID)) 
+      Atom actual_type;
+      int actual_format;
+      unsigned long nitems;
+      unsigned long bytes;
+      guchar *data;
+      Display *xdisplay;
+      Window w;
+
+      xdisplay = gdk_x11_get_default_xdisplay ();
+
+      w = GDK_WINDOW_XID (app->target_window);
+
+      XGetWindowProperty (xdisplay,
+          w,
+          gdk_x11_get_xatom_by_name ("_MOKO_STATUS_PROGRESS"),
+          0, sizeof (gdouble), FALSE,
+          AnyPropertyType,
+          &actual_type,
+          &actual_format,
+          &nitems,
+          &bytes,
+          &data);
+
+        if (nitems > 0)
         {
-            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);
+          gdouble progress;
+
+          progress = *((gdouble *)data);
+          footer_set_status_progress (FOOTER (app->footer), progress);
         }
-        else
+
+        XFree (data);
+    }
+  }
+
+  return GDK_FILTER_CONTINUE;
+}
+
+GdkFilterReturn 
+root_window_event_filter_cb (GdkXEvent *xevent, GdkEvent *event, gpointer user_data)
+{
+  MokoFooterApp *app = (MokoFooterApp *)user_data;
+  gchar *message;
+  XEvent *xev;
+
+  xev = (XEvent *) xevent;
+
+  if (xev->type == PropertyNotify)
+  {
+    if (xev->xproperty.atom == 
+        gdk_x11_get_xatom_by_name ("_NET_ACTIVE_WINDOW"))
+    {
+      Atom actual_type;
+      int actual_format;
+      unsigned long nitems;
+      unsigned long bytes;
+      guchar *data;
+      Display *xdisplay;
+      Window xroot_window;
+      Window w;
+
+      xdisplay = gdk_x11_get_default_xdisplay ();
+      xroot_window = gdk_x11_get_default_root_xwindow ();
+
+      XGetWindowProperty (xdisplay, 
+          xroot_window, 
+          gdk_x11_get_xatom_by_name ("_NET_ACTIVE_WINDOW"),
+          0, 3, FALSE, 
+          AnyPropertyType,
+          &actual_type,
+          &actual_format,
+          &nitems,
+          &bytes,
+          &data);
+
+      w = (Window)((gint32 *)data)[0];
+
+      XFree (data);
+
+      if (w != 0)
+      {
+        if (app->target_window == NULL || w != GDK_WINDOW_XID (app->target_window))
         {
-            g_print("Ping received, but error getting message: %s", error.message);
-                    dbus_error_free (&error);
+          if (app->target_window != NULL)
+          {
+            gdk_window_remove_filter (app->target_window, 
+                (GdkFilterFunc)target_window_event_filter_cb, app);
+
+            gdk_window_set_events (app->target_window, 
+            gdk_window_get_events (app->target_window) & ~GDK_PROPERTY_CHANGE_MASK);
+          }
+
+          app->target_window = gdk_window_foreign_new (w);
+          gdk_window_set_events (app->target_window, 
+              gdk_window_get_events (app->target_window) | GDK_PROPERTY_CHANGE_MASK);
+          gdk_window_add_filter (app->target_window, 
+              (GdkFilterFunc)target_window_event_filter_cb, app);
         }
-        return DBUS_HANDLER_RESULT_HANDLED;
+
+        XGetWindowProperty (xdisplay,
+          w,
+          gdk_x11_get_xatom_by_name ("_MOKO_STATUS_MESSAGE"),
+          0, 512, FALSE,
+          AnyPropertyType,
+          &actual_type,
+          &actual_format,
+          &nitems,
+          &bytes,
+          &data);
+
+        if (nitems > 0)
+        {
+          message = g_strndup (data, nitems);
+          footer_set_status_message (FOOTER (app->footer), message);
+          g_free (message);
+        }
+
+        XFree (data);
+
+        XGetWindowProperty (xdisplay,
+          w,
+          gdk_x11_get_xatom_by_name ("_MOKO_STATUS_PROGRESS"),
+          0, sizeof (gdouble), FALSE,
+          AnyPropertyType,
+          &actual_type,
+          &actual_format,
+          &nitems,
+          &bytes,
+          &data);
+
+        if (nitems > 0)
+        {
+          gdouble progress;
+
+          progress = *((gdouble *)data);
+          footer_set_status_progress (FOOTER (app->footer), progress);
+        }
+
+        XFree (data);
+      }
     }
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+  }
+
+  return GDK_FILTER_CONTINUE;
 }
+

Modified: trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.h	2007-04-27 14:44:13 UTC (rev 1859)
+++ trunk/src/target/OM-2007/applications/openmoko-footer/src/callbacks.h	2007-04-27 14:44:54 UTC (rev 1860)
@@ -35,5 +35,11 @@
 
 void footer_rightbutton_clicked(GtkWidget *widget, gpointer my_data);
 
+GdkFilterReturn target_window_event_filter_cb (GdkXEvent *xevent, 
+    GdkEvent *event, gpointer user_data);
+
+GdkFilterReturn root_window_event_filter_cb (GdkXEvent *xevent, 
+    GdkEvent *event, gpointer user_data);
+
 /* dbus */
 DBusHandlerResult signal_filter (DBusConnection *connection, DBusMessage *message, void *user_data);

Modified: trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.c	2007-04-27 14:44:13 UTC (rev 1859)
+++ trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.c	2007-04-27 14:44:54 UTC (rev 1860)
@@ -16,76 +16,32 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
  */
+
 #include "footer.h"
 
-enum {
-    FOOTER_SIGNAL,
-    LAST_SIGNAL
-};
+G_DEFINE_TYPE (Footer, footer, GTK_TYPE_HBOX);
 
-static void footer_class_init          (FooterClass *klass);
-static void footer_init                (Footer      *f);
+#define FOOTER_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_FOOTER, FooterPrivate))
 
-static guint footer_signals[LAST_SIGNAL] = { 0 };
+typedef struct _FooterPrivate FooterPrivate;
 
-/**
-*@brief retrun fooer type.
-*@param none
-*@return GType
-*/
-GType footer_get_type (void) /* Typechecking */
+struct _FooterPrivate
 {
-    static GType f_type = 0;
+};
 
-    if (!f_type)
-    {
-        static const GTypeInfo f_info =
-        {
-            sizeof (FooterClass),
-            NULL, /* base_init */
-            NULL, /* base_finalize */
-            (GClassInitFunc) footer_class_init,
-            NULL, /* class_finalize */
-            NULL, /* class_data */
-            sizeof (Footer),
-            0,
-            (GInstanceInitFunc) footer_init,
-            NULL
-        };
+static void
+footer_class_init (FooterClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-        f_type = g_type_register_static(GTK_TYPE_HBOX, "Footer", &f_info, 0);
-    }
-
-    return f_type;
+  g_type_class_add_private (klass, sizeof (FooterPrivate));
 }
 
-/**
-*@brief initialize footer class.
-*@param klass	FooterClass
-*@return none
-*/
-static void footer_class_init (FooterClass *Klass) /* Class Initialization */
-{
-    footer_signals[FOOTER_SIGNAL] = g_signal_new ("footer",
-            G_TYPE_FROM_CLASS (Klass),
-            G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
-            G_STRUCT_OFFSET (FooterClass, footer),
-            NULL,
-            NULL,
-            g_cclosure_marshal_VOID__VOID,
-            G_TYPE_NONE, 0);
-}
-
-/**
-*@brief initialize footer UI.
-*@param f	Footer instance
-*@return none
-*/
 static void footer_init (Footer *f) /* Instance Construction */
 {
-    PangoFontDescription* PangoFont = pango_font_description_new(); //get system default PangoFontDesc
+    PangoFontDescription *PangoFont = pango_font_description_new(); //get system default PangoFontDesc
 
-/*left image*/
     f->LeftEventBox = gtk_event_box_new (); 
     gtk_widget_show (GTK_WIDGET (f->LeftEventBox));
     gtk_event_box_set_visible_window (GTK_EVENT_BOX(f->LeftEventBox),FALSE);
@@ -96,21 +52,31 @@
     gtk_widget_show (GTK_WIDGET (f->LeftImage));
     gtk_container_add ( GTK_CONTAINER (f->LeftEventBox), f->LeftImage);
 
-/*Label to show dbus message */
+/*
     f->CenterLabel = gtk_label_new("OpenMoko Taskmanager");
     gtk_widget_show (GTK_WIDGET (f->CenterLabel));
     gtk_widget_set_name (GTK_WIDGET (f->CenterLabel), "label_footer");
     gtk_misc_set_alignment (GTK_MISC (f->CenterLabel), LABEL_ALIGNMENT_X, LABEL_ALIGNMENT_Y);
     gtk_label_set_single_line_mode (GTK_LABEL (f->CenterLabel), TRUE);
+
     if (PangoFont){
         pango_font_description_set_size (PangoFont, FONT_SIZE);
         gtk_widget_modify_font (GTK_WIDGET (f->CenterLabel), PangoFont);
     }
+
     gtk_label_set_ellipsize (GTK_LABEL (f->CenterLabel), PANGO_ELLIPSIZE_END);
     gtk_box_pack_start (GTK_BOX (f), GTK_WIDGET (f->CenterLabel), TRUE, TRUE, LABEL_PADDING);
     gtk_label_set_text (GTK_LABEL (f->CenterLabel), "OpenMoko Task Manager");
+*/
 
-/*right image*/
+    f->ProgressBar = gtk_progress_bar_new();
+    gtk_widget_show (f->ProgressBar);
+    gtk_progress_bar_set_bar_style (f->ProgressBar, GTK_PROGRESS_CONTINUOUS);
+    gtk_box_pack_start( f, GTK_WIDGET(f->ProgressBar), TRUE, TRUE, 0);
+    gtk_progress_bar_set_fraction (f->ProgressBar, 0);
+    gtk_progress_bar_set_text (f->ProgressBar, "OpenMoko TaskManager");
+    gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (f->ProgressBar), PANGO_ELLIPSIZE_END);
+
     f->RightEventBox = gtk_event_box_new (); 
     gtk_widget_show (f->RightEventBox);
     gtk_event_box_set_visible_window (GTK_EVENT_BOX(f->RightEventBox),FALSE);
@@ -120,74 +86,20 @@
     f->RightImage = gtk_image_new_from_file (PKGDATADIR"/icon_app_toggle.png");
     gtk_widget_show (GTK_WIDGET (f->RightImage));
     gtk_container_add (GTK_CONTAINER (f->RightEventBox), f->RightImage);
-
-/*progressbar*/
-/*
-    f->progressbar = gtk_progress_bar_new();
-    gtk_widget_show (f->progressbar);
-    gtk_progress_bar_set_bar_style (f->progressbar, GTK_PROGRESS_CONTINUOUS);
-    gtk_box_pack_start( f, GTK_WIDGET(f->progressbar), TRUE, TRUE, 0 );
-    gtk_progress_bar_set_fraction (f->progressbar, 0.5);
-    gtk_progress_bar_set_text (f->progressbar, "OpenMoko TaskManager");
-    */
-
 }
 
-/**
-*@brief create Footer widget object.
-*@param none
-*@return footer widget of GtkWidget type.
-*/
-GtkWidget* footer_new() /* Construction */
+
+GtkWidget* footer_new()
 {
-    return GTK_WIDGET(g_object_new(footer_get_type(), NULL));
+    return GTK_WIDGET(g_object_new(TYPE_FOOTER, NULL));
 }
 
-/**
-*@brief clear footer widget
-*/
-void footer_clear(Footer *f) /* Destruction */
+void footer_set_status_message (Footer *f, const gchar *text)
 {
-     if (!f) g_free (f);
+  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (f->ProgressBar), text);
 }
 
-/**
-*@brief set footer progressbar status.
-*@param f    Footer reference
-*@param s    string which is consist of status message and progressbar percent,
-*            the string of message and percent is connected by symbol "@".
-*@return none
-*/
-void footer_set_status(Footer *f, const char* s)
+void footer_set_status_progress (Footer *f, gdouble fraction)
 {
-//    gtk_statusbar_push( f->statusbar, 1, s );
-    gtk_label_set_text (GTK_LABEL (f->CenterLabel), s);
-    /*char message[128];
-    char str_fraction[3];
-    char* p_fraction;
-    int StrLength;
-    gdouble fraction;
-    int i;
-
-    strcpy(message,s);
-    if(p_fraction = strrchr(s, '@'))
-         StrLength = strlen(s)-strlen(p_fraction);
-    else StrLength = strlen(s);
-
-    memcpy(message,s,StrLength);
-    message[StrLength] = '\0';
-    for (i=0; i<4; i++)
-         str_fraction[i] = s[StrLength+1+i];
-    str_fraction[3] = '\0';
-
-    fraction = atoi(str_fraction)/(double)100;
-
-    g_print ("messsage is : %s\nthe char pointer is : %s\nlength of s and p_fraction: %d\nfraction is %lf:",message,p_fraction,StrLength,fraction );
-
-    gtk_progress_bar_set_text (f->progressbar, message);
-
-    if(fraction<=1 && fraction>=0)
-         gtk_progress_bar_set_fraction (f->progressbar, fraction);
-         */
-
+  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (f->ProgressBar), fraction);
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.h	2007-04-27 14:44:13 UTC (rev 1859)
+++ trunk/src/target/OM-2007/applications/openmoko-footer/src/footer.h	2007-04-27 14:44:54 UTC (rev 1860)
@@ -43,46 +43,38 @@
 /*Pango Font spec*/
 #define FONT_SIZE 12*PANGO_SCALE
 
-#define FOOTER_TYPE            (footer_get_type())
-#define FOOTER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), FOOTER_TYPE, Footer))
-#define FOOTER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), FOOTER_TYPE, FooterClass))
-#define IS_FOOTER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FOOTER_TYPE))
-#define IS_FOOTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FOOTER_TYPE))
+#define TYPE_FOOTER            (footer_get_type())
+#define FOOTER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FOOTER, Footer))
+#define FOOTER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FOOTER, FooterClass))
+#define IS_FOOTER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FOOTER))
+#define IS_FOOTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FOOTER))
 
 typedef struct _Footer    Footer;
 typedef struct _FooterClass    FooterClass;
 
-/**
- * @typedef OMFooter
- *
- * Opaque structure used for representing an Openmoko footer app UI.
- */
 struct _Footer
 {
     GtkHBox hbox;
 
-    GtkWidget* LeftEventBox;
-    GtkWidget* LeftImage;
-    GtkWidget* CenterLabel;
-    GtkWidget* RightEventBox;
-    GtkWidget* RightImage; 
+    GtkWidget *LeftEventBox;
+    GtkWidget *LeftImage;
+    GtkWidget *CenterLabel;
+    GtkWidget *RightEventBox;
+    GtkWidget *RightImage; 
+    GtkWidget *ProgressBar;
 };
 
 struct _FooterClass
 {
     GtkHBoxClass parent_class;
-
-    void (*footer) (Footer *f);
 };
 
 GType footer_get_type (void);
+GtkWidget *footer_new (void);
 
-GtkWidget* footer_new (void);
+void footer_set_status_message (Footer *f, const gchar *text);
+void footer_set_status_progress (Footer *f, gdouble fraction);
 
-void footer_clear (Footer *f);
-
-void footer_set_status (Footer *f, const char* s);
-
 G_END_DECLS
 
 #endif /* OPENMOKO_FOOTER_H */

Modified: trunk/src/target/OM-2007/applications/openmoko-footer/src/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-footer/src/main.c	2007-04-27 14:44:13 UTC (rev 1859)
+++ trunk/src/target/OM-2007/applications/openmoko-footer/src/main.c	2007-04-27 14:44:54 UTC (rev 1860)
@@ -23,80 +23,68 @@
 
 #include "main.h"
 #include "callbacks.h"
+#include "footer.h"
+
+#include <glib/gmain.h>
+#include <gdk/gdk.h>
+#include <dbus/dbus.h>
+#include <gtk/gtkwidget.h>
+
+#include <X11/Xlib.h>
+#include <gdk/gdkx.h>
+
 int 
 main( int argc, char **argv )
 {
-    MokoFooter* app;
-    DBusError error;
+  MokoFooterApp *app;
+  GError* err = NULL;
+  GdkPixbuf *pixbuf;
+  GtkStyle *style;
+  GdkPixmap *pixmap;
+  GdkBitmap *bitmap;
+  GdkWindow *root_window;
 
-    GError* err = NULL;
-    GdkPixbuf *pixbuf;
-    GtkStyle *style;
-    GdkPixmap *pixmap;
-    GdkBitmap *bitmap;
+  app = g_new0 (MokoFooterApp, 1);
 
-    dbus_error_init(&error);
+  gtk_init (&argc, &argv);
 
-    if (!(app = g_malloc ( sizeof (MokoFooter))))
-    {
-        fprintf (stderr,"Openmoko-taskmanager: footer UI initialized failed, app space malloc failed!");
-        exit (-1);
-    }
+  root_window = gdk_get_default_root_window ();
 
-    app->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
+  gdk_window_set_events (root_window, gdk_window_get_events (root_window) | GDK_PROPERTY_CHANGE_MASK);
+  gdk_window_add_filter (root_window, (GdkFilterFunc)root_window_event_filter_cb, app);
 
-    if (!app->bus) 
-    {
-        g_warning ("Openmoko footer: %s", error.message);
-        dbus_error_free(&error);
-        return 1;
-    }
+  app->toplevel_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name (app->toplevel_window, "bg_footer");
+  gtk_window_set_title (GTK_WINDOW (app->toplevel_window), "OpenMoko Task Manager");
+  gtk_window_set_type_hint (GTK_WINDOW (app->toplevel_window), GDK_WINDOW_TYPE_HINT_DOCK);
+  gtk_window_set_default_size (GTK_WINDOW (app->toplevel_window), FOOTER_PROPERTY_WIDTH, FOOTER_PROPERTY_HEIGHT);
+  gtk_widget_set_uposition (GTK_WIDGET (app->toplevel_window), FOOTER_PROPERTY_X, FOOTER_PROPERTY_Y);
+  gtk_widget_show (app->toplevel_window);
 
-    app->loop = g_main_loop_new( NULL, FALSE );
+  pixbuf = gdk_pixbuf_new_from_file (PKGDATADIR "/bg_footer.png", &err);
+  gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &bitmap, NULL);
+  style = gtk_rc_get_style(app->toplevel_window);
+  style->bg_pixmap[app->toplevel_window->state] = pixmap;
+  gtk_style_set_background(style, app->toplevel_window->window, app->toplevel_window->state);
 
-    gtk_init (&argc, &argv);
+  app->footer = footer_new (); 
+  gtk_widget_show_all (GTK_WIDGET (app->footer));
 
-///initialize TOP LEVEL WINDOW 
-    app->toplevel_win = gtk_window_new( GTK_WINDOW_TOPLEVEL );
-    gtk_widget_set_name (app->toplevel_win, "bg_footer");
-    gtk_window_set_title (GTK_WINDOW (app->toplevel_win), "OpenMoko Task Manager");
-    gtk_window_set_type_hint (GTK_WINDOW (app->toplevel_win), GDK_WINDOW_TYPE_HINT_DOCK);
-    gtk_window_set_default_size (GTK_WINDOW (app->toplevel_win), FOOTER_PROPERTY_WIDTH, FOOTER_PROPERTY_HEIGHT);
-    gtk_widget_set_uposition (GTK_WIDGET (app->toplevel_win), FOOTER_PROPERTY_X, FOOTER_PROPERTY_Y);
-    gtk_widget_show (app->toplevel_win);
+  g_signal_connect (FOOTER (app->footer)->LeftEventBox, "button_press_event", G_CALLBACK (footer_leftbutton_clicked), app);
+  g_signal_connect (FOOTER (app->footer)->RightEventBox, "button_press_event", G_CALLBACK (footer_rightbutton_clicked), app);
 
-//modify toplevel_win background
-    pixbuf = gdk_pixbuf_new_from_file ( PKGDATADIR "/bg_footer.png", &err );
-    gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &bitmap, NULL);
-    style = gtk_rc_get_style (app->toplevel_win);
-    style->bg_pixmap[app->toplevel_win->state] = pixmap;
-    gtk_style_set_background (style, app->toplevel_win->window, app->toplevel_win->state);
+  gtk_container_add (GTK_CONTAINER (app->toplevel_window), GTK_WIDGET(app->footer));
 
-///initialize OpenMoko Footer Widget
-    app->footer = FOOTER(footer_new()); 
-    gtk_widget_show_all (GTK_WIDGET (app->footer));
-    g_signal_connect ( G_OBJECT (app->footer->LeftEventBox), "button_press_event", G_CALLBACK (footer_leftbutton_clicked), app);
-    g_signal_connect ( G_OBJECT (app->footer->RightEventBox), "button_press_event", G_CALLBACK (footer_rightbutton_clicked), app);
-   
-///Add OpenMoko Footer to Top Level windonw
-    gtk_container_add( GTK_CONTAINER(app->toplevel_win), GTK_WIDGET(app->footer));
-    // this violates the privacy concept, but it's a demo for now...
-  
-    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);
+  gtk_main ();
 
-    gtk_widget_show_all (app->toplevel_win);
+  if (pixbuf)
+      g_free (pixbuf);
+  if (pixmap)
+      g_free (pixmap);
+  if (bitmap)
+      g_free (bitmap);
 
-    g_main_loop_run (app->loop);
+  g_free (app);
 
-    if (pixbuf)
-        g_free (pixbuf);
-    if (pixmap)
-        g_free (pixmap);
-    if (bitmap)
-        g_free (bitmap);
-    g_free (app );
-
-    return 0;
+  return 0;
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-footer/src/main.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-footer/src/main.h	2007-04-27 14:44:13 UTC (rev 1859)
+++ trunk/src/target/OM-2007/applications/openmoko-footer/src/main.h	2007-04-27 14:44:54 UTC (rev 1860)
@@ -20,29 +20,14 @@
 #ifndef OM_TASK_MANAGER_H
 #define OM_TASK_MANAGER_H
 
+#include <gtk/gtk.h>
 #include "footer.h"
 
-#ifndef DBUS_API_SUBJECT_TO_CHANGE
-#define DBUS_API_SUBJECT_TO_CHANGE
-#endif
-
-#include <glib/gmain.h>
-#include <gdk/gdk.h>
-#include <dbus/dbus.h>
-#include <gtk/gtkwidget.h>
-
-/**
- * @typedef MokoFooter
- *
- * Opaque structure used for representing an Openmoko Task Manager App. 
- */
-/* Types */
-typedef struct _MokoFooter 
+typedef struct _MokoFooterApp
 {
-    DBusConnection* bus;
-    GMainLoop* loop;
-    GtkWidget* toplevel_win;
-    Footer* footer;
-} MokoFooter;
+    GtkWidget *toplevel_window;
+    GtkWidget *footer;
+    GdkWindow *target_window;
+} MokoFooterApp;
 
 #endif /* main.h */





More information about the commitlog mailing list