r467 - trunk/src/target/OM-2007/applications/openmoko-mainmenu/src

tongsong_li at gta01.hmw-consulting.de tongsong_li at gta01.hmw-consulting.de
Mon Dec 25 12:14:23 CET 2006


Author: tongsong_li
Date: 2006-12-25 12:13:47 +0100 (Mon, 25 Dec 2006)
New Revision: 467

Added:
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.h
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.h
Modified:
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.h
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/main.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h
Log:
essage=add matchbox vfolder parse method. by Sun Zhiyong <sunzhiyong at fic-sh.com.cn>

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/Makefile.am	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/Makefile.am	2006-12-25 11:13:47 UTC (rev 467)
@@ -4,7 +4,11 @@
 
 bin_PROGRAMS = openmoko-mainmenu
 
-openmoko_mainmenu_SOURCES = main.c mainmenu.c callbacks.c menu-list.c support.c mokoiconview.c app-history.c close-page.c
+openmoko_mainmenu_SOURCES = main.c \
+			   mainmenu.c close-page.c mokoiconview.c\
+			   mokodesktop.c mokodesktop_item.c\
+			   callbacks.c support.c app-history.c
 
+
 openmoko_mainmenu_LDADD = @OPENMOKO_LIBS@
 

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.c	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.c	2006-12-25 11:13:47 UTC (rev 467)
@@ -17,24 +17,32 @@
  *  Current Version: $Rev$ ($Date$) [$Author$]
  */
 
- #include "callbacks.h"
+#include <libmokoui/moko-application.h>
+#include <libmokoui/moko-finger-window.h>
+#include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-finger-tool-box.h>
+#include <libmokoui/moko-pixmap-button.h>
 
+#include "mainmenu.h"
+#include "menu-list.h"
+#include "close-page.h"
+#include "callbacks.h"
+#include "mokoiconview.h" 
+
 gboolean test = FALSE;
+ 
 void
 moko_wheel_bottom_press_cb (GtkWidget *self, MokoMainmenuApp *mma)
 {
   if (test) {
-    //moko_finger_window_set_contents( mma->window, GTK_WIDGET(mma->mm));
     gtk_widget_hide (mma->close);
     gtk_widget_show (mma->mm);
   }
   else {
-    //moko_finger_window_set_contents( mma->window, GTK_WIDGET(mma->close));
     gtk_widget_hide (mma->mm);
     gtk_widget_show (mma->close);
   }
   
-  g_debug ("test for wheel bottom pressed _________________________");
 test = !test;
 
 }
@@ -42,16 +50,54 @@
 void
 moko_wheel_left_up_press_cb (GtkWidget *self, MokoMainmenuApp *mma)
 {
-  g_debug ("test for wheel left_up pressed _________________________");
+  gtk_widget_grab_focus (mma->mm->icon_view);
+  g_signal_emit_by_name (G_OBJECT(mma->mm->icon_view), "move-cursor", GTK_MOVEMENT_DISPLAY_LINES, -1);
+
 }
 
 void
 moko_wheel_right_down_press_cb (GtkWidget *self, MokoMainmenuApp *mma)
 {
-  g_debug ("test for wheel rifht_down pressed _________________________");
+  gtk_widget_grab_focus (mma->mm->icon_view);
+  g_signal_emit_by_name (G_OBJECT(mma->mm->icon_view), "move-cursor", GTK_MOVEMENT_DISPLAY_LINES, 1);
+}
 
+void
+moko_close_page_close_btn_released_cb (GtkButton *button, MokoMainmenuApp *mma)
+{
+  if (mma->mm)
+    {
+  	moko_main_menu_clear (mma->mm);
+       gtk_widget_destroy (mma->mm);
+    }
+  if (mma->close)
+    gtk_widget_destroy (mma->close);
+  if (mma->wheel)
+    gtk_widget_destroy (mma->wheel);
+  if (mma->toolbox)
+    gtk_widget_destroy (mma->toolbox);
+  if (mma->window)
+    moko_window_clear (mma->window);
+
+  g_free (mma);
+
+  gtk_main_quit();
 }
 
+void 
+moko_up_btn_cb (GtkButton *button, MokoMainMenu *mm)
+{
+  gtk_widget_grab_focus (mm->icon_view);
+  g_signal_emit_by_name (G_OBJECT(mm->icon_view), "move-cursor", GTK_MOVEMENT_DISPLAY_LINES, -1);
+}
+
+void 
+moko_down_btn_cb (GtkButton *button, MokoMainMenu *mm)
+{
+  gtk_widget_grab_focus (mm->icon_view);
+  g_signal_emit_by_name (G_OBJECT(mm->icon_view), "move-cursor", GTK_MOVEMENT_DISPLAY_LINES, 1);
+}
+
 /*test*/ 
 void
 moko_item_select_cb(GtkIconView *icon_view, GtkTreePath *path, gpointer data) {
@@ -71,9 +117,9 @@
 //"move-cursor"
 gboolean
 moko_move_cursor_cb(GtkIconView *iconview, 
-			GtkMovementStep arg1, gint arg2, gpointer user_data) {
-    g_debug ("call moko_move_cursor_cb");
-    }
+			GtkMovementStep arg1, gint arg2, MokoMainmenuApp *mma) {
+  g_debug ("call moko_move_cursor_cb");
+}
 //"select-all"
 void
 moko_select_all_cb(GtkIconView *iconview, gpointer user_data) {
@@ -86,8 +132,17 @@
     }
 //"selection-changed"
 void
-moko_selection_changed_cb(GtkIconView *iconview, gpointer user_data) {
-    g_debug ("call moko_selection_changed_cb");
+moko_icon_view_selection_changed_cb(GtkIconView *iconview, MokoMainmenuApp *mma) {
+  g_debug ("call moko_selection_changed_cb");
+  gint total = 0, cursor = 0;
+  char item_total[6];
+
+  total = moko_icon_view_get_total_items (mma->mm->icon_view);
+  cursor = moko_icon_view_get_cursor_positon (mma->mm->icon_view);
+
+  snprintf (item_total, 6, "%d/%d", cursor, total);
+  moko_set_label_content (mma->mm->item_total, item_total);
+
     }
 
 //"set-scroll-adjustments"

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.h	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/callbacks.h	2006-12-25 11:13:47 UTC (rev 467)
@@ -31,7 +31,16 @@
 void
 moko_wheel_right_down_press_cb (GtkWidget *self, MokoMainmenuApp *mma);
 
+void
+moko_close_page_close_btn_released_cb (GtkButton *button, MokoMainmenuApp *mma);
 
+void 
+moko_up_btn_cb (GtkButton *button, MokoMainMenu *mm);
+
+void 
+moko_down_btn_cb (GtkButton *button, MokoMainMenu *mm);
+
+
 void
 moko_item_select_cb(GtkIconView *icon_view, GtkTreePath *path, gpointer data);
 
@@ -43,7 +52,7 @@
                                             
 //"move-cursor"
 gboolean
-moko_move_cursor_cb(GtkIconView *iconview, GtkMovementStep arg1, gint arg2, gpointer user_data);
+moko_move_cursor_cb(GtkIconView *iconview, GtkMovementStep arg1, gint arg2, MokoMainmenuApp *mma);
 
 //"select-all"
 void
@@ -55,7 +64,7 @@
 
 //"selection-changed"
 void
-moko_selection_changed_cb(GtkIconView *iconview, gpointer user_data);
+moko_icon_view_selection_changed_cb(GtkIconView *iconview, MokoMainmenuApp *mma);
 
 //"set-scroll-adjustments"
 void

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/main.c	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/main.c	2006-12-25 11:13:47 UTC (rev 467)
@@ -67,6 +67,12 @@
     			G_CALLBACK ( moko_wheel_left_up_press_cb), mma);
     g_signal_connect (mma->wheel, "press_right_down",
     			G_CALLBACK ( moko_wheel_right_down_press_cb), mma);
+    g_signal_connect (mma->close->close_btn, "released",
+    			G_CALLBACK (moko_close_page_close_btn_released_cb), mma);
+   // g_signal_connect (mma->mm->icon_view, "move-cursor", 
+    //			G_CALLBACK (moko_move_cursor_cb), mma);
+    g_signal_connect (mma->mm->icon_view, "selection-changed",
+    			G_CALLBACK (moko_icon_view_selection_changed_cb), mma);
 
     			
     moko_finger_window_set_contents( mma->window, GTK_WIDGET(mma->mm));

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c	2006-12-25 11:13:47 UTC (rev 467)
@@ -18,6 +18,9 @@
  */
 
 #include "mainmenu.h"
+#include "mokodesktop.h"
+#include "mokodesktop_item.h"
+#include "callbacks.h"
 
 enum {
     MENU_SIGNAL,
@@ -92,7 +95,21 @@
 moko_main_menu_init(MokoMainMenu *mm) {
     PangoFontDescription* PangoFont = pango_font_description_new(); //get system default PangoFontDesc
     GtkEventBox *eventbox;
+    GtkButton *btn[2];// Use to test, delete later.
+    int ret = 0 ;
 
+    btn[0] = gtk_button_new_with_label ("up");
+    btn[1] = gtk_button_new_with_label ("down");
+
+    	/* Buid Root item, don't display */
+    mm->top_item  = mokodesktop_item_new_with_params ("Home", 
+						       NULL,
+						       NULL,
+						       ITEM_TYPE_ROOT );
+
+    /* Build Lists (parse .directory and .desktop files) */	
+    ret = mokodesktop_init(mm->top_item, ITEM_TYPE_CNT);
+    
     mm->section_name =  gtk_label_new ("Main Menu");
     gtk_widget_show (mm->section_name);
     gtk_widget_set_name (GTK_WIDGET (mm->section_name), "Section Name");
@@ -115,9 +132,10 @@
     gtk_widget_show (eventbox);
     gtk_widget_set_name (eventbox, "gtkeventbox-black");
     
-    mm->item_total = gtk_label_new ("11/22");
-    gtk_widget_show (mm->item_total);
-    gtk_label_set_width_chars (mm->item_total, ITME_TOTAL_WIDTH);
+    mm->item_total = gtk_label_new ("0/0");
+    //gtk_widget_show (mm->item_total);
+    gtk_label_set_justify (mm->item_total, GTK_JUSTIFY_RIGHT);
+    //gtk_label_set_width_chars (mm->item_total, ITME_TOTAL_WIDTH);
     gtk_misc_set_alignment (GTK_MISC (mm->item_total), ITEM_TOTAL_ALG_X, ITEM_TOTAL_ALG_Y);
     if (PangoFont) {
     	  pango_font_description_set_size (PangoFont, FONT_SIZE_ITEM);
@@ -157,12 +175,19 @@
     
     gtk_box_pack_start (mm, eventbox, FALSE, FALSE, 0);
     gtk_container_add (eventbox, mm->hbox); 
+    gtk_box_pack_start (mm->hbox, btn[0], FALSE, FALSE, 0);
+    gtk_box_pack_start (mm->hbox, btn[1], FALSE, FALSE, 0);
     gtk_box_pack_start (mm->hbox, mm->section_name, TRUE, TRUE, 0);
     gtk_box_pack_end (mm->hbox, mm->item_total, FALSE, FALSE, 0);
     gtk_box_pack_end (mm, mm->scrolled, TRUE, TRUE, 0);
+
+    g_signal_connect (btn[0], "pressed", G_CALLBACK(moko_up_btn_cb), mm);
+    g_signal_connect (btn[1], "pressed", G_CALLBACK(moko_down_btn_cb), mm);
+
+    //moko_sample_model_fill(mm->list_store);
+    gtk_widget_show (mm);
     
-    moko_sample_model_fill(mm->list_store);
-    gtk_widget_show (mm);
+    moko_main_menu_update (mm, mm->top_item);
 
     if (PangoFont)
     	  pango_font_description_free (PangoFont);
@@ -178,16 +203,48 @@
 /* Destruction */
 void 
 moko_main_menu_clear(MokoMainMenu *mm) { 
-    if (!mm) g_free (mm);
+    if (mm->top_item)
+    	{
+    	  /* Free Lists (free .directory and .desktop files) */
+	  mokodesktop_item_folder_contents_free(mm->top_item, mm->top_item);
+	  /* Free Root item */
+	  mokodesktop_item_free(mm->top_item);
+    	}
+    if (mm) g_free (mm);
+    
 }
 
 /*
 *
 *
 */
-void
-moko_main_menu_update(GtkListStore *store) {
+gboolean
+moko_main_menu_update(MokoMainMenu *mm, MokoDesktopItem *item) {
+  MokoDesktopItem *item_new;
+  
+  g_debug("mokodesktop: item [%d][%s][%s]\n", item->type, item->name, item->icon_name);
     
+  item_new = item->item_child;
+  
+  if (item->type == ITEM_TYPE_ROOT)
+  	moko_set_label_content (mm->section_name, "Main Menu");
+  else if (item->type == ITEM_TYPE_FOLDER)
+  	moko_set_label_content (mm->section_name, item->name);
+  else 
+  	return FALSE; // neither ROOT nor FOLDER
+  	
+  mokodesktop_items_enumerate_siblings(item->item_child, item_new){
+  	char path[512];
+	g_debug("mokodesktop: item [%d][%s][%s][%s]\n", 
+				item_new->type, item_new->name,
+				item_new->icon_name, item_new->item_parent->name);
+	snprintf (path, 512, "%s/%s", PIXMAP_PATH, item_new->icon_name);
+	moko_fill_model(mm->list_store, path, item_new->name);
+	
+	g_debug("item [%s][%s]\n", item_new->name, path);
+  }
+  
+  return TRUE;
 }
 
 

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h	2006-12-25 11:13:47 UTC (rev 467)
@@ -28,6 +28,7 @@
 #include <gtk/gtkhbox.h>
 
 #include "mokoiconview.h"
+#include "mokodesktop.h"
 
 enum { 
     PIXBUF_COLUMN,
@@ -72,11 +73,11 @@
 struct _MokoMainMenu {
     GtkVBox vbox;
 
+    MokoDesktopItem *top_item;
     MokoIconView *icon_view;
     GtkListStore *list_store;
     GtkWidget *scrolled;
     GtkHBox *hbox;
-    GtkLabel *blank;
     GtkLabel *section_name;
     GtkLabel *item_total;
     };

Added: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.c	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.c	2006-12-25 11:13:47 UTC (rev 467)
@@ -0,0 +1,344 @@
+#include "mokodesktop.h"
+#include "mokodesktop_item.h"
+
+static void
+item_activate_cb(void *data1, void *data2);
+
+static char* RootMatchStr = NULL;
+static int ItemTypeDotDesktop = 0;
+
+
+static MokoDesktopItem *
+mokodesktop_get_top_level_folder(MokoDesktopItem     *top_head_item)
+{
+  return top_head_item;
+}
+
+static MokoDesktopItem *
+get_folder_from_name ( MokoDesktopItem *top_head_item, char *name )
+{
+  MokoDesktopItem *item, *item_top;
+
+  item_top = mokodesktop_get_top_level_folder(top_head_item);
+
+  if (!strcasecmp(name, "root"))
+    return item_top; 
+
+  mokodesktop_items_enumerate_siblings(mokodesktop_item_get_child(item_top), item)
+    {
+      if (!strcmp(name, mokodesktop_item_get_name (item)))
+	    return item;
+    }
+  
+  return NULL;
+}
+
+static MokoDesktopItem *
+match_folder ( MokoDesktopItem *top_head_item, char *category )
+{
+  MokoDesktopItem *item, *item_fallback = NULL, *item_top;
+  char          *match_str;  
+
+  if (category && strstr(category, "Action")) 
+    return NULL;
+
+  item_top = mokodesktop_get_top_level_folder(top_head_item);
+
+  if (RootMatchStr)
+    {
+      if (!strcmp("fallback", RootMatchStr))
+	    {
+	       item_fallback = item_top;
+	    }
+      else if (category && strstr(category, RootMatchStr))
+	    {
+	       return item_top;
+	    }
+    }
+
+  mokodesktop_items_enumerate_siblings(mokodesktop_item_get_child(item_top), item)
+    {
+      if (mokodesktop_item_get_type (item) == ItemTypeDotDesktop)
+	    {
+	      match_str = (char *)mokodesktop_item_get_user_data(item);
+	      if (match_str != NULL)
+	      {
+	        if (item_fallback == NULL && !strcmp("fallback", match_str))
+		      {
+		        item_fallback = item;
+		        continue;
+		      }
+	        if (category && strstr(category, match_str))
+		      {
+		        return item;
+		      }
+	      }
+	    }
+    }
+  return item_fallback; 
+}
+
+
+static void
+add_a_dotdesktop_item (MokoDesktopItem  *top_head_item, 
+		       MBDotDesktop     *dd,
+		       MokoDesktopItem  *folder)
+{
+  MokoDesktopItem  *item_new = NULL, *item_before, *found_folder_item = NULL;
+  Bool              have_attached = False;
+
+  if (folder)
+    found_folder_item = folder;
+  else
+    found_folder_item = match_folder( top_head_item, mb_dotdesktop_get(dd, "Categories"));
+
+  if ( found_folder_item == NULL) return;
+      
+  item_new = mokodesktop_item_new_with_params( 
+					     mb_dotdesktop_get(dd, "Name"),
+					     mb_dotdesktop_get(dd, "Icon"),
+					     (void *)mb_dotdesktop_get_exec(dd),
+					     ITEM_TYPE_DOTDESKTOP_ITEM
+					     );
+  if (item_new == NULL ) return;
+
+  mokodesktop_item_set_activate_callback (item_new, item_activate_cb); 
+
+  item_before = mokodesktop_item_get_child(found_folder_item);
+
+
+  if(!item_before)
+  {
+  	
+  	mokodesktop_items_append_to_folder( found_folder_item, item_new);
+  	have_attached = True;
+  }
+  else 
+  {
+
+     do
+       {
+         MokoDesktopItem *item_next = NULL;
+         if ((item_next = mokodesktop_item_get_next_sibling(item_before)) != NULL)
+       	{
+      		
+   	      if (item_next->type == ITEM_TYPE_FOLDER
+   	          || item_next->type == ITEM_TYPE_PREVIOUS)
+   	          continue;
+   	  
+   	      if ( (strcasecmp(item_before->name, item_new->name) < 0
+   		       || item_before->type == ITEM_TYPE_FOLDER
+   		       || item_before->type == ITEM_TYPE_PREVIOUS )
+   	         && strcasecmp(item_next->name, item_new->name) > 0)
+   	      {
+   	        have_attached = True;
+   	        mokodesktop_items_insert_after (item_before, item_new);
+   	        break;
+   	      }
+   	    }
+       }
+     while ((item_before = mokodesktop_item_get_next_sibling(item_before)) != NULL);
+   }
+   
+
+  if (!have_attached)
+    {
+      mokodesktop_items_append_to_folder( found_folder_item, item_new);
+    }
+
+}
+
+
+
+MokoDesktopItem*
+mokodesktop_folder_create ( MokoDesktopItem *top_head_item,
+				 char      *name,
+				 char      *icon_name )
+{
+  MokoDesktopItem* item_folder = NULL;
+
+  item_folder
+    = mokodesktop_item_new_with_params( name,
+				      icon_name,
+				      NULL,
+				      ITEM_TYPE_FOLDER
+				      );
+
+  mokodesktop_item_set_activate_callback (item_folder, 
+					mokodesktop_item_folder_activate_cb); 
+
+  return item_folder;
+}
+
+int
+mokodesktop_init ( MokoDesktopItem *top_head_item,
+		              int              type_reg_cnt )
+{
+#define APP_PATHS_N 4
+
+  DIR *dp;
+  struct stat    stat_info;
+
+  char vfolder_path_root[512];
+  char vfolder_path[512];
+  char orig_wd[256];
+
+  int   desktops_dirs_n  = APP_PATHS_N;
+
+  int   i = 0;
+
+  MBDotDesktopFolders     *ddfolders;
+  MBDotDesktopFolderEntry *ddentry;
+  MokoDesktopItem         *item_new = NULL;
+  MBDotDesktop            *dd, *user_overides = NULL;
+
+  char                     app_paths[APP_PATHS_N][256];
+  struct dirent          **namelist;
+/*
+	top_head_item  = mokodesktop_item_new_with_params ("Home", 
+						       NULL,
+						       NULL,
+						       ITEM_TYPE_ROOT );
+*/
+	ItemTypeDotDesktop  = type_reg_cnt;
+  
+  snprintf( vfolder_path_root, 512, "%s/.matchbox/vfolders/Root.directory", 
+	    mb_util_get_homedir());
+  snprintf( vfolder_path, 512, "%s/.matchbox/vfolders", 
+	    mb_util_get_homedir());
+
+ if (stat(vfolder_path_root, &stat_info))
+    {
+      snprintf(vfolder_path_root, 512, VFOLDERDIR "/vfolders/Root.directory");
+      snprintf(vfolder_path, 512, VFOLDERDIR "/vfolders" );
+    }
+ 
+fprintf(stdout, "moko: vfolder_path_root=[%s]\n", vfolder_path_root);
+fprintf(stdout, "moko: vfolder_path=[%s]\n", vfolder_path);
+  
+  dd = mb_dotdesktop_new_from_file(vfolder_path_root);
+
+  if (!dd) 
+    { 
+      fprintf( stderr, "mokodesktop: cant open %s\n", vfolder_path ); 
+      return -1; 
+    }
+
+  RootMatchStr = mb_dotdesktop_get(dd, "Match");
+
+fprintf(stdout, "moko: RootMatchStr=[%s]\n", RootMatchStr);
+  
+  mokodesktop_item_set_name (top_head_item, 
+			   mb_dotdesktop_get(dd, "Name"));  
+  ddfolders = mb_dot_desktop_folders_new(vfolder_path);
+
+  mb_dot_desktop_folders_enumerate(ddfolders, ddentry)
+    {
+      item_new
+	         = mokodesktop_folder_create ( top_head_item,
+					   mb_dot_desktop_folder_entry_get_name(ddentry),
+					   mb_dot_desktop_folder_entry_get_icon(ddentry));
+
+      mokodesktop_item_set_user_data (item_new, 
+				    (void *)mb_dot_desktop_folder_entry_get_match(ddentry));
+
+      mokodesktop_item_set_type (item_new, ItemTypeDotDesktop);
+
+      mokodesktop_items_append_to_top_level (top_head_item, item_new);
+    }
+  
+  
+  snprintf(app_paths[0], 256, "%s/applications", DATADIR);
+  snprintf(app_paths[1], 256, "/usr/share/applications");
+  snprintf(app_paths[2], 256, "/usr/local/share/applications");
+  snprintf(app_paths[3], 256, "%s/.applications", mb_util_get_homedir());
+
+
+  if (getcwd(orig_wd, 255) == (char *)NULL)
+    {
+      fprintf(stderr, "Cant get current directory\n");
+      return -1;
+    }
+
+  for (i = 0; i < desktops_dirs_n; i++)
+    {
+      int   n = 0, j = 0;
+
+      if (i > 0 && !strcmp(app_paths[0], app_paths[i]))
+	        continue;
+
+      if ((dp = opendir(app_paths[i])) == NULL)
+	    {
+	       fprintf(stderr, "mokodesktop: failed to open %s\n", app_paths[i]);
+	       continue;
+	    }
+  
+      chdir(app_paths[i]);
+
+      //n = scandir(".", &namelist, 0, alphasort);
+      n = scandir(".", &namelist, 0, NULL);
+
+      
+      while (j < n && n > 0)
+	    {
+    	  if (namelist[j]->d_name[0] ==  '.')
+	         goto end;
+
+	      if (strcmp(namelist[j]->d_name+strlen(namelist[j]->d_name)-8,".desktop"))
+	         goto end;
+
+	      lstat(namelist[j]->d_name, &stat_info);
+	      if (!(S_ISDIR(stat_info.st_mode)))
+	      {
+	         MBDotDesktop *dd;
+	         dd = mb_dotdesktop_new_from_file(namelist[j]->d_name);
+	         if (dd)
+		       {
+		          if (mb_dotdesktop_get(dd, "Type") 
+		              && !strcmp(mb_dotdesktop_get(dd, "Type"), "Application")
+		              && mb_dotdesktop_get(dd, "Name")
+		              && mb_dotdesktop_get(dd, "Exec"))
+		          {
+		              MokoDesktopItem *folder = NULL;
+		              char             full_path[512];
+		              char          *folder_name = NULL;
+
+		      	      add_a_dotdesktop_item (top_head_item, dd, folder);
+		          }
+		          mb_dotdesktop_free(dd);
+		       }
+	      }
+	      end:
+	         free(namelist[j]);
+	         ++j;
+	    }
+      
+      closedir(dp);
+      free(namelist);
+    }
+    
+  chdir(orig_wd);
+
+  return 1;
+}
+
+
+
+static void
+item_activate_cb(void *data1, void *data2)
+{
+  MokoDesktopItem *top_head_item = (MokoDesktopItem *)data1;
+  MokoDesktopItem *item = (MokoDesktopItem *)data2;
+
+  switch (fork())
+    {
+    case 0:
+      mb_exec((char *)item->data);
+      fprintf(stderr, "exec failed, cleaning up child\n");
+      exit(1);
+    case -1:
+      fprintf(stderr, "can't fork\n");
+      break;
+    }
+}
+

Added: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.h	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop.h	2006-12-25 11:13:47 UTC (rev 467)
@@ -0,0 +1,79 @@
+#ifndef _MOKODESKTOP_H
+#define _MOKODESKTOP_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h> 
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <ctype.h>
+#include <time.h>
+
+#include <libmb/mb.h>
+
+#define VFOLDERDIR 		"/usr/share/matchbox"
+#define DD_DIR 		 	"/usr/share/applications/" 
+
+/* #define DD_DIR "/tmp/" */
+//#define PIXMAP_PATH PIXMAPSDIR
+#define PIXMAP_PATH 	"/usr/share/pixmaps"
+
+
+
+#ifdef DEBUG
+#define DBG(txt, args... ) fprintf(stderr, "DT-DEBUG: " txt , ##args )
+#else
+#define DBG(txt, args... ) /* nothing */
+#endif
+
+
+enum {	   
+  ITEM_TYPE_UNKNOWN = 0,
+  ITEM_TYPE_ROOT,
+
+  ITEM_TYPE_DOTDESKTOP_FOLDER,
+  ITEM_TYPE_DOTDESKTOP_ITEM,
+  ITEM_TYPE_MODULE_ITEM,
+  ITEM_TYPE_MODULE_WINDOW,
+  ITEM_TYPE_APP,
+  ITEM_TYPE_FOLDER,  /* Same as 'official' Directory */
+  ITEM_TYPE_LINK,    /* URL  */
+
+  ITEM_TYPE_FSDEVICE, 
+  ITEM_TYPE_MIMETYPE, 
+  ITEM_TYPE_DIRECTORY, 
+  ITEM_TYPE_SERVICE, 
+  ITEM_TYPE_SERVICETYPE ,
+
+  ITEM_TYPE_TASK_FOLDER, 		/* Not official */
+  ITEM_TYPE_PREVIOUS,
+  ITEM_TYPE_CNT, 
+};
+
+typedef void (*MokoDesktopCB)( void *data1, void *data2 ) ;
+
+typedef struct _mokodesktop_item {
+
+  int                     type;
+  int                     subtype; /* user defined type */
+
+  char                   *name;
+  char                   *name_extended;
+  char                   *comment;
+  char                   *icon_name;
+  void                   *data;
+
+  MokoDesktopCB           activate_cb;
+
+  struct _mokodesktop_item *item_next_sibling; 
+  struct _mokodesktop_item *item_prev_sibling; 
+  struct _mokodesktop_item *item_child; 
+  struct _mokodesktop_item *item_parent; 
+
+} MokoDesktopItem;
+
+#endif

Added: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.c	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.c	2006-12-25 11:13:47 UTC (rev 467)
@@ -0,0 +1,323 @@
+#include "mokodesktop_item.h"
+
+
+#define WARN(txt) fprintf(stderr, "%s:%i %s %s", __FILE__, __LINE__, __func__, txt )
+
+
+MokoDesktopItem *
+mokodesktop_item_new()
+{
+  MokoDesktopItem *ditem;
+  ditem = malloc(sizeof(MokoDesktopItem));
+  memset(ditem, 0, sizeof(MokoDesktopItem));
+  
+  ditem->type = ITEM_TYPE_UNKNOWN;
+
+  return ditem;
+}
+
+void
+mokodesktop_item_free(MokoDesktopItem *item)
+{
+  if (item->name)               free(item->name);
+  if (item->name_extended)      free(item->name_extended);
+  if (item->comment)            free(item->comment);
+  if (item->icon_name)          free(item->icon_name);
+
+  free(item);
+}
+
+Bool
+mokodesktop_item_folder_has_contents(MokoDesktopItem *folder)
+{
+  if (folder->item_child && folder->item_child->item_next_sibling)
+    return True;
+  return False;
+}
+
+void
+mokodesktop_item_folder_contents_free( MokoDesktopItem *top_head_item,
+                                       MokoDesktopItem *item)
+{
+  MokoDesktopItem *item_tmp = NULL, *item_cur = NULL;
+
+  if (item->item_child && item->item_child->item_next_sibling)
+    {
+      if (item == top_head_item )
+	    {
+	       item_cur = item->item_child;
+	       top_head_item->item_child = NULL;
+	    }
+      else item_cur = item->item_child->item_next_sibling;
+
+      while (item_cur != NULL)
+	    {
+	       item_tmp = item_cur->item_next_sibling;
+
+	       if (item_cur->item_child)
+	            mokodesktop_item_folder_contents_free(top_head_item, item_cur->item_child);
+
+	       mokodesktop_item_free(item_cur); 
+	       item_cur = item_tmp;
+	    }
+	    
+      if ( item != top_head_item)
+	       item->item_child->item_next_sibling = NULL;
+    }
+    
+  // fprintf(stdout, "moko:  free ok!\n");
+}
+
+MokoDesktopItem *
+mokodesktop_item_new_with_params (  const char    *name, 
+			                              const char    *icon_name,
+			                              void          *data,
+			                              int            type)
+{
+  MokoDesktopItem *ditem;
+  ditem = mokodesktop_item_new();
+
+  if (name) ditem->name           = strdup(name);
+  if (icon_name)
+    {
+      if (strlen(icon_name) > 5
+	  && icon_name[strlen(icon_name)-4] != '.'
+	  && icon_name[strlen(icon_name)-5] != '.')
+   	  {
+	      ditem->icon_name = malloc(sizeof(char)*(strlen(icon_name)+5));
+	      sprintf(ditem->icon_name, "%s.png", icon_name); 
+	    }
+      else
+	    {
+	      ditem->icon_name = strdup(icon_name);
+	    }
+    }
+
+  if (data) ditem->data           = data;
+
+  if (type) ditem->type           = type;
+
+  return ditem;
+}
+
+
+void
+mokodesktop_items_append ( MokoDesktopItem *item_head,
+			                     MokoDesktopItem *item )
+{
+  MokoDesktopItem *item_tmp = NULL;
+
+  item_tmp = item_head;
+
+  while ( item_tmp->item_next_sibling != NULL )
+    item_tmp = item_tmp->item_next_sibling;
+
+  item_tmp->item_next_sibling = item;
+  item->item_prev_sibling = item_tmp;
+  
+  item->item_parent = item_head->item_parent;
+
+}
+
+void
+mokodesktop_items_insert_after ( MokoDesktopItem *suffix_item,
+		  	                         MokoDesktopItem *item )
+{
+  if (!suffix_item->item_next_sibling)
+    {
+      mokodesktop_items_append (suffix_item, item);
+      return;
+    }
+
+  item->item_next_sibling = suffix_item->item_next_sibling;
+
+  suffix_item->item_next_sibling->item_prev_sibling = item;
+
+  suffix_item->item_next_sibling = item;
+
+  item->item_prev_sibling = suffix_item;  
+}
+
+void
+mokodesktop_items_append_to_folder ( MokoDesktopItem  *item_folder,
+				                             MokoDesktopItem  *item )
+{
+  if (!item_folder->item_child)
+  	{
+  	   item_folder->item_child = item;
+  	   item_folder->item_child->item_parent = item_folder;
+  	   return;	
+  	} 
+  	
+  	
+  mokodesktop_items_append (item_folder->item_child, item);
+
+}
+
+void
+mokodesktop_items_append_to_top_level ( MokoDesktopItem  *top_head_item,
+                                        MokoDesktopItem  *item )
+{
+  MokoDesktopItem *top_level = top_head_item;
+
+  item->item_parent = top_level;
+
+  if (top_level->item_child == NULL)
+    top_level->item_child = item;
+  else
+    mokodesktop_items_append (top_level->item_child, item); 
+}
+
+void
+mokodesktop_items_prepend ( MokoDesktopItem **item_head,
+			                      MokoDesktopItem  *item )
+{
+  MokoDesktopItem *item_tmp = NULL;
+
+  item_tmp = *item_head;
+  item->item_next_sibling = item_tmp;
+  item_tmp->item_prev_sibling = item;
+
+  *item_head = item;
+
+
+}
+
+MokoDesktopItem *
+mokodesktop_item_get_next_sibling(MokoDesktopItem *item)
+{
+  return item->item_next_sibling;
+}
+
+MokoDesktopItem *
+mokodesktop_item_get_prev_sibling(MokoDesktopItem *item)
+{
+  return item->item_prev_sibling;
+}
+
+MokoDesktopItem *
+mokodesktop_item_get_parent(MokoDesktopItem *item)
+{
+  MokoDesktopItem *result = mokodesktop_item_get_first_sibling(item);
+
+  if (result && result->item_parent)
+    return result->item_parent;
+
+  return NULL;
+}
+
+MokoDesktopItem *
+mokodesktop_item_get_child(MokoDesktopItem *item)
+{
+  return item->item_child;
+}
+
+
+MokoDesktopItem *
+mokodesktop_item_get_first_sibling(MokoDesktopItem *item)
+{
+  while (item->item_prev_sibling != NULL )
+    item = item->item_prev_sibling;
+  return item;
+}
+
+MokoDesktopItem *
+mokodesktop_item_get_last_sibling(MokoDesktopItem *item)
+{
+  while (item->item_next_sibling != NULL )
+    item = item->item_next_sibling;
+  return item;
+}
+
+
+
+void
+mokodesktop_item_set_name ( MokoDesktopItem *item, 
+			                      char            *name)
+{
+  if (item->name) free(item->name);
+  item->name = strdup(name);
+}
+
+char *
+mokodesktop_item_get_name (MokoDesktopItem *item)
+{
+  return item->name;
+}
+
+void
+mokodesktop_item_set_comment ( MokoDesktopItem *item, 
+			                         char            *comment)
+{
+  if (item->comment) free(item->comment);
+  item->comment = strdup(comment);
+}
+
+char *
+mokodesktop_item_get_comment (MokoDesktopItem *item)
+{
+  return item->comment;
+}
+
+
+void
+mokodesktop_item_set_extended_name ( MokoDesktopItem *item, 
+				                             char            *name)
+{
+  if (item->name_extended) free(item->name_extended);
+  item->name_extended = strdup(name);
+}
+
+char *
+mokodesktop_item_get_extended_name (MokoDesktopItem *item)
+{
+  return item->name_extended;
+}
+
+void
+mokodesktop_item_set_user_data ( MokoDesktopItem *item, 
+			                         void          *data)
+{
+  if (item->data) free(item->data); 
+  item->data = data;
+}
+
+void *
+mokodesktop_item_get_user_data (MokoDesktopItem *item)
+{
+  return item->data;
+}
+
+void
+mokodesktop_item_set_activate_callback (MokoDesktopItem *item, 
+				                                MokoDesktopCB    activate_cb)
+{
+  item->activate_cb = activate_cb;
+}
+
+void
+mokodesktop_item_set_type (MokoDesktopItem *item,
+			                     int            type)
+{
+  item->subtype = type;
+}
+
+int
+mokodesktop_item_get_type (MokoDesktopItem *item)
+{
+  return item->subtype;
+}
+
+void
+mokodesktop_item_folder_activate_cb(void *data1, void *data2)
+{
+  MokoDesktopItem *top_head_item = (MokoDesktopItem *)data1; 
+  MokoDesktopItem *item = (MokoDesktopItem *)data2; 
+}
+
+void
+mbdesktop_item_folder_prev_activate_cb(void *data1, void *data2)
+{
+  MokoDesktopItem *top_head_item = (MokoDesktopItem *)data1; 
+  MokoDesktopItem *item = (MokoDesktopItem *)data2; 
+}

Added: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.h	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokodesktop_item.h	2006-12-25 11:13:47 UTC (rev 467)
@@ -0,0 +1,135 @@
+#ifndef _HAVE_MOKODESKTOP_ITEM_H
+#define _HAVE_MOKODESKTOP_ITEM_H
+
+#include "mokodesktop.h"
+
+
+#define mokodesktop_items_enumerate_siblings(item_head, item)  \
+     for ( (item) = (item_head);                             \
+	   (item) != NULL;                                   \
+	   (item) = (item)->item_next_sibling )              \
+
+/**
+ * Constructs a new blank mbpixbuf image without an alpha channel.
+ *
+ * @returns a MBPixbufImage object
+ */
+MokoDesktopItem *mokodesktop_item_new();
+
+/**
+ * Constructs a new blank mbpixbuf image without an alpha channel.
+ *
+ * @param mbdesktop
+ * @param item
+ */
+void
+mokodesktop_item_free(MokoDesktopItem *item);
+
+
+Bool
+mokodesktop_item_folder_has_contents(MokoDesktopItem *folder);
+
+
+void
+mokodesktop_item_folder_contents_free( MokoDesktopItem *top_head_item,
+                                       MokoDesktopItem *item);
+
+
+MokoDesktopItem *
+mokodesktop_item_new_with_params (  const char    *name, 
+			                              const char    *icon_name,
+			                              void          *data,
+			                              int            type);
+
+
+
+void
+mokodesktop_items_append ( MokoDesktopItem *item_head,
+			                     MokoDesktopItem *item );
+
+void
+mokodesktop_items_insert_after ( MokoDesktopItem *suffix_item,
+		  	                         MokoDesktopItem *item );
+
+
+void
+mokodesktop_items_append_to_folder ( MokoDesktopItem  *item_folder,
+				                             MokoDesktopItem  *item );
+
+void
+mokodesktop_items_append_to_top_level ( MokoDesktopItem  *top_head_item,
+                                        MokoDesktopItem  *item );
+
+void
+mokodesktop_items_prepend ( MokoDesktopItem **item_head,
+			                      MokoDesktopItem  *item );
+
+MokoDesktopItem *
+mokodesktop_item_get_next_sibling(MokoDesktopItem *item) ;
+
+MokoDesktopItem *
+mokodesktop_item_get_prev_sibling(MokoDesktopItem *item);
+
+MokoDesktopItem *
+mokodesktop_item_get_parent(MokoDesktopItem *item);
+
+
+MokoDesktopItem *
+mokodesktop_item_get_child(MokoDesktopItem *item);
+
+MokoDesktopItem *
+mokodesktop_item_get_first_sibling(MokoDesktopItem *item);
+
+MokoDesktopItem *
+mokodesktop_item_get_last_sibling(MokoDesktopItem *item);
+
+void
+mokodesktop_item_set_name ( MokoDesktopItem *item, 
+			                      char            *name);
+
+char *
+mokodesktop_item_get_name (MokoDesktopItem *item);
+
+void
+mokodesktop_item_set_comment ( MokoDesktopItem *item, 
+			                         char            *comment);
+
+char *
+mokodesktop_item_get_comment (MokoDesktopItem *item);
+
+void
+mokodesktop_item_set_extended_name ( MokoDesktopItem *item, 
+				                             char            *name);
+
+char *
+mokodesktop_item_get_extended_name (MokoDesktopItem *item);
+
+
+void
+mokodesktop_item_set_user_data ( MokoDesktopItem *item, 
+			                         void          *data);
+void *
+mokodesktop_item_get_user_data (MokoDesktopItem *item);
+
+
+void
+mokodesktop_item_set_type (MokoDesktopItem *item,
+			                     int            type);
+
+int
+mokodesktop_item_get_type (MokoDesktopItem *item);
+
+
+
+void
+mokodesktop_item_set_activate_callback (MokoDesktopItem *item, 
+				                                MokoDesktopCB    activate_cb);
+
+void
+mokodesktop_item_folder_activate_cb(void *data1, void *data2);
+
+void
+mbdesktop_item_folder_prev_activate_cb(void *data1, void *data2);
+
+
+#endif

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c	2006-12-25 11:13:47 UTC (rev 467)
@@ -75,6 +75,7 @@
   gint max_text_len;
   gint decr_width;
   gboolean decorated;
+  int total_items;
 
   guint ctrl_pressed : 1;
   guint shift_pressed : 1;
@@ -135,7 +136,9 @@
   PROP_BG_TEXT,
   PROP_DECORATION_WIDTH,
   PROP_DECORATED,
-  PROP_MAX_TEXT_LENGTH
+  PROP_MAX_TEXT_LENGTH,
+  PPOP_CURSOR_POSITION,
+  PROP_TOTAL_ITEMS
 };
 
 /* GObject signals */
@@ -505,7 +508,7 @@
                                                         GDK_TYPE_PIXBUF,
                                                         G_PARAM_READWRITE)); 
  /**
-   * MokoIconView::bg-layout:
+   * MokoIconView::bg-text:
    *
    * The selected text column background image, the decorated property should be set first.
    *  Default value NULL.
@@ -560,6 +563,34 @@
 						     P_("The width used for scale icon and draw decoration"),
 						     -1, G_MAXINT, -1,
 						     G_PARAM_READWRITE)); 
+
+/**
+   * MokoIconView::max-text-len:
+   *
+   * Maximum text column width.
+   *
+   */
+    g_object_class_install_property (gobject_class,
+				    PPOP_CURSOR_POSITION,
+				   g_param_spec_int ("index",
+						     P_("index of cursor item"),
+						     P_(""),
+						     -1, G_MAXINT, -1,
+						     G_PARAM_READABLE)); 
+
+/**
+   * MokoIconView::max-text-len:
+   *
+   * Maximum text column width.
+   *
+   */
+    g_object_class_install_property (gobject_class,
+				     PROP_TOTAL_ITEMS,
+				   g_param_spec_int ("total_items",
+						     P_("total items number"),
+						     P_(""),
+						     -1, G_MAXINT, -1,
+						     G_PARAM_READABLE)); 
      
 /*Old properties of GtkIconView*/
   /**
@@ -798,6 +829,15 @@
 		  G_TYPE_BOOLEAN, 2,
 		  GTK_TYPE_MOVEMENT_STEP,
 		  G_TYPE_INT);
+
+    moko_icon_view_signals[SELECTION_CHANGED] =
+    g_signal_new ("selection_changed",
+		  G_TYPE_FROM_CLASS (gobject_class),
+		  G_SIGNAL_RUN_FIRST,
+		  G_STRUCT_OFFSET (MokoIconViewClass, selection_changed),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__VOID,
+		  G_TYPE_NONE, 0);
     
 /*Only for test delete later*/
   moko_icon_view_add_move_binding (binding_set, GDK_Up, 0,
@@ -2046,6 +2086,7 @@
       item->col = col;
 
       col += colspan;
+      icon_view->priv->total_items +=1;
       items = items->next;
     }
 
@@ -2124,6 +2165,8 @@
   gint row;
   gint item_width;
 
+  icon_view->priv->total_items = 0;
+
   if (!VALID_MODEL_AND_COLUMNS (icon_view))
     return;
 
@@ -2141,7 +2184,7 @@
 	  moko_icon_view_item_invalidate_size (item);
 	}
     }
-
+  
   icons = icon_view->priv->items;
   y += icon_view->priv->margin;
   row = 0;
@@ -2154,7 +2197,7 @@
       row++;
     }
   while (icons != NULL);
-
+g_debug ("total_item = %d", icon_view->priv->total_items);
   if (maximum_width != icon_view->priv->width)
     {
       icon_view->priv->width = maximum_width;
@@ -2383,7 +2426,13 @@
     case PROP_MAX_TEXT_LENGTH:
       g_value_set_int (value, icon_view->priv->max_text_len);
       break;
-
+    case PPOP_CURSOR_POSITION:
+      g_value_set_int (value, icon_view->priv->cursor_item->index);
+      break;
+    case PROP_TOTAL_ITEMS:
+      g_value_set_int (value, icon_view->priv->total_items);
+      break;
+      	
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -4262,3 +4311,35 @@
 
     return icon_view->priv->max_text_len;
 }
+
+/**
+ *moko_icon_view_get_cursor_positon:
+ *@icon_view		a #MokoIconView
+ *
+ *Return Value: ::cursor_item::index.
+ *
+ */
+gint
+moko_icon_view_get_cursor_positon (MokoIconView *icon_view)
+{
+  g_return_val_if_fail (MOKO_IS_ICON_VIEW (icon_view), -1);
+  if (!icon_view->priv->cursor_item)
+  	return -1;
+  return (icon_view->priv->cursor_item->index + 1);
+}
+
+/**
+ *moko_icon_view_get_total_items:
+ *@icon_view		a #MokoIconView
+ *
+ *Return Value: ::total_items.
+ *
+ */
+gint
+moko_icon_view_get_total_items (MokoIconView *icon_view)
+{
+  g_return_val_if_fail (MOKO_IS_ICON_VIEW (icon_view), -1);
+
+    return icon_view->priv->total_items;
+}
+

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h	2006-12-25 09:42:22 UTC (rev 466)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h	2006-12-25 11:13:47 UTC (rev 467)
@@ -39,8 +39,6 @@
 {
   GtkContainerClass parent_class;
 
-  void(*moko_icon_view_function)(MokoIconView *self);
-
   void    (* set_scroll_adjustments) (MokoIconView      *icon_view,
 				      GtkAdjustment    *hadjustment,
 				      GtkAdjustment    *vadjustment);
@@ -162,6 +160,13 @@
 gint
 moko_icon_view_get_max_text_length (MokoIconView *icon_view);
 
+gint
+moko_icon_view_get_cursor_positon (MokoIconView *icon_view);
+
+gint
+moko_icon_view_get_total_items (MokoIconView *icon_view);
+
+
 GtkTreePath *
 moko_icon_view_get_path_at_pos (MokoIconView *icon_view, gint x, gint y);
 





More information about the commitlog mailing list