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