Switching from a quick and dirty callback to using python signal stuff
authorEd Page <epage@Dulcinea.(none)>
Thu, 16 Apr 2009 03:41:29 +0000 (22:41 -0500)
committerEd Page <epage@Dulcinea.(none)>
Thu, 16 Apr 2009 03:41:29 +0000 (22:41 -0500)
src/gtk_toolbox.py

index 210ce71..fada4ed 100644 (file)
@@ -32,9 +32,9 @@ class ContextHandler(object):
        HOLD_TIMEOUT = 1000
        MOVE_THRESHHOLD = 10
 
-       def __init__(self, actionWidget, activationTarget = coroutines.null_sink()):
+       def __init__(self, actionWidget, eventTarget = coroutines.null_sink()):
                self._actionWidget = actionWidget
-               self._activationTarget = activationTarget
+               self._eventTarget = eventTarget
 
                self._actionPressId = None
                self._actionReleaseId = None
@@ -64,7 +64,7 @@ class ContextHandler(object):
                        widgetPosition[0] + position[0],
                        widgetPosition[1] + position[1],
                )
-               self._activationTarget.send((self._actionWidget, responsePosition))
+               self._eventTarget.send((self._actionWidget, responsePosition))
 
        def _clear(self):
                if self._holdTimerId is not None:
@@ -304,7 +304,9 @@ class MessageBox2(gtk.MessageDialog):
 
 class PopupCalendar(object):
 
-       def __init__(self, parent):
+       def __init__(self, parent, eventTarget = coroutines.null_sink()):
+               self._eventTarget = eventTarget
+
                self.__calendar = gtk.Calendar()
                self.__calendar.connect("day-selected-double-click", self._on_date_select)
 
@@ -314,8 +316,6 @@ class PopupCalendar(object):
                self.__popupWindow.set_transient_for(parent)
                self.__popupWindow.set_modal(True)
 
-               self.callback = lambda: None
-
        def get_date(self):
                year, month, day = self.__calendar.get_date()
                month += 1 # Seems to be 0 indexed
@@ -326,10 +326,7 @@ class PopupCalendar(object):
 
        def _on_date_select(self, *args):
                self.__popupWindow.hide()
-               self.callback()
-
-       def callback(self):
-               pass
+               self._eventTarget.send((self, self.get_date()))
 
 
 class EditTaskDialog(object):
@@ -349,7 +346,7 @@ class EditTaskDialog(object):
                self._addButton = widgetTree.get_widget("edit-commitEditTaskButton")
                self._cancelButton = widgetTree.get_widget("edit-cancelEditTaskButton")
 
-               self._popupCalendar = PopupCalendar(self._dialog)
+               self._popupCalendar = PopupCalendar(self._dialog, coroutines.func_sink(self._update_duedate))
 
        def enable(self, todoManager):
                self._populate_projects(todoManager)
@@ -360,11 +357,7 @@ class EditTaskDialog(object):
                self._addButton.connect("clicked", self._on_add_clicked)
                self._cancelButton.connect("clicked", self._on_cancel_clicked)
 
-               self._popupCalendar.callback = self._update_duedate
-
        def disable(self):
-               self._popupCalendar.callback = lambda: None
-
                self._pasteTaskNameButton.disconnect("clicked", self._on_name_paste)
                self._dueDateProperties.disconnect("clicked", self._on_choose_duedate)
                self._clearDueDate.disconnect("clicked", self._on_clear_duedate)
@@ -469,8 +462,8 @@ class EditTaskDialog(object):
                else:
                        return str(index)
 
-       def _update_duedate(self):
-               date = self._popupCalendar.get_date()
+       def _update_duedate(self, eventData):
+               widget, date = eventData
                time = datetime.time()
                dueDate = datetime.datetime.combine(date, time)