diff --git a/src/config.py b/src/config.py index 2ddee4205..20b63463a 100644 --- a/src/config.py +++ b/src/config.py @@ -2254,7 +2254,6 @@ class RemoveAccountWindow: self.window.destroy() #---------- ManageBookmarksWindow class -------------# -#TODO: Find a good place to check if the input is valid (all neccessary fields filled out?) class ManageBookmarksWindow: def __init__(self, plugin): self.plugin = plugin @@ -2297,7 +2296,7 @@ class ManageBookmarksWindow: renderer = gtk.CellRendererText() column = gtk.TreeViewColumn('Bookmarks', renderer, text=1) self.view.append_column(column) - + self.selection = self.view.get_selection() self.selection.connect('changed', self.bookmark_selected) @@ -2318,7 +2317,17 @@ class ManageBookmarksWindow: self.xml.signal_autoconnect(self) self.window.show_all() - def on_manage_bookmarks_window_destroy(self, widget): + def on_bookmarks_treeview_button_press_event(self, widget, event): + (model, iter) = self.selection.get_selected() + if not iter: + #Removed a bookmark before + return + + if model.iter_parent(iter): + #The currently selected node is a bookmark + return not self.check_valid_bookmark(): + + def on_manage_bookmarks_window_destroy(self, widget, event): del self.plugin.windows['manage_bookmarks'] def on_add_bookmark_button_clicked(self,widget): @@ -2360,11 +2369,35 @@ class ManageBookmarksWindow: model.remove(iter) self.clear_fields() + def check_valid_bookmark(self): + ''' + Check if all neccessary fields are entered correctly. + ''' + (model, iter) = self.selection.get_selected() + + if not model.iter_parent(iter): + #Account data can't be changed + return + + if self.server_entry.get_text() == '' or self.room_entry.get_text() == '': + dialogs.ErrorDialog(_('This bookmark has invalid data.'), + _('Please be sure to fill out server and room fields \ + or remove this bookmark.')).get_response() + return False + + return True + def on_ok_button_clicked(self, widget): ''' Parse the treestore data into our new bookmarks array, then send the new bookmarks to the server. ''' + (model, iter) = self.selection.get_selected() + if iter and model.iter_parent(iter): + #bookmark selected, check it + if not self.check_valid_bookmark(): + return + for account in self.treestore: gajim.connections[account[1]].bookmarks = [] @@ -2374,12 +2407,11 @@ class ManageBookmarksWindow: #create the bookmark-dict bmdict = { 'name': bm[1], 'jid': bm[2], 'autojoin': autojoin, - 'password': bm[4], 'nick': bm[5] } - + 'password': bm[4], 'nick': bm[5] } + gajim.connections[account[1]].bookmarks.append(bmdict) gajim.connections[account[1]].store_bookmarks() - self.plugin.roster.make_menu() self.window.destroy() @@ -2396,7 +2428,7 @@ class ManageBookmarksWindow: #After removing the last bookmark for one account #this will be None, so we will just: return - + widgets = [ self.title_entry, self.nick_entry, self.room_entry, self.server_entry, self.pass_entry, self.autojoin_checkbutton ] @@ -2411,7 +2443,7 @@ class ManageBookmarksWindow: for field in widgets: field.set_sensitive(False) return - + #Fill in the data for childs self.title_entry.set_text(model.get_value(iter, 1)) room_jid = model.get_value(iter, 2) diff --git a/src/gtkgui.glade b/src/gtkgui.glade index 212e8d9c8..369aae3f4 100644 --- a/src/gtkgui.glade +++ b/src/gtkgui.glade @@ -13540,6 +13540,7 @@ the Jabber network.</property> <property name="skip_pager_hint">False</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <signal name="button_press_event" handler="on_manage_bookmarks_window_button_press_event" last_modification_time="Sun, 12 Jun 2005 15:52:20 GMT"/> <child> <widget class="GtkVBox" id="vbox86">