/** * Callback function when list item is selected. * \param clist List widget. * \param row Row. * \param col Column. * \param event Event object. * \param data User data. */ static void imp_ldif_field_list_selected( GtkCMCList *clist, gint row, gint column, GdkEvent *event, gpointer data ) { Ldif_FieldRec *rec = gtk_cmclist_get_row_data( clist, row ); impldif_dlg.rowIndSelect = row; gtk_entry_set_text( GTK_ENTRY(impldif_dlg.entryAttrib), "" ); if( rec ) { /* Update widget contents */ gtk_label_set_text( GTK_LABEL(impldif_dlg.entryField), rec->tagName ); if( rec->userName ) gtk_entry_set_text( GTK_ENTRY(impldif_dlg.entryAttrib), rec->userName ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( impldif_dlg.checkSelect), rec->selected ); /* Disable widgets for reserved fields */ gtk_widget_set_sensitive( impldif_dlg.entryAttrib, ! rec->reserved ); gtk_widget_set_sensitive( impldif_dlg.checkSelect, ! rec->reserved ); gtk_widget_set_sensitive( impldif_dlg.btnModify, ! rec->reserved ); } gtk_widget_grab_focus(impldif_dlg.entryAttrib); }
static void select_btn_cb (GtkWidget *widget, gpointer data) { struct select_keys_s *sk = data; int row; gboolean use_key; gpgme_key_t key; cm_return_if_fail (sk); if (!sk->clist->selection) { debug_print ("** nothing selected"); return; } row = GPOINTER_TO_INT(sk->clist->selection->data); key = gtk_cmclist_get_row_data(sk->clist, row); if (key) { gpgme_user_id_t uid; for (uid = key->uids; uid; uid = uid->next) { gchar *raw_mail = NULL; if (!uid->email) continue; raw_mail = g_strdup(uid->email); extract_address(raw_mail); if (sk->pattern && !strcasecmp(sk->pattern, raw_mail)) { g_free(raw_mail); break; } g_free(raw_mail); } if (!uid) uid = key->uids; if ( uid->validity < GPGME_VALIDITY_FULL ) { use_key = use_untrusted(key, uid, sk->proto); if (!use_key) { debug_print ("** Key untrusted, will not encrypt"); return; } } sk->kset = g_realloc(sk->kset, sizeof(gpgme_key_t) * (sk->num_keys + 1)); gpgme_key_ref(key); sk->kset[sk->num_keys] = key; sk->num_keys++; sk->okay = 1; sk->result = KEY_SELECTION_OK; gtk_main_quit (); } }
static gboolean list_find_attribute(const gchar *attr) { GtkCMCList *clist = GTK_CMCLIST(personEditDlg->clist_attrib); UserAttribute *attrib; gint row = 0; while((attrib = gtk_cmclist_get_row_data(clist, row))) { if (!g_ascii_strcasecmp(attrib->name, attr)) { gtk_cmclist_select_row(clist, row, 0); return TRUE; } row++; } return FALSE; }
static void edit_person_attrib_modify(gpointer data) { gboolean errFlg = FALSE; GtkCMCList *clist = GTK_CMCLIST(personEditDlg->clist_attrib); gint row = personEditDlg->rowIndAttrib; UserAttribute *attrib = gtk_cmclist_get_row_data(clist, row); if (attrib) { edit_person_attrib_edit(&errFlg, attrib); if (!errFlg) { gtk_cmclist_set_text(clist, row, ATTRIB_COL_NAME, attrib->name); gtk_cmclist_set_text(clist, row, ATTRIB_COL_VALUE, attrib->value); edit_person_attrib_clear(NULL); } } }
static void edit_person_attrib_delete(gpointer data) { GtkCMCList *clist = GTK_CMCLIST(personEditDlg->clist_attrib); gint row = personEditDlg->rowIndAttrib; UserAttribute *attrib = gtk_cmclist_get_row_data(clist, row); edit_person_attrib_clear(NULL); if (attrib) { /* Remove list entry */ gtk_cmclist_remove(clist, row); addritem_free_attribute(attrib); attrib = NULL; } /* Position hilite bar */ attrib = gtk_cmclist_get_row_data(clist, row); if (!attrib) { personEditDlg->rowIndAttrib = -1 + row; } if (!personEditDlg->read_only) gtk_widget_set_sensitive(personEditDlg->attrib_del, gtk_cmclist_get_row_data(clist, 0) != NULL); edit_person_status_show(NULL); }
static void edit_person_attrib_add(gpointer data) { GtkCMCList *clist = GTK_CMCLIST(personEditDlg->clist_attrib); gboolean errFlg = FALSE; UserAttribute *attrib = NULL; gint row = personEditDlg->rowIndAttrib; if (gtk_cmclist_get_row_data(clist, row) == NULL) row = 0; attrib = edit_person_attrib_edit(&errFlg, NULL); if (!errFlg) { gchar *text[EMAIL_N_COLS]; text[ATTRIB_COL_NAME] = attrib->name; text[ATTRIB_COL_VALUE] = attrib->value; row = gtk_cmclist_insert(clist, 1 + row, text); gtk_cmclist_set_row_data(clist, row, attrib); gtk_cmclist_select_row(clist, row, 0); edit_person_attrib_clear(NULL); } }
static void edit_person_attrib_list_selected(GtkCMCList *clist, gint row, gint column, GdkEvent *event, gpointer data) { UserAttribute *attrib = gtk_cmclist_get_row_data(clist, row); if (attrib && !personEditDlg->read_only) { int index = get_attribute_index(attrib->name); if (index == -1) index = 0; gtk_combo_box_set_active(GTK_COMBO_BOX(personEditDlg->entry_atname), index); gtk_entry_set_text( GTK_ENTRY(personEditDlg->entry_atvalue), attrib->value ); gtk_widget_set_sensitive(personEditDlg->attrib_del, TRUE); } else { /*g_printerr("Row: %d -> empty attribute\n", row);*/ gtk_entry_set_text( GTK_ENTRY(personEditDlg->entry_atvalue), ""); gtk_widget_set_sensitive(personEditDlg->attrib_del, FALSE); } personEditDlg->rowIndAttrib = row; edit_person_status_show(NULL); }
static void edit_person_combo_box_changed(GtkComboBox *opt_menu, gpointer data) { GtkCMCList *clist = GTK_CMCLIST(data); gint row = personEditDlg->rowIndAttrib; UserAttribute *attrib = gtk_cmclist_get_row_data(clist, row); gint option = gtk_combo_box_get_active(opt_menu); const gchar *str = attrib ? attrib->name:""; cm_return_if_fail (option < ATTRIBUTE_SIZE); /* A corresponding attribute in contact does not match selected option */ if (strcmp(ATTRIBUTE[option], str) != 0) { gtk_widget_set_sensitive(personEditDlg->attrib_add, TRUE); gtk_widget_set_sensitive(personEditDlg->attrib_mod, TRUE); gtk_widget_set_sensitive(personEditDlg->attrib_del, FALSE); gtk_entry_set_text(GTK_ENTRY(personEditDlg->entry_atvalue), ""); gtk_widget_grab_focus(personEditDlg->entry_atvalue); edit_person_status_show(NULL); } }
/** * Callback function to update LDIF field data from input fields. * \param widget Widget (button). * \param data User data. */ static void imp_ldif_modify_pressed( GtkWidget *widget, gpointer data ) { GtkCMCList *clist = GTK_CMCLIST(impldif_dlg.clist_field); Ldif_FieldRec *rec; gint row; if( impldif_dlg.rowIndSelect < 0 ) return; row = impldif_dlg.rowIndSelect; rec = gtk_cmclist_get_row_data( clist, impldif_dlg.rowIndSelect ); ldif_field_set_name( rec, gtk_editable_get_chars( GTK_EDITABLE(impldif_dlg.entryAttrib), 0, -1 ) ); ldif_field_set_selected( rec, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( impldif_dlg.checkSelect) ) ); imp_ldif_update_row( clist ); gtk_cmclist_select_row( clist, row, 0 ); gtk_label_set_text( GTK_LABEL(impldif_dlg.entryField), "" ); gtk_entry_set_text( GTK_ENTRY(impldif_dlg.entryAttrib), "" ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( impldif_dlg.checkSelect), FALSE ); }
/** * Callback function to toggle selected LDIF field. * \param clist List to update. * \param event Event object. * \param data Data. */ static gboolean imp_ldif_field_list_toggle( GtkCMCList *clist, GdkEventButton *event, gpointer data ) { Ldif_FieldRec *rec; gboolean toggle = FALSE; if( ! event ) return FALSE; if( impldif_dlg.rowIndSelect < 0 ) return FALSE; if( event->button == 1 ) { /* If single click in select column */ if( event->type == GDK_BUTTON_PRESS ) { gint x = event->x; gint y = event->y; gint row, col; if (!gtk_cmclist_get_selection_info( clist, x, y, &row, &col )) return FALSE; if( col != FIELD_COL_SELECT ) return FALSE; if( row > impldif_dlg.rowCount ) return FALSE; /* Set row */ impldif_dlg.rowIndSelect = row; toggle = TRUE; } /* If double click anywhere in row */ else if( event->type == GDK_2BUTTON_PRESS ) { toggle = TRUE; } } /* Toggle field selection */ if( toggle ) { rec = gtk_cmclist_get_row_data( clist, impldif_dlg.rowIndSelect ); if( rec ) { ldif_field_toggle( rec ); imp_ldif_update_row( clist ); } } return FALSE; }
/** * Update list with data for current row. * \param clist List to update. */ static void imp_ldif_update_row( GtkCMCList *clist ) { Ldif_FieldRec *rec; gchar *text[ FIELDS_N_COLS ]; gint row; if( impldif_dlg.rowIndSelect < 0 ) return; row = impldif_dlg.rowIndSelect; rec = gtk_cmclist_get_row_data( clist, row ); if (!rec) return; text[ FIELD_COL_RESERVED ] = ""; text[ FIELD_COL_SELECT ] = ""; text[ FIELD_COL_FIELD ] = rec->tagName; text[ FIELD_COL_ATTRIB ] = rec->userName; gtk_cmclist_freeze( clist ); gtk_cmclist_remove( clist, row ); if( row == impldif_dlg.rowCount - 1 ) { gtk_cmclist_append( clist, text ); } else { gtk_cmclist_insert( clist, row, text ); } if( rec->selected ) { gtk_cmclist_set_pixbuf( clist, row, FIELD_COL_SELECT, markxpm ); } if( rec->reserved ) { gtk_cmclist_set_pixbuf( clist, row, FIELD_COL_RESERVED, markxpm ); } gtk_cmclist_set_row_data( clist, row, rec ); gtk_cmclist_thaw( clist ); }
static void edit_person_entry_att_changed (GtkWidget *entry, gpointer data) { gboolean non_empty = gtk_cmclist_get_row_data(GTK_CMCLIST(personEditDlg->clist_attrib), 0) != NULL; const gchar *sName; int index; if (personEditDlg->read_only) return; index = gtk_combo_box_get_active(GTK_COMBO_BOX(personEditDlg->entry_atname)); sName = ATTRIBUTE[index]; if (list_find_attribute(sName)) { gtk_widget_set_sensitive(personEditDlg->attrib_add,FALSE); gtk_widget_set_sensitive(personEditDlg->attrib_mod,non_empty); attrib_adding = FALSE; attrib_saving = non_empty; } else { gtk_widget_set_sensitive(personEditDlg->attrib_add,TRUE); gtk_widget_set_sensitive(personEditDlg->attrib_mod,non_empty); attrib_adding = TRUE; attrib_saving = non_empty; } }