r535 - in trunk/src/target/OM-2007/applications/openmoko-taskmanager: . src

tongsong_li at gta01.hmw-consulting.de tongsong_li at gta01.hmw-consulting.de
Thu Jan 11 10:39:41 CET 2007


Author: tongsong_li
Date: 2007-01-11 10:39:15 +0100 (Thu, 11 Jan 2007)
New Revision: 535

Modified:
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c
   trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h
Log:
add functions of four toolbox buttons and finger wheel buttons, impliment MokoTaskList object with GtkTreeView, Sun Zhiyong <sunzhiyong at fic-sh.com.cn>

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/Makefile.am	2007-01-11 09:39:15 UTC (rev 535)
@@ -1,2 +1,2 @@
-SUBDIRS = src
+SUBDIRS = src data
 

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/configure.ac	2007-01-11 09:39:15 UTC (rev 535)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.53)
-AC_INIT(%(APPNAME), %(APPVERSION), %(APPCONTACT))
+AC_INIT(openmoko-taskmanager, %(0.0.1), http://www.openmoko.org)
 AM_INIT_AUTOMAKE()
 AC_CONFIG_SRCDIR(src/taskmanager.c)
 AM_CONFIG_HEADER(config.h)
@@ -13,6 +13,8 @@
 # base deps
 PKG_CHECK_MODULES(OPENMOKO, openmoko-libs >= 0.0.1,,
                  AC_MSG_ERROR([*** Required OpenMoko Libraries >= 0.0.1 not installed ***]))
+PKG_CHECK_MODULES(LIBMB, libmb, ,
+			exit)
 LIBS="$LIBS $GTK_LIBS"
 CFLAGS="$CFLAGS $OPENMOKO_CFLAGS"
 
@@ -20,4 +22,5 @@
 AC_OUTPUT([
 Makefile
 src/Makefile
+data/Makefile
 ])

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.c	2007-01-11 09:39:15 UTC (rev 535)
@@ -19,43 +19,41 @@
 
 #include "callbacks.h"
 
-void 
-om_update_store_list (Display *dpy, GtkListStore *list_store);
-
-void 
-om_set_list_highlight (Display *dpy, List *l);
-
 GdkFilterReturn
-om_window_filter (GdkXEvent *xev, GdkEvent *gev, List *l) {
+moko_window_filter (GdkXEvent *xev, GdkEvent *gev, MokoTaskList*l) 
+{
     XEvent *ev = (XEvent *)xev;
     Display *dpy = ev->xany.display;
 
     if (ev->xany.type == PropertyNotify
       	 && ev->xproperty.window == DefaultRootWindow (dpy)) {
         if (ev->xproperty.atom == atoms[_NET_CLIENT_LIST])	{
-		om_update_store_list(dpy, l->list_store);
+		moko_update_store_list(dpy, l->list_store);
       	 }
       	 else if (ev->xproperty.atom == atoms[_NET_ACTIVE_WINDOW]) {
-		om_set_list_highlight (dpy, l);
+		moko_set_list_highlight (dpy, l);
       	 }
     }
     return GDK_FILTER_CONTINUE;
 }
 
 gboolean
-om_wm_cmd (GtkWidget *w, GtkWidget *list_view, int task) {
+moko_wm_cmd (GtkWidget *w, GtkWidget *list_view, int task)
+{
     GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (list_view));
     GtkTreeIter iter;
     GtkTreeModel *model;
 
-    if (gtk_tree_selection_get_selected (sel, &model, &iter)) {
+    if (gtk_tree_selection_get_selected (sel, &model, &iter)) 
+    	{
     	  Window w;
 
-    	  gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, 1, &w, -1);
+    	  gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, OBJECT_COL, &w, -1);
     	  mbcommand(GDK_DISPLAY(), task, w, NULL);
     	  return TRUE;
     	  }
-    else {
+    else 
+    	{
     	  /*GtkMessageDialog* dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_toplevel(w)),
  							GTK_DIALOG_DESTROY_WITH_PARENT,
 		                                   GTK_MESSAGE_ERROR,      
@@ -66,146 +64,173 @@
 	  return TRUE;
 	  */
 	  g_debug ("send message to footer");
+    	  return FALSE;
     	  }
-    }
+}
 
-
 gboolean 
-om_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model) {
+moko_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model)
+{
     g_debug ("Tab event");
-    }
+    
+}
 
+
 void
-om_add_window (Display *dpy, Window w, GtkListStore *list_store){
-    GtkTreeIter iter;
-    gchar *name = NULL;
-    GdkPixbuf *icon = NULL;
-    Atom type;
+moko_go_to_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+    if (!tm)
+    	return;
+    moko_wm_cmd (GTK_WIDGET (tm), 
+    			GTK_WIDGET (tm->l->list_view), MB_CMD_ACTIVAE_CLIENT);
+}
 
-    icon = om_get_window_icon (dpy, w);
-    name = om_get_window_name(dpy, w);
-    gtk_list_store_append (list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, name, 1, w, -1);
-    //gtk_list_store_set (list_store, &iter, 1, w, -1);
+void
+moko_kill_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+    if (!tm)
+    	return;
+    moko_wm_cmd (GTK_WIDGET (tm), 
+    			GTK_WIDGET (tm->l->list_view), MB_CMD_REMOVE_CLIENT);
+}
 
-    if (icon) {
-        GdkPixbuf *icons = gdk_pixbuf_scale_simple (icon, 160, 160, GDK_INTERP_BILINEAR);
-        gdk_pixbuf_unref (icon);
-        gtk_list_store_set (list_store, &iter, 2, icons, -1);
-        }
-    /*FIXME if no icon there should be a default icon to be added*/
-    /*else {
-        GtkWidget *def_icon = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_SMALL_TOOLBAR);
-        GdkPixbuf *icons = gdk_pixbuf_scale_simple (def_icon, 160, 160, GDK_INTERP_BILINEAR);
-        gdk_pixbuf_unref (def_icon);
-        gtk_list_store_set (list_store, &iter, 2, icons, -1);
-        }
-   	*/
-   }
-
-void 
-om_update_store_list (Display *dpy, GtkListStore *list_store) {
-    Window *list;
-    guint nr, i;
+void
+moko_kill_all_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{    
+    GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tm->l->list_view));
     GtkTreeIter iter;
-    char *p;
+    GtkTreeModel *model;
+    Window *win;
+    GSList *list = NULL;
+    
+    gtk_tree_selection_get_selected (sel, &model, &iter);
 
-    if (om_update_net_undocked_client_list (dpy, &list, &nr) == FALSE)
+    if (!gtk_tree_model_get_iter_first (model, &iter))
     	return;
-    p = g_malloc0 (nr);
-
-    if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter))	{
-    	gboolean more;
-    do{
-    	gboolean found = FALSE;
-    	Window w;
-    	gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, 1, &w, -1);
-    	for (i=0; i<nr; i++) {
-    	    if (list[i] == w) {
-    	    	p[i] = 1;
-    	    	found = TRUE;
-    	    	break;
-    	    	}
-    	    }
-    	if (found)
-    	    more = gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter);
-    	else
-    	    more = gtk_list_store_remove (list_store, &iter);
-    	}
-    while (more);
-    }
     
-    for (i=0; i<nr; i++) {
-    	if (p[i] == 0 && list[i] != my_win)
-    	    om_add_window (dpy, list[i], list_store);
+    do 
+    	{
+    	gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, OBJECT_COL, &win, -1);
+    	list = g_slist_append (list, win);
+    	if (!gtk_tree_model_iter_next (model, &iter))
+    		break;
     	}
+    while (1);
 
-  	g_free (p);
-}
-
-
-void 
-om_set_list_highlight (Display *dpy, List *l) {
-    Window *wp;
-    Atom type;
-    int format;
-    unsigned long nitems;
-    unsigned long bytes_after;
+   do{
+   	mbcommand (GDK_DISPLAY(), MB_CMD_REMOVE_CLIENT, list->data, NULL); 
+   	g_debug ("%d", list->data);
   
-    if (XGetWindowProperty (dpy, DefaultRootWindow (dpy), atoms[_NET_ACTIVE_WINDOW],
-			  0, 4, False, XA_WINDOW, &type, &format, &nitems, &bytes_after, 
-			  (unsigned char **)&wp) == Success)	{
-        if (wp) {
-            Window w;
-            w = *wp;
-            if (w != 0 && w != my_win) {
-                GtkTreeIter iter;
-                if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (l->list_store), &iter))	{
-                    Window iw;
-                    do {
-                        gtk_tree_model_get (GTK_TREE_MODEL (l->list_store), &iter, 1, &iw, -1);
-                        if (iw == w)	{
-                            GtkTreePath *path;
-                            path = gtk_tree_model_get_path (GTK_TREE_MODEL (l->list_store), &iter);
-                            //gtk_tree_view_set_cursor (GTK_TREE_VIEW (l->mokolist_view), path, NULL, FALSE);
-                            gtk_tree_view_set_cursor (GTK_TREE_VIEW (l->list_view), path, NULL, FALSE);
-                            gtk_tree_path_free (path);
-                            break;
-                            }
-                        }while (gtk_tree_model_iter_next (GTK_TREE_MODEL (l->list_store), &iter));
-                    }
-                }
-            XFree (wp);
-            }
-        }
-    }
+	}
+    while (list = g_slist_next (list));
+    	  /*Window w;
 
+    	  gtk_tree_model_get (GTK_TREE_MODEL (model), &iter, OBJECT_COL, &w, -1);
+    	  mbcommand(GDK_DISPLAY(), task, w, NULL);
+    	  return TRUE;
+    	  }
+*/
+  if (list)
+ 	g_slist_free (list);
+}
 void
-om_tab_event_cb (GtkButton *btn, List *l) {
+moko_quit_btn_cb (GtkButton *btn, MokoTaskManager *tm)
+{
+    if (!tm)
+    	return;
+    gtk_widget_hide (GTK_WIDGET (tm->wheel));
+    gtk_widget_hide (GTK_WIDGET (tm->toolbox));
+    gtk_widget_hide (GTK_WIDGET (tm->window));
+}
+
+void
+moko_tab_event_cb (GtkButton *btn, MokoTaskList *l) 
+{
     g_debug ("tab event");
     GtkTreeIter iter;
     GtkTreePath *path;
     GtkTreeViewColumn *col;
     GtkTreeModel *model;
 
-    gtk_tree_view_get_cursor(l->list_view, &path, &col);
+    gtk_tree_view_get_cursor(GTK_TREE_VIEW (l->list_view), &path, &col);
     //gtk_tree_view_get_cursor(l->mokolist_view, &path, &col);
 
     model = GTK_TREE_MODEL (l->list_store);
 
     if (gtk_tree_model_get_iter (model, &iter, path)) {
         Window w;
-        gtk_tree_model_get (model, &iter, 1, &w, -1);
-        //om_print_win_list(GDK_DISPLAY(), &w, 1);
-        //om_send_Xclimsgwm(GDK_DISPLAY (), w);
+        gtk_tree_model_get (model, &iter, OBJECT_COL, &w, -1);
+        //moko_print_win_list(GDK_DISPLAY(), &w, 1);
+        //moko_send_Xclimsgwm(GDK_DISPLAY (), w);
         mbcommand(GDK_DISPLAY(), MB_CMD_ACTIVAE_CLIENT, w, NULL);
         }
     if (path)
     	free (path);
-    }
+}
 
 void        
-om_hold_event_cb (GtkButton *btn, List *l) {
-    g_debug ("tab with hold event");
-    om_init_popup_menu(NULL, NULL, l);
-    }
+moko_hold_event_cb (GtkButton *btn, MokoTaskList *l) 
+{
+    moko_init_popup_menu(NULL, NULL, l);
+ }
+
+void
+moko_wheel_left_up_press_cb (GtkWidget *self, MokoTaskManager *tm)
+{
+   GtkTreeSelection    *selection;
+   GtkTreeModel        *model;
+   GtkTreeIter         iter;
+   GtkTreePath* path;
+
+   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tm->l->list_view));
+
+   if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+	 return;
+   
+   path = gtk_tree_model_get_path (model, &iter);
+   if (!gtk_tree_path_prev (path))
+   {
+	gtk_tree_path_free (path);
+	return;
+   }
+   
+   gtk_tree_view_set_cursor (GTK_TREE_VIEW (tm->l->list_view), path, 0, 0);
+   gtk_tree_path_free (path);
+   return;
+}
+
+void
+moko_wheel_right_down_press_cb (GtkWidget *self, MokoTaskManager *tm)
+{
+   GtkTreeSelection    *selection;
+   GtkTreeModel        *model;
+   GtkTreeIter         iter;
+   GtkTreePath* path;
+
+   if (!tm->l->list_view)
+ 	return;
+	 
+   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tm->l->list_view));
+
+   if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+	 return;
+   
+   path = gtk_tree_model_get_path (model, &iter);
+   gtk_tree_path_next (path);
+   
+   if (!path)
+	return;
+     
+   gtk_tree_view_set_cursor (GTK_TREE_VIEW (tm->l->list_view), path, 0, 0);
+   gtk_tree_path_free (path);
+   return;
+ }
+
+void
+moko_wheel_bottom_press_cb (GtkWidget *self, MokoTaskManager *tm)
+{
+    if (!tm)
+    	return;
+    gtk_main_quit ();
+    g_free (tm);
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/callbacks.h	2007-01-11 09:39:15 UTC (rev 535)
@@ -22,31 +22,54 @@
 #include <gtk/gtk.h>
 #include <X11/Xlib.h>
 
+#include "taskmanager.h"
 #include "misc.h"
 #include "list_view.h"
 #include "xatoms.h"
 #include "popupmenu.h"
 
 GdkFilterReturn
-om_window_filter (GdkXEvent *xev, GdkEvent *gev, List *l);
+moko_window_filter (GdkXEvent *xev, GdkEvent *gev, MokoTaskList*l);
 
 void
-om_activate_task (GtkWidget *w, GtkWidget *list_view);
+moko_activate_task (GtkWidget *w, GtkWidget *list_view);
 
 gboolean
-om_kill_task (GtkWidget *w, GtkWidget *list_view);
+moko_kill_task (GtkWidget *w, GtkWidget *list_view);
 
 void
-om_row_activated (GtkTreeView *treeview, GtkTreePath *path, 
+moko_row_activated (GtkTreeView *treeview, GtkTreePath *path, 
 			GtkTreeViewColumn *col, GtkTreeModel *model);
 
 gboolean 
-om_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model);
+moko_cursor_changed(GtkTreeView *treeview, GtkTreeModel *model);
 
 void
-om_tab_event_cb (GtkButton *btn, List *l);
+moko_quit_btn_cb (GtkButton *btn, MokoTaskManager *tm);
 
+void
+moko_kill_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+
+void
+moko_kill_all_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+
+void
+moko_go_to_btn_cb (GtkButton *btn, MokoTaskManager *tm);
+
+void
+moko_tab_event_cb (GtkButton *btn, MokoTaskList *l);
+
 void        
-om_hold_event_cb (GtkButton *btn, List *l);
+moko_hold_event_cb (GtkButton *btn, MokoTaskList *l);
 
+void
+moko_wheel_left_up_press_cb (GtkWidget *self, MokoTaskManager *tm);
+
+void
+moko_wheel_right_down_press_cb (GtkWidget *self, MokoTaskManager *tm);
+
+void
+moko_wheel_bottom_press_cb (GtkWidget *self, MokoTaskManager *tm);
+
+
 #endif /*callbacks.h*/

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.c	2007-01-11 09:39:15 UTC (rev 535)
@@ -17,24 +17,27 @@
  * General Public License for more details.
  */
 
- #include "list_view.h"
+#include "list_view.h"
+#include <gdk/gdk.h>
 
- enum {
+static GdkPixbuf *default_icon;
+
+enum {
     LIST_SIGNAL,
     LAST_SIGNAL
 };
 
-static void list_class_init          (ListClass *klass);
-static void list_init                (List *l);
+static void moko_task_list_class_init          (MokoTaskListClass *klass);
+static void moko_task_list_init                (MokoTaskList *l);
 
 static guint list_signals[LAST_SIGNAL] = { 0 };
 
 /**
-*@brief retrun List type.
+*@brief retrun MokoTaskList type.
 *@param none
 *@return GType
 */
-GType list_get_type (void) /* Typechecking */
+GType moko_task_list_get_type (void) /* Typechecking */
 {
     static GType list_type = 0;
 
@@ -42,35 +45,35 @@
     {
         static const GTypeInfo list_info =
         {
-            sizeof (ListClass),
+            sizeof (MokoTaskListClass),
             NULL, /* base_init */
             NULL, /* base_finalize */
-            (GClassInitFunc) list_class_init,
+            (GClassInitFunc) moko_task_list_class_init,
             NULL, /* class_finalize */
             NULL, /* class_data */
-            sizeof (List),
+            sizeof (MokoTaskList),
             0,
-            (GInstanceInitFunc) list_init,
+            (GInstanceInitFunc) moko_task_list_init,
             NULL
         };
 
-        list_type = g_type_register_static (GTK_TYPE_VBOX, "List", &list_info, 0);
+        list_type = g_type_register_static (GTK_TYPE_VBOX, "MokoTaskList", &list_info, 0);
     }
 
     return list_type;
 }
 
 /**
-*@brief initialize List class.
-*@param klass	List Class
+*@brief initialize MokoTaskList class.
+*@param klass	MokoTaskList Class
 *@return none
 */
-static void list_class_init(ListClass * Klass) /* Class Initialization */
+static void moko_task_list_class_init(MokoTaskListClass * Klass) /* Class Initialization */
 {
     list_signals[LIST_SIGNAL] = g_signal_new ("list",
             G_TYPE_FROM_CLASS (Klass),
             G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
-            G_STRUCT_OFFSET (ListClass, list),
+            G_STRUCT_OFFSET (MokoTaskListClass, list),
             NULL,
             NULL,
             g_cclosure_marshal_VOID__VOID,
@@ -79,20 +82,29 @@
 }
 
 /**
-*@brief initialize List UI.
-*@param l	List instance
+*@brief initialize MokoTaskList UI.
+*@param l	MokoTaskList instance
 *@return none
 */
 static void /* Instance Construction */
-list_init (List *l) { 
-    GtkWidget *ico;
-    l->list_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_OBJECT);
+moko_task_list_init (MokoTaskList *l) 
+{ 
+    GtkCellRenderer *renderer;
+    GtkTreeViewColumn *column;
+   // GtkWidget *ico;
+    GtkWidget *align;
+
+    align=gtk_alignment_new(0, 0, 1, 1);    
+    gtk_alignment_set_padding(GTK_ALIGNMENT (align), 0, 150, 0, 0);
+    l->list_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_INT, GDK_TYPE_PIXBUF);
     l->list_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (l->list_store));
+    gtk_widget_set_name (l->list_view, "gtktreeview-black");
+    gtk_widget_show (l->list_view);
     //l->mokolist_view = moko_tree_view_new_with_model (GTK_TREE_MODEL (l->list_store));
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (l->list_view), FALSE);
     //gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (l->mokolist_view), FALSE);
     
-    l->renderer = gtk_cell_renderer_pixbuf_new ();
+   /* l->renderer = gtk_cell_renderer_pixbuf_new ();
     l->column = gtk_tree_view_column_new_with_attributes ("Icon", l->renderer, "pixbuf", 2, NULL);
     gtk_tree_view_append_column (GTK_TREE_VIEW (l->list_view), l->column);
     //moko_tree_view_append_column (GTK_TREE_VIEW (l->mokolist_view), l->column);
@@ -101,48 +113,169 @@
     l->column = gtk_tree_view_column_new_with_attributes ("Running programs", l->renderer, 
     													"text", 0, NULL);
    gtk_tree_view_append_column (GTK_TREE_VIEW (l->list_view), l->column);
-  	//	*/
-   // moko_tree_view_append_column (GTK_TREE_VIEW (l->mokolist_view), l->column);
+  		*/
+
+   column = gtk_tree_view_column_new();
+   gtk_tree_view_column_set_title (column, ("Task list"));
+   gtk_tree_view_column_set_resizable (column, TRUE);
+  
+    renderer = gtk_cell_renderer_pixbuf_new ();
+   gtk_tree_view_column_pack_start (column,  renderer , FALSE);
+   gtk_tree_view_column_set_attributes (column,  renderer , 
+  				"pixbuf", PIXBUF_COL, NULL);
+
+   renderer = gtk_cell_renderer_text_new ();
+   gtk_tree_view_column_pack_start (column,  renderer , FALSE);
+   gtk_tree_view_column_set_attributes(column,  renderer , 
+   				"text", TEXT_COL, NULL);
+  
+   gtk_tree_view_append_column (GTK_TREE_VIEW (l->list_view), column);
 		
     l->scrolled = gtk_scrolled_window_new (NULL, NULL);
+    gtk_widget_show (l->scrolled);
     gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (l->scrolled),
-				  GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-    gtk_container_add (GTK_CONTAINER (l->scrolled), l->list_view);
-    
+				  GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+    gtk_container_add (GTK_CONTAINER (align), l->list_view);
+    gtk_container_add (GTK_CONTAINER (l->scrolled), align);
+    gtk_widget_set_size_request (l->scrolled, -1, 400);
+   
     //l->scrolled = moko_tree_view_put_into_scrolled_window (l->mokolist_view);
 
-    l->btn_close = gtk_button_new ();
-    ico = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_widget_show (ico);
-    gtk_container_add(GTK_CONTAINER(l->btn_close), ico);
-    gtk_widget_show (l->btn_close);
-
-    l->hbox = gtk_hbox_new (FALSE, 0);
-    gtk_widget_show (l->hbox);
-
-    gtk_box_pack_start (GTK_BOX (l), l->hbox, FALSE, FALSE, 0);
-    gtk_box_pack_end (l->hbox, l->btn_close, FALSE, FALSE, 0);
-    gtk_box_pack_end (GTK_BOX (l), l->scrolled, TRUE, TRUE, 0);
-
-/*delete later*/
-    l->tab = gtk_button_new_with_label ("tab");
-    l->tabhold = gtk_button_new_with_label ("tab with hold");
-    gtk_widget_show (l->tab);
-    gtk_widget_show (l->tabhold);
-    gtk_box_pack_start (GTK_BOX (l), l->tab, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (l), l->tabhold, FALSE, FALSE, 0);
-/*end deleter later*/
+    //gtk_box_pack_start (GTK_BOX (l), l->hbox, FALSE, FALSE, 0);
+    //gtk_box_pack_end (l->hbox, l->btn_close, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (l), l->scrolled, TRUE, TRUE, 0);
+    
+    default_icon = gdk_pixbuf_new_from_file_at_size (PKGDATADIR"/default-app-icon.xpm",
+		    					160, 160, NULL);
+    if (!default_icon )
+	    g_error ("Failed to load default icon");
 }
 
 /* Construction */
 GtkWidget* 
-list_new() {
-    return GTK_WIDGET(g_object_new(list_get_type(), NULL));
+moko_task_list_new() 
+{
+    return GTK_WIDGET(g_object_new(moko_task_list_get_type(), NULL));
 }
 
 /* Destruction */
 void 
-list_clear(List *l) { 
+moko_task_list_clear(MokoTaskList *l) { 
     if (!l) g_free (l);
 }
 
+static void
+moko_add_window (Display *dpy, Window w, GtkListStore *list_store)
+{
+    GtkTreeIter iter;
+    gchar *name = NULL;
+    GdkPixbuf *icon = NULL;
+
+    name = moko_get_window_name(dpy, w);
+    if (!strcmp (name, "Openmoko-taskmanager"))
+    	{
+    	g_free (name);
+    	return;
+    	}
+
+    icon = moko_get_window_icon (dpy, w);
+    gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter, TEXT_COL, name, OBJECT_COL, w, -1);
+
+    if (icon) {
+        GdkPixbuf *icons = gdk_pixbuf_scale_simple (icon, 160, 160, GDK_INTERP_BILINEAR);
+        gtk_list_store_set (list_store, &iter, PIXBUF_COL, icons, -1);
+	gdk_pixbuf_unref (icons);
+        }
+    else if (default_icon) 
+        gtk_list_store_set (list_store, &iter, PIXBUF_COL, default_icon, -1);
+    else
+	    g_error ("Failed to load %s's icon", name);
+
+    gdk_pixbuf_unref (icon);
+    g_free (name);
+   }
+
+void 
+moko_update_store_list (Display *dpy, GtkListStore *list_store)
+{
+    Window *list;
+    guint nr, i;
+    GtkTreeIter iter;
+    char *p;
+
+    if (moko_update_net_undocked_client_list (dpy, &list, &nr) == FALSE)
+    	return;
+    p = g_malloc0 (nr);
+
+    if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter))	{
+    	gboolean more;
+    do{
+    	gboolean found = FALSE;
+    	Window w;
+    	gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter, OBJECT_COL, &w, -1);
+    	for (i=0; i<nr; i++) {
+    	    if (list[i] == w) {
+    	    	p[i] = 1;
+    	    	found = TRUE;
+    	    	break;
+    	    	}
+    	    }
+    	if (found)
+    	    more = gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter);
+    	else
+    	    more = gtk_list_store_remove (list_store, &iter);
+    	}
+    while (more);
+    }
+    
+    for (i=0; i<nr; i++) {
+    	if (p[i] == 0 && list[i] != my_win)
+    	    moko_add_window (dpy, list[i], list_store);
+    	}
+
+  	g_free (p);
+}
+
+void 
+moko_set_list_highlight (Display *dpy, MokoTaskList *l) 
+{
+    Window *wp;
+    Atom type;
+    int format;
+    unsigned long nitems;
+    unsigned long bytes_after;
+  
+    if (XGetWindowProperty (dpy, DefaultRootWindow (dpy), atoms[_NET_ACTIVE_WINDOW],
+			  0, 4, False, XA_WINDOW, &type, &format, &nitems, &bytes_after, 
+			  (unsigned char **)&wp) == Success)	
+    {
+        if (wp)
+        {
+            Window w;
+            w = *wp;
+            if (w != 0 && w != my_win) 
+            {
+                GtkTreeIter iter;
+                if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (l->list_store), &iter))	
+                {
+                    Window iw;
+                    do 
+                    	{
+                        gtk_tree_model_get (GTK_TREE_MODEL (l->list_store), &iter, OBJECT_COL, &iw, -1);
+                        if (iw == w)
+                        {
+                            GtkTreePath *path;
+                            path = gtk_tree_model_get_path (GTK_TREE_MODEL (l->list_store), &iter);
+                            gtk_tree_view_set_cursor (GTK_TREE_VIEW (l->list_view), path, NULL, FALSE);
+                            gtk_tree_path_free (path);
+                            break;
+                        }
+                      }while (gtk_tree_model_iter_next (GTK_TREE_MODEL (l->list_store), &iter));
+                   }
+              }
+          XFree (wp);
+         }
+    }
+}
+

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/list_view.h	2007-01-11 09:39:15 UTC (rev 535)
@@ -28,44 +28,54 @@
 
 #include "misc.h"
 
+enum{
+    TEXT_COL = 0,
+    OBJECT_COL,
+    PIXBUF_COL,
+    MAX_COL
+};
+
 G_BEGIN_DECLS
-/*LIST property*/
+/*MOKOTASKLIST property*/
 
+
 /*Pango Font spec*/
 
-#define LIST_TYPE			(list_get_type())
-#define LIST(obj)				(G_TYPE_CHECK_INSTANCE_CAST ((obj), LIST_TYPE, List))
-#define LIST_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), LIST_TYPE, ListClass))
-#define IS_LIST(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), LIST_TYPE))
-#define IS_LIST_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), LIST_TYPE))
+#define MOKOTASKLIST_TYPE			(list_get_type())
+#define MOKOTASKLIST(obj)				(G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKOTASKLIST_TYPE, MokoTaskList))
+#define MOKOTASKLIST_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), MOKOTASKLIST_TYPE, MokoTaskListClass))
+#define IS_MOKOTASKLIST(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKOTASKLIST_TYPE))
+#define IS_MOKOTASKLIST_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), MOKOTASKLIST_TYPE))
 
-typedef struct _List		List;
-typedef struct _ListClass	ListClass;
+typedef struct _MokoTaskList		MokoTaskList;
+typedef struct _MokoTaskListClass	MokoTaskListClass;
 
-struct _List
+struct _MokoTaskList
 {
 	GtkVBox vbox;
 
 	GtkHBox *hbox;
-	GtkButton *btn_close;
 	GtkListStore *list_store;
 	GtkWidget *list_view;
 	GtkWidget *scrolled;
-	GtkCellRenderer *renderer;
-	GtkTreeViewColumn *column;
-	//MokoTreeView *mokolist_view;
-
-	/*temporary */
-	GtkButton *tab, *tabhold;
 };
 
-struct _ListClass
+struct _MokoTaskListClass
 {
 	GtkVBoxClass parent_class;
-	void(*list) (List *l);
+	void(*list) (MokoTaskList *l);
 };
 
 GType list_get_type (void);
 
+GtkWidget* 
+list_new();
+
+void 
+moko_update_store_list (Display *dpy, GtkListStore *list_store);
+
+void 
+moko_set_list_highlight (Display *dpy, MokoTaskList *l) ;
+
 G_END_DECLS
  #endif /*list_view.h*/

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.c	2007-01-11 09:39:15 UTC (rev 535)
@@ -20,16 +20,16 @@
 #include "misc.h"
 
 gboolean 
-om_X_ev_init (Display *dpy, GtkWidget *gtkwidget) {
+moko_X_ev_init (Display *dpy, GtkWidget *gtkwidget) {
     if (my_win == None)
     	  my_win = GDK_WINDOW_XWINDOW (gtkwidget);
-    if (!om_initialize_X_atoms(dpy))
+    if (!moko_initialize_X_atoms(dpy))
     	  return FALSE;
     return TRUE;
     }
 
 gboolean 
-om_update_net_undocked_client_list(Display *dpy, Window** list, guint * nr) {
+moko_update_net_undocked_client_list(Display *dpy, Window** list, guint * nr) {
     Atom actual_type, type;
     Window *temp_list;
     int actual_format;
@@ -37,14 +37,14 @@
     unsigned char *prop = NULL;
     int counter = 0, i = 0, rc;
 
-    om_initialize_X_atoms(dpy);
+    moko_initialize_X_atoms(dpy);
     
     rc = XGetWindowProperty (dpy, DefaultRootWindow (dpy), atoms[_NET_CLIENT_LIST],
     						0, G_MAXLONG, False, XA_WINDOW, &actual_type, &actual_format,
 						   &nitems, &bytes_after, &prop);
     if (rc != Success || prop == NULL)
     	  return FALSE;
-    //om_print_win_list(dpy, prop, nitems);
+    //moko_print_win_list(dpy, prop, nitems);
     temp_list = g_malloc0 (sizeof (Window) * nitems);
     if (temp_list == NULL) {
     	XFree (prop);
@@ -52,13 +52,13 @@
     	}
     memcpy (temp_list, prop, sizeof (Window) * nitems);
     XFree (prop);
-    //om_print_win_list(dpy, temp_list, nitems);
+    //moko_print_win_list(dpy, temp_list, nitems);
     /*need to make clear thar whether the "Client List" is ordered by the 
     atom "_NET_WM_WINDOW_TYPE", if it does, what we need to do will become 
     more simple that only find the boundary of "dock" and "Undock" window in the list.
     */
     for (i=0; i<nitems; i++) {
-    	type = om_get_window_property (dpy, temp_list[i], atoms[_NET_WM_WINDOW_TYPE]);
+    	type = moko_get_window_property (dpy, temp_list[i], atoms[_NET_WM_WINDOW_TYPE]);
     	/*XGetWindowProperty (dpy, temp_list[i], atoms[_NET_WM_WINDOW_TYPE],		//need learn more about the func.
 			  		0, G_MAXLONG, False, XA_ATOM, &actual_type, &actual_format,
 			  		&nitems, &bytes_after, &type);
@@ -76,7 +76,7 @@
     }
 
 gboolean 
-om_iconify_client(Display* dpy, Window* w) {
+moko_iconify_client(Display* dpy, Window* w) {
     if (dpy == NULL || w == NULL)
     	return FALSE;
     else {
@@ -94,7 +94,7 @@
     }
 
 GdkPixbuf *
-om_get_window_icon (Display *dpy, Window w) {
+moko_get_window_icon (Display *dpy, Window w) {
     Atom actual_type;
     int actual_format;
     unsigned long nitems, bytes_after;
@@ -138,7 +138,7 @@
     }
 
 gchar *
-om_get_window_name (Display *dpy, Window w) {
+moko_get_window_name (Display *dpy, Window w) {
     Atom actual_type;
     int actual_format;
     unsigned long nitems, bytes_after;
@@ -173,7 +173,7 @@
 
 
 void 
-om_print_win_list (Display* dpy, Window* win_list, guint win_num) {
+moko_print_win_list (Display* dpy, Window* win_list, guint win_num) {
     int i;
     char* winname = NULL;
 
@@ -181,13 +181,13 @@
     	g_debug ("****there are %d windows in total****", win_num);
     
     for (i=0; i<win_num; i++) {
-    	winname = om_get_window_name(dpy, win_list[i]);
+    	winname = moko_get_window_name(dpy, win_list[i]);
     	g_debug ("%d. %s ", i, winname);
     	}
     }
 
 Atom
-om_get_window_property (Display *dpy, Window w, Atom property) {
+moko_get_window_property (Display *dpy, Window w, Atom property) {
     Atom result = None;
     Atom actual_type;
     int actual_format;
@@ -211,7 +211,7 @@
     }
 
 guint
-om_tab_event_check (Display *dpy) {
+moko_tab_event_check (Display *dpy) {
     XEvent ev;
     guint done = 0;
     Bool	clicked = FALSE;
@@ -235,7 +235,7 @@
 
 
 gboolean 
-om_get_current_active_client(Display *dpy, Window *window_return) {
+moko_get_current_active_client(Display *dpy, Window *window_return) {
     Atom actual_type, type;
     unsigned char* prop = NULL;
     int actual_format;
@@ -296,7 +296,7 @@
 
 
 gboolean
-om_send_delete_message (Display *dpy, Window w) {
+moko_send_delete_message (Display *dpy, Window w) {
     XEvent e;
     
     e.type = ClientMessage;
@@ -315,7 +315,7 @@
     }
 
 gboolean
-om_really_kill_client (Display *dpy, Window w) {
+moko_really_kill_client (Display *dpy, Window w) {
     gdk_error_trap_push ();
 
     XKillClient (dpy, w);
@@ -326,7 +326,7 @@
     }
 
 gboolean
-om_kill_window (Display *dpy, Window w){
+moko_kill_window (Display *dpy, Window w){
     Atom *protocols;
     int count, rc;
 
@@ -343,20 +343,20 @@
     		}
     	XFree (protocols);
     	if (delete_supported)
-    		return om_send_delete_message (dpy, w);
+    		return moko_send_delete_message (dpy, w);
     	}
-    return om_really_kill_client (dpy, w);
+    return moko_really_kill_client (dpy, w);
     }
 /*void
-om_update_wlist(Display *dpy, Window **list, guint *amount)
+moko_update_wlist(Display *dpy, Window **list, guint *amount)
 {
 	Window *new_list;
 	guint new_amount;
 	int i,j;
 
-	om_update_net_undocked_client_list(dpy, &new_list, &new_amount);
+	moko_update_net_undocked_client_list(dpy, &new_list, &new_amount);
 
-	om_print_win_list(dpy, new_list, new_amount);
+	moko_print_win_list(dpy, new_list, new_amount);
 
 	for (i=0; i<new_amount; i++)
 	{

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/misc.h	2007-01-11 09:39:15 UTC (rev 535)
@@ -53,39 +53,38 @@
 
 
 gboolean 
-om_X_ev_init (Display *dpy,GtkWidget *gtkwidget);
+moko_X_ev_init (Display *dpy,GtkWidget *gtkwidget);
 
 gboolean 
-om_update_net_undocked_client_list (Display* dpy, Window** list, guint* nr);
+moko_update_net_undocked_client_list (Display* dpy, Window** list, guint* nr);
 
 GdkPixbuf *
-om_get_window_icon (Display *dpy, Window w);
+moko_get_window_icon (Display *dpy, Window w);
 
 gchar *
-om_get_window_name (Display *dpy, Window w);
+moko_get_window_name (Display *dpy, Window w);
 
 void 
-om_print_win_list (Display* dpy, Window* win_list, guint win_num);
+moko_print_win_list (Display* dpy, Window* win_list, guint win_num);
 
 Atom
-om_get_window_property (Display *dpy, Window w, Atom property);
+moko_get_window_property (Display *dpy, Window w, Atom property);
 
 gboolean 
-om_get_current_active_client (Display* dpy, Window* window_return);
+moko_get_current_active_client (Display* dpy, Window* window_return);
 
 void
 mbcommand(Display *dpy, int cmd_id, Window win, char *data);
 
 gboolean 
-om_active_next_client (Display* dpy);
+moko_active_next_client (Display* dpy);
 
 gboolean
-om_kill_window (Display *dpy, Window w);
+moko_kill_window (Display *dpy, Window w);
 
 /********/
-// the functions below have not implemented.
 gboolean 
-om_set_atoms_name(const char** src_name, int src_num);
+moko_set_atoms_name(const char** src_name, int src_num);
 
 
 #endif/*misc.h*/

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.c	2007-01-11 09:39:15 UTC (rev 535)
@@ -20,21 +20,21 @@
 #include "popupmenu.h"
 
 void
-om_kill_task_cb(GtkMenuItem *item, List *l) {
+moko_kill_task_cb(GtkMenuItem *item, MokoTaskList *l) {
     g_debug ("kill task cb");
-    //om_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_CLIENT);
-    om_wm_cmd(item, l->list_view, MB_CMD_REMOVE_CLIENT);
+    //moko_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_CLIENT);
+    moko_wm_cmd(item, l->list_view, MB_CMD_REMOVE_CLIENT);
     }
 
 void 
-om_kill_and_swith_cb(GtkMenuItem *item, List *l) {
+moko_kill_and_swith_cb(GtkMenuItem *item, MokoTaskList *l) {
     g_debug ("call kill and switch task function");
-    //om_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_AND_ACTIVE);
-    om_wm_cmd(item, l->list_view, MB_CMD_REMOVE_AND_ACTIVE);
+    //moko_wm_cmd(item, l->mokolist_view, MB_CMD_REMOVE_AND_ACTIVE);
+    moko_wm_cmd(item, l->list_view, MB_CMD_REMOVE_AND_ACTIVE);
     }
 
 void
-om_init_popup_menu (GtkWidget *my_widget, GdkEventButton *event, List *l) {
+moko_init_popup_menu (GtkWidget *my_widget, GdkEventButton *event, MokoTaskList *l) {
     GtkWidget *menu;
     GtkMenuItem *item;
     int button, event_time;
@@ -47,11 +47,11 @@
     item = gtk_menu_item_new_with_label ("Close and switch");
     gtk_widget_show (item);
     gtk_menu_prepend (menu, item);
-    g_signal_connect (item, "activate", G_CALLBACK (om_kill_and_swith_cb), l);
+    g_signal_connect (item, "activate", G_CALLBACK (moko_kill_and_swith_cb), l);
     item = gtk_menu_item_new_with_label ("Kill the Application");
     gtk_widget_show (item);
     gtk_menu_prepend (menu, item);
-    g_signal_connect (item, "activate", G_CALLBACK (om_kill_task_cb), l);
+    g_signal_connect (item, "activate", G_CALLBACK (moko_kill_task_cb), l);
     if (event) {
         button = event->button;
         event_time = event->time;

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/popupmenu.h	2007-01-11 09:39:15 UTC (rev 535)
@@ -25,4 +25,8 @@
 #include "list_view.h"
 #include "misc.h"
 
+void
+moko_init_popup_menu (GtkWidget *my_widget, GdkEventButton *event, MokoTaskList *l);
+
+
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.c	2007-01-11 09:39:15 UTC (rev 535)
@@ -26,75 +26,171 @@
 #include <glib.h> 
 #include <gtk/gtk.h> 
 #include <gdk/gdk.h> 
-#include <gdk/gdkx.h> // GDK_WINDOW_XWINDOW 
+#include <gdk/gdkx.h> // GDK_WINDOW_XWINDOW
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <signal.h>
 
+#include "callbacks.h"
+
 #define OPAQUE  0x55555555
 /* set the widget's transparency to opacity 
  * opacity is guint 0x00000000-0xffffffff 
  */ 
+#define LOCK_FILE "/tmp/moko-taskmanager.lock"
 
+static MokoTaskManager *tm;
 
+static void 
+handle_sigusr1 (int value)
+{
+  if (!tm)
+       return;
+
+  gtk_widget_show_all (GTK_WIDGET (tm->window));
+  gtk_window_present (GTK_WIDGET (tm->window));
+  gtk_widget_show (GTK_WIDGET (tm->wheel));
+  gtk_widget_show (GTK_WIDGET (tm->toolbox));
+
+  signal (SIGUSR1, handle_sigusr1);
+  return;
+}
+
+static pid_t 
+testlock (char *fname)
+{
+  int fd;
+  struct flock fl;
+
+  fd = open (fname, O_WRONLY, S_IWUSR);
+  if (fd < 0)
+    {
+      if (errno == ENOENT)
+        {
+          return 0;
+        }
+      else
+        {
+          perror ("Test lock open file");
+          return -1;
+        }
+    }
+
+  fl.l_type = F_WRLCK;
+  fl.l_whence = SEEK_SET;
+  fl.l_start = 0;
+  fl.l_len = 0;
+
+  if (fcntl (fd, F_GETLK, &fl) < 0)
+    {
+      close (fd);
+      return -1;
+    }
+  close (fd);
+
+  if (fl.l_type == F_UNLCK)
+    return 0;
+
+  return fl.l_pid;
+}
+
+static void 
+setlock (char *fname)
+{
+  int fd;
+  struct flock fl;
+
+  fd = open (fname, O_WRONLY|O_CREAT, S_IWUSR);
+  if (fd < 0)
+    {
+      perror ("Set lock open file");
+      return ;
+    }
+
+  fl.l_type = F_WRLCK;
+  fl.l_whence = SEEK_SET;
+  fl.l_start = 0;
+  fl.l_len = 0;
+
+  if (fcntl (fd, F_SETLK, &fl) < 0)
+    {
+      perror ("Lock file");
+      close (fd);
+    }
+}
+
 int 
-gtk_widget_set_transparency(GtkWidget *widget, guint opacity) { 
-        Display *display; 
-        Window window; 
-        Window parent_win; 
-        Window root_win; 
-        Window* child_windows; 
-        int num_child_windows; 
+gtk_widget_set_transparency(GtkWidget *widget, guint opacity) 
+{ 
+   Display *display; 
+   Window window; 
+   Window parent_win; 
+   Window root_win; 
+   Window* child_windows; 
+   int num_child_windows; 
 
-        if(!GTK_IS_WIDGET(widget)){ 
+   if(!GTK_IS_WIDGET(widget)){ 
                 printf("gtk_widget_set_transparency: not a widget!\n"); 
                 return -1; 
-        } 
+   } 
 
-        if(widget->window == NULL){ 
+   if(widget->window == NULL){ 
                 printf("gtk_widget_set_transparency: please init widget before set transparency!\n"); 
                 return -1; 
-        } 
+   } 
 
-        /* Set the Display and Screen */ 
-        display = (Display*)gdk_x11_get_default_xdisplay(); 
-        /* sync, so the window manager can know the new widget */ 
-        XSync(display, False); 
-        window = GDK_WINDOW_XWINDOW(widget->window); 
+   /* Set the Display and Screen */ 
+   display = (Display*)gdk_x11_get_default_xdisplay(); 
+   /* sync, so the window manager can know the new widget */ 
+   XSync(display, False); 
+   window = GDK_WINDOW_XWINDOW(widget->window); 
 
-        /* Get the cureent window's top-level window */ 
-        while(1){ 
-                XQueryTree(display, window, 
-                                &root_win, 
-                                &parent_win, 
-                                &child_windows, &num_child_windows); 
-                XFree(child_windows); 
-                /* found the top-level window */ 
-                if(root_win == parent_win) break; 
-                window = parent_win; 
-        } 
+   /* Get the cureent window's top-level window */ 
+   while(1){ 
+        XQueryTree(display, window, 
+                            &root_win, 
+                            &parent_win, 
+                            &child_windows, &num_child_windows); 
+         XFree(child_windows); 
+       /* found the top-level window */ 
+          if(root_win == parent_win) break; 
+          window = parent_win; 
+   } 
 
-        if(opacity == OPAQUE){ 
-                XDeleteProperty(display, window, 
-                                XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False)); 
-        }else{ 
-                XChangeProperty(display, window, 
+   if(opacity == OPAQUE){ 
+           XDeleteProperty(display, window, 
+                                   XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False)); 
+   }
+   else{ 
+           XChangeProperty(display, window, 
                                 XInternAtom(display, "_NET_WM_WINDOW_OPACITY", False), 
                                 XA_CARDINAL, 32, PropModeReplace, 
                                 (unsigned char *) &opacity, 1L); 
-        } 
+   } 
 
-        XSync(display, False); 
+   XSync(display, False); 
 
-        return 0; 
+   return 0; 
 } 
 
 int 
-main (int argc, char** argv) {
-    //GtkWidget *taskmanager; //main window
-    MokoTaskManager *tm;
+main (int argc, char** argv)
+{
     Display *dpy;
-    //List *list;
+    GtkWidget *image;
+    pid_t lockapp;
 
+    lockapp = testlock (LOCK_FILE);
+    if (lockapp > 0)
+     {
+        kill (lockapp, SIGUSR1);
+        return 0;
+     }
+    setlock (LOCK_FILE);
+
     tm = g_malloc (sizeof (MokoTaskManager));
-
     memset (tm, 0, sizeof (MokoTaskManager));
 	
     gtk_init (&argc, &argv);
@@ -103,47 +199,65 @@
     tm->app = MOKO_APPLICATION(moko_application_get_instance());
     g_set_application_name( "Openmoko-taskmanager" );
     
-   /* tm->gtk_window = gtk_window_new (GTK_WINDOW_POPUP);//It is a popup window
-    gtk_window_set_title (tm->gtk_window, _("Task Manager"));
-    gtk_widget_set_uposition (tm->gtk_window, TASK_MANAGER_PROPERTY_X, TASK_MANAGER_PROPERTY_Y);
-    gtk_window_set_default_size (tm->gtk_window, TASK_MANAGER_PROPERTY_WIDTH, TASK_MANAGER_PROPERTY_HEIGHT);
-    gtk_widget_show (tm->gtk_window);
-*/
+    /* finger based window */
     tm->window = MOKO_FINGER_WINDOW(moko_finger_window_new());
-    tm->wheel = moko_finger_wheel_new();
-    //moko_finger_wheel_show(tm->wheel);
-    tm->toolbox = moko_finger_window_get_toolbox(tm->window);
+//    gtk_window_set_decorated (mma->window, FALSE);
+    gtk_widget_show (GTK_WIDGET (tm->window));
 
-    tm->close =  moko_finger_tool_box_add_button( tm->toolbox );
-    gtk_widget_show (tm->close);
-    tm->close_all =  moko_finger_tool_box_add_button( tm->toolbox );
-    gtk_widget_show (tm->close_all);
-    tm->quit =  moko_finger_tool_box_add_button( tm->toolbox );
-    gtk_widget_show (tm->quit);
-    
-    tm->l = LIST(list_new());
-    om_update_store_list(dpy, tm->l->list_store);
-    om_set_list_highlight(dpy, tm->l);
-    gtk_widget_show (tm->l);
+    /* finger wheel object*/
+    tm->wheel = moko_finger_window_get_wheel (tm->window);
+
+    /* finger toolbox object*/
+    tm->toolbox = moko_finger_window_get_toolbox (tm->window);
+
+    tm->go_to =  moko_finger_tool_box_add_button_without_label (tm->toolbox);   
+    image = gtk_image_new_from_file (PKGDATADIR"/close_all.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->go_to, image);
+    tm->kill =   moko_finger_tool_box_add_button_without_label (tm->toolbox);
+    image = gtk_image_new_from_file (PKGDATADIR"/close.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->kill, image);
+    tm->kill_all = moko_finger_tool_box_add_button_without_label (tm->toolbox);
+    image = gtk_image_new_from_file (PKGDATADIR"/close_all.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->kill_all, image);
+    tm->quit =  moko_finger_tool_box_add_button_without_label (tm->toolbox);
+    image = gtk_image_new_from_file (PKGDATADIR"/exit.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (tm->quit, image);
+
+    tm->l = moko_task_list_new();
+    moko_update_store_list(dpy, tm->l->list_store);
+    //moko_set_list_highlight(dpy, tm->l);
+    gtk_widget_show (GTK_WIDGET (tm->l));
 	
-    //gtk_container_add (tm->gtk_window, GTK_WIDGET (tm->l));
     moko_finger_window_set_contents (tm->window, GTK_WIDGET(tm->l));
 
+    g_signal_connect (tm->go_to, "clicked", 
+    			G_CALLBACK (moko_go_to_btn_cb), tm);
+    g_signal_connect (tm->kill, "clicked", 
+    			G_CALLBACK (moko_kill_btn_cb), tm);
+    g_signal_connect (tm->kill_all, "clicked", 
+    			G_CALLBACK (moko_kill_all_btn_cb), tm);
+    g_signal_connect (tm->quit, "clicked", 
+    			G_CALLBACK (moko_quit_btn_cb), tm);
+    g_signal_connect (tm->wheel, "press_left_up",
+    			G_CALLBACK 	(moko_wheel_left_up_press_cb), tm);
+    g_signal_connect (tm->wheel, "press_right_down",
+    			G_CALLBACK (moko_wheel_right_down_press_cb), tm);
+    g_signal_connect (tm->wheel, "press_bottom",
+    			G_CALLBACK 	(moko_wheel_bottom_press_cb), tm);
 
-    g_signal_connect (tm->l->btn_close, "clicked", gtk_main_quit, NULL);
-//g_signal_connect (G_OBJECT (list->list_view), "cursor-changed", G_CALLBACK (om_cursor_changed), 
-// GTK_TREE_MODEL (list->list_store));
-    g_signal_connect (G_OBJECT (tm->l->tab), "clicked", G_CALLBACK (om_tab_event_cb), tm->l);
-    g_signal_connect (G_OBJECT (tm->l->tabhold), "clicked", G_CALLBACK (om_hold_event_cb), tm->l);
-
-    gdk_window_add_filter (NULL, om_window_filter, tm->l);
+    gdk_window_add_filter (NULL, moko_window_filter, tm->l);
     XSelectInput (dpy, DefaultRootWindow (dpy), PropertyChangeMask);
 
-    gtk_widget_set_transparency(tm->window, 50);
+    signal (SIGUSR1, handle_sigusr1);
 
-    gtk_widget_show_all (tm->window);
+    //gtk_widget_set_transparency(tm->window, 50);
 
+    gtk_widget_show_all (GTK_WIDGET (tm->window));
+    gtk_widget_show (GTK_WIDGET (tm->wheel));
+    gtk_widget_show (GTK_WIDGET (tm->toolbox));
+
     gtk_main();
-	
-    g_free (tm);
+
+    if (tm)
+        g_free (tm);
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/taskmanager.h	2007-01-11 09:39:15 UTC (rev 535)
@@ -24,13 +24,14 @@
 #include <libmokoui/moko-finger-tool-box.h>
 #include <libmokoui/moko-finger-window.h>
 #include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-pixmap-button.h>
 
+
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 #include <X11/Xlib.h>
 
 #include "list_view.h"
-#include "callbacks.h"
 
 //#ifndef GTK_STOCK_CLOSE
 //#define GTK_STOCK_CLOSE "button_colse"
@@ -52,13 +53,13 @@
     GtkWidget *gtk_window;//??
     MokoFingerWheel *wheel;
     MokoFingerToolBox *toolbox;
+    MokoTaskList *l;
+    
+    MokoPixmapButton *go_to;
+    MokoPixmapButton *kill;
+    MokoPixmapButton *kill_all;
+    MokoPixmapButton *quit;
 
-    GtkButton *close;
-    GtkButton *close_all;
-    GtkButton *quit;
-
-//template
-    List *l;
     };
  
 #endif /*taskmanager.h*/

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.c	2007-01-11 09:39:15 UTC (rev 535)
@@ -50,7 +50,7 @@
 *@return Bool
 */
 gboolean 
-om_initialize_X_atoms(const Display* dpy) {
+moko_initialize_X_atoms(const Display* dpy) {
     if (g_Atom_initialized == TRUE)
         return TRUE;
     if (dpy ==NULL)

Modified: trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h	2007-01-10 12:50:44 UTC (rev 534)
+++ trunk/src/target/OM-2007/applications/openmoko-taskmanager/src/xatoms.h	2007-01-11 09:39:15 UTC (rev 535)
@@ -50,6 +50,6 @@
 Atom atoms[MAX_ATOM_NO];
 
 gboolean 
-om_initialize_X_atoms(const Display* dpy);
+moko_initialize_X_atoms(const Display* dpy);
 
 #endif /*xatoms.h*/





More information about the commitlog mailing list