muppet wrote:
1. connect to the "button-press-event" on the treeview. if you want right-clicking to select the row before popping up the menu, use signal_connect_after() to connect to the button-press-event, so that the default handlers run first.
$usertree->signal_connect('button-press-event' => sub { my $event = $_[1]; if ($event->button == 3) { $gladexml->get_widget('pmUsers')->popup(undef, undef, undef, user_selected(), $event->button, 0); return TRUE; } else { return FALSE; } } ); if i connect after it doesn't seem to work (conn doesn't appear).other way popup appears and disappears quickly. i think it has with 0, which should be
activate_time : the time at which the activation event occurred.The activate_time parameter should be the time stamp of the event that initiated the popup. If such an event is not available, use gtk_get_current_event_time() instead.
i don't really understand from where i should get that activation time..
2. in the handler:a) if $event->button==3 (the right mouse button), create your menu and call $menu->popup. the menu pos func can be undef unless you want to do something fancy. pass $event->button to popup() so that the menu tracks the correct mouse button.
b) if you need to know which row the user clicked on: ($x, $y) = $event->coords tells you where the user clicked, and you can pass those to $treeview->get_path_at_pos to find the path, column, and cell coords of the click.Currently i'm using this to get name of selected user. My treeview has 2 columns: Pixbuf and label, so i get second column out of it.
my $usertree = $gladexml->get_widget('UserTree'); $usertree->signal_connect_after('row-activated' => sub { compose_msg(user_selected()); } ); sub user_selected { # {{{ my $selection = $usertree->get_selection; my $row = $selection->get_selected_rows; my $treestore = $usertree->get_model; my $iter = $treestore->get_iter($row); return $treestore->get($iter, 1); } # }}}
Attachment:
x11.vcf
Description: Vcard