[GTK3] Fix displaying column popup menu

Right-clicking on column header resulted in this error:

    TypeError: could not convert type EventButton to GdkEvent required for parameter 0

The following fixes and cleans up the issue:
- Move the signal creation to the class, using the __gsignals__ dict.
- Replace `Event` with `object` since we are passing an EventButton as
Gtk3 no longer accepts it as an Event.
- Replace deprecated menu `popup()` with `popup_at_pointer()` which also
fixes a critical gdk error when using `popup()`.
This commit is contained in:
Calum Lind 2018-09-19 11:07:52 +01:00 committed by Calum Lind
parent 92a048625a
commit 366b10f07b
1 changed files with 8 additions and 9 deletions

View File

@ -12,18 +12,11 @@ from __future__ import unicode_literals
import logging
from gi.repository import GObject, Gtk
from gi.repository.Gdk import Event # pylint: disable=ungrouped-imports
from gi.repository.GObject import TYPE_NONE, SignalFlags, signal_new
from deluge.common import decode_bytes
from deluge.common import PY2, decode_bytes
from .common import load_pickled_state_file, save_pickled_state_file
# FIXME: ?
signal_new(
'button-press-event', Gtk.TreeViewColumn, SignalFlags.RUN_LAST, TYPE_NONE, (Event,)
)
log = logging.getLogger(__name__)
@ -87,6 +80,12 @@ class ListView(object):
Most of the code of this class comes from Quod Libet (http://www.sacredchao.net/quodlibet)
"""
__gsignals__ = {
'button-press-event'
if not PY2
else b'button-press-event': (GObject.SIGNAL_RUN_LAST, None, (object,))
}
def __init__(self, title=None, cell_renderer=None, **args):
""" Constructor, see Gtk.TreeViewColumn """
Gtk.TreeViewColumn.__init__(self, title, cell_renderer, **args)
@ -356,7 +355,7 @@ class ListView(object):
def on_treeview_header_right_clicked(self, column, event):
if event.button == 3:
self.menu.popup(None, None, None, None, event.button, event.get_time())
self.menu.popup_at_pointer()
def register_checklist_menu(self, menu):
"""Register a checklist menu with the listview. It will automatically