GList *node,
gpointer *data );
+static void addressbook_entry_activated (GtkWidget *widget,
+ gpointer data);
+
static gboolean addressbook_list_button_pressed (GtkWidget *widget,
GdkEventButton *event,
gpointer data);
g_signal_connect(G_OBJECT(entry), "key_press_event",
G_CALLBACK(addressbook_entry_key_pressed),
NULL);
+ g_signal_connect(G_OBJECT(entry), "activate",
+ G_CALLBACK(addressbook_entry_activated), NULL);
if (!prefs_common.addressbook_use_editaddress_dialog) {
editaddress_vbox = gtk_vbox_new(FALSE, 4);
gint column,
gpointer data )
{
- GtkEntry *entry = GTK_ENTRY(addrbook.entry);
AddrItemObject *aio = NULL;
AddressObject *pobj = NULL;
AdapterDSource *ads = NULL;
AddressDataSource *ds = NULL;
- gtk_entry_set_text( entry, "" );
addrbook.listSelected = node;
pobj = gtk_cmctree_node_get_row_data( GTK_CMCTREE(addrbook.ctree), addrbook.treeSelected );
addressbook_edit_person_invalidate(NULL, NULL, NULL);
}
+static void addressbook_entry_activated(GtkWidget *widget, gpointer data)
+{
+ addressbook_lup_clicked(NULL, NULL);
+}
+
static gboolean addressbook_list_button_pressed(GtkWidget *widget,
GdkEventButton *event,
gpointer data)
canLookup = TRUE;
}
if (obj->type == ADDR_DATASOURCE) {
+ canLookup = TRUE;
ads = ADAPTER_DSOURCE(obj);
ds = ads->dataSource;
if( !ds )
}
canEdit = TRUE;
canTreeCopy = TRUE;
- if( iface->externalQuery )
- canLookup = TRUE;
}
else if (obj->type == ADDR_ITEM_FOLDER) {
+ canLookup = TRUE;
ds = addressbook_find_datasource( node );
if( !ds )
goto just_set_sens;
if( iface->externalQuery ) {
/* Enable deletion of LDAP folder */
- canLookup = TRUE;
canDelete = TRUE;
}
}
else if (obj->type == ADDR_ITEM_GROUP) {
+ canLookup = TRUE;
ds = addressbook_find_datasource( node );
if( !ds )
goto just_set_sens;
return str;
}
+static gboolean addressbook_match_item(const gchar *name,
+ const gchar *email_alias,
+ const gchar *addr,
+ const gchar *remarks,
+ const gchar *str)
+{
+ if (!name)
+ return FALSE;
+ if (!str || str[0] == '\0')
+ return TRUE;
+ if (strcasestr(name, str))
+ return TRUE;
+ else if (email_alias && strcasestr(email_alias, str))
+ return TRUE;
+ else if (addr && strcasestr(addr, str))
+ return TRUE;
+ else if (remarks && strcasestr(remarks, str))
+ return TRUE;
+
+ return FALSE;
+}
+
static void addressbook_load_group( GtkCMCTree *clist, ItemGroup *itemGroup ) {
GList *items = itemGroup->listEMail;
AddressTypeControlItem *atci = addrbookctl_lookup( ADDR_ITEM_EMAIL );
+ const gchar *search_str = gtk_entry_get_text(GTK_ENTRY(addrbook.entry));
for( ; items != NULL; items = g_list_next( items ) ) {
GtkCMCTreeNode *nodeEMail = NULL;
gchar *text[N_LIST_COLS];
if( ! email ) continue;
person = ( ItemPerson * ) ADDRITEM_PARENT(email);
+
+ if( !addressbook_match_item(ADDRITEM_NAME(person),
+ ADDRITEM_NAME(email),
+ email->address, email->remarks,
+ search_str))
+ continue;
+
str = addressbook_format_item_clist( person, email );
if( str ) {
text[COL_NAME] = addressbook_set_col_name_guard(str);
GList *items;
AddressTypeControlItem *atci = addrbookctl_lookup( ADDR_ITEM_PERSON );
AddressTypeControlItem *atciMail = addrbookctl_lookup( ADDR_ITEM_EMAIL );
+ const gchar *search_str;
if( atci == NULL ) return;
if( atciMail == NULL ) return;
+ search_str = gtk_entry_get_text(GTK_ENTRY(addrbook.entry));
+
/* Load email addresses */
items = addritem_folder_get_person_list( itemFolder );
for( ; items != NULL; items = g_list_next( items ) ) {
+ ItemPerson *person;
+ GList *node;
+ ItemEMail *email;
+
+ person = (ItemPerson *)items->data;
+ if (!person)
+ continue;
+ node = person->listEMail;
+ if (node && node->data) {
+ email = node->data;
+ if (!addressbook_match_item(ADDRITEM_NAME(person), ADDRITEM_NAME(email), email->address, email->remarks, search_str))
+ continue;
+ } else {
+ if (!addressbook_match_item(ADDRITEM_NAME(person), NULL, NULL, NULL, search_str))
+ continue;
+ }
+
addressbook_folder_load_one_person( clist, items->data, atci, atciMail );
}
/* Free up the list */
static void addressbook_folder_load_group( GtkCMCTree *clist, ItemFolder *itemFolder ) {
GList *items;
AddressTypeControlItem *atci = addrbookctl_lookup( ADDR_ITEM_GROUP );
+ const gchar *search_str;
/* Load any groups */
if( ! atci ) return;
+
+ search_str = gtk_entry_get_text(GTK_ENTRY(addrbook.entry));
+
items = addritem_folder_get_group_list( itemFolder );
for( ; items != NULL; items = g_list_next( items ) ) {
GtkCMCTreeNode *nodeGroup = NULL;
gchar *text[N_LIST_COLS];
ItemGroup *group = items->data;
if( group == NULL ) continue;
+ if( !addressbook_match_item(ADDRITEM_NAME(group),
+ NULL, NULL, NULL, search_str) )
+ continue;
+
text[COL_NAME] = ADDRITEM_NAME(group);
text[COL_ADDRESS] = "";
text[COL_REMARKS] = "";
obj = gtk_cmctree_node_get_row_data( ctree, node );
if( obj == NULL ) return;
+ if (obj->type != ADDR_DATASOURCE ||
+ ADAPTER_DSOURCE(obj)->subType != ADDR_LDAP) {
+ addressbook_set_clist(
+ gtk_cmctree_node_get_row_data(GTK_CMCTREE(addrbook.ctree),
+ addrbook.treeSelected),
+ TRUE);
+ }
+
ds = addressbook_find_datasource( node );
if( ds == NULL ) return;