r2120 - trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src

laforge at sita.openmoko.org laforge at sita.openmoko.org
Sat Jun 2 02:11:39 CEST 2007


Author: laforge
Date: 2007-06-02 02:11:38 +0200 (Sat, 02 Jun 2007)
New Revision: 2120

Modified:
   trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/stylusmenu.c
Log:
mainmenu: emergency hacks for:
* making sure the activate callback is called even for toplevel items
* actually executing programs that are selected in menu


Modified: trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/stylusmenu.c
===================================================================
--- trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/stylusmenu.c	2007-06-01 23:49:07 UTC (rev 2119)
+++ trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/stylusmenu.c	2007-06-02 00:11:38 UTC (rev 2120)
@@ -21,7 +21,7 @@
 //#include "callbacks.h"
 
 static GtkImageMenuItem *moko_build_new_menu_item (const char *icon_name, const char *icon_path);
-static void moko_stylus_menu_activate_item(GtkWidget* widget, const char* name);
+static void moko_stylus_menu_activate_item(GtkWidget* widget, void *user_data);
 
 void
 moko_stylus_menu_build (GtkMenu *menu, MokoDesktopItem *item)
@@ -54,8 +54,8 @@
       }
     gtk_menu_shell_append( GTK_MENU_SHELL(menu), GTK_WIDGET(menu_item));
     gtk_widget_show (GTK_WIDGET(menu_item));
-
-    if (item_new->type == ITEM_TYPE_FOLDER)
+    switch (item_new->type) {
+    case ITEM_TYPE_FOLDER:
     {
       MokoDesktopItem *tmp_item;
       GtkWidget *sub_menu;
@@ -81,14 +81,26 @@
            }
          }
 
-		 if (tmp_item->type == ITEM_TYPE_DOTDESKTOP_ITEM ||tmp_item->type == ITEM_TYPE_APP )
-            g_signal_connect (menu_item, "activate" ,G_CALLBACK(moko_stylus_menu_activate_item), tmp_item->data);
+	 if (tmp_item->type == ITEM_TYPE_DOTDESKTOP_ITEM ||
+	     tmp_item->type == ITEM_TYPE_APP )
+               g_signal_connect(menu_item, "activate" ,
+	       			G_CALLBACK(moko_stylus_menu_activate_item),
+				tmp_item);
          gtk_menu_shell_append( GTK_MENU_SHELL(sub_menu), GTK_WIDGET(menu_item) );
          gtk_widget_show (GTK_WIDGET(menu_item));
       }
     }
-  }
+    break;
+    case ITEM_TYPE_DOTDESKTOP_ITEM:
+    case ITEM_TYPE_APP:
+      g_signal_connect (item_new, "activate",
+      			G_CALLBACK(moko_stylus_menu_activate_item),
+			item_new);
+      break;
+  } /* case */
 
+  } /* enumerate */
+
   return ;
 }
 
@@ -111,9 +123,21 @@
     return GTK_IMAGE_MENU_ITEM(item);
 }
 
-static void moko_stylus_menu_activate_item(GtkWidget* widget, const char* name)
+static void moko_stylus_menu_activate_item(GtkWidget* widget,
+					   void *user_data)
 {
-    g_debug( "item activated: %s", name );
+    MokoDesktopItem *ditem = user_data;
+    g_debug( "item activated: %s", ditem->data );
+    switch (fork())
+    {
+    case 0:
+      mb_exec((char *)ditem->data);
+      fprintf(stderr, "exec failed, cleaning up child\n");
+      exit(1);
+    case -1:
+      fprintf(stderr, "can't fork\n");
+      break;
+    }
 }
 
 void





More information about the commitlog mailing list