📄 gtkphone.c
字号:
window1 = gtk_window_new (GTK_WINDOW_DIALOG); gtk_object_set_data (GTK_OBJECT (window1), "window1", window1); gtk_window_set_title (GTK_WINDOW (window1), _("window1")); gtk_window_set_position (GTK_WINDOW (window1), GTK_WIN_POS_CENTER); gtk_window_set_policy (GTK_WINDOW (window1), TRUE, FALSE, TRUE); frame1 = gtk_frame_new (NULL); gtk_widget_ref (frame1); gtk_object_set_data_full (GTK_OBJECT (window1), "frame1", frame1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (frame1); gtk_container_add (GTK_CONTAINER (window1), frame1); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (frame1), vbox1); gtk_container_set_border_width (GTK_CONTAINER (vbox1), 8); label1 = gtk_label_new (_("Bzzt!\nIncoming call from:")); gtk_widget_ref (label1); gtk_object_set_data_full (GTK_OBJECT (window1), "label1", label1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label1); gtk_box_pack_start (GTK_BOX (vbox1), label1, FALSE, FALSE, 0); popup_label = gtk_label_new (_("[unknown]")); gtk_widget_ref (popup_label); gtk_object_set_data_full (GTK_OBJECT (window1), "popup_label", popup_label, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (popup_label); gtk_box_pack_start (GTK_BOX (vbox1), popup_label, FALSE, FALSE, 3); hseparator1 = gtk_hseparator_new (); gtk_widget_ref (hseparator1); gtk_object_set_data_full (GTK_OBJECT (window1), "hseparator1", hseparator1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hseparator1); gtk_box_pack_start (GTK_BOX (vbox1), hseparator1, FALSE, FALSE, 3); hbox1 = gtk_hbox_new (TRUE, 8); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (window1), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox1), 3); button1 = gtk_button_new_with_label (_("Accept")); gtk_widget_ref (button1); gtk_object_set_data_full (GTK_OBJECT (window1), "button1", button1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button1); gtk_box_pack_start (GTK_BOX (hbox1), button1, FALSE, FALSE, 0); button2 = gtk_button_new_with_label (_("Ignore")); gtk_widget_ref (button2); gtk_object_set_data_full (GTK_OBJECT (window1), "button2", button2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button2); gtk_box_pack_start (GTK_BOX (hbox1), button2, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button1), "clicked", GTK_SIGNAL_FUNC(answerTalkRequest), NULL); gtk_signal_connect(GTK_OBJECT(button2), "clicked", GTK_SIGNAL_FUNC(ignoreTalkRequest), NULL); return window1;} GtkWidget* create_gui_main (int udpsocket) { GtkWidget *window1; GtkWidget *vbox1; GtkWidget *hbox1; GtkWidget *vbox3; GtkWidget *hbox2; GtkWidget *label1; GtkWidget *label2; GtkWidget *label3; GtkWidget *entry1; GtkWidget *hbox3; GtkWidget *button1; GtkWidget *button2; GtkWidget *scrolledwindow1; GtkWidget *viewport1; GtkWidget *scrolledwindow2; GtkWidget *hseparator1; GtkWidget *hbox4; GtkWidget *button3; GtkWidget *button4; GtkWidget *button5; window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_object_set_data (GTK_OBJECT (window1), "window1", window1); gtk_window_set_title (GTK_WINDOW (window1), _("window1")); gtk_widget_set_usize (window1, 200, 300); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (window1), vbox1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_ref (hbox1); gtk_object_set_data_full (GTK_OBJECT (window1), "hbox1", hbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_ref (vbox3); gtk_object_set_data_full (GTK_OBJECT (window1), "vbox3", vbox3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox3); gtk_box_pack_start (GTK_BOX (vbox1), vbox3, TRUE, TRUE, 0); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_ref (hbox2); gtk_object_set_data_full (GTK_OBJECT (window1), "hbox2", hbox2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox3), hbox2, FALSE, FALSE, 0); label1 = gtk_label_new (_("Name")); gtk_widget_ref (label1); gtk_object_set_data_full (GTK_OBJECT (window1), "label1", label1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label1); gtk_box_pack_start (GTK_BOX (hbox2), label1, FALSE, FALSE, 0); entry1 = gtk_entry_new (); gtk_widget_ref (entry1); gtk_object_set_data_full (GTK_OBJECT (window1), "entry1", entry1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (entry1); gtk_box_pack_start (GTK_BOX (hbox2), entry1, TRUE, TRUE, 0); button5 = gtk_button_new_with_label (_("Call")); gtk_widget_ref (button5); gtk_object_set_data_full (GTK_OBJECT (window1), "button5", button5, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button5); gtk_box_pack_start (GTK_BOX (hbox2), button5, FALSE, FALSE, 0); hbox3 = gtk_hbox_new (TRUE, 0); gtk_widget_ref (hbox3); gtk_object_set_data_full (GTK_OBJECT (window1), "hbox3", hbox3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox3), hbox3, FALSE, FALSE, 3); button1 = gtk_button_new_with_label (_("Add to List")); gtk_widget_ref (button1); gtk_object_set_data_full (GTK_OBJECT (window1), "button1", button1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button1); gtk_box_pack_start (GTK_BOX (hbox3), button1, FALSE, FALSE, 0); button2 = gtk_button_new_with_label (_("Remove")); gtk_widget_ref (button2); gtk_object_set_data_full (GTK_OBJECT (window1), "button2", button2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button2); gtk_box_pack_start (GTK_BOX (hbox3), button2, FALSE, FALSE, 0); scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_ref (scrolledwindow1); gtk_object_set_data_full (GTK_OBJECT (window1), "scrolledwindow1", scrolledwindow1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (scrolledwindow1); gtk_box_pack_start (GTK_BOX (vbox3), scrolledwindow1, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); viewport1 = gtk_viewport_new (NULL, NULL); gtk_widget_ref (viewport1); gtk_object_set_data_full (GTK_OBJECT (window1), "viewport1", viewport1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (viewport1); gtk_container_add (GTK_CONTAINER (scrolledwindow1), viewport1); scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_ref (scrolledwindow2); gtk_object_set_data_full (GTK_OBJECT (window1), "scrolledwindow2", scrolledwindow2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (scrolledwindow2); gtk_container_add (GTK_CONTAINER (viewport1), scrolledwindow2); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); clist1 = gtk_clist_new (2); gtk_widget_ref (clist1); gtk_object_set_data_full (GTK_OBJECT (window1), "clist1", clist1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (clist1); gtk_container_add (GTK_CONTAINER (scrolledwindow2), clist1); gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 20); gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80); gtk_clist_column_titles_show (GTK_CLIST (clist1)); label2 = gtk_label_new (_("On")); gtk_widget_ref (label2); gtk_object_set_data_full (GTK_OBJECT (window1), "label2", label2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label2); gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label2); label3 = gtk_label_new (_("Address")); gtk_widget_ref (label3); gtk_object_set_data_full (GTK_OBJECT (window1), "label3", label3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (label3); gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label3); hseparator1 = gtk_hseparator_new (); gtk_widget_ref (hseparator1); gtk_object_set_data_full (GTK_OBJECT (window1), "hseparator1", hseparator1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hseparator1); gtk_box_pack_start (GTK_BOX (vbox3), hseparator1, FALSE, TRUE, 3); hbox4 = gtk_hbox_new (TRUE, 0); gtk_widget_ref (hbox4); gtk_object_set_data_full (GTK_OBJECT (window1), "hbox4", hbox4, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox3), hbox4, FALSE, FALSE, 0); button3 = gtk_button_new_with_label (_("Refresh List")); gtk_widget_ref (button3); gtk_object_set_data_full (GTK_OBJECT (window1), "button3", button3, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (button3); gtk_box_pack_start (GTK_BOX (hbox4), button3, FALSE, FALSE, 0); popup_dlg = create_incoming_popup(); online_dlg = create_online_popup(); /* * initial registration */ registerme(NULL); /* * Tell the server I'm around every 60 seconds. */ gtk_timeout_add((UPDATETIME * 1000),registerme,NULL); /* * Add callbacks for udp input and dsp i/o */ gdk_input_add(udpsocket, GDK_INPUT_READ, udp_message_callback, NULL); /* * Don't add callbacks for the dsp yet, only when it's been opened. */ gtk_signal_connect(GTK_OBJECT(clist1), "select_row", GTK_SIGNAL_FUNC(addressBookEntrySelected), entry1); gtk_signal_connect(GTK_OBJECT(entry1), "activate", GTK_SIGNAL_FUNC(acceptTypedData), entry1); gtk_signal_connect(GTK_OBJECT(button5), "clicked", GTK_SIGNAL_FUNC(acceptTypedData), entry1); gtk_signal_connect(GTK_OBJECT(button1), "clicked", GTK_SIGNAL_FUNC(addToList), entry1); gtk_signal_connect(GTK_OBJECT(button2), "clicked", GTK_SIGNAL_FUNC(delFromList), entry1); gtk_signal_connect(GTK_OBJECT(button3), "clicked", GTK_SIGNAL_FUNC(buttonUpdateClist), entry1); gtk_signal_connect (GTK_OBJECT (window1), "delete_event", GTK_SIGNAL_FUNC (endProgram), NULL); return window1;}void udp_message_callback(gpointer data,gint source,GdkInputCondition condition ) { int size=getmsg(0); if(size>0) { // printf ("received control input\n"); userprocessmsg(&sender,mesg,size); }}void incoming_dsp_callback(gpointer data,gint source,GdkInputCondition condition ) { int size,i; static int samplesin = 0; if (!havedsp) { return; } size=read(sndin,sndblock1+samplesin,sndblocksize); if(connected && size>0) { totalread+=size; samplesin+=size; i=0; while(samplesin-i>=block160size) { loudcount+=checkloud(sndblock1+i); pack160to33(packed+12+packedin*33,sndblock1+i); i+=block160size; ++packedin; if(packedin==PACKETSTOPACK) { long now; now=gtime2(); packed[0]=CODE_SOUND; packed[1]=outcount>>16; packed[2]=outcount>>8; packed[3]=outcount; packed[4]=now>>24; packed[5]=now>>16; packed[6]=now>>8; packed[7]=now; packed[8]=lastdiff>>24; packed[9]=lastdiff>>16; packed[10]=lastdiff>>8; packed[11]=lastdiff; ++outcount; putmsg(&buddy,packed,12+PACKETSTOPACK*33); packedin=0; loudcount=0; } } if(i) { samplesin-=i; memcpy(sndblock1,sndblock1+i,samplesin); } }}void outgoing_dsp_callback(gpointer data,gint source,GdkInputCondition condition ) { if (!havedsp) { return; } if(writein>=sndblocksize*(MAXBLOCKS+1)) { while(writein>=sndblocksize<<1) { writein-=sndblocksize; writetake+=sndblocksize; if(writetake==writelimit) { writetake=writefifo; } } } write(sndin,writetake,sndblocksize); totalwritten+=sndblocksize; writein-=sndblocksize; writetake+=sndblocksize; if(writetake==writelimit) { writetake=writefifo; }}main(int argc,char *argv[]){ int size,pid,result,port; long nexttime,t; fd_set inputs,outputs; struct timeval timeout; char typed[256]; int samplesin; int i,j; char *s; GtkWidget * mainWindow; unsigned char *p; gtk_init (&argc, &argv); userInfo = CreateBucket("---",0);// cchandler(0); inittime(); srand(timebase); myiplen=getmyip(myip); if(myiplen<0) { printf("Failed to determine local IP address, code %d\n",myiplen); return -60; } scanrcfile(0); if(!findalias("me")) addalias("me",username); for(i=0;i<KEYSIZE;++i) if(mykey[i]) break; if(i==KEYSIZE) { printf("WARNING:You haven't specificied your password in the PHONERC file.\n"); printf("Pretty much nothing will work without that password. Visit the site\n"); printf(" http://www.linuxmotors.com/phone\n"); printf("and follow the link there to get a password assigned.\n"); } computehash(myhash,username); havedsp=0; dropDspHandles(); initinputcompression(); initoutputcompression(); i=opendsp(); if(i) { printf("Failed to open dsp for test, code %d\n",i); } closedsp(); if(!openserver(SERVER,PORT)) { printf("Failed to resolve server %s\n",s); exit(2); } getsocket(0); exitflag=0; loudcount=0; samplesin=0; connected=0; gottalk=0; nexttime=gtime(); talktries=-1; mainWindow = create_gui_main(udpsocket); gtk_widget_show(mainWindow); updateList(NULL); gtk_main();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -