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