From 2d0315761c9e7e21608f8f8c6ee29771b99e3129 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Mon, 19 Sep 2011 09:46:17 +0200 Subject: [PATCH] add star icon in the uri bar to add contacts --- coreapi/friend.c | 6 ++- gtk/conference.c | 31 +++++++++++++ gtk/friendlist.c | 80 +++++++++++++++++++++++++++++++--- pixmaps/contact_starred.png | Bin 0 -> 2978 bytes pixmaps/contact_unstarred.png | Bin 0 -> 3243 bytes 5 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 gtk/conference.c create mode 100644 pixmaps/contact_starred.png create mode 100644 pixmaps/contact_unstarred.png diff --git a/coreapi/friend.c b/coreapi/friend.c index 527e29bd5..03332d689 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -438,13 +438,15 @@ static bool_t username_match(const char *u1, const char *u2){ LinphoneFriend *linphone_core_get_friend_by_address(const LinphoneCore *lc, const char *uri){ LinphoneAddress *puri=linphone_address_new(uri); const MSList *elem; - const char *username=linphone_address_get_username(puri); - const char *domain=linphone_address_get_domain(puri); + const char *username; + const char *domain; LinphoneFriend *lf=NULL; if (puri==NULL){ return NULL; } + username=linphone_address_get_username(puri); + domain=linphone_address_get_domain(puri); for(elem=lc->friends;elem!=NULL;elem=ms_list_next(elem)){ lf=(LinphoneFriend*)elem->data; const char *it_username=linphone_address_get_username(lf->uri); diff --git a/gtk/conference.c b/gtk/conference.c new file mode 100644 index 000000000..c3df39593 --- /dev/null +++ b/gtk/conference.c @@ -0,0 +1,31 @@ +/*************************************************************************** + * gtk/conference.c + * + * Mon Sep 12, 2011 + * Copyright 2011 Belledonne Communications + * Author: Simon Morlat + * Email simon dot morlat at linphone dot org + ****************************************************************************/ + +/* + * 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 "linphone.h" + + + + + \ No newline at end of file diff --git a/gtk/friendlist.c b/gtk/friendlist.c index d1b116272..1ebc9c15c 100644 --- a/gtk/friendlist.c +++ b/gtk/friendlist.c @@ -172,6 +172,70 @@ void linphone_gtk_my_presence_clicked(GtkWidget *button){ gtk_widget_show(menu); } +static void icon_press_handler(GtkEntry *entry){ + const char *text=gtk_entry_get_text(entry); + if (text && strlen(text)>0){ + char *uri; + LinphoneFriend *lf; + linphone_core_interpret_friend_uri(linphone_gtk_get_core(),text,&uri); + if (uri==NULL){ + return ; + } + lf=linphone_core_get_friend_by_address(linphone_gtk_get_core(),uri); + if (lf==NULL) + lf=linphone_friend_new_with_addr(uri); + if (lf!=NULL){ + linphone_gtk_show_contact(lf); + } + ms_free(uri); + } +} + +static void update_star(GtkEntry *entry, gboolean is_known){ + GdkPixbuf *active,*starred,*unstarred; + active=gtk_entry_get_icon_pixbuf(entry,GTK_ENTRY_ICON_SECONDARY); + starred=g_object_get_data(G_OBJECT(entry),"starred_icon"); + unstarred=g_object_get_data(G_OBJECT(entry),"unstarred_icon"); + if (is_known && (active==unstarred)){ + gtk_entry_set_icon_from_pixbuf(entry,GTK_ENTRY_ICON_SECONDARY,starred); + }else if ((!is_known) && (active==starred)){ + gtk_entry_set_icon_from_pixbuf(entry,GTK_ENTRY_ICON_SECONDARY,unstarred); + } +} + +static void check_contact(GtkEditable *editable, LinphoneCore *lc){ + char *tmp=gtk_editable_get_chars(editable,0,-1); + if (tmp!=NULL){ + if (strlen(tmp)>0){ + char *uri=NULL; + linphone_core_interpret_friend_uri(lc,tmp,&uri); + if (uri){ + LinphoneFriend *lf=linphone_core_get_friend_by_address(lc,uri); + ms_free(uri); + if (lf) { + update_star(GTK_ENTRY(editable),TRUE); + g_free(tmp); + return; + } + } + } + g_free(tmp); + } + update_star(GTK_ENTRY(editable),FALSE); +} + +static void linphone_gtk_init_bookmark_icon(void){ + GtkWidget *mw=linphone_gtk_get_main_window(); + GtkWidget *entry=linphone_gtk_get_widget(mw,"uribar"); + GdkPixbuf *pbuf=create_pixbuf("contact_unstarred.png"); + gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(entry),GTK_ENTRY_ICON_SECONDARY,pbuf); + g_object_set_data_full(G_OBJECT(entry),"unstarred_icon",pbuf,g_object_unref); + pbuf=create_pixbuf("contact_starred.png"); + g_object_set_data_full(G_OBJECT(entry),"starred_icon",pbuf,g_object_unref); + gtk_entry_set_icon_activatable(GTK_ENTRY(entry),GTK_ENTRY_ICON_SECONDARY,TRUE); + g_signal_connect(G_OBJECT(entry),"icon-release",(GCallback)icon_press_handler,NULL); + g_signal_connect(G_OBJECT(GTK_EDITABLE(entry)),"changed",(GCallback)check_contact,linphone_gtk_get_core()); +} static void linphone_gtk_friend_list_init(GtkWidget *friendlist) { @@ -179,7 +243,8 @@ static void linphone_gtk_friend_list_init(GtkWidget *friendlist) GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; - + + linphone_gtk_init_bookmark_icon(); store = gtk_list_store_new(FRIEND_LIST_NCOL, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, GDK_TYPE_PIXBUF); @@ -318,14 +383,15 @@ void linphone_gtk_show_friends(void){ } if (!online_only || (linphone_friend_get_status(lf)!=LinphoneStatusOffline)){ BuddyInfo *bi; + gboolean send_subscribe=linphone_friend_get_send_subscribe(lf); if (name==NULL || name[0]=='\0') display=uri; gtk_list_store_append(store,&iter); gtk_list_store_set(store,&iter,FRIEND_NAME, display, - FRIEND_PRESENCE_STATUS, linphone_online_status_to_string(linphone_friend_get_status(lf)), - FRIEND_ID,lf,-1); - gtk_list_store_set(store,&iter, - FRIEND_PRESENCE_IMG, create_status_picture(linphone_friend_get_status(lf)), - -1); + FRIEND_PRESENCE_STATUS, + send_subscribe ? linphone_online_status_to_string(linphone_friend_get_status(lf)) : "", + FRIEND_ID,lf, + FRIEND_PRESENCE_IMG, send_subscribe ? create_status_picture(linphone_friend_get_status(lf)) : NULL, + -1); escaped=g_markup_escape_text(uri,-1); gtk_list_store_set(store,&iter,FRIEND_SIP_ADDRESS,escaped,-1); g_free(escaped); @@ -343,7 +409,7 @@ void linphone_gtk_show_friends(void){ } } -void linphone_gtk_add_contact(void){ +void linphone_gtk_add_contact(){ GtkWidget *w=linphone_gtk_create_window("contact"); int presence_enabled=linphone_gtk_get_ui_config_int("use_subscribe_notify",1); diff --git a/pixmaps/contact_starred.png b/pixmaps/contact_starred.png new file mode 100644 index 0000000000000000000000000000000000000000..45b5d620625fcf15fffa10e5a6b33427886969c3 GIT binary patch literal 2978 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 literal 0 HcmV?d00001 diff --git a/pixmaps/contact_unstarred.png b/pixmaps/contact_unstarred.png new file mode 100644 index 0000000000000000000000000000000000000000..ad041095b4696747d24dbc5d4392a74efb589bd1 GIT binary patch literal 3243 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 literal 0 HcmV?d00001