Author: asterix
Date: 2007-01-23 21:32:43 +0100 (Tue, 23 Jan 2007)
New Revision: 7888
Modified:
branches/gajim_0.11/ChangeLog
branches/gajim_0.11/Changelog
branches/gajim_0.11/data/glade/advanced_configuration_window.glade
branches/gajim_0.11/data/glade/atom_entry_window.glade
branches/gajim_0.11/data/glade/preferences_window.glade
branches/gajim_0.11/data/glade/profile_window.glade
branches/gajim_0.11/data/glade/service_discovery_window.glade
branches/gajim_0.11/src/adhoc_commands.py
branches/gajim_0.11/src/common/connection.py
branches/gajim_0.11/src/common/connection_handlers.py
branches/gajim_0.11/src/common/helpers.py
branches/gajim_0.11/src/common/optparser.py
branches/gajim_0.11/src/common/passwords.py
branches/gajim_0.11/src/config.py
branches/gajim_0.11/src/conversation_textview.py
branches/gajim_0.11/src/disco.py
branches/gajim_0.11/src/gtkgui_helpers.py
branches/gajim_0.11/src/profile_window.py
branches/gajim_0.11/src/remote_control.py
Log:
merge fixes from trunk
Modified: branches/gajim_0.11/ChangeLog
===================================================================
--- branches/gajim_0.11/ChangeLog 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/ChangeLog 2007-01-23 20:32:43 UTC (rev 7888)
@@ -1,3 +1,13 @@
+Gajim 0.11.1 (XX February 2007)
+ * Fixes in gajim-remote and the way XMPP URI are handled
+ * Fix Idle under Windows
+ * Fix Gajim under non-ascii languages Windows
+ * Fix International Domain Name usage
+ * Fix when removing active privacy list
+ * Fix problem with adhoc command and multi-step forms
+ * KDE integration for XMPP URI
+ * Support of XEP-0202 (Entity Time)
+
Gajim 0.11 (19 December 2006)
* New build system, using GNU autotools. See README.html
* Support for link-local messaging via Zeroconf using Avahi (XEP-0174)
Modified: branches/gajim_0.11/Changelog
===================================================================
--- branches/gajim_0.11/Changelog 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/Changelog 2007-01-23 20:32:43 UTC (rev 7888)
@@ -1,4 +1,13 @@
-Gajim 0.11 (XX December 2006)
+Gajim 0.11.1 (XX February 2007)
+ * Fixes in gajim-remote and the way XMPP URI are handled
+ * Fix Idle under Windows
+ * Fix Gajim under non-ascii languages Windows
+ * Fix when removing active privacy list
+ * Fix problem with adhoc command and multi-step forms
+ * KDE integration for XMPP URI
+ * Support of XEP-0202 (Entity Time)
+
+Gajim 0.11 (19 December 2006)
* New build system, using GNU autotools. See README.html
* Support for link-local messaging via Zeroconf using Avahi (XEP-0174)
* Automatically connect and disconnect to accounts according to network availability (if Network Manager is present)
Modified: branches/gajim_0.11/data/glade/advanced_configuration_window.glade
===================================================================
--- branches/gajim_0.11/data/glade/advanced_configuration_window.glade 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/data/glade/advanced_configuration_window.glade 2007-01-23 20:32:43 UTC (rev 7888)
@@ -93,7 +93,7 @@
<widget class="GtkScrolledWindow" id="scrolledwindow36">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
Modified: branches/gajim_0.11/data/glade/atom_entry_window.glade
===================================================================
--- branches/gajim_0.11/data/glade/atom_entry_window.glade 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/data/glade/atom_entry_window.glade 2007-01-23 20:32:43 UTC (rev 7888)
@@ -17,6 +17,7 @@
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
<child>
<widget class="GtkVBox" id="vbox112">
@@ -157,7 +158,7 @@
<child>
<widget class="GtkLabel" id="feed_tagline_label">
<property name="visible">True</property>
- <property name="label" translatable="yes"><small>Romeo and Juliet</small></property>
+ <property name="label"><small>Romeo and Juliet</small></property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -184,7 +185,7 @@
<child>
<widget class="GtkLabel" id="last_modified_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">2003-12-13T18:30:02Z</property>
+ <property name="label">2003-12-13T18:30:02Z</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -218,7 +219,7 @@
<child>
<widget class="GtkLabel" id="feed_title_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Old stories</property>
+ <property name="label">Old stories</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -255,7 +256,7 @@
<child>
<widget class="GtkLabel" id="entry_title_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Soliloquy</property>
+ <property name="label">Soliloquy</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
Modified: branches/gajim_0.11/data/glade/preferences_window.glade
===================================================================
--- branches/gajim_0.11/data/glade/preferences_window.glade 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/data/glade/preferences_window.glade 2007-01-23 20:32:43 UTC (rev 7888)
@@ -489,7 +489,7 @@
<widget class="GtkHBox" id="hbox3024">
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">0</property>
+ <property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="label387">
@@ -544,7 +544,7 @@
<widget class="GtkHBox" id="hbox2947">
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">6</property>
+ <property name="spacing">5</property>
<child>
<widget class="GtkEventBox" id="eventbox5">
@@ -564,7 +564,7 @@
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
- <property name="xpad">0</property>
+ <property name="xpad">1</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
Modified: branches/gajim_0.11/data/glade/profile_window.glade
===================================================================
--- branches/gajim_0.11/data/glade/profile_window.glade 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/data/glade/profile_window.glade 2007-01-23 20:32:43 UTC (rev 7888)
@@ -16,6 +16,7 @@
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
<signal name="key_press_event" handler="on_profile_window_key_press_event" last_modification_time="Fri, 08 Sep 2006 11:39:24 GMT"/>
<signal name="destroy" handler="on_profile_window_destroy" last_modification_time="Fri, 08 Sep 2006 11:39:32 GMT"/>
@@ -990,41 +991,6 @@
</child>
<child>
- <widget class="GtkButton" id="PHOTO_button">
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="button_press_event" handler="on_PHOTO_button_press_event" last_modification_time="Sun, 10 Sep 2006 10:44:01 GMT"/>
-
- <child>
- <widget class="GtkEventBox" id="PHOTO_eventbox3">
- <property name="visible">True</property>
- <property name="visible_window">False</property>
- <property name="above_child">False</property>
-
- <child>
- <widget class="GtkImage" id="PHOTO_image">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">4</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="x_options"></property>
- <property name="y_options">expand</property>
- </packing>
- </child>
-
- <child>
<widget class="GtkLabel" id="label58">
<property name="visible">True</property>
<property name="label" translatable="yes">Avatar:</property>
@@ -1051,6 +1017,71 @@
<property name="y_options"></property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="PHOTO_button">
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="button_press_event" handler="on_PHOTO_button_press_event" last_modification_time="Sun, 10 Sep 2006 10:44:01 GMT"/>
+
+ <child>
+ <widget class="GtkEventBox" id="PHOTO_eventbox3">
+ <property name="visible">True</property>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkImage" id="PHOTO_image">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="NOPHOTO_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Click to set your avatar</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="button_press_event" handler="on_PHOTO_button_press_event" last_modification_time="Tue, 23 Jan 2007 12:25:27 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"></property>
+ <property name="y_options">expand</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="tab_expand">False</property>
Modified: branches/gajim_0.11/data/glade/service_discovery_window.glade
===================================================================
--- branches/gajim_0.11/data/glade/service_discovery_window.glade 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/data/glade/service_discovery_window.glade 2007-01-23 20:32:43 UTC (rev 7888)
@@ -351,9 +351,34 @@
</child>
<child>
- <widget class="GtkHButtonBox" id="action_buttonbox">
+ <widget class="GtkLabel" id="label363">
<property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="action_buttonbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
@@ -368,11 +393,17 @@
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_close_button_clicked" last_modification_time="Sat, 26 Mar 2005 15:05:59 GMT"/>
</widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">True</property>
+ <property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
Modified: branches/gajim_0.11/src/adhoc_commands.py
===================================================================
--- branches/gajim_0.11/src/adhoc_commands.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/adhoc_commands.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -442,7 +442,11 @@
# no commands => no commands stage
# commands => command selection stage
- items = response.getTag('query').getTags('item')
+ query = response.getTag('query')
+ if query:
+ items = query.getTags('item')
+ else:
+ items = []
if len(items)==0:
self.commandlist = []
self.stage4()
Modified: branches/gajim_0.11/src/common/connection.py
===================================================================
--- branches/gajim_0.11/src/common/connection.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/common/connection.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -342,8 +342,10 @@
self._hosts = [ {'host': h, 'port': p, 'prio': 10, 'weight': 10} ]
self._hostname = hostname
if use_srv:
- # add request for srv query to the resolve, on result '_on_resolve' will be called
- gajim.resolver.resolve('_xmpp-client._tcp.' + h.encode('utf-8'), self._on_resolve)
+ # add request for srv query to the resolve, on result '_on_resolve'
+ # will be called
+ gajim.resolver.resolve('_xmpp-client._tcp.' + helpers.idn_to_ascii(h),
+ self._on_resolve)
else:
self._on_resolve('', [])
Modified: branches/gajim_0.11/src/common/connection_handlers.py
===================================================================
--- branches/gajim_0.11/src/common/connection_handlers.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/common/connection_handlers.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -1324,7 +1324,7 @@
iq_obj = iq_obj.buildReply('result')
qp = iq_obj.setTag('time')
qp.setTagData('utc', strftime("%Y-%m-%dT%TZ", gmtime()))
- qp.setTagData('tzo', "%+03d:00"% (time.timezone/(60*60)))
+ qp.setTagData('tzo', "%+03d:00"% (-time.timezone/(60*60)))
self.connection.send(iq_obj)
raise common.xmpp.NodeProcessed
@@ -1386,7 +1386,10 @@
frm = helpers.get_full_jid_from_iq(msg)
jid = helpers.get_jid_from_iq(msg)
no_log_for = gajim.config.get_per('accounts', self.name,
- 'no_log_for').split()
+ 'no_log_for')
+ if not no_log_for:
+ no_log_for = ''
+ no_log_for = no_log_for.split()
encrypted = False
chatstate = None
encTag = msg.getTag('x', namespace = common.xmpp.NS_ENCRYPTED)
Modified: branches/gajim_0.11/src/common/helpers.py
===================================================================
--- branches/gajim_0.11/src/common/helpers.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/common/helpers.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -25,6 +25,7 @@
import select
import sha
from encodings.punycode import punycode_encode
+from encodings import idna
import gajim
from i18n import Q_
@@ -85,6 +86,14 @@
return prep(*decompose_jid(jidstring))
+def idn_to_ascii(host):
+ '''convert IDN (Internationalized Domain Names) to ACE (ASCII-compatible encoding)'''
+ labels = idna.dots.split(host)
+ converted_labels = []
+ for label in labels:
+ converted_labels.append(idna.ToASCII(label))
+ return ".".join(converted_labels)
+
def parse_resource(resource):
'''Perform stringprep on resource and return it'''
if resource:
Modified: branches/gajim_0.11/src/common/optparser.py
===================================================================
--- branches/gajim_0.11/src/common/optparser.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/common/optparser.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -372,6 +372,6 @@
def update_config_to_01101(self):
'''fill time_stamp from before_time and after_time'''
if self.old_values.has_key('before_time'):
- gajim.config.set('time_stamp', '%s%%H:%%M%s ' % (
+ gajim.config.set('time_stamp', '%s%%X%s ' % (
self.old_values['before_time'], self.old_values['after_time']))
gajim.config.set('version', '0.11.0.1')
Modified: branches/gajim_0.11/src/common/passwords.py
===================================================================
--- branches/gajim_0.11/src/common/passwords.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/common/passwords.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -18,17 +18,7 @@
USER_HAS_GNOMEKEYRING = False
USER_USES_GNOMEKEYRING = False
-if gajim.config.get('use_gnomekeyring'):
- try:
- import gnomekeyring
- except ImportError:
- pass
- else:
- USER_HAS_GNOMEKEYRING = True
- if gnomekeyring.is_available():
- USER_USES_GNOMEKEYRING = True
- else:
- USER_USES_GNOMEKEYRING = False
+gnomekeyring = None
class PasswordStorage(object):
def get_password(self, account_name):
@@ -102,6 +92,20 @@
def get_storage():
global storage
if storage is None: # None is only in first time get_storage is called
+ if gajim.config.get('use_gnomekeyring'):
+ global gnomekeyring
+ try:
+ import gnomekeyring
+ except ImportError:
+ pass
+ else:
+ global USER_HAS_GNOMEKEYRING
+ global USER_USES_GNOMEKEYRING
+ USER_HAS_GNOMEKEYRING = True
+ if gnomekeyring.is_available():
+ USER_USES_GNOMEKEYRING = True
+ else:
+ USER_USES_GNOMEKEYRING = False
if USER_USES_GNOMEKEYRING:
try:
storage = GnomePasswordStorage()
Modified: branches/gajim_0.11/src/config.py
===================================================================
--- branches/gajim_0.11/src/config.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/config.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -233,10 +233,8 @@
if gajim.config.get('print_time') == 'never':
self.xml.get_widget('time_never_radiobutton').set_active(True)
- self._set_sensitivity_for_before_after_time_widgets(False)
elif gajim.config.get('print_time') == 'sometimes':
self.xml.get_widget('time_sometimes_radiobutton').set_active(True)
- self._set_sensitivity_for_before_after_time_widgets(False)
else:
self.xml.get_widget('time_always_radiobutton').set_active(True)
@@ -696,26 +694,19 @@
def on_xhtml_checkbutton_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'ignore_incoming_xhtml')
- def _set_sensitivity_for_before_after_time_widgets(self, sensitive):
- self.xml.get_widget('time_stamp_label').set_sensitive(sensitive)
- self.xml.get_widget('time_stamp_textview').set_sensitive(sensitive)
-
def on_time_never_radiobutton_toggled(self, widget):
if widget.get_active():
gajim.config.set('print_time', 'never')
- self._set_sensitivity_for_before_after_time_widgets(False)
gajim.interface.save_config()
def on_time_sometimes_radiobutton_toggled(self, widget):
if widget.get_active():
gajim.config.set('print_time', 'sometimes')
- self._set_sensitivity_for_before_after_time_widgets(False)
gajim.interface.save_config()
def on_time_always_radiobutton_toggled(self, widget):
if widget.get_active():
gajim.config.set('print_time', 'always')
- self._set_sensitivity_for_before_after_time_widgets(True)
gajim.interface.save_config()
def update_text_tags(self):
@@ -2278,9 +2269,6 @@
# We pressed OK button of the DataFormWindow
if self.infos.has_key('registered'):
del self.infos['registered']
- else:
- gajim.interface.roster.add_transport_to_roster(self.account,
- self.service)
gajim.connections[self.account].register_agent(self.service,
self.infos, True) # True is for is_form
else:
@@ -2292,9 +2280,6 @@
del self.infos['instructions']
if self.infos.has_key('registered'):
del self.infos['registered']
- else:
- gajim.interface.roster.add_transport_to_roster(self.account,
- self.service)
gajim.connections[self.account].register_agent(self.service,
self.infos)
@@ -2990,9 +2975,9 @@
'.')
dialogs.ErrorDialog(pritext, sectext)
return
- server = widgets['server_comboboxentry'].child.get_text()
+ server = widgets['server_comboboxentry'].child.get_text().decode('utf-8')
savepass = widgets['save_password_checkbutton'].get_active()
- password = widgets['pass1_entry'].get_text()
+ password = widgets['pass1_entry'].get_text().decode('utf-8')
if not self.modify:
if password == '':
Modified: branches/gajim_0.11/src/conversation_textview.py
===================================================================
--- branches/gajim_0.11/src/conversation_textview.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/conversation_textview.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -246,6 +246,8 @@
before_img_iter.backward_char() # one char back (an image also takes one char)
buffer.apply_tag_by_name('focus-out-line', before_img_iter, end_iter)
+ self.allow_focus_out_line = False
+
# update the iter we hold to make comparison the next time
self.focus_out_end_iter_offset = buffer.get_end_iter().get_offset()
Modified: branches/gajim_0.11/src/disco.py
===================================================================
--- branches/gajim_0.11/src/disco.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/disco.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -47,6 +47,7 @@
import tooltips
import gtkgui_helpers
import groups
+import adhoc_commands
from common import gajim
from common import xmpp
@@ -986,6 +987,7 @@
self.tooltip = tooltips.ServiceDiscoveryTooltip()
self.register_button = None
self.join_button = None
+ self.execute_button = None
# Keep track of our treeview signals
self._view_signals = []
self._scroll_signal = None
@@ -1140,6 +1142,18 @@
def _add_actions(self):
AgentBrowser._add_actions(self)
+ self.execute_button = gtk.Button()
+ image = gtk.image_new_from_stock(gtk.STOCK_EXECUTE, gtk.ICON_SIZE_BUTTON)
+ label = gtk.Label(_('_Execute Command...'))
+ label.set_use_underline(True)
+ hbox = gtk.HBox()
+ hbox.pack_start(image, False, True, 6)
+ hbox.pack_end(label, True, True)
+ self.execute_button.add(hbox)
+ self.execute_button.connect('clicked', self.on_execute_button_clicked)
+ self.window.action_buttonbox.add(self.execute_button)
+ self.execute_button.show_all()
+
self.register_button = gtk.Button(label=_("Re_gister"),
use_underline=True)
self.register_button.connect('clicked', self.on_register_button_clicked)
@@ -1159,6 +1173,9 @@
self.join_button.show_all()
def _clean_actions(self):
+ if self.execute_button:
+ self.execute_button.destroy()
+ self.execute_button = None
if self.register_button:
self.register_button.destroy()
self.register_button = None
@@ -1178,6 +1195,15 @@
self._renderer.set_property('cell-background', bgcolor)
self.window.services_treeview.queue_draw()
+ def on_execute_button_clicked(self, widget = None):
+ '''When we want to execute a command:
+ open adhoc command window'''
+ model, iter = self.window.services_treeview.get_selection().get_selected()
+ if not iter:
+ return
+ service = model[iter][0].decode('utf-8')
+ adhoc_commands.CommandWindow(self.account, service)
+
def on_register_button_clicked(self, widget = None):
'''When we want to register an agent:
request information about registering with the agent and close the
@@ -1207,6 +1233,8 @@
self.window.destroy(chain = True)
def update_actions(self):
+ if self.execute_button:
+ self.execute_button.set_sensitive(False)
if self.register_button:
self.register_button.set_sensitive(False)
if self.browse_button:
@@ -1243,6 +1271,8 @@
def _update_actions(self, jid, node, identities, features, data):
AgentBrowser._update_actions(self, jid, node, identities, features, data)
+ if self.execute_button and xmpp.NS_COMMANDS in features:
+ self.execute_button.set_sensitive(True)
if self.register_button and xmpp.NS_REGISTER in features:
# We can register this agent
registered_transports = []
Modified: branches/gajim_0.11/src/gtkgui_helpers.py
===================================================================
--- branches/gajim_0.11/src/gtkgui_helpers.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/gtkgui_helpers.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -354,6 +354,7 @@
pixbufloader.close()
pixbuf = pixbufloader.get_pixbuf()
except gobject.GError: # 'unknown image format'
+ pixbufloader.close()
pixbuf = None
if want_type:
return None, None
Modified: branches/gajim_0.11/src/profile_window.py
===================================================================
--- branches/gajim_0.11/src/profile_window.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/profile_window.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -77,6 +77,10 @@
# Create Image for avatar button
image = gtk.Image()
self.xml.get_widget('PHOTO_button').set_image(image)
+ text_button = self.xml.get_widget('NOPHOTO_button')
+ # We use 2 buttons because some GTK theme don't show images in buttons
+ text_button.set_no_show_all(True)
+ text_button.hide()
self.xml.signal_autoconnect(self)
self.window.show_all()
@@ -104,7 +108,9 @@
button = self.xml.get_widget('PHOTO_button')
image = button.get_image()
image.set_from_pixbuf(None)
- button.set_label(_('Click to set your avatar'))
+ button.hide()
+ text_button = self.xml.get_widget('NOPHOTO_button')
+ text_button.show()
self.avatar_encoded = None
self.avatar_mime_type = None
@@ -152,7 +158,9 @@
button = self.xml.get_widget('PHOTO_button')
image = button.get_image()
image.set_from_pixbuf(pixbuf)
- button.set_label('')
+ button.show()
+ text_button = self.xml.get_widget('NOPHOTO_button')
+ text_button.hide()
self.avatar_encoded = base64.encodestring(data)
# returns None if unknown type
self.avatar_mime_type = mimetypes.guess_type(path_to_file)[0]
@@ -202,25 +210,27 @@
pass
def set_values(self, vcard):
+ button = self.xml.get_widget('PHOTO_button')
+ image = button.get_image()
+ text_button = self.xml.get_widget('NOPHOTO_button')
if not 'PHOTO' in vcard:
# set default image
- button = self.xml.get_widget('PHOTO_button')
- image = button.get_image()
image.set_from_pixbuf(None)
- button.set_label(_('Click to set your avatar'))
+ button.hide()
+ text_button.show()
for i in vcard.keys():
if i == 'PHOTO':
pixbuf, self.avatar_encoded, self.avatar_mime_type = \
get_avatar_pixbuf_encoded_mime(vcard[i])
- button = self.xml.get_widget('PHOTO_button')
- image = button.get_image()
if not pixbuf:
image.set_from_pixbuf(None)
- button.set_label(_('Click to set your avatar'))
+ button.hide()
+ text_button.show()
continue
pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard')
image.set_from_pixbuf(pixbuf)
- button.set_label('')
+ button.show()
+ text_button.hide()
continue
if i == 'ADR' or i == 'TEL' or i == 'EMAIL':
for entry in vcard[i]:
Modified: branches/gajim_0.11/src/remote_control.py
===================================================================
--- branches/gajim_0.11/src/remote_control.py 2007-01-23 20:31:25 UTC (rev 7887)
+++ branches/gajim_0.11/src/remote_control.py 2007-01-23 20:32:43 UTC (rev 7888)
@@ -394,11 +394,11 @@
'accounts', con.name, 'resource')))
return result
- @dbus.service.method(INTERFACE, in_signature='s', out_signature='a{ss}')
+ @dbus.service.method(INTERFACE, in_signature='s', out_signature='av')
def list_contacts(self, account):
'''list all contacts in the roster. If the first argument is specified,
then return the contacts for the specified account'''
- result = dbus.Array([], signature='s')
+ result = dbus.Array([], signature='a{sv}')
accounts = gajim.contacts.get_accounts()
if len(accounts) == 0:
return result