From 510a96615da4b2511e08da2d7a16e77e1b58a1b5 Mon Sep 17 00:00:00 2001
From: Sebastian Koslowski <koslowski@kit.edu>
Date: Tue, 15 Oct 2013 21:57:29 +0200
Subject: filter-based block tree search

---
 grc/gui/DrawingArea.py | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

(limited to 'grc/gui/DrawingArea.py')

diff --git a/grc/gui/DrawingArea.py b/grc/gui/DrawingArea.py
index 64be4d3ea6..1313e90420 100644
--- a/grc/gui/DrawingArea.py
+++ b/grc/gui/DrawingArea.py
@@ -51,7 +51,8 @@ class DrawingArea(gtk.DrawingArea):
             gtk.gdk.POINTER_MOTION_MASK | \
             gtk.gdk.BUTTON_RELEASE_MASK | \
             gtk.gdk.LEAVE_NOTIFY_MASK | \
-            gtk.gdk.ENTER_NOTIFY_MASK
+            gtk.gdk.ENTER_NOTIFY_MASK | \
+            gtk.gdk.FOCUS_CHANGE_MASK
         )
         #setup drag and drop
         self.drag_dest_set(gtk.DEST_DEFAULT_ALL, DND_TARGETS, gtk.gdk.ACTION_COPY)
@@ -59,9 +60,11 @@ class DrawingArea(gtk.DrawingArea):
         #setup the focus flag
         self._focus_flag = False
         self.get_focus_flag = lambda: self._focus_flag
-        def _handle_focus_event(widget, event, focus_flag): self._focus_flag = focus_flag
-        self.connect('leave-notify-event', _handle_focus_event, False)
-        self.connect('enter-notify-event', _handle_focus_event, True)
+        def _handle_notify_event(widget, event, focus_flag): self._focus_flag = focus_flag
+        self.connect('leave-notify-event', _handle_notify_event, False)
+        self.connect('enter-notify-event', _handle_notify_event, True)
+        self.set_can_focus(True)
+        self.connect('focus-out-event', self._handle_focus_lost_event)
 
     def new_pixmap(self, width, height): return gtk.gdk.Pixmap(self.window, width, height, -1)
     def get_pixbuf(self):
@@ -83,6 +86,7 @@ class DrawingArea(gtk.DrawingArea):
         """
         Forward button click information to the flow graph.
         """
+        self.grab_focus()
         self.ctrl_mask = event.state & gtk.gdk.CONTROL_MASK
         if event.button == 1: self._flow_graph.handle_mouse_selector_press(
             double_click=(event.type == gtk.gdk._2BUTTON_PRESS),
@@ -133,3 +137,8 @@ class DrawingArea(gtk.DrawingArea):
         gc = self.window.new_gc()
         self._flow_graph.draw(gc, self._pixmap)
         self.window.draw_drawable(gc, self._pixmap, 0, 0, 0, 0, -1, -1)
+
+    def _handle_focus_lost_event(self, widget, event):
+        self._flow_graph.unselect()
+        self._flow_graph.update_selected()
+        self._flow_graph.queue_draw()
\ No newline at end of file
-- 
cgit v1.2.3