add pop-up right-click context menu to contents treeview with "Copy URL" menu item

This commit is contained in:
Josh Holtrop 2016-06-27 15:32:02 -04:00
parent 2dead0fb75
commit 162c3c84fb

View File

@ -5,7 +5,7 @@ import sys
import tempfile import tempfile
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk from gi.repository import Gtk, Gdk
from .version import VERSION from .version import VERSION
from .run_svn import run_svn from .run_svn import run_svn
from .cache_file import CacheFile from .cache_file import CacheFile
@ -18,6 +18,7 @@ class MainWindow(Gtk.Window):
self.current_url = None self.current_url = None
self.cache_file = CacheFile() self.cache_file = CacheFile()
self.directory_buttons = [] self.directory_buttons = []
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
if (self.cache_file["width"] is not None and if (self.cache_file["width"] is not None and
self.cache_file["height"] is not None): self.cache_file["height"] is not None):
@ -39,6 +40,7 @@ class MainWindow(Gtk.Window):
self.contents_treeview = Gtk.TreeView.new_with_model(self.contents_model) self.contents_treeview = Gtk.TreeView.new_with_model(self.contents_model)
self.contents_treeview.set_headers_visible(False) self.contents_treeview.set_headers_visible(False)
self.contents_treeview.connect("row-activated", self.__on_contents_treeview_row_activated) self.contents_treeview.connect("row-activated", self.__on_contents_treeview_row_activated)
self.contents_treeview.connect("button-release-event", self.__on_contents_treeview_button_press)
icon_renderer = Gtk.CellRendererPixbuf() icon_renderer = Gtk.CellRendererPixbuf()
column = Gtk.TreeViewColumn("Icon", icon_renderer, icon_name = 0) column = Gtk.TreeViewColumn("Icon", icon_renderer, icon_name = 0)
self.contents_treeview.append_column(column) self.contents_treeview.append_column(column)
@ -187,3 +189,17 @@ class MainWindow(Gtk.Window):
subprocess.run(["xdg-open", temp_fname]) subprocess.run(["xdg-open", temp_fname])
else: else:
sys.stderr.write("Unable to export file.\n") sys.stderr.write("Unable to export file.\n")
def __on_contents_treeview_button_press(self, widget, event):
if event.button == 3:
selected_iterator = self.contents_treeview.get_selection().get_selected()
if selected_iterator is not None and selected_iterator[1] is not None:
entry_name = selected_iterator[0].get_value(selected_iterator[1], 1)
entry_url = self.current_url + "/" + entry_name
self.popup_menu = Gtk.Menu()
mi = Gtk.MenuItem(label = "Copy URL")
handler = lambda widget: self.clipboard.set_text(entry_url, -1)
mi.connect("activate", handler)
self.popup_menu.append(mi)
self.popup_menu.show_all()
self.popup_menu.popup(None, None, None, None, event.button, event.time)