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