Gtk::Tooltip and Gtk::TreeView



Hi!
I've been working on add tooltips for a treeview. Those are the relevant sections of code that performs the tooltips:

class LayerTree : public Gtk::Table
{
    // The rest of the class is omited
private:
    Gtk::TreeView* param_tree_view_;
    bool on_param_tree_view_query_tooltip(int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip);
public:
    Gtk::TreeView& get_param_tree_view() { return *param_tree_view_; }
};


LayerTree::LayerTree()
{
    param_tree_view_=new Gtk::TreeView;
    // Here is the the code to add columns and model data to param_tree_view_
    get_param_tree_view().signal_query_tooltip().connect(sigc::mem_fun(*this, &studio::LayerTree::on_param_tree_view_query_tooltip));
    get_param_tree_view().set_has_tooltip();
}

LayerTree::on_param_tree_view_query_tooltip(int x, int y, bool /*keyboard_tooltip*/, const Glib::RefPtr<Gtk::Tooltip>& tooltip)
{
    Gtk::TreeModel::Path path;
    Gtk::TreeViewColumn *column;
    int cell_x, cell_y;
    int bx, by;
    get_param_tree_view().convert_widget_to_bin_window_coords(x, y, bx, by);
    if(!get_param_tree_view().get_path_at_pos(bx, by, path, column, cell_x,cell_y))
        return false;
    Gtk::TreeIter iter(get_param_tree_view().get_model()->get_iter(path));
    if(!iter)
        return false;
    Gtk::TreeRow row = *(iter);
    Glib::ustring tooltip_string(row[param_model.tooltip]);
    if(tooltip_string.empty())
        return false;
    tooltip->set_text(tooltip_string);
    return true;
}

The result of this code is shown on this video:
http://www.youtube.com/watch?v=UQkP3z6dG7Y
As you can see, the tooltip window is shown in the place where the timeout expired when the mouse hovered on the widget and not where the mouse is when the text is changed.
How do I do to place the tooltip near the mouse?
Thanks!
Carlos


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]