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