📄 abook-callbacks.c
字号:
g_list_free (list); list=l;}void abook_widget_selector_lsel (GtkCTree *ctree, GtkCTreeNode *node, gint column) { lsel=node;}void abook_widget_selector_lunsel (GtkCTree *ctree, GtkCTreeNode *node, gint column) { lsel=NULL;}void abook_widget_selector_rsel (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) { rsel=row;}void abook_widget_selector_runsel (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) { rsel=-1;}void abook_widget_selector_add (GtkWidget *widget, gint type) { int row ; char *cl_data[2] ; GList *tmp ; Abook_rd *rd ; GtkCTree *ctree ; GtkCList *clist ; clist=GTK_CLIST (lw (widget, "select_clist")); ctree=GTK_CTREE (lw (widget, "entry_ctree")); rd = gtk_ctree_node_get_row_data (ctree, lsel) ; if (rd) { tmp=g_list_find_custom (list, rd, (GCompareFunc)my_compare_func); if (tmp) { row=gtk_clist_find_by_row_data_custom (clist, rd, (GCompareFunc)my_compare_func); gtk_clist_set_text (clist, row, 1, g_list_nth_data (types, type)); if (rd->entry) { rd->entry->type=type; } else { rd->group->type=type; } } else { cl_data[0]=(char *)calloc( 4096, sizeof (char) ); cl_data[1]=g_list_nth_data (types, type); if (rd->entry) { rd->entry->type=type;#if 0 format_name (cl_data[0], rd->entry->first, rd->entry->last);#else format_name (4096, cl_data[0], rd->entry->first, rd->entry->last, rd->entry->def_email );#endif } else { rd->group->type=type; cl_data[0]=strdup (rd->group->name); } row=gtk_clist_append (clist, cl_data); free (cl_data[0]); gtk_clist_set_row_data (clist, row, rd); list=g_list_append (list, rd); } } return ;}void abook_widget_selector_del (GtkWidget *widget) { GtkCList *clist=GTK_CLIST (lw (widget, "select_clist")); if (rsel == -1) return; {// for (seek=rsel;seek;seek=seek->next) { Abook_rd *rd=gtk_clist_get_row_data (clist, rsel); if (!rd) return;#if DEBUG > 4 if (rd->entry) printf ("Deleting entry: %s %s\n", rd->entry->first, rd->entry->last); else printf ("Deleting group: %s\n", rd->group->name);#endif gtk_clist_remove (clist, rsel); list=g_list_remove (list, rd); rsel=-1; }}void entry_ctree_clicked_column (GtkWidget *clist, gint column, gpointer data) { if (GTK_CLIST (clist)->sort_type==GTK_SORT_ASCENDING) { GTK_CLIST (clist)->sort_type=GTK_SORT_DESCENDING; } else { GTK_CLIST (clist)->sort_type=GTK_SORT_ASCENDING; } gtk_clist_freeze (GTK_CLIST(clist)); gtk_clist_set_sort_column (GTK_CLIST(clist), column); gtk_clist_sort (GTK_CLIST (clist)); gtk_clist_thaw (GTK_CLIST (clist));}void abook_widget_selector_changebook (GtkWidget *widget, Abook *abook) { abook_widget_rehash_abook_clist (abook, GTK_CTREE (lw (widget, "entry_ctree")));}void abook_widget_selector_accept (GtkWidget *widget, UserData *data) { int row ; int type ; char *addr ; char *send ; int retValue ; Recipient *recp; GList *ret=NULL; GtkCList *clist ; /* Fetch the list of email addresses that have been added */#if 1 clist=GTK_CLIST (lw (widget, "select_clist")); /* Okay, walk through the list of nodes in our list */ row = 0 ; addr = send = NULL ; while( (retValue = gtk_clist_get_text( clist, row, 0, &addr )) ) { /* Now that we have the text, get the send type */ retValue = gtk_clist_get_text( clist, row, 1, &send ) ;#if DEBUG > 3 printf( "addr = '%s %s'\n", send, addr ) ;#endif /* * Data switch breaks out as: * C = CC(1), B= BCC(2) , R = Required(0), Resource(2), O = Optional(2) * where 0 = To, 1 = CC, 2 = BCC */ switch( send[0] ) { case 'C': type = 1 ; break ; case 'B': type = 2 ; break ; case 'R': if( strcasecmp( send, "Required" ) == 0 ) type = 0 ; else type = 2 ; break ; case 'O': type = 1 ; break ; default: /* This addresses TO and any screw ups */ type = 0 ; break ; } /* Now that we have our data items, let's add them to the real recip list */ recp = (Recipient *)malloc( sizeof(Recipient) ) ; recp->email=strdup( addr ) ; recp->type=type ; ret = g_list_append( ret, recp ) ; /* Gotta advance the row index else we loop infintium */ row++ ; }#else for (seek=list;seek;seek=seek->next) { rd=seek->data; if (rd->entry) { recp=(Recipient *)calloc(1, sizeof (Recipient)); recp->email=strdup(rd->entry->def_email); recp->type=rd->entry->type; ret=g_list_append (ret, recp); } else { if (rd->group->email) { recp=(Recipient *)calloc(1, sizeof (Recipient)); recp->email=strdup(rd->group->email); recp->type=rd->group->type; ret=g_list_append (ret, recp); } else { GList *members=abook_group_get_members (rd->group); GList *tmp; for (tmp=members;tmp;tmp=tmp->next) { Abook_entry *entry=tmp->data; recp=(Recipient *)calloc(1, sizeof (Recipient)); recp->email=strdup(entry->def_email); recp->type=rd->group->type; ret=g_list_append (ret, recp); } } } }#endif if (data->func) data->func (ret, data->data); // uhhmm. Ok ;) abook_widget_selector_destroy (widget, NULL, data); return ;}void abook_widget_selector_cancel (GtkWidget *widget, gpointer data) { abook_widget_selector_destroy (widget, NULL, data);}void abook_widget_selector_destroy (GtkWidget *widget, GdkEvent *event, gpointer data) { rsel=-1; lsel=NULL;#ifdef DMALLOC dmalloc_verify( 0 ) ;#endif g_list_free (list);list=NULL;#if 0 if( data ) free( data ) ;#endif abook_destroy_dummys (); gtk_widget_destroy (lw (widget, "selector"));#if 0 if (abook_widget) abook_widget_rehash_abook_clist (current_abook, GTK_CTREE (lw (abook_widget, "entry_ctree")));#endif#ifdef DMALLOC dmalloc_verify( 0 ) ;#endif return ;}void abook_widget_selector_search_changed (GtkEditable *editable) { char *tmp=gtk_entry_get_text (GTK_ENTRY (editable)); GtkCTree *ctree=GTK_CTREE (lw (GTK_WIDGET (editable), "entry_ctree")); GtkCTreeNode *node=NULL; Abook_entry *entry; if (current_abook==NULL) return; entry=abook_entry_seek_name_in_part (current_abook, tmp); if (entry) { GList *seek; for (seek=entry->nodes;seek;seek=seek->next) node=seek->data; gtk_ctree_select (ctree, node); gtk_ctree_node_moveto (ctree, node, 0, 0, 0); } else { gtk_clist_unselect_all (GTK_CLIST (ctree)); }}GtkSignalFunc updator_func=NULL;gpointer updator_func_data=NULL;void abook_widget_selector_set_updator (GtkSignalFunc func, gpointer data) { updator_func=func; updator_func_data=data;}void abook_widget_selector_search_custom (GtkWidget *widget, gpointer data) { char *text=gtk_entry_get_text (GTK_ENTRY (lw (widget, "find_entry"))); if (!current_abook) return; if (strcmp (current_abook->name, gabName )==0) { Abook_entry *entry=abook_entry_seek_name_in_part (current_abook, text); GtkCTree *ctree=GTK_CTREE (lw (widget, "entry_ctree")); GtkCTreeNode *node=NULL; GList *seek;#ifdef WANTLDAP gab_update_search (NULL, text);#endif entry=abook_entry_seek_name_in_part (current_abook, text); abook_widget_rehash_abook_clist (current_abook, ctree); if (!entry) { if (strlen(text)) insert_message (_("'%s' Not found\n"), text); return; } for (seek=entry->nodes;seek;seek=seek->next) node=seek->data; gtk_ctree_select (ctree, node); gtk_ctree_node_moveto (ctree, node, 0, 0, 0); } }void goto_webpage_callback (GtkWidget *widget, GtkWidget *webpage) { char *url = gtk_entry_get_text (GTK_ENTRY (webpage)); char *browser = getenv ("BROWSER"); char *command; char *handler = NULL; char *orph ; MimeType *tmpmtype = mime_type_search_ext ("html"); if (!strlen(url)) return; if (tmpmtype) { handler = (char *)calloc (strlen (orph=cut_string(tmpmtype->handle, ' ', 1, 1)), sizeof (char)); free( orph ) ; sprintf (handler, "%s", orph=cut_string(tmpmtype->handle, ' ', 1, 1)); free( orph ) ; } if (browser) {#if DEBUG > 3 printf ("using $BROWSER.\n");#endif command = (char *)calloc (strlen (browser) + 1 + strlen (url) + 2, sizeof (char)); sprintf (command, "%s %s &", browser, url); } else if (strlen (handler)) {#if DEBUG > 3 printf ("using MIME type for text/html.\n");#endif command = (char *)calloc (strlen (handler) + 1 + strlen (url) + 2, sizeof (char)); sprintf (command, "%s %s &", handler, url); } else {#if DEBUG > 3 printf ("using the default, netscape.\n");#endif command = (char *)calloc (strlen ("netscape") + 1 + strlen (url) + 2, sizeof (char)); sprintf (command, "netscape %s &", url); } if (handler) free (handler); if (command) {#if DEBUG > 3 printf ("executing \"%s\"...\n", command);#endif system (command); free (command); }}void abook_entry_bpe(GtkWidget *widget, GdkEvent *event, gpointer data) { if (event->type == GDK_BUTTON_PRESS) return; abook_widget_edit_entry (widget, NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -