Skip to content

Commit

Permalink
GitHub #52: Pass through initial click-to-select to underlying edit mode
Browse files Browse the repository at this point in the history
  • Loading branch information
bgribble committed Mar 22, 2013
1 parent 15a7bd1 commit 29948d0
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 17 deletions.
15 changes: 14 additions & 1 deletion mfp/gui/input_manager.py
Expand Up @@ -14,6 +14,9 @@
from ..gui_slave import MFPGUI

class InputManager (object):
class InputNeedsRequeue (Exception):
pass

def __init__(self, window):
self.window = window
self.global_mode = None
Expand Down Expand Up @@ -158,5 +161,15 @@ def handle_event(self, stage, event):
self.pointer_obj_time = None
else:
return False
return self.handle_keysym(keysym)

retry_count = 0
while True:
try:
retry_count += 1
rv = self.handle_keysym(keysym)
except self.InputNeedsRequeue, e:
if retry_count < 5:
continue
else:
return False
return rv
6 changes: 0 additions & 6 deletions mfp/gui/modes/clickable.py
Expand Up @@ -28,12 +28,6 @@ def __init__(self, window, element, descrip):
self.bind("M1DOUBLEUP", self.unclick, "Send click up")
self.bind("M1TRIPLEUP", self.unclick, "Send click up")

def enable(self):
if (self.manager.pointer_obj is self.widget
and 1 in self.manager.keyseq.mouse_buttons):
self.clickstate = True
self.widget.clicked()

def disable(self):
if self.clickstate:
self.widget.unclicked()
Expand Down
1 change: 1 addition & 0 deletions mfp/gui/modes/patch_control.py
Expand Up @@ -39,6 +39,7 @@ def drag_start(self):
if self.manager.pointer_obj and self.manager.pointer_obj not in self.window.selected:
self.window.unselect_all()
self.window.select(self.manager.pointer_obj)
raise self.manager.InputNeedsRequeue()

self.drag_started = True
self.drag_start_x = self.manager.pointer_ev_x
Expand Down
19 changes: 9 additions & 10 deletions mfp/gui/modes/patch_edit.py
Expand Up @@ -182,6 +182,7 @@ def drag_start(self):
self.window.unselect_all()
self.window.select(self.manager.pointer_obj)
self.enable_selection_edit()
raise self.manager.InputNeedsRequeue()

self.drag_started = True
if (self.manager.pointer_obj is None
Expand Down Expand Up @@ -252,12 +253,10 @@ def drag_end(self):
def selbox_start(self, select_mode):
self.selbox_started = True

if (self.manager.pointer_obj is not None and
self.manager.pointer_obj not in self.window.selected):

if select_mode:
if (self.manager.pointer_obj is not None):
if self.manager.pointer_obj not in self.window.selected:
self.window.select(self.manager.pointer_obj)
else:
elif (not select_mode) and self.manager.pointer_obj in self.window.selected:
self.window.unselect(self.manager.pointer_obj)

if self.window.selected:
Expand All @@ -281,9 +280,6 @@ def selbox_motion(self, select_mode):
px = self.manager.pointer_ev_x
py = self.manager.pointer_ev_y

dx = px - self.drag_last_x
dy = py - self.drag_last_y

self.drag_last_x = px
self.drag_last_y = py

Expand All @@ -298,10 +294,12 @@ def selbox_motion(self, select_mode):
self.window.select(obj)
self.enable_selection_edit()
else:
if obj not in self.selbox_changed:
self.selbox_changed.append(obj)
if obj in self.window.selected:
if obj not in self.selbox_changed:
self.selbox_changed.append(obj)
self.window.unselect(obj)
else:
self.window.select(obj)

if not self.window.selected:
self.disable_selection_edit()
Expand All @@ -321,6 +319,7 @@ def selbox_motion(self, select_mode):

def selbox_end(self):
self.selbox_started = False
self.selbox_changed = []
self.window.hide_selection_box()
return True

Expand Down

0 comments on commit 29948d0

Please sign in to comment.