void OnTreeViewButtonPressed (object sender, Gtk.ButtonPressEventArgs args)
{
if (args.Event.Window != this.tree.BinWindow) {
return;
}
Gtk.TreePath path = null;
Gtk.TreeViewColumn column = null;
tree.GetPathAtPos ((int)args.Event.X, (int)args.Event.Y,
out path, out column);
if (path == null)
return;
clickX = (int)args.Event.X;
clickY = (int)args.Event.Y;
switch (args.Event.Type) {
case Gdk.EventType.TwoButtonPress:
if (args.Event.Button != 1 || (args.Event.State &
(Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask)) != 0) {
break;
}
tree.Selection.UnselectAll ();
tree.Selection.SelectPath (path);
tree.ActivateRow (path, column);
break;
case Gdk.EventType.ButtonPress:
if (args.Event.Button == 3) {
Gtk.Menu menu = Tomboy.ActionManager.GetWidget (
"/MainWindowContextMenu") as Gtk.Menu;
PopupContextMenuAtLocation (menu,
(int)args.Event.X,
(int)args.Event.Y);
// Return true so that the base handler won't
// run, which causes the selection to change to
// the row that was right-clicked.
args.RetVal = true;
break;
}
if (tree.Selection.PathIsSelected (path) && (args.Event.State &
(Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask)) == 0) {
if (column != null && args.Event.Button == 1) {
Gtk.CellRenderer renderer = column.CellRenderers [0];
Gdk.Rectangle background_area = tree.GetBackgroundArea (path, column);
Gdk.Rectangle cell_area = tree.GetCellArea (path, column);
renderer.Activate (args.Event,
tree,
path.ToString (),
background_area,
cell_area,
Gtk.CellRendererState.Selected);
Gtk.TreeIter iter;
if (tree.Model.GetIter (out iter, path)) {
tree.Model.EmitRowChanged (path, iter);
}
}
args.RetVal = true;
}
break;
default:
args.RetVal = false;
break;
}
}