From: Aiwota Programmer Date: Fri, 10 Apr 2009 17:36:32 +0000 (+0900) Subject: key press events (up, down, page up, page down, home, end) are handled X-Git-Url: http://git.sourceforge.jp/view?p=fukui-no-namari%2Ffukui-no-namari.git;a=commitdiff_plain;h=91da6453db2301573ce5ff1550f66f8faa62fdaf;hp=b8349ab8107af1c480c5e7de4301f51457da4576 key press events (up, down, page up, page down, home, end) are handled in threadview. --- diff --git a/src/FukuiNoNamari/thread_view.py b/src/FukuiNoNamari/thread_view.py index 23f151a..bdb4804 100644 --- a/src/FukuiNoNamari/thread_view.py +++ b/src/FukuiNoNamari/thread_view.py @@ -19,6 +19,7 @@ import pygtk pygtk.require('2.0') import gtk import pango +import gobject from FukuiNoNamariExt import thread_view_extend @@ -473,12 +474,21 @@ class ThreadView(gtk.HBox): def __init__(self): gtk.HBox.__init__(self, False, 0) self.drawingarea = gtk.DrawingArea() + self.drawingarea.set_property("can_focus", True) + + def set_focus(): + top = self.drawingarea.get_toplevel() + if top.get_property("type") == gtk.WINDOW_TOPLEVEL: + top.set_focus(self.drawingarea) + gobject.idle_add(set_focus) + self.vscrollbar = gtk.VScrollbar() self.pack_start(self.drawingarea) self.pack_start(self.vscrollbar, expand=False) self.adjustment = self.vscrollbar.get_adjustment() self.drawingarea.add_events( + gtk.gdk.KEY_PRESS_MASK | gtk.gdk.SCROLL_MASK | gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_PRESS_MASK | @@ -500,6 +510,8 @@ class ThreadView(gtk.HBox): "button-release-event", self.on_drawingarea_button_release_event) self.drawingarea.connect( "style-set", self.on_drawingarea_style_set) + self.drawingarea.connect( + "key-press-event", self.on_drawingarea_key_press_event) self.vscrollbar.connect( "value-changed", self.on_vscrollbar_value_changed) @@ -923,3 +935,29 @@ class ThreadView(gtk.HBox): for layout in self.res_layout_list: layout.recalc_char_widths() self.wrap_relayout() + + def on_drawingarea_key_press_event(self, widget, event, data=None): + if event.type is not gtk.gdk.KEY_PRESS: + return + + if event.keyval in (gtk.keysyms.Up, gtk.keysyms.Down, + gtk.keysyms.Page_Up, gtk.keysyms.Page_Down, + gtk.keysyms.Home): + value = self.vscrollbar.get_value() + if event.keyval == gtk.keysyms.Up: + step_increment = self.adjustment.get_property("step-increment") + value = value - step_increment + elif event.keyval == gtk.keysyms.Down: + step_increment = self.adjustment.get_property("step-increment") + value = value + step_increment + elif event.keyval == gtk.keysyms.Page_Up: + step_increment = self.adjustment.get_property("page-increment") + value = value - step_increment + elif event.keyval == gtk.keysyms.Page_Down: + step_increment = self.adjustment.get_property("page-increment") + value = value + step_increment + elif event.keyval == gtk.keysyms.Home: + value = 0 + self.jump(value) + elif event.keyval == gtk.keysyms.End: + self.jump_to_the_end()