r3242 - in trunk/src/target/OM-2007.2/applications/openmoko-today2: . src

chris at sita.openmoko.org chris at sita.openmoko.org
Mon Oct 22 18:19:53 CEST 2007


Author: chris
Date: 2007-10-22 18:19:52 +0200 (Mon, 22 Oct 2007)
New Revision: 3242

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-today2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-today2/configure.ac
   trunk/src/target/OM-2007.2/applications/openmoko-today2/src/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today-main.c
   trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today.h
Log:
        * configure.ac:
        * src/Makefile.am:
        * src/today-main.c: (bg_expose_cb), (bg_size_allocate_cb),
        (today_create_home_page), (wallpaper_notify), (main):
        * src/today.h:
        Add wallpaper support


Modified: trunk/src/target/OM-2007.2/applications/openmoko-today2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-today2/ChangeLog	2007-10-22 10:59:30 UTC (rev 3241)
+++ trunk/src/target/OM-2007.2/applications/openmoko-today2/ChangeLog	2007-10-22 16:19:52 UTC (rev 3242)
@@ -1,3 +1,12 @@
+2007-10-22  Chris Lord  <chris at openedhand.com>
+
+	* configure.ac:
+	* src/Makefile.am:
+	* src/today-main.c: (bg_expose_cb), (bg_size_allocate_cb),
+	(today_create_home_page), (wallpaper_notify), (main):
+	* src/today.h:
+	Add wallpaper support
+
 2007-10-15  Thomas Wood  <thomas at openedhand.com>
 
 	* src/today-main.c: (today_dial_button_clicked_cb): Don't use -s

Modified: trunk/src/target/OM-2007.2/applications/openmoko-today2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-today2/configure.ac	2007-10-22 10:59:30 UTC (rev 3241)
+++ trunk/src/target/OM-2007.2/applications/openmoko-today2/configure.ac	2007-10-22 16:19:52 UTC (rev 3242)
@@ -34,6 +34,7 @@
 PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $LIBGTK_VERSION)
 PKG_CHECK_MODULES(ECAL, libecal-1.2 >= $LIBECAL_VERSION)
 PKG_CHECK_MODULES(EBOOK, libebook-1.2 >= $LIBEBOOK_VERSION)
+PKG_CHECK_MODULES(GCONF, gconf-2.0)
 
 AC_ARG_ENABLE(startup_notification,
         AC_HELP_STRING([--enable-startup-notification], [enable startup notification support]),

Modified: trunk/src/target/OM-2007.2/applications/openmoko-today2/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-today2/src/Makefile.am	2007-10-22 10:59:30 UTC (rev 3241)
+++ trunk/src/target/OM-2007.2/applications/openmoko-today2/src/Makefile.am	2007-10-22 16:19:52 UTC (rev 3242)
@@ -5,7 +5,8 @@
 	       -DDATADIR=\""$(datadir)"\" -D_GNU_SOURCE
 
 AM_CFLAGS    = -Wall -pedantic -std=c99 @GTK_CFLAGS@ @ECAL_CFLAGS@ \
-		@EBOOK_CFLAGS@ @MOKOUI_CFLAGS@ @MOKOJOURNAL_CFLAGS@
+		@EBOOK_CFLAGS@ @MOKOUI_CFLAGS@ @MOKOJOURNAL_CFLAGS@ \
+		@GCONF_CFLAGS@
 
 bin_PROGRAMS = openmoko-today
 
@@ -25,12 +26,15 @@
 	today-task-manager.c		\
 	today-task-manager.h           \
 	today-pim-journal.c           \
-	today-pim-journal.h
+	today-pim-journal.h           \
+	today-clock.c           \
+	today-clock.h
 
 openmoko_today_LDADD  = $(top_builddir)/libkoto/libkoto.a 	\
 			$(top_builddir)/libtaku/libtaku.a	\
 			@GTK_LIBS@ @ECAL_LIBS@ @EBOOK_LIBS@ @SEXY_LIBS@ \
-			@SN_LIBS@ @MOKOUI_LIBS@ @MOKOJOURNAL_LIBS@
+			@SN_LIBS@ @MOKOUI_LIBS@ @MOKOJOURNAL_LIBS@ \
+			@GCONF_LIBS@
 
 MAINTAINERCLEANFILES  = config.h.in Makefile.in
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today-main.c	2007-10-22 10:59:30 UTC (rev 3241)
+++ trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today-main.c	2007-10-22 16:19:52 UTC (rev 3242)
@@ -4,6 +4,7 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
+#include <gconf/gconf-client.h>
 #include <moko-finger-scroll.h>
 #include <libtaku/launcher-util.h>
 #include <libtaku/xutil.h>
@@ -60,6 +61,25 @@
 		{ "openmoko-dates", NULL }, TRUE, TRUE));
 }
 
+static gboolean
+bg_expose_cb (GtkWidget *widget, GdkEventExpose *event, TodayData *data)
+{
+	if (data->wallpaper)
+		gdk_draw_drawable (widget->window, widget->style->black_gc,
+			data->wallpaper, 0, 0, 0, 0, -1, -1);
+	
+	return FALSE;
+}
+
+static void
+bg_size_allocate_cb (GtkWidget *widget, GtkAllocation *allocation,
+		     TodayData *data)
+{
+	/* Re-scale wallpaper */
+	gconf_client_notify (gconf_client_get_default (),
+		GCONF_POKY_INTERFACE_PREFIX GCONF_POKY_WALLPAPER);
+}
+
 static GtkWidget *
 today_create_home_page (TodayData *data)
 {
@@ -110,13 +130,8 @@
 	gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport),
 				      GTK_SHADOW_NONE);
 	gtk_widget_show_all (scroll);
-	align = gtk_alignment_new (0.5, 0.5, 1, 1);
-	gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 6, 6, 6);
-	gtk_container_add (GTK_CONTAINER (viewport), align);
 
 	vbox = gtk_vbox_new (FALSE, 6);
-	gtk_container_add (GTK_CONTAINER (align), vbox);
-	gtk_widget_show_all (align);
 
 	data->message_box = today_pim_journal_box_new (data);
 	gtk_box_pack_start (GTK_BOX (vbox), data->message_box, FALSE, TRUE, 0);
@@ -126,9 +141,83 @@
 	gtk_box_pack_start (GTK_BOX (vbox), data->summary_box, FALSE, TRUE, 6);
 	gtk_widget_show (data->summary_box);
 	
+	/* Create event box with background */
+	data->bg_ebox = gtk_event_box_new ();
+	gtk_widget_set_app_paintable (data->bg_ebox, TRUE);
+	g_signal_connect_after (data->bg_ebox, "expose-event",
+		G_CALLBACK (bg_expose_cb), data);
+	g_signal_connect_after (data->bg_ebox, "size-allocate",
+		G_CALLBACK (bg_size_allocate_cb), data);
+
+	align = gtk_alignment_new (0.5, 0.5, 1, 1);
+	gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 6, 6, 6);
+	gtk_container_add (GTK_CONTAINER (viewport), data->bg_ebox);
+	gtk_container_add (GTK_CONTAINER (data->bg_ebox), align);
+	gtk_container_add (GTK_CONTAINER (align), vbox);
+	gtk_widget_show_all (data->bg_ebox);
+	
 	return main_vbox;
 }
 
+static void
+wallpaper_notify (GConfClient *client, guint cnxn_id,
+		  GConfEntry *entry, TodayData *data)
+{
+	gint width, height, pwidth, pheight;
+	GdkPixbuf *pixbuf, *pixbuf_scaled;
+	GConfValue *value;
+	const gchar *path;
+	gfloat scale;
+
+	if (!GTK_WIDGET_REALIZED (data->bg_ebox))
+		gtk_widget_realize (data->bg_ebox);
+
+	/* Return if the background is tiny, we'll get called again when it 
+	 * resizes anyway.
+	 */
+	width = data->bg_ebox->allocation.width;
+	height = data->bg_ebox->allocation.height;
+	if ((width <= 0) || (height <= 0)) return;
+	
+	value = gconf_entry_get_value (entry);
+	path = gconf_value_get_string (value);
+	if (!path || (!(pixbuf = gdk_pixbuf_new_from_file (path, NULL)))) {
+		if (data->wallpaper) {
+			g_object_unref (data->wallpaper);
+			data->wallpaper = NULL;
+			gtk_widget_queue_draw (data->bg_ebox);
+		}
+		return;
+	}
+	
+	/* Create background pixmap */
+	if (data->wallpaper) g_object_unref (data->wallpaper);
+	data->wallpaper = gdk_pixmap_new (data->bg_ebox->window,
+		width, height, -1);
+	
+	/* Scale and draw pixbuf */
+	pwidth = gdk_pixbuf_get_width (pixbuf);
+	pheight = gdk_pixbuf_get_height (pixbuf);
+	if (((gfloat)pwidth / (gfloat)pheight) >
+	    ((gfloat)width / (gfloat)height))
+		scale = (gfloat)height/(gfloat)pheight;
+	else
+		scale = (gfloat)width/(gfloat)pwidth;
+	pwidth *= scale;
+	pheight *= scale;
+	pixbuf_scaled = gdk_pixbuf_scale_simple (pixbuf, pwidth, pheight,
+		GDK_INTERP_BILINEAR);
+	if (pixbuf_scaled) {
+		gdk_draw_pixbuf (data->wallpaper, NULL, pixbuf_scaled,
+			0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_MAX, 0, 0);
+		g_object_unref (pixbuf_scaled);
+	}
+	g_object_unref (pixbuf);
+	
+	/* Redraw */
+	gtk_widget_queue_draw (data->bg_ebox);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -142,6 +231,8 @@
 	static GOptionEntry entries[] = {
 		{ NULL }
 	};
+	
+	data.wallpaper = NULL;
 
 	/* Initialise */
 	bindtextdomain (GETTEXT_PACKAGE, TODAY_LOCALE_DIR);;
@@ -184,7 +275,7 @@
 	/* Connect up signals */
 	g_signal_connect (G_OBJECT (data.window), "delete-event",
 		G_CALLBACK (gtk_main_quit), NULL);
-
+	
 #if 0
 	/* Force theme settings */
 	g_object_set (gtk_settings_get_default (),
@@ -206,6 +297,17 @@
 	
 	/* Show and start */
 	gtk_widget_show (data.window);
+
+	/* Listen to wallpaper setting */
+	gconf_client_add_dir (gconf_client_get_default (),
+		GCONF_POKY_INTERFACE_PREFIX, GCONF_CLIENT_PRELOAD_NONE, NULL);
+	gconf_client_notify_add (gconf_client_get_default (),
+		GCONF_POKY_INTERFACE_PREFIX GCONF_POKY_WALLPAPER,
+		(GConfClientNotifyFunc)wallpaper_notify,
+		&data, NULL, NULL);
+	gconf_client_notify (gconf_client_get_default (),
+		GCONF_POKY_INTERFACE_PREFIX GCONF_POKY_WALLPAPER);
+
 	gtk_main ();
 
 	return 0;

Modified: trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today.h	2007-10-22 10:59:30 UTC (rev 3241)
+++ trunk/src/target/OM-2007.2/applications/openmoko-today2/src/today.h	2007-10-22 16:19:52 UTC (rev 3242)
@@ -6,6 +6,9 @@
 #include <libtaku/taku-launcher-tile.h>
 #include <moko-journal.h>
 
+#define GCONF_POKY_INTERFACE_PREFIX "/desktop/poky/interface"
+#define GCONF_POKY_WALLPAPER "/wallpaper"
+
 typedef struct {
 	/* Home */
 	GtkWidget *window;
@@ -17,6 +20,8 @@
 	GtkToolItem *contacts_button;
 	GtkToolItem *messages_button;
 	GtkToolItem *dates_button;
+	GtkWidget *bg_ebox;
+	GdkPixmap *wallpaper;
 	
 	GtkTreeModel *events_model;
 	GtkTreeModel *tasks_model;





More information about the commitlog mailing list