예제 #1
0
파일: importldif.c 프로젝트: twolife/claws
/**
 * 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);
}
예제 #2
0
파일: select-keys.c 프로젝트: ctubio/claws
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);
	}
}
예제 #9
0
파일: importldif.c 프로젝트: twolife/claws
/**
 * 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 );
}
예제 #10
0
파일: importldif.c 프로젝트: twolife/claws
/**
 * 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;
}
예제 #11
0
파일: importldif.c 프로젝트: twolife/claws
/**
 * 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;
	}
}