diff --git a/src/DbManager.py b/src/DbManager.py index 04f29285a..476027f8e 100644 --- a/src/DbManager.py +++ b/src/DbManager.py @@ -53,6 +53,7 @@ else: # GTK/Gnome modules # #------------------------------------------------------------------------- +import gobject import gtk from gtk import glade from gtk.gdk import ACTION_COPY @@ -99,6 +100,8 @@ STOCK_COL = 6 RCS_BUTTON = { True : _('Extract'), False : _('Archive') } +DOUBLE_CLICK_TIMEOUT = gtk.settings_get_default().get_property('gtk-double-click-time') + 100 + class CLIDbManager: """ Database manager without GTK functionality, allows users to create and @@ -302,7 +305,10 @@ class DbManager(CLIDbManager): self.__connect_signals() self.__build_interface() self._populate_model() - + + self.timer_on = False + self.selection_changed = False + def __connect_signals(self): """ Connects the signals to the buttons on the interface. @@ -330,12 +336,35 @@ class DbManager(CLIDbManager): treat a double click as if it was OK button press. However, we have to make sure that an item was selected first. """ + if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: + if not self.timer_on: + new_event = event.copy() + gobject.timeout_add(DOUBLE_CLICK_TIMEOUT, + self.__really_single_button_press, + new_event) + self.timer_on = True + if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + self.timer_on = False if self.connect.get_property('sensitive'): self.top.response(gtk.RESPONSE_OK) return True + return False + def __really_single_button_press(self, event): + if self.timer_on: + if not self.selection_changed: + self.name_renderer.set_property('editable', True) + self.dblist.emit('button-press-event', event) + self.name_renderer.set_property('editable', False) + + self.timer_on = False + + self.selection_changed = False + + return False + def __key_press(self, obj, event): """ Grab ENTER so it does not start editing the cell, but behaves @@ -349,9 +378,8 @@ class DbManager(CLIDbManager): return False def __selection_changed(self, selection): - """ - Called when the selection is changed in the TreeView. - """ + """Called when the selection is changed in the TreeView.""" + self.selection_changed = True self.__update_buttons(selection) def __update_buttons(self, selection): @@ -419,7 +447,7 @@ class DbManager(CLIDbManager): # build the database name column render = gtk.CellRendererText() - render.set_property('editable', True) + #render.set_property('editable', True) render.set_property('ellipsize', pango.ELLIPSIZE_END) render.connect('edited', self.__change_name) render.connect('editing-canceled', self.__stop_edit) @@ -430,7 +458,8 @@ class DbManager(CLIDbManager): self.column.set_resizable(True) self.column.set_min_width(275) self.dblist.append_column(self.column) - + self.name_renderer = render + # build the icon column render = gtk.CellRendererPixbuf() icon_column = gtk.TreeViewColumn(_('Status'), render,