From 02e112dab1b5dd5ab2c134b8790d32dd1883fac0 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Tue, 15 Mar 2005 10:20:10 +0000
Subject: [PATCH] another status is possible: connecting remove some ugly hack
 for autoconnection

---
 plugins/gtkgui/config.py        |  4 +--
 plugins/gtkgui/dialogs.py       | 44 ++++++++-------------------------
 plugins/gtkgui/gtkgui.glade     |  4 ---
 plugins/gtkgui/gtkgui.py        |  5 ++--
 plugins/gtkgui/roster_window.py | 36 +++++++++++++--------------
 5 files changed, 32 insertions(+), 61 deletions(-)

diff --git a/plugins/gtkgui/config.py b/plugins/gtkgui/config.py
index e7c5805195..e5310e5384 100644
--- a/plugins/gtkgui/config.py
+++ b/plugins/gtkgui/config.py
@@ -1214,7 +1214,7 @@ class Account_modification_window:
 			Warning_dialog(_('You must first create your account before editing your information'))
 			return
 		jid = self.xml.get_widget('jid_entry').get_text()
-		if not self.plugin.connected[self.account]:
+		if self.plugin.connected[self.account] < 2:
 			Warning_dialog(_('You must be connected to edit your information'))
 			return
 		if not self.plugin.windows[self.account]['infos'].has_key('vcard'):
@@ -1555,7 +1555,7 @@ class agent_browser_window:
 						self.join_button.set_sensitive(True)
 		
 	def __init__(self, plugin, account):
-		if not plugin.connected[account]:
+		if plugin.connected[account] < 2:
 			Warning_dialog(_("You must be connected to view Agents"))
 			return
 		xml = gtk.glade.XML(GTKGUI_GLADE, 'agent_browser_window', APP)
diff --git a/plugins/gtkgui/dialogs.py b/plugins/gtkgui/dialogs.py
index c4b53a2921..b1d1619c35 100644
--- a/plugins/gtkgui/dialogs.py
+++ b/plugins/gtkgui/dialogs.py
@@ -150,7 +150,7 @@ class vcard_information_window:
 		return vcard
 
 	def on_publish_button_clicked(self, widget):
-		if not self.plugin.connected[self.account]:
+		if self.plugin.connected[self.account] < 2:
 			Warning_dialog(_("You must be connected to publish your informations"))
 			return
 		vcard = self.make_vcard()
@@ -163,7 +163,7 @@ class vcard_information_window:
 		self.plugin.send('VCARD', self.account, vcard)
 
 	def on_retrieve_button_clicked(self, widget):
-		if self.plugin.connected[self.account]:
+		if self.plugin.connected[self.account] > 1:
 			self.plugin.send('ASK_VCARD', self.account, self.jid)
 		else:
 			Warning_dialog(_('You must be connected to get your informations'))
@@ -212,6 +212,8 @@ class Passphrase_dialog:
 	"""Class for Passphrase dialog"""
 	def run(self):
 		"""Wait for OK button to be pressed and return passphrase/password"""
+		if self.autoconnect:
+			gtk.gdk.threads_enter()
 		rep = self.window.run()
 		if rep == gtk.RESPONSE_OK:
 			passphrase = self.passphrase_entry.get_text()
@@ -220,35 +222,9 @@ class Passphrase_dialog:
 		save_passphrase_checkbutton = self.xml.\
 			get_widget('save_passphrase_checkbutton')
 		self.window.destroy()
-		return passphrase, save_passphrase_checkbutton.get_active()
-
-	def on_passphrase_dialog_key_press_event(self, widget, event):
-		if event.keyval == gtk.keysyms.Return:
-			if self.autoconnect:
-				self.on_ok_button_clicked(widget)
-			else:
-				self.window.response(gtk.RESPONSE_OK)
-
-	def on_ok_button_clicked(self, widget):
-		if self.autoconnect:
-			self.passphrase = self.passphrase_entry.get_text()
-			gtk.main_quit()
-	
-	def on_cancel_button_clicked(self, widget):
-		if self.autoconnect:
-			gtk.main_quit()
-	
-	def get_pass(self):
-		self.autoconnect = 0
-		save_passphrase_checkbutton = self.xml.\
-			get_widget('save_passphrase_checkbutton')
-		self.window.destroy()
-		return self.passphrase, save_passphrase_checkbutton.get_active()
-		
-	def on_passphrase_dialog_destroy(self, widget=None):
-		"""close window"""
 		if self.autoconnect:
-			gtk.main_quit()
+			gtk.gdk.threads_leave()
+		return passphrase, save_passphrase_checkbutton.get_active()
 
 	def __init__(self, labeltext, checkbuttontext, autoconnect=0):
 		self.xml = gtk.glade.XML(GTKGUI_GLADE, 'passphrase_dialog', APP)
@@ -411,7 +387,7 @@ class add_contact_window:
 		self.old_uid_value = uid.split('@')[0]
 		
 	def __init__(self, plugin, account, jid=None):
-		if not plugin.connected[account]:
+		if plugin.connected[account] < 2:
 			Warning_dialog(_('You must be connected to add a contact'))
 			return
 		self.plugin = plugin
@@ -587,7 +563,7 @@ class join_groupchat_window:
 		widget.get_toplevel().destroy()
 
 	def __init__(self, plugin, account, server='', room = ''):
-		if not plugin.connected[account]:
+		if plugin.connected[account] < 2:
 			Warning_dialog(_('You must be connected to join a group chat'))
 			return
 		self.plugin = plugin
@@ -631,7 +607,7 @@ class New_message_dialog:
 		widget.get_toplevel().destroy()
 
 	def __init__(self, plugin, account):
-		if not plugin.connected[account]:
+		if plugin.connected[account] < 2:
 			Warning_dialog(_('You must be connected to send a message to a contact'))
 			return
 		self.plugin = plugin
@@ -665,7 +641,7 @@ class Change_password_dialog:
 		return message
 
 	def __init__(self, plugin, account):
-		if not plugin.connected[account]:
+		if plugin.connected[account] < 2:
 			Warning_dialog(_('You must be connected to change your password'))
 			return
 		self.plugin = plugin
diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade
index ae84823ec1..5ef419d216 100644
--- a/plugins/gtkgui/gtkgui.glade
+++ b/plugins/gtkgui/gtkgui.glade
@@ -7567,8 +7567,6 @@ Custom</property>
   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
   <property name="has_separator">True</property>
-  <signal name="key_press_event" handler="on_passphrase_dialog_key_press_event" last_modification_time="Wed, 02 Mar 2005 10:37:49 GMT"/>
-  <signal name="destroy" handler="on_passphrase_dialog_destroy" last_modification_time="Wed, 02 Mar 2005 10:36:32 GMT"/>
 
   <child internal-child="vbox">
     <widget class="GtkVBox" id="dialog-vbox4">
@@ -7591,7 +7589,6 @@ Custom</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
 	      <property name="focus_on_click">True</property>
 	      <property name="response_id">-6</property>
-	      <signal name="clicked" handler="on_cancel_button_clicked" last_modification_time="Wed, 02 Mar 2005 10:33:28 GMT"/>
 	    </widget>
 	  </child>
 
@@ -7606,7 +7603,6 @@ Custom</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
 	      <property name="focus_on_click">True</property>
 	      <property name="response_id">-5</property>
-	      <signal name="clicked" handler="on_ok_button_clicked" last_modification_time="Wed, 02 Mar 2005 10:33:19 GMT"/>
 	    </widget>
 	  </child>
 	</widget>
diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py
index 533fe7796f..31123eb839 100644
--- a/plugins/gtkgui/gtkgui.py
+++ b/plugins/gtkgui/gtkgui.py
@@ -831,7 +831,8 @@ class plugin:
 		for a in self.accounts.keys():
 			self.windows[a] = {'infos': {}, 'chats': {}, 'gc': {}}
 			self.queues[a] = {}
-			self.connected[a] = 0
+			self.connected[a] = 0 #0->offline 1->connecting 2->online 3->away
+										#4->xa 5->dnd 6->invisible
 			self.nicks[a] = self.accounts[a]['name']
 			self.sleeper_state[a] = 0	#0:don't use sleeper for this account
 												#1:online and use sleeper
@@ -877,7 +878,7 @@ class plugin:
 		self.init_regex()
 
 		gtk.gdk.threads_enter()
-		self.autoconnect()
+		gobject.timeout_add(100, self.autoconnect)
 		gtk.main()
 		gtk.gdk.threads_leave()
 
diff --git a/plugins/gtkgui/roster_window.py b/plugins/gtkgui/roster_window.py
index a1918fe76e..5de175656b 100644
--- a/plugins/gtkgui/roster_window.py
+++ b/plugins/gtkgui/roster_window.py
@@ -108,7 +108,8 @@ class roster_window:
 		model = self.tree.get_model()
 		if self.get_account_iter(account):
 			return
-		statuss = ['offline', 'online', 'away', 'xa', 'dnd', 'invisible']
+		statuss = ['offline', 'connecting', 'online', 'away', 'xa', 'dnd',\
+			'invisible']
 		status = statuss[self.plugin.connected[account]]
 		model.append(None, (self.pixbufs[status], account, 'account', account,\
 			account, False))
@@ -558,7 +559,7 @@ class roster_window:
 		item = gtk.MenuItem(_('_New message'))
 		menu.append(item)
 		item.connect("activate", self.on_new_message_menuitem_activate, account)
-		if not self.plugin.connected[account]:
+		if self.plugin.connected[account] < 2:
 			item.set_sensitive(False)
 		
 		menu.popup(None, None, None, event.button, event.time)
@@ -662,28 +663,27 @@ class roster_window:
 
 	def send_status(self, account, status, txt, autoconnect=0):
 		if status != 'offline':
-			if not self.plugin.connected[account]:
+			if self.plugin.connected[account] < 2:
 				model = self.tree.get_model()
 				accountIter = self.get_account_iter(account)
 				if accountIter:
 					model.set_value(accountIter, 0, self.pixbufs['connecting'])
+				self.plugin.connected[account] = 1
 				self.plugin.systray.set_status('connecting')
 
 			save_pass = 0
 			if self.plugin.accounts[account].has_key('savepass'):
 				save_pass = self.plugin.accounts[account]['savepass']
-			if not save_pass and not self.plugin.connected[account]:
+			if not save_pass and self.plugin.connected[account] < 2:
 				passphrase = ''
 				w = Passphrase_dialog(_('Enter your password for account %s') \
 					% account, 'Save password', autoconnect)
-				if autoconnect:
-					gtk.main()
-					passphrase, save = w.get_pass()
-				else:
-					passphrase, save = w.run()
+				passphrase, save = w.run()
 				if passphrase == -1:
 					if accountIter:
 						model.set_value(accountIter, 0, self.pixbufs['offline'])
+					self.plugin.connected[account] = 0
+					self.plugin.systray.set_status('offline')
 					self.set_cb()
 					return
 				self.plugin.send('PASSPHRASE', account, passphrase)
@@ -697,7 +697,7 @@ class roster_window:
 				save_gpg_pass = self.plugin.accounts[account]['savegpgpass']
 			if self.plugin.accounts[account].has_key('keyid'):
 				keyid = self.plugin.accounts[account]['keyid']
-			if keyid and not self.plugin.connected[account] and \
+			if keyid and self.plugin.connected[account] < 2 and \
 				self.plugin.config['usegpg']:
 				if save_gpg_pass:
 					passphrase = self.plugin.accounts[account]['gpgpassword']
@@ -706,11 +706,7 @@ class roster_window:
 					w = Passphrase_dialog(\
 						_('Enter GPG key passphrase for account %s') % account, \
 						'Save passphrase', autoconnect)
-					if autoconnect:
-						gtk.main()
-						passphrase, save = w.get_pass()
-					else:
-						passphrase, save = w.run()
+					passphrase, save = w.run()
 					if passphrase == -1:
 						passphrase = ''
 					if save:
@@ -768,7 +764,7 @@ class roster_window:
 	
 	def set_cb(self):
 		#table to change index in plugin.connected to index in combobox
-		table = {0:5, 1:0, 2:1, 3:2, 4:3, 5:4}
+		table = {0:5, 1:5, 2:0, 3:1, 4:2, 5:3, 6:4}
 		maxi = 0
 		if len(self.plugin.connected.values()):
 			maxi = max(self.plugin.connected.values())
@@ -777,7 +773,8 @@ class roster_window:
 		self.cb.handler_block(self.id_signal_cb)
 		self.cb.set_active(table[maxi])
 		self.cb.handler_unblock(self.id_signal_cb)
-		statuss = ['offline', 'online', 'away', 'xa', 'dnd', 'invisible']
+		statuss = ['offline', 'connecting', 'online', 'away', 'xa', 'dnd',\
+			'invisible']
 		self.plugin.systray.set_status(statuss[maxi])
 		image = self.pixbufs[statuss[maxi]]
 		if image.get_storage_type() == gtk.IMAGE_ANIMATION:
@@ -794,7 +791,8 @@ class roster_window:
 		accountIter = self.get_account_iter(account)
 		if accountIter:
 			model.set_value(accountIter, 0, self.pixbufs[status])
-		statuss = ['offline', 'online', 'away', 'xa', 'dnd', 'invisible']
+		statuss = ['offline', 'connecting', 'online', 'away', 'xa', 'dnd',\
+			'invisible']
 		if status == 'offline':
 			for jid in self.contacts[account]:
 				luser = self.contacts[account][jid]
@@ -848,7 +846,7 @@ class roster_window:
 		autopopup = self.plugin.config['autopopup']
 		autopopupaway = self.plugin.config['autopopupaway']
 		if (autopopup == 0 or ( not autopopupaway and \
-			self.plugin.connected[account] > 1)) and not \
+			self.plugin.connected[account] > 2)) and not \
 			self.plugin.windows[account]['chats'].has_key(jid):
 			#We save it in a queue
 			if not self.plugin.queues[account].has_key(jid):
-- 
GitLab