int gnoclMenuSeparatorCmd( ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj * const objv[] ) { int ret; GtkSeparatorMenuItem *separator; if( gnoclParseOptions( interp, objc - 1, objv + 1, separatorOptions ) != TCL_OK ) { gnoclClearOptions( separatorOptions ); return TCL_ERROR; } separator = GTK_SEPARATOR_MENU_ITEM( gtk_separator_menu_item_new( ) ); gtk_widget_show( GTK_WIDGET( separator ) ); /* gtk_widget_set_sensitive( GTK_WIDGET( para->menuItem ), 0 ); */ ret = gnoclSetOptions( interp, separatorOptions, G_OBJECT( separator ), -1 ); gnoclClearOptions( separatorOptions ); if( ret != TCL_OK ) { gtk_widget_destroy( GTK_WIDGET( separator ) ); return TCL_ERROR; } return gnoclRegisterWidget( interp, GTK_WIDGET( separator ), separatorFunc ); }
static int separatorFunc( ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj * const objv[] ) { static const char *cmds[] = { "delete", "configure", NULL }; enum cmdIdx { DeleteIdx, ConfigureIdx }; GtkSeparatorMenuItem *separator = GTK_SEPARATOR_MENU_ITEM( data ); int idx; if( objc < 2 ) { Tcl_WrongNumArgs( interp, 1, objv, "command" ); return TCL_ERROR; } if( Tcl_GetIndexFromObj( interp, objv[1], cmds, "command", TCL_EXACT, &idx ) != TCL_OK ) return TCL_ERROR; switch( idx ) { case DeleteIdx: return gnoclDelete( interp, GTK_WIDGET( separator ), objc, objv ); case ConfigureIdx: { int ret = gnoclParseAndSetOptions( interp, objc - 1, objv + 1, separatorOptions, G_OBJECT( separator ) ); gnoclClearOptions( separatorOptions ); return ret; } break; } return TCL_OK; }
int main(int argc, char *argv[]) { QwertickleGUI* gui = g_new0(QwertickleGUI, 1); gst_init(NULL, NULL); gtk_init(&argc, &argv); gui->statusicon = gtk_status_icon_new_from_file(DATADIR"/qwertickle.png"); gtk_status_icon_set_visible(gui->statusicon, TRUE); gui->mainmenu = GTK_MENU(gtk_menu_new()); gui->play = GTK_MENU_ITEM(gtk_menu_item_new()); gui->sep = GTK_SEPARATOR_MENU_ITEM(gtk_separator_menu_item_new()); gui->quit = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_from_stock("gtk-quit", NULL)); gui->about = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_from_stock("gtk-about", NULL)); gui->enable = GTK_CHECK_MENU_ITEM(gtk_check_menu_item_new_with_label("Enable")); gtk_menu_shell_append(GTK_MENU_SHELL(gui->mainmenu), GTK_WIDGET(gui->enable)); gtk_menu_shell_append(GTK_MENU_SHELL(gui->mainmenu), GTK_WIDGET(gui->about)); gtk_menu_shell_append(GTK_MENU_SHELL(gui->mainmenu), GTK_WIDGET(gui->sep)); gtk_menu_shell_append(GTK_MENU_SHELL(gui->mainmenu), GTK_WIDGET(gui->quit)); /* initialize widgets */ gtk_check_menu_item_set_active(gui->enable, TRUE); /* connect signals */ g_signal_connect(gui->statusicon, "popup-menu", G_CALLBACK(on_menu_pop), gui); g_signal_connect(gui->enable, "toggled", G_CALLBACK(on_enable_toggled), gui); g_signal_connect(gui->quit, "activate", G_CALLBACK(on_quit_activate), gui); g_signal_connect(gui->about, "activate", G_CALLBACK(on_about_activate), gui); g_signal_connect(gui->play, "activate", G_CALLBACK(on_play_activate), NULL); gtk_widget_show_all(GTK_WIDGET(gui->mainmenu)); /* Fix freezing bug? close stdout and stdin so Xorg won't have to process * the input to stdout when program exit*/ close(0); close(1); pthread_create(&thread, NULL, intercept_key_thread, gui->play); gtk_main(); return 0; }