@@ -1154,7 +1154,8 @@ def __init__(self, view, dbstate, uistate):
1154
1154
self .bold_size = self .norm_size = 0 # font sizes to send to dot
1155
1155
1156
1156
# setup drag and drop
1157
- self .dnd = DragAndDrop (self .get_widget (), self .dbstate )
1157
+ self .dnd = DragAndDrop (self .canvas , self .dbstate )
1158
+ self .canvas .connect ("drag-begin" , self .del_click_events )
1158
1159
1159
1160
def add_popover (self , widget , container ):
1160
1161
"""
@@ -1474,8 +1475,6 @@ def populate(self, active_person):
1474
1475
if self .uistate .window .get_window ().is_visible ():
1475
1476
process_pending_events ()
1476
1477
1477
- self .dnd .stop ()
1478
-
1479
1478
self .clear ()
1480
1479
self .active_person_handle = active_person
1481
1480
@@ -1606,7 +1605,8 @@ def button_press(self, item, _target, event):
1606
1605
return False
1607
1606
1608
1607
button = event .get_button ()[1 ]
1609
- if button == 1 or button == 2 :
1608
+ if button in (1 , 2 ):
1609
+ self .dnd .enable_dnd (False )
1610
1610
window = self .canvas .get_parent ().get_window ()
1611
1611
window .set_cursor (Gdk .Cursor .new (Gdk .CursorType .FLEUR ))
1612
1612
self ._last_x = event .x_root
@@ -1626,14 +1626,14 @@ def button_release(self, item, target, event):
1626
1626
"""
1627
1627
Exit from scroll mode when button release.
1628
1628
"""
1629
- self .dnd .stop ()
1630
1629
button = event .get_button ()[1 ]
1631
1630
if ((button == 1 or button == 2 ) and
1632
1631
event .type == getattr (Gdk .EventType , "BUTTON_RELEASE" )):
1633
1632
1634
1633
self .motion_notify_event (item , target , event )
1635
1634
self .canvas .get_parent ().get_window ().set_cursor (None )
1636
1635
self ._in_move = False
1636
+ self .dnd .enable_dnd (True )
1637
1637
return True
1638
1638
return False
1639
1639
@@ -1655,29 +1655,6 @@ def motion_notify_event(self, _item, _target, event):
1655
1655
(event .y_root - self ._last_y ) * scale_coef )
1656
1656
self .vadjustment .set_value (new_y )
1657
1657
return True
1658
-
1659
- if not (event .type == Gdk .EventType .MOTION_NOTIFY ):
1660
- return False
1661
-
1662
- if self .dnd .is_ready ():
1663
- # start drag when cursor moved more then 5
1664
- # to separate it from simple click
1665
- if ((abs (self ._last_x - event .x_root ) > 5 )
1666
- or (abs (self ._last_y - event .y_root ) > 5 )):
1667
- self .uistate .set_busy_cursor (False )
1668
- # Remove all single click events
1669
- for click_item in self .click_events :
1670
- if not click_item .is_destroyed ():
1671
- GLib .source_remove (click_item .get_id ())
1672
- self .click_events .clear ()
1673
-
1674
- # translate to drag_widget coords
1675
- scale_coef = self .canvas .get_scale ()
1676
- x = self ._last_x * scale_coef - self .hadjustment .get_value ()
1677
- y = self ._last_y * scale_coef - self .vadjustment .get_value ()
1678
-
1679
- self .dnd .start_drag (x , y , event )
1680
-
1681
1658
return False
1682
1659
1683
1660
def set_zoom (self , value ):
@@ -1688,6 +1665,15 @@ def set_zoom(self, value):
1688
1665
self .view ._config .set ('interface.graphview-scale' , value )
1689
1666
self .canvas .set_scale (value / self .transform_scale )
1690
1667
1668
+ def del_click_events (self , * args ):
1669
+ """
1670
+ Remove all single click events.
1671
+ """
1672
+ for click_item in self .click_events :
1673
+ if not click_item .is_destroyed ():
1674
+ GLib .source_remove (click_item .get_id ())
1675
+ self .click_events .clear ()
1676
+
1691
1677
def select_node (self , item , target , event ):
1692
1678
"""
1693
1679
Perform actions when a node is clicked.
@@ -1704,11 +1690,7 @@ def select_node(self, item, target, event):
1704
1690
1705
1691
# perform double click on node by left mouse button
1706
1692
if event .type == getattr (Gdk .EventType , "DOUBLE_BUTTON_PRESS" ):
1707
- # Remove all single click events
1708
- for click_item in self .click_events :
1709
- if not click_item .is_destroyed ():
1710
- GLib .source_remove (click_item .get_id ())
1711
- self .click_events .clear ()
1693
+ self .del_click_events ()
1712
1694
if button == 1 and node_class == 'node' :
1713
1695
GLib .idle_add (self .actions .edit_person , None , handle )
1714
1696
return True
@@ -1719,11 +1701,8 @@ def select_node(self, item, target, event):
1719
1701
if event .type != getattr (Gdk .EventType , "BUTTON_PRESS" ):
1720
1702
return False
1721
1703
1722
- if button == 1 and node_class : # left mouse
1723
- # set drag mode, it will be applied on motion event
1724
- self .dnd .set_ready (node_class , handle )
1725
- self ._last_x = event .x_root
1726
- self ._last_y = event .y_root
1704
+ if button == 1 and node_class in ('node' , 'familynode' ):
1705
+ self .dnd .set_target (node_class , handle )
1727
1706
1728
1707
if button == 1 and node_class == 'node' : # left mouse
1729
1708
if handle == self .active_person_handle :
0 commit comments