Send commitlog mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r3793 - developers/sameo/patches/ar6k-ng ([EMAIL PROTECTED])
   2. r3794 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . data
      ([EMAIL PROTECTED])
   3. r3795 - in
      trunk/src/target/OM-2007.2/applications/openmoko-messages2: .
      data src ([EMAIL PROTECTED])
--- Begin Message ---
Author: sameo
Date: 2008-01-09 12:48:17 +0100 (Wed, 09 Jan 2008)
New Revision: 3793

Added:
   developers/sameo/patches/ar6k-ng/115-s3cmci_sdio.patch
Log:
ar6k-ng: Forgot to add the mci patch.


Added: developers/sameo/patches/ar6k-ng/115-s3cmci_sdio.patch
===================================================================
--- developers/sameo/patches/ar6k-ng/115-s3cmci_sdio.patch      2008-01-09 
10:43:34 UTC (rev 3792)
+++ developers/sameo/patches/ar6k-ng/115-s3cmci_sdio.patch      2008-01-09 
11:48:17 UTC (rev 3793)
@@ -0,0 +1,422 @@
+---
+ drivers/mmc/host/s3cmci.c |  156 
+++++++++++++++++++++++++++++++---------------
+ drivers/mmc/host/s3cmci.h |    6 +
+ 2 files changed, 112 insertions(+), 50 deletions(-)
+
+Index: linux-2.6.22-atheros-ng/drivers/mmc/host/s3cmci.c
+===================================================================
+--- linux-2.6.22-atheros-ng.orig/drivers/mmc/host/s3cmci.c     2007-12-21 
16:24:25.000000000 +0100
++++ linux-2.6.22-atheros-ng/drivers/mmc/host/s3cmci.c  2007-12-21 
16:25:44.000000000 +0100
+@@ -15,6 +15,7 @@
+ #include <linux/mmc/host.h>
+ #include <linux/platform_device.h>
+ #include <linux/timer.h>
++#include <linux/delay.h>
+ #include <linux/irq.h>
+ 
+ #include <asm/dma.h>
+@@ -44,7 +45,7 @@
+ 
+ static const int dbgmap_err   = dbg_err | dbg_fail;
+ static const int dbgmap_info  = dbg_info | dbg_conf;
+-static const int dbgmap_debug = dbg_debug;
++static const int dbgmap_debug = dbg_debug | dbg_pio;
+ 
+ #define dbg(host, channels, args...)           \
+       if (dbgmap_err & channels)               \
+@@ -159,7 +160,7 @@
+       u32 newmask;
+ 
+       newmask = readl(host->base + host->sdiimsk);
+-      newmask|= imask;
++      newmask |= imask;
+ 
+       writel(newmask, host->base + host->sdiimsk);
+ 
+@@ -180,11 +181,14 @@
+ 
+ static inline void clear_imask(struct s3cmci_host *host)
+ {
+-      writel(0, host->base + host->sdiimsk);
++      if (host->sdio_int)
++              writel(S3C2410_SDIIMSK_SDIOIRQ, host->base + host->sdiimsk);
++      else
++              writel(0, host->base + host->sdiimsk);
+ }
+ 
+ static inline int get_data_buffer(struct s3cmci_host *host,
+-                      volatile u32 *words, volatile u32 **pointer)
++                                volatile u32 *bytes, volatile u8 **pointer)
+ {
+       struct scatterlist *sg;
+ 
+@@ -201,7 +205,7 @@
+       }
+       sg = &host->mrq->data->sg[host->pio_sgptr];
+ 
+-      *words  = sg->length >> 2;
++      *bytes  = sg->length;
+       *pointer= page_address(sg->page) + sg->offset;
+ 
+       host->pio_sgptr++;
+@@ -212,8 +216,8 @@
+       return 0;
+ }
+ 
+-#define FIFO_FILL(host) ((readl(host->base + S3C2410_SDIFSTA) & 
S3C2410_SDIFSTA_COUNTMASK) >> 2)
+-#define FIFO_FREE(host) ((63 - (readl(host->base + S3C2410_SDIFSTA) & 
S3C2410_SDIFSTA_COUNTMASK)) >> 2)
++#define FIFO_FILL(host) ((readl(host->base + S3C2410_SDIFSTA) & 
S3C2410_SDIFSTA_COUNTMASK))
++#define FIFO_FREE(host) ((63 - (readl(host->base + S3C2410_SDIFSTA) & 
S3C2410_SDIFSTA_COUNTMASK)))
+ 
+ static inline void do_pio_read(struct s3cmci_host *host)
+ {
+@@ -227,9 +231,9 @@
+       from_ptr = host->base + host->sdidata;
+ 
+       while ((fifo = FIFO_FILL(host))) {
+-              if (!host->pio_words) {
+-                      res = get_data_buffer(host, &host->pio_words,
+-                                                      &host->pio_ptr);
++              if (!host->pio_bytes) {
++                      res = get_data_buffer(host, &host->pio_bytes,
++                                            &host->pio_ptr);
+                       if (res) {
+                               host->pio_active = XFER_NONE;
+                               host->complete_what = COMPLETION_FINALIZE;
+@@ -240,27 +244,26 @@
+                       }
+ 
+                       dbg(host, dbg_pio, "pio_read(): new target: [EMAIL 
PROTECTED]",
+-                             host->pio_words, host->pio_ptr);
++                             host->pio_bytes, host->pio_ptr);
+               }
+ 
+               dbg(host, dbg_pio, "pio_read(): fifo:[%02i] "
+                                  "buffer:[%03i] dcnt:[%08X]\n",
+-                                 fifo, host->pio_words,
++                                 fifo, host->pio_bytes,
+                                  readl(host->base + S3C2410_SDIDCNT));
+ 
+-              if (fifo > host->pio_words)
+-                      fifo = host->pio_words;
++              if (fifo > host->pio_bytes)
++                      fifo = host->pio_bytes;
+ 
+-              host->pio_words-= fifo;
+-              host->pio_count+= fifo;
++              host->pio_bytes -= fifo;
++              host->pio_count += fifo;
+ 
+-              while(fifo--) {
+-                      *(host->pio_ptr++) = readl(from_ptr);
+-              }
++              while(fifo--)
++                      *(host->pio_ptr++) = readb(from_ptr);
+       }
+ 
+-      if (!host->pio_words) {
+-              res = get_data_buffer(host, &host->pio_words, &host->pio_ptr);
++      if (!host->pio_bytes) {
++              res = get_data_buffer(host, &host->pio_bytes, &host->pio_ptr);
+               if (res) {
+                       dbg(host, dbg_pio, "pio_read(): "
+                               "complete (no more buffers).\n");
+@@ -284,9 +287,9 @@
+       to_ptr = host->base + host->sdidata;
+ 
+       while ((fifo = FIFO_FREE(host))) {
+-              if (!host->pio_words) {
+-                      res = get_data_buffer(host, &host->pio_words,
+-                                                      &host->pio_ptr);
++              if (!host->pio_bytes) {
++                      res = get_data_buffer(host, &host->pio_bytes,
++                                            &host->pio_ptr);
+                       if (res) {
+                               dbg(host, dbg_pio, "pio_write(): "
+                                       "complete (no more data).\n");
+@@ -297,18 +300,18 @@
+ 
+                       dbg(host, dbg_pio, "pio_write(): "
+                               "new source: [EMAIL PROTECTED]",
+-                              host->pio_words, host->pio_ptr);
++                              host->pio_bytes, host->pio_ptr);
+ 
+               }
+ 
+-              if (fifo > host->pio_words)
+-                      fifo = host->pio_words;
++              if (fifo > host->pio_bytes)
++                      fifo = host->pio_bytes;
+ 
+-              host->pio_words-= fifo;
+-              host->pio_count+= fifo;
++              host->pio_bytes -= fifo;
++              host->pio_count += fifo;
+ 
+               while(fifo--) {
+-                      writel(*(host->pio_ptr++), to_ptr);
++                      writeb(*(host->pio_ptr++), to_ptr);
+               }
+       }
+ 
+@@ -331,9 +334,9 @@
+               clear_imask(host);
+               if (host->pio_active != XFER_NONE) {
+                       dbg(host, dbg_err, "unfinished %s "
+-                              "- pio_count:[%u] pio_words:[%u]\n",
++                              "- pio_count:[%u] pio_bytes:[%u]\n",
+                               (host->pio_active == XFER_READ)?"read":"write",
+-                              host->pio_count, host->pio_words);
++                              host->pio_count, host->pio_bytes);
+ 
+                       host->mrq->data->error = -EIO;
+               }
+@@ -376,6 +379,7 @@
+       struct mmc_command *cmd;
+       u32 mci_csta, mci_dsta, mci_fsta, mci_dcnt, mci_imsk;
+       u32 mci_cclear, mci_dclear;
++      int cardint = 0;
+       unsigned long iflags;
+ 
+       host = (struct s3cmci_host *)dev_id;
+@@ -390,8 +394,19 @@
+       mci_cclear      = 0;
+       mci_dclear      = 0;
+ 
++      if (mci_dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
++              if (host->sdio_int) {
++                      disable_imask(host, S3C2410_SDIIMSK_SDIOIRQ);
++                      cardint = 1;
++                      host->sdio_pending_int = 0;
++              } else {
++                      host->sdio_pending_int = 1;
++              }
++              mci_dclear |= S3C2410_SDIDSTA_SDIOIRQDETECT;
++      }
++
+       if ((host->complete_what == COMPLETION_NONE) ||
+-                      (host->complete_what == COMPLETION_FINALIZE)) {
++          (host->complete_what == COMPLETION_FINALIZE)) {
+               host->status = "nothing to complete";
+               clear_imask(host);
+               goto irq_out;
+@@ -413,7 +428,7 @@
+ 
+       if (!host->dodma) {
+               if ((host->pio_active == XFER_WRITE) &&
+-                              (mci_fsta & S3C2410_SDIFSTA_TFDET)) {
++                  (mci_fsta & S3C2410_SDIFSTA_TFDET)) {
+ 
+                       disable_imask(host, S3C2410_SDIIMSK_TXFIFOHALF);
+                       tasklet_schedule(&host->pio_tasklet);
+@@ -468,8 +483,10 @@
+                       goto close_transfer;
+               }
+ 
+-              if (host->complete_what == COMPLETION_XFERFINISH_RSPFIN)
++              if (host->complete_what == COMPLETION_XFERFINISH_RSPFIN) {
+                       host->complete_what = COMPLETION_XFERFINISH;
++                      host->status = "ok: command response received, xfer to 
be done";
++              }
+ 
+               mci_cclear |= S3C2410_SDICMDSTAT_RSPFIN;
+       }
+@@ -550,6 +567,10 @@
+                               mci_dcnt, host->status);
+ 
+       spin_unlock_irqrestore(&host->complete_lock, iflags);
++
++      /* We have to delay this as it calls back into the driver */
++      if (cardint)
++              mmc_signal_sdio_irq(host->mmc);
+       return IRQ_HANDLED;
+ 
+ }
+@@ -671,7 +692,7 @@
+       writel(0, host->base + S3C2410_SDICMDARG);
+       writel(S3C2410_SDIDCON_STOP, host->base + S3C2410_SDIDCON);
+       writel(0, host->base + S3C2410_SDICMDCON);
+-      writel(0, host->base + host->sdiimsk);
++      clear_imask(host);
+ 
+       if (cmd->data && cmd->error)
+               cmd->data->error = cmd->error;
+@@ -711,7 +732,7 @@
+ 
+                       //reset fifo
+                       mci_con = readl(host->base + S3C2410_SDICON);
+-                      mci_con|= S3C2410_SDICON_FIFORESET;
++                      mci_con |= S3C2410_SDICON_FIFORESET;
+ 
+                       writel(mci_con, host->base + S3C2410_SDICON);
+               }
+@@ -776,6 +797,9 @@
+       if (cmd->flags & MMC_RSP_136)
+               ccon|= S3C2410_SDICMDCON_LONGRSP;
+ 
++      if (cmd->data)
++              ccon |= S3C2410_SDICMDCON_WITHDATA;
++
+       writel(ccon, host->base + S3C2410_SDICMDCON);
+ }
+ 
+@@ -833,7 +857,8 @@
+       }
+ 
+       if (host->is2440) {
+-              dcon |= S3C2440_SDIDCON_DS_WORD;
++              dcon |= S3C2440_SDIDCON_DS_BYTE;
++//            dcon |= S3C2440_SDIDCON_DS_WORD;
+               dcon |= S3C2440_SDIDCON_DATSTART;
+       }
+ 
+@@ -858,12 +883,11 @@
+ 
+               //FIX: set slow clock to prevent timeouts on read
+               if (data->flags & MMC_DATA_READ) {
++                      printk("######## FIX ########## \n");
+                       writel(0xFF, host->base + S3C2410_SDIPRE);
+               }
+       }
+ 
+-      //debug_dump_registers(host, "Data setup:");
+-
+       return 0;
+ }
+ 
+@@ -875,7 +899,7 @@
+               return -EINVAL;
+ 
+       host->pio_sgptr = 0;
+-      host->pio_words = 0;
++      host->pio_bytes = 0;
+       host->pio_count = 0;
+       host->pio_active = rw?XFER_WRITE:XFER_READ;
+ 
+@@ -1019,7 +1043,7 @@
+                               host->pdata->set_power(ios->power_mode, 
ios->vdd);
+ 
+                       if (!host->is2440)
+-                              mci_con|=S3C2410_SDICON_FIFORESET;
++                              mci_con |= S3C2410_SDICON_FIFORESET;
+ 
+                       break;
+ 
+@@ -1032,7 +1056,7 @@
+                               host->pdata->set_power(ios->power_mode, 
ios->vdd);
+ 
+                       if (host->is2440)
+-                              mci_con|=S3C2440_SDICON_SDRESET;
++                              mci_con |= S3C2440_SDICON_SDRESET;
+ 
+                       break;
+       }
+@@ -1060,9 +1084,11 @@
+       else
+               mci_con &=~S3C2410_SDICON_CLOCKTYPE;
+ 
++      mci_con |= S3C2410_SDICON_SDIOIRQ;
++
+       writel(mci_con, host->base + S3C2410_SDICON);
+ 
+-      if ((ios->power_mode==MMC_POWER_ON)
++      if ((ios->power_mode == MMC_POWER_ON)
+               || (ios->power_mode==MMC_POWER_UP)) {
+ 
+               dbg(host, dbg_conf, "running at %lukHz (requested: %ukHz).\n",
+@@ -1094,10 +1120,39 @@
+       return s3c2410_gpio_getpin(host->pdata->gpio_wprotect);
+ }
+ 
++void s3cmci_enable_sdio_irq(struct mmc_host *mmc, int enable)
++{
++      struct s3cmci_host *host = mmc_priv(mmc);
++      u32 con, imask;
++
++      con = readl(host->base + S3C2410_SDICON);
++      imask = readl(host->base + host->sdiimsk);
++
++      if (enable) {
++              host->sdio_int = 1;
++              con |= S3C2410_SDICON_SDIOIRQ;
++              imask |= S3C2410_SDIIMSK_SDIOIRQ;
++              if (host->sdio_pending_int) {
++                      printk("We have a pending INT\n");
++                      mmc_signal_sdio_irq(host->mmc);
++                      host->sdio_pending_int = 0;
++              }
++      } else {
++
++              host->sdio_int = 0;
++              con &= ~S3C2410_SDICON_SDIOIRQ;
++              imask &= ~S3C2410_SDIIMSK_SDIOIRQ;
++      }
++
++      writel(imask, host->base + host->sdiimsk);
++      writel(con, host->base + S3C2410_SDICON);
++}
++
+ static struct mmc_host_ops s3cmci_ops = {
+-      .request        = s3cmci_request,
+-      .set_ios        = s3cmci_set_ios,
+-      .get_ro         = s3cmci_get_ro,
++      .request                = s3cmci_request,
++      .set_ios                = s3cmci_set_ios,
++      .get_ro                 = s3cmci_get_ro,
++      .enable_sdio_irq        = s3cmci_enable_sdio_irq,
+ };
+ 
+ static struct s3c24xx_mci_pdata s3cmci_def_pdata = {
+@@ -1143,6 +1198,7 @@
+               host->sdidata   = S3C2410_SDIDATA;
+               host->clk_div   = 2;
+       }
++      host->sdio_int          = 0;
+       host->dodma             = 0;
+       host->complete_what     = COMPLETION_NONE;
+       host->pio_active        = XFER_NONE;
+@@ -1229,7 +1285,7 @@
+ 
+       mmc->ops        = &s3cmci_ops;
+       mmc->ocr_avail  = host->pdata->ocr_avail;
+-      mmc->caps       = MMC_CAP_4_BIT_DATA;
++      mmc->caps       = MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ;
+       mmc->f_min      = host->clk_rate / (host->clk_div * 256);
+       mmc->f_max      = host->clk_rate / host->clk_div;
+ 
+@@ -1250,6 +1306,10 @@
+               goto free_dmabuf;
+       }
+ 
++
++//    mdelay(1000);
++      mmc_detect_change(host->mmc, 500);
++
+       platform_set_drvdata(pdev, mmc);
+ 
+       dev_info(&pdev->dev,"initialisation done.\n");
+Index: linux-2.6.22-atheros-ng/drivers/mmc/host/s3cmci.h
+===================================================================
+--- linux-2.6.22-atheros-ng.orig/drivers/mmc/host/s3cmci.h     2007-12-21 
16:24:29.000000000 +0100
++++ linux-2.6.22-atheros-ng/drivers/mmc/host/s3cmci.h  2007-12-21 
16:24:32.000000000 +0100
+@@ -40,6 +40,8 @@
+       unsigned                sdiimsk;
+       unsigned                sdidata;
+       int                     dodma;
++      int                     sdio_int;
++      int                     sdio_pending_int;
+ 
+       volatile int            dmatogo;
+ 
+@@ -53,9 +55,9 @@
+       volatile int            dma_complete;
+ 
+       volatile u32            pio_sgptr;
+-      volatile u32            pio_words;
++      volatile u32            pio_bytes;
+       volatile u32            pio_count;
+-      volatile u32            *pio_ptr;
++      volatile u8             *pio_ptr;
+ #define XFER_NONE 0
+ #define XFER_READ 1
+ #define XFER_WRITE 2




--- End Message ---
--- Begin Message ---
Author: chris
Date: 2008-01-09 14:54:05 +0100 (Wed, 09 Jan 2008)
New Revision: 3794

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/data/org.openmoko.Dialer.service.in
Log:
Correct dbus service name


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-09 11:48:17 UTC (rev 3793)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-09 13:54:05 UTC (rev 3794)
@@ -1,5 +1,10 @@
 2008-01-09  Chris Lord  <[EMAIL PROTECTED]>
 
+       * data/org.openmoko.Dialer.service.in:
+       Correct name
+
+2008-01-09  Chris Lord  <[EMAIL PROTECTED]>
+
        * src/phone-kit/moko-network.c: (on_network_registered),
        (sms_msghandler):
        Add support for reading delivery status reports from the SIM card

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/data/org.openmoko.Dialer.service.in
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/data/org.openmoko.Dialer.service.in
        2008-01-09 11:48:17 UTC (rev 3793)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/data/org.openmoko.Dialer.service.in
        2008-01-09 13:54:05 UTC (rev 3794)
@@ -1,3 +1,3 @@
 [D-BUS Service]
-Name=org.openmoko.Dialer
+Name=org.openmoko.PhoneKit
 [EMAIL PROTECTED]@/phone-kit




--- End Message ---
--- Begin Message ---
Author: chris
Date: 2008-01-09 15:38:23 +0100 (Wed, 09 Jan 2008)
New Revision: 3795

Added:
   
trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/org.openmoko.OpenmokoMessages2.service.in
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.h
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.xml
Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.h
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.h
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
Log:
        * configure.ac:
        * data/Makefile.am:
        * data/org.openmoko.OpenmokoMessages2.service.in:
        * src/Makefile.am:
        * src/sms-compose.c: (sms_compose_refresh):
        * src/sms-compose.h:
        * src/sms-contacts.c: (contacts_changed_cb),
        (contacts_seq_complete_cb), (sms_contacts_page_new):
        * src/sms-dbus.c: (sms_dbus_class_init), (sms_dbus_init),
        (sms_dbus_new), (free_data), (view_messages_idle),
        (send_message_idle), (sms_dbus_view_messages),
        (sms_dbus_send_message), (sms_dbus_append_recipient):
        * src/sms-dbus.h:
        * src/sms-dbus.xml:
        * src/sms-main.c: (main):
        * src/sms-notes.c: (notes_treeview_scroll_to_bottom),
        (note_progress_cb), (page_shown), (sms_notes_refresh):
        * src/sms-notes.h:
        * src/sms-utils.c: (sms_select_contact):
        * src/sms-utils.h:
        * src/sms.h:
        Add DBus interface for viewing/sending SMS messages. Also, break
        scrolling to bottom of messages (but it was even more broken before,
        really)


Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog        
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog        
2008-01-09 14:38:23 UTC (rev 3795)
@@ -1,3 +1,30 @@
+2008-01-09  Chris Lord  <[EMAIL PROTECTED]>
+
+       * configure.ac:
+       * data/Makefile.am:
+       * data/org.openmoko.OpenmokoMessages2.service.in:
+       * src/Makefile.am:
+       * src/sms-compose.c: (sms_compose_refresh):
+       * src/sms-compose.h:
+       * src/sms-contacts.c: (contacts_changed_cb),
+       (contacts_seq_complete_cb), (sms_contacts_page_new):
+       * src/sms-dbus.c: (sms_dbus_class_init), (sms_dbus_init),
+       (sms_dbus_new), (free_data), (view_messages_idle),
+       (send_message_idle), (sms_dbus_view_messages),
+       (sms_dbus_send_message), (sms_dbus_append_recipient):
+       * src/sms-dbus.h:
+       * src/sms-dbus.xml:
+       * src/sms-main.c: (main):
+       * src/sms-notes.c: (notes_treeview_scroll_to_bottom),
+       (note_progress_cb), (page_shown), (sms_notes_refresh):
+       * src/sms-notes.h:
+       * src/sms-utils.c: (sms_select_contact):
+       * src/sms-utils.h:
+       * src/sms.h:
+       Add DBus interface for viewing/sending SMS messages. Also, break
+       scrolling to bottom of messages (but it was even more broken before,
+       really)
+
 2008-01-07  Chris Lord  <[EMAIL PROTECTED]>
 
        * src/sms-notes.c: (scroll_notes_to_bottom_cb), (note_progress_cb),

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac     
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac     
2008-01-09 14:38:23 UTC (rev 3795)
@@ -26,6 +26,21 @@
         AC_DEFINE(HAVE_PHOTO_TYPE, 1, [Defined if EContactPhotoType exists])
 fi
 
+dnl ==============================================
+dnl DBUS
+dnl ==============================================
+
+DBUS_GLIB_BIN="`$PKG_CONFIG --variable=exec_prefix dbus-glib-1`/bin"
+
+dnl AC_ARG_WITH(dbusbindir,
+dnl            AC_HELP_STRING([--with-dbusbindir=[=DIR]],
+dnl                           [Use a different path to dbus tools]),,
+dnl                           dbusdir=$withval;)
+
+AC_ARG_WITH(dbusbindir,[  --with-dbusbindir=DIR  dbus tools in DIR], 
[DBUS_GLIB_BIN="$withval"])
+echo "DBus tools location ${DBUS_GLIB_BIN}"
+AC_SUBST(DBUS_GLIB_BIN)
+
 AC_OUTPUT([
 Makefile
 src/Makefile

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/Makefile.am 
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/Makefile.am 
2008-01-09 14:38:23 UTC (rev 3795)
@@ -2,6 +2,17 @@
 desktopdir = $(datadir)/applications
 desktop_DATA = openmoko-messages.desktop
 
+#
+# Dbus service file
+#
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.openmoko.OpenmokoMessages2.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+# Expand the bindir in the service file
+$(service_DATA) : $(service_in_files) Makefile
+       sed -e "s|[EMAIL PROTECTED]@|$(bindir)|g" $< > $@
+
 MAINTAINERCLEANFILES = Makefile.in
 
 EXTRA_DIST = $(desktop_DATA)

Added: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/org.openmoko.OpenmokoMessages2.service.in
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/org.openmoko.OpenmokoMessages2.service.in
   2008-01-09 13:54:05 UTC (rev 3794)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/data/org.openmoko.OpenmokoMessages2.service.in
   2008-01-09 14:38:23 UTC (rev 3795)
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.openmoko.openmoko-messages2
[EMAIL PROTECTED]@/openmoko-messages

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am  
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am  
2008-01-09 14:38:23 UTC (rev 3795)
@@ -14,5 +14,14 @@
        sms-compose.c \
        sms-compose.h \
        sms-utils.c \
-       sms-utils.h
+       sms-utils.h \
+       sms-dbus.c \
+       sms-dbus.h
 
+%-glue.h: %.xml
+       $(LIBTOOL) --mode=execute $(DBUS_GLIB_BIN)/dbus-binding-tool 
--prefix=$(subst -,_,$*) --mode=glib-server --output=$@ $<
+        
+BUILT_SOURCES = sms-dbus-glue.h
+
+EXTRA_DIST = sms-dbus.xml
+

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c    
    2008-01-09 13:54:05 UTC (rev 3794)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c    
    2008-01-09 14:38:23 UTC (rev 3795)
@@ -110,6 +110,19 @@
                MOKO_STOCK_SMS_NEW);
 }
 
+void
+sms_compose_refresh (SmsData *data)
+{
+       if (gtk_notebook_get_current_page (GTK_NOTEBOOK (data->notebook)) ==
+           SMS_PAGE_COMPOSE) {
+               page_hidden (data);
+               page_shown (data);
+       } else {
+               gtk_notebook_set_current_page (GTK_NOTEBOOK (data->notebook),
+                       SMS_PAGE_COMPOSE);
+       }
+}
+
 static void
 notify_visible_cb (GObject *gobject, GParamSpec *arg1, SmsData *data)
 {

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.h
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.h    
    2008-01-09 13:54:05 UTC (rev 3794)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.h    
    2008-01-09 14:38:23 UTC (rev 3795)
@@ -23,5 +23,6 @@
 #include "sms.h"
 
 GtkWidget *sms_compose_page_new (SmsData *data);
+void sms_compose_refresh (SmsData *data);
 
 #endif /* SMS_COMPOSE_H */

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c   
    2008-01-09 13:54:05 UTC (rev 3794)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c   
    2008-01-09 14:38:23 UTC (rev 3795)
@@ -233,6 +233,8 @@
 static void
 contacts_changed_cb (EBookView *ebookview, GList *contacts, SmsData *data)
 {
+       data->book_seq_complete = FALSE;
+
        for (; contacts; contacts = contacts->next) {
                GList *categories, *c;
                GtkTreeIter *iter;
@@ -301,6 +303,13 @@
 }
 
 static void
+contacts_seq_complete_cb (EBookView *ebookview, EBookViewStatus status,
+                         SmsData *data)
+{
+       data->book_seq_complete = TRUE;
+}
+
+static void
 free_iter_slice (GtkTreeIter *iter)
 {
        g_slice_free (GtkTreeIter, iter);
@@ -594,6 +603,7 @@
 
        GError *error = NULL;
        
+       data->book_seq_complete = FALSE;
        data->contact_groups = g_hash_table_new_full (g_str_hash, g_str_equal,
                (GDestroyNotify)g_free, (GDestroyNotify)malloc_list_free);
        data->group_refs = g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -736,6 +746,8 @@
                G_CALLBACK (contacts_changed_cb), data);
        g_signal_connect (view, "contacts-removed",
                G_CALLBACK (contacts_removed_cb), data);
+       g_signal_connect (view, "sequence-complete",
+               G_CALLBACK (contacts_seq_complete_cb), data);
        e_book_view_start (view);
        
        /* Connect to toolbar delete buttons */

Added: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.c   
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.c   
2008-01-09 14:38:23 UTC (rev 3795)
@@ -0,0 +1,152 @@
+/*
+ *  openmoko-messages -- OpenMoko SMS Application
+ *
+ *  Authored by Chris Lord <[EMAIL PROTECTED]>
+ *
+ *  Copyright (C) 2008 OpenMoko Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser Public License as published by
+ *  the Free Software Foundation; version 2 of the license.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser Public License for more details.
+ *
+ *  Current Version: $Rev$ ($Date$) [$Author$]
+ */
+
+#include "sms.h"
+#include "sms-dbus.h"
+#include "sms-utils.h"
+#include "sms-compose.h"
+#include "sms-notes.h"
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
+
+G_DEFINE_TYPE (SmsDbus, sms_dbus, G_TYPE_OBJECT)
+
+#include "sms-dbus-glue.h"
+
+static void
+sms_dbus_class_init (SmsDbusClass *klass)
+{
+       dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
+               &dbus_glib_sms_dbus_object_info);
+}
+
+static void
+sms_dbus_init (SmsDbus *sms_dbus)
+{
+}
+
+SmsDbus *
+sms_dbus_new (SmsData *data)
+{
+       SmsDbus *sms_dbus = g_object_new (SMS_TYPE_DBUS, NULL);
+       sms_dbus->priv = data;
+       return sms_dbus;
+}
+
+typedef struct {
+       SmsData *data;
+       gchar *uid;
+       gchar *number;
+       gchar *message;
+} SmsDbusData;
+
+static void
+free_data (SmsDbusData *data)
+{
+       g_free (data->uid);
+       g_free (data->number);
+       g_free (data->message);
+       g_slice_free (SmsDbusData, data);
+}
+
+static gboolean
+view_messages_idle (SmsDbusData *data)
+{
+       if (data->data->book_seq_complete) {
+               if (sms_select_contact (data->data, data->uid))
+                       sms_notes_refresh (data->data);
+       
+               free_data (data);
+               return FALSE;
+       } else
+               return TRUE;
+}
+
+static gboolean
+send_message_idle (SmsDbusData *data)
+{
+       if (data->data->book_seq_complete) {
+               if (sms_select_contact (data->data, data->uid))
+                       sms_compose_refresh (data->data);
+
+               free_data (data);
+               return FALSE;
+       } else
+               return TRUE;
+}
+
+gboolean
+sms_dbus_view_messages (SmsDbus *sms_dbus, const gchar *uid, GError **error)
+{
+       EContact *contact;
+       
+       if (e_book_get_contact (sms_dbus->priv->ebook, uid, &contact, error)) {
+               SmsDbusData *data;
+               
+               g_object_unref (contact);
+               
+               data = g_slice_new0 (SmsDbusData);
+               data->data = sms_dbus->priv;
+               data->uid = g_strdup (uid);
+               
+               g_idle_add ((GSourceFunc)view_messages_idle, data);
+               
+               return TRUE;
+       } else
+               return FALSE;
+}
+
+gboolean
+sms_dbus_send_message (SmsDbus *sms_dbus, const gchar *uid, const gchar 
*number,
+                      const gchar *message, GError **error)
+{
+       EContact *contact;
+       
+       if (e_book_get_contact (sms_dbus->priv->ebook, uid, &contact, error)) {
+               SmsDbusData *data;
+               
+               g_object_unref (contact);
+               
+               data = g_slice_new0 (SmsDbusData);
+               data->data = sms_dbus->priv;
+               data->uid = g_strdup (uid);
+               data->number = g_strdup (number);
+               data->message = g_strdup (message);
+               
+               g_idle_add ((GSourceFunc)send_message_idle, data);
+               
+               return TRUE;
+       } else
+               return FALSE;
+}
+
+gboolean
+sms_dbus_append_recipient (SmsDbus *sms_dbus, const gchar *uid,
+                          const gchar *number, GError **error)
+{
+       EContact *contact;
+       
+       if (e_book_get_contact (sms_dbus->priv->ebook, uid, &contact, error)) {
+               /* TODO: Add multiple recipient support and implement this */
+               g_object_unref (contact);
+               return TRUE;
+       } else
+               return FALSE;
+}
+

Added: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.h   
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.h   
2008-01-09 14:38:23 UTC (rev 3795)
@@ -0,0 +1,74 @@
+/*
+ *  openmoko-messages -- OpenMoko SMS Application
+ *
+ *  Authored by Chris Lord <[EMAIL PROTECTED]>
+ *
+ *  Copyright (C) 2008 OpenMoko Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser Public License as published by
+ *  the Free Software Foundation; version 2 of the license.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser Public License for more details.
+ *
+ *  Current Version: $Rev$ ($Date$) [$Author$]
+ */
+
+#ifndef SMS_DBUS_H
+#define SMS_DBUS_H
+
+#include "sms.h"
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define SMS_TYPE_DBUS (sms_dbus_get_type ())
+
+#define SMS_DBUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+        SMS_TYPE_DBUS, SmsDbus))
+
+#define SMS_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
+        SMS_TYPE_DBUS, SmsDbusClass))
+
+#define SMS_IS_DBUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+        SMS_TYPE_DBUS))
+
+#define SMS_IS_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+        SMS_TYPE_DBUS))
+
+#define SMS_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+        SMS_TYPE_DBUS, SmsDbusClass))
+
+typedef struct _SmsDbus SmsDbus;
+typedef struct _SmsDbusClass SmsDbusClass;
+
+struct _SmsDbus
+{
+       GObject         parent;
+       SmsData         *priv;
+};
+
+struct _SmsDbusClass
+{
+       GObjectClass    parent_class;
+};
+
+SmsDbus * sms_dbus_new (SmsData *data);
+
+/* dbus methods */
+gboolean sms_dbus_view_messages (SmsDbus *sms_dbus, const gchar *uid,
+                                GError **error);
+gboolean sms_dbus_send_message (SmsDbus *sms_dbus, const gchar *uid,
+                               const gchar *number, const gchar *message,
+                               GError **error);
+gboolean sms_dbus_append_recipient (SmsDbus *sms_dbus, const gchar *uid,
+                                   const gchar *number, GError **error);
+
+G_END_DECLS
+
+#endif /* SMS_DBUS_H */
+

Added: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.xml
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.xml 
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-dbus.xml 
2008-01-09 14:38:23 UTC (rev 3795)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<node name="/org/openmoko/OpenmokoMessages2">
+<interface name="org.openmoko.OpenmokoMessages2">
+<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="sms_dbus"/>
+
+  <method name="ViewMessages">
+    <arg type="s" name="uid" direction="in" />
+  </method>
+
+  <method name="SendMessage">
+    <arg type="s" name="uid" direction="in" />
+    <arg type="s" name="number" direction="in" />
+    <arg type="s" name="message" direction="in" />
+  </method>
+  
+  <method name="AppendRecipient">
+    <arg type="s" name="uid" direction="in" />
+    <arg type="s" name="number" direction="in" />
+  </method>
+
+</interface>
+</node>
+

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c   
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c   
2008-01-09 14:38:23 UTC (rev 3795)
@@ -21,8 +21,14 @@
 #include "sms-contacts.h"
 #include "sms-notes.h"
 #include "sms-compose.h"
+#include "sms-dbus.h"
 #include <libmokoui2/moko-stock.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
 
+#define SMS_NAMESPACE "org.openmoko.OpenmokoMessages2"
+#define SMS_PATH "/org/openmoko/OpenmokoMessages2"
+
 static void
 notebook_add_page_with_icon (GtkWidget *notebook, GtkWidget *child,
                             const gchar *icon_name, int padding)
@@ -52,6 +58,7 @@
 {
        SmsData data;
        DBusGConnection *connection;
+       DBusGProxy *proxy;
        GtkWidget *vbox, *toolbar;
        GError *error = NULL;
        
@@ -65,9 +72,25 @@
                g_error_free (error);
                data.sms_proxy = NULL;
        } else {
+               guint32 ret;
+               
                data.sms_proxy = dbus_g_proxy_new_for_name (connection,
                        "org.openmoko.PhoneKit", "/org/openmoko/PhoneKit/Sms",
                        "org.openmoko.PhoneKit.Sms");
+
+               proxy = dbus_g_proxy_new_for_name (connection,
+                       DBUS_SERVICE_DBUS, DBUS_PATH_DBUS,
+                       DBUS_INTERFACE_DBUS);
+               if (org_freedesktop_DBus_request_name (proxy,
+                   SMS_NAMESPACE, 0, &ret, &error)) {
+                       SmsDbus *sms_dbus = sms_dbus_new (&data);
+                       dbus_g_connection_register_g_object (connection,
+                               SMS_PATH, G_OBJECT (sms_dbus));
+               } else {
+                       g_warning ("Failing requestion dbus name %s: %s",
+                               SMS_NAMESPACE, error->message);
+                       g_error_free (error);
+               }
        }
 
        data.window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c  
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c  
2008-01-09 14:38:23 UTC (rev 3795)
@@ -42,6 +42,27 @@
        RECV_NOTES,
 };
 
+static gboolean
+notes_treeview_scroll_to_bottom (SmsData *data)
+{
+       GtkTreePath *path;
+       GtkTreeModel *model;
+       GtkTreeViewColumn *column;
+       
+       column = gtk_tree_view_get_column (
+               GTK_TREE_VIEW (data->notes_treeview), 0);
+       model = gtk_tree_view_get_model (GTK_TREE_VIEW (data->notes_treeview));
+       path = gtk_tree_path_new_from_indices (
+               gtk_tree_model_iter_n_children (model, NULL) - 1, -1);
+
+       gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (data->notes_treeview),
+               path, column, TRUE, 1.0, 0.0);
+       
+       gtk_tree_path_free (path);
+       
+       return FALSE;
+}
+
 static void
 note_changed_cb (JanaStoreView *store_view, GList *components, SmsData *data)
 {
@@ -90,22 +111,15 @@
 }
 
 static void
-scroll_notes_to_bottom_cb (GtkAdjustment *vadjust, SmsData *data)
-{
-       /* Scroll note list to the bottom */
-       if (vadjust->value != (vadjust->upper - vadjust->page_size))
-               gtk_adjustment_set_value (vadjust,
-                       vadjust->upper - vadjust->page_size);
-}
-
-static void
 note_progress_cb (JanaStoreView *store_view, gint percent, SmsData *data)
 {
        if (percent != 100) return;
        
-       /* Remove scroll-to-bottom callback */
-       g_signal_handlers_disconnect_by_func (
-               data->notes_treeview, scroll_notes_to_bottom_cb, data);
+       notes_treeview_scroll_to_bottom (data);
+       /*g_idle_add ((GSourceFunc)notes_treeview_scroll_to_bottom, data);*/
+
+       g_signal_handlers_disconnect_by_func (store_view,
+               note_progress_cb, data);
 }
 
 static gboolean
@@ -180,8 +194,6 @@
                G_CALLBACK (scroll_changed_cb), data);
        g_signal_connect (vadjust, "value-changed",
                G_CALLBACK (scroll_changed_cb), data);
-       g_signal_connect (vadjust, "changed",
-               G_CALLBACK (scroll_notes_to_bottom_cb), data);
        
        /* Assign the recipient photo to the generic avatar icon, in case we 
         * can't find it later.
@@ -289,6 +301,19 @@
        }
 }
 
+void
+sms_notes_refresh (SmsData *data)
+{
+       if (gtk_notebook_get_current_page (GTK_NOTEBOOK (data->notebook)) ==
+           SMS_PAGE_NOTES) {
+               page_hidden (data);
+               page_shown (data);
+       } else {
+               gtk_notebook_set_current_page (GTK_NOTEBOOK (data->notebook),
+                       SMS_PAGE_NOTES);
+       }
+}
+
 static void
 notify_visible_cb (GObject *gobject, GParamSpec *arg1, SmsData *data)
 {

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.h  
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.h  
2008-01-09 14:38:23 UTC (rev 3795)
@@ -23,5 +23,6 @@
 #include "sms.h"
 
 GtkWidget *sms_notes_page_new (SmsData *data);
+void sms_notes_refresh (SmsData *data);
 
 #endif

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c  
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c  
2008-01-09 14:38:23 UTC (rev 3795)
@@ -33,6 +33,32 @@
                gtk_combo_box_remove_text (combo, 0);
 }
 
+gboolean
+sms_select_contact (SmsData *data, const gchar *uid)
+{
+       GtkTreeSelection *selection;
+       GtkTreeIter iter;
+       
+       if (gtk_tree_model_get_iter_first (data->contacts_store, &iter)) do {
+               gchar *iter_uid;
+               gtk_tree_model_get (data->contacts_store,
+                       &iter, COL_UID, &iter_uid, -1);
+               
+               if (iter_uid && (strcmp (uid, iter_uid) == 0)) {
+                       g_free (iter_uid);
+                       selection = gtk_tree_view_get_selection (
+                               GTK_TREE_VIEW (data->contacts_treeview));
+                       gtk_tree_selection_select_iter (selection, &iter);
+                       return TRUE;
+               }
+               
+               g_free (iter_uid);
+               
+       } while (gtk_tree_model_iter_next (data->contacts_store, &iter));
+       
+       return FALSE;
+}
+
 EContact *
 sms_get_selected_contact (SmsData *data)
 {

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h  
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h  
2008-01-09 14:38:23 UTC (rev 3795)
@@ -27,5 +27,6 @@
 GdkPixbuf *sms_contact_load_photo (EContact *contact);
 gboolean sms_contacts_note_count_update (SmsData *data);
 gboolean sms_delete_selected_contact_messages (SmsData *data);
+gboolean sms_select_contact (SmsData *data, const gchar *uid);
 
 #endif /* SMS_UTILS_H */

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h        
2008-01-09 13:54:05 UTC (rev 3794)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h        
2008-01-09 14:38:23 UTC (rev 3795)
@@ -43,6 +43,7 @@
        GHashTable *note_emblems;
        
        EBook *ebook;
+       gboolean book_seq_complete;
        GtkTreeModel *contacts_store;
        GtkTreeModel *contacts_filter;
        GHashTable *contacts;




--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to