EOFError [Ran out of input] in Clipboard (#411)

[EOFError: Ran out of input] for Clipboard when you drag and
drop the bolded lines in selected tabs of Person Edit

Attempt to drag and drop any of the "bolded lines" in the Events or
Names tabs into the clipboard window. The unbolded lines drag and drop
ok.

Fixes #8788.
This commit is contained in:
Josip 2017-06-04 20:08:27 +02:00 committed by Nick Hall
parent e01a8602b6
commit bf634ee8e8

View File

@ -1314,54 +1314,57 @@ class ClipboardListView:
# Just select the first match. # Just select the first match.
wrapper_class = self._target_type_to_wrapper_class_map[ wrapper_class = self._target_type_to_wrapper_class_map[
str(possible_wrappers[0])] str(possible_wrappers[0])]
o = wrapper_class(self.dbstate, sel_data) try:
if title: o = wrapper_class(self.dbstate, sel_data)
o._title = title if title:
if value: o._title = title
o._value = value if value:
if dbid: o._value = value
o._dbid = dbid if dbid:
if dbname: o._dbid = dbid
o._dbname = dbname if dbname:
o._dbname = dbname
# If the wrapper object is a subclass of ClipDropList then # If the wrapper object is a subclass of ClipDropList then
# the drag data was a list of objects and we need to decode # the drag data was a list of objects and we need to decode
# all of them. # all of them.
if isinstance(o,ClipDropList): if isinstance(o,ClipDropList):
o_list = o.get_objects() o_list = o.get_objects()
else:
o_list = [o]
for o in o_list:
if o.__class__.DRAG_TARGET is None:
continue
data = [o.__class__.DRAG_TARGET.drag_type, o, None,
o._type, o._value, o._dbid, o._dbname]
contains = model_contains(model, data)
if ((context.action if hasattr(context, "action") else context.get_actions())
!= Gdk.DragAction.MOVE) and contains:
continue
drop_info = widget.get_dest_row_at_pos(x, y)
if drop_info:
path, position = drop_info
node = model.get_iter(path)
if (position == Gtk.TreeViewDropPosition.BEFORE
or position == Gtk.TreeViewDropPosition.INTO_OR_BEFORE):
model.insert_before(node, data)
else:
model.insert_after(node, data)
else: else:
model.append(data) o_list = [o]
for o in o_list:
if o.__class__.DRAG_TARGET is None:
continue
data = [o.__class__.DRAG_TARGET.drag_type, o, None,
o._type, o._value, o._dbid, o._dbname]
contains = model_contains(model, data)
if ((context.action if hasattr(context, "action") else context.get_actions())
!= Gdk.DragAction.MOVE) and contains:
continue
drop_info = widget.get_dest_row_at_pos(x, y)
if drop_info:
path, position = drop_info
node = model.get_iter(path)
if (position == Gtk.TreeViewDropPosition.BEFORE
or position == Gtk.TreeViewDropPosition.INTO_OR_BEFORE):
model.insert_before(node, data)
else:
model.insert_after(node, data)
else:
model.append(data)
# FIXME: there is one bug here: if you multi-select and drop # FIXME: there is one bug here: if you multi-select and drop
# on self, then it moves the first, and copies the rest. # on self, then it moves the first, and copies the rest.
if ((context.action if hasattr(context, "action") else context.get_actions()) == if ((context.action if hasattr(context, "action") else context.get_actions()) ==
Gdk.DragAction.MOVE): Gdk.DragAction.MOVE):
context.finish(True, True, time) context.finish(True, True, time)
# remember time for double drop workaround. # remember time for double drop workaround.
self._previous_drop_time = realTime self._previous_drop_time = realTime
return o_list return o_list
except EOFError:
return None
# proxy methods to provide access to the real widget functions. # proxy methods to provide access to the real widget functions.