亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? assoc-buddy.c

?? Linux下的多協(xié)議即時(shí)通訊程序源代碼
?? C
字號(hào):
/* * Evolution integration plugin for Purple * * Copyright (C) 2003 Christian Hammond. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */#include "internal.h"#include "gtkblist.h"#include "gtkexpander.h"#include "pidgin.h"#include "gtkutils.h"#include "gtkimhtml.h"#include "debug.h"#include "gevolution.h"#include <stdlib.h>#include <gtk/gtk.h>enum{	COLUMN_NAME,	COLUMN_DATA,	NUM_COLUMNS};static gintdelete_win_cb(GtkWidget *w, GdkEvent *event, GevoAssociateBuddyDialog *dialog){	gtk_widget_destroy(dialog->win);	if (dialog->contacts != NULL)	{		g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL);		g_list_free(dialog->contacts);	}	g_object_unref(dialog->book);	gevo_addrbooks_model_unref(dialog->addrbooks);	g_free(dialog);	return 0;}static voidsearch_changed_cb(GtkEntry *entry, GevoAssociateBuddyDialog *dialog){	const char *text = gtk_entry_get_text(entry);	GList *l;	gtk_list_store_clear(dialog->model);	for (l = dialog->contacts; l != NULL; l = l->next)	{		EContact *contact = E_CONTACT(l->data);		const char *name;		GtkTreeIter iter;		name = e_contact_get_const(contact, E_CONTACT_FULL_NAME);		if (text != NULL && *text != '\0' && name != NULL &&			g_ascii_strncasecmp(name, text, strlen(text)))		{			continue;		}		gtk_list_store_append(dialog->model, &iter);		gtk_list_store_set(dialog->model, &iter,						   COLUMN_NAME, name,						   COLUMN_DATA, contact,						   -1);	}}static voidclear_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog){	static gboolean lock = FALSE;	if (lock)		return;	lock = TRUE;	gtk_entry_set_text(GTK_ENTRY(dialog->search_field), "");	lock = FALSE;}static voidselected_cb(GtkTreeSelection *sel, GevoAssociateBuddyDialog *dialog){	GtkTreeSelection *selection;	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview));	gtk_widget_set_sensitive(dialog->assoc_button,							 gtk_tree_selection_get_selected(selection, NULL, NULL));}static voidadd_columns(GevoAssociateBuddyDialog *dialog){	GtkCellRenderer *renderer;	GtkTreeViewColumn *column;	/* Name column */	column = gtk_tree_view_column_new();	gtk_tree_view_column_set_title(column, _("Name"));	gtk_tree_view_insert_column(GTK_TREE_VIEW(dialog->treeview), column, -1);	gtk_tree_view_column_set_sort_column_id(column, COLUMN_NAME);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_column_pack_start(column, renderer, TRUE);	gtk_tree_view_column_add_attribute(column, renderer,									   "text", COLUMN_NAME);}static voidpopulate_treeview(GevoAssociateBuddyDialog *dialog, const gchar *uri){	EBook *book;	EBookQuery *query;	const char *prpl_id;	gboolean status;	GList *cards, *c;	if (dialog->book != NULL)	{		g_object_unref(dialog->book);		dialog->book = NULL;	}	if (dialog->contacts != NULL)	{		g_list_foreach(dialog->contacts, (GFunc) g_object_unref, NULL);		g_list_free(dialog->contacts);		dialog->contacts = NULL;	}	gtk_list_store_clear(dialog->model);	if (!gevo_load_addressbook(uri, &book, NULL))	{		purple_debug_error("evolution",						 "Error retrieving addressbook\n");		return;	}	query = e_book_query_field_exists(E_CONTACT_FULL_NAME);	if (query == NULL)	{		purple_debug_error("evolution", "Error in creating query\n");		g_object_unref(book);		return;	}	status = e_book_get_contacts(book, query, &cards, NULL);	e_book_query_unref(query);	if (!status)	{		purple_debug_error("evolution", "Error %d in getting card list\n",						 status);		g_object_unref(book);		return;	}	prpl_id = purple_account_get_protocol_id(dialog->buddy->account);	for (c = cards; c != NULL; c = c->next)	{		EContact *contact = E_CONTACT(c->data);		const char *name;		GtkTreeIter iter;		EContactField protocol_field = 0;		name = e_contact_get_const(contact, E_CONTACT_FULL_NAME);		gtk_list_store_append(dialog->model, &iter);		gtk_list_store_set(dialog->model, &iter,						   COLUMN_NAME, name,						   COLUMN_DATA, contact,						   -1);		/* See if this user has the buddy in its list. */		protocol_field = gevo_prpl_get_field(dialog->buddy->account,											 dialog->buddy);		if (protocol_field > 0)		{			GList *ims, *l;			ims = e_contact_get(contact, protocol_field);			for (l = ims; l != NULL; l = l->next)			{				if (!strcmp(l->data, dialog->buddy->name))				{					GtkTreeSelection *selection;					/* This is it. Select it. */					selection = gtk_tree_view_get_selection(						GTK_TREE_VIEW(dialog->treeview));					gtk_tree_selection_select_iter(selection, &iter);					break;				}			}		}	}	dialog->contacts = cards;	dialog->book = book;}static voidaddrbook_change_cb(GtkComboBox *combo, GevoAssociateBuddyDialog *dialog){	GtkTreeIter iter;	const char *esource_uri;	if (!gtk_combo_box_get_active_iter(combo, &iter))		return;	gtk_tree_model_get(GTK_TREE_MODEL(dialog->addrbooks), &iter,					   ADDRBOOK_COLUMN_URI, &esource_uri,					   -1);	populate_treeview(dialog, esource_uri);}static voidnew_person_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog){	gevo_new_person_dialog_show(dialog->book, NULL, dialog->buddy->account,								dialog->buddy->name, NULL, dialog->buddy,								TRUE);	delete_win_cb(NULL, NULL, dialog);}static voidcancel_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog){	delete_win_cb(NULL, NULL, dialog);}static voidassoc_buddy_cb(GtkWidget *w, GevoAssociateBuddyDialog *dialog){	GtkTreeSelection *selection;	GtkTreeIter iter;	GList *list;	const char *fullname;	EContactField protocol_field;	EContact *contact;	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview));	if (!gtk_tree_selection_get_selected(selection, NULL, &iter))		return;	gtk_tree_model_get(GTK_TREE_MODEL(dialog->model), &iter,					   COLUMN_NAME, &fullname,					   COLUMN_DATA, &contact,					   -1);	protocol_field = gevo_prpl_get_field(dialog->buddy->account, dialog->buddy);	if (protocol_field == 0)		return; /* XXX */	list = e_contact_get(contact, protocol_field);	list = g_list_append(list, g_strdup(dialog->buddy->name));	e_contact_set(contact, protocol_field, list);	if (!e_book_commit_contact(dialog->book, contact, NULL))		purple_debug_error("evolution", "Error adding contact to book\n");	/* Free the list. */	g_list_foreach(list, (GFunc)g_free, NULL);	g_list_free(list);	delete_win_cb(NULL, NULL, dialog);}GevoAssociateBuddyDialog *gevo_associate_buddy_dialog_new(PurpleBuddy *buddy){	GevoAssociateBuddyDialog *dialog;	GtkWidget *button;	GtkWidget *sw;	GtkWidget *label;	GtkWidget *vbox;	GtkWidget *hbox;	GtkWidget *bbox;	GtkWidget *sep;	GtkWidget *expander;	GtkTreeSelection *selection;	GtkCellRenderer *cell;	g_return_val_if_fail(buddy != NULL, NULL);	dialog = g_new0(GevoAssociateBuddyDialog, 1);	dialog->buddy = buddy;	dialog->win = gtk_window_new(GTK_WINDOW_TOPLEVEL);	gtk_window_set_role(GTK_WINDOW(dialog->win), "assoc_buddy");	gtk_container_set_border_width(GTK_CONTAINER(dialog->win), 12);	g_signal_connect(G_OBJECT(dialog->win), "delete_event",					 G_CALLBACK(delete_win_cb), dialog);	/* Setup the vbox */	vbox = gtk_vbox_new(FALSE, 12);	gtk_container_add(GTK_CONTAINER(dialog->win), vbox);	gtk_widget_show(vbox);	/* Add the label. */	label = gtk_label_new(_("Select a person from your address book to "							"add this buddy to, or create a new person."));	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0);	gtk_widget_show(label);	/* Add the search hbox */	hbox = gtk_hbox_new(FALSE, 6);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);	gtk_widget_show(hbox);	/* "Search" */	label = gtk_label_new(_("Search"));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);	gtk_widget_show(label);	/* Addressbooks */	dialog->addrbooks = gevo_addrbooks_model_new();	dialog->addrbooks_combo = gtk_combo_box_new_with_model(dialog->addrbooks);	cell = gtk_cell_renderer_text_new();	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->addrbooks_combo),							   cell, TRUE);	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dialog->addrbooks_combo),								   cell,								   "text", ADDRBOOK_COLUMN_NAME,								   NULL);	gtk_box_pack_start(GTK_BOX(hbox), dialog->addrbooks_combo, FALSE, FALSE, 0);	gtk_widget_show(dialog->addrbooks_combo);	/* Search field */	dialog->search_field = gtk_entry_new();	gtk_box_pack_start(GTK_BOX(hbox), dialog->search_field, TRUE, TRUE, 0);	gtk_widget_show(dialog->search_field);	g_signal_connect(G_OBJECT(dialog->search_field), "changed",					 G_CALLBACK(search_changed_cb), dialog);	/* Clear button */	button = gtk_button_new_from_stock(GTK_STOCK_CLEAR);	gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);	gtk_widget_show(button);	g_signal_connect(G_OBJECT(button), "clicked",					 G_CALLBACK(clear_cb), dialog);	/* Scrolled Window */	sw = gtk_scrolled_window_new(0, 0);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),								   GTK_POLICY_AUTOMATIC,								   GTK_POLICY_ALWAYS);	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),										GTK_SHADOW_IN);	gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);	gtk_widget_show(sw);	/* Create the list model for the treeview. */	dialog->model = gtk_list_store_new(NUM_COLUMNS,									   G_TYPE_STRING, G_TYPE_POINTER);	/* Now for the treeview */	dialog->treeview = gtk_tree_view_new_with_model(			GTK_TREE_MODEL(dialog->model));	gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dialog->treeview), TRUE);	gtk_container_add(GTK_CONTAINER(sw), dialog->treeview);	gtk_widget_show(dialog->treeview);	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview));	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);	g_signal_connect(G_OBJECT(selection), "changed",					 G_CALLBACK(selected_cb), dialog);	add_columns(dialog);	/*	 * Catch addressbook selection and populate treeview with the first	 * addressbook	 */	gevo_addrbooks_model_populate( dialog->addrbooks );	g_signal_connect(G_OBJECT(dialog->addrbooks_combo), "changed",					 G_CALLBACK(addrbook_change_cb), dialog);	gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0);	/* Add the expander */	expander = gtk_expander_new_with_mnemonic(_("User _details"));	gtk_box_pack_start(GTK_BOX(vbox), expander, FALSE, FALSE, 0);	gtk_widget_show(expander);	/*	 * User details	 */	/* Scrolled Window */	sw = gtk_scrolled_window_new(0, 0);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),								   GTK_POLICY_NEVER,								   GTK_POLICY_ALWAYS);	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),										GTK_SHADOW_IN);	gtk_container_add(GTK_CONTAINER(expander), sw);	gtk_widget_show(sw);	/* Textview */	dialog->imhtml = gtk_imhtml_new(NULL, NULL);	gtk_container_add(GTK_CONTAINER(sw), dialog->imhtml);	gtk_widget_show(dialog->imhtml);	/* Separator. */	sep = gtk_hseparator_new();	gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);	gtk_widget_show(sep);	/* Button box */	bbox = gtk_hbutton_box_new();	gtk_box_set_spacing(GTK_BOX(bbox), 6);	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);	gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0);	gtk_widget_show(bbox);	/* "New Person" button */	button = pidgin_pixbuf_button_from_stock(_("New Person"), GTK_STOCK_NEW,										   PIDGIN_BUTTON_HORIZONTAL);	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);	gtk_widget_show(button);	g_signal_connect(G_OBJECT(button), "clicked",					 G_CALLBACK(new_person_cb), dialog);	/* "Cancel" button */	button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);	gtk_widget_show(button);	g_signal_connect(G_OBJECT(button), "clicked",					 G_CALLBACK(cancel_cb), dialog);	/* "Associate Buddy" button */	button = pidgin_pixbuf_button_from_stock(_("_Associate Buddy"),										   GTK_STOCK_APPLY,										   PIDGIN_BUTTON_HORIZONTAL);	dialog->assoc_button = button;	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);	gtk_widget_set_sensitive(button, FALSE);	gtk_widget_show(button);	g_signal_connect(G_OBJECT(button), "clicked",					 G_CALLBACK(assoc_buddy_cb), dialog);	/* Show it. */	gtk_widget_show(dialog->win);	return dialog;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美顶级少妇做爰| 国产一区二区三区电影在线观看| 国产色综合久久| 精品国产乱码久久久久久1区2区| 91麻豆精品国产91久久久久久久久 | 久久亚区不卡日本| 久久伊人中文字幕| 国产视频一区二区在线| 国产亚洲成年网址在线观看| 久久久精品国产免大香伊| 久久久久久久国产精品影院| 久久精品视频免费| 欧美高清在线视频| 亚洲人精品午夜| 亚洲一区在线观看网站| 亚洲自拍偷拍综合| 视频一区二区中文字幕| 日韩av一级电影| 韩国欧美国产1区| 国产91清纯白嫩初高中在线观看| 成人美女在线观看| 色哟哟在线观看一区二区三区| 色94色欧美sute亚洲线路一ni| 精品视频在线视频| 欧美成人a∨高清免费观看| 26uuu久久综合| 国产精品久久久久久久久图文区| 一区二区三区中文字幕在线观看| 亚洲国产wwwccc36天堂| 久久精品噜噜噜成人av农村| 国产丶欧美丶日本不卡视频| 91麻豆免费看片| 69精品人人人人| 久久精品免视看| 亚洲免费观看在线视频| 日韩国产精品91| 黄页网站大全一区二区| www.亚洲国产| 亚洲一区在线电影| www.成人网.com| 国产一区二区三区美女| 99久久久久免费精品国产| 精品污污网站免费看| 精品国产麻豆免费人成网站| 国产精品久久福利| 视频一区二区三区中文字幕| 国产成人精品亚洲午夜麻豆| 91黄色小视频| 久久免费视频一区| 一区二区三区av电影| 国产一区二区免费看| 色94色欧美sute亚洲线路一久| 精品美女一区二区| 亚洲视频 欧洲视频| 蜜臀av在线播放一区二区三区| 99热国产精品| 日韩免费在线观看| 亚洲天堂成人在线观看| 久久福利资源站| 日本高清不卡在线观看| 久久蜜臀精品av| 亚洲成人av一区二区| 国产91高潮流白浆在线麻豆| 337p亚洲精品色噜噜| 中文字幕一区免费在线观看| 久久99精品国产麻豆不卡| 91黄色免费网站| 中文字幕va一区二区三区| 看电视剧不卡顿的网站| 色噜噜狠狠色综合欧洲selulu| 2023国产精品| 日本伊人色综合网| 色婷婷综合久久久久中文一区二区| 久久综合精品国产一区二区三区 | 亚洲精品亚洲人成人网在线播放| 激情五月婷婷综合| 717成人午夜免费福利电影| 亚洲丝袜精品丝袜在线| 国产激情视频一区二区三区欧美| 91精品国产综合久久精品app| 亚洲色图另类专区| 成人国产在线观看| wwwwww.欧美系列| 免费日韩伦理电影| 在线播放一区二区三区| 亚洲精品成人在线| www.视频一区| 成人av在线观| 欧美高清在线视频| 成人在线综合网站| 国产一区二区三区免费观看| 国产精品 欧美精品| 日韩欧美在线1卡| 日韩二区三区四区| 欧美另类变人与禽xxxxx| 亚洲一区二区三区不卡国产欧美| 91在线观看成人| 亚洲欧洲精品一区二区三区不卡| 成人午夜视频在线观看| 欧美韩国日本不卡| 成人三级在线视频| 国产精品成人一区二区艾草| 不卡的av电影| 亚洲人一二三区| 99久久久国产精品| 亚洲天堂免费看| 在线免费不卡电影| 亚洲二区在线视频| 7777精品伊人久久久大香线蕉 | 蜜芽一区二区三区| 欧美一区二区视频在线观看2022 | 日本韩国欧美三级| 色综合久久久久| 欧美日韩精品欧美日韩精品一综合| 亚洲老妇xxxxxx| 欧美性猛交xxxx黑人交| 亚洲午夜久久久久久久久电影网 | 亚洲电影一区二区| 欧美三级电影网| 亚洲va韩国va欧美va精品| 欧美日本在线播放| 蜜桃av一区二区| 久久午夜国产精品| 成人av在线资源| 亚洲综合丝袜美腿| 日韩免费视频一区二区| 国产麻豆成人传媒免费观看| 国产精品五月天| 日本精品一级二级| 日韩国产在线一| 久久欧美一区二区| 91丨九色丨蝌蚪丨老版| 亚州成人在线电影| 久久影院视频免费| 94-欧美-setu| 青青草91视频| 亚洲国产精品传媒在线观看| 在线一区二区三区四区五区| 日韩经典一区二区| 国产无一区二区| 欧美私模裸体表演在线观看| 久久精品免费看| 国产精品狼人久久影院观看方式| 欧美性大战xxxxx久久久| 老司机午夜精品| 最新不卡av在线| 欧美猛男男办公室激情| 国产高清不卡二三区| 一二三区精品视频| 久久综合久久鬼色| 在线观看视频一区二区欧美日韩| 理论片日本一区| 亚洲美女电影在线| 日韩欧美国产一区二区在线播放| 成+人+亚洲+综合天堂| 日韩专区中文字幕一区二区| 国产精品无码永久免费888| 欧美日韩日本视频| 国产盗摄精品一区二区三区在线| 亚洲自拍偷拍av| 国产免费观看久久| 91.成人天堂一区| 99re这里只有精品首页| 美女看a上一区| 亚洲一级二级在线| 日本一区二区不卡视频| 3d动漫精品啪啪一区二区竹菊| 99亚偷拍自图区亚洲| 久久国产精品99久久久久久老狼| 一区二区三区日本| 亚洲国产精品v| 欧美videos大乳护士334| 欧美性生活久久| 懂色av一区二区三区蜜臀| 日韩av电影一区| 一区二区三区中文在线观看| 国产亚洲成av人在线观看导航| 91精品国产高清一区二区三区 | 成人免费的视频| 精品一区二区三区久久久| 亚洲一区二区精品视频| 国产精品不卡视频| 国产日本欧洲亚洲| 日韩欧美一级二级三级久久久| 欧美视频一区二区三区在线观看 | 激情深爱一区二区| 婷婷丁香激情综合| 亚洲香肠在线观看| 亚洲欧美韩国综合色| 久久99精品久久久久久久久久久久| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品久久精品日日| 国产欧美一区二区三区网站 | 暴力调教一区二区三区| 国产欧美日本一区视频| 不卡电影一区二区三区| 国产精品91一区二区| 久久成人免费电影| 免费观看成人av| 蜜乳av一区二区|