Frank v Waveren <[EMAIL PROTECTED]> wrote:

> I couldn't find the program on your page... Could you send me the
> program (would be usefull, as I said, I have no gtk experience), or
> could somebody tell me how to make the
> on_person_selector_list_key_press_event function the handler for
> keypresses? Thanks

  gtk_signal_connect(GTK_OBJECT (clistwidget), "key_press_event",
                     GTK_SIGNAL_FUNC (on_person_selector_list_key_press_event),
                     0);


But the method Rene suggested for setting focus (changing
clist->focus_row) will not work in browse mode of the clist. There are
two kinds of focus (marked either by a solid block or by a thin frame)
and changing ->focus_row only changes one of them. I therefore use the
following function which is clumsy, but works. I would like to know if
someone knows of a better way to do this through the public interface.


void GUIBrowse::FocusRow(int position)
{
        int oldposition = recipients->focus_row;

        if (position == oldposition)
                return;

        gtk_signal_emit_by_name(GTK_OBJECT(recipients), "scroll_vertical",
                                GTK_SCROLL_JUMP,
                                (gfloat)position/(recipients->rows-1));

        // Rounding errors might have positioned us slightly wrong :-/.
        oldposition = recipients->focus_row;
        if (position < oldposition)
                for (int i = oldposition; i != position; --i)
                        gtk_signal_emit_by_name(GTK_OBJECT(recipients),
                                                "scroll_vertical",
                                                GTK_SCROLL_STEP_BACKWARD, 0);
        else if (position > oldposition)
                for (int i = oldposition; i != position; ++i)
                        gtk_signal_emit_by_name(GTK_OBJECT(recipients),
                                                "scroll_vertical",
                                                GTK_SCROLL_STEP_FORWARD, 0);
}


I think the correction of the position could be reduced to half of the
if and without the for loop, but I prefer to play it safe since I am
not sure about the way it is supposed to work.


Good luck,
Anders.

-- 
To unsubscribe: mail -s unsubscribe [EMAIL PROTECTED] < /dev/null

Reply via email to